diff --git a/.github/workflows/check-proof-producer.yml b/.github/workflows/check-proof-producer.yml index 9ef37a30a1..c94ada3d90 100644 --- a/.github/workflows/check-proof-producer.yml +++ b/.github/workflows/check-proof-producer.yml @@ -233,8 +233,8 @@ jobs: always() && !cancelled() && (needs.build-and-generate-proofs.result == 'success' || needs.build-and-generate-proofs.result == 'skipped') && (needs.prepare-targets.result == 'success' || needs.prepare-targets.result == 'skipped') - uses: NilFoundation/evm-placeholder-verification/.github/workflows/reusable-verify-proofs.yml@2a0ef5fc67e97be8e3c7b59338cf9eecd030c57d + uses: NilFoundation/evm-placeholder-verification/.github/workflows/reusable-verify-proofs.yml@a68465f641680eccc43ebdae02810eeab0537954 with: artifact-name: ${{ needs.build-and-generate-proofs.outputs.artifact-name }} - evm-placeholder-verification-ref: 2a0ef5fc67e97be8e3c7b59338cf9eecd030c57d + evm-placeholder-verification-ref: a68465f641680eccc43ebdae02810eeab0537954 test-names: ${{ needs.prepare-targets.outputs.evm-targets }} diff --git a/.github/workflows/clang-linux-nix-check.yml b/.github/workflows/clang-linux-nix-check.yml index 861df096f3..a7ba3465c1 100644 --- a/.github/workflows/clang-linux-nix-check.yml +++ b/.github/workflows/clang-linux-nix-check.yml @@ -22,7 +22,7 @@ jobs: nix build -L .?#checks.x86_64-linux.crypto3-clang env: NIX_CONFIG: | - cores = 4 + cores = 16 - name: Run all checks # This includes cached crypto3 check from previous step. We don't limit cores in this part diff --git a/.github/workflows/clang-sanitizers-linux-nix-check.yml b/.github/workflows/clang-sanitizers-linux-nix-check.yml new file mode 100644 index 0000000000..edb3a12160 --- /dev/null +++ b/.github/workflows/clang-sanitizers-linux-nix-check.yml @@ -0,0 +1,37 @@ +name: Build and Test sanitizers on Linux with clang + +on: + workflow_call: + +jobs: + build-and-test: + name: "Build and test Linux with clang" + runs-on: [self-hosted, Linux, X64, aws_autoscaling] + continue-on-error: true + steps: + # https://github.com/actions/checkout/issues/1552 + - name: Clean up after previous checkout + run: chmod +w -R ${GITHUB_WORKSPACE}; rm -rf ${GITHUB_WORKSPACE}/*; + + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Run checks + run: | + nix build -L .?#checks.x86_64-linux.all-clang-sanitize + mkdir results + cp result/test-logs/*_test.xml results/ + env: + NIX_CONFIG: | + cores = 16 + + - name: Publish Test Results + uses: EnricoMi/publish-unit-test-result-action/linux@v2 + with: + check_name: "Sanitizers Test Results" + files: "results/*.xml" + comment_mode: ${{ github.event.pull_request.head.repo.fork && 'off' || 'always' }} # Don't create PR comment from fork runs + action_fail_on_inconclusive: true # fail, if no reports + diff --git a/.github/workflows/gcc-debug-proof-producer-nix-check.yml b/.github/workflows/gcc-debug-proof-producer-nix-check.yml new file mode 100644 index 0000000000..507588d98c --- /dev/null +++ b/.github/workflows/gcc-debug-proof-producer-nix-check.yml @@ -0,0 +1,23 @@ +name: Build and run on Linux Platforms + +on: + workflow_call: + +jobs: + build-and-run: + name: "Build proof-producer binary in debug mode" + runs-on: [self-hosted, Linux, X64, aws_autoscaling] + steps: + # https://github.com/actions/checkout/issues/1552 + - name: Clean up after previous checkout + run: chmod +w -R ${GITHUB_WORKSPACE}; rm -rf ${GITHUB_WORKSPACE}/*; + + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Build and run proof-producer in debug mode + run: | + nix run .#multi-threaded -- --help + nix run .#single-threaded -- --help diff --git a/.github/workflows/gcc-linux-nix-check.yml b/.github/workflows/gcc-linux-nix-check.yml index 99dfa285e0..a8e989e21f 100644 --- a/.github/workflows/gcc-linux-nix-check.yml +++ b/.github/workflows/gcc-linux-nix-check.yml @@ -22,17 +22,13 @@ jobs: nix build -L .?#checks.x86_64-linux.crypto3-gcc env: NIX_CONFIG: | - cores = 4 - + cores = 16 - name: Run all checks # This includes cached crypto3 check from previous step. We don't limit cores in this part run: | nix build -L .?#checks.x86_64-linux.all-gcc mkdir results cp result/test-logs/*_test.xml results/ - env: - NIX_CONFIG: | - cores = 16 - name: Publish Test Results uses: EnricoMi/publish-unit-test-result-action/linux@v2 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000000..eb3e81dec5 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,52 @@ +name: Nightly Testing + +on: + schedule: + - cron: '0 0 * * *' + +jobs: + test-linux-sanitizers: + name: Linux placeholder testing and sanitize with clang + uses: ./.github/workflows/clang-sanitizers-linux-nix-check.yml + if: | + always() && !cancelled() + secrets: inherit + + test-linux-proof-producer-debug-gcc: + name: Gcc debug proof-producer Linux testing + uses: ./.github/workflows/gcc-debug-proof-producer-nix-check.yml + if: | + always() && !cancelled() + secrets: inherit + + post-telemetry: + name: Post test results in Open Telemetry format + runs-on: [self-hosted, Linux, X64, aws_autoscaling] + needs: + - test-linux-sanitizers + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Post logs to Sig Noz + run: | + ls -l -a + nix build -L .?#checks.x86_64-linux.all-clang-sanitize + cat ./result/test-logs/test_errors.txt + export UndefinedBehaviorSanitizer=$(grep UndefinedBehaviorSanitizer result/test-logs/test_errors.txt | wc -l) + export AddressSanitizer=$(grep AddressSanitizer result/test-logs/test_errors.txt | wc -l) + export LeakSanitizer=$(grep LeakSanitizer result/test-logs/test_errors.txt | wc -l) + export OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true + python3 --version + sudo yum update -y + sudo yum install -y python3-pip + pip3 install -r requirements.txt + /home/ec2-user/.local/bin/opentelemetry-instrument \ + --traces_exporter console,otlp \ + --metrics_exporter console,otlp \ + --logs_exporter console,otlp \ + --service_name nightly-build \ + python3 ./parse_tests.py + diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index bf7232134d..38e7f61e4b 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -2,6 +2,7 @@ name: PR Testing on: pull_request: + merge_group: push: branches: - master @@ -16,14 +17,14 @@ concurrency: jobs: test-linux-gcc: - name: Linux placeholder testing with gcc + name: Gcc release full Linux testing uses: ./.github/workflows/gcc-linux-nix-check.yml if: | always() && !cancelled() secrets: inherit test-linux-clang: - name: Linux placeholder testing with clang + name: Clang release full Linux testing uses: ./.github/workflows/clang-linux-nix-check.yml if: | always() && !cancelled() @@ -42,4 +43,3 @@ jobs: if: | always() && !cancelled() secrets: inherit - diff --git a/.github/workflows/verify-circuit-proof.yml b/.github/workflows/verify-circuit-proof.yml index c8ff7d7954..140264f431 100644 --- a/.github/workflows/verify-circuit-proof.yml +++ b/.github/workflows/verify-circuit-proof.yml @@ -11,22 +11,19 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Configure - run: cd crypto3 && mkdir build && cd build && cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=TRUE -DBUILD_CRYPTO3_TESTS=TRUE -G Ninja + run: mkdir build && cd build && cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=TRUE -DBUILD_CRYPTO3_TESTS=TRUE -G Ninja shell: nix develop .#crypto3-tests --command bash -e {0} - name: Build - run: cd crypto3/build && ninja transpiler_evm_test + run: cd build && ninja transpiler_evm_test shell: nix develop .#crypto3-tests --command bash -e {0} - name: Execute - run: cd crypto3/build && ./libs/transpiler/test/transpiler_evm_test -- --save-proof-data + run: cd build && ./crypto3/libs/transpiler/test/transpiler_evm_test -- --save-proof-data shell: nix develop .#crypto3-tests --command bash -e {0} - cd crypto3 && eval "$configurePhase" - nix develop -c ninja transpiler_evm_test - nix develop -c ./libs/transpiler/test/transpiler_evm_test -- --save-proof-data - name: Publish Proofs uses: actions/upload-artifact@v4 with: name: proofs - path: crypto3/build/circuit* + path: build/circuit* if-no-files-found: error verify-proofs: @@ -34,7 +31,7 @@ jobs: needs: - produce-proofs if: needs.produce-proofs.result == 'success' - uses: NilFoundation/evm-placeholder-verification/.github/workflows/verify-proof.yml@e5a8dffd6b00d3c036c9b5c09c06b10515e4785c + uses: NilFoundation/evm-placeholder-verification/.github/workflows/verify-proof.yml@a68465f641680eccc43ebdae02810eeab0537954 with: - evm-placeholder-verification-ref: e5a8dffd6b00d3c036c9b5c09c06b10515e4785c + evm-placeholder-verification-ref: a68465f641680eccc43ebdae02810eeab0537954 diff --git a/.gitignore b/.gitignore index 6655d0051b..1230c719f2 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,10 @@ .*.lb *.csv +#protobuf generated files +*pb.h +*pb.cc + ## Intermediate documents: *.dvi *.xdv @@ -626,7 +630,6 @@ callgrind.* /*.c /*.cpp /*.h -/*.py /*.key /*.pem /*.der diff --git a/CMakeLists.txt b/CMakeLists.txt index 685a75d957..01bd799905 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,9 +8,11 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") add_compile_options (-fcolor-diagnostics) endif () -if(DEFINED CMAKE_BUILD_TYPE AND ${CMAKE_BUILD_TYPE} STREQUAL "Debug") +if(DEFINED CMAKE_BUILD_TYPE) + if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -ggdb") set(BOOST_FORCEINLINE "OFF") # improves debugging traces + endif() endif() option(SANITIZE "Build sanitizers" FALSE) @@ -19,12 +21,20 @@ if(${SANITIZE}) add_link_options(-fsanitize=undefined,address,leak) endif() +# Add dummy target for the more efficient reusing of precompiled headers +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generated-dummy.cpp) +add_library(crypto3_precompiled_headers STATIC ${CMAKE_CURRENT_BINARY_DIR}/generated-dummy.cpp) +set_target_properties(crypto3_precompiled_headers PROPERTIES + LINKER_LANGUAGE CXX + CXX_STANDARD 20 + CXX_STANDARD_REQUIRED TRUE +) add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/crypto3") -if ((${PARALLEL_CRYPTO3_ENABLE}) OR (${PROOF_PRODUCER_ENABLE}) OR (${ZKEVM_FRAMEWORK_ENABLE})) +if ((${PARALLEL_CRYPTO3_ENABLE}) OR (${PROOF_PRODUCER_ENABLE})) add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/parallel-crypto3") endif() -if ((${PROOF_PRODUCER_ENABLE}) OR (${ZKEVM_FRAMEWORK_ENABLE})) +if (${PROOF_PRODUCER_ENABLE}) add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/proof-producer") endif() if (${DEBUG_TOOLS_ENABLE}) diff --git a/crypto3.nix b/crypto3.nix index c9ef06990b..4881142cbd 100644 --- a/crypto3.nix +++ b/crypto3.nix @@ -6,11 +6,13 @@ boost, gdb, lldb, + mold, cmake_modules, enableDebugging, enableDebug ? false, runTests ? false, sanitize ? false, + benchmarkTests ? false, }: let inherit (lib) optional; @@ -32,19 +34,24 @@ in stdenv.mkDerivation { cmakeFlags = [ (if runTests then "-DBUILD_CRYPTO3_TESTS=TRUE" else "-DBUILD_CRYPTO3_TESTS=False") - (if enableDebug then "-DCMAKE_BUILD_TYPE=Debug" else "-DCMAKE_BUILD_TYPE=Release") (if sanitize then "-DSANITIZE=ON" else "-DSANITIZE=OFF") + (if benchmarkTests then "-DBUILD_CRYPTO3_BENCH_TESTS=ON" else "-DBUILD_CRYPTO3_BENCH_TESTS=OFF") "-G Ninja" ]; + cmakeBuildType = if enableDebug then "Debug" else "Release"; doCheck = runTests; # tests are inside crypto3-tests derivation checkPhase = '' # JUNIT file without explicit file name is generated after the name of the master test suite inside `CMAKE_CURRENT_SOURCE_DIR` export BOOST_TEST_LOGGER=JUNIT:HRF - cd crypto3 && ctest --verbose --output-on-failure -R && cd .. + cd crypto3 + # remove || true after all tests are fixed under clang-sanitizers check: + ctest --verbose --output-on-failure -R > test_errors.txt || true + cd .. mkdir -p ${placeholder "out"}/test-logs find .. -type f -name '*_test.xml' -exec cp {} ${placeholder "out"}/test-logs \; + cp crypto3/test_errors.txt ${placeholder "out"}/test-logs \ ''; shellHook = '' diff --git a/crypto3/CMakeLists.txt b/crypto3/CMakeLists.txt index c059585744..c206dfe0c3 100644 --- a/crypto3/CMakeLists.txt +++ b/crypto3/CMakeLists.txt @@ -6,7 +6,7 @@ # http://www.boost.org/LICENSE_1_0.txt #---------------------------------------------------------------------------# -cmake_minimum_required(VERSION 3.21) +cmake_minimum_required(VERSION 3.22 FATAL_ERROR) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") diff --git a/crypto3/benchmarks/CMakeLists.txt b/crypto3/benchmarks/CMakeLists.txt index c1f19f6dde..d0fa4ea992 100644 --- a/crypto3/benchmarks/CMakeLists.txt +++ b/crypto3/benchmarks/CMakeLists.txt @@ -40,7 +40,7 @@ macro(define_benchmark benchmark) set_target_properties(${full_name} PROPERTIES - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") @@ -49,6 +49,7 @@ macro(define_benchmark benchmark) target_compile_options(${full_name} PRIVATE "-fconstexpr-ops-limit=4294967295") endif() + target_precompile_headers(${full_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(BENCHMARK_NAMES @@ -59,9 +60,9 @@ set(BENCHMARK_NAMES "math/polynomial_dfs" "multiprecision/modular_adaptor_fixed" + "multiprecision/big_int" "zk/lpc" - "zk/pedersen" ) foreach(BENCHMARK_NAME ${BENCHMARK_NAMES}) diff --git a/crypto3/benchmarks/algebra/curves.cpp b/crypto3/benchmarks/algebra/curves.cpp index 67264be342..50c4e33253 100644 --- a/crypto3/benchmarks/algebra/curves.cpp +++ b/crypto3/benchmarks/algebra/curves.cpp @@ -113,7 +113,7 @@ void benchmark_curve_operations(std::string const& curve_name) return A *= B; }); - if constexpr (has_template_g2_type::value) { + if constexpr (has_type_g2_type::value) { using g2_type = typename curve_type::template g2_type<>; using g2_field = typename g2_type::field_type; diff --git a/crypto3/benchmarks/multiprecision/big_int.cpp b/crypto3/benchmarks/multiprecision/big_int.cpp new file mode 100644 index 0000000000..e3c975f645 --- /dev/null +++ b/crypto3/benchmarks/multiprecision/big_int.cpp @@ -0,0 +1,292 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Martun Karapetyan +// Copyright (c) 2024 Vasiliy Olekhov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE big_int_benchmark_test + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include + +using namespace nil::crypto3::multiprecision::literals; + +constexpr std::size_t Bits = 256; +using standart_number = nil::crypto3::multiprecision::big_uint; + +constexpr standart_number modulus_odd = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_big_uint256; +constexpr standart_number modulus_even = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e_big_uint256; + +using modular_number_ct_odd = nil::crypto3::multiprecision::montgomery_big_mod; +using modular_number_ct_even = nil::crypto3::multiprecision::big_mod; +using modular_number_rt_montgomery = nil::crypto3::multiprecision::montgomery_big_mod_rt; +using modular_number_rt = nil::crypto3::multiprecision::big_mod_rt; + +constexpr standart_number x = 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_big_uint256; +constexpr modular_number_ct_odd x_mod_ct_odd = x; +constexpr modular_number_ct_even x_mod_ct_even = x; +constexpr modular_number_rt_montgomery x_mod_rt_odd{x, modulus_odd}; +constexpr modular_number_rt x_mod_rt_even{x, modulus_even}; + +constexpr standart_number y = 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_big_uint256; +constexpr modular_number_ct_odd y_mod_ct_odd = y; +constexpr modular_number_ct_even y_mod_ct_even = y; +constexpr modular_number_rt_montgomery y_mod_rt_odd{y, modulus_odd}; +constexpr modular_number_rt y_mod_rt_even{y, modulus_even}; + +BOOST_AUTO_TEST_SUITE(runtime_odd_tests) + +// This directly calls montgomery mul from modular_ops.hpp. +BOOST_AUTO_TEST_CASE(montgomery_mul_perf_test) { + auto raw_base = x_mod_rt_odd.raw_base(); + auto mod_ops = x_mod_rt_odd.ops(); + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] montgomery mul (direct call)", + [&]() { + mod_ops.mul(raw_base, y_mod_rt_odd.raw_base()); + return raw_base; + }); + + std::cout << raw_base << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_sub_perf_test) { + auto x_modular = x_mod_rt_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] big_mod_subtract", + [&]() { + x_modular -= y_mod_rt_odd; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_add_perf_test) { + auto x_modular = x_mod_rt_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] big_mod_add", + [&]() { + x_modular += y_mod_rt_odd; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_mul_perf_test) { + auto x_modular = x_mod_rt_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] big_mod_multiply", + [&]() { + x_modular *= y_mod_rt_odd; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(compile_time_odd_tests) + +// This directly calls montgomery mul from modular_ops.hpp. +BOOST_AUTO_TEST_CASE(montgomery_mul_perf_test) { + auto raw_base = x_mod_ct_odd.raw_base(); + auto mod_ops = x_mod_ct_odd.ops(); + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][compile time] montgomery mul (direct call)", + [&]() { + mod_ops.mul(raw_base, y_mod_ct_odd.raw_base()); + return raw_base; + }); + + std::cout << raw_base << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_sub_perf_test) { + auto x_modular = x_mod_ct_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][compile time] big_mod_subtract", + [&]() { + x_modular -= y_mod_ct_odd; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_add_perf_test) { + auto x_modular = x_mod_ct_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][compile time] big_mod_add", + [&]() { + x_modular += y_mod_ct_odd; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_mul_perf_test) { + auto x_modular = x_mod_ct_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][compile time] big_mod_multiply", + [&]() { + x_modular *= y_mod_ct_odd; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(runtime_even_tests) + +// This directly calls barrett mul from modular_ops.hpp. +BOOST_AUTO_TEST_CASE(barrett_mul_perf_test) { + auto raw_base = x_mod_rt_even.raw_base(); + auto mod_ops = x_mod_rt_even.ops(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][runtime] barrett mul (direct call)", + [&]() { + mod_ops.mul(raw_base, y_mod_rt_even.raw_base()); + return raw_base; + }); + + std::cout << raw_base << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_sub_perf_test) { + auto x_modular = x_mod_rt_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][runtime] big_mod_subtract", + [&]() { + x_modular -= y_mod_rt_even; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_add_perf_test) { + auto x_modular = x_mod_rt_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][runtime] big_mod_add", + [&]() { + x_modular += y_mod_rt_even; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_mul_perf_test) { + auto x_modular = x_mod_rt_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][runtime] big_mod_multiply", + [&]() { + x_modular *= y_mod_rt_even; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(compile_time_even_tests) + +// This directly calls mul from modular_ops.hpp. +BOOST_AUTO_TEST_CASE(barrett_mul_perf_test) { + auto raw_base = x_mod_ct_even.raw_base(); + auto mod_ops = x_mod_ct_even.ops(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] barrett mul (direct call)", + [&]() { + mod_ops.mul(raw_base, y_mod_ct_even.raw_base()); + return raw_base; + }); + + std::cout << raw_base << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_sub_perf_test) { + auto x_modular = x_mod_ct_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] big_mod_subtract", + [&]() { + x_modular -= y_mod_ct_even; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_add_perf_test) { + auto x_modular = x_mod_ct_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] big_mod_add", + [&]() { + x_modular += y_mod_ct_even; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(big_mod_mul_perf_test) { + auto x_modular = x_mod_ct_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] big_mod_multiply", + [&]() { + x_modular *= y_mod_ct_even; + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/benchmarks/multiprecision/modular_adaptor_fixed.cpp b/crypto3/benchmarks/multiprecision/modular_adaptor_fixed.cpp index 8c3e8cb13d..1492522e47 100644 --- a/crypto3/benchmarks/multiprecision/modular_adaptor_fixed.cpp +++ b/crypto3/benchmarks/multiprecision/modular_adaptor_fixed.cpp @@ -7,6 +7,7 @@ // http://www.boost.org/LICENSE_1_0.txt //---------------------------------------------------------------------------// +#include "nil/crypto3/multiprecision/boost_backends/modular/modular_params.hpp" #define BOOST_TEST_MODULE modular_fixed_multiprecision_test #define TEST_CPP_INT @@ -29,14 +30,14 @@ #include -#include -#include -#include +#include +#include +#include -#include -#include +#include +#include -#include +#include #include @@ -44,34 +45,52 @@ using namespace boost::multiprecision; using boost::multiprecision::backends::cpp_int_modular_backend; using boost::multiprecision::backends::modular_adaptor; +using boost::multiprecision::backends::modular_params_ct; using boost::multiprecision::backends::modular_params_rt; +using Backend = cpp_int_modular_backend<256>; +using standart_number = boost::multiprecision::number; -BOOST_AUTO_TEST_SUITE(runtime_tests) +constexpr standart_number modulus_odd = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_cppui_modular256; +constexpr standart_number modulus_even = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e_cppui_modular256; +constexpr backends::modular_params params_odd{modulus_odd.backend()}; +constexpr backends::modular_params params_even{modulus_even.backend()}; + +using params_ct_odd = modular_params_ct; +using params_ct_even = modular_params_ct; +using params_rt = modular_params_rt; + +using modular_backend_ct_odd = modular_adaptor; +using modular_backend_ct_even = modular_adaptor; +using modular_backend_rt = modular_adaptor; + +using modular_number_ct_odd = boost::multiprecision::number; +using modular_number_ct_even = boost::multiprecision::number; +using modular_number_rt = boost::multiprecision::number; + +constexpr standart_number x = 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_cppui_modular256; +constexpr modular_number_ct_odd x_mod_ct_odd = modular_backend_ct_odd(x.backend()); +constexpr modular_number_ct_even x_mod_ct_even = modular_backend_ct_even(x.backend()); +constexpr modular_number_rt x_mod_rt_odd = modular_backend_rt(x.backend(), modulus_odd.backend()); +constexpr modular_number_rt x_mod_rt_even = modular_backend_rt(x.backend(), modulus_even.backend()); + +constexpr standart_number y = 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_cppui_modular256; +constexpr modular_number_ct_odd y_mod_ct_odd = modular_backend_ct_odd(y.backend()); +constexpr modular_number_ct_even y_mod_ct_even = modular_backend_ct_even(y.backend()); +constexpr modular_number_rt y_mod_rt_odd = modular_backend_rt(y.backend(), modulus_odd.backend()); +constexpr modular_number_rt y_mod_rt_even = modular_backend_rt(y.backend(), modulus_even.backend()); + +BOOST_AUTO_TEST_SUITE(runtime_odd_tests) // This directly calls montgomery_mul from modular_functions_fixed.hpp. -BOOST_AUTO_TEST_CASE(modular_adaptor_montgomery_mult_perf_test) { - using Backend = cpp_int_modular_backend<256>; - using standart_number = boost::multiprecision::number; - using params_safe_type = modular_params_rt; - using modular_backend = modular_adaptor; - using modular_number = boost::multiprecision::number; - constexpr standart_number modulus = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_cppui_modular256; - constexpr standart_number x_value = 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_cppui_modular256; - constexpr modular_number x(modular_backend(x_value.backend(), modulus.backend())); - auto x_modular = x.backend(); - - constexpr standart_number res_value = 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_cppui_modular256; - constexpr modular_number res(modular_backend( - res_value.backend(), modulus.backend())); - auto res_modular = res.backend(); - auto mod_object = x_modular.mod_data().get_mod_obj(); - auto base_data = x_modular.base_data(); - - nil::crypto3::bench::run_benchmark<>( - "montgomery_mul (direct call)", - [&]() { - mod_object.montgomery_mul(base_data, res_modular.base_data(), +BOOST_AUTO_TEST_CASE(montgomery_mul_perf_test) { + auto base_data = x_mod_rt_odd.backend().base_data(); + auto mod_object = x_mod_rt_odd.backend().mod_data().get_mod_obj(); + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] montgomery_mul (direct call)", + [&]() { + mod_object.montgomery_mul(base_data, y_mod_rt_odd.backend().base_data(), std::integral_constant::value>()); return base_data; }); @@ -82,24 +101,92 @@ BOOST_AUTO_TEST_CASE(modular_adaptor_montgomery_mult_perf_test) { BOOST_AUTO_TEST_CASE(modular_adaptor_backend_sub_perf_test) { using namespace boost::multiprecision::default_ops; - using Backend = cpp_int_modular_backend<256>; - using standart_number = boost::multiprecision::number; - using params_safe_type = modular_params_rt; - using modular_backend = modular_adaptor; - using modular_number = boost::multiprecision::number; - constexpr standart_number modulus = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_cppui_modular256; - constexpr standart_number x_value = 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_cppui_modular256; - constexpr modular_number x(modular_backend(x_value.backend(), modulus.backend())); - auto x_modular = x.backend(); + auto x_modular = x_mod_rt_odd.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] modular_adaptor_backend_subtract", + [&]() { + eval_subtract(x_modular, y_mod_rt_odd.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_add_perf_test) { + using namespace boost::multiprecision::default_ops; + + auto x_modular = x_mod_rt_odd.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] modular_adaptor_backend_add", + [&]() { + eval_add(x_modular, y_mod_rt_odd.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_mul_perf_test) { + auto x_modular = x_mod_rt_odd.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] modular_adaptor_backend_multiply", + [&]() { + eval_multiply(x_modular, y_mod_rt_odd.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_number_mul_perf_test) { + auto x = x_mod_rt_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][runtime] modular_adaptor_number_multiply", + [&]() { + x *= y_mod_rt_odd; + return x; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(compile_time_odd_tests) + +// This directly calls montgomery_mul from modular_functions_fixed.hpp. +BOOST_AUTO_TEST_CASE(montgomery_mul_perf_test) { + auto base_data = x_mod_ct_odd.backend().base_data(); + auto mod_object = x_mod_ct_odd.backend().mod_data().get_mod_obj(); + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][compile time] montgomery_mul (direct call)", + [&]() { + mod_object.montgomery_mul(base_data, y_mod_ct_odd.backend().base_data(), + std::integral_constant::value>()); + return base_data; + }); + + std::cout << base_data << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_sub_perf_test) { + using namespace boost::multiprecision::default_ops; - constexpr standart_number res_value = 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_cppui_modular256; - constexpr modular_number res(modular_backend(res_value.backend(), modulus.backend())); - auto res_modular = res.backend(); + auto x_modular = x_mod_ct_odd.backend(); nil::crypto3::bench::run_benchmark<>( - "modular_adaptor_backend_subtract", + "[odd modulus][compile time] modular_adaptor_backend_subtract", [&]() { - eval_subtract(x_modular, res_modular); + eval_subtract(x_modular, y_mod_ct_odd.backend()); return x_modular; }); @@ -110,24 +197,26 @@ BOOST_AUTO_TEST_CASE(modular_adaptor_backend_sub_perf_test) { BOOST_AUTO_TEST_CASE(modular_adaptor_backend_add_perf_test) { using namespace boost::multiprecision::default_ops; - using Backend = cpp_int_modular_backend<256>; - using standart_number = boost::multiprecision::number; - using params_safe_type = modular_params_rt; - using modular_backend = modular_adaptor; - using modular_number = boost::multiprecision::number; - constexpr standart_number modulus = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_cppui_modular256; - constexpr standart_number x_value = 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_cppui_modular256; - constexpr modular_number x(modular_backend(x_value.backend(), modulus.backend())); - auto x_modular = x.backend(); + auto x_modular = x_mod_ct_odd.backend(); - constexpr standart_number res_value = 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_cppui_modular256; - constexpr modular_number res(modular_backend(res_value.backend(), modulus.backend())); - auto res_modular = res.backend(); + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][compile time] modular_adaptor_backend_add", + [&]() { + eval_add(x_modular, y_mod_ct_odd.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_mul_perf_test) { + auto x_modular = x_mod_ct_odd.backend(); nil::crypto3::bench::run_benchmark<>( - "modular_adaptor_backend_add", + "[odd modulus][compile time] modular_adaptor_backend_multiply", [&]() { - eval_add(x_modular, res_modular); + eval_multiply(x_modular, y_mod_ct_odd.backend()); return x_modular; }); @@ -135,25 +224,48 @@ BOOST_AUTO_TEST_CASE(modular_adaptor_backend_add_perf_test) { std::cout << x_modular << std::endl; } -BOOST_AUTO_TEST_CASE(modular_adaptor_backend_mult_perf_test) { - using Backend = cpp_int_modular_backend<256>; - using standart_number = boost::multiprecision::number; - using params_safe_type = modular_params_rt; - using modular_backend = modular_adaptor; - using modular_number = boost::multiprecision::number; - constexpr standart_number modulus = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_cppui_modular256; - constexpr standart_number x_value = 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_cppui_modular256; - constexpr modular_number x(modular_backend(x_value.backend(), modulus.backend())); - auto x_modular = x.backend(); +BOOST_AUTO_TEST_CASE(modular_adaptor_number_mul_perf_test) { + auto x = x_mod_ct_odd; + + nil::crypto3::bench::run_benchmark<>( + "[odd modulus][compile time] modular_adaptor_number_multiply", + [&]() { + x *= y_mod_ct_odd; + return x; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() - constexpr standart_number res_value = 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_cppui_modular256; - constexpr modular_number res(modular_backend(res_value.backend(), modulus.backend())); - constexpr auto res_modular = res.backend(); +BOOST_AUTO_TEST_SUITE(runtime_even_tests) + +// This directly calls regular_mul from modular_functions_fixed.hpp. +BOOST_AUTO_TEST_CASE(barrett_mul_perf_test) { + auto base_data = x_mod_rt_even.backend().base_data(); + auto mod_object = x_mod_rt_even.backend().mod_data().get_mod_obj(); nil::crypto3::bench::run_benchmark<>( - "modular_adaptor_backend_multiply", + "[even modulus][runtime] regular_mul (direct call)", [&]() { - eval_multiply(x_modular, res_modular); + mod_object.regular_mul(base_data, y_mod_rt_even.backend().base_data()); + return base_data; + }); + + std::cout << base_data << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_sub_perf_test) { + using namespace boost::multiprecision::default_ops; + + auto x_modular = x_mod_rt_even.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][runtime] modular_adaptor_backend_subtract", + [&]() { + eval_subtract(x_modular, y_mod_rt_even.backend()); return x_modular; }); @@ -161,23 +273,43 @@ BOOST_AUTO_TEST_CASE(modular_adaptor_backend_mult_perf_test) { std::cout << x_modular << std::endl; } -BOOST_AUTO_TEST_CASE(modular_adaptor_number_mult_perf_test) { - using Backend = cpp_int_modular_backend<256>; - using standart_number = boost::multiprecision::number; - using params_safe_type = modular_params_rt; - using modular_backend = modular_adaptor; - using modular_number = boost::multiprecision::number; - constexpr standart_number modulus = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_cppui_modular256; - constexpr standart_number x_value = 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_cppui_modular256; - modular_number x(modular_backend(x_value.backend(), modulus.backend())); +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_add_perf_test) { + using namespace boost::multiprecision::default_ops; + + auto x_modular = x_mod_rt_even.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][runtime] modular_adaptor_backend_add", + [&]() { + eval_add(x_modular, y_mod_rt_even.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} - constexpr standart_number res_value = 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_cppui_modular256; - modular_number res(modular_backend(res_value.backend(), modulus.backend())); +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_mul_perf_test) { + auto x_modular = x_mod_rt_even.backend(); nil::crypto3::bench::run_benchmark<>( - "modular_adaptor_number_multiply", + "[even modulus][runtime] modular_adaptor_backend_multiply", [&]() { - x *= res; + eval_multiply(x_modular, y_mod_rt_even.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_number_mul_perf_test) { + auto x = x_mod_rt_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][runtime] modular_adaptor_number_multiply", + [&]() { + x *= y_mod_rt_even; return x; }); @@ -187,3 +319,81 @@ BOOST_AUTO_TEST_CASE(modular_adaptor_number_mult_perf_test) { BOOST_AUTO_TEST_SUITE_END() +BOOST_AUTO_TEST_SUITE(compile_time_even_tests) + +// This directly calls regular_mul from modular_functions_fixed.hpp. +BOOST_AUTO_TEST_CASE(barrett_mul_perf_test) { + auto base_data = x_mod_ct_even.backend().base_data(); + auto mod_object = x_mod_ct_even.backend().mod_data().get_mod_obj(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] regular_mul (direct call)", + [&]() { + mod_object.regular_mul(base_data, y_mod_ct_even.backend().base_data()); + return base_data; + }); + + std::cout << base_data << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_sub_perf_test) { + using namespace boost::multiprecision::default_ops; + + auto x_modular = x_mod_ct_even.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] modular_adaptor_backend_subtract", + [&]() { + eval_subtract(x_modular, y_mod_ct_even.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_add_perf_test) { + using namespace boost::multiprecision::default_ops; + + auto x_modular = x_mod_ct_even.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] modular_adaptor_backend_add", + [&]() { + eval_add(x_modular, y_mod_ct_even.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_backend_mul_perf_test) { + auto x_modular = x_mod_ct_even.backend(); + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] modular_adaptor_backend_multiply", + [&]() { + eval_multiply(x_modular, y_mod_ct_even.backend()); + return x_modular; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x_modular << std::endl; +} + +BOOST_AUTO_TEST_CASE(modular_adaptor_number_mul_perf_test) { + auto x = x_mod_ct_even; + + nil::crypto3::bench::run_benchmark<>( + "[even modulus][compile time] modular_adaptor_number_multiply", + [&]() { + x *= y_mod_ct_even; + return x; + }); + + // Print something so the whole computation is not optimized out. + std::cout << x << std::endl; +} + +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/benchmarks/zk/lpc.cpp b/crypto3/benchmarks/zk/lpc.cpp index 7f02f20dd1..77b8d440aa 100644 --- a/crypto3/benchmarks/zk/lpc.cpp +++ b/crypto3/benchmarks/zk/lpc.cpp @@ -135,11 +135,12 @@ void lpc_test_case(std::size_t steps) math::calculate_domain_set(extended_log, r); typename fri_type::params_type fri_params( - d - 1, - D, - generate_random_step_list(r, steps), + steps, r, - lambda + lambda, + 2, //expand_factor + true, // use_grinding + 12 // grinding_parameter ); using lpc_scheme_type = nil::crypto3::zk::commitments::lpc_commitment_scheme>; diff --git a/crypto3/benchmarks/zk/pedersen.cpp b/crypto3/benchmarks/zk/pedersen.cpp deleted file mode 100644 index d066c97c57..0000000000 --- a/crypto3/benchmarks/zk/pedersen.cpp +++ /dev/null @@ -1,109 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2024 Martun Karapetyan -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE pedersen_test - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(pedersen_test_suite) - -BOOST_AUTO_TEST_CASE(pedersen_long_test) { - - // setup - using curve_type = algebra::curves::bls12<381>; - using curve_group_type = curve_type::template g1_type<>; - using field_type = typename curve_type::scalar_field_type; - - constexpr static const int n = 2000000000; - constexpr static const int k = 1999999999; - static curve_group_type::value_type g = algebra::random_element(); - static curve_group_type::value_type h = algebra::random_element(); - while (g == h) { - h = algebra::random_element(); - } - - typedef typename zk::commitments::pedersen pedersen_type; - - typedef typename pedersen_type::proof_type proof_type; - typedef typename pedersen_type::params_type params_type; - - params_type params; - - params.n = n; - params.k = k; - params.g = g; - params.h = h; - - BOOST_CHECK(g != h); - BOOST_CHECK(n >= k); - BOOST_CHECK(k > 0); - - // commit - constexpr static const field_type::value_type w = field_type::value_type(300000000); - - // eval - proof_type proof = pedersen_type::proof_eval(params, w); - - // verify - BOOST_CHECK(pedersen_type::verify_eval(params, proof)); - - std::vector idx; - std::vector idx_base; - for (int i = 1; i <= n; ++i) { - idx_base.push_back(i); - } - std::random_device rd; - std::mt19937 gen(rd()); - std::shuffle(idx_base.begin(), idx_base.end(), gen); - for (int i = 0; i < k; ++i) { - idx.push_back(idx_base[i]); - } - - BOOST_CHECK(idx.size() >= k); - field_type::value_type secret = pedersen_type::message_eval(params, proof, idx); - BOOST_CHECK(w == secret); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/cmake/CheckSSE.cmake b/crypto3/cmake/CheckSSE.cmake index 562b6b17fa..f915edeaac 100644 --- a/crypto3/cmake/CheckSSE.cmake +++ b/crypto3/cmake/CheckSSE.cmake @@ -58,63 +58,6 @@ macro(check_sse) set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host") endif(SSE42_TRUE) - elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") - execute_process(COMMAND "/usr/bin/env -S sysctl -n machdep.cpu.features" OUTPUT_VARIABLE - CPUINFO) - - string(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" SSE_THERE "${CPUINFO}") - string(COMPARE EQUAL "SSE2" "${SSE_THERE}" SSE2_TRUE) - if(SSE2_TRUE) - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - else(SSE2_TRUE) - set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") - endif(SSE2_TRUE) - - string(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" SSE_THERE "${CPUINFO}") - string(COMPARE EQUAL "SSE3" "${SSE_THERE}" SSE3_TRUE) - if(SSE3_TRUE) - set(SSE3_FOUND true CACHE BOOL "SSE3 available on host") - else(SSE3_TRUE) - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - endif(SSE3_TRUE) - - string(REGEX REPLACE "^.*(SSSE3).*$" "\\1" SSE_THERE "${CPUINFO}") - string(COMPARE EQUAL "SSSE3" "${SSE_THERE}" SSSE3_TRUE) - if(SSSE3_TRUE) - set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host") - else(SSSE3_TRUE) - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - endif(SSSE3_TRUE) - - string(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" SSE_THERE "${CPUINFO}") - string(COMPARE EQUAL "SSE4.1" "${SSE_THERE}" SSE41_TRUE) - if(SSE41_TRUE) - set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host") - else(SSE41_TRUE) - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - endif(SSE41_TRUE) - - string(REGEX REPLACE "^.*(SSE4.2).*$" "\\1" SSE_THERE "${CPUINFO}") - string(COMPARE EQUAL "SSE4.2" "${SSE_THERE}" SSE42_TRUE) - if(SSE42_TRUE) - set(SSE4_2_FOUND true CACHE BOOL "SSE4.2 available on host") - else(SSE42_TRUE) - set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host") - endif(SSE42_TRUE) - - elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") - # TODO - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host") - else(CMAKE_SYSTEM_NAME MATCHES "Linux") - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - set(SSE4_2_FOUND false CACHE BOOL "SSE4.2 available on host") endif(CMAKE_SYSTEM_NAME MATCHES "Linux") if(CMAKE_COMPILER_IS_GNUCXX) diff --git a/crypto3/libs/algebra/CMakeLists.txt b/crypto3/libs/algebra/CMakeLists.txt index 2f4058de27..3c603a7c86 100644 --- a/crypto3/libs/algebra/CMakeLists.txt +++ b/crypto3/libs/algebra/CMakeLists.txt @@ -33,7 +33,9 @@ target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTER $) target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - ${CMAKE_WORKSPACE_NAME}::multiprecision) + ${CMAKE_WORKSPACE_NAME}::multiprecision + Boost::random +) include(CMTest) add_tests(test) diff --git a/crypto3/libs/algebra/docs/implementation.md b/crypto3/libs/algebra/docs/implementation.md index d8696978b3..b40b2feb76 100644 --- a/crypto3/libs/algebra/docs/implementation.md +++ b/crypto3/libs/algebra/docs/implementation.md @@ -130,7 +130,7 @@ For example, `extension_params` structure keeps all the parameters needed for fi ### Field Element Algorithms ### {#field_element_algorithms} Field element corresponds an element of the field and has all the needed methods and overloaded arithmetic operators. The corresponding -algorithms are also defined here. As the backend they use now Boost::multiprecision, but it can be easily changed. +algorithms are also defined here. As the backend they use nil::crypto3::multiprecision. ## Elliptic Curves Architecture ## {#curves_architecture} diff --git a/crypto3/libs/algebra/example/CMakeLists.txt b/crypto3/libs/algebra/example/CMakeLists.txt index e80e023306..c9c0d345c2 100644 --- a/crypto3/libs/algebra/example/CMakeLists.txt +++ b/crypto3/libs/algebra/example/CMakeLists.txt @@ -15,7 +15,7 @@ macro(define_algebra_example name) Boost::random ) - set_target_properties(algebra_${name}_example PROPERTIES CXX_STANDARD 17) + set_target_properties(algebra_${name}_example PROPERTIES CXX_STANDARD 20) endmacro() set(EXAMPLES_NAMES diff --git a/crypto3/libs/algebra/example/curves.cpp b/crypto3/libs/algebra/example/curves.cpp index cd9eefe08d..876b821e55 100644 --- a/crypto3/libs/algebra/example/curves.cpp +++ b/crypto3/libs/algebra/example/curves.cpp @@ -25,10 +25,7 @@ #include -#include -#include -#include -#include +#include #include #include @@ -122,12 +119,12 @@ int main() { using bjj_g1_f_v = typename babyjubjub_g1_type::field_type::value_type; typename babyjubjub_g1_type::value_type - P1(bjj_g1_f_v(0x274DBCE8D15179969BC0D49FA725BDDF9DE555E0BA6A693C6ADB52FC9EE7A82C_cppui_modular254), - bjj_g1_f_v(0x5CE98C61B05F47FE2EAE9A542BD99F6B2E78246231640B54595FEBFD51EB853_cppui_modular251)), - P2(bjj_g1_f_v(0x2491ABA8D3A191A76E35BC47BD9AFE6CC88FEE14D607CBE779F2349047D5C157_cppui_modular254), - bjj_g1_f_v(0x2E07297F8D3C3D7818DBDDFD24C35583F9A9D4ED0CB0C1D1348DD8F7F99152D7_cppui_modular254)), - P3(bjj_g1_f_v(0x11805510440A3488B3B811EAACD0EC7C72DDED51978190E19067A2AFAEBAF361_cppui_modular253), - bjj_g1_f_v(0x1F07AA1B3C598E2FF9FF77744A39298A0A89A9027777AF9FA100DD448E072C13_cppui_modular253)); + P1(bjj_g1_f_v(0x274DBCE8D15179969BC0D49FA725BDDF9DE555E0BA6A693C6ADB52FC9EE7A82C_big_uint254), + bjj_g1_f_v(0x5CE98C61B05F47FE2EAE9A542BD99F6B2E78246231640B54595FEBFD51EB853_big_uint251)), + P2(bjj_g1_f_v(0x2491ABA8D3A191A76E35BC47BD9AFE6CC88FEE14D607CBE779F2349047D5C157_big_uint254), + bjj_g1_f_v(0x2E07297F8D3C3D7818DBDDFD24C35583F9A9D4ED0CB0C1D1348DD8F7F99152D7_big_uint254)), + P3(bjj_g1_f_v(0x11805510440A3488B3B811EAACD0EC7C72DDED51978190E19067A2AFAEBAF361_big_uint253), + bjj_g1_f_v(0x1F07AA1B3C598E2FF9FF77744A39298A0A89A9027777AF9FA100DD448E072C13_big_uint253)); std::cout << "BabyJubJub addition test: " << std::endl; typename babyjubjub_g1_type::value_type P1pP2 = P1 + P2; diff --git a/crypto3/libs/algebra/example/fields.cpp b/crypto3/libs/algebra/example/fields.cpp index 1c27529261..4701d43c30 100644 --- a/crypto3/libs/algebra/example/fields.cpp +++ b/crypto3/libs/algebra/example/fields.cpp @@ -25,10 +25,8 @@ #include -#include -#include -#include -#include +#include + #include #include diff --git a/crypto3/libs/algebra/example/random_element.cpp b/crypto3/libs/algebra/example/random_element.cpp index 5a45298584..c20779a25c 100644 --- a/crypto3/libs/algebra/example/random_element.cpp +++ b/crypto3/libs/algebra/example/random_element.cpp @@ -25,10 +25,8 @@ #include -#include -#include -#include -#include +#include + #include #include diff --git a/crypto3/libs/algebra/example/short_weierstrass_coordinates.cpp b/crypto3/libs/algebra/example/short_weierstrass_coordinates.cpp index a371e32c21..73352d0e0e 100644 --- a/crypto3/libs/algebra/example/short_weierstrass_coordinates.cpp +++ b/crypto3/libs/algebra/example/short_weierstrass_coordinates.cpp @@ -23,10 +23,8 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#include -#include -#include -#include +#include + #include @@ -37,10 +35,10 @@ void coordinates_examples() { typedef typename FpCurveGroup::value_type group_value_type; typedef typename FpCurveGroup::field_type::value_type field_value_type; - field_value_type e1 = field_value_type(0xfadaf4efc388b9fb1f5f6286032868c8c29a4d7b359f17bff792511cdbcea8ba_cppui_modular256), - e2(0x609eaeb55609889d764de70df4536a52a6773ce14244d2109afb1f6140d64ed2_cppui_modular256), e3(1), - e4(0x72213568b6cec6bad10c649c22d9388857085132ea254320c7d3c12727f55d97_cppui_modular256), - e5(0xff9d5ca60a4f5ae00b2abdb6dddb3f4fc5c853ed56a33a85ccaa7d3093084579_cppui_modular256), e6(1); + field_value_type e1 = field_value_type(0xfadaf4efc388b9fb1f5f6286032868c8c29a4d7b359f17bff792511cdbcea8ba_big_uint256), + e2(0x609eaeb55609889d764de70df4536a52a6773ce14244d2109afb1f6140d64ed2_big_uint256), e3(1), + e4(0x72213568b6cec6bad10c649c22d9388857085132ea254320c7d3c12727f55d97_big_uint256), + e5(0xff9d5ca60a4f5ae00b2abdb6dddb3f4fc5c853ed56a33a85ccaa7d3093084579_big_uint256), e6(1); diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/alt_bn128/254/short_weierstrass_params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/alt_bn128/254/short_weierstrass_params.hpp index dd1cafa846..2336787230 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/alt_bn128/254/short_weierstrass_params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/alt_bn128/254/short_weierstrass_params.hpp @@ -96,11 +96,11 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED_cppui_modular254, - 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2_cppui_modular254), + 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED_big_uint254, + 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2_big_uint254), typename field_type::value_type( - 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA_cppui_modular254, - 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B_cppui_modular254)}; + 0x12C85EA5DB8C6DEB4AAB71808DCB408FE3D1E7690C43D37B4CE6CC0166FA7DAA_big_uint254, + 0x90689D0585FF075EC9E99AD690C3395BC4B313370B38EF355ACDADCD122975B_big_uint254)}; }; constexpr typename alt_bn128_types<254>::base_field_type::value_type const diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/babyjubjub/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/babyjubjub/params.hpp index 70aa0e6550..a47247eb7f 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/babyjubjub/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/babyjubjub/params.hpp @@ -44,10 +44,10 @@ namespace nil { // Edwards representation constants a and d constexpr static const typename babyjubjub_types::base_field_type::value_type a = ///< twisted Edwards elliptic curve - 0x292FC_cppui_modular18; ///< described by equation ax^2 + y^2 = 1 + dx^2y^2 + 0x292FC_big_uint18; ///< described by equation ax^2 + y^2 = 1 + dx^2y^2 constexpr static const typename babyjubjub_types::base_field_type::value_type d = ///< twisted Edwards elliptic curve - 0x292F8_cppui_modular18; ///< described by equation ax^2 + y^2 = 1 + dx^2y^2 + 0x292F8_big_uint18; ///< described by equation ax^2 + y^2 = 1 + dx^2y^2 }; constexpr @@ -63,7 +63,7 @@ namespace nil { // Montgomery representation constants A and B constexpr static const typename babyjubjub_types::base_field_type::value_type A = ///< Montgomery elliptic curve - 0x292FA_cppui_modular18; ///< described by equation b*y^2 = x^3 + a*x^2 + x + 0x292FA_big_uint18; ///< described by equation b*y^2 = x^3 + a*x^2 + x constexpr static const typename babyjubjub_types::base_field_type::value_type B = ///< Montgomery elliptic curve 0x01; ///< described by equation b*y^2 = x^3 + a*x^2 + x @@ -85,9 +85,9 @@ namespace nil { constexpr static const std::array one_fill = { typename base_field_type::value_type( - 0xBB77A6AD63E739B4EACB2E09D6277C12AB8D8010534E0B62893F3F6BB957051_cppui_modular252), + 0xBB77A6AD63E739B4EACB2E09D6277C12AB8D8010534E0B62893F3F6BB957051_big_uint252), typename base_field_type::value_type( - 0x25797203F7A0B24925572E1CD16BF9EDFCE0051FB9E133774B3C257A872D7D8B_cppui_modular254)}; + 0x25797203F7A0B24925572E1CD16BF9EDFCE0051FB9E133774B3C257A872D7D8B_big_uint254)}; }; constexpr std::array< @@ -106,9 +106,9 @@ namespace nil { constexpr static const std::array one_fill = { typename base_field_type::value_type( - 0xfbc9ac10c16d45d4eacdd6489fa006480b17a811cdba46922896085f89faaf6_cppui_modular252), + 0xfbc9ac10c16d45d4eacdd6489fa006480b17a811cdba46922896085f89faaf6_big_uint252), typename base_field_type::value_type( - 0x203a710160811d5c07ebaeb8fe1d9ce201c66b970d66f18d0d2b264c195309aa_cppui_modular254)}; + 0x203a710160811d5c07ebaeb8fe1d9ce201c66b970d66f18d0d2b264c195309aa_big_uint254)}; }; constexpr std::array::base_field_type::value_type, diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/377/short_weierstrass_params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/377/short_weierstrass_params.hpp index be2827e9c1..db89c399b4 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/377/short_weierstrass_params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/377/short_weierstrass_params.hpp @@ -69,9 +69,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x8848DEFE740A67C8FC6225BF87FF5485951E2CAA9D41BB188282C8BD37CB5CD5481512FFCD394EEAB9B16EB21BE9EF_cppui_modular376), + 0x8848DEFE740A67C8FC6225BF87FF5485951E2CAA9D41BB188282C8BD37CB5CD5481512FFCD394EEAB9B16EB21BE9EF_big_uint376), typename field_type::value_type( - 0x1914A69C5102EFF1F674F5D30AFEEC4BD7FB348CA3E52D96D182AD44FB82305C2FE3D3634A9591AFD82DE55559C8EA6_cppui_modular377)}; + 0x1914A69C5102EFF1F674F5D30AFEEC4BD7FB348CA3E52D96D182AD44FB82305C2FE3D3634A9591AFD82DE55559C8EA6_big_uint377)}; }; template<> @@ -100,11 +100,11 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0xB997FEF930828FE1B9E6A1707B8AA508A3DBFD7FE2246499C709226A0A6FEF49F85B3A375363F4F8F6EA3FBD159F8A_cppui_modular376, - 0xD6AC33B84947D9845F81A57A136BFA326E915FABC8CD6A57FF133B42D00F62E4E1AF460228CD5184DEAE976FA62596_cppui_modular376), + 0xB997FEF930828FE1B9E6A1707B8AA508A3DBFD7FE2246499C709226A0A6FEF49F85B3A375363F4F8F6EA3FBD159F8A_big_uint376, + 0xD6AC33B84947D9845F81A57A136BFA326E915FABC8CD6A57FF133B42D00F62E4E1AF460228CD5184DEAE976FA62596_big_uint376), typename field_type::value_type( - 0x118DD509B2E9A13744A507D515A595DBB7E3B63DF568866473790184BDF83636C94DF2B7A962CB2AF4337F07CB7E622_cppui_modular377, - 0x185067C6CA76D992F064A432BD9F9BE832B0CAC2D824D0518F77D39E76C3E146AFB825F2092218D038867D7F337A010_cppui_modular377)}; + 0x118DD509B2E9A13744A507D515A595DBB7E3B63DF568866473790184BDF83636C94DF2B7A962CB2AF4337F07CB7E622_big_uint377, + 0x185067C6CA76D992F064A432BD9F9BE832B0CAC2D824D0518F77D39E76C3E146AFB825F2092218D038867D7F337A010_big_uint377)}; }; constexpr diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/381/short_weierstrass_params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/381/short_weierstrass_params.hpp index 2b75c6a8ce..5478bc9201 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/381/short_weierstrass_params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/381/short_weierstrass_params.hpp @@ -69,9 +69,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB_cppui_modular381), + 0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB_big_uint381), typename field_type::value_type( - 0x8B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1_cppui_modular380)}; + 0x8B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1_big_uint380)}; }; template<> @@ -100,11 +100,11 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8_cppui_modular378, - 0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E_cppui_modular381), + 0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8_big_uint378, + 0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E_big_uint381), typename field_type::value_type( - 0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801_cppui_modular380, - 0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE_cppui_modular379)}; + 0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801_big_uint380, + 0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE_big_uint379)}; }; constexpr diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g1.hpp index c275451cc6..c550a9f39a 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g1.hpp @@ -67,8 +67,8 @@ namespace nil { static value_type one () { return make_value( - 0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB_cppui_modular381, - 0x8B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1_cppui_modular380 + 0x17F1D3A73197D7942695638C4FA9AC0FC3688C4F9774B905A14E3A3F171BAC586C55E83FF97A1AEFFB3AF00ADB22C6BB_big_uint381, + 0x8B3F481E3AAA0F1A09E30ED741D8AE4FCF5E095D5D00AF600DB18CB2C04B3EDD03CC744A2888AE40CAA232946C5E7E1_big_uint380 ); } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g2.hpp index 948e50b5b3..159d7a190d 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/bls12/g2.hpp @@ -68,10 +68,10 @@ namespace nil { static value_type one () { return make_value( - 0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8_cppui_modular378, - 0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E_cppui_modular381, - 0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801_cppui_modular380, - 0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE_cppui_modular379 + 0x24AA2B2F08F0A91260805272DC51051C6E47AD4FA403B02B4510B647AE3D1770BAC0326A805BBEFD48056C8C121BDB8_big_uint378, + 0x13E02B6052719F607DACD3A088274F65596BD0D09920B61AB5DA61BBDC7F5049334CF11213945D57E5AC7D055D042B7E_big_uint381, + 0xCE5D527727D6E118CC9CDC6DA2E351AADFD9BAA8CBDD3A76D429A695160D12C923AC9CC3BACA289E193548608B82801_big_uint380, + 0x606C4A02EA734CC32ACD2B02BC28B99CB3E287E85A763AF267492AB572E99AB3F370D275CEC1DA1AAA9075FF05F79BE_big_uint379 ); } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/g1.hpp index cbaed496cc..76e77d9799 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/g1.hpp @@ -70,8 +70,8 @@ namespace nil { static value_type one () { return make_value( - 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a_cppui_modular256, - 0x6666666666666666666666666666666666666666666666666666666666666658_cppui_modular256 + 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a_big_uint256, + 0x6666666666666666666666666666666666666666666666666666666666666658_big_uint256 ); } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/params.hpp index 2b494f73cf..23474b9056 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/curve25519/params.hpp @@ -69,7 +69,7 @@ namespace nil { constexpr static std::array one_fill = { typename field_type::value_type(0x09u), typename field_type::value_type( - 0x20ae19a1b8a086b4e01edd2c7748d14c923d4d7e6d7c61b229e9c5a27eced3d9_cppui_modular254)}; + 0x20ae19a1b8a086b4e01edd2c7748d14c923d4d7e6d7c61b229e9c5a27eced3d9_big_uint254)}; #endif }; @@ -115,9 +115,9 @@ namespace nil { constexpr static std::array one_fill = { typename field_type::value_type( - 0x216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A_cppui_modular254), + 0x216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A_big_uint254), typename field_type::value_type( - 0x6666666666666666666666666666666666666666666666666666666666666658_cppui_modular255)}; + 0x6666666666666666666666666666666666666666666666666666666666666658_big_uint255)}; #endif }; #ifdef __ZKLLVM__ diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/montgomery/element_g1_affine.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/montgomery/element_g1_affine.hpp index 8139ee992b..ee5426883b 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/montgomery/element_g1_affine.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/montgomery/element_g1_affine.hpp @@ -87,10 +87,9 @@ namespace nil { constexpr curve_element(const field_value_type &in_X, const field_value_type &in_Y) : is_inf_point(false), X(in_X), Y(in_Y) {}; - template + template explicit constexpr curve_element( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; } @@ -203,10 +202,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/element_g1_affine.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/element_g1_affine.hpp index 580f0d19df..5105f0df8c 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/element_g1_affine.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/element_g1_affine.hpp @@ -86,10 +86,9 @@ namespace nil { : X(X), Y(Y){ } - template + template explicit constexpr curve_element( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; } @@ -174,10 +173,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian/element_g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian/element_g1.hpp index e77404ac1a..9a99da5db2 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian/element_g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian/element_g1.hpp @@ -242,10 +242,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_0/element_g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_0/element_g1.hpp index 4052b24bc3..1f6d22ad1e 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_0/element_g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_0/element_g1.hpp @@ -97,10 +97,9 @@ namespace nil { : X(X), Y(Y), Z(Z) { } - template + template explicit constexpr curve_element( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; } @@ -250,10 +249,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_minus_3/element_g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_minus_3/element_g1.hpp index b9b0d4a102..e4b3502c6b 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_minus_3/element_g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/jacobian_with_a4_minus_3/element_g1.hpp @@ -97,10 +97,9 @@ namespace nil { : X(X), Y(Y), Z(Z) { } - template + template explicit constexpr curve_element( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; } @@ -254,10 +253,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/projective/element_g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/projective/element_g1.hpp index 7ac86a6a6b..e6c9d7851c 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/projective/element_g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/short_weierstrass/projective/element_g1.hpp @@ -95,10 +95,9 @@ namespace nil { : X(X), Y(Y), Z(Z) { } - template + template explicit constexpr curve_element( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; } @@ -214,10 +213,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/element_g1_affine.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/element_g1_affine.hpp index c95cf59fb9..80edf742a8 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/element_g1_affine.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/element_g1_affine.hpp @@ -86,10 +86,9 @@ namespace nil { : X(X), Y(Y) { } - template + template explicit constexpr curve_element( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; } @@ -218,10 +217,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/extended_with_a_minus_1/element_g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/extended_with_a_minus_1/element_g1.hpp index 3d4f9213ea..851822baa1 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/extended_with_a_minus_1/element_g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/forms/twisted_edwards/extended_with_a_minus_1/element_g1.hpp @@ -109,10 +109,9 @@ namespace nil { : X(X), Y(Y), T(X*Y), Z(field_value_type::one()) { } - template + template explicit constexpr curve_element( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; } @@ -229,10 +228,9 @@ namespace nil { return *this; } - template + template constexpr const curve_element& operator=( - const boost::multiprecision::number &value) { + const nil::crypto3::multiprecision::big_uint &value) { *this = one() * value; return *this; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/h2c/h2c_iso_map.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/h2c/h2c_iso_map.hpp index 72f6b766bb..8d32683525 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/h2c/h2c_iso_map.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/h2c/h2c_iso_map.hpp @@ -52,65 +52,65 @@ namespace nil { typedef typename suite_type::integral_type integral_type; constexpr static std::array k_x_num = { - 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7_cppui_modular381, - 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb_cppui_modular381, - 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0_cppui_modular381, - 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861_cppui_modular381, - 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9_cppui_modular381, - 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983_cppui_modular381, - 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84_cppui_modular381, - 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e_cppui_modular381, - 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317_cppui_modular381, - 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e_cppui_modular381, - 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b_cppui_modular381, - 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229_cppui_modular381}; + 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7_big_uint381, + 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb_big_uint381, + 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0_big_uint381, + 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861_big_uint381, + 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9_big_uint381, + 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983_big_uint381, + 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84_big_uint381, + 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e_big_uint381, + 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317_big_uint381, + 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e_big_uint381, + 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b_big_uint381, + 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229_big_uint381}; constexpr static std::array k_x_den = { - 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c_cppui_modular381, - 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff_cppui_modular381, - 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19_cppui_modular381, - 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8_cppui_modular381, - 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e_cppui_modular381, - 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5_cppui_modular381, - 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a_cppui_modular381, - 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e_cppui_modular381, - 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641_cppui_modular381, - 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a_cppui_modular381}; + 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c_big_uint381, + 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff_big_uint381, + 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19_big_uint381, + 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8_big_uint381, + 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e_big_uint381, + 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5_big_uint381, + 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a_big_uint381, + 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e_big_uint381, + 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641_big_uint381, + 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a_big_uint381}; constexpr static std::array k_y_num = { - 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33_cppui_modular381, - 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696_cppui_modular381, - 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6_cppui_modular381, - 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb_cppui_modular381, - 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb_cppui_modular381, - 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0_cppui_modular381, - 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2_cppui_modular381, - 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29_cppui_modular381, - 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587_cppui_modular381, - 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30_cppui_modular381, - 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132_cppui_modular381, - 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e_cppui_modular381, - 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8_cppui_modular381, - 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133_cppui_modular381, - 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b_cppui_modular381, - 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604_cppui_modular381}; + 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33_big_uint381, + 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696_big_uint381, + 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6_big_uint381, + 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb_big_uint381, + 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb_big_uint381, + 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0_big_uint381, + 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2_big_uint381, + 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29_big_uint381, + 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587_big_uint381, + 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30_big_uint381, + 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132_big_uint381, + 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e_big_uint381, + 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8_big_uint381, + 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133_big_uint381, + 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b_big_uint381, + 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604_big_uint381}; constexpr static std::array k_y_den = { - 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1_cppui_modular381, - 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d_cppui_modular381, - 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2_cppui_modular381, - 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416_cppui_modular381, - 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d_cppui_modular381, - 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac_cppui_modular381, - 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c_cppui_modular381, - 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9_cppui_modular381, - 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a_cppui_modular381, - 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55_cppui_modular381, - 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8_cppui_modular381, - 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092_cppui_modular381, - 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc_cppui_modular381, - 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7_cppui_modular381, - 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f_cppui_modular381}; + 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1_big_uint381, + 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d_big_uint381, + 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2_big_uint381, + 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416_big_uint381, + 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d_big_uint381, + 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac_big_uint381, + 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c_big_uint381, + 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9_big_uint381, + 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a_big_uint381, + 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55_big_uint381, + 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8_big_uint381, + 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092_big_uint381, + 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc_big_uint381, + 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7_big_uint381, + 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f_big_uint381}; public: static inline group_value_type process(const group_value_type &ci) { @@ -165,38 +165,38 @@ namespace nil { typedef typename suite_type::integral_type integral_type; constexpr static std::array, 4> k_x_num = { - {{{0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_cppui_modular381, - 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_cppui_modular381}}, + {{{0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_big_uint381, + 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_big_uint381}}, {{0, - 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a_cppui_modular381}}, - {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e_cppui_modular381, - 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d_cppui_modular381}}, - {{0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1_cppui_modular381, + 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a_big_uint381}}, + {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e_big_uint381, + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d_big_uint381}}, + {{0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1_big_uint381, 0}}}}; constexpr static std::array, 2> k_x_den = { {{{0, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63_cppui_modular381}}, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63_big_uint381}}, {{0xc, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f_cppui_modular381}}}}; + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f_big_uint381}}}}; constexpr static std::array, 4> k_y_num = { - {{{0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_cppui_modular381, - 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_cppui_modular381}}, + {{{0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_big_uint381, + 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_big_uint381}}, {{0, - 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be_cppui_modular381}}, - {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c_cppui_modular381, - 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f_cppui_modular381}}, - {{0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10_cppui_modular381, + 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be_big_uint381}}, + {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c_big_uint381, + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f_big_uint381}}, + {{0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10_big_uint381, 0}}}}; constexpr static std::array, 3> k_y_den = { - {{{0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_cppui_modular381, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_cppui_modular381}}, + {{{0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_big_uint381, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_big_uint381}}, {{0, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3_cppui_modular381}}, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3_big_uint381}}, {{0x12, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99_cppui_modular381}}}}; + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99_big_uint381}}}}; public: static inline group_value_type process(const group_value_type &ci) { diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/jubjub/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/jubjub/params.hpp index 3ec0fff689..4940bd3f25 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/jubjub/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/jubjub/params.hpp @@ -66,9 +66,9 @@ namespace nil { // A = 2 (a + d) / (a - d) // B = 4 / (a - d) constexpr static const typename jubjub_types::base_field_type::value_type - A = 0xA002_cppui_modular255; + A = 0xA002_big_uint255; constexpr static const typename jubjub_types::base_field_type::value_type - B = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffff5ffd_cppui_modular255; + B = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffff5ffd_big_uint255; static constexpr std::size_t cofactor = 8; }; @@ -89,9 +89,9 @@ namespace nil { // according to https://neuromancer.sk/std/other/JubJub constexpr static const std::array one_fill = { typename field_type::value_type( - 0x11dafe5d23e1218086a365b99fbf3d3be72f6afd7d1f72623e6b071492d1122b_cppui_modular253), + 0x11dafe5d23e1218086a365b99fbf3d3be72f6afd7d1f72623e6b071492d1122b_big_uint253), typename field_type::value_type( - 0x1d523cf1ddab1a1793132e78c866c0c33e26ba5cc220fed7cc3f870e59d292aa_cppui_modular253)}; + 0x1d523cf1ddab1a1793132e78c866c0c33e26ba5cc220fed7cc3f870e59d292aa_big_uint253)}; }; constexpr std::array::base_field_type::value_type, @@ -118,9 +118,9 @@ namespace nil { */ constexpr static const std::array one_fill = { typename field_type::value_type( - 0x52a47af6ec47deb77d663b6a45b148d1ccdaa4e2299ecfbd5504c409b3ea62c0_cppui_modular255), + 0x52a47af6ec47deb77d663b6a45b148d1ccdaa4e2299ecfbd5504c409b3ea62c0_big_uint255), typename field_type::value_type( - 0x20bc4f2e8cff38006618840fd0f9b6d6e8ddec99c37916874e2fd6d5c6558938_cppui_modular254)}; + 0x20bc4f2e8cff38006618840fd0f9b6d6e8ddec99c37916874e2fd6d5c6558938_big_uint254)}; }; constexpr std::array::base_field_type::value_type, diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt4/298/short_weierstrass_params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt4/298/short_weierstrass_params.hpp index 55fcdb6ff5..cb1c0c913f 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt4/298/short_weierstrass_params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt4/298/short_weierstrass_params.hpp @@ -47,7 +47,7 @@ namespace nil { constexpr static const typename mnt4_types<298>::base_field_type::value_type a = 0x02; constexpr static const typename mnt4_types<298>::base_field_type::value_type - b = 0x3545A27639415585EA4D523234FC3EDD2A2070A085C7B980F4E9CD21A515D4B0EF528EC0FD5_cppui_modular298; + b = 0x3545A27639415585EA4D523234FC3EDD2A2070A085C7B980F4E9CD21A515D4B0EF528EC0FD5_big_uint298; }; template<> @@ -69,9 +69,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x7A2CAF82A1BA85213FE6CA3875AEE86ABA8F73D69060C4079492B948DEA216B5B9C8D2AF46_cppui_modular295), + 0x7A2CAF82A1BA85213FE6CA3875AEE86ABA8F73D69060C4079492B948DEA216B5B9C8D2AF46_big_uint295), typename field_type::value_type( - 0x2DB619461CC82672F7F159FEC2E89D0148DCC9862D36778C1AFD96A71E29CBA48E710A48AB2_cppui_modular298)}; + 0x2DB619461CC82672F7F159FEC2E89D0148DCC9862D36778C1AFD96A71E29CBA48E710A48AB2_big_uint298)}; }; template<> @@ -109,11 +109,11 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x371780491C5660571FF542F2EF89001F205151E12A72CB14F01A931E72DBA7903DF6C09A9A4_cppui_modular298, - 0x4BA59A3F72DA165DEF838081AF697C851F002F576303302BB6C02C712C968BE32C0AE0A989_cppui_modular295), + 0x371780491C5660571FF542F2EF89001F205151E12A72CB14F01A931E72DBA7903DF6C09A9A4_big_uint298, + 0x4BA59A3F72DA165DEF838081AF697C851F002F576303302BB6C02C712C968BE32C0AE0A989_big_uint295), typename field_type::value_type( - 0x4B471F33FFAAD868A1C47D6605D31E5C4B3B2E0B60EC98F0F610A5AAFD0D9522BCA4E79F22_cppui_modular295, - 0x355D05A1C69A5031F3F81A5C100CB7D982F78EC9CFC3B5168ED8D75C7C484FB61A3CBF0E0F1_cppui_modular298)}; + 0x4B471F33FFAAD868A1C47D6605D31E5C4B3B2E0B60EC98F0F610A5AAFD0D9522BCA4E79F22_big_uint295, + 0x355D05A1C69A5031F3F81A5C100CB7D982F78EC9CFC3B5168ED8D75C7C484FB61A3CBF0E0F1_big_uint298)}; }; constexpr diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt6/298/short_weierstrass_params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt6/298/short_weierstrass_params.hpp index 94e18751f8..3a40c12b65 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt6/298/short_weierstrass_params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/mnt6/298/short_weierstrass_params.hpp @@ -47,7 +47,7 @@ namespace nil { constexpr static const typename mnt6_types<298>::base_field_type::value_type a = 0x0B; constexpr static const typename mnt6_types<298>::base_field_type::value_type - b = 0xD68C7B1DC5DD042E957B71C44D3D6C24E683FC09B420B1A2D263FDE47DDBA59463D0C65282_cppui_modular296; + b = 0xD68C7B1DC5DD042E957B71C44D3D6C24E683FC09B420B1A2D263FDE47DDBA59463D0C65282_big_uint296; }; template<> @@ -64,9 +64,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x2A4FEEE24FD2C69D1D90471B2BA61ED56F9BAD79B57E0B4C671392584BDADEBC01ABBC0447D_cppui_modular298), + 0x2A4FEEE24FD2C69D1D90471B2BA61ED56F9BAD79B57E0B4C671392584BDADEBC01ABBC0447D_big_uint298), typename field_type::value_type( - 0x32986C245F6DB2F82F4E037BF7AFD69CBFCBFF07FC25D71E9C75E1B97208A333D73D91D3028_cppui_modular298)}; + 0x32986C245F6DB2F82F4E037BF7AFD69CBFCBFF07FC25D71E9C75E1B97208A333D73D91D3028_big_uint298)}; }; template<> @@ -100,13 +100,13 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x34F7320A12B56CE532BCCB3B44902CBAA723CD60035ADA7404B743AD2E644AD76257E4C6813_cppui_modular298, - 0xCF41620BAA52EEC50E61A70AB5B45F681952E0109340FEC84F1B2890ABA9B15CAC5A0C80FA_cppui_modular296, - 0x11F99170E10E326433CCCB8032FB48007CA3C4E105CF31B056AC767E2CB01258391BD4917CE_cppui_modular297), + 0x34F7320A12B56CE532BCCB3B44902CBAA723CD60035ADA7404B743AD2E644AD76257E4C6813_big_uint298, + 0xCF41620BAA52EEC50E61A70AB5B45F681952E0109340FEC84F1B2890ABA9B15CAC5A0C80FA_big_uint296, + 0x11F99170E10E326433CCCB8032FB48007CA3C4E105CF31B056AC767E2CB01258391BD4917CE_big_uint297), typename field_type::value_type( - 0x3A65968F03CC64D62AD05C79C415E07EBD38B363EC48309487C0B83E1717A582C1B60FECC91_cppui_modular298, - 0xCA5E8427E5DB1506C1A24CEFC2451AB3ACCAEA5DB82DCB0C7117CC74402FAA5B2C37685C6E_cppui_modular296, - 0xF75D2DD88302C9A4EF941307629A1B3E197277D83ABB715F647C2E55A27BAF782F5C60E7F7_cppui_modular296)}; + 0x3A65968F03CC64D62AD05C79C415E07EBD38B363EC48309487C0B83E1717A582C1B60FECC91_big_uint298, + 0xCA5E8427E5DB1506C1A24CEFC2451AB3ACCAEA5DB82DCB0C7117CC74402FAA5B2C37685C6E_big_uint296, + 0xF75D2DD88302C9A4EF941307629A1B3E197277D83ABB715F647C2E55A27BAF782F5C60E7F7_big_uint296)}; }; constexpr diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/pallas/g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/pallas/g1.hpp index efca519eed..02e9d61be7 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/pallas/g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/pallas/g1.hpp @@ -63,8 +63,8 @@ namespace nil { static value_type one () { return make_value( - 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000_cppui_modular256, - 0x2_cppui_modular256 + 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000_big_uint256, + 0x2_big_uint256 ); } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/scalar_mul.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/scalar_mul.hpp index 0b9b217399..0ad3b100e7 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/scalar_mul.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/scalar_mul.hpp @@ -30,10 +30,7 @@ #include -#include -#include - -#include +#include #include @@ -43,10 +40,10 @@ namespace nil { namespace curves { namespace detail { - template + template constexpr void scalar_mul_inplace( CurveElementType &base, - boost::multiprecision::number> const& scalar) + nil::crypto3::multiprecision::big_uint const& scalar) { if (scalar.is_zero()) { base = CurveElementType::zero(); @@ -54,7 +51,7 @@ namespace nil { } const size_t window_size = 3; - auto naf = boost::multiprecision::eval_find_wnaf_a(window_size + 1, scalar.backend()); + auto naf = nil::crypto3::multiprecision::find_wnaf_a(window_size + 1, scalar); std::array table; CurveElementType dbl = base; dbl.double_inplace(); diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_k1/256/short_weierstrass_params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_k1/256/short_weierstrass_params.hpp index 21bb4615e9..6211c917d1 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_k1/256/short_weierstrass_params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_k1/256/short_weierstrass_params.hpp @@ -67,8 +67,8 @@ namespace nil { #endif constexpr static const std::array one_fill = { - typename field_type::value_type(0x3b4c382ce37aa192a4019e763036f4f5dd4d7ebb_cppui_modular160), - typename field_type::value_type(0x938cf935318fdced6bc28286531733c3f03c4fee_cppui_modular160)}; + typename field_type::value_type(0x3b4c382ce37aa192a4019e763036f4f5dd4d7ebb_big_uint160), + typename field_type::value_type(0x938cf935318fdced6bc28286531733c3f03c4fee_big_uint160)}; }; constexpr typename secp_k1_types<160>::base_field_type::value_type const @@ -117,9 +117,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0xdb4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d_cppui_modular192), + 0xdb4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d_big_uint192), typename field_type::value_type( - 0x9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d_cppui_modular192)}; + 0x9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d_big_uint192)}; }; constexpr typename secp_k1_types<192>::base_field_type::value_type const @@ -166,9 +166,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0xa1455b334df099df30fc28a169a467e9e47075a90f7e650eb6b7a45c_cppui_modular224), + 0xa1455b334df099df30fc28a169a467e9e47075a90f7e650eb6b7a45c_big_uint224), typename field_type::value_type( - 0x7e089fed7fba344282cafbd6f7e319f7c0b0bd59e2ca4bdb556d61a5_cppui_modular224)}; + 0x7e089fed7fba344282cafbd6f7e319f7c0b0bd59e2ca4bdb556d61a5_big_uint224)}; }; constexpr typename secp_k1_types<224>::base_field_type::value_type const @@ -215,9 +215,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798_cppui_modular256), + 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798_big_uint256), typename field_type::value_type( - 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8_cppui_modular256)}; + 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8_big_uint256)}; }; constexpr typename secp_k1_types<256>::base_field_type::value_type const diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_r1/256/short_weierstrass_params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_r1/256/short_weierstrass_params.hpp index 89fe04d5aa..9b74fd4ced 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_r1/256/short_weierstrass_params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/secp_r1/256/short_weierstrass_params.hpp @@ -44,9 +44,9 @@ namespace nil { ///< coefficients of short Weierstrass curve $y^2=x^3+a*x+b$ constexpr static const typename secp_r1_types<160>::base_field_type::value_type - a = 0xffffffffffffffffffffffffffffffff7ffffffc_cppui_modular160; + a = 0xffffffffffffffffffffffffffffffff7ffffffc_big_uint160; constexpr static const typename secp_r1_types<160>::base_field_type::value_type - b = 0x1c97befc54bd7a8b65acf89f81d4d4adc565fa45_cppui_modular160; + b = 0x1c97befc54bd7a8b65acf89f81d4d4adc565fa45_big_uint160; }; template<> @@ -67,8 +67,8 @@ namespace nil { #endif constexpr static const std::array one_fill = { - typename field_type::value_type(0x4a96b5688ef573284664698968c38bb913cbfc82_cppui_modular160), - typename field_type::value_type(0x23a628553168947d59dcc912042351377ac5fb32_cppui_modular160)}; + typename field_type::value_type(0x4a96b5688ef573284664698968c38bb913cbfc82_big_uint160), + typename field_type::value_type(0x23a628553168947d59dcc912042351377ac5fb32_big_uint160)}; }; constexpr typename secp_r1_types<160>::base_field_type::value_type const @@ -91,9 +91,9 @@ namespace nil { ///< coefficients of short Weierstrass curve $y^2=x^3+a*x+b$ constexpr static const typename secp_r1_types<192>::base_field_type::value_type - a = 0xfffffffffffffffffffffffffffffffefffffffffffffffc_cppui_modular192; + a = 0xfffffffffffffffffffffffffffffffefffffffffffffffc_big_uint192; constexpr static const typename secp_r1_types<192>::base_field_type::value_type - b = 0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1_cppui_modular192; + b = 0x64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1_big_uint192; }; template<> @@ -115,9 +115,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012_cppui_modular192), + 0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012_big_uint192), typename field_type::value_type( - 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811_cppui_modular192)}; + 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811_big_uint192)}; }; constexpr typename secp_r1_types<192>::base_field_type::value_type const @@ -140,9 +140,9 @@ namespace nil { ///< coefficients of short Weierstrass curve $y^2=x^3+a*x+b$ constexpr static const typename secp_r1_types<224>::base_field_type::value_type - a = 0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe_cppui_modular224; + a = 0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe_big_uint224; constexpr static const typename secp_r1_types<224>::base_field_type::value_type - b = 0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4_cppui_modular224; + b = 0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4_big_uint224; }; template<> @@ -164,9 +164,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21_cppui_modular224), + 0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21_big_uint224), typename field_type::value_type( - 0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34_cppui_modular224)}; + 0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34_big_uint224)}; }; constexpr typename secp_r1_types<224>::base_field_type::value_type const @@ -189,9 +189,9 @@ namespace nil { ///< coefficients of short Weierstrass curve $y^2=x^3+a*x+b$ constexpr static const typename secp_r1_types<256>::base_field_type::value_type - a = 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc_cppui_modular256; + a = 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc_big_uint256; constexpr static const typename secp_r1_types<256>::base_field_type::value_type - b = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b_cppui_modular256; + b = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b_big_uint256; }; template<> @@ -212,9 +212,9 @@ namespace nil { #endif constexpr static const std::array one_fill = { typename field_type::value_type( - 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296_cppui_modular256), + 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296_big_uint256), typename field_type::value_type( - 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5_cppui_modular256)}; + 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5_big_uint256)}; }; constexpr typename secp_r1_types<256>::base_field_type::value_type const @@ -237,9 +237,9 @@ namespace nil { ///< coefficients of short Weierstrass curve $y^2=x^3+a*x+b$ constexpr static const typename secp_r1_types<384>::base_field_type::value_type - a = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc_cppui_modular384; + a = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc_big_uint384; constexpr static const typename secp_r1_types<384>::base_field_type::value_type - b = 0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef_cppui_modular384; + b = 0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef_big_uint384; }; template<> @@ -261,9 +261,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7_cppui_modular384), + 0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7_big_uint384), typename field_type::value_type( - 0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f_cppui_modular384)}; + 0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f_big_uint384)}; }; constexpr typename secp_r1_types<384>::base_field_type::value_type const @@ -286,9 +286,9 @@ namespace nil { ///< coefficients of short Weierstrass curve $y^2=x^3+a*x+b$ constexpr static const typename secp_r1_types<521>::base_field_type::value_type - a = 0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc_cppui_modular521; + a = 0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc_big_uint521; constexpr static const typename secp_r1_types<521>::base_field_type::value_type - b = 0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00_cppui_modular521; + b = 0x0051953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00_big_uint521; }; template<> @@ -310,9 +310,9 @@ namespace nil { constexpr static const std::array one_fill = { typename field_type::value_type( - 0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66_cppui_modular521), + 0x00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66_big_uint521), typename field_type::value_type( - 0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650_cppui_modular521)}; + 0x011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650_big_uint521)}; }; constexpr typename secp_r1_types<521>::base_field_type::value_type const diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/vesta/g1.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/vesta/g1.hpp index 83b9bffe94..060a786e07 100755 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/vesta/g1.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/curves/detail/vesta/g1.hpp @@ -65,8 +65,8 @@ namespace nil { static value_type one () { return make_value( - 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000_cppui_modular256, - 0x2_cppui_modular256 + 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000_big_uint256, + 0x2_big_uint256 ); } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/base_field.hpp index 2cee7ea128..976a706655 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/base_field.hpp @@ -53,19 +53,12 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD47_cppui_modular254; + 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD47_big_uint254; constexpr static const integral_type group_order_minus_one_half = - 0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_cppui_modular254; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_big_uint254; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; constexpr static const integral_type mul_generator = 0x03; typedef typename detail::element_fp>> value_type; @@ -84,9 +77,6 @@ namespace nil { constexpr typename alt_bn128_base_field<254>::integral_type const alt_bn128_base_field<254>::group_order_minus_one_half; - constexpr typename alt_bn128_base_field<254>::modular_params_type const - alt_bn128_base_field<254>::modulus_params; - constexpr typename alt_bn128_base_field<254>::integral_type const alt_bn128_base_field<254>::mul_generator; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/scalar_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/scalar_field.hpp index 05d747f36d..7e0bd5ef7b 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/scalar_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/alt_bn128/scalar_field.hpp @@ -55,18 +55,12 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001_cppui_modular254; + 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F0000001_big_uint254; constexpr static const integral_type group_order_minus_one_half = - 0x183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f8000000_cppui_modular254; + 0x183227397098d014dc2822db40c0ac2e9419f4243cdcb848a1f0fac9f8000000_big_uint254; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; constexpr static const integral_type mul_generator = 0x05; @@ -88,9 +82,6 @@ namespace nil { constexpr typename alt_bn128_scalar_field<254>::integral_type const alt_bn128_scalar_field<254>::group_order_minus_one_half; - constexpr typename alt_bn128_scalar_field<254>::modular_params_type const - alt_bn128_scalar_field<254>::modulus_params; - constexpr typename alt_bn128_scalar_field<254>::integral_type const alt_bn128_scalar_field<254>::mul_generator; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/alt_bn128.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/alt_bn128.hpp index e54942f94b..42e714ac06 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/alt_bn128.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/alt_bn128.hpp @@ -46,30 +46,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x01; constexpr static const integral_type t = - 0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_cppui_modular253; + 0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_big_uint253; constexpr static const integral_type t_minus_1_over_2 = - 0xC19139CB84C680A6E14116DA060561765E05AA45A1C72A34F082305B61F3F51_cppui_modular252; + 0xC19139CB84C680A6E14116DA060561765E05AA45A1C72A34F082305B61F3F51_big_uint252; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x03; constexpr static const integral_type root_of_unity = - 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui_modular254; + 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_big_uint254; constexpr static const integral_type nqr = 0x03; constexpr static const integral_type nqr_to_t = - 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui_modular254; + 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_big_uint254; constexpr static const integral_type Rsquared = - 0x6D89F71CAB8351F47AB1EFF0A417FF6B5E71911D44501FBF32CFC5B538AFA89_cppui_modular251; + 0x6D89F71CAB8351F47AB1EFF0A417FF6B5E71911D44501FBF32CFC5B538AFA89_big_uint251; constexpr static const integral_type Rcubed = - 0x20FD6E902D592544EF7F0B0C0ADA0AFB62F210E6A7283DB6B1CD6DAFDA1530DF_cppui_modular254; + 0x20FD6E902D592544EF7F0B0C0ADA0AFB62F210E6A7283DB6B1CD6DAFDA1530DF_big_uint254; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order = - 0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_cppui_modular254; + 0x183227397098D014DC2822DB40C0AC2ECBC0B548B438E5469E10460B6C3E7EA3_big_uint254; }; template<> @@ -79,25 +78,23 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits>; constexpr static const std::size_t s = 0x04; constexpr static const extended_integral_type t = - 0x925C4B8763CBF9C599A6F7C0348D21CB00B85511637560626EDFA5C34C6B38D04689E957A1242C84A50189C6D96CADCA602072D09EAC1013B5458A2275D69B_cppui_modular504; + 0x925C4B8763CBF9C599A6F7C0348D21CB00B85511637560626EDFA5C34C6B38D04689E957A1242C84A50189C6D96CADCA602072D09EAC1013B5458A2275D69B_big_uint504; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D_cppui_modular503; + 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D_big_uint503; constexpr static const std::array nqr = {0x02, 0x01}; constexpr static const std::array nqr_to_t = { - 0xB20DCB5704E326A0DD3ECD4F30515275398A41A4E1DC5D347CFBBEDDA71CF82_cppui_modular252, - 0xB1FFEFD8885BF22252522C29527D19F05CFC50E9715370AB0F3A6CA462390C_cppui_modular248}; + 0xB20DCB5704E326A0DD3ECD4F30515275398A41A4E1DC5D347CFBBEDDA71CF82_big_uint252, + 0xB1FFEFD8885BF22252522C29527D19F05CFC50E9715370AB0F3A6CA462390C_big_uint248}; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const extended_integral_type group_order = - 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D8_cppui_modular507; + 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D8_big_uint507; }; template<> @@ -107,30 +104,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x1C; constexpr static const integral_type t = - 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F_cppui_modular226; + 0x30644E72E131A029B85045B68181585D2833E84879B9709143E1F593F_big_uint226; constexpr static const integral_type t_minus_1_over_2 = - 0x183227397098D014DC2822DB40C0AC2E9419F4243CDCB848A1F0FAC9F_cppui_modular225; + 0x183227397098D014DC2822DB40C0AC2E9419F4243CDCB848A1F0FAC9F_big_uint225; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x05; constexpr static const integral_type root_of_unity = - 0x2A3C09F0A58A7E8500E0A7EB8EF62ABC402D111E41112ED49BD61B6E725B19F0_cppui_modular254; + 0x2A3C09F0A58A7E8500E0A7EB8EF62ABC402D111E41112ED49BD61B6E725B19F0_big_uint254; constexpr static const integral_type nqr = 0x05; constexpr static const integral_type nqr_to_t = - 0x2A3C09F0A58A7E8500E0A7EB8EF62ABC402D111E41112ED49BD61B6E725B19F0_cppui_modular254; + 0x2A3C09F0A58A7E8500E0A7EB8EF62ABC402D111E41112ED49BD61B6E725B19F0_big_uint254; constexpr static const integral_type Rsquared = - 0x216D0B17F4E44A58C49833D53BB808553FE3AB1E35C59E31BB8E645AE216DA7_cppui_modular250; + 0x216D0B17F4E44A58C49833D53BB808553FE3AB1E35C59E31BB8E645AE216DA7_big_uint250; constexpr static const integral_type Rcubed = - 0xCF8594B7FCC657C893CC664A19FCFED2A489CBE1CFBB6B85E94D8E1B4BF0040_cppui_modular252; + 0xCF8594B7FCC657C893CC664A19FCFED2A489CBE1CFBB6B85E94D8E1B4BF0040_big_uint252; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order = - 0x183227397098D014DC2822DB40C0AC2E9419F4243CDCB848A1F0FAC9F8000000_cppui_modular254; + 0x183227397098D014DC2822DB40C0AC2E9419F4243CDCB848A1F0FAC9F8000000_big_uint254; }; constexpr std::size_t const arithmetic_params>::s; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/bls12.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/bls12.hpp index ddf9a10023..412f7df274 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/bls12.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/bls12.hpp @@ -48,30 +48,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x01; constexpr static const integral_type t = - 0xD0088F51CBFF34D258DD3DB21A5D66BB23BA5C279C2895FB39869507B587B120F55FFFF58A9FFFFDCFF7FFFFFFFD555_cppui_modular380; + 0xD0088F51CBFF34D258DD3DB21A5D66BB23BA5C279C2895FB39869507B587B120F55FFFF58A9FFFFDCFF7FFFFFFFD555_big_uint380; constexpr static const integral_type t_minus_1_over_2 = - 0x680447A8E5FF9A692C6E9ED90D2EB35D91DD2E13CE144AFD9CC34A83DAC3D8907AAFFFFAC54FFFFEE7FBFFFFFFFEAAA_cppui_modular379; + 0x680447A8E5FF9A692C6E9ED90D2EB35D91DD2E13CE144AFD9CC34A83DAC3D8907AAFFFFAC54FFFFEE7FBFFFFFFFEAAA_big_uint379; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x02; constexpr static const integral_type root_of_unity = - 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381; + 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381; constexpr static const integral_type nqr = 0x02; constexpr static const integral_type nqr_to_t = - 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381; + 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381; constexpr static const integral_type Rsquared = - 0x11988FE592CAE3AA9A793E85B519952D67EB88A9939D83C08DE5476C4C95B6D50A76E6A609D104F1F4DF1F341C341746_cppui_modular381; + 0x11988FE592CAE3AA9A793E85B519952D67EB88A9939D83C08DE5476C4C95B6D50A76E6A609D104F1F4DF1F341C341746_big_uint381; constexpr static const integral_type Rcubed = - 0xAA6346091755D4D2512D4356572472834C04E5E921E17619A53352A615E29DD315F831E03A7ADF8ED48AC6BD94CA1E0_cppui_modular380; + 0xAA6346091755D4D2512D4356572472834C04E5E921E17619A53352A615E29DD315F831E03A7ADF8ED48AC6BD94CA1E0_big_uint380; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order_minus_one_half = - 0xD0088F51CBFF34D258DD3DB21A5D66BB23BA5C279C2895FB39869507B587B120F55FFFF58A9FFFFDCFF7FFFFFFFD555_cppui_modular380; + 0xD0088F51CBFF34D258DD3DB21A5D66BB23BA5C279C2895FB39869507B587B120F55FFFF58A9FFFFDCFF7FFFFFFFD555_big_uint380; }; template<> @@ -81,25 +80,23 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits>; constexpr static const std::size_t s = 0x03; constexpr static const extended_integral_type t = - 0x5486F497186BF8E97A4F1D5445E4BD3C5B921CA1CE08D68CDCB3C92693D17A0A14C59FA2DBB94DDEA62926612F1DE023AD0C3390C30B8F6525D0B50E1234092CD7F23DA7CE36E862C586706C42279FAF9DAD63AEC705D564D54000038E31C7_cppui_modular759; + 0x5486F497186BF8E97A4F1D5445E4BD3C5B921CA1CE08D68CDCB3C92693D17A0A14C59FA2DBB94DDEA62926612F1DE023AD0C3390C30B8F6525D0B50E1234092CD7F23DA7CE36E862C586706C42279FAF9DAD63AEC705D564D54000038E31C7_big_uint759; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x2A437A4B8C35FC74BD278EAA22F25E9E2DC90E50E7046B466E59E49349E8BD050A62CFD16DDCA6EF53149330978EF011D68619C86185C7B292E85A87091A04966BF91ED3E71B743162C338362113CFD7CED6B1D76382EAB26AA00001C718E3_cppui_modular758; + 0x2A437A4B8C35FC74BD278EAA22F25E9E2DC90E50E7046B466E59E49349E8BD050A62CFD16DDCA6EF53149330978EF011D68619C86185C7B292E85A87091A04966BF91ED3E71B743162C338362113CFD7CED6B1D76382EAB26AA00001C718E3_big_uint758; constexpr static const std::array nqr = {1, 1}; constexpr static const std::array nqr_to_t = { - 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui_modular379, - 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui_modular381}; + 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_big_uint379, + 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_big_uint381}; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const extended_integral_type group_order_minus_one_half = - 0x1521BD25C61AFE3A5E93C75511792F4F16E48728738235A3372CF249A4F45E82853167E8B6EE5377A98A49984BC77808EB430CE430C2E3D949742D43848D024B35FC8F69F38DBA18B1619C1B1089E7EBE76B58EBB1C1755935500000E38C71C_cppui_modular761; + 0x1521BD25C61AFE3A5E93C75511792F4F16E48728738235A3372CF249A4F45E82853167E8B6EE5377A98A49984BC77808EB430CE430C2E3D949742D43848D024B35FC8F69F38DBA18B1619C1B1089E7EBE76B58EBB1C1755935500000E38C71C_big_uint761; }; template<> @@ -109,30 +106,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x20; constexpr static const integral_type t = - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF_cppui_modular223; + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF_big_uint223; constexpr static const integral_type t_minus_1_over_2 = - 0x39F6D3A994CEBEA4199CEC0404D0EC02A9DED2017FFF2DFF7FFFFFFF_cppui_modular222; + 0x39F6D3A994CEBEA4199CEC0404D0EC02A9DED2017FFF2DFF7FFFFFFF_big_uint222; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x07; constexpr static const integral_type root_of_unity = - 0x16A2A19EDFE81F20D09B681922C813B4B63683508C2280B93829971F439F0D2B_cppui_modular253; + 0x16A2A19EDFE81F20D09B681922C813B4B63683508C2280B93829971F439F0D2B_big_uint253; constexpr static const integral_type nqr = 0x05; constexpr static const integral_type nqr_to_t = - 0x212D79E5B416B6F0FD56DC8D168D6C0C4024FF270B3E0941B788F500B912F1F_cppui_modular250; + 0x212D79E5B416B6F0FD56DC8D168D6C0C4024FF270B3E0941B788F500B912F1F_big_uint250; constexpr static const integral_type Rsquared = - 0x748D9D99F59FF1105D314967254398F2B6CEDCB87925C23C999E990F3F29C6D_cppui_modular251; + 0x748D9D99F59FF1105D314967254398F2B6CEDCB87925C23C999E990F3F29C6D_big_uint251; constexpr static const integral_type Rcubed = - 0x6E2A5BB9C8DB33E973D13C71C7B5F4181B3E0D188CF06990C62C1807439B73AF_cppui_modular255; + 0x6E2A5BB9C8DB33E973D13C71C7B5F4181B3E0D188CF06990C62C1807439B73AF_big_uint255; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order_minus_one_half = - 0x39F6D3A994CEBEA4199CEC0404D0EC02A9DED2017FFF2DFF7FFFFFFF80000000_cppui_modular254; + 0x39F6D3A994CEBEA4199CEC0404D0EC02A9DED2017FFF2DFF7FFFFFFF80000000_big_uint254; }; /************************* BLS12-377 ***********************************/ @@ -144,30 +140,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x2E; constexpr static const integral_type t = - 0x6B8E9185F1443AB18EC1701B28524EC688B67CC03D44E3C7BCD88BEE82520005C2D7510C00000021423_cppui_modular331; + 0x6B8E9185F1443AB18EC1701B28524EC688B67CC03D44E3C7BCD88BEE82520005C2D7510C00000021423_big_uint331; constexpr static const integral_type t_minus_1_over_2 = - 0x35C748C2F8A21D58C760B80D94292763445B3E601EA271E3DE6C45F741290002E16BA88600000010A11_cppui_modular330; + 0x35C748C2F8A21D58C760B80D94292763445B3E601EA271E3DE6C45F741290002E16BA88600000010A11_big_uint330; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x0F; constexpr static const integral_type root_of_unity = - 0x36A92E05198A8030F152488AEFFC9B40FBE05B4512A3D4B44D994A0DDFF8C606DF0A4306FE0BC37ECA603CC563B9A1_cppui_modular374; + 0x36A92E05198A8030F152488AEFFC9B40FBE05B4512A3D4B44D994A0DDFF8C606DF0A4306FE0BC37ECA603CC563B9A1_big_uint374; constexpr static const integral_type nqr = 0x05; constexpr static const integral_type nqr_to_t = - 0x382D3D99CDBC5D8FE9DEE6AA914B0AD14FCACA7022110EC6EAA2BC56228AC41EA03D28CC795186BA6B5EF26B00BBE8_cppui_modular374; + 0x382D3D99CDBC5D8FE9DEE6AA914B0AD14FCACA7022110EC6EAA2BC56228AC41EA03D28CC795186BA6B5EF26B00BBE8_big_uint374; constexpr static const integral_type Rsquared = - 0x6DFCCB1E914B88837E92F041790BF9BFDF7D03827DC3AC22A5F11162D6B46D0329FCAAB00431B1B786686C9400CD22_cppui_modular375; + 0x6DFCCB1E914B88837E92F041790BF9BFDF7D03827DC3AC22A5F11162D6B46D0329FCAAB00431B1B786686C9400CD22_big_uint375; constexpr static const integral_type Rcubed = - 0x1065AB4C0E7DDA53F72540713590CB96A2A9516C804A20E2BE8B1180449F513E50F4148BE329585581F532F8815DE20_cppui_modular377; + 0x1065AB4C0E7DDA53F72540713590CB96A2A9516C804A20E2BE8B1180449F513E50F4148BE329585581F532F8815DE20_big_uint377; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order_minus_one_half = - 0xD71D230BE28875631D82E03650A49D8D116CF9807A89C78F79B117DD04A4000B85AEA2180000004284600000000000_cppui_modular376; + 0xD71D230BE28875631D82E03650A49D8D116CF9807A89C78F79B117DD04A4000B85AEA2180000004284600000000000_big_uint376; }; template<> @@ -177,25 +172,23 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits>; constexpr static const std::size_t s = 0x2F; constexpr static const extended_integral_type t = - 0x5A60FA1775FF644AD227766C24C78977170FB495DD27E3EBCE2827BB49AB813A0315F720CC19B8029CE24A0549AD88C155555176E15C063064972B0C7193AD797F7A46BE3813495B44D1E5C37B000E671A4A9E00000021423_cppui_modular707; + 0x5A60FA1775FF644AD227766C24C78977170FB495DD27E3EBCE2827BB49AB813A0315F720CC19B8029CE24A0549AD88C155555176E15C063064972B0C7193AD797F7A46BE3813495B44D1E5C37B000E671A4A9E00000021423_big_uint707; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x2D307D0BBAFFB2256913BB361263C4BB8B87DA4AEE93F1F5E71413DDA4D5C09D018AFB90660CDC014E712502A4D6C460AAAAA8BB70AE0318324B958638C9D6BCBFBD235F1C09A4ADA268F2E1BD8007338D254F00000010A11_cppui_modular706; + 0x2D307D0BBAFFB2256913BB361263C4BB8B87DA4AEE93F1F5E71413DDA4D5C09D018AFB90660CDC014E712502A4D6C460AAAAA8BB70AE0318324B958638C9D6BCBFBD235F1C09A4ADA268F2E1BD8007338D254F00000010A11_big_uint706; constexpr static const std::array nqr = {0x00, 0x01}; constexpr static const std::array nqr_to_t = { 0x00, - 0x1ABEF7237D62007BB9B2EDA5AFCB52F9D179F23DBD49B8D1B24CF7C1BF8066791317689172D0F4CB90CF47182B7D7B2_cppui_modular377}; + 0x1ABEF7237D62007BB9B2EDA5AFCB52F9D179F23DBD49B8D1B24CF7C1BF8066791317689172D0F4CB90CF47182B7D7B2_big_uint377}; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const extended_integral_type group_order_minus_one_half = - 0x16983E85DD7FD912B489DD9B0931E25DC5C3ED257749F8FAF38A09EED26AE04E80C57DC833066E00A7389281526B62305555545DB857018C1925CAC31C64EB5E5FDE91AF8E04D256D1347970DEC00399C692A780000008508C00000000000_cppui_modular753; + 0x16983E85DD7FD912B489DD9B0931E25DC5C3ED257749F8FAF38A09EED26AE04E80C57DC833066E00A7389281526B62305555545DB857018C1925CAC31C64EB5E5FDE91AF8E04D256D1347970DEC00399C692A780000008508C00000000000_big_uint753; }; template<> @@ -205,30 +198,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x2F; constexpr static const integral_type t = - 0x2556CABD34594AACC1689A3CB86F6002B354EDFDA00000021423_cppui_modular206; + 0x2556CABD34594AACC1689A3CB86F6002B354EDFDA00000021423_big_uint206; constexpr static const integral_type t_minus_1_over_2 = - 0x12AB655E9A2CA55660B44D1E5C37B00159AA76FED00000010A11_cppui_modular205; + 0x12AB655E9A2CA55660B44D1E5C37B00159AA76FED00000010A11_big_uint205; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x16; constexpr static const integral_type root_of_unity = - 0x11D4B7F60CB92CC160C69477D1A8A12F9B506EE363E3F04A476EF4A4EC2A895E_cppui_modular253; + 0x11D4B7F60CB92CC160C69477D1A8A12F9B506EE363E3F04A476EF4A4EC2A895E_big_uint253; constexpr static const integral_type nqr = 0x0B; constexpr static const integral_type nqr_to_t = - 0xF4F58D6B338DB36480B0DA08D4FF39BE5C1F1B84059D4CD726869AAA623875C_cppui_modular252; + 0xF4F58D6B338DB36480B0DA08D4FF39BE5C1F1B84059D4CD726869AAA623875C_big_uint252; constexpr static const integral_type Rsquared = - 0x11FDAE7EFF1C939A7CC008FE5DC8593CC2C27B58860591F25D577BAB861857B_cppui_modular249; + 0x11FDAE7EFF1C939A7CC008FE5DC8593CC2C27B58860591F25D577BAB861857B_big_uint249; constexpr static const integral_type Rcubed = - 0x601DFA555C48DDAB1E55EF6F1C9D713624D23FFAE2716996A4295C90F65454C_cppui_modular251; + 0x601DFA555C48DDAB1E55EF6F1C9D713624D23FFAE2716996A4295C90F65454C_big_uint251; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order_minus_one_half = - 0x955B2AF4D1652AB305A268F2E1BD800ACD53B7F680000008508C00000000000_cppui_modular252; + 0x955B2AF4D1652AB305A268F2E1BD800ACD53B7F680000008508C00000000000_big_uint252; }; /************************* BLS12-381 definitions ***********************************/ diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/goldilocks64.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/goldilocks64.hpp index 90709cf4b8..52227f7be4 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/goldilocks64.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/goldilocks64.hpp @@ -48,7 +48,7 @@ namespace nil { constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x07; constexpr static const integral_type root_of_unity = - 0x185629DCDA58878C_cppui_modular64; + 0x185629DCDA58878C_big_uint64; }; constexpr std::size_t const arithmetic_params::s; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt4.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt4.hpp index 463336da34..2fe2caa340 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt4.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt4.hpp @@ -46,30 +46,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x11; constexpr static const integral_type t = - 0x1DE7BDE6A39D133124ED3D82A47657764B1AE89987520D4F1AF2890070964866B2D38B3_cppui_modular281; + 0x1DE7BDE6A39D133124ED3D82A47657764B1AE89987520D4F1AF2890070964866B2D38B3_big_uint281; constexpr static const integral_type t_minus_1_over_2 = - 0xEF3DEF351CE899892769EC1523B2BBB258D744CC3A906A78D794480384B24335969C59_cppui_modular280; + 0xEF3DEF351CE899892769EC1523B2BBB258D744CC3A906A78D794480384B24335969C59_big_uint280; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x11; constexpr static const integral_type root_of_unity = - 0x214431121152176339675F00F9D465A3C037F18735DB28205F2A5F57D155F151CEC101EEC43_cppui_modular298; + 0x214431121152176339675F00F9D465A3C037F18735DB28205F2A5F57D155F151CEC101EEC43_big_uint298; constexpr static const integral_type nqr = 0x11; constexpr static const integral_type nqr_to_t = - 0x214431121152176339675F00F9D465A3C037F18735DB28205F2A5F57D155F151CEC101EEC43_cppui_modular298; + 0x214431121152176339675F00F9D465A3C037F18735DB28205F2A5F57D155F151CEC101EEC43_big_uint298; constexpr static const integral_type Rsquared = - 0x224F0918A341F32E014AD38D47B66BD7673318850E1A266A1ADBF2BC8930065ACEC5613D220_cppui_modular298; + 0x224F0918A341F32E014AD38D47B66BD7673318850E1A266A1ADBF2BC8930065ACEC5613D220_big_uint298; constexpr static const integral_type Rcubed = - 0x35B329C5C21DB492B899FB731B0626C4C908A5073171DE648C893BA7447A3FE093A2C77F995_cppui_modular298; + 0x35B329C5C21DB492B899FB731B0626C4C908A5073171DE648C893BA7447A3FE093A2C77F995_big_uint298; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order = - 0x1DE7BDE6A39D133124ED3D82A47657764B1AE89987520D4F1AF2890070964866B2D38B30000_cppui_modular297; + 0x1DE7BDE6A39D133124ED3D82A47657764B1AE89987520D4F1AF2890070964866B2D38B30000_big_uint297; }; template<> @@ -79,23 +78,21 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits>; constexpr static const std::size_t s = 0x12; constexpr static const extended_integral_type t = - 0x37E52CE842B39321A34D7BA62E2C735153C68D35F7A312CDB18451030CB297F3B772167A8487033D5772A0EF6BEA9BCA60190FFE1CDB642F88A0FF2EFF7A6A3A80FD00203385638B3_cppui_modular578; + 0x37E52CE842B39321A34D7BA62E2C735153C68D35F7A312CDB18451030CB297F3B772167A8487033D5772A0EF6BEA9BCA60190FFE1CDB642F88A0FF2EFF7A6A3A80FD00203385638B3_big_uint578; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x1BF296742159C990D1A6BDD3171639A8A9E3469AFBD18966D8C2288186594BF9DBB90B3D4243819EABB95077B5F54DE5300C87FF0E6DB217C4507F977FBD351D407E801019C2B1C59_cppui_modular577; + 0x1BF296742159C990D1A6BDD3171639A8A9E3469AFBD18966D8C2288186594BF9DBB90B3D4243819EABB95077B5F54DE5300C87FF0E6DB217C4507F977FBD351D407E801019C2B1C59_big_uint577; constexpr static const std::array nqr = {0x08, 0x01}; constexpr static const std::array nqr_to_t = { - 0x00, 0x3B1F45391287A9CB585B8E5504C24BF1EC2010553885078C85899ACD708205080134A9BE6A_cppui_modular294}; + 0x00, 0x3B1F45391287A9CB585B8E5504C24BF1EC2010553885078C85899ACD708205080134A9BE6A_big_uint294}; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const extended_integral_type group_order = - 0x6FCA59D085672643469AF74C5C58E6A2A78D1A6BEF46259B6308A20619652FE76EE42CF5090E067AAEE541DED7D53794C0321FFC39B6C85F1141FE5DFEF4D47501FA0040670AC71660000_cppui_modular595; + 0x6FCA59D085672643469AF74C5C58E6A2A78D1A6BEF46259B6308A20619652FE76EE42CF5090E067AAEE541DED7D53794C0321FFC39B6C85F1141FE5DFEF4D47501FA0040670AC71660000_big_uint595; }; constexpr std::size_t const arithmetic_params>::s; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt6.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt6.hpp index ca0eb1eed6..a009454c55 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt6.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/mnt6.hpp @@ -46,30 +46,29 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; constexpr static const std::size_t s = 0x22; constexpr static const integral_type t = - 0xEF3DEF351CE899892769EC1523B2BBB258D73D10653ED25301E4975AB4EED0CD29_cppui_modular264; + 0xEF3DEF351CE899892769EC1523B2BBB258D73D10653ED25301E4975AB4EED0CD29_big_uint264; constexpr static const integral_type t_minus_1_over_2 = - 0x779EF79A8E744CC493B4F60A91D95DD92C6B9E88329F692980F24BAD5A77686694_cppui_modular263; + 0x779EF79A8E744CC493B4F60A91D95DD92C6B9E88329F692980F24BAD5A77686694_big_uint263; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x0A; constexpr static const integral_type root_of_unity = - 0xF29386B6F08DFECE98F8AA2954E2CF8650D75AE5D90488A8934C1AA0BB321B07D3B48F8379_cppui_modular296; + 0xF29386B6F08DFECE98F8AA2954E2CF8650D75AE5D90488A8934C1AA0BB321B07D3B48F8379_big_uint296; constexpr static const integral_type nqr = 0x05; constexpr static const integral_type nqr_to_t = - 0x330D0653B5BA46A85FC6D3958E16DA566E30E50010AAC4A990E4047A12E2043EE3EF848E190_cppui_modular298; + 0x330D0653B5BA46A85FC6D3958E16DA566E30E50010AAC4A990E4047A12E2043EE3EF848E190_big_uint298; constexpr static const integral_type Rsquared = - 0x149BB44A34202FF00DCED8E4B6D4BBD6DCF1E3A8386034F9102ADB68371465A743C68E0596B_cppui_modular297; + 0x149BB44A34202FF00DCED8E4B6D4BBD6DCF1E3A8386034F9102ADB68371465A743C68E0596B_big_uint297; constexpr static const integral_type Rcubed = - 0x1A0B411C083B440F6A9ED2947CEAC13907BAB5D43C2F687B031B7F0B2B9B6DE2F1B99BD9C4B_cppui_modular297; + 0x1A0B411C083B440F6A9ED2947CEAC13907BAB5D43C2F687B031B7F0B2B9B6DE2F1B99BD9C4B_big_uint297; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const integral_type group_order = - 0x1DE7BDE6A39D133124ED3D82A47657764B1AE7A20CA7DA4A603C92EB569DDA19A5200000000_cppui_modular297; + 0x1DE7BDE6A39D133124ED3D82A47657764B1AE7A20CA7DA4A603C92EB569DDA19A5200000000_big_uint297; }; template<> @@ -79,24 +78,22 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; typedef typename policy_type::integral_type integral_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<3 * policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<3 * policy_type::modulus_bits>; constexpr static const std::size_t s = 0x22; constexpr static const extended_integral_type t = - 0xD0F1EB0C5D321E87BF885ACDEBEDB4C0D6B30E63AB6E7BF6417A7990679AA640A7D58FB90CC708D572D32DFD6443366D2F92F48FF1A02FDB0CC11573BAB71F8E5E05B07DEA208A7E11F3E61C9968CC65F379EFCEF9472C7FC6DEE40194CA1DF9F801DC0D24656EACC72677B_cppui_modular860; + 0xD0F1EB0C5D321E87BF885ACDEBEDB4C0D6B30E63AB6E7BF6417A7990679AA640A7D58FB90CC708D572D32DFD6443366D2F92F48FF1A02FDB0CC11573BAB71F8E5E05B07DEA208A7E11F3E61C9968CC65F379EFCEF9472C7FC6DEE40194CA1DF9F801DC0D24656EACC72677B_big_uint860; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x6878F5862E990F43DFC42D66F5F6DA606B598731D5B73DFB20BD3CC833CD532053EAC7DC8663846AB96996FEB2219B3697C97A47F8D017ED86608AB9DD5B8FC72F02D83EF510453F08F9F30E4CB46632F9BCF7E77CA3963FE36F7200CA650EFCFC00EE069232B75663933BD_cppui_modular859; + 0x6878F5862E990F43DFC42D66F5F6DA606B598731D5B73DFB20BD3CC833CD532053EAC7DC8663846AB96996FEB2219B3697C97A47F8D017ED86608AB9DD5B8FC72F02D83EF510453F08F9F30E4CB46632F9BCF7E77CA3963FE36F7200CA650EFCFC00EE069232B75663933BD_big_uint859; constexpr static const std::array nqr = {0x05, 0x00, 0x00}; constexpr static const std::array nqr_to_t = { - 0x1366271F76AB41CEEEE8C1E5E972F3CEC14A25F18B3F4B93642FAD4972356D977470E0FA674_cppui_modular297, 0x00, + 0x1366271F76AB41CEEEE8C1E5E972F3CEC14A25F18B3F4B93642FAD4972356D977470E0FA674_big_uint297, 0x00, 0x00}; constexpr static const integral_type modulus = policy_type::modulus; constexpr static const extended_integral_type group_order = - 0x1A1E3D618BA643D0F7F10B59BD7DB6981AD661CC756DCF7EC82F4F320CF354C814FAB1F72198E11AAE5A65BFAC8866CDA5F25E91FE3405FB619822AE7756E3F1CBC0B60FBD44114FC23E7CC3932D198CBE6F3DF9DF28E58FF8DBDC80329943BF3F003B81A48CADD598E4CEF600000000_cppui_modular893; + 0x1A1E3D618BA643D0F7F10B59BD7DB6981AD661CC756DCF7EC82F4F320CF354C814FAB1F72198E11AAE5A65BFAC8866CDA5F25E91FE3405FB619822AE7756E3F1CBC0B60FBD44114FC23E7CC3932D198CBE6F3DF9DF28E58FF8DBDC80329943BF3F003B81A48CADD598E4CEF600000000_big_uint893; }; constexpr std::size_t const arithmetic_params>::s; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/pallas.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/pallas.hpp index ec220640f4..af51b32255 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/pallas.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/pallas.hpp @@ -53,7 +53,7 @@ namespace nil { constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x05; constexpr static const integral_type root_of_unity = - 0x1ea14637cbe1870c65d520c6cd47d259883000713dc3c2a1adf8b071592f247a_cppui_modular255; + 0x1ea14637cbe1870c65d520c6cd47d259883000713dc3c2a1adf8b071592f247a_big_uint255; constexpr static const integral_type nqr = 0x05; }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/vesta.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/vesta.hpp index 087927a9f6..a1c20faa74 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/vesta.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/arithmetic_params/vesta.hpp @@ -46,13 +46,12 @@ namespace nil { public: typedef typename policy_type::modular_type modular_type; typedef typename policy_type::integral_type integral_type; - typedef typename policy_type::modular_backend modular_backend; constexpr static const integral_type arithmetic_generator = 0x01; constexpr static const integral_type geometric_generator = 0x02; constexpr static const integral_type multiplicative_generator = 0x05; constexpr static const std::size_t s = 0x20; constexpr static const integral_type root_of_unity = - 0x39579430a0535caa2072a2239079f02b4c5b0caa29bfe9396f80d8a28434208f_cppui_modular255; + 0x39579430a0535caa2072a2239079f02b4c5b0caa29bfe9396f80d8a28434208f_big_uint255; constexpr static const integral_type nqr = 0x05; }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/babyjubjub/scalar_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/babyjubjub/scalar_field.hpp index cecac86ac6..bb0719264b 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/babyjubjub/scalar_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/babyjubjub/scalar_field.hpp @@ -50,16 +50,9 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x60c89ce5c263405370a08b6d0302b0bab3eedb83920ee0a677297dc392126f1_cppui_modular251; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x60c89ce5c263405370a08b6d0302b0bab3eedb83920ee0a677297dc392126f1_big_uint251; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -74,9 +67,6 @@ namespace nil { constexpr typename babyjubjub_scalar_field::integral_type const babyjubjub_scalar_field::modulus; - constexpr - typename babyjubjub_scalar_field::modular_params_type const babyjubjub_scalar_field::modulus_params; - using babyjubjub_fr = babyjubjub_scalar_field; } // namespace fields diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/base_field.hpp index f1037f5c60..4770fdf0bf 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/base_field.hpp @@ -58,19 +58,12 @@ namespace nil { #else constexpr static const integral_type modulus = - 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAB_cppui_modular381; + 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAB_big_uint381; constexpr static const integral_type group_order_minus_one_half = - 0xD0088F51CBFF34D258DD3DB21A5D66BB23BA5C279C2895FB39869507B587B120F55FFFF58A9FFFFDCFF7FFFFFFFD555_cppui_modular381; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0xD0088F51CBFF34D258DD3DB21A5D66BB23BA5C279C2895FB39869507B587B120F55FFFF58A9FFFFDCFF7FFFFFFFD555_big_uint381; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; #endif }; @@ -90,19 +83,12 @@ namespace nil { #else constexpr static const integral_type modulus = - 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000001_cppui_modular377; + 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000001_big_uint377; constexpr static const integral_type group_order_minus_one_half = - 0xD71D230BE28875631D82E03650A49D8D116CF9807A89C78F79B117DD04A4000B85AEA2180000004284600000000000_cppui_modular377; + 0xD71D230BE28875631D82E03650A49D8D116CF9807A89C78F79B117DD04A4000B85AEA2180000004284600000000000_big_uint377; - typedef typename policy_type::modular_backend modular_backend; - typedef boost::multiprecision::backends::modular_params modular_params_type; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; #endif @@ -124,11 +110,6 @@ namespace nil { constexpr typename bls12_base_field<381>::integral_type const bls12_base_field<381>::group_order_minus_one_half; constexpr typename bls12_base_field<377>::integral_type const bls12_base_field<377>::group_order_minus_one_half; - - constexpr - typename bls12_base_field<381>::modular_params_type const bls12_base_field<381>::modulus_params; - constexpr - typename bls12_base_field<377>::modular_params_type const bls12_base_field<377>::modulus_params; #endif template using bls12_fq = bls12_base_field; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/scalar_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/scalar_field.hpp index aedd96d8b4..ad8ddb4e54 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/scalar_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/bls12/scalar_field.hpp @@ -60,19 +60,12 @@ namespace nil { #else constexpr static const integral_type modulus = - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001_cppui_modular255; + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001_big_uint255; constexpr static const integral_type group_order_minus_one_half = - 0x39F6D3A994CEBEA4199CEC0404D0EC02A9DED2017FFF2DFF7FFFFFFF80000000_cppui_modular255; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x39F6D3A994CEBEA4199CEC0404D0EC02A9DED2017FFF2DFF7FFFFFFF80000000_big_uint255; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; #endif }; @@ -92,18 +85,11 @@ namespace nil { #else constexpr static const integral_type modulus = - 0x12AB655E9A2CA55660B44D1E5C37B00159AA76FED00000010A11800000000001_cppui_modular253; + 0x12AB655E9A2CA55660B44D1E5C37B00159AA76FED00000010A11800000000001_big_uint253; constexpr static const integral_type group_order_minus_one_half = - 0x0955B2AF4D1652AB305A268F2E1BD800ACD53B7F680000008508C00000000000_cppui_modular253; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x0955B2AF4D1652AB305A268F2E1BD800ACD53B7F680000008508C00000000000_big_uint253; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; #endif }; @@ -123,11 +109,6 @@ namespace nil { constexpr typename bls12_scalar_field<377>::integral_type const bls12_scalar_field<377>::modulus; constexpr typename bls12_scalar_field<381>::integral_type const bls12_scalar_field<381>::group_order_minus_one_half; constexpr typename bls12_scalar_field<377>::integral_type const bls12_scalar_field<377>::group_order_minus_one_half; - - constexpr - typename bls12_scalar_field<381>::modular_params_type const bls12_scalar_field<381>::modulus_params; - constexpr - typename bls12_scalar_field<377>::modular_params_type const bls12_scalar_field<377>::modulus_params; #endif template using bls12_fr = bls12_scalar_field; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/base_field.hpp index fd87f46b55..8fef12df8f 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/base_field.hpp @@ -51,26 +51,18 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const std::size_t value_bits = modulus_bits; constexpr static const std::size_t arity = 1; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits>; typedef typename policy_type::integral_type integral_type; #ifdef __ZKLLVM__ typedef __zkllvm_field_curve25519_base value_type; #else constexpr static const integral_type modulus = - 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed_cppui_modular255; + 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed_big_uint255; constexpr static const integral_type group_order_minus_one_half = - 0x3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6_cppui_modular255; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6_big_uint255; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp> value_type; #endif }; @@ -82,8 +74,6 @@ namespace nil { #ifdef __ZKLLVM__ #else constexpr typename curve25519_base_field::integral_type const curve25519_base_field::modulus; - constexpr - typename curve25519_base_field::modular_params_type const curve25519_base_field::modulus_params; #endif using curve25519_fq = curve25519_base_field; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/scalar_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/scalar_field.hpp index 2cf3fba0c1..42ff23fb75 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/scalar_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/curve25519/scalar_field.hpp @@ -53,23 +53,15 @@ namespace nil { constexpr static const std::size_t arity = 1; typedef typename policy_type::integral_type integral_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits>; #ifdef __ZKLLVM__ typedef __zkllvm_field_curve25519_scalar value_type; #else constexpr static const integral_type modulus = - 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_cppui_modular253; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_big_uint253; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp> value_type; #endif }; @@ -80,8 +72,6 @@ namespace nil { #ifdef __ZKLLVM__ #else constexpr typename curve25519_scalar_field::integral_type const curve25519_scalar_field::modulus; - constexpr - typename curve25519_scalar_field::modular_params_type const curve25519_scalar_field::modulus_params; #endif using curve25519_fr = curve25519_scalar_field; } // namespace fields diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp.hpp index 86cfa50afc..6268f24000 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp.hpp @@ -31,13 +31,8 @@ #include #include -#include -#include -#include -#include -#include - -#include +#include +#include #include @@ -55,10 +50,7 @@ namespace nil { typedef typename policy_type::modular_type modular_type; typedef typename policy_type::integral_type integral_type; - typedef typename policy_type::modular_backend modular_backend; - typedef typename policy_type::modular_params_type modular_params_type; - constexpr static const modular_params_type modulus_params = policy_type::modulus_params; constexpr static const integral_type modulus = policy_type::modulus; using data_type = modular_type; @@ -68,15 +60,14 @@ namespace nil { constexpr element_fp(const data_type &data) : data(data) {} - template::value), bool>::type = true> - constexpr element_fp(const Number &data) - : data(typename modular_type::backend_type(data.backend(), modulus_params)) {} + template + constexpr element_fp(const nil::crypto3::multiprecision::big_uint &data) + : data(data) {} template::value, bool>::type = true> constexpr element_fp(const Number &data) - : data(typename modular_type::backend_type(data, modulus_params)) {} + : data(data) {} constexpr element_fp(const element_fp &B) : data(B.data) {} @@ -161,19 +152,19 @@ namespace nil { } constexpr bool operator<(const element_fp &B) const { - return data < B.data; + return data.base() < B.data.base(); } constexpr bool operator>(const element_fp &B) const { - return data > B.data; + return data.base() > B.data.base(); } constexpr bool operator<=(const element_fp &B) const { - return data <= B.data; + return data.base() <= B.data.base(); } constexpr bool operator>=(const element_fp &B) const { - return data >= B.data; + return data.base() >= B.data.base(); } constexpr element_fp &operator++() { @@ -188,7 +179,7 @@ namespace nil { } constexpr element_fp &operator--() { - data = data - typename modular_type::backend_type(1u, modulus_params); + data = data - modular_type(1u); return *this; } @@ -217,7 +208,7 @@ namespace nil { } constexpr element_fp inversed() const { - return element_fp(inverse_mod(data)); + return element_fp(inverse_extended_euclidean_algorithm(data)); } constexpr element_fp squared() const { @@ -235,25 +226,15 @@ namespace nil { return (tmp.is_one() || tmp.is_zero()); } - template::value>::type> - constexpr element_fp pow(const PowerType pwr) const { - return element_fp(boost::multiprecision::powm(data, boost::multiprecision::uint128_modular_t(pwr))); - } - - template - constexpr element_fp - pow(const boost::multiprecision::number &pwr) const { - return element_fp(boost::multiprecision::powm(data, pwr)); + template + constexpr element_fp pow(const PowerType &pwr) const { + return element_fp(nil::crypto3::multiprecision::pow(data, pwr)); } }; template constexpr typename element_fp::integral_type const element_fp::modulus; - template - constexpr typename element_fp::modular_params_type const element_fp::modulus_params; - namespace element_fp_details { // These constexpr static variables can not be members of element_fp, because // element_fp is incomplete type until the end of its declaration. diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp12_2over3over2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp12_2over3over2.hpp index ba3e3483b4..1386f14bd8 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp12_2over3over2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp12_2over3over2.hpp @@ -30,9 +30,6 @@ #include #include -#include -#include - namespace nil { namespace crypto3 { namespace algebra { @@ -260,12 +257,12 @@ namespace nil { return res; bool found_one = false; - for (long i = boost::multiprecision::msb(exponent); i >= 0; --i) { + for (long i = exponent.msb(); i >= 0; --i) { if (found_one) { res = res.cyclotomic_squared(); } - if (boost::multiprecision::bit_test(exponent, i)) { + if (exponent.bit_test(i)) { found_one = true; res = res * (*this); } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp4.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp4.hpp index 191e2ab61d..f9b9db5606 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp4.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp4.hpp @@ -29,8 +29,6 @@ #include #include -#include - namespace nil { namespace crypto3 { namespace algebra { @@ -198,7 +196,7 @@ namespace nil { element_fp4 this_inverse = this->unitary_inversed(); bool found_nonzero = false; - std::vector NAF = boost::multiprecision::find_wnaf(1, exponent); + std::vector NAF = nil::crypto3::multiprecision::find_wnaf(1, exponent); for (long i = static_cast(NAF.size() - 1); i >= 0; --i) { if (found_nonzero) { diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp6_2over3.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp6_2over3.hpp index 889075e200..136d6db2a8 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp6_2over3.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/element/fp6_2over3.hpp @@ -29,8 +29,6 @@ #include #include -#include - namespace nil { namespace crypto3 { namespace algebra { @@ -248,7 +246,7 @@ namespace nil { element_fp6_2over3 this_inverse = this->unitary_inversed(); bool found_nonzero = false; - std::vector NAF = boost::multiprecision::find_wnaf(1, exponent); + std::vector NAF = nil::crypto3::multiprecision::find_wnaf(1, exponent); for (long i = static_cast(NAF.size() - 1); i >= 0; --i) { if (found_nonzero) { diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/exponentiation.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/exponentiation.hpp index 03d6edfcce..084b60dde0 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/exponentiation.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/exponentiation.hpp @@ -29,7 +29,7 @@ #include -#include +#include namespace nil { @@ -46,12 +46,12 @@ namespace nil { bool found_one = false; - for (long i = boost::multiprecision::msb(exponent); i >= 0; --i) { + for (long i = nil::crypto3::multiprecision::msb(exponent); i >= 0; --i) { if (found_one) { result = result.squared(); } - if (boost::multiprecision::bit_test(exponent, i)) { + if (nil::crypto3::multiprecision::bit_test(exponent, i)) { found_one = true; result *= base; } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp12_2over3over2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp12_2over3over2.hpp index 88c30f0002..7b4608c925 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp12_2over3over2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp12_2over3over2.hpp @@ -71,52 +71,52 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01, 0x00), - non_residue_type(0x1284B71C2865A7DFE8B99FDD76E68B605C521E08292F2176D60B35DADCC9E470_cppui_modular253, - 0x246996F3B4FAE7E6A6327CFE12150B8E747992778EEEC7E5CA5CF05F80F362AC_cppui_modular254), - non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD49_cppui_modular254, + non_residue_type(0x1284B71C2865A7DFE8B99FDD76E68B605C521E08292F2176D60B35DADCC9E470_big_uint253, + 0x246996F3B4FAE7E6A6327CFE12150B8E747992778EEEC7E5CA5CF05F80F362AC_big_uint254), + non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD49_big_uint254, 0x00), - non_residue_type(0x19DC81CFCC82E4BBEFE9608CD0ACAA90894CB38DBE55D24AE86F7D391ED4A67F_cppui_modular253, - 0xABF8B60BE77D7306CBEEE33576139D7F03A5E397D439EC7694AA2BF4C0C101_cppui_modular248), - non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_cppui_modular254, + non_residue_type(0x19DC81CFCC82E4BBEFE9608CD0ACAA90894CB38DBE55D24AE86F7D391ED4A67F_big_uint253, + 0xABF8B60BE77D7306CBEEE33576139D7F03A5E397D439EC7694AA2BF4C0C101_big_uint248), + non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_big_uint254, 0x00), - non_residue_type(0x757CAB3A41D3CDC072FC0AF59C61F302CFA95859526B0D41264475E420AC20F_cppui_modular251, - 0xCA6B035381E35B618E9B79BA4E2606CA20B7DFD71573C93E85845E34C4A5B9C_cppui_modular252), - non_residue_type(0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui_modular254, + non_residue_type(0x757CAB3A41D3CDC072FC0AF59C61F302CFA95859526B0D41264475E420AC20F_big_uint251, + 0xCA6B035381E35B618E9B79BA4E2606CA20B7DFD71573C93E85845E34C4A5B9C_big_uint252), + non_residue_type(0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_big_uint254, 0x00), - non_residue_type(0x1DDF9756B8CBF849CF96A5D90A9ACCFD3B2F4C893F42A9166615563BFBB318D7_cppui_modular253, - 0xBFAB77F2C36B843121DC8B86F6C4CCF2307D819D98302A771C39BB757899A9B_cppui_modular252), - non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_cppui_modular191, 0x00), - non_residue_type(0x1687CCA314AEBB6DC866E529B0D4ADCD0E34B703AA1BF84253B10EDDB9A856C8_cppui_modular253, - 0x2FB855BCD54A22B6B18456D34C0B44C0187DC4ADD09D90A0C58BE1EAE3BC3C46_cppui_modular254), - non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFF_cppui_modular191, 0x00), - non_residue_type(0x290C83BF3D14634DB120850727BB392D6A86D50BD34B19B929BC44B896723B38_cppui_modular254, - 0x23BD9E3DA9136A739F668E1ADC9EF7F0F575EC93F71A8DF953C846338C32A1AB_cppui_modular254)};*/ + non_residue_type(0x1DDF9756B8CBF849CF96A5D90A9ACCFD3B2F4C893F42A9166615563BFBB318D7_big_uint253, + 0xBFAB77F2C36B843121DC8B86F6C4CCF2307D819D98302A771C39BB757899A9B_big_uint252), + non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_big_uint191, 0x00), + non_residue_type(0x1687CCA314AEBB6DC866E529B0D4ADCD0E34B703AA1BF84253B10EDDB9A856C8_big_uint253, + 0x2FB855BCD54A22B6B18456D34C0B44C0187DC4ADD09D90A0C58BE1EAE3BC3C46_big_uint254), + non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFF_big_uint191, 0x00), + non_residue_type(0x290C83BF3D14634DB120850727BB392D6A86D50BD34B19B929BC44B896723B38_big_uint254, + 0x23BD9E3DA9136A739F668E1ADC9EF7F0F575EC93F71A8DF953C846338C32A1AB_big_uint254)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, 0x00, - 0x1284B71C2865A7DFE8B99FDD76E68B605C521E08292F2176D60B35DADCC9E470_cppui_modular253, - 0x246996F3B4FAE7E6A6327CFE12150B8E747992778EEEC7E5CA5CF05F80F362AC_cppui_modular254, - 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD49_cppui_modular254, + 0x1284B71C2865A7DFE8B99FDD76E68B605C521E08292F2176D60B35DADCC9E470_big_uint253, + 0x246996F3B4FAE7E6A6327CFE12150B8E747992778EEEC7E5CA5CF05F80F362AC_big_uint254, + 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD49_big_uint254, 0x00, - 0x19DC81CFCC82E4BBEFE9608CD0ACAA90894CB38DBE55D24AE86F7D391ED4A67F_cppui_modular253, - 0xABF8B60BE77D7306CBEEE33576139D7F03A5E397D439EC7694AA2BF4C0C101_cppui_modular248, - 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_cppui_modular254, + 0x19DC81CFCC82E4BBEFE9608CD0ACAA90894CB38DBE55D24AE86F7D391ED4A67F_big_uint253, + 0xABF8B60BE77D7306CBEEE33576139D7F03A5E397D439EC7694AA2BF4C0C101_big_uint248, + 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_big_uint254, 0x00, - 0x757CAB3A41D3CDC072FC0AF59C61F302CFA95859526B0D41264475E420AC20F_cppui_modular251, - 0xCA6B035381E35B618E9B79BA4E2606CA20B7DFD71573C93E85845E34C4A5B9C_cppui_modular252, - 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui_modular254, + 0x757CAB3A41D3CDC072FC0AF59C61F302CFA95859526B0D41264475E420AC20F_big_uint251, + 0xCA6B035381E35B618E9B79BA4E2606CA20B7DFD71573C93E85845E34C4A5B9C_big_uint252, + 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_big_uint254, 0x00, - 0x1DDF9756B8CBF849CF96A5D90A9ACCFD3B2F4C893F42A9166615563BFBB318D7_cppui_modular253, - 0xBFAB77F2C36B843121DC8B86F6C4CCF2307D819D98302A771C39BB757899A9B_cppui_modular252, - 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_cppui_modular191, + 0x1DDF9756B8CBF849CF96A5D90A9ACCFD3B2F4C893F42A9166615563BFBB318D7_big_uint253, + 0xBFAB77F2C36B843121DC8B86F6C4CCF2307D819D98302A771C39BB757899A9B_big_uint252, + 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_big_uint191, 0x00, - 0x1687CCA314AEBB6DC866E529B0D4ADCD0E34B703AA1BF84253B10EDDB9A856C8_cppui_modular253, - 0x2FB855BCD54A22B6B18456D34C0B44C0187DC4ADD09D90A0C58BE1EAE3BC3C46_cppui_modular254, - 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFF_cppui_modular191, + 0x1687CCA314AEBB6DC866E529B0D4ADCD0E34B703AA1BF84253B10EDDB9A856C8_big_uint253, + 0x2FB855BCD54A22B6B18456D34C0B44C0187DC4ADD09D90A0C58BE1EAE3BC3C46_big_uint254, + 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFF_big_uint191, 0x00, - 0x290C83BF3D14634DB120850727BB392D6A86D50BD34B19B929BC44B896723B38_cppui_modular254, - 0x23BD9E3DA9136A739F668E1ADC9EF7F0F575EC93F71A8DF953C846338C32A1AB_cppui_modular254}; + 0x290C83BF3D14634DB120850727BB392D6A86D50BD34B19B929BC44B896723B38_big_uint254, + 0x23BD9E3DA9136A739F668E1ADC9EF7F0F575EC93F71A8DF953C846338C32A1AB_big_uint254}; constexpr static const non_residue_type non_residue = non_residue_type(0x09, 0x01); }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp2.hpp index 0955a36f98..9b5a715320 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp2.hpp @@ -55,9 +55,7 @@ namespace nil { typedef typename policy_type::integral_type integral_type; - typedef boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>> - extended_integral_type; + typedef nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits> extended_integral_type; constexpr static const integral_type modulus = policy_type::modulus; @@ -69,26 +67,26 @@ namespace nil { constexpr static const std::size_t s = 0x04; constexpr static const extended_integral_type t = - 0x925C4B8763CBF9C599A6F7C0348D21CB00B85511637560626EDFA5C34C6B38D04689E957A1242C84A50189C6D96CADCA602072D09EAC1013B5458A2275D69B_cppui_modular504; + 0x925C4B8763CBF9C599A6F7C0348D21CB00B85511637560626EDFA5C34C6B38D04689E957A1242C84A50189C6D96CADCA602072D09EAC1013B5458A2275D69B_big_uint504; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D_cppui_modular503; + 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D_big_uint503; constexpr static const std::array nqr = {0x02, 0x01}; constexpr static const std::array nqr_to_t = { - 0xB20DCB5704E326A0DD3ECD4F30515275398A41A4E1DC5D347CFBBEDDA71CF82_cppui_modular252, - 0xB1FFEFD8885BF22252522C29527D19F05CFC50E9715370AB0F3A6CA462390C_cppui_modular248}; + 0xB20DCB5704E326A0DD3ECD4F30515275398A41A4E1DC5D347CFBBEDDA71CF82_big_uint252, + 0xB1FFEFD8885BF22252522C29527D19F05CFC50E9715370AB0F3A6CA462390C_big_uint248}; constexpr static const extended_integral_type group_order_minus_one_half = - 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D8_cppui_modular507; + 0x492E25C3B1E5FCE2CCD37BE01A4690E5805C2A88B1BAB031376FD2E1A6359C682344F4ABD09216425280C4E36CB656E5301039684F560809DAA2C5113AEB4D8_big_uint507; /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01), - non_residue_type(0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui_modular254)};*/ + non_residue_type(0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_big_uint254)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { - 0x01, 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui_modular254}; + 0x01, 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_big_uint254}; constexpr static const non_residue_type non_residue = non_residue_type( - 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_cppui_modular254); + 0x30644E72E131A029B85045B68181585D97816A916871CA8D3C208C16D87CFD46_big_uint254); }; template diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp6_3over2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp6_3over2.hpp index f96a112123..85c45e0212 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp6_3over2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/alt_bn128/fp6_3over2.hpp @@ -67,55 +67,55 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01, 0x00), - non_residue_type(0x2FB347984F7911F74C0BEC3CF559B143B78CC310C2C3330C99E39557176F553D_cppui_modular254, - 0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2_cppui_modular253), - non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_cppui_modular254, + non_residue_type(0x2FB347984F7911F74C0BEC3CF559B143B78CC310C2C3330C99E39557176F553D_big_uint254, + 0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2_big_uint253), + non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_big_uint254, 0x00), - non_residue_type(0x856E078B755EF0ABAFF1C77959F25AC805FFD3D5D6942D37B746EE87BDCFB6D_cppui_modular252, - 0x4F1DE41B3D1766FA9F30E6DEC26094F0FDF31BF98FF2631380CAB2BAAA586DE_cppui_modular251), - non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_cppui_modular191, 0x00), - non_residue_type(0x28BE74D4BB943F51699582B87809D9CAF71614D4B0B71F3A62E913EE1DADA9E4_cppui_modular254, - 0x14A88AE0CB747B99C2B86ABCBE01477A54F40EB4C3F6068DEDAE0BCEC9C7AAC7_cppui_modular253)}; + non_residue_type(0x856E078B755EF0ABAFF1C77959F25AC805FFD3D5D6942D37B746EE87BDCFB6D_big_uint252, + 0x4F1DE41B3D1766FA9F30E6DEC26094F0FDF31BF98FF2631380CAB2BAAA586DE_big_uint251), + non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_big_uint191, 0x00), + non_residue_type(0x28BE74D4BB943F51699582B87809D9CAF71614D4B0B71F3A62E913EE1DADA9E4_big_uint254, + 0x14A88AE0CB747B99C2B86ABCBE01477A54F40EB4C3F6068DEDAE0BCEC9C7AAC7_big_uint253)}; constexpr static const std::array Frobenius_coeffs_c2 = {non_residue_type(0x01, 0x00), - non_residue_type(0x5B54F5E64EEA80180F3C0B75A181E84D33365F7BE94EC72848A1F55921EA762_cppui_modular251, - 0x2C145EDBE7FD8AEE9F3A80B03B0B1C923685D2EA1BDEC763C13B4711CD2B8126_cppui_modular254), - non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_cppui_modular191, 0x00), - non_residue_type(0xBC58C6611C08DAB19BEE0F7B5B2444EE633094575B06BCB0E1A92BC3CCBF066_cppui_modular252, - 0x23D5E999E1910A12FEB0F6EF0CD21D04A44A9E08737F96E55FE3ED9D730C239F_cppui_modular254), - non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_cppui_modular254, + non_residue_type(0x5B54F5E64EEA80180F3C0B75A181E84D33365F7BE94EC72848A1F55921EA762_big_uint251, + 0x2C145EDBE7FD8AEE9F3A80B03B0B1C923685D2EA1BDEC763C13B4711CD2B8126_big_uint254), + non_residue_type(0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_big_uint191, 0x00), + non_residue_type(0xBC58C6611C08DAB19BEE0F7B5B2444EE633094575B06BCB0E1A92BC3CCBF066_big_uint252, + 0x23D5E999E1910A12FEB0F6EF0CD21D04A44A9E08737F96E55FE3ED9D730C239F_big_uint254), + non_residue_type(0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_big_uint254, 0x00), - non_residue_type(0x1EE972AE6A826A7D1D9DA40771B6F589DE1AFB54342C724FA97BDA050992657F_cppui_modular253, - 0x10DE546FF8D4AB51D2B513CDBB25772454326430418536D15721E37E70C255C9_cppui_modular253)};*/ + non_residue_type(0x1EE972AE6A826A7D1D9DA40771B6F589DE1AFB54342C724FA97BDA050992657F_big_uint253, + 0x10DE546FF8D4AB51D2B513CDBB25772454326430418536D15721E37E70C255C9_big_uint253)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, 0x00, - 0x2FB347984F7911F74C0BEC3CF559B143B78CC310C2C3330C99E39557176F553D_cppui_modular254, - 0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2_cppui_modular253, - 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_cppui_modular254, + 0x2FB347984F7911F74C0BEC3CF559B143B78CC310C2C3330C99E39557176F553D_big_uint254, + 0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2_big_uint253, + 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_big_uint254, 0x00, - 0x856E078B755EF0ABAFF1C77959F25AC805FFD3D5D6942D37B746EE87BDCFB6D_cppui_modular252, - 0x4F1DE41B3D1766FA9F30E6DEC26094F0FDF31BF98FF2631380CAB2BAAA586DE_cppui_modular251, - 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_cppui_modular191, + 0x856E078B755EF0ABAFF1C77959F25AC805FFD3D5D6942D37B746EE87BDCFB6D_big_uint252, + 0x4F1DE41B3D1766FA9F30E6DEC26094F0FDF31BF98FF2631380CAB2BAAA586DE_big_uint251, + 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_big_uint191, 0x00, - 0x28BE74D4BB943F51699582B87809D9CAF71614D4B0B71F3A62E913EE1DADA9E4_cppui_modular254, - 0x14A88AE0CB747B99C2B86ABCBE01477A54F40EB4C3F6068DEDAE0BCEC9C7AAC7_cppui_modular253}; + 0x28BE74D4BB943F51699582B87809D9CAF71614D4B0B71F3A62E913EE1DADA9E4_big_uint254, + 0x14A88AE0CB747B99C2B86ABCBE01477A54F40EB4C3F6068DEDAE0BCEC9C7AAC7_big_uint253}; constexpr static const std::array Frobenius_coeffs_c2 = { 0x01, 0x00, - 0x5B54F5E64EEA80180F3C0B75A181E84D33365F7BE94EC72848A1F55921EA762_cppui_modular251, - 0x2C145EDBE7FD8AEE9F3A80B03B0B1C923685D2EA1BDEC763C13B4711CD2B8126_cppui_modular254, - 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_cppui_modular191, + 0x5B54F5E64EEA80180F3C0B75A181E84D33365F7BE94EC72848A1F55921EA762_big_uint251, + 0x2C145EDBE7FD8AEE9F3A80B03B0B1C923685D2EA1BDEC763C13B4711CD2B8126_big_uint254, + 0x59E26BCEA0D48BACD4F263F1ACDB5C4F5763473177FFFFFE_big_uint191, 0x00, - 0xBC58C6611C08DAB19BEE0F7B5B2444EE633094575B06BCB0E1A92BC3CCBF066_cppui_modular252, - 0x23D5E999E1910A12FEB0F6EF0CD21D04A44A9E08737F96E55FE3ED9D730C239F_cppui_modular254, - 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_cppui_modular254, + 0xBC58C6611C08DAB19BEE0F7B5B2444EE633094575B06BCB0E1A92BC3CCBF066_big_uint252, + 0x23D5E999E1910A12FEB0F6EF0CD21D04A44A9E08737F96E55FE3ED9D730C239F_big_uint254, + 0x30644E72E131A0295E6DD9E7E0ACCCB0C28F069FBB966E3DE4BD44E5607CFD48_big_uint254, 0x00, - 0x1EE972AE6A826A7D1D9DA40771B6F589DE1AFB54342C724FA97BDA050992657F_cppui_modular253, - 0x10DE546FF8D4AB51D2B513CDBB25772454326430418536D15721E37E70C255C9_cppui_modular253}; + 0x1EE972AE6A826A7D1D9DA40771B6F589DE1AFB54342C724FA97BDA050992657F_big_uint253, + 0x10DE546FF8D4AB51D2B513CDBB25772454326430418536D15721E37E70C255C9_big_uint253}; constexpr static const non_residue_type non_residue = non_residue_type(0x09, 0x01); }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp12_2over3over2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp12_2over3over2.hpp index fe59936a53..95cead8c41 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp12_2over3over2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp12_2over3over2.hpp @@ -68,56 +68,56 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01, 0x00), - non_residue_type(0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui_modular381, - 0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui_modular376), - non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_cppui_modular319, + non_residue_type(0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_big_uint381, + 0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_big_uint376), + non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_big_uint319, 0x00), - non_residue_type(0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui_modular381, - 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui_modular379), - non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319, + non_residue_type(0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_big_uint381, + 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_big_uint379), + non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319, 0x00), - non_residue_type(0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui_modular381, - 0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui_modular379), + non_residue_type(0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_big_uint381, + 0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_big_uint379), - non_residue_type(0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381, + non_residue_type(0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381, 0x00), - non_residue_type(0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui_modular376, - 0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui_modular381), - non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381, + non_residue_type(0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_big_uint376, + 0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_big_uint381), + non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381, 0x00), - non_residue_type(0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui_modular379, - 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui_modular381), - non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_cppui_modular381, + non_residue_type(0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_big_uint379, + 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_big_uint381), + non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_big_uint381, 0x00), - non_residue_type(0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui_modular379, - 0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui_modular381)};*/ + non_residue_type(0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_big_uint379, + 0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_big_uint381)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, 0x00, - 0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui_modular381, - 0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui_modular376, - 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_cppui_modular319, + 0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_big_uint381, + 0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_big_uint376, + 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_big_uint319, 0x00, - 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui_modular381, - 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui_modular379, - 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319, + 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_big_uint381, + 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_big_uint379, + 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319, 0x00, - 0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui_modular381, - 0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui_modular379, + 0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_big_uint381, + 0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_big_uint379, - 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381, + 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381, 0x00, - 0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_cppui_modular376, - 0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_cppui_modular381, - 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381, + 0xFC3E2B36C4E03288E9E902231F9FB854A14787B6C7B36FEC0C8EC971F63C5F282D5AC14D6C7EC22CF78A126DDC4AF3_big_uint376, + 0x1904D3BF02BB0667C231BEB4202C0D1F0FD603FD3CBD5F4F7B2443D784BAB9C4F67EA53D63E7813D8D0775ED92235FB8_big_uint381, + 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381, 0x00, - 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui_modular379, - 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui_modular381, - 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_cppui_modular381, + 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_big_uint379, + 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_big_uint381, + 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_big_uint381, 0x00, - 0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_cppui_modular379, - 0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_cppui_modular381}; + 0x5B2CFD9013A5FD8DF47FA6B48B1E045F39816240C0B8FEE8BEADF4D8E9C0566C63A3E6E257F87329B18FAE980078116_big_uint379, + 0x144E4211384586C16BD3AD4AFA99CC9170DF3560E77982D0DB45F3536814F0BD5871C1908BD478CD1EE605167FF82995_big_uint381}; constexpr static const non_residue_type non_residue = non_residue_type(0x01u, 0x01u); }; @@ -142,55 +142,55 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01, 0x00), - non_residue_type(0x9A9975399C019633C1E30682567F915C8A45E0F94EBC8EC681BF34A3AA559DB57668E558EB0188E938A9D1104F2031_cppui_modular376, + non_residue_type(0x9A9975399C019633C1E30682567F915C8A45E0F94EBC8EC681BF34A3AA559DB57668E558EB0188E938A9D1104F2031_big_uint376, 0x00), - non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_cppui_modular316, + non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_big_uint316, 0x00), - non_residue_type(0x1680A40796537CAC0C534DB1A79BEB1400398F50AD1DEC1BCE649CF436B0F6299588459BFF27D8E6E76D5ECF1391C63_cppui_modular377, + non_residue_type(0x1680A40796537CAC0C534DB1A79BEB1400398F50AD1DEC1BCE649CF436B0F6299588459BFF27D8E6E76D5ECF1391C63_big_uint377, 0x00), - non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00), - non_residue_type(0xCD70CB3FC936348D0351D498233F1FE379531411832232F6648A9A9FC0B9C4E3E21B7467077C05853E2C1BE0E9FC32_cppui_modular376, + non_residue_type(0xCD70CB3FC936348D0351D498233F1FE379531411832232F6648A9A9FC0B9C4E3E21B7467077C05853E2C1BE0E9FC32_big_uint376, 0x00), - non_residue_type(0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_cppui_modular377, + non_residue_type(0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_big_uint377, 0x00), - non_residue_type(0x113A0D0DE290F54927922B9EA4AC9A9BD98941207A657005871A2FB165EF2626194F45ED714FE779BD0162EEFB0DFD0_cppui_modular377, + non_residue_type(0x113A0D0DE290F54927922B9EA4AC9A9BD98941207A657005871A2FB165EF2626194F45ED714FE779BD0162EEFB0DFD0_big_uint377, 0x00), - non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00), - non_residue_type(0x4630059E5FD9200575D0E552278A89DA1F40FDF62334CD620D1860769E389D7DB2D8EA700D82721691EA130EC6E39E_cppui_modular375, + non_residue_type(0x4630059E5FD9200575D0E552278A89DA1F40FDF62334CD620D1860769E389D7DB2D8EA700D82721691EA130EC6E39E_big_uint375, 0x00), - non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_cppui_modular377, + non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_big_uint377, 0x00), - non_residue_type(0xE0C97AD7FBDAB63937B3EBD47E0A1B36A986DEEF71F15C288ED7951A488E3B332941CFC8F883FAFFCA93E41F1603CF_cppui_modular376, + non_residue_type(0xE0C97AD7FBDAB63937B3EBD47E0A1B36A986DEEF71F15C288ED7951A488E3B332941CFC8F883FAFFCA93E41F1603CF_big_uint376, 0x00)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, 0x00, - 0x9A9975399C019633C1E30682567F915C8A45E0F94EBC8EC681BF34A3AA559DB57668E558EB0188E938A9D1104F2031_cppui_modular376, + 0x9A9975399C019633C1E30682567F915C8A45E0F94EBC8EC681BF34A3AA559DB57668E558EB0188E938A9D1104F2031_big_uint376, 0x00, - 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_cppui_modular316, + 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_big_uint316, 0x00, - 0x1680A40796537CAC0C534DB1A79BEB1400398F50AD1DEC1BCE649CF436B0F6299588459BFF27D8E6E76D5ECF1391C63_cppui_modular377, + 0x1680A40796537CAC0C534DB1A79BEB1400398F50AD1DEC1BCE649CF436B0F6299588459BFF27D8E6E76D5ECF1391C63_big_uint377, 0x00, - 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00, - 0xCD70CB3FC936348D0351D498233F1FE379531411832232F6648A9A9FC0B9C4E3E21B7467077C05853E2C1BE0E9FC32_cppui_modular376, + 0xCD70CB3FC936348D0351D498233F1FE379531411832232F6648A9A9FC0B9C4E3E21B7467077C05853E2C1BE0E9FC32_big_uint376, 0x00, - 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_cppui_modular377, + 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_big_uint377, 0x00, - 0x113A0D0DE290F54927922B9EA4AC9A9BD98941207A657005871A2FB165EF2626194F45ED714FE779BD0162EEFB0DFD0_cppui_modular377, + 0x113A0D0DE290F54927922B9EA4AC9A9BD98941207A657005871A2FB165EF2626194F45ED714FE779BD0162EEFB0DFD0_big_uint377, 0x00, - 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00, - 0x4630059E5FD9200575D0E552278A89DA1F40FDF62334CD620D1860769E389D7DB2D8EA700D82721691EA130EC6E39E_cppui_modular375, + 0x4630059E5FD9200575D0E552278A89DA1F40FDF62334CD620D1860769E389D7DB2D8EA700D82721691EA130EC6E39E_big_uint375, 0x00, - 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_cppui_modular377, + 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_big_uint377, 0x00, - 0xE0C97AD7FBDAB63937B3EBD47E0A1B36A986DEEF71F15C288ED7951A488E3B332941CFC8F883FAFFCA93E41F1603CF_cppui_modular376, + 0xE0C97AD7FBDAB63937B3EBD47E0A1B36A986DEEF71F15C288ED7951A488E3B332941CFC8F883FAFFCA93E41F1603CF_big_uint376, 0x00}; constexpr static const non_residue_type non_residue = non_residue_type(0x00u, 0x01u); diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp2.hpp index 7f5faa4e6e..fde884a645 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp2.hpp @@ -56,8 +56,7 @@ namespace nil { typedef typename policy_type::integral_type integral_type; - typedef boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>> + typedef nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits> extended_integral_type; constexpr static const integral_type modulus = policy_type::modulus; @@ -69,23 +68,23 @@ namespace nil { constexpr static const std::size_t s = 0x03; constexpr static const extended_integral_type t = - 0x5486F497186BF8E97A4F1D5445E4BD3C5B921CA1CE08D68CDCB3C92693D17A0A14C59FA2DBB94DDEA62926612F1DE023AD0C3390C30B8F6525D0B50E1234092CD7F23DA7CE36E862C586706C42279FAF9DAD63AEC705D564D54000038E31C7_cppui_modular759; + 0x5486F497186BF8E97A4F1D5445E4BD3C5B921CA1CE08D68CDCB3C92693D17A0A14C59FA2DBB94DDEA62926612F1DE023AD0C3390C30B8F6525D0B50E1234092CD7F23DA7CE36E862C586706C42279FAF9DAD63AEC705D564D54000038E31C7_big_uint759; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x2A437A4B8C35FC74BD278EAA22F25E9E2DC90E50E7046B466E59E49349E8BD050A62CFD16DDCA6EF53149330978EF011D68619C86185C7B292E85A87091A04966BF91ED3E71B743162C338362113CFD7CED6B1D76382EAB26AA00001C718E3_cppui_modular758; + 0x2A437A4B8C35FC74BD278EAA22F25E9E2DC90E50E7046B466E59E49349E8BD050A62CFD16DDCA6EF53149330978EF011D68619C86185C7B292E85A87091A04966BF91ED3E71B743162C338362113CFD7CED6B1D76382EAB26AA00001C718E3_big_uint758; constexpr static const std::array nqr = {0x01, 0x01}; constexpr static const std::array nqr_to_t = { - 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_cppui_modular379, - 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_cppui_modular381}; + 0x6AF0E0437FF400B6831E36D6BD17FFE48395DABC2D3435E77F76E17009241C5EE67992F72EC05F4C81084FBEDE3CC09_big_uint379, + 0x135203E60180A68EE2E9C448D77A2CD91C3DEDD930B1CF60EF396489F61EB45E304466CF3E67FA0AF1EE7B04121BDEA2_big_uint381}; constexpr static const extended_integral_type group_order_minus_one_half = - 0x1521BD25C61AFE3A5E93C75511792F4F16E48728738235A3372CF249A4F45E82853167E8B6EE5377A98A49984BC77808EB430CE430C2E3D949742D43848D024B35FC8F69F38DBA18B1619C1B1089E7EBE76B58EBB1C1755935500000E38C71C_cppui_modular761; + 0x1521BD25C61AFE3A5E93C75511792F4F16E48728738235A3372CF249A4F45E82853167E8B6EE5377A98A49984BC77808EB430CE430C2E3D949742D43848D024B35FC8F69F38DBA18B1619C1B1089E7EBE76B58EBB1C1755935500000E38C71C_big_uint761; constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, - 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381}; + 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381}; constexpr static const non_residue_type non_residue = non_residue_type( - 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381); + 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381); }; /************************* BLS12-377 ***********************************/ @@ -101,9 +100,7 @@ namespace nil { typedef typename policy_type::integral_type integral_type; - typedef boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>> - extended_integral_type; + typedef nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits> extended_integral_type; constexpr static const integral_type modulus = policy_type::modulus; @@ -115,23 +112,23 @@ namespace nil { constexpr static const std::size_t s = 0x2F; constexpr static const extended_integral_type t = - 0x5A60FA1775FF644AD227766C24C78977170FB495DD27E3EBCE2827BB49AB813A0315F720CC19B8029CE24A0549AD88C155555176E15C063064972B0C7193AD797F7A46BE3813495B44D1E5C37B000E671A4A9E00000021423_cppui_modular707; + 0x5A60FA1775FF644AD227766C24C78977170FB495DD27E3EBCE2827BB49AB813A0315F720CC19B8029CE24A0549AD88C155555176E15C063064972B0C7193AD797F7A46BE3813495B44D1E5C37B000E671A4A9E00000021423_big_uint707; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x2D307D0BBAFFB2256913BB361263C4BB8B87DA4AEE93F1F5E71413DDA4D5C09D018AFB90660CDC014E712502A4D6C460AAAAA8BB70AE0318324B958638C9D6BCBFBD235F1C09A4ADA268F2E1BD8007338D254F00000010A11_cppui_modular706; + 0x2D307D0BBAFFB2256913BB361263C4BB8B87DA4AEE93F1F5E71413DDA4D5C09D018AFB90660CDC014E712502A4D6C460AAAAA8BB70AE0318324B958638C9D6BCBFBD235F1C09A4ADA268F2E1BD8007338D254F00000010A11_big_uint706; constexpr static const std::array nqr = {0x00, 0x01}; constexpr static const std::array nqr_to_t = { 0x00, - 0x1ABEF7237D62007BB9B2EDA5AFCB52F9D179F23DBD49B8D1B24CF7C1BF8066791317689172D0F4CB90CF47182B7D7B2_cppui_modular377}; + 0x1ABEF7237D62007BB9B2EDA5AFCB52F9D179F23DBD49B8D1B24CF7C1BF8066791317689172D0F4CB90CF47182B7D7B2_big_uint377}; constexpr static const extended_integral_type group_order_minus_one_half = - 0x16983E85DD7FD912B489DD9B0931E25DC5C3ED257749F8FAF38A09EED26AE04E80C57DC833066E00A7389281526B62305555545DB857018C1925CAC31C64EB5E5FDE91AF8E04D256D1347970DEC00399C692A780000008508C00000000000_cppui_modular753; + 0x16983E85DD7FD912B489DD9B0931E25DC5C3ED257749F8FAF38A09EED26AE04E80C57DC833066E00A7389281526B62305555545DB857018C1925CAC31C64EB5E5FDE91AF8E04D256D1347970DEC00399C692A780000008508C00000000000_big_uint753; constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, - 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_cppui_modular377}; + 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_big_uint377}; constexpr static const non_residue_type non_residue = non_residue_type( - 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508BFFFFFFFFFFC_cppui_modular377); + 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508BFFFFFFFFFFC_big_uint377); }; constexpr typename fp2_extension_params>::non_residue_type const diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp6_3over2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp6_3over2.hpp index cc6d55f3fd..614c2328f5 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp6_3over2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/bls12/fp6_3over2.hpp @@ -66,52 +66,52 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01, 0x00), non_residue_type(0x00, - 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381), - non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319, + 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381), + non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319, 0x00), non_residue_type(0x00u, 0x01u), - non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381, + non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381, 0x00), non_residue_type(0x00, - 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319)}; + 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319)}; constexpr static const std::array Frobenius_coeffs_c2 = {non_residue_type(0x01, 0x00), - non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_cppui_modular381, + non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_big_uint381, 0x00), - non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381, + non_residue_type(0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381, 0x00), - non_residue_type(0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381, + non_residue_type(0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381, 0x00), - non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319, + non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319, 0x00), - non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_cppui_modular319, + non_residue_type(0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_big_uint319, 0x00)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, 0x00, 0x00, - 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381, - 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319, + 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381, + 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319, 0x00, 0x00, 0x01, - 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381, + 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381, 0x00, 0x00, - 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319}; + 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319}; constexpr static const std::array Frobenius_coeffs_c2 = { 0x01, 0x00, - 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_cppui_modular381, + 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAD_big_uint381, 0x00, - 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_cppui_modular381, + 0x1A0111EA397FE699EC02408663D4DE85AA0D857D89759AD4897D29650FB85F9B409427EB4F49FFFD8BFD00000000AAAC_big_uint381, 0x00, - 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_cppui_modular381, + 0x1A0111EA397FE69A4B1BA7B6434BACD764774B84F38512BF6730D2A0F6B0F6241EABFFFEB153FFFFB9FEFFFFFFFFAAAA_big_uint381, 0x00, - 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_cppui_modular319, + 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFE_big_uint319, 0x00, - 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_cppui_modular319, + 0x5F19672FDF76CE51BA69C6076A0F77EADDB3A93BE6F89688DE17D813620A00022E01FFFFFFFEFFFF_big_uint319, 0x00}; constexpr static const non_residue_type non_residue = non_residue_type(0x01u, 0x01u); @@ -138,54 +138,54 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01, 0x00), - non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_cppui_modular316, + non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_big_uint316, 0x00), - non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00), - non_residue_type(0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_cppui_modular377, + non_residue_type(0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_big_uint377, 0x00), - non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00), - non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_cppui_modular377, + non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_big_uint377, 0x00)}; constexpr static const std::array Frobenius_coeffs_c2 = {non_residue_type(0x01, 0x00), - non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00), - non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00), non_residue_type(0x01, 0x00), - non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + non_residue_type(0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00), - non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + non_residue_type(0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, 0x00, - 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_cppui_modular316, + 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000002_big_uint316, 0x00, - 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00, - 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_cppui_modular377, + 0x1AE3A4617C510EAC63B05C06CA1493B1A22D9F300F5138F1EF3622FBA094800170B5D44300000008508C00000000000_big_uint377, 0x00, - 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00, - 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_cppui_modular377, + 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E94577A00000000000000000000000_big_uint377, 0x00}; constexpr static const std::array Frobenius_coeffs_c2 = { 0x01, 0x00, - 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00, - 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00, 0x01, 0x00, - 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_cppui_modular316, + 0x9B3AF05DD14F6EC619AAF7D34594AABC5ED1347970DEC00452217CC900000008508C00000000001_big_uint316, 0x00, - 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_cppui_modular377, + 0x1AE3A4617C510EABC8756BA8F8C524EB8882A75CC9BC8E359064EE822FB5BFFD1E945779FFFFFFFFFFFFFFFFFFFFFFF_big_uint377, 0x00}; constexpr static const non_residue_type non_residue = non_residue_type(0x00u, 0x01u); diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp2.hpp index 7b25056e1a..dd52506bca 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp2.hpp @@ -58,9 +58,7 @@ namespace nil { typedef typename policy_type::integral_type integral_type; - typedef boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * policy_type::modulus_bits>> - extended_integral_type; + typedef nil::crypto3::multiprecision::big_uint<2 * policy_type::modulus_bits> extended_integral_type; constexpr static const integral_type modulus = policy_type::modulus; @@ -72,24 +70,24 @@ namespace nil { constexpr static const std::size_t s = 0x12; constexpr static const extended_integral_type t = - 0x37E52CE842B39321A34D7BA62E2C735153C68D35F7A312CDB18451030CB297F3B772167A8487033D5772A0EF6BEA9BCA60190FFE1CDB642F88A0FF2EFF7A6A3A80FD00203385638B3_cppui_modular578; + 0x37E52CE842B39321A34D7BA62E2C735153C68D35F7A312CDB18451030CB297F3B772167A8487033D5772A0EF6BEA9BCA60190FFE1CDB642F88A0FF2EFF7A6A3A80FD00203385638B3_big_uint578; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x1BF296742159C990D1A6BDD3171639A8A9E3469AFBD18966D8C2288186594BF9DBB90B3D4243819EABB95077B5F54DE5300C87FF0E6DB217C4507F977FBD351D407E801019C2B1C59_cppui_modular577; + 0x1BF296742159C990D1A6BDD3171639A8A9E3469AFBD18966D8C2288186594BF9DBB90B3D4243819EABB95077B5F54DE5300C87FF0E6DB217C4507F977FBD351D407E801019C2B1C59_big_uint577; constexpr static const std::array nqr = {0x08, 0x01}; constexpr static const std::array nqr_to_t = { 0x00, - 0x3B1F45391287A9CB585B8E5504C24BF1EC2010553885078C85899ACD708205080134A9BE6A_cppui_modular294}; + 0x3B1F45391287A9CB585B8E5504C24BF1EC2010553885078C85899ACD708205080134A9BE6A_big_uint294}; constexpr static const extended_integral_type group_order_minus_one_half = - 0x6FCA59D085672643469AF74C5C58E6A2A78D1A6BEF46259B6308A20619652FE76EE42CF5090E067AAEE541DED7D53794C0321FFC39B6C85F1141FE5DFEF4D47501FA0040670AC71660000_cppui_modular595; + 0x6FCA59D085672643469AF74C5C58E6A2A78D1A6BEF46259B6308A20619652FE76EE42CF5090E067AAEE541DED7D53794C0321FFC39B6C85F1141FE5DFEF4D47501FA0040670AC71660000_big_uint595; /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01), - non_residue_type(0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_cppui_modular298)};*/ + non_residue_type(0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_big_uint298)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, - 0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_cppui_modular298}; + 0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_big_uint298}; constexpr static const non_residue_type non_residue = non_residue_type(0x11u); }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp4.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp4.hpp index 1681f2a962..96f8e54037 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp4.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt4/fp4.hpp @@ -63,14 +63,14 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01), - non_residue_type(0xF73779FE09916DFDCC2FD1F968D534BEB17DAF7518CD9FAE5C1F7BDCF94DD5D7DEF6980C4_cppui_modular292), - non_residue_type(0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_cppui_modular298), - non_residue_type(0x3AD84453493094F44C0E4B334F83D9B7D7845383998B4CFE8788F285043342F78DC81FC7F3D_cppui_modular298)};*/ + non_residue_type(0xF73779FE09916DFDCC2FD1F968D534BEB17DAF7518CD9FAE5C1F7BDCF94DD5D7DEF6980C4_big_uint292), + non_residue_type(0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_big_uint298), + non_residue_type(0x3AD84453493094F44C0E4B334F83D9B7D7845383998B4CFE8788F285043342F78DC81FC7F3D_big_uint298)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { - 0x01, 0xF73779FE09916DFDCC2FD1F968D534BEB17DAF7518CD9FAE5C1F7BDCF94DD5D7DEF6980C4_cppui_modular292, - 0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_cppui_modular298, - 0x3AD84453493094F44C0E4B334F83D9B7D7845383998B4CFE8788F285043342F78DC81FC7F3D_cppui_modular298}; + 0x01, 0xF73779FE09916DFDCC2FD1F968D534BEB17DAF7518CD9FAE5C1F7BDCF94DD5D7DEF6980C4_big_uint292, + 0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660000_big_uint298, + 0x3AD84453493094F44C0E4B334F83D9B7D7845383998B4CFE8788F285043342F78DC81FC7F3D_big_uint298}; constexpr static const non_residue_type non_residue = non_residue_type(0x11u); }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp3.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp3.hpp index 156d2fa062..458d9b8b8e 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp3.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp3.hpp @@ -57,8 +57,7 @@ namespace nil { typedef typename policy_type::integral_type integral_type; - typedef boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<3 * policy_type::modulus_bits>> + typedef nil::crypto3::multiprecision::big_uint<3 * policy_type::modulus_bits> extended_integral_type; @@ -71,35 +70,35 @@ namespace nil { constexpr static const std::size_t s = 0x22; constexpr static const extended_integral_type t = - 0xD0F1EB0C5D321E87BF885ACDEBEDB4C0D6B30E63AB6E7BF6417A7990679AA640A7D58FB90CC708D572D32DFD6443366D2F92F48FF1A02FDB0CC11573BAB71F8E5E05B07DEA208A7E11F3E61C9968CC65F379EFCEF9472C7FC6DEE40194CA1DF9F801DC0D24656EACC72677B_cppui_modular860; + 0xD0F1EB0C5D321E87BF885ACDEBEDB4C0D6B30E63AB6E7BF6417A7990679AA640A7D58FB90CC708D572D32DFD6443366D2F92F48FF1A02FDB0CC11573BAB71F8E5E05B07DEA208A7E11F3E61C9968CC65F379EFCEF9472C7FC6DEE40194CA1DF9F801DC0D24656EACC72677B_big_uint860; constexpr static const extended_integral_type t_minus_1_over_2 = - 0x6878F5862E990F43DFC42D66F5F6DA606B598731D5B73DFB20BD3CC833CD532053EAC7DC8663846AB96996FEB2219B3697C97A47F8D017ED86608AB9DD5B8FC72F02D83EF510453F08F9F30E4CB46632F9BCF7E77CA3963FE36F7200CA650EFCFC00EE069232B75663933BD_cppui_modular859; + 0x6878F5862E990F43DFC42D66F5F6DA606B598731D5B73DFB20BD3CC833CD532053EAC7DC8663846AB96996FEB2219B3697C97A47F8D017ED86608AB9DD5B8FC72F02D83EF510453F08F9F30E4CB46632F9BCF7E77CA3963FE36F7200CA650EFCFC00EE069232B75663933BD_big_uint859; constexpr static const std::array nqr = {0x05, 0x00, 0x00}; constexpr static const std::array nqr_to_t = { - 0x1366271F76AB41CEEEE8C1E5E972F3CEC14A25F18B3F4B93642FAD4972356D977470E0FA674_cppui_modular297, + 0x1366271F76AB41CEEEE8C1E5E972F3CEC14A25F18B3F4B93642FAD4972356D977470E0FA674_big_uint297, 0x00, 0x00}; constexpr static const extended_integral_type group_order_minus_one_half = - 0x1A1E3D618BA643D0F7F10B59BD7DB6981AD661CC756DCF7EC82F4F320CF354C814FAB1F72198E11AAE5A65BFAC8866CDA5F25E91FE3405FB619822AE7756E3F1CBC0B60FBD44114FC23E7CC3932D198CBE6F3DF9DF28E58FF8DBDC80329943BF3F003B81A48CADD598E4CEF600000000_cppui_modular893; + 0x1A1E3D618BA643D0F7F10B59BD7DB6981AD661CC756DCF7EC82F4F320CF354C814FAB1F72198E11AAE5A65BFAC8866CDA5F25E91FE3405FB619822AE7756E3F1CBC0B60FBD44114FC23E7CC3932D198CBE6F3DF9DF28E58FF8DBDC80329943BF3F003B81A48CADD598E4CEF600000000_big_uint893; /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01), - non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_cppui_modular298), - non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular292)}; + non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_big_uint298), + non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint292)}; constexpr static const std::array Frobenius_coeffs_c2 = {non_residue_type(0x01), - non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular292), - non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_cppui_modular298)};*/ + non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint292), + non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_big_uint298)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, - 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_cppui_modular298, - 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular292}; + 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_big_uint298, + 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint292}; constexpr static const std::array Frobenius_coeffs_c2 = { - 0x01, 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular292, - 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_cppui_modular298}; + 0x01, 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint292, + 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_big_uint298}; constexpr static const non_residue_type non_residue = non_residue_type(0x05u); }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp6_2over3.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp6_2over3.hpp index 16a8769b1f..f90e51606c 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp6_2over3.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/detail/extension_params/mnt6/fp6_2over3.hpp @@ -62,19 +62,19 @@ namespace nil { /*constexpr static const std::array Frobenius_coeffs_c1 = {non_residue_type(0x01), - non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BED_cppui_modular298), - non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_cppui_modular298), - non_residue_type(0x3BCF7BCD473A266249DA7B0548ECAEEC9635CF44194FB494C07925D6AD3BB4334A400000000_cppui_modular298), - non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular292), - non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular293)};*/ + non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BED_big_uint298), + non_residue_type(0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_big_uint298), + non_residue_type(0x3BCF7BCD473A266249DA7B0548ECAEEC9635CF44194FB494C07925D6AD3BB4334A400000000_big_uint298), + non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint292), + non_residue_type(0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint293)};*/ constexpr static const std::array Frobenius_coeffs_c1 = { 0x01, - 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BED_cppui_modular298, - 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_cppui_modular298, - 0x3BCF7BCD473A266249DA7B0548ECAEEC9635CF44194FB494C07925D6AD3BB4334A400000000_cppui_modular298, - 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular292, - 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_cppui_modular293}; + 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BED_big_uint298, + 0x3B48E50A1662E26F0E834E15FAF68204A9845655F46B277A6D05B75068AD3F6801655344BEC_big_uint298, + 0x3BCF7BCD473A266249DA7B0548ECAEEC9635CF44194FB494C07925D6AD3BB4334A400000000_big_uint298, + 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint292, + 0x8696C330D743F33B572CEF4DF62CE7ECB178EE24E48D1A53736E86448E74CB48DAACBB414_big_uint293}; constexpr static const non_residue_type non_residue = non_residue_type(0x05u); }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/field.hpp index 19742ce439..f3a0bd95b3 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/field.hpp @@ -25,9 +25,8 @@ #pragma once -#include -#include -#include +#include +#include namespace nil { namespace crypto3 { @@ -49,13 +48,8 @@ namespace nil { #ifdef __ZKLLVM__ typedef int integral_type; - typedef int extended_integral_type; #else - typedef boost::multiprecision::backends::cpp_int_modular_backend modular_backend; - - typedef boost::multiprecision::number integral_type; - - typedef boost::multiprecision::backends::modular_params modular_params_type; + typedef nil::crypto3::multiprecision::big_uint integral_type; #endif }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp12_2over3over2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp12_2over3over2.hpp index 835294c65d..9a5c9c76e4 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp12_2over3over2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp12_2over3over2.hpp @@ -60,7 +60,6 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; constexpr static const integral_type modulus = policy_type::modulus; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp2.hpp index c3223411f4..576ebf25a6 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp2.hpp @@ -55,7 +55,6 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; constexpr static const integral_type modulus = policy_type::modulus; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp3.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp3.hpp index e4a3c47942..dc2c3c5e62 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp3.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp3.hpp @@ -53,7 +53,6 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; constexpr static const integral_type modulus = policy_type::modulus; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp4.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp4.hpp index 5a920884a2..0072877c9d 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp4.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp4.hpp @@ -53,7 +53,6 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; constexpr static const integral_type modulus = policy_type::modulus; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_2over3.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_2over3.hpp index 41c892fd23..2fddfc332b 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_2over3.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_2over3.hpp @@ -53,7 +53,6 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; constexpr static const integral_type modulus = policy_type::modulus; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_3over2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_3over2.hpp index e69de731b6..df62e66f34 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_3over2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/fp6_3over2.hpp @@ -55,7 +55,6 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; typedef typename policy_type::modular_type modular_type; - typedef typename policy_type::modular_backend modular_backend; constexpr static const integral_type modulus = policy_type::modulus; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/goldilocks64/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/goldilocks64/base_field.hpp index 79b46985ea..494c324d23 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/goldilocks64/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/goldilocks64/base_field.hpp @@ -53,17 +53,10 @@ namespace nil { #else // 2^64 - 2^32 + 1 constexpr static const integral_type modulus = - 0xFFFFFFFF00000001_cppui_modular64; + 0xFFFFFFFF00000001_big_uint64; constexpr static const integral_type group_order_minus_one_half = (modulus - 1u) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp> value_type; #endif }; @@ -76,8 +69,6 @@ namespace nil { #else constexpr typename goldilocks64_base_field::integral_type const goldilocks64_base_field::modulus; constexpr typename goldilocks64_base_field::integral_type const goldilocks64_base_field::group_order_minus_one_half; - constexpr - typename goldilocks64_base_field::modular_params_type const goldilocks64_base_field::modulus_params; #endif using goldilocks64_fq = goldilocks64_base_field; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/jubjub/scalar_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/jubjub/scalar_field.hpp index baa62ab721..9a0cd5ac68 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/jubjub/scalar_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/jubjub/scalar_field.hpp @@ -50,16 +50,9 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xE7DB4EA6533AFA906673B0101343B00A6682093CCC81082D0970E5ED6F72CB7_cppui_modular252; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0xE7DB4EA6533AFA906673B0101343B00A6682093CCC81082D0970E5ED6F72CB7_big_uint252; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -74,7 +67,6 @@ namespace nil { constexpr typename jubjub_scalar_field::integral_type const jubjub_scalar_field::modulus; - constexpr typename jubjub_scalar_field::modular_params_type const jubjub_scalar_field::modulus_params; using jubjub_fr = jubjub_scalar_field; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt4/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt4/base_field.hpp index e8437d98c2..133783a000 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt4/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt4/base_field.hpp @@ -55,19 +55,12 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660001_cppui_modular298; + 0x3BCF7BCD473A266249DA7B0548ECAEEC9635D1330EA41A9E35E51200E12C90CD65A71660001_big_uint298; constexpr static const integral_type group_order_minus_one_half = - 0x1DE7BDE6A39D133124ED3D82A47657764B1AE89987520D4F1AF2890070964866B2D38B30000_cppui_modular298; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x1DE7BDE6A39D133124ED3D82A47657764B1AE89987520D4F1AF2890070964866B2D38B30000_big_uint298; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -84,8 +77,6 @@ namespace nil { constexpr typename mnt4_base_field<298>::integral_type const mnt4_base_field<298>::group_order_minus_one_half; - constexpr typename mnt4_base_field<298>::modular_params_type const mnt4_base_field<298>::modulus_params; - template using mnt4_fq = mnt4_base_field; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt6/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt6/base_field.hpp index 2c54fa0828..220e651c3f 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt6/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/mnt6/base_field.hpp @@ -55,19 +55,12 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x3BCF7BCD473A266249DA7B0548ECAEEC9635CF44194FB494C07925D6AD3BB4334A400000001_cppui_modular298; + 0x3BCF7BCD473A266249DA7B0548ECAEEC9635CF44194FB494C07925D6AD3BB4334A400000001_big_uint298; constexpr static const integral_type group_order_minus_one_half = - 0x1DE7BDE6A39D133124ED3D82A47657764B1AE7A20CA7DA4A603C92EB569DDA19A5200000000_cppui_modular298; - - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; + 0x1DE7BDE6A39D133124ED3D82A47657764B1AE7A20CA7DA4A603C92EB569DDA19A5200000000_big_uint298; + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -83,7 +76,6 @@ namespace nil { constexpr typename mnt6_base_field<298>::integral_type const mnt6_base_field<298>::modulus; constexpr typename mnt6_base_field<298>::integral_type const mnt6_base_field<298>::group_order_minus_one_half; - constexpr typename mnt6_base_field<298>::modular_params_type const mnt6_base_field<298>::modulus_params; template using mnt6_fq = mnt6_base_field; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/pallas/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/pallas/base_field.hpp index c613c0a8f5..d78ef1715d 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/pallas/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/pallas/base_field.hpp @@ -52,18 +52,11 @@ namespace nil { #else constexpr static const integral_type modulus = - 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_cppui_modular255; + 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_big_uint255; constexpr static const integral_type group_order_minus_one_half = (modulus - 1u) / 2 ; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp> value_type; #endif }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/params.hpp index 525df25797..186554d5ed 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/params.hpp @@ -37,24 +37,17 @@ namespace nil { struct params { typedef FieldType field_type; typedef typename field_type::modular_type modular_type; - typedef typename field_type::modular_backend modular_backend; - typedef typename field_type::modular_params_type modular_params_type; constexpr static const std::size_t modulus_bits = field_type::modulus_bits; typedef typename field_type::integral_type integral_type; constexpr static const integral_type modulus = field_type::modulus; constexpr static const integral_type group_order_minus_one_half = field_type::group_order_minus_one_half; - - constexpr static const modular_params_type modulus_params = field_type::modulus_params; }; template constexpr typename params::integral_type const params::modulus; - template - constexpr typename params::modular_params_type const params::modulus_params; - template constexpr typename std::size_t const params::modulus_bits; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/base_field.hpp index 7123002104..612835b19c 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/base_field.hpp @@ -55,18 +55,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffffffffffeffffac73_cppui_modular160; + 0xfffffffffffffffffffffffffffffffeffffac73_big_uint160; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -83,18 +76,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffffffffffffffffffeffffee37_cppui_modular192; + 0xfffffffffffffffffffffffffffffffffffffffeffffee37_big_uint192; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -111,18 +97,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffffffffffffffffffffffffffeffffe56d_cppui_modular224; + 0xfffffffffffffffffffffffffffffffffffffffffffffffeffffe56d_big_uint224; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -139,18 +118,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_cppui_modular256; + 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_big_uint256; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -165,28 +137,24 @@ namespace nil { constexpr typename std::size_t const secp_k1_fq<160>::value_bits; constexpr typename secp_k1_fq<160>::integral_type const secp_k1_fq<160>::modulus; constexpr typename secp_k1_fq<160>::integral_type const secp_k1_fq<160>::group_order_minus_one_half; - constexpr typename secp_k1_fq<160>::modular_params_type const secp_k1_fq<160>::modulus_params; constexpr typename std::size_t const secp_k1_fq<192>::modulus_bits; constexpr typename std::size_t const secp_k1_fq<192>::number_bits; constexpr typename std::size_t const secp_k1_fq<192>::value_bits; constexpr typename secp_k1_fq<192>::integral_type const secp_k1_fq<192>::modulus; constexpr typename secp_k1_fq<192>::integral_type const secp_k1_fq<192>::group_order_minus_one_half; - constexpr typename secp_k1_fq<192>::modular_params_type const secp_k1_fq<192>::modulus_params; constexpr typename std::size_t const secp_k1_fq<224>::modulus_bits; constexpr typename std::size_t const secp_k1_fq<224>::number_bits; constexpr typename std::size_t const secp_k1_fq<224>::value_bits; constexpr typename secp_k1_fq<224>::integral_type const secp_k1_fq<224>::modulus; constexpr typename secp_k1_fq<224>::integral_type const secp_k1_fq<224>::group_order_minus_one_half; - constexpr typename secp_k1_fq<224>::modular_params_type const secp_k1_fq<224>::modulus_params; constexpr typename std::size_t const secp_k1_fq<256>::modulus_bits; constexpr typename std::size_t const secp_k1_fq<256>::number_bits; constexpr typename std::size_t const secp_k1_fq<256>::value_bits; constexpr typename secp_k1_fq<256>::integral_type const secp_k1_fq<256>::modulus; constexpr typename secp_k1_fq<256>::integral_type const secp_k1_fq<256>::group_order_minus_one_half; - constexpr typename secp_k1_fq<256>::modular_params_type const secp_k1_fq<256>::modulus_params; } // namespace fields } // namespace algebra } // namespace crypto3 diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/scalar_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/scalar_field.hpp index 6ca633500d..4e9ea2f7f4 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/scalar_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_k1/scalar_field.hpp @@ -56,18 +56,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x0100000000000000000001b8fa16dfab9aca16b6b3_cppui_modular161; + 0x0100000000000000000001b8fa16dfab9aca16b6b3_big_uint161; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -84,18 +77,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffe26f2fc170f69466a74defd8d_cppui_modular192; + 0xfffffffffffffffffffffffe26f2fc170f69466a74defd8d_big_uint192; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -113,18 +99,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x010000000000000000000000000001dce8d2ec6184caf0a971769fb1f7_cppui_modular225; + 0x010000000000000000000000000001dce8d2ec6184caf0a971769fb1f7_big_uint225; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -141,18 +120,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141_cppui_modular256; + 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141_big_uint256; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -167,28 +139,24 @@ namespace nil { constexpr typename std::size_t const secp_k1_fr<160>::value_bits; constexpr typename secp_k1_fr<160>::integral_type const secp_k1_fr<160>::modulus; constexpr typename secp_k1_fr<160>::integral_type const secp_k1_fr<160>::group_order_minus_one_half; - constexpr typename secp_k1_fr<160>::modular_params_type const secp_k1_fr<160>::modulus_params; constexpr typename std::size_t const secp_k1_fr<192>::modulus_bits; constexpr typename std::size_t const secp_k1_fr<192>::number_bits; constexpr typename std::size_t const secp_k1_fr<192>::value_bits; constexpr typename secp_k1_fr<192>::integral_type const secp_k1_fr<192>::modulus; constexpr typename secp_k1_fr<192>::integral_type const secp_k1_fr<192>::group_order_minus_one_half; - constexpr typename secp_k1_fr<192>::modular_params_type const secp_k1_fr<192>::modulus_params; constexpr typename std::size_t const secp_k1_fr<224>::modulus_bits; constexpr typename std::size_t const secp_k1_fr<224>::number_bits; constexpr typename std::size_t const secp_k1_fr<224>::value_bits; constexpr typename secp_k1_fr<224>::integral_type const secp_k1_fr<224>::modulus; constexpr typename secp_k1_fr<224>::integral_type const secp_k1_fr<224>::group_order_minus_one_half; - constexpr typename secp_k1_fr<224>::modular_params_type const secp_k1_fr<224>::modulus_params; constexpr typename std::size_t const secp_k1_fr<256>::modulus_bits; constexpr typename std::size_t const secp_k1_fr<256>::number_bits; constexpr typename std::size_t const secp_k1_fr<256>::value_bits; constexpr typename secp_k1_fr<256>::integral_type const secp_k1_fr<256>::modulus; constexpr typename secp_k1_fr<256>::integral_type const secp_k1_fr<256>::group_order_minus_one_half; - constexpr typename secp_k1_fr<256>::modular_params_type const secp_k1_fr<256>::modulus_params; } // namespace fields } // namespace algebra } // namespace crypto3 diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/base_field.hpp index fdbb626215..d1a1f3d0e0 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/base_field.hpp @@ -55,18 +55,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xffffffffffffffffffffffffffffffff7fffffff_cppui_modular160; + 0xffffffffffffffffffffffffffffffff7fffffff_big_uint160; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -83,18 +76,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffffffffffeffffffffffffffff_cppui_modular192; + 0xfffffffffffffffffffffffffffffffeffffffffffffffff_big_uint192; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -111,18 +97,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xffffffffffffffffffffffffffffffff000000000000000000000001_cppui_modular224; + 0xffffffffffffffffffffffffffffffff000000000000000000000001_big_uint224; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -139,18 +118,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff_cppui_modular256; + 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff_big_uint256; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -167,18 +139,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff_cppui_modular384; + 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff_big_uint384; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -195,18 +160,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular521; + 0x01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint521; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -221,42 +179,36 @@ namespace nil { constexpr typename std::size_t const secp_r1_fq<160>::value_bits; constexpr typename secp_r1_fq<160>::integral_type const secp_r1_fq<160>::modulus; constexpr typename secp_r1_fq<160>::integral_type const secp_r1_fq<160>::group_order_minus_one_half; - constexpr typename secp_r1_fq<160>::modular_params_type const secp_r1_fq<160>::modulus_params; constexpr typename std::size_t const secp_r1_fq<192>::modulus_bits; constexpr typename std::size_t const secp_r1_fq<192>::number_bits; constexpr typename std::size_t const secp_r1_fq<192>::value_bits; constexpr typename secp_r1_fq<192>::integral_type const secp_r1_fq<192>::modulus; constexpr typename secp_r1_fq<192>::integral_type const secp_r1_fq<192>::group_order_minus_one_half; - constexpr typename secp_r1_fq<192>::modular_params_type const secp_r1_fq<192>::modulus_params; constexpr typename std::size_t const secp_r1_fq<224>::modulus_bits; constexpr typename std::size_t const secp_r1_fq<224>::number_bits; constexpr typename std::size_t const secp_r1_fq<224>::value_bits; constexpr typename secp_r1_fq<224>::integral_type const secp_r1_fq<224>::modulus; constexpr typename secp_r1_fq<224>::integral_type const secp_r1_fq<224>::group_order_minus_one_half; - constexpr typename secp_r1_fq<224>::modular_params_type const secp_r1_fq<224>::modulus_params; constexpr typename std::size_t const secp_r1_fq<256>::modulus_bits; constexpr typename std::size_t const secp_r1_fq<256>::number_bits; constexpr typename std::size_t const secp_r1_fq<256>::value_bits; constexpr typename secp_r1_fq<256>::integral_type const secp_r1_fq<256>::modulus; constexpr typename secp_r1_fq<256>::integral_type const secp_r1_fq<256>::group_order_minus_one_half; - constexpr typename secp_r1_fq<256>::modular_params_type const secp_r1_fq<256>::modulus_params; constexpr typename std::size_t const secp_r1_fq<384>::modulus_bits; constexpr typename std::size_t const secp_r1_fq<384>::number_bits; constexpr typename std::size_t const secp_r1_fq<384>::value_bits; constexpr typename secp_r1_fq<384>::integral_type const secp_r1_fq<384>::modulus; constexpr typename secp_r1_fq<384>::integral_type const secp_r1_fq<384>::group_order_minus_one_half; - constexpr typename secp_r1_fq<384>::modular_params_type const secp_r1_fq<384>::modulus_params; constexpr typename std::size_t const secp_r1_fq<521>::modulus_bits; constexpr typename std::size_t const secp_r1_fq<521>::number_bits; constexpr typename std::size_t const secp_r1_fq<521>::value_bits; constexpr typename secp_r1_fq<521>::integral_type const secp_r1_fq<521>::modulus; constexpr typename secp_r1_fq<521>::integral_type const secp_r1_fq<521>::group_order_minus_one_half; - constexpr typename secp_r1_fq<521>::modular_params_type const secp_r1_fq<521>::modulus_params; } // namespace fields } // namespace algebra } // namespace crypto3 diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/scalar_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/scalar_field.hpp index 365b713789..0a7d9786b5 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/scalar_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/secp/secp_r1/scalar_field.hpp @@ -56,18 +56,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x0100000000000000000001f4c8f927aed3ca752257_cppui_modular161; + 0x0100000000000000000001f4c8f927aed3ca752257_big_uint161; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -84,18 +77,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xffffffffffffffffffffffff99def836146bc9b1b4d22831_cppui_modular192; + 0xffffffffffffffffffffffff99def836146bc9b1b4d22831_big_uint192; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -112,18 +98,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d_cppui_modular224; + 0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d_big_uint224; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -140,18 +119,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551_cppui_modular256; + 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551_big_uint256; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -168,18 +140,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973_cppui_modular384; + 0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973_big_uint384; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -196,18 +161,11 @@ namespace nil { constexpr static const std::size_t number_bits = policy_type::number_bits; constexpr static const integral_type modulus = - 0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409_cppui_modular521; + 0x01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409_big_uint521; constexpr static const integral_type group_order_minus_one_half = (modulus - 1) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp>> value_type; constexpr static const std::size_t value_bits = modulus_bits; @@ -222,42 +180,36 @@ namespace nil { constexpr typename std::size_t const secp_r1_fr<160>::value_bits; constexpr typename secp_r1_fr<160>::integral_type const secp_r1_fr<160>::modulus; constexpr typename secp_r1_fr<160>::integral_type const secp_r1_fr<160>::group_order_minus_one_half; - constexpr typename secp_r1_fr<160>::modular_params_type const secp_r1_fr<160>::modulus_params; constexpr typename std::size_t const secp_r1_fr<192>::modulus_bits; constexpr typename std::size_t const secp_r1_fr<192>::number_bits; constexpr typename std::size_t const secp_r1_fr<192>::value_bits; constexpr typename secp_r1_fr<192>::integral_type const secp_r1_fr<192>::modulus; constexpr typename secp_r1_fr<192>::integral_type const secp_r1_fr<192>::group_order_minus_one_half; - constexpr typename secp_r1_fr<192>::modular_params_type const secp_r1_fr<192>::modulus_params; constexpr typename std::size_t const secp_r1_fr<224>::modulus_bits; constexpr typename std::size_t const secp_r1_fr<224>::number_bits; constexpr typename std::size_t const secp_r1_fr<224>::value_bits; constexpr typename secp_r1_fr<224>::integral_type const secp_r1_fr<224>::modulus; constexpr typename secp_r1_fr<224>::integral_type const secp_r1_fr<224>::group_order_minus_one_half; - constexpr typename secp_r1_fr<224>::modular_params_type const secp_r1_fr<224>::modulus_params; constexpr typename std::size_t const secp_r1_fr<256>::modulus_bits; constexpr typename std::size_t const secp_r1_fr<256>::number_bits; constexpr typename std::size_t const secp_r1_fr<256>::value_bits; constexpr typename secp_r1_fr<256>::integral_type const secp_r1_fr<256>::modulus; constexpr typename secp_r1_fr<256>::integral_type const secp_r1_fr<256>::group_order_minus_one_half; - constexpr typename secp_r1_fr<256>::modular_params_type const secp_r1_fr<256>::modulus_params; constexpr typename std::size_t const secp_r1_fr<384>::modulus_bits; constexpr typename std::size_t const secp_r1_fr<384>::number_bits; constexpr typename std::size_t const secp_r1_fr<384>::value_bits; constexpr typename secp_r1_fr<384>::integral_type const secp_r1_fr<384>::modulus; constexpr typename secp_r1_fr<384>::integral_type const secp_r1_fr<384>::group_order_minus_one_half; - constexpr typename secp_r1_fr<384>::modular_params_type const secp_r1_fr<384>::modulus_params; constexpr typename std::size_t const secp_r1_fr<521>::modulus_bits; constexpr typename std::size_t const secp_r1_fr<521>::number_bits; constexpr typename std::size_t const secp_r1_fr<521>::value_bits; constexpr typename secp_r1_fr<521>::integral_type const secp_r1_fr<521>::modulus; constexpr typename secp_r1_fr<521>::integral_type const secp_r1_fr<521>::group_order_minus_one_half; - constexpr typename secp_r1_fr<521>::modular_params_type const secp_r1_fr<521>::modulus_params; } // namespace fields } // namespace algebra } // namespace crypto3 diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/vesta/base_field.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/vesta/base_field.hpp index a523851bd3..2229061191 100755 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/vesta/base_field.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/fields/vesta/base_field.hpp @@ -55,17 +55,10 @@ namespace nil { #else constexpr static const integral_type modulus = - 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001_cppui_modular255; + 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001_big_uint255; constexpr static const integral_type group_order_minus_one_half = (modulus - 1u) / 2; - typedef typename policy_type::modular_backend modular_backend; - constexpr static const modular_params_type modulus_params = modulus.backend(); - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - modular_backend, - boost::multiprecision::backends::modular_params_ct>> - modular_type; - + typedef nil::crypto3::multiprecision::auto_big_mod modular_type; typedef typename detail::element_fp> value_type; #endif }; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/multiexp.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/multiexp.hpp index d4e2e508a2..e3aa18f10f 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/multiexp.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/multiexp.hpp @@ -29,9 +29,6 @@ #include -#include -#include - #include #include @@ -188,7 +185,7 @@ namespace nil { for (std::size_t outer = 0; outer < outerc; ++outer) { std::size_t inner = 0; for (std::size_t i = 0; i < window; ++i) { - if (boost::multiprecision::bit_test(pow_val, outer * window + i)) { + if (pow_val.bit_test(outer * window + i)) { inner |= 1u << i; } } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/policies.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/policies.hpp index 413337b42f..5e23246efb 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/policies.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/multiexp/policies.hpp @@ -29,9 +29,6 @@ #include -#include -#include - #include namespace nil { @@ -118,11 +115,11 @@ namespace nil { for (std::size_t i = 0; i < length; i++) { // Should be - // std::size_t bn_exponents_i_msb = boost::multiprecision::msb(exponents[i].data) + 1; - // But boost::multiprecision::msb doesn't work for zero value + // std::size_t bn_exponents_i_msb = exponents[i].data.base().msb() + 1; + // But nil::crypto3::multiprecision::msb doesn't work for zero value std::size_t bn_exponents_i_msb = 1; if (exponents[i] != field_value_type::zero()) { - bn_exponents_i_msb = boost::multiprecision::msb(exponents[i].data) + 1; + bn_exponents_i_msb = exponents[i].data.base().msb() + 1; } num_bits = std::max(num_bits, bn_exponents_i_msb); } @@ -145,7 +142,7 @@ namespace nil { for (std::size_t i = 0; i < length; i++) { std::size_t id = 0; for (std::size_t j = 0; j < c; j++) { - if (boost::multiprecision::bit_test(exponents[i].data, k * c + j)) { + if (exponents[i].data.base().bit_test(k * c + j)) { id |= 1 << j; } } @@ -268,7 +265,7 @@ namespace nil { detail::ordered_exponent &b = (opt_q[1] < opt_q[2] ? opt_q[2] : opt_q[1]); - const std::size_t abits = boost::multiprecision::msb(a.r) + 1; + const std::size_t abits = a.r.msb() + 1; if (b.r.is_zero()) { // opt_result = opt_result + (a.r * g[a.idx]); @@ -276,7 +273,7 @@ namespace nil { break; } - const std::size_t bbits = boost::multiprecision::msb(b.r) + 1; + const std::size_t bbits = b.r.msb() + 1; const std::size_t limit = (abits - bbits >= 20 ? 20 : abits - bbits); if (bbits < 1ul << limit) { diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/alt_bn128/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/alt_bn128/params.hpp index c06384b956..150473c7c9 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/alt_bn128/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/alt_bn128/params.hpp @@ -49,7 +49,7 @@ namespace nil { constexpr static const std::size_t integral_type_max_bits = curve_type::base_field_type::modulus_bits; - constexpr static const integral_type ate_loop_count = 0x19D797039BE763BA8_cppui_modular254; + constexpr static const integral_type ate_loop_count = 0x19D797039BE763BA8_big_uint254; constexpr static const bool ate_is_loop_count_neg = false; using g2_field_type = typename curve_type::g2_type<>::params_type::field_type; @@ -57,14 +57,14 @@ namespace nil { // g2_type::params_type::twist.pow((p-1)/3), twist = (9, 1) constexpr static const typename g2_field_type::value_type TWIST_MUL_BY_Q_X = typename g2_field_type::value_type( - 0x2FB347984F7911F74C0BEC3CF559B143B78CC310C2C3330C99E39557176F553D_cppui_modular254, - 0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2_cppui_modular254); + 0x2FB347984F7911F74C0BEC3CF559B143B78CC310C2C3330C99E39557176F553D_big_uint254, + 0x16C9E55061EBAE204BA4CC8BD75A079432AE2A1D0B7C9DCE1665D51C640FCBA2_big_uint254); // g2_type::params_type::twist.pow((p-1)/2), twist = (9, 1) constexpr static const typename g2_field_type::value_type TWIST_MUL_BY_Q_Y = typename g2_field_type::value_type( - 0x63CF305489AF5DCDC5EC698B6E2F9B9DBAAE0EDA9C95998DC54014671A0135A_cppui_modular254, - 0x7C03CBCAC41049A0704B5A7EC796F2B21807DC98FA25BD282D37F632623B0E3_cppui_modular254); + 0x63CF305489AF5DCDC5EC698B6E2F9B9DBAAE0EDA9C95998DC54014671A0135A_big_uint254, + 0x7C03CBCAC41049A0704B5A7EC796F2B21807DC98FA25BD282D37F632623B0E3_big_uint254); /* python3: * # Signed bit representation. diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/377/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/377/params.hpp index 555a7927b8..28f3a88b8f 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/377/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/377/params.hpp @@ -48,12 +48,12 @@ namespace nil { curve_type::base_field_type::modulus_bits; constexpr static const integral_type ate_loop_count = - 0x8508C00000000001_cppui_modular64; + 0x8508C00000000001_big_uint64; constexpr static const bool ate_is_loop_count_neg = false; constexpr static const integral_type final_exponent_z = - 0x8508C00000000001_cppui_modular64; + 0x8508C00000000001_big_uint64; constexpr static const bool final_exponent_is_z_neg = false; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/381/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/381/params.hpp index d4df2fde37..34a47dc8a9 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/381/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/bls12/381/params.hpp @@ -48,12 +48,12 @@ namespace nil { curve_type::base_field_type::modulus_bits; constexpr static const integral_type ate_loop_count = - 0xD201000000010000_cppui_modular64; + 0xD201000000010000_big_uint64; constexpr static const bool ate_is_loop_count_neg = true; constexpr static const integral_type final_exponent_z = - 0xD201000000010000_cppui_modular64; + 0xD201000000010000_big_uint64; constexpr static const bool final_exponent_is_z_neg = true; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt4/298/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt4/298/params.hpp index 823197fc4d..52593810d4 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt4/298/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt4/298/params.hpp @@ -48,11 +48,11 @@ namespace nil { curve_type::base_field_type::modulus_bits; constexpr static const integral_type ate_loop_count = - 0x1EEF5546609756BEC2A33F0DC9A1B671660000_cppui_modular149; + 0x1EEF5546609756BEC2A33F0DC9A1B671660000_big_uint149; constexpr static const bool ate_is_loop_count_neg = false; constexpr static const integral_type final_exponent_last_chunk_abs_of_w0 = - 0x1EEF5546609756BEC2A33F0DC9A1B671660001_cppui_modular149; + 0x1EEF5546609756BEC2A33F0DC9A1B671660001_big_uint149; constexpr static const bool final_exponent_last_chunk_is_w0_neg = false; constexpr static const integral_type final_exponent_last_chunk_w1 = integral_type(0x1); diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt6/298/params.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt6/298/params.hpp index 497fbb83b4..3ef6f683a6 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt6/298/params.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/detail/mnt6/298/params.hpp @@ -48,11 +48,11 @@ namespace nil { curve_type::base_field_type::modulus_bits; constexpr static const integral_type ate_loop_count = - 0x1EEF5546609756BEC2A33F0DC9A1B671660000_cppui_modular149; + 0x1EEF5546609756BEC2A33F0DC9A1B671660000_big_uint149; constexpr static const bool ate_is_loop_count_neg = true; constexpr static const integral_type final_exponent_last_chunk_abs_of_w0 = - 0x1EEF5546609756BEC2A33F0DC9A1B671660000_cppui_modular149; // same as ate_loop_count? + 0x1EEF5546609756BEC2A33F0DC9A1B671660000_big_uint149; // same as ate_loop_count? constexpr static const bool final_exponent_last_chunk_is_w0_neg = true; constexpr static const integral_type final_exponent_last_chunk_w1 = integral_type(0x1); diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_double_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_double_miller_loop.hpp index bde1c27b71..7ad457aee7 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_double_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_double_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_ATE_DOUBLE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_ATE_DOUBLE_MILLER_LOOP_HPP -#include -#include - #include namespace nil { @@ -60,7 +57,7 @@ namespace nil { const typename policy_type::integral_type &loop_count = params_type::ate_loop_count; for (long i = params_type::integral_type_max_bits; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(loop_count, i); + const bool bit = loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ found_one |= bit; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_miller_loop.hpp index 4a8cdbab98..8baeb97e85 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_ATE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_ATE_MILLER_LOOP_HPP -#include -#include - #include namespace nil { @@ -60,7 +57,7 @@ namespace nil { typename policy_type::ate_ell_coeffs c; for (long i = params_type::integral_type_max_bits; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(loop_count, i); + const bool bit = loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ found_one |= bit; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_precompute_g2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_precompute_g2.hpp index 4aa8568533..63e24c711d 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_precompute_g2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0/ate_precompute_g2.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_ATE_PRECOMPUTE_G2_HPP #define CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_ATE_PRECOMPUTE_G2_HPP -#include -#include - #include namespace nil { @@ -124,7 +121,7 @@ namespace nil { typename policy_type::ate_ell_coeffs c; for (long i = params_type::integral_type_max_bits; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(loop_count, i); + const bool bit = loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ found_one |= bit; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_double_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_double_miller_loop.hpp index 97b9c06f44..7b7f850da0 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_double_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_double_miller_loop.hpp @@ -27,7 +27,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_SBIT_ATE_DOUBLE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_SBIT_ATE_DOUBLE_MILLER_LOOP_HPP -#include #include #include diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_miller_loop.hpp index da13cebf4a..a88e975927 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_miller_loop.hpp @@ -27,7 +27,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_SBTI_ATE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_SBTI_ATE_MILLER_LOOP_HPP -#include #include #include diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_precompute_g2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_precompute_g2.hpp index e9f7d476b2..3d7ad2b6f3 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_precompute_g2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/jacobian_with_a4_0_sbit/ate_precompute_g2.hpp @@ -27,8 +27,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_SBIT_ATE_PRECOMPUTE_G2_HPP #define CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_JACOBIAN_WITH_A4_0_SBIT_ATE_PRECOMPUTE_G2_HPP -#include - #include #include diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/projective/ate_precompute_g2.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/projective/ate_precompute_g2.hpp index 10a892c4fd..375b51df7e 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/projective/ate_precompute_g2.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/forms/short_weierstrass/projective/ate_precompute_g2.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_PROJECTIVE_ATE_PRECOMPUTE_G2_HPP #define CRYPTO3_ALGEBRA_PAIRING_SHORT_WEIERSTRASS_PROJECTIVE_ATE_PRECOMPUTE_G2_HPP -#include -#include - #include namespace nil { @@ -135,7 +132,7 @@ namespace nil { bool found_one = false; for (long i = params_type::integral_type_max_bits - 1; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(params_type::ate_loop_count, i); + const bool bit = params_type::ate_loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ found_one |= bit; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/affine_ate_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/affine_ate_miller_loop.hpp index 111b3c0163..901a2fb58a 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/affine_ate_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/affine_ate_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT4_298_AFFINE_ATE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_MNT4_298_AFFINE_ATE_MILLER_LOOP_HPP -#include -#include - #include #include #include @@ -58,7 +55,7 @@ namespace nil { bool found_nonzero = false; std::size_t idx = 0; - std::vector NAF = boost::multiprecision::find_wnaf(1, policy_type::ate_loop_count); + std::vector NAF = nil::crypto3::multiprecision::find_wnaf(1, policy_type::ate_loop_count); for (long i = NAF.size() - 1; i >= 0; --i) { if (!found_nonzero) { diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_double_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_double_miller_loop.hpp index ab82064908..8dc068d5f0 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_double_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_double_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT4_298_ATE_DOUBLE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_MNT4_298_ATE_DOUBLE_MILLER_LOOP_HPP -#include -#include - #include #include #include @@ -75,7 +72,7 @@ namespace nil { std::size_t add_idx = 0; for (long i = params_type::integral_type_max_bits - 1; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(params_type::ate_loop_count, i); + const bool bit = params_type::ate_loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_miller_loop.hpp index df5d2b6279..90107c8762 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt4/298/ate_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT4_298_ATE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_MNT4_298_ATE_MILLER_LOOP_HPP -#include -#include - #include #include #include @@ -71,7 +68,7 @@ namespace nil { std::size_t add_idx = 0; for (long i = params_type::integral_type_max_bits - 1; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(params_type::ate_loop_count, i); + const bool bit = params_type::ate_loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/affine_ate_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/affine_ate_miller_loop.hpp index 98b50206f0..724fda1597 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/affine_ate_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/affine_ate_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT4_298_AFFINE_ATE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_MNT4_298_AFFINE_ATE_MILLER_LOOP_HPP -#include -#include - #include #include #include @@ -59,7 +56,7 @@ namespace nil { bool found_nonzero = false; std::size_t idx = 0; - std::vector NAF = boost::multiprecision::find_wnaf(1, policy_type::ate_loop_count); + std::vector NAF = nil::crypto3::multiprecision::find_wnaf(1, policy_type::ate_loop_count); for (long i = NAF.size() - 1; i >= 0; --i) { if (!found_nonzero) { diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_double_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_double_miller_loop.hpp index 1d3b2239f8..941a5d3df1 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_double_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_double_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT6_298_ATE_DOUBLE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_MNT6_298_ATE_DOUBLE_MILLER_LOOP_HPP -#include -#include - #include #include #include @@ -77,7 +74,7 @@ namespace nil { std::size_t add_idx = 0; for (long i = params_type::integral_type_max_bits - 1; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(params_type::ate_loop_count, i); + const bool bit = params_type::ate_loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_miller_loop.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_miller_loop.hpp index 52b7f1accc..f06da02261 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_miller_loop.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/pairing/mnt6/298/ate_miller_loop.hpp @@ -26,9 +26,6 @@ #ifndef CRYPTO3_ALGEBRA_PAIRING_MNT6_298_ATE_MILLER_LOOP_HPP #define CRYPTO3_ALGEBRA_PAIRING_MNT6_298_ATE_MILLER_LOOP_HPP -#include -#include - #include #include #include @@ -80,7 +77,7 @@ namespace nil { std::size_t add_idx = 0; for (long i = params_type::integral_type_max_bits - 1; i >= 0; --i) { - const bool bit = boost::multiprecision::bit_test(params_type::ate_loop_count, i); + const bool bit = params_type::ate_loop_count.bit_test(i); if (!found_one) { /* this skips the MSB itself */ diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/primes.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/primes.hpp index 416e077381..3449a1d0cd 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/primes.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/primes.hpp @@ -29,8 +29,10 @@ #include -#include -#include +#include +#include +#include + #include "random_element.hpp" namespace nil { @@ -41,26 +43,23 @@ namespace nil { Input: n the number to be factorized. Output: a factor of n. */ - template - boost::multiprecision::number - pollard_rho_factorization(const boost::multiprecision::number &n) { - using namespace boost::multiprecision; - + template + nil::crypto3::multiprecision::big_uint + pollard_rho_factorization(const nil::crypto3::multiprecision::big_uint &n) { if (!(n % 2)) { return 2; } - boost::random::independent_bits_engine> rng; - number>, ExpressionTemplates> divisor, + boost::random::independent_bits_engine> rng; + nil::crypto3::multiprecision::montgomery_big_mod_rt divisor(0u, n), c(rng(), n), x(rng(), n), nn(n, n), xx = x; do { x = x * x + c; xx = xx * xx + c; xx = xx * xx + c; - divisor = boost::multiprecision::gcd((x > xx) ? x - xx : xx - x, nn); + divisor = nil::crypto3::multiprecision::gcd((x > xx) ? x - xx : xx - x, nn); } while (static_cast(divisor) == 1); - return static_cast>(divisor); + return divisor.base(); } /* @@ -72,7 +71,7 @@ namespace nil { void prime_factorize(IntegerType n, std::set &prime_factors) { if (n == 0 || n == 1) return; - if (boost::multiprecision::miller_rabin_test(n, 100)) { + if (nil::crypto3::multiprecision::miller_rabin_test(n, 100)) { prime_factors.insert(n); return; } @@ -92,7 +91,7 @@ namespace nil { if (r > IntegerType(0)) qNew2 += (mi - r); BOOST_ASSERT_MSG(qNew2 >= qNew, "FirstPrime parameters overflow this integer implementation"); - while (!boost::multiprecision::miller_rabin_test((qNew = qNew2), 100)) { + while (!nil::crypto3::multiprecision::miller_rabin_test((qNew = qNew2), 100)) { qNew2 = qNew + mi; BOOST_ASSERT_MSG(qNew2 >= qNew, "FirstPrime overflow growing candidate"); } @@ -102,7 +101,7 @@ namespace nil { template IntegerType next_prime(const IntegerType &q, uint64_t m) { IntegerType M(m), qNew(q + M); - while (!boost::multiprecision::miller_rabin_test(qNew, 100)) { + while (!nil::crypto3::multiprecision::miller_rabin_test(qNew, 100)) { BOOST_VERIFY_MSG((qNew += M) >= q, "NextPrime overflow growing candidate"); } return qNew; @@ -111,7 +110,7 @@ namespace nil { template IntegerType previous_prime(const IntegerType &q, uint64_t m) { IntegerType M(m), qNew(q - M); - while (!boost::multiprecision::miller_rabin_test(qNew, 100)) { + while (!nil::crypto3::multiprecision::miller_rabin_test(qNew, 100)) { BOOST_VERIFY_MSG((qNew -= M) <= q, "Moduli size is not sufficient! Must be increased."); } return qNew; diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/random_element.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/random_element.hpp index 2270a070ab..19c8a6f093 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/random_element.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/random_element.hpp @@ -28,8 +28,6 @@ #include -#include - #include #include diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/totient.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/totient.hpp index 663b84863c..8b00f758ed 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/totient.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/totient.hpp @@ -66,7 +66,7 @@ namespace nil { IntegerType one = 1; for (IntegerType i = 1; i < n; i++) { - if (boost::multiprecision::gcd(i, n) == one) + if (nil::crypto3::multiprecision::gcd(i, n) == one) result.push_back(i); } diff --git a/crypto3/libs/algebra/include/nil/crypto3/algebra/wnaf.hpp b/crypto3/libs/algebra/include/nil/crypto3/algebra/wnaf.hpp index ed851b5cab..11df66de1e 100644 --- a/crypto3/libs/algebra/include/nil/crypto3/algebra/wnaf.hpp +++ b/crypto3/libs/algebra/include/nil/crypto3/algebra/wnaf.hpp @@ -25,19 +25,18 @@ #ifndef CRYPTO3_ALGEBRA_WNAF_HPP #define CRYPTO3_ALGEBRA_WNAF_HPP -#include - #include #include +#include + namespace nil { namespace crypto3 { namespace algebra { - template + template BaseValueType fixed_window_wnaf_exp(const std::size_t window_size, const BaseValueType &base, - const boost::multiprecision::number &scalar) { - std::vector naf = boost::multiprecision::find_wnaf(window_size, scalar); + const nil::crypto3::multiprecision::big_uint &scalar) { + std::vector naf = nil::crypto3::multiprecision::find_wnaf(window_size, scalar); std::vector table(1ul << (window_size - 1)); BaseValueType tmp = base; BaseValueType dbl = base; @@ -67,13 +66,12 @@ namespace nil { return res; } - template + template std::enable_if_t< is_curve_element::value, CurveGroupValueType> opt_window_wnaf_exp(const CurveGroupValueType &base, - const boost::multiprecision::number &scalar, + const nil::crypto3::multiprecision::big_uint &scalar, const std::size_t scalar_bits) { std::size_t best = 0; for (long i = diff --git a/crypto3/libs/algebra/test/CMakeLists.txt b/crypto3/libs/algebra/test/CMakeLists.txt index 22e215a7b2..2140872daa 100644 --- a/crypto3/libs/algebra/test/CMakeLists.txt +++ b/crypto3/libs/algebra/test/CMakeLists.txt @@ -7,9 +7,7 @@ #---------------------------------------------------------------------------# cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} - - Boost::unit_test_framework - Boost::random) + Boost::unit_test_framework) add_custom_target(algebra_runtime_tests) @@ -25,7 +23,7 @@ macro(define_runtime_algebra_test name) ${Boost_INCLUDE_DIRS}) - set_target_properties(${test_name} PROPERTIES CXX_STANDARD 17 + set_target_properties(${test_name} PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") @@ -46,7 +44,7 @@ macro(define_compile_time_algebra_test name) ${Boost_INCLUDE_DIRS}) - set_target_properties(algebra_${name}_compile_test PROPERTIES CXX_STANDARD 17) + set_target_properties(algebra_${name}_compile_test PROPERTIES CXX_STANDARD 20) endmacro() set(RUNTIME_TESTS_NAMES diff --git a/crypto3/libs/algebra/test/curves.cpp b/crypto3/libs/algebra/test/curves.cpp index 05869075df..9bc7a8466c 100644 --- a/crypto3/libs/algebra/test/curves.cpp +++ b/crypto3/libs/algebra/test/curves.cpp @@ -58,7 +58,7 @@ #include #include -#include +#include using namespace nil::crypto3::algebra; @@ -427,50 +427,50 @@ BOOST_AUTO_TEST_CASE(curve_operation_test_babyjubjub_g1) { typename policy_type::value_type P1( typename policy_type::field_type::value_type( - 0x274DBCE8D15179969BC0D49FA725BDDF9DE555E0BA6A693C6ADB52FC9EE7A82C_cppui_modular254), + 0x274DBCE8D15179969BC0D49FA725BDDF9DE555E0BA6A693C6ADB52FC9EE7A82C_big_uint254), typename policy_type::field_type::value_type( - 0x5CE98C61B05F47FE2EAE9A542BD99F6B2E78246231640B54595FEBFD51EB853_cppui_modular251)), + 0x5CE98C61B05F47FE2EAE9A542BD99F6B2E78246231640B54595FEBFD51EB853_big_uint251)), P2(typename policy_type::field_type::value_type( - 0x2491ABA8D3A191A76E35BC47BD9AFE6CC88FEE14D607CBE779F2349047D5C157_cppui_modular254), + 0x2491ABA8D3A191A76E35BC47BD9AFE6CC88FEE14D607CBE779F2349047D5C157_big_uint254), typename policy_type::field_type::value_type( - 0x2E07297F8D3C3D7818DBDDFD24C35583F9A9D4ED0CB0C1D1348DD8F7F99152D7_cppui_modular254)), + 0x2E07297F8D3C3D7818DBDDFD24C35583F9A9D4ED0CB0C1D1348DD8F7F99152D7_big_uint254)), P3(typename policy_type::field_type::value_type( - 0x11805510440A3488B3B811EAACD0EC7C72DDED51978190E19067A2AFAEBAF361_cppui_modular253), + 0x11805510440A3488B3B811EAACD0EC7C72DDED51978190E19067A2AFAEBAF361_big_uint253), typename policy_type::field_type::value_type( - 0x1F07AA1B3C598E2FF9FF77744A39298A0A89A9027777AF9FA100DD448E072C13_cppui_modular253)); + 0x1F07AA1B3C598E2FF9FF77744A39298A0A89A9027777AF9FA100DD448E072C13_big_uint253)); BOOST_CHECK_EQUAL(P1 + P2, P3); typename policy_type::value_type P4( typename policy_type::field_type::value_type( - 0xF3C160E26FC96C347DD9E705EB5A3E8D661502728609FF95B3B889296901AB5_cppui_modular252), + 0xF3C160E26FC96C347DD9E705EB5A3E8D661502728609FF95B3B889296901AB5_big_uint), typename policy_type::field_type::value_type( - 0x9979273078B5C735585107619130E62E315C5CAFE683A064F79DFED17EB14E1_cppui_modular252)); + 0x9979273078B5C735585107619130E62E315C5CAFE683A064F79DFED17EB14E1_big_uint)); P1.double_inplace(); BOOST_CHECK_EQUAL(P1, P4); typename policy_type::value_type P5( typename policy_type::field_type::value_type( - 0x274dbce8d15179969bc0d49fa725bddf9de555e0ba6a693c6adb52fc9ee7a82c_cppui_modular252), + 0x274dbce8d15179969bc0d49fa725bddf9de555e0ba6a693c6adb52fc9ee7a82c_big_uint), typename policy_type::field_type::value_type( - 0x5ce98c61b05f47fe2eae9a542bd99f6b2e78246231640b54595febfd51eb853_cppui_modular252)), + 0x5ce98c61b05f47fe2eae9a542bd99f6b2e78246231640b54595febfd51eb853_big_uint)), et_s1P5(typename policy_type::field_type::value_type( - 0x2ad46cbfb78773b6254adc1d80c6efa02f3bf948c37e5a2222136421d7bec942_cppui_modular252), + 0x2ad46cbfb78773b6254adc1d80c6efa02f3bf948c37e5a2222136421d7bec942_big_uint), typename policy_type::field_type::value_type( - 0x14e9693f16d75f7065ce51e1f46ae6c60841ca1e0cf264eda26398e36ca2ed69_cppui_modular252)), + 0x14e9693f16d75f7065ce51e1f46ae6c60841ca1e0cf264eda26398e36ca2ed69_big_uint)), et_s2P5(typename policy_type::field_type::value_type( - 0x031b924a83fbbdc206fb2d3bc85b7a724000714627f681a60b34885e4deca1d6_cppui_modular252), + 0x031b924a83fbbdc206fb2d3bc85b7a724000714627f681a60b34885e4deca1d6_big_uint), typename policy_type::field_type::value_type( - 0x242e364702e64a6850c9aee7ece7ca79ba019ca7a63684e2df0873ca0d8f7e87_cppui_modular252)), + 0x242e364702e64a6850c9aee7ece7ca79ba019ca7a63684e2df0873ca0d8f7e87_big_uint)), P6(typename policy_type::field_type::value_type( - 0xf3c160e26fc96c347dd9e705eb5a3e8d661502728609ff95b3b889296901ab5_cppui_modular252), + 0xf3c160e26fc96c347dd9e705eb5a3e8d661502728609ff95b3b889296901ab5_big_uint), typename policy_type::field_type::value_type( - 0x9979273078b5c735585107619130e62e315c5cafe683a064f79dfed17eb14e1_cppui_modular252)), + 0x9979273078b5c735585107619130e62e315c5cafe683a064f79dfed17eb14e1_big_uint)), et_s1P6(typename policy_type::field_type::value_type( - 0x2e6475817d356adbbfcec42b2f7b90500d6f74e8cd4ec1ac0b6effd00ba854d7_cppui_modular252), + 0x2e6475817d356adbbfcec42b2f7b90500d6f74e8cd4ec1ac0b6effd00ba854d7_big_uint), typename policy_type::field_type::value_type( - 0x195a50f93ff3f3e68bd593be5781301c32962777dc8237b099c23d39c24ec76a_cppui_modular252)); + 0x195a50f93ff3f3e68bd593be5781301c32962777dc8237b099c23d39c24ec76a_big_uint)); BOOST_CHECK_EQUAL(et_s1P5, scalar_value_type(integral_type(3u)) * P5); BOOST_CHECK_EQUAL(et_s2P5, scalar_value_type(integral_type( @@ -604,8 +604,8 @@ class bls12_377_orders_2_4_runner { o2_Y = 0u; // point of order 4 static constexpr curve_type::base_field_type::value_type - o4_X = 0x126f980765bb3d634f9d5cb49909db8af2e185fb13bdb7dc4aedcadf9d8dad86bba02eda906066c9153bdf72ddce76c_cppui_modular377, - o4_Y = 0x06e4b66bb23ef4bef715f597162d6662d8161cd062d6212d39392e17232444a0760b5dc479db98123ab3887aa3cb34e_cppui_modular377; + o4_X = 0x126f980765bb3d634f9d5cb49909db8af2e185fb13bdb7dc4aedcadf9d8dad86bba02eda906066c9153bdf72ddce76c_big_uint377, + o4_Y = 0x06e4b66bb23ef4bef715f597162d6662d8161cd062d6212d39392e17232444a0760b5dc479db98123ab3887aa3cb34e_big_uint377; public: bool static run() { @@ -646,13 +646,13 @@ BOOST_AUTO_TEST_CASE(twisted_edwards_extended_order_test) { /* Point of order 2 */ curve_type::base_field_type::value_type - o2_X = 0x0_cppui_modular255, + o2_X = 0x0_big_uint255, o2_Y = curve_type::base_field_type::modulus - 1; /* Point of order 4 */ curve_type::base_field_type::value_type - o4_X = 0x547cdb7fb03e20f4d4b2ff66c2042858d0bce7f952d01b873b11e4d8b5f15f3d_cppui_modular255, - o4_Y = 0x0_cppui_modular255; + o4_X = 0x547cdb7fb03e20f4d4b2ff66c2042858d0bce7f952d01b873b11e4d8b5f15f3d_big_uint255, + o4_Y = 0x0_big_uint255; typename g1_type::value_type o4(o4_X, o4_Y), o2(o2_X, o2_Y), check; diff --git a/crypto3/libs/algebra/test/curves_static.cpp b/crypto3/libs/algebra/test/curves_static.cpp index 81eaa789c2..2d387c76ec 100644 --- a/crypto3/libs/algebra/test/curves_static.cpp +++ b/crypto3/libs/algebra/test/curves_static.cpp @@ -65,45 +65,45 @@ BOOST_AUTO_TEST_CASE(curve_operation_test_bls12_381_g1) { using g_value_type_projective = typename curve_type::g1_type::value_type; constexpr g_value_type p1( - 0x19a8ce51e3507d9ed66343fc7abda65f24a02a5054c262ba82dd067f91de595469ba0029571b22007d3712a51a14b66b_cppui_modular381, - 0x151c956a92fe067a60533e2f9f4d90c75a460f9ca0a6d3beb2b0388fe2be7f1f21de58af7fd2c85ef13326856408a3a4_cppui_modular381, - 0x814f8119ab9939282414f63efe8421ea0893343f697dba821cc21abb4c0c72573c542becd25d84d3f97d76951cb44bd_cppui_modular381); + 0x19a8ce51e3507d9ed66343fc7abda65f24a02a5054c262ba82dd067f91de595469ba0029571b22007d3712a51a14b66b_big_uint381, + 0x151c956a92fe067a60533e2f9f4d90c75a460f9ca0a6d3beb2b0388fe2be7f1f21de58af7fd2c85ef13326856408a3a4_big_uint381, + 0x814f8119ab9939282414f63efe8421ea0893343f697dba821cc21abb4c0c72573c542becd25d84d3f97d76951cb44bd_big_uint381); constexpr g_value_type p2( - 0xe5944419aae6b311708fdee3e7a3169ef47f7a509ec5e6781a918eb42294a0c3a3916df0f5c3bf75b1553ee7c66198a_cppui_modular381, - 0x80f8b87d65fa717f44c74f944e6f8b9c5493a87bfa0b48395c6326ad2c83e848280a7b7a81cfc3e44be18c2b721cf31_cppui_modular381, - 0x12dde0758a406a2d79166ade03f68799b359910c31d65ccb63090720eb6191393661cf26c3e83c922a804305027c2803_cppui_modular381); + 0xe5944419aae6b311708fdee3e7a3169ef47f7a509ec5e6781a918eb42294a0c3a3916df0f5c3bf75b1553ee7c66198a_big_uint381, + 0x80f8b87d65fa717f44c74f944e6f8b9c5493a87bfa0b48395c6326ad2c83e848280a7b7a81cfc3e44be18c2b721cf31_big_uint381, + 0x12dde0758a406a2d79166ade03f68799b359910c31d65ccb63090720eb6191393661cf26c3e83c922a804305027c2803_big_uint381); constexpr g_value_type p_add( - 0x13034f3fbe9a557cc7daf9aaffbc1a4b3d1a4c88c11ba5fd4502aed63ed08f3f52e1bce1ba9a5ea70d862436cd8c0a53_cppui_modular381, - 0x2c731465ff3bd544bd350c9b6bb5fafca2cbfe31c0a3221566d1fc5547d463914b64e26b4107a78c0179a004c7642af_cppui_modular381, - 0x214b8ebcf8c5293040a2c85d41d27593829f116fb11224cb6b530a288bc66e3d4007d5087f71aa1c209f9d98b87111f_cppui_modular381); + 0x13034f3fbe9a557cc7daf9aaffbc1a4b3d1a4c88c11ba5fd4502aed63ed08f3f52e1bce1ba9a5ea70d862436cd8c0a53_big_uint381, + 0x2c731465ff3bd544bd350c9b6bb5fafca2cbfe31c0a3221566d1fc5547d463914b64e26b4107a78c0179a004c7642af_big_uint381, + 0x214b8ebcf8c5293040a2c85d41d27593829f116fb11224cb6b530a288bc66e3d4007d5087f71aa1c209f9d98b87111f_big_uint381); constexpr g_value_type p_sub( - 0x8d3551b80950015b4dbaac4c60e7c48f1470c13ca93b203f1e3d38e874a4c19356b237b823ee551865afa5f7eefd487_cppui_modular381, - 0xfa74f3643c4fef7f88fb5d844652185d8343f5c2f2a4394c626d8f3c773bd9d60158f30158f1feefa7b6c12e07cf0ef_cppui_modular381, - 0x214b8ebcf8c5293040a2c85d41d27593829f116fb11224cb6b530a288bc66e3d4007d5087f71aa1c209f9d98b87111f_cppui_modular381); + 0x8d3551b80950015b4dbaac4c60e7c48f1470c13ca93b203f1e3d38e874a4c19356b237b823ee551865afa5f7eefd487_big_uint381, + 0xfa74f3643c4fef7f88fb5d844652185d8343f5c2f2a4394c626d8f3c773bd9d60158f30158f1feefa7b6c12e07cf0ef_big_uint381, + 0x214b8ebcf8c5293040a2c85d41d27593829f116fb11224cb6b530a288bc66e3d4007d5087f71aa1c209f9d98b87111f_big_uint381); constexpr g_value_type p_mul_C( - 0x111152cbd1f7ff876f9f13ceacf6a535831ff5fbf59fe5f54ce37efef87b70ba89bc47d8d63c85565e29c4e1310cc8e9_cppui_modular381, - 0x16e86e2375254ce972334364277bc8ada71598631902013b23356752e653f6b51eeebf72cb72b446e8f32208ef27c58_cppui_modular381, - 0xe2b294ae8d8181dc4fd9c6edfe3d79215232abbacd879e339e9fb7ffc7d8158f292c1c408731d227507181e16708cbc_cppui_modular381); - constexpr auto C1 = 0x2b4bd538_cppui_modular381; + 0x111152cbd1f7ff876f9f13ceacf6a535831ff5fbf59fe5f54ce37efef87b70ba89bc47d8d63c85565e29c4e1310cc8e9_big_uint381, + 0x16e86e2375254ce972334364277bc8ada71598631902013b23356752e653f6b51eeebf72cb72b446e8f32208ef27c58_big_uint381, + 0xe2b294ae8d8181dc4fd9c6edfe3d79215232abbacd879e339e9fb7ffc7d8158f292c1c408731d227507181e16708cbc_big_uint381); + constexpr auto C1 = 0x2b4bd538_big_uint381; constexpr g_value_type p_mul_C1_plus_p_mul_C2( - 0x163c6586913d88ba0ca1f082e90f5dc6b97c9b8fc28e9f9f6140c357a8b97c20088da93e51089a3d870c9ac4cd7419ec_cppui_modular381, - 0x1987e74481a1bfa0ba3f38753c44af0cf77d64753812a22ed2c83f64990a5735ccb24aebc72b8ab559cab1a76e1fd20b_cppui_modular381, - 0xe65506b39c7874b40449480e82a0f94e09702038694504b36b90750c36b606c8691311677d524faa9d6d37ccd401880_cppui_modular381); - constexpr auto C2 = 0x33345b17_cppui_modular381; + 0x163c6586913d88ba0ca1f082e90f5dc6b97c9b8fc28e9f9f6140c357a8b97c20088da93e51089a3d870c9ac4cd7419ec_big_uint381, + 0x1987e74481a1bfa0ba3f38753c44af0cf77d64753812a22ed2c83f64990a5735ccb24aebc72b8ab559cab1a76e1fd20b_big_uint381, + 0xe65506b39c7874b40449480e82a0f94e09702038694504b36b90750c36b606c8691311677d524faa9d6d37ccd401880_big_uint381); + constexpr auto C2 = 0x33345b17_big_uint381; constexpr g_value_type_affine p_to_affine( - 0x97c062b9a9bee0bc02f762c7b7057a0cfa52f336f9bce0b130aaa2402bc7c820cc4f30f29ed69d87342c3137659af29_cppui_modular381, - 0x10eabcbf296774122daf3b60e289f0885485b66c4111d1a229bea7566aea5c9f87d1cbc8ae752e13288ec885d3f97eb6_cppui_modular381); + 0x97c062b9a9bee0bc02f762c7b7057a0cfa52f336f9bce0b130aaa2402bc7c820cc4f30f29ed69d87342c3137659af29_big_uint381, + 0x10eabcbf296774122daf3b60e289f0885485b66c4111d1a229bea7566aea5c9f87d1cbc8ae752e13288ec885d3f97eb6_big_uint381); constexpr g_value_type_projective p_to_projective( - 0xf2d335bf6370059219a693b1b50dfe9f966c371f052b36f70e426bf84750dcd4bb3da3beeef4e013c4532f4f78e06c1_cppui_modular381, - 0x54deeaa0db80987f8d81cfb4c716ae590c3b7641656f3fef45859a6446144c6eb191bbeb88929cbd90b2b9995574c90_cppui_modular381, - 0x1_cppui_modular381); + 0xf2d335bf6370059219a693b1b50dfe9f966c371f052b36f70e426bf84750dcd4bb3da3beeef4e013c4532f4f78e06c1_big_uint381, + 0x54deeaa0db80987f8d81cfb4c716ae590c3b7641656f3fef45859a6446144c6eb191bbeb88929cbd90b2b9995574c90_big_uint381, + 0x1_big_uint381); static_assert(p1 + p2 == p_add, "add error"); static_assert(p1 - p2 == p_sub, "sub error"); @@ -121,112 +121,112 @@ BOOST_AUTO_TEST_CASE(curve_operation_test_bls12_381_g2) { constexpr g_value_type p1( {{ - 0x12e7556630d7b731637d261c08fb26992098207486c56b152e902f7a287e4d7998c18fb3c21d3bc56b960f66e6b13d54_cppui_modular381, - 0x17eb1b09dfeadb08f3335511101067b74b03680f58b8d13797c3b0bf8359dd289fb18fc987ff0017520a98114028d89e_cppui_modular381, + 0x12e7556630d7b731637d261c08fb26992098207486c56b152e902f7a287e4d7998c18fb3c21d3bc56b960f66e6b13d54_big_uint381, + 0x17eb1b09dfeadb08f3335511101067b74b03680f58b8d13797c3b0bf8359dd289fb18fc987ff0017520a98114028d89e_big_uint381, }}, {{ - 0x18c01544aed3e8ff438c9aaebb5b905001cb03d5982733c85b71e036afead169b34d2c72d2417df44dca61d3dbbc9a9e_cppui_modular381, - 0x193ea114716be66883ceca4d5a162c308f09028fa0fce3dbcad49f7355a4e3a813013f6ea671dcb7f29464d8fcddeb8_cppui_modular381, + 0x18c01544aed3e8ff438c9aaebb5b905001cb03d5982733c85b71e036afead169b34d2c72d2417df44dca61d3dbbc9a9e_big_uint381, + 0x193ea114716be66883ceca4d5a162c308f09028fa0fce3dbcad49f7355a4e3a813013f6ea671dcb7f29464d8fcddeb8_big_uint381, }}, {{ - 0x48a155f876c814ebcf3efd02a99e9c0ddcdf2caba2c63929396fb02c8339817dcb2cdaf4dd0e3a353dbaafd84ee76c_cppui_modular381, - 0x3caf52cc8d881f00f7dd35510d9cc55cbf55bb7eddac1ca29799cb23bad7b76983e0820298d4c778ae46a5f546ad81a_cppui_modular381, + 0x48a155f876c814ebcf3efd02a99e9c0ddcdf2caba2c63929396fb02c8339817dcb2cdaf4dd0e3a353dbaafd84ee76c_big_uint381, + 0x3caf52cc8d881f00f7dd35510d9cc55cbf55bb7eddac1ca29799cb23bad7b76983e0820298d4c778ae46a5f546ad81a_big_uint381, }}); constexpr g_value_type p2( {{ - 0xeb2a45074d3e817643c8511c2965d5a2fe84dfed298b2254fc6ea54630120ddcc03538e587ef15cad6809dcb29b13f6_cppui_modular381, - 0x1499cb9c615d17534459e5177f38e0d94e36afeed3c0f8584dfa8e41151823fe341c197b1c619e6fc2e1032e7f644067_cppui_modular381, + 0xeb2a45074d3e817643c8511c2965d5a2fe84dfed298b2254fc6ea54630120ddcc03538e587ef15cad6809dcb29b13f6_big_uint381, + 0x1499cb9c615d17534459e5177f38e0d94e36afeed3c0f8584dfa8e41151823fe341c197b1c619e6fc2e1032e7f644067_big_uint381, }}, {{ - 0x113504af0d2a73c699c09f9beb32286b701c35cdda882d3386022f5a51b5f977ba32a7c3b94bf3a06bd29f913b39efa1_cppui_modular381, - 0x195488cb4697a6c61b4884e4cfa7e42c865e62e781d7cc23d3c7149ba40566933308e4286f809b87eca83eb644e46073_cppui_modular381, + 0x113504af0d2a73c699c09f9beb32286b701c35cdda882d3386022f5a51b5f977ba32a7c3b94bf3a06bd29f913b39efa1_big_uint381, + 0x195488cb4697a6c61b4884e4cfa7e42c865e62e781d7cc23d3c7149ba40566933308e4286f809b87eca83eb644e46073_big_uint381, }}, {{ - 0xfa6067c056fb379d03f389de881dc14502b372fe9693c4f03b1dfbcf33fe9c17426a2c2060be6ad3c5bb8cc1b368c93_cppui_modular381, - 0x843fcebd62ecaff9b157729414b13f87663f5ce79c9b74fca97cf5fac8b08683c04223aba8ac07b253e320275767d91_cppui_modular381, + 0xfa6067c056fb379d03f389de881dc14502b372fe9693c4f03b1dfbcf33fe9c17426a2c2060be6ad3c5bb8cc1b368c93_big_uint381, + 0x843fcebd62ecaff9b157729414b13f87663f5ce79c9b74fca97cf5fac8b08683c04223aba8ac07b253e320275767d91_big_uint381, }}); constexpr g_value_type p_add( {{ - 0x1532ee0d7b280f5a8f7acbd758d9c0ed87f4e88ad51c6365c14ba7f570f68935102025f2c211856a3b62b9118fcfe2fd_cppui_modular381, - 0xf6c5277a9ca80792503c833dea93b54da27da7973ec32e71398782ab2f6239ea1ee1d61443211002a80bb4b1223d76c_cppui_modular381, + 0x1532ee0d7b280f5a8f7acbd758d9c0ed87f4e88ad51c6365c14ba7f570f68935102025f2c211856a3b62b9118fcfe2fd_big_uint381, + 0xf6c5277a9ca80792503c833dea93b54da27da7973ec32e71398782ab2f6239ea1ee1d61443211002a80bb4b1223d76c_big_uint381, }}, {{ - 0x33782d06d4d3d0ef1a963065527a76fc9105933cc3bd393affb6f532be9fef9bc558e6dfba00d327a26ed081b016887_cppui_modular381, - 0x1086ce74c1086ce1b04ef9a556b8d00ef659b8eae55d664f9e18e877552577a8dc83f54dc28e01a30525180a8f9e775a_cppui_modular381, + 0x33782d06d4d3d0ef1a963065527a76fc9105933cc3bd393affb6f532be9fef9bc558e6dfba00d327a26ed081b016887_big_uint381, + 0x1086ce74c1086ce1b04ef9a556b8d00ef659b8eae55d664f9e18e877552577a8dc83f54dc28e01a30525180a8f9e775a_big_uint381, }}, {{ - 0x4d34706912ff38211a5600e92b5d4658a01667ba0fb1720b2a3408e4db7370d622f7c128905e7ac5c57c1494af100c6_cppui_modular381, - 0x174d075076274082e4bc19016d6ed20d6c227a638713bb0f5adcab833853aa01e5227a3f768b96e7f05e38bf094627bc_cppui_modular381, + 0x4d34706912ff38211a5600e92b5d4658a01667ba0fb1720b2a3408e4db7370d622f7c128905e7ac5c57c1494af100c6_big_uint381, + 0x174d075076274082e4bc19016d6ed20d6c227a638713bb0f5adcab833853aa01e5227a3f768b96e7f05e38bf094627bc_big_uint381, }}); constexpr g_value_type p_sub( {{ - 0xc79e43a21a88a71344251504208ddf45447bfc1010d4b3320978f47982b2d29021619f280409d202d019e470461555c_cppui_modular381, - 0x182de0d3384dac598c24d2a39159ef0e3d2b5576f52839d8d713a222cad156a12ea69e1c0b2ab919ebed0cf7f3fd2499_cppui_modular381, + 0xc79e43a21a88a71344251504208ddf45447bfc1010d4b3320978f47982b2d29021619f280409d202d019e470461555c_big_uint381, + 0x182de0d3384dac598c24d2a39159ef0e3d2b5576f52839d8d713a222cad156a12ea69e1c0b2ab919ebed0cf7f3fd2499_big_uint381, }}, {{ - 0xaf0123a190cb639abbbcc0e882e79fb1716dc84eccd53f69342b841b9ea8cdbf2381d11ff853fa7fa5643325f2a21c4_cppui_modular381, - 0xd9eb9c10f3b75bffacab71fc974cce60d4fe658dbaf0d7ce02180bc634ecbe1f7c4ba21b763b06dbcad61384742c096_cppui_modular381, + 0xaf0123a190cb639abbbcc0e882e79fb1716dc84eccd53f69342b841b9ea8cdbf2381d11ff853fa7fa5643325f2a21c4_big_uint381, + 0xd9eb9c10f3b75bffacab71fc974cce60d4fe658dbaf0d7ce02180bc634ecbe1f7c4ba21b763b06dbcad61384742c096_big_uint381, }}, {{ - 0x4d34706912ff38211a5600e92b5d4658a01667ba0fb1720b2a3408e4db7370d622f7c128905e7ac5c57c1494af100c6_cppui_modular381, - 0x174d075076274082e4bc19016d6ed20d6c227a638713bb0f5adcab833853aa01e5227a3f768b96e7f05e38bf094627bc_cppui_modular381, + 0x4d34706912ff38211a5600e92b5d4658a01667ba0fb1720b2a3408e4db7370d622f7c128905e7ac5c57c1494af100c6_big_uint381, + 0x174d075076274082e4bc19016d6ed20d6c227a638713bb0f5adcab833853aa01e5227a3f768b96e7f05e38bf094627bc_big_uint381, }}); constexpr g_value_type p_mul_C( {{ - 0x16d0bbd48a70913215c4e64eae9c1fb0ff5d52296dea38f4856ea7d516c57b4981867611b2ac8b8c8e42ee1ac6b38ee7_cppui_modular381, - 0x1184f39be53f1c7c868348c773499b23eb37fbc1a2eae5eaf995b6453d7429255dca5800802e9e73009af32442f35715_cppui_modular381, + 0x16d0bbd48a70913215c4e64eae9c1fb0ff5d52296dea38f4856ea7d516c57b4981867611b2ac8b8c8e42ee1ac6b38ee7_big_uint381, + 0x1184f39be53f1c7c868348c773499b23eb37fbc1a2eae5eaf995b6453d7429255dca5800802e9e73009af32442f35715_big_uint381, }}, {{ - 0x1677412fac92f535f4919c7602b2533df3dc3a0a9ed0499051accbe92d46b65efb17015e310e20a5b09e35d6756103c4_cppui_modular381, - 0xba41fb5dc2beb04a9a1fed616e96442b0dcbbcdee2a75a70c29d77ffa328c03a6e971fddf13d72f6168cadf66e0c8f0_cppui_modular381, + 0x1677412fac92f535f4919c7602b2533df3dc3a0a9ed0499051accbe92d46b65efb17015e310e20a5b09e35d6756103c4_big_uint381, + 0xba41fb5dc2beb04a9a1fed616e96442b0dcbbcdee2a75a70c29d77ffa328c03a6e971fddf13d72f6168cadf66e0c8f0_big_uint381, }}, {{ - 0xa7f8b42ac42d3dc8d4ca183b817de43aaea394536c137ad3cd642c3b9e941b82985b0fe5f8764240a8402ca16ecb001_cppui_modular381, - 0x146c9ff29e2173b7a25d802f2170e728d7991074b4886637ec9aa139106d99d9b9f59f2f805c9143f49fe69dd8191ca9_cppui_modular381, + 0xa7f8b42ac42d3dc8d4ca183b817de43aaea394536c137ad3cd642c3b9e941b82985b0fe5f8764240a8402ca16ecb001_big_uint381, + 0x146c9ff29e2173b7a25d802f2170e728d7991074b4886637ec9aa139106d99d9b9f59f2f805c9143f49fe69dd8191ca9_big_uint381, }}); - constexpr auto C1 = 0x3a93c528_cppui_modular381; + constexpr auto C1 = 0x3a93c528_big_uint381; constexpr g_value_type p_mul_C1_plus_p_mul_C2( {{ - 0xdd60c2c749f1aad1923f4e57dad584ffa762a558a7fed5fe032945dc7b144643ad418f89f511cd3105256e2d0a0f1e8_cppui_modular381, - 0x8c654ca6993764d8a33dfd57d52ee5039a563733f202eb0b6237a5b95edc1a5fb00ea5f26ead584fe849cfe420b7c96_cppui_modular381, + 0xdd60c2c749f1aad1923f4e57dad584ffa762a558a7fed5fe032945dc7b144643ad418f89f511cd3105256e2d0a0f1e8_big_uint381, + 0x8c654ca6993764d8a33dfd57d52ee5039a563733f202eb0b6237a5b95edc1a5fb00ea5f26ead584fe849cfe420b7c96_big_uint381, }}, {{ - 0x9464e81873a2c2c0c57bd2e526633634d23e44e4db0dc9d46bf136e644ea5d8d5f9c1f5298a03f016af7bdebefb326f_cppui_modular381, - 0x111c60de7db040df6fe9ff6383148404b017232d276ed1a964ddd4378a4a53f07288c770501c8bd258a223a120296cdc_cppui_modular381, + 0x9464e81873a2c2c0c57bd2e526633634d23e44e4db0dc9d46bf136e644ea5d8d5f9c1f5298a03f016af7bdebefb326f_big_uint381, + 0x111c60de7db040df6fe9ff6383148404b017232d276ed1a964ddd4378a4a53f07288c770501c8bd258a223a120296cdc_big_uint381, }}, {{ - 0x15e055a4d7738d9df5d0cf000b08493f47d2285ee62a87df26b2e85056592d8bc2c34ef2e9db4008fcf29c1caaafd993_cppui_modular381, - 0x156fbc5a7201accb386051cc22d9d5fe1cf32088fb4db2eb9b07f8a32060f53e7d93b8ee64aa00b18d7a178d28810531_cppui_modular381, + 0x15e055a4d7738d9df5d0cf000b08493f47d2285ee62a87df26b2e85056592d8bc2c34ef2e9db4008fcf29c1caaafd993_big_uint381, + 0x156fbc5a7201accb386051cc22d9d5fe1cf32088fb4db2eb9b07f8a32060f53e7d93b8ee64aa00b18d7a178d28810531_big_uint381, }}); - constexpr auto C2 = 0x3b74e323_cppui_modular381; + constexpr auto C2 = 0x3b74e323_big_uint381; constexpr g_value_type_affine p_to_affine( {{ - 0x916d8851e884d2c3f4e22e7fc54e09e9df98728073c9004c5a3b609a9687b0361fc2b0f5e35e55ff18c88670319398c_cppui_modular381, - 0x5f4813fb300f1c826001ef7398f9aea50c18c2780d8fae2046d8a8b40b151cfa7bf5a27f3cfbe1cfe683cd02475d4f2_cppui_modular381, + 0x916d8851e884d2c3f4e22e7fc54e09e9df98728073c9004c5a3b609a9687b0361fc2b0f5e35e55ff18c88670319398c_big_uint381, + 0x5f4813fb300f1c826001ef7398f9aea50c18c2780d8fae2046d8a8b40b151cfa7bf5a27f3cfbe1cfe683cd02475d4f2_big_uint381, }}, {{ - 0x14a402fe40ef20ae44599107bebd360a8ecabe2e080cb14eacdb31a521c70fc5d54e9215d02833bde8816c174cef5a2f_cppui_modular381, - 0xe86efa5c2fb9e319bf1fe2a2324b8d6c21c4d3233df0a4f963413ed1942108ab9b422f49f0670101ca60a088ee179b8_cppui_modular381, + 0x14a402fe40ef20ae44599107bebd360a8ecabe2e080cb14eacdb31a521c70fc5d54e9215d02833bde8816c174cef5a2f_big_uint381, + 0xe86efa5c2fb9e319bf1fe2a2324b8d6c21c4d3233df0a4f963413ed1942108ab9b422f49f0670101ca60a088ee179b8_big_uint381, }}); constexpr g_value_type_projective p_to_projective( {{ - 0x17f0b8a163b05e2419acb6e40155e79cea21b271929bb69c81f0742d621706130582b30f44970664a9d1f7755288567a_cppui_modular381, - 0x19bb8698b9f032816c6c77e8875a35fc4f4a5757e393d66a2ff1cd1bc2275cc851d96e04b60818e2e9f47a6741d62ea4_cppui_modular381, + 0x17f0b8a163b05e2419acb6e40155e79cea21b271929bb69c81f0742d621706130582b30f44970664a9d1f7755288567a_big_uint381, + 0x19bb8698b9f032816c6c77e8875a35fc4f4a5757e393d66a2ff1cd1bc2275cc851d96e04b60818e2e9f47a6741d62ea4_big_uint381, }}, {{ - 0xf690d5d0527fc74fca3531ef3277160694aa37b93e1cbc5453a87a5e35a42ebcb29c9a124c6e4a7094bee05735a3207_cppui_modular381, - 0xf3c46767aaf74e29aa885d086663893c80b96f71f9da914ac410a2e4e2d60aa9f41e736d9b04c7374dfa570f354042b_cppui_modular381, + 0xf690d5d0527fc74fca3531ef3277160694aa37b93e1cbc5453a87a5e35a42ebcb29c9a124c6e4a7094bee05735a3207_big_uint381, + 0xf3c46767aaf74e29aa885d086663893c80b96f71f9da914ac410a2e4e2d60aa9f41e736d9b04c7374dfa570f354042b_big_uint381, }}, {{ - 0x1_cppui_modular381, - 0x0_cppui_modular381, + 0x1_big_uint381, + 0x0_big_uint381, }}); static_assert(p1 + p2 == p_add, "add error"); @@ -244,40 +244,40 @@ BOOST_AUTO_TEST_CASE(curve_operation_test_mnt4_g1) { // projective coordinates are used by default constexpr g_value_type p1( - 0x172c9fb6da01e8d0f5a0ba556a5655f8c67a7d344a91e87096b75de7801ce70d5801b48d449_cppui_modular298, - 0x27762604113aaab90bf1e0c0007fd1ebae2659e13db4c00ffd068c1c1555a678eaf06e69451_cppui_modular298, - 0x6878c8d17a189b711b54eb88727c09afaa080bcb4806a18626f23645367ccaea53a867d68d_cppui_modular298); + 0x172c9fb6da01e8d0f5a0ba556a5655f8c67a7d344a91e87096b75de7801ce70d5801b48d449_big_uint298, + 0x27762604113aaab90bf1e0c0007fd1ebae2659e13db4c00ffd068c1c1555a678eaf06e69451_big_uint298, + 0x6878c8d17a189b711b54eb88727c09afaa080bcb4806a18626f23645367ccaea53a867d68d_big_uint298); constexpr g_value_type p2( - 0x29db0d99a3e0776e0fa8c71ee592a279c9c9a4f4dd33e02eeb49a827033fdd4e900c67777a1_cppui_modular298, - 0x7ab574da4fa1419ba9e3358134f19db9effd1025c4381d0e84950e48fda00cd758244f2d1a_cppui_modular298, - 0x224bec0b2109f240bea93a11752f449a1cac2683a9fbe720268ae85a5447f925f13bfa421eb_cppui_modular298); + 0x29db0d99a3e0776e0fa8c71ee592a279c9c9a4f4dd33e02eeb49a827033fdd4e900c67777a1_big_uint298, + 0x7ab574da4fa1419ba9e3358134f19db9effd1025c4381d0e84950e48fda00cd758244f2d1a_big_uint298, + 0x224bec0b2109f240bea93a11752f449a1cac2683a9fbe720268ae85a5447f925f13bfa421eb_big_uint298); constexpr g_value_type p_add( - 0x95989548c0041034a6dbfb9c9314e9ba4d144fee2841873bfdd1a4a286d9473bafa0fdb7b5_cppui_modular298, - 0x312ff49f1eafd934a7bb8544c8d7e216905d28811831ac4660927937f1c5c2a8aee2b2b16b6_cppui_modular298, - 0xd50f5b970b7bf4b04c1891b99bd6f19a8c85ddb6356b8f72a8e1b90457542d82a813560bdf_cppui_modular298); + 0x95989548c0041034a6dbfb9c9314e9ba4d144fee2841873bfdd1a4a286d9473bafa0fdb7b5_big_uint298, + 0x312ff49f1eafd934a7bb8544c8d7e216905d28811831ac4660927937f1c5c2a8aee2b2b16b6_big_uint298, + 0xd50f5b970b7bf4b04c1891b99bd6f19a8c85ddb6356b8f72a8e1b90457542d82a813560bdf_big_uint298); constexpr g_value_type p_sub( - 0x5bd843770194e9b664fedeecd096d50e0fc954e4fdb63e105c92a7b355ec131e3ebfce5864_cppui_modular298, - 0x178ce9482c2cd67c9f04357d1f53109456fc5ebf1de15fb7bc4bdbe11bf14a5de1a8cbea79f_cppui_modular298, - 0xd50f5b970b7bf4b04c1891b99bd6f19a8c85ddb6356b8f72a8e1b90457542d82a813560bdf_cppui_modular298); + 0x5bd843770194e9b664fedeecd096d50e0fc954e4fdb63e105c92a7b355ec131e3ebfce5864_big_uint298, + 0x178ce9482c2cd67c9f04357d1f53109456fc5ebf1de15fb7bc4bdbe11bf14a5de1a8cbea79f_big_uint298, + 0xd50f5b970b7bf4b04c1891b99bd6f19a8c85ddb6356b8f72a8e1b90457542d82a813560bdf_big_uint298); constexpr g_value_type p_mul_C( - 0x3d7e8f6940d2b4e0f14f67989d8d9e3b7496c6297134316edabadf69eeb2b6ca3cdda99f1_cppui_modular298, - 0x2d8c9f6174c64aa2f895ce780481fea10e9402de8129efef10634b105b3fd99dc17f090d3b9_cppui_modular298, - 0x15b67d3fc690050b6f02e41a5f368b7988ecbdaeb1bb3adf868af0592b65cb8e0fa34e0c6b5_cppui_modular298); - constexpr auto C1 = 0x1203b4c8_cppui_modular298; + 0x3d7e8f6940d2b4e0f14f67989d8d9e3b7496c6297134316edabadf69eeb2b6ca3cdda99f1_big_uint298, + 0x2d8c9f6174c64aa2f895ce780481fea10e9402de8129efef10634b105b3fd99dc17f090d3b9_big_uint298, + 0x15b67d3fc690050b6f02e41a5f368b7988ecbdaeb1bb3adf868af0592b65cb8e0fa34e0c6b5_big_uint298); + constexpr auto C1 = 0x1203b4c8_big_uint298; constexpr g_value_type p_mul_C1_plus_p_mul_C2( - 0x1be974b419f4bd1b4fc026b3bb296b9cd671cb987be4c99bdc01fa2fe5112532ca90ca2916d_cppui_modular298, - 0x2664af306794bff602f9699325fc1d57b6b00ace13f58514ca7d5f962f92561c058bb1b263d_cppui_modular298, - 0x13af3d5a92282e8469d99c2f9c57650d51de7f36af8826bf0db8c7ee58a3f26db28d8c13296_cppui_modular298); - constexpr auto C2 = 0x3151bfb5_cppui_modular298; + 0x1be974b419f4bd1b4fc026b3bb296b9cd671cb987be4c99bdc01fa2fe5112532ca90ca2916d_big_uint298, + 0x2664af306794bff602f9699325fc1d57b6b00ace13f58514ca7d5f962f92561c058bb1b263d_big_uint298, + 0x13af3d5a92282e8469d99c2f9c57650d51de7f36af8826bf0db8c7ee58a3f26db28d8c13296_big_uint298); + constexpr auto C2 = 0x3151bfb5_big_uint298; constexpr g_value_type_affine p_to_affine( - 0xbb3d23412558d18845c24476f095447170df03a009809ef6f50f72039948bf7346494e7453_cppui_modular298, - 0x1d8c86a75caf489bc5f3fa2ea263e5f2e991d22d244e732c5689b45ec5401fbdf940c589b0a_cppui_modular298); + 0xbb3d23412558d18845c24476f095447170df03a009809ef6f50f72039948bf7346494e7453_big_uint298, + 0x1d8c86a75caf489bc5f3fa2ea263e5f2e991d22d244e732c5689b45ec5401fbdf940c589b0a_big_uint298); static_assert(p1 + p2 == p_add, "add error"); static_assert(p1 - p2 == p_sub, "sub error"); @@ -294,98 +294,98 @@ BOOST_AUTO_TEST_CASE(curve_operation_test_mnt4_g2) { constexpr g_value_type p1( {{ - 0x20a6d7541c1bd7b1ada94f55476236053e042b6c72cf77264a5c40c671b62ef5a46f84e45af_cppui_modular298, - 0x2f92e835fa005f56fd629fb6eb0725e63296435dc76e3450df0c8694f3bec2ba1f0eebbc21a_cppui_modular298, + 0x20a6d7541c1bd7b1ada94f55476236053e042b6c72cf77264a5c40c671b62ef5a46f84e45af_big_uint298, + 0x2f92e835fa005f56fd629fb6eb0725e63296435dc76e3450df0c8694f3bec2ba1f0eebbc21a_big_uint298, }}, {{ - 0xee24d19afc2b9015b72cf14281476114ccd6fafa4776c2d4a9ace68d6bbbce6125adf29189_cppui_modular298, - 0xefe5105762de13caaf1b1049000b01500041b8e2023c0020522f4621fe3d9e05c0a86abdc_cppui_modular298, + 0xee24d19afc2b9015b72cf14281476114ccd6fafa4776c2d4a9ace68d6bbbce6125adf29189_big_uint298, + 0xefe5105762de13caaf1b1049000b01500041b8e2023c0020522f4621fe3d9e05c0a86abdc_big_uint298, }}, {{ - 0xca53e4b6482c1396bbc7452fb661f71c44a79faaa9b5ba9dad563e35e21c26cdbfe1c8aa98_cppui_modular298, - 0x2ce8febdb8bad8f49db73ceede9683456d3be7e29ff8e70e8edb5792e78ccb8bbe36f6819d5_cppui_modular298, + 0xca53e4b6482c1396bbc7452fb661f71c44a79faaa9b5ba9dad563e35e21c26cdbfe1c8aa98_big_uint298, + 0x2ce8febdb8bad8f49db73ceede9683456d3be7e29ff8e70e8edb5792e78ccb8bbe36f6819d5_big_uint298, }}); constexpr g_value_type p2( {{ - 0x26c0c01f9c5ac08d1f67d8f7c140388f0e72baace84f8532cb58e60bd194772ad482dc2db24_cppui_modular298, - 0x259768e62ff04c824f5e617ffcdafa0628e975627cdf260eed99fa18220db8134742cfba1ca_cppui_modular298, + 0x26c0c01f9c5ac08d1f67d8f7c140388f0e72baace84f8532cb58e60bd194772ad482dc2db24_big_uint298, + 0x259768e62ff04c824f5e617ffcdafa0628e975627cdf260eed99fa18220db8134742cfba1ca_big_uint298, }}, {{ - 0x2cf2fe38bed35a4377a5aca9c9b90f328e1d9e4a301eadc8effd0f132a38e57434947f4630b_cppui_modular298, - 0x1941e41c7b859b816fcabd405fd22922be84f518e37434df4b8244a1bf235c6d8bebdedd0fd_cppui_modular298, + 0x2cf2fe38bed35a4377a5aca9c9b90f328e1d9e4a301eadc8effd0f132a38e57434947f4630b_big_uint298, + 0x1941e41c7b859b816fcabd405fd22922be84f518e37434df4b8244a1bf235c6d8bebdedd0fd_big_uint298, }}, {{ - 0x361a51963df89d966446b818735b9b50ad2b3c5641bfab0da37ef895f2a3504e584926cc721_cppui_modular298, - 0x2245c06b5b8e29b0e0ce6c57dc1a79210e135e438ed8da978572589fb8795809c2d38ef0dc0_cppui_modular298, + 0x361a51963df89d966446b818735b9b50ad2b3c5641bfab0da37ef895f2a3504e584926cc721_big_uint298, + 0x2245c06b5b8e29b0e0ce6c57dc1a79210e135e438ed8da978572589fb8795809c2d38ef0dc0_big_uint298, }}); constexpr g_value_type p_add( {{ - 0x12d011f779525b7b5d5f5f8a2dae1043fa2e5da9f1775a76dd36033011b6ad50e9de7d77f5c_cppui_modular298, - 0x47fe4ec44216e7c32408440a632a196965a24f8e035cc0151ec66e327505cfbb573bbfa5a8_cppui_modular298, + 0x12d011f779525b7b5d5f5f8a2dae1043fa2e5da9f1775a76dd36033011b6ad50e9de7d77f5c_big_uint298, + 0x47fe4ec44216e7c32408440a632a196965a24f8e035cc0151ec66e327505cfbb573bbfa5a8_big_uint298, }}, {{ - 0x3172399c37418fe2807f4169448475411f3f5c7ed5946715d379504f13a7bd27d7c0e70b337_cppui_modular298, - 0xf7453acf9dfbf0da70375e100205aa6e5a0a985636e78a517892ed7fe166dca29fd90a1e55_cppui_modular298, + 0x3172399c37418fe2807f4169448475411f3f5c7ed5946715d379504f13a7bd27d7c0e70b337_big_uint298, + 0xf7453acf9dfbf0da70375e100205aa6e5a0a985636e78a517892ed7fe166dca29fd90a1e55_big_uint298, }}, {{ - 0x2a09837cdd8680efe77f5347ac0da50257e678f38f76bcbaa1c8446248dc1b716279442f10f_cppui_modular298, - 0x18929e9d8a6da77075e75a3beaa2d385cab7791a6cb344d07b6763dfaba5364864940ed0cae_cppui_modular298, + 0x2a09837cdd8680efe77f5347ac0da50257e678f38f76bcbaa1c8446248dc1b716279442f10f_big_uint298, + 0x18929e9d8a6da77075e75a3beaa2d385cab7791a6cb344d07b6763dfaba5364864940ed0cae_big_uint298, }}); constexpr g_value_type p_sub( {{ - 0x27e2ec5fe6c03c75a49ece61e8d479b83ba7f5c194d1494ce4205b6f910d459c8ab602256ca_cppui_modular298, - 0x38c606b68b431dc9a0ca8e54e0d7cb40ca7ed388949cc571d9284747a80229d3d05dbd7f734_cppui_modular298, + 0x27e2ec5fe6c03c75a49ece61e8d479b83ba7f5c194d1494ce4205b6f910d459c8ab602256ca_big_uint298, + 0x38c606b68b431dc9a0ca8e54e0d7cb40ca7ed388949cc571d9284747a80229d3d05dbd7f734_big_uint298, }}, {{ - 0x2f0c28a9a31ca73a13ad70a808ae191ad926bf4259270874abb66fc34017708ea697fd5e893_cppui_modular298, - 0x31b8bdeac49e4cef23bcd02d23194a49a06d403d4bbd68dd8b5120b90da84ff71f5203d58f6_cppui_modular298, + 0x2f0c28a9a31ca73a13ad70a808ae191ad926bf4259270874abb66fc34017708ea697fd5e893_big_uint298, + 0x31b8bdeac49e4cef23bcd02d23194a49a06d403d4bbd68dd8b5120b90da84ff71f5203d58f6_big_uint298, }}, {{ - 0x2a09837cdd8680efe77f5347ac0da50257e678f38f76bcbaa1c8446248dc1b716279442f10f_cppui_modular298, - 0x18929e9d8a6da77075e75a3beaa2d385cab7791a6cb344d07b6763dfaba5364864940ed0cae_cppui_modular298, + 0x2a09837cdd8680efe77f5347ac0da50257e678f38f76bcbaa1c8446248dc1b716279442f10f_big_uint298, + 0x18929e9d8a6da77075e75a3beaa2d385cab7791a6cb344d07b6763dfaba5364864940ed0cae_big_uint298, }}); constexpr g_value_type p_mul_C( {{ - 0x231f54b94ab9818a9589dcbf3a9244ed341cfab7d684e77b1c2c13574fdc70964fbfea9bb03_cppui_modular298, - 0x2fb15e5d3c407d989b4d69106c06d8b27e605c34f12a8b9008e64565e87486e504882e0866f_cppui_modular298, + 0x231f54b94ab9818a9589dcbf3a9244ed341cfab7d684e77b1c2c13574fdc70964fbfea9bb03_big_uint298, + 0x2fb15e5d3c407d989b4d69106c06d8b27e605c34f12a8b9008e64565e87486e504882e0866f_big_uint298, }}, {{ - 0x39f2bc82039293559d08d75dc0e7ff024f6778bd1ca4a7e11bb7ac3e918a5732ee7627522fa_cppui_modular298, - 0x1557a37274e7367336455516935eaa561d36f2ec8894f5dda1868fe8d9cda169c8767d0055_cppui_modular298, + 0x39f2bc82039293559d08d75dc0e7ff024f6778bd1ca4a7e11bb7ac3e918a5732ee7627522fa_big_uint298, + 0x1557a37274e7367336455516935eaa561d36f2ec8894f5dda1868fe8d9cda169c8767d0055_big_uint298, }}, {{ - 0x26e5bd64e7b7495084ef219f02bb56996d06256b106a0bd493c0188c86047df5711eb57606e_cppui_modular298, - 0x368b1962424eb1f14bca10eed68b136effae88450d9e8b55d4d788eb0ace1355b3d55e9e55b_cppui_modular298, + 0x26e5bd64e7b7495084ef219f02bb56996d06256b106a0bd493c0188c86047df5711eb57606e_big_uint298, + 0x368b1962424eb1f14bca10eed68b136effae88450d9e8b55d4d788eb0ace1355b3d55e9e55b_big_uint298, }}); - constexpr auto C1 = 0x2bb7bc77_cppui_modular298; + constexpr auto C1 = 0x2bb7bc77_big_uint298; constexpr g_value_type p_mul_C1_plus_p_mul_C2( {{ - 0x26726650ed2b9bc0568fabbe68508cf634d5b6332b563757c301fea0c8677c74a301ed6d304_cppui_modular298, - 0x202a62fa559200cf31ff20c996046affee5985d0f38d49b655416866bcc8de540c7a05a4cee_cppui_modular298, + 0x26726650ed2b9bc0568fabbe68508cf634d5b6332b563757c301fea0c8677c74a301ed6d304_big_uint298, + 0x202a62fa559200cf31ff20c996046affee5985d0f38d49b655416866bcc8de540c7a05a4cee_big_uint298, }}, {{ - 0x307dfe6cc9e141f53ce57001ce51f492196f8f04104a2a99ee28eca549f79b1e603d388d05a_cppui_modular298, - 0x5ac431716e91aceff94567d15c3f7ae25c20bb401721cf654092805289c1fb709c7674f969_cppui_modular298, + 0x307dfe6cc9e141f53ce57001ce51f492196f8f04104a2a99ee28eca549f79b1e603d388d05a_big_uint298, + 0x5ac431716e91aceff94567d15c3f7ae25c20bb401721cf654092805289c1fb709c7674f969_big_uint298, }}, {{ - 0x365802a6f8000d9cecf2c026bdb8636a053ab3398b091e043ca7aacc4e3cff014ac7671784a_cppui_modular298, - 0x35c57d344509428b944c4517a26b2e71de6af80ffe81c2e582a3ef33adf4f89a830b409a30b_cppui_modular298, + 0x365802a6f8000d9cecf2c026bdb8636a053ab3398b091e043ca7aacc4e3cff014ac7671784a_big_uint298, + 0x35c57d344509428b944c4517a26b2e71de6af80ffe81c2e582a3ef33adf4f89a830b409a30b_big_uint298, }}); - constexpr auto C2 = 0x2bb63f0d_cppui_modular298; + constexpr auto C2 = 0x2bb63f0d_big_uint298; constexpr g_value_type_affine p_to_affine( {{ - 0xe4a4a941c54a49e9864402e2802dd02995ae0ccb2dec69d313fbef300c8e12e3079230df5b_cppui_modular298, - 0x1d2264d6890ae100d330a744cfce4d652638d306d84f33e501157b715882ed6ea59a9e4179e_cppui_modular298, + 0xe4a4a941c54a49e9864402e2802dd02995ae0ccb2dec69d313fbef300c8e12e3079230df5b_big_uint298, + 0x1d2264d6890ae100d330a744cfce4d652638d306d84f33e501157b715882ed6ea59a9e4179e_big_uint298, }}, {{ - 0xaf6ca9a009902c1c61f6234578a3ac5443c4c3fc8284d3837d73d778e0b354fd0bc95d46d6_cppui_modular298, - 0x31a130fa72f42e8f7bdedaa05a9d69f08a9e5db44fbc0a4de8a5d50f9e9e48a880dca313091_cppui_modular298, + 0xaf6ca9a009902c1c61f6234578a3ac5443c4c3fc8284d3837d73d778e0b354fd0bc95d46d6_big_uint298, + 0x31a130fa72f42e8f7bdedaa05a9d69f08a9e5db44fbc0a4de8a5d50f9e9e48a880dca313091_big_uint298, }}); static_assert(p1 + p2 == p_add, "add error"); @@ -402,40 +402,40 @@ BOOST_AUTO_TEST_CASE(curve_operation_test_mnt6_g1) { using g_value_type_projective = typename curve_type::g1_type::value_type; constexpr g_value_type p1( - 0x1ddb2c8af8fe69693b8f13167e2a777fe09eb91d463353c0d2206985fb5cc9a3f298b755383_cppui_modular298, - 0xf9e00ccd15c34450589956a9ec92119be2357872a78eeab24b05b9c6049bf686722dfbc2da_cppui_modular298, - 0x34f61578569ea7545e32977222b0ad4fd111ffb00e48bfea530f9b28148d6c66ecc25638715_cppui_modular298); + 0x1ddb2c8af8fe69693b8f13167e2a777fe09eb91d463353c0d2206985fb5cc9a3f298b755383_big_uint298, + 0xf9e00ccd15c34450589956a9ec92119be2357872a78eeab24b05b9c6049bf686722dfbc2da_big_uint298, + 0x34f61578569ea7545e32977222b0ad4fd111ffb00e48bfea530f9b28148d6c66ecc25638715_big_uint298); constexpr g_value_type p2( - 0x335b9af13de99ba9967d434405334d3ca682f227bdcb5cafcff26ee59d9549206db3224aba8_cppui_modular298, - 0x19df8867acc42990e842c680183e56f537fe67ed1b3a0b3b4e6a9a9d2f6b9c00728580f66bb_cppui_modular298, - 0xc312d28a4b8dd159a148ec47a53c6f428075ee610049bf97e041058ae289176a347eeaa449_cppui_modular298); + 0x335b9af13de99ba9967d434405334d3ca682f227bdcb5cafcff26ee59d9549206db3224aba8_big_uint298, + 0x19df8867acc42990e842c680183e56f537fe67ed1b3a0b3b4e6a9a9d2f6b9c00728580f66bb_big_uint298, + 0xc312d28a4b8dd159a148ec47a53c6f428075ee610049bf97e041058ae289176a347eeaa449_big_uint298); constexpr g_value_type p_add( - 0x3ba7cdb059289e6c2c79ac99f3c0a171e8a74d0802ae7c1dd20fe153e8b38da5e0223f741a5_cppui_modular298, - 0x3aa9e50daf831fe1f92d2bec1d045b52201b72023b2846dd6c3013fe1f9649228dde3c437b9_cppui_modular298, - 0x1df9d34f97b980f385c6d0affcd37062d10e5ca55cc2521188c0cbd1e7a51e66b6f4a5ea223_cppui_modular298); + 0x3ba7cdb059289e6c2c79ac99f3c0a171e8a74d0802ae7c1dd20fe153e8b38da5e0223f741a5_big_uint298, + 0x3aa9e50daf831fe1f92d2bec1d045b52201b72023b2846dd6c3013fe1f9649228dde3c437b9_big_uint298, + 0x1df9d34f97b980f385c6d0affcd37062d10e5ca55cc2521188c0cbd1e7a51e66b6f4a5ea223_big_uint298); constexpr g_value_type p_sub( - 0x1ad61843a56ef2f3bfcf5447640bd8d441d84ab68a9ca37c818c5c5aa49776d3b9c1bb34f23_cppui_modular298, - 0x354fc0efb6552ecb641058c423f42fff14d1655607159b5e4e4ad5f1500173bf6380b1a5449_cppui_modular298, - 0x1df9d34f97b980f385c6d0affcd37062d10e5ca55cc2521188c0cbd1e7a51e66b6f4a5ea223_cppui_modular298); + 0x1ad61843a56ef2f3bfcf5447640bd8d441d84ab68a9ca37c818c5c5aa49776d3b9c1bb34f23_big_uint298, + 0x354fc0efb6552ecb641058c423f42fff14d1655607159b5e4e4ad5f1500173bf6380b1a5449_big_uint298, + 0x1df9d34f97b980f385c6d0affcd37062d10e5ca55cc2521188c0cbd1e7a51e66b6f4a5ea223_big_uint298); constexpr g_value_type p_mul_C( - 0xdc2e25c576e7198843f161324c3d4fc163ee93f0b42122993fa41737e16618f312651de2d4_cppui_modular298, - 0x32d35b5dd7359a5a6aa4aa7707366bd37ada05a185e416af60a9ded488ed08036d0e300cced_cppui_modular298, - 0x2c885e23b668ab74c3cf0362b10ed725d22e474e754d90cb05aee3ba174b3c6770d860dbc6d_cppui_modular298); - constexpr auto C1 = 0x182949bc_cppui_modular298; + 0xdc2e25c576e7198843f161324c3d4fc163ee93f0b42122993fa41737e16618f312651de2d4_big_uint298, + 0x32d35b5dd7359a5a6aa4aa7707366bd37ada05a185e416af60a9ded488ed08036d0e300cced_big_uint298, + 0x2c885e23b668ab74c3cf0362b10ed725d22e474e754d90cb05aee3ba174b3c6770d860dbc6d_big_uint298); + constexpr auto C1 = 0x182949bc_big_uint298; constexpr g_value_type p_mul_C1_plus_p_mul_C2( - 0x27afd87c01419311766686d035c6ebc281c18f5401ad75eb54126c79d20fd1e1e01bcba427b_cppui_modular298, - 0x2c28ead8c2fa233ae647c9819df14cd657d4bc4e9d028bd9c22982601f0d91bfb23a56c1780_cppui_modular298, - 0x222429673e7acd3578db38480bc1c2720cbf6a96477c13a04354f47bda90893087d7c9c3371_cppui_modular298); - constexpr auto C2 = 0x3ea7e208_cppui_modular298; + 0x27afd87c01419311766686d035c6ebc281c18f5401ad75eb54126c79d20fd1e1e01bcba427b_big_uint298, + 0x2c28ead8c2fa233ae647c9819df14cd657d4bc4e9d028bd9c22982601f0d91bfb23a56c1780_big_uint298, + 0x222429673e7acd3578db38480bc1c2720cbf6a96477c13a04354f47bda90893087d7c9c3371_big_uint298); + constexpr auto C2 = 0x3ea7e208_big_uint298; constexpr g_value_type_affine p_to_affine( - 0x99180b367e81aac8adcd54fd1ebd085d434d43e57304127deb54287885c301fb6a907a970f_cppui_modular298, - 0x1358a1a7c7c7db2f60e48b38ee4845caa21958caa41743406eb5d689e666a369f82320f7aba_cppui_modular298); + 0x99180b367e81aac8adcd54fd1ebd085d434d43e57304127deb54287885c301fb6a907a970f_big_uint298, + 0x1358a1a7c7c7db2f60e48b38ee4845caa21958caa41743406eb5d689e666a369f82320f7aba_big_uint298); static_assert(p1 + p2 == p_add, "add error"); static_assert(p1 - p2 == p_sub, "sub error"); @@ -452,118 +452,118 @@ BOOST_AUTO_TEST_CASE(curve_operation_test_mnt6_g2) { constexpr g_value_type p1( {{ - 0x15da78bbd604999fc1125b0c59287a0d3510803774c39e0392604cfc128a6a3d93197271647_cppui_modular298, - 0x2f96c32ac6feb0c131182cb3f166f79d1d27da0acedef4886a0b1d5e23c54296b8ee7160139_cppui_modular298, - 0x1bd181a3093c60e4508e02b99a3dfb219b2a63994c0270f15e762598441352b7a8f66289ef2_cppui_modular298, + 0x15da78bbd604999fc1125b0c59287a0d3510803774c39e0392604cfc128a6a3d93197271647_big_uint298, + 0x2f96c32ac6feb0c131182cb3f166f79d1d27da0acedef4886a0b1d5e23c54296b8ee7160139_big_uint298, + 0x1bd181a3093c60e4508e02b99a3dfb219b2a63994c0270f15e762598441352b7a8f66289ef2_big_uint298, }}, {{ - 0x501d8d37d0eb035530f4086aab196119e1c9f9e9d742f534c5463f3d80f51ead20a19aac11_cppui_modular298, - 0x8c6ae7d27359469281039a4ebf3d1e75427a019fb5b95c10f6e31ef3b7e638ad75129b9238_cppui_modular298, - 0x3a8eb00bd449fb1a82609ba3c9b580ab0e97903383a3be6e4cc61d019d6fbde331ffe6b926a_cppui_modular298, + 0x501d8d37d0eb035530f4086aab196119e1c9f9e9d742f534c5463f3d80f51ead20a19aac11_big_uint298, + 0x8c6ae7d27359469281039a4ebf3d1e75427a019fb5b95c10f6e31ef3b7e638ad75129b9238_big_uint298, + 0x3a8eb00bd449fb1a82609ba3c9b580ab0e97903383a3be6e4cc61d019d6fbde331ffe6b926a_big_uint298, }}, {{ - 0x10529eb0e3ad62508adf0a72458c7094145ffb867707b40534b93dd23c515570bb19b827b3a_cppui_modular298, - 0xd52131aa267f5d09e19e1642771399602c1480f5d55390390ce7336be616d479f386c5ed3f_cppui_modular298, - 0x31e30206c05edc932b953d0729a2795d5194766d9fda3e0a9530b6ff5140cf267f1bc315460_cppui_modular298, + 0x10529eb0e3ad62508adf0a72458c7094145ffb867707b40534b93dd23c515570bb19b827b3a_big_uint298, + 0xd52131aa267f5d09e19e1642771399602c1480f5d55390390ce7336be616d479f386c5ed3f_big_uint298, + 0x31e30206c05edc932b953d0729a2795d5194766d9fda3e0a9530b6ff5140cf267f1bc315460_big_uint298, }}); constexpr g_value_type p2( {{ - 0x1966aea3f8eac82f244bb7b74afef1933b24369aee766ffffa940312f0c7d3cbc1f7b842c1d_cppui_modular298, - 0x1ebcfc8c1f711c487edc9433a21369dd117f652107ad29761d69eb5e5ac7d3976089fc0d02d_cppui_modular298, - 0xb6254c4b28bd678a46d94fbf17ddd107997d39da61bffcb4d31de9832dbfcd456a9a635f62_cppui_modular298, + 0x1966aea3f8eac82f244bb7b74afef1933b24369aee766ffffa940312f0c7d3cbc1f7b842c1d_big_uint298, + 0x1ebcfc8c1f711c487edc9433a21369dd117f652107ad29761d69eb5e5ac7d3976089fc0d02d_big_uint298, + 0xb6254c4b28bd678a46d94fbf17ddd107997d39da61bffcb4d31de9832dbfcd456a9a635f62_big_uint298, }}, {{ - 0x1740a4e6686c5c21cfc4531a11b058a876e1eb78c54ab9b713fb7424fabdbe3915db906ce64_cppui_modular298, - 0x35519cd02031c4f5f8169f77b77b01c338fd2c0dde7c1958fc6d646c15f7eb34a317283bf59_cppui_modular298, - 0x361d88a99c1a956a86ddbfb2ce582c0005d494e6e70a63d961483d926b29a3ab8f0018bbea5_cppui_modular298, + 0x1740a4e6686c5c21cfc4531a11b058a876e1eb78c54ab9b713fb7424fabdbe3915db906ce64_big_uint298, + 0x35519cd02031c4f5f8169f77b77b01c338fd2c0dde7c1958fc6d646c15f7eb34a317283bf59_big_uint298, + 0x361d88a99c1a956a86ddbfb2ce582c0005d494e6e70a63d961483d926b29a3ab8f0018bbea5_big_uint298, }}, {{ - 0x1178a07e802d91293cc5d121a37da8740a44c2820fae8876b4dde89e69c3f605ec632d1a22a_cppui_modular298, - 0x13a043a487fd3c41f7f8719b7ec4d886a3a3a1a39e2e05fd88c41da757669d3f4305578023f_cppui_modular298, - 0x281a2130ee2326a191099e093bf8f731e43f0481e9a308e1630284ba284711a2b4f5833ebd9_cppui_modular298, + 0x1178a07e802d91293cc5d121a37da8740a44c2820fae8876b4dde89e69c3f605ec632d1a22a_big_uint298, + 0x13a043a487fd3c41f7f8719b7ec4d886a3a3a1a39e2e05fd88c41da757669d3f4305578023f_big_uint298, + 0x281a2130ee2326a191099e093bf8f731e43f0481e9a308e1630284ba284711a2b4f5833ebd9_big_uint298, }}); constexpr g_value_type p_add( {{ - 0x286ea7e4330a358a8cefd0523a6faffd55edd2fc8a886ebac349189697d792ff68a83c06e5d_cppui_modular298, - 0x1591ca6dce1f85ca16fd330b9fc7c2238c905bdcf437248ace8e677f79393f4e4c9f2689e08_cppui_modular298, - 0x2d19aa4b6c3e770674d594f9f60a1df1ccb6a1efc523b1b223f5b360613c4900ee1fee068f0_cppui_modular298, + 0x286ea7e4330a358a8cefd0523a6faffd55edd2fc8a886ebac349189697d792ff68a83c06e5d_big_uint298, + 0x1591ca6dce1f85ca16fd330b9fc7c2238c905bdcf437248ace8e677f79393f4e4c9f2689e08_big_uint298, + 0x2d19aa4b6c3e770674d594f9f60a1df1ccb6a1efc523b1b223f5b360613c4900ee1fee068f0_big_uint298, }}, {{ - 0xb5a0b62486b8397124c5d8f4b4badd19e6fa0242c8058a056082cd9f18425996c6f74b5f49_cppui_modular298, - 0x2aa0e105745810e02d21e15fd5c067b1f8ace341932b5dc665557aa297a4dbb898a6fd675e2_cppui_modular298, - 0x21c4869ad25d55e5ac63fe01832445f57f7db6f69d210280232da4a115be4bdb43737558c8c_cppui_modular298, + 0xb5a0b62486b8397124c5d8f4b4badd19e6fa0242c8058a056082cd9f18425996c6f74b5f49_big_uint298, + 0x2aa0e105745810e02d21e15fd5c067b1f8ace341932b5dc665557aa297a4dbb898a6fd675e2_big_uint298, + 0x21c4869ad25d55e5ac63fe01832445f57f7db6f69d210280232da4a115be4bdb43737558c8c_big_uint298, }}, {{ - 0xce450fcbf00c7a0071855273cd44eb809866c38a062efc57417520a00e700d6e8f464ca52f_cppui_modular298, - 0x3784776dcdafb623bb37158d94cfea9fe8d2f868e01bb527960c75da8f210469afb2f55c842_cppui_modular298, - 0xe705feaf05146e5e93f1286af29e8303160d3f47bbf19d992ad01ae1e42c675eb153ddfce7_cppui_modular298, + 0xce450fcbf00c7a0071855273cd44eb809866c38a062efc57417520a00e700d6e8f464ca52f_big_uint298, + 0x3784776dcdafb623bb37158d94cfea9fe8d2f868e01bb527960c75da8f210469afb2f55c842_big_uint298, + 0xe705feaf05146e5e93f1286af29e8303160d3f47bbf19d992ad01ae1e42c675eb153ddfce7_big_uint298, }}); constexpr g_value_type p_sub( {{ - 0x38b477f6d57a1749428955eb86c10a5013fd573e61492113420dce42e7c461fcece378e2721_cppui_modular298, - 0x2f0450a3baab9a36987082505ee28553c02745a6993d5fb46e83e4e5e2bcce3149cae39be6e_cppui_modular298, - 0x12828908e5f99ffcd5299790c297fe6acc039e0acc4b7caecb39f8afbc87e489f7a6dfe73ba_cppui_modular298, + 0x38b477f6d57a1749428955eb86c10a5013fd573e61492113420dce42e7c461fcece378e2721_big_uint298, + 0x2f0450a3baab9a36987082505ee28553c02745a6993d5fb46e83e4e5e2bcce3149cae39be6e_big_uint298, + 0x12828908e5f99ffcd5299790c297fe6acc039e0acc4b7caecb39f8afbc87e489f7a6dfe73ba_big_uint298, }}, {{ - 0x1d2d1879f1e03503da2d50c5d6db772c7cf2562aafbf2f99b551c2e4a666a8885161baf0aa7_cppui_modular298, - 0x1ff619aa1c2d5e08872e53baccc57960d91845560646471e0ef1f68fd69f94c09fd0a0d7e0e_cppui_modular298, - 0xfa8387d06db82c0d7ad20295e59bec7e51bafeeabbf805489b7bcee2f43f8a9ccb7ee38018_cppui_modular298, + 0x1d2d1879f1e03503da2d50c5d6db772c7cf2562aafbf2f99b551c2e4a666a8885161baf0aa7_big_uint298, + 0x1ff619aa1c2d5e08872e53baccc57960d91845560646471e0ef1f68fd69f94c09fd0a0d7e0e_big_uint298, + 0xfa8387d06db82c0d7ad20295e59bec7e51bafeeabbf805489b7bcee2f43f8a9ccb7ee38018_big_uint298, }}, {{ - 0xce450fcbf00c7a0071855273cd44eb809866c38a062efc57417520a00e700d6e8f464ca52f_cppui_modular298, - 0x3784776dcdafb623bb37158d94cfea9fe8d2f868e01bb527960c75da8f210469afb2f55c842_cppui_modular298, - 0xe705feaf05146e5e93f1286af29e8303160d3f47bbf19d992ad01ae1e42c675eb153ddfce7_cppui_modular298, + 0xce450fcbf00c7a0071855273cd44eb809866c38a062efc57417520a00e700d6e8f464ca52f_big_uint298, + 0x3784776dcdafb623bb37158d94cfea9fe8d2f868e01bb527960c75da8f210469afb2f55c842_big_uint298, + 0xe705feaf05146e5e93f1286af29e8303160d3f47bbf19d992ad01ae1e42c675eb153ddfce7_big_uint298, }}); constexpr g_value_type p_mul_C( {{ - 0xf358e2e4f0a735ee8416253408fcb668c287608391763eea99567f2f28731e7627ea469ba7_cppui_modular298, - 0x257a8a922bd63ed32ecb88ad4880fd586d45ca1df7e10285da4f0a9dc4d1ff835659905c004_cppui_modular298, - 0x29c78c46f4fbaff26996deddbcf312bf8ce50adf52c32f425474afeb41760e323af03220437_cppui_modular298, + 0xf358e2e4f0a735ee8416253408fcb668c287608391763eea99567f2f28731e7627ea469ba7_big_uint298, + 0x257a8a922bd63ed32ecb88ad4880fd586d45ca1df7e10285da4f0a9dc4d1ff835659905c004_big_uint298, + 0x29c78c46f4fbaff26996deddbcf312bf8ce50adf52c32f425474afeb41760e323af03220437_big_uint298, }}, {{ - 0xa95b7aaff44dc8ccbbf44e8aa76e6fdc3d7a7466ac8d0e0289cb3f883b98701f5566045f28_cppui_modular298, - 0x1cdf0db54b00251d016854892591e1036ca536da3654369fc62c4133f2f3276b2eb6f490c4f_cppui_modular298, - 0x33ac203454dd8b15577c697c2e19c1956c3f98c7543faf18b169775f0547a5011d319cc3292_cppui_modular298, + 0xa95b7aaff44dc8ccbbf44e8aa76e6fdc3d7a7466ac8d0e0289cb3f883b98701f5566045f28_big_uint298, + 0x1cdf0db54b00251d016854892591e1036ca536da3654369fc62c4133f2f3276b2eb6f490c4f_big_uint298, + 0x33ac203454dd8b15577c697c2e19c1956c3f98c7543faf18b169775f0547a5011d319cc3292_big_uint298, }}, {{ - 0x373f09a0e36bd458c32091f03411ceeae30beef128d0a7fd15986701b5b4488dd04a0c38094_cppui_modular298, - 0x24cd0a32c86fe5fe77085773d22a622d804c3829ea08141597e97eb00d7c665237d81ebc10d_cppui_modular298, - 0x38d7bdb40b6cb4cd1ae9c939658fbb62618dd1346e643dca4513ad8ff2514284f1292596ed2_cppui_modular298, + 0x373f09a0e36bd458c32091f03411ceeae30beef128d0a7fd15986701b5b4488dd04a0c38094_big_uint298, + 0x24cd0a32c86fe5fe77085773d22a622d804c3829ea08141597e97eb00d7c665237d81ebc10d_big_uint298, + 0x38d7bdb40b6cb4cd1ae9c939658fbb62618dd1346e643dca4513ad8ff2514284f1292596ed2_big_uint298, }}); - constexpr auto C1 = 0x3da94465_cppui_modular298; + constexpr auto C1 = 0x3da94465_big_uint298; constexpr g_value_type p_mul_C1_plus_p_mul_C2( {{ - 0x26524ae056ee5ae0dd807f0e575d1383aef2d271c5aa47516a1bcdd7314933fa0b45cbaa8e9_cppui_modular298, - 0x34a13d100b8a245841d4b7f093fae3c2b1bb339bf4774d234456492b6a54668a62d19e74c9_cppui_modular298, - 0x228ef624a105d545e386a4033134790ca1658f228d4adf2891c7e6703dc517abbb2790892e1_cppui_modular298, + 0x26524ae056ee5ae0dd807f0e575d1383aef2d271c5aa47516a1bcdd7314933fa0b45cbaa8e9_big_uint298, + 0x34a13d100b8a245841d4b7f093fae3c2b1bb339bf4774d234456492b6a54668a62d19e74c9_big_uint298, + 0x228ef624a105d545e386a4033134790ca1658f228d4adf2891c7e6703dc517abbb2790892e1_big_uint298, }}, {{ - 0xd7744722859fefca11bcb06c615d1ae83883bb14556ec92d67bc1a83ff53caaf469d33b395_cppui_modular298, - 0x27df7ef0c9216ab59e9e576cd3ed2610f2fa2f739953f8fb77bd7e5e437919a29d558dad720_cppui_modular298, - 0x194c561af60a2b6b81ac48048f7aef84c1a98c731cd95365cf61d949945600af9b6e57f94af_cppui_modular298, + 0xd7744722859fefca11bcb06c615d1ae83883bb14556ec92d67bc1a83ff53caaf469d33b395_big_uint298, + 0x27df7ef0c9216ab59e9e576cd3ed2610f2fa2f739953f8fb77bd7e5e437919a29d558dad720_big_uint298, + 0x194c561af60a2b6b81ac48048f7aef84c1a98c731cd95365cf61d949945600af9b6e57f94af_big_uint298, }}, {{ - 0x241ab5965aa82b4f7ddcfbdf46406629a191cd1bd3b7e4de5d995649c137016db8201d68753_cppui_modular298, - 0x2f72bc5310bd70c64445a639196240948d9bbfecd474608f68882d57e5f8e1b0bf92d684463_cppui_modular298, - 0x3395ab796861b1a13545042bdc6e55f59a10e56cc88b1cb529eafdbf018ea0caf4533dae5d_cppui_modular298, + 0x241ab5965aa82b4f7ddcfbdf46406629a191cd1bd3b7e4de5d995649c137016db8201d68753_big_uint298, + 0x2f72bc5310bd70c64445a639196240948d9bbfecd474608f68882d57e5f8e1b0bf92d684463_big_uint298, + 0x3395ab796861b1a13545042bdc6e55f59a10e56cc88b1cb529eafdbf018ea0caf4533dae5d_big_uint298, }}); - constexpr auto C2 = 0x33c96283_cppui_modular298; + constexpr auto C2 = 0x33c96283_big_uint298; constexpr g_value_type_affine p_to_affine( {{ - 0x362c5501b25d0063dfa31dcf27b9862b51a8b89782424bfbfe688b2d042141e204e916aced4_cppui_modular298, - 0x2b8f4aa9f2d7bf206f240bc12dfa029fd5c6474c7965ab5e9a764baf122ca38f10b8ed2e9aa_cppui_modular298, - 0x39649249c1fbbf2fdf4479318167d1f7884fbc94f2644c18b40d8ca1c636d5b1afaac2808cd_cppui_modular298, + 0x362c5501b25d0063dfa31dcf27b9862b51a8b89782424bfbfe688b2d042141e204e916aced4_big_uint298, + 0x2b8f4aa9f2d7bf206f240bc12dfa029fd5c6474c7965ab5e9a764baf122ca38f10b8ed2e9aa_big_uint298, + 0x39649249c1fbbf2fdf4479318167d1f7884fbc94f2644c18b40d8ca1c636d5b1afaac2808cd_big_uint298, }}, {{ - 0x46538ec45b82981bdf3aa73189f15304f421bb90d6762a956238a18bfe6baee0dd4d475463_cppui_modular298, - 0x15ea8ac9b9323ebf7869211d0781fa8d04ee39f936ef38910528dab82c1b9dfa99b6d558f10_cppui_modular298, - 0x5f297a07039e20469dd49c2b13ea266e419f1b189b7eda9d9a44787765894b9392500c9d98_cppui_modular298, + 0x46538ec45b82981bdf3aa73189f15304f421bb90d6762a956238a18bfe6baee0dd4d475463_big_uint298, + 0x15ea8ac9b9323ebf7869211d0781fa8d04ee39f936ef38910528dab82c1b9dfa99b6d558f10_big_uint298, + 0x5f297a07039e20469dd49c2b13ea266e419f1b189b7eda9d9a44787765894b9392500c9d98_big_uint298, }}); static_assert(p1 + p2 == p_add, "add error"); diff --git a/crypto3/libs/algebra/test/fields_static.cpp b/crypto3/libs/algebra/test/fields_static.cpp index 4eb30c17d1..84b89cca36 100644 --- a/crypto3/libs/algebra/test/fields_static.cpp +++ b/crypto3/libs/algebra/test/fields_static.cpp @@ -129,17 +129,17 @@ BOOST_AUTO_TEST_CASE(field_operation_test_bls12_381_fr) { // This is correct, bls12_fr<381> has 255-bit elements. static constexpr test_set_t elements1 = { - 0x209a9bf596288853d71eb5a070164b2d81fe36e956f8f70376712767fabb15d9_cppui_modular255, - 0x661ad4fb4d130b7afaea293348f2107d9f4a62308af88282297733628cfc5ae7_cppui_modular255, - 0x12c7c99db99e16869ecf06cbaf6683a5cd8af516e1f31d869fe85acb87b770bf_cppui_modular255, - 0x2e6d6e4d72b2fa210f6e647530c612b5367178bbcbfed0804cf9f4046dbebaf3_cppui_modular255, - 0x65915fd6511eb3afcf0648a4b4b1c3f298433ecaee3cdd97254aa3ce8a67303d_cppui_modular255, - 0x413537eb2c5110a7ae3d6b40e02c965b03fc6dd2adf1ee06ece24ecff5762bb2_cppui_modular255, - 0x01c40f7a911c57190db5382d3fc2d96473780452b78e60474add8fb7f1eddda6_cppui_modular255, - 0x49757b377fe2a1de10c484db929a74ae02fdfae3aaab6098ea2ab8accfe613f0_cppui_modular255, - 0x363f979f222c9970dc4291b62bc3e8d77c31c1b2caa88afeb414f3584b952000_cppui_modular255, - 0x661ad4fb4d130b7afaea293348f2107d9f4a62308af88282297733628cfc5ae8_cppui_modular255, - 0x53530b5d9374f4f45c1b2267998b8cd7d1bf6d19a90564fb898ed8970544ea28_cppui_modular255 + 0x209a9bf596288853d71eb5a070164b2d81fe36e956f8f70376712767fabb15d9_big_uint255, + 0x661ad4fb4d130b7afaea293348f2107d9f4a62308af88282297733628cfc5ae7_big_uint255, + 0x12c7c99db99e16869ecf06cbaf6683a5cd8af516e1f31d869fe85acb87b770bf_big_uint255, + 0x2e6d6e4d72b2fa210f6e647530c612b5367178bbcbfed0804cf9f4046dbebaf3_big_uint255, + 0x65915fd6511eb3afcf0648a4b4b1c3f298433ecaee3cdd97254aa3ce8a67303d_big_uint255, + 0x413537eb2c5110a7ae3d6b40e02c965b03fc6dd2adf1ee06ece24ecff5762bb2_big_uint255, + 0x01c40f7a911c57190db5382d3fc2d96473780452b78e60474add8fb7f1eddda6_big_uint255, + 0x49757b377fe2a1de10c484db929a74ae02fdfae3aaab6098ea2ab8accfe613f0_big_uint255, + 0x363f979f222c9970dc4291b62bc3e8d77c31c1b2caa88afeb414f3584b952000_big_uint255, + 0x661ad4fb4d130b7afaea293348f2107d9f4a62308af88282297733628cfc5ae8_big_uint255, + 0x53530b5d9374f4f45c1b2267998b8cd7d1bf6d19a90564fb898ed8970544ea28_big_uint255 }; static constexpr const_set_t constants1 = {811706348}; check_field_operations_static(); @@ -152,22 +152,22 @@ BOOST_AUTO_TEST_CASE(field_operation_test_bls12_381_fq) { using const_set_t = std::array; static constexpr test_set_t elements1 = { - 0x3d9cb62ebac9d6c7b94245d2d6144d500f218bb90a16a1e4f70d98fd44b4b9ee274de15a0a3d231dac1eaa449d31404_cppui_modular381, - 0x15c88779fc8a30cca95ec4bbf71aa4c302bccf7dc571e6e45fbf1ed24989ec23dff741ca00597f4ab1fc628304e8761b_cppui_modular381, - 0x19a252dce836ce3924f2e919247be99803aee83956135102af2ff8621dd537c2c26c1fdfa0fd517c8cbe4d274ebb8a1f_cppui_modular381, - 0x81255d328a2533a1d51075779924ce962ac94c2beb495f956e28d5e8172559f21299c4a519e52e6e2c4882144ea4894_cppui_modular381, - 0x4e02d210a60d52212c21056e050b7f7b6aa45c2fb85e692b1fef9e3e6fb43b2bf8103105f43daca458e4dccc9f5236c_cppui_modular381, - 0x7b396c5d7593ad8f72848ba5ac289aa01e431772142d43c9ee1b31fa896973dc4e9bc2b4147a463b583d54893a62808_cppui_modular381, - 0x68241cb698160ee94897ec6600bc997de3fed563dfc36a758334c71dc76a2473571cfbc0f674038ee748add41e4277a_cppui_modular381, - 0xbb4588b98237fefeba65f928e69da9106c690e02c70361947b39d0f5a6d462096431d375d4b66ae7e4daef9f2400a09_cppui_modular381, - 0x2e7ebd9b39f65a9485b32b52269baa84b2d33a80c8747c994b1e58c0caa09b4acf7685583898549db1029a1de657d8a_cppui_modular381, - 0x4388a703cf5b5cda1bce2fa4c31081461ba7c072e132bdb0771b3cead270a003eb4be34b0fa80b508029d7cfb173490_cppui_modular381, - 0x162746874dd3492dcf87835915ea6802638532c962e3a8a117bff9112265aa853c3721e910b02dcddf3d155bb62c96a7_cppui_modular381}; + 0x3d9cb62ebac9d6c7b94245d2d6144d500f218bb90a16a1e4f70d98fd44b4b9ee274de15a0a3d231dac1eaa449d31404_big_uint381, + 0x15c88779fc8a30cca95ec4bbf71aa4c302bccf7dc571e6e45fbf1ed24989ec23dff741ca00597f4ab1fc628304e8761b_big_uint381, + 0x19a252dce836ce3924f2e919247be99803aee83956135102af2ff8621dd537c2c26c1fdfa0fd517c8cbe4d274ebb8a1f_big_uint381, + 0x81255d328a2533a1d51075779924ce962ac94c2beb495f956e28d5e8172559f21299c4a519e52e6e2c4882144ea4894_big_uint381, + 0x4e02d210a60d52212c21056e050b7f7b6aa45c2fb85e692b1fef9e3e6fb43b2bf8103105f43daca458e4dccc9f5236c_big_uint381, + 0x7b396c5d7593ad8f72848ba5ac289aa01e431772142d43c9ee1b31fa896973dc4e9bc2b4147a463b583d54893a62808_big_uint381, + 0x68241cb698160ee94897ec6600bc997de3fed563dfc36a758334c71dc76a2473571cfbc0f674038ee748add41e4277a_big_uint381, + 0xbb4588b98237fefeba65f928e69da9106c690e02c70361947b39d0f5a6d462096431d375d4b66ae7e4daef9f2400a09_big_uint381, + 0x2e7ebd9b39f65a9485b32b52269baa84b2d33a80c8747c994b1e58c0caa09b4acf7685583898549db1029a1de657d8a_big_uint381, + 0x4388a703cf5b5cda1bce2fa4c31081461ba7c072e132bdb0771b3cead270a003eb4be34b0fa80b508029d7cfb173490_big_uint381, + 0x162746874dd3492dcf87835915ea6802638532c962e3a8a117bff9112265aa853c3721e910b02dcddf3d155bb62c96a7_big_uint381}; static constexpr const_set_t constants1 = {865433380}; check_field_operations_static(); constexpr value_type not_square1 = { - 0x122ca301fc65d4c9fd02b7d919e691c448b3209081835c99fab65c12c0e60a25f7eabe1b506e494b45175b95a4a9ebfe_cppui_modular381, + 0x122ca301fc65d4c9fd02b7d919e691c448b3209081835c99fab65c12c0e60a25f7eabe1b506e494b45175b95a4a9ebfe_big_uint381, }; static_assert(not_square1.is_square() == false, "not square error"); static_assert(not_square1.pow(2).is_square() == true, "square error"); @@ -181,55 +181,55 @@ BOOST_AUTO_TEST_CASE(field_operation_test_bls12_381_fq2) { static constexpr test_set_t elements1 = { {{ - 0x5aa9d5160c21229d4c73871dab039631da3722131b00713055854b2e6ff4f8abe4430358fc70ba351fda87dc9abdbb2_cppui_modular381, - 0x2ccc1503d823ead782507cf3eb7c6b03ec4503bf8bb725111abe86ce8809f9c52ed32fa7178cdeb057f8ddb351b2de4_cppui_modular381, + 0x5aa9d5160c21229d4c73871dab039631da3722131b00713055854b2e6ff4f8abe4430358fc70ba351fda87dc9abdbb2_big_uint381, + 0x2ccc1503d823ead782507cf3eb7c6b03ec4503bf8bb725111abe86ce8809f9c52ed32fa7178cdeb057f8ddb351b2de4_big_uint381, }, { - 0xe9042dd6be3a4248432d05bdf942a3b7574fa29fabc16dd474af9b64aea7d6e66d5be0bb505a97d67105d045d5e533d_cppui_modular381, - 0x79d8473ab5a748a8321a5f996ddde6cbaa2f723bfffcf3da67045bd122fbb639f1ea54d5bc7c7dcc9cec9834c666f37_cppui_modular381, + 0xe9042dd6be3a4248432d05bdf942a3b7574fa29fabc16dd474af9b64aea7d6e66d5be0bb505a97d67105d045d5e533d_big_uint381, + 0x79d8473ab5a748a8321a5f996ddde6cbaa2f723bfffcf3da67045bd122fbb639f1ea54d5bc7c7dcc9cec9834c666f37_big_uint381, }, { - 0x143ae02ecca5b64e58fa08cdba44639e93186c4b2c6c1df04ca34e6931e9ccf92519ee4144ccb520b90e0582270a2eef_cppui_modular381, - 0xa6a45c3e8dcb337fb46adc8d595a51cf967475fb8bb418eb81c2e29fab05afff20bd847cd4095c7cf4e575e81819d1b_cppui_modular381, + 0x143ae02ecca5b64e58fa08cdba44639e93186c4b2c6c1df04ca34e6931e9ccf92519ee4144ccb520b90e0582270a2eef_big_uint381, + 0xa6a45c3e8dcb337fb46adc8d595a51cf967475fb8bb418eb81c2e29fab05afff20bd847cd4095c7cf4e575e81819d1b_big_uint381, }, { - 0x111b6c5e2e5e549f9bb00fcc3e67bbff0ca5c37c2a7902f5253e2d9d92c5c840761a72288c156225a4ec4b796c4d3320_cppui_modular381, - 0x15304ec6cba7b0bd401f098beb25951ae898a49d2c40b5d2d26c7550cd01da5cd27a8dabc705060df5afc457e8b46958_cppui_modular381, + 0x111b6c5e2e5e549f9bb00fcc3e67bbff0ca5c37c2a7902f5253e2d9d92c5c840761a72288c156225a4ec4b796c4d3320_big_uint381, + 0x15304ec6cba7b0bd401f098beb25951ae898a49d2c40b5d2d26c7550cd01da5cd27a8dabc705060df5afc457e8b46958_big_uint381, }, { - 0x16c00305e0c73e7c87eff62ffcadc3b54e06d73bc6ba13bf64a6e12881b3be9a8bd441e174fa59bb75287609946ad160_cppui_modular381, - 0x121e6a16e0b5a24b03bbb18ffb108c934781f5ecde689729b47c69a575592c4f6e3cf19d34140428cbf71a48dfef8bcb_cppui_modular381, + 0x16c00305e0c73e7c87eff62ffcadc3b54e06d73bc6ba13bf64a6e12881b3be9a8bd441e174fa59bb75287609946ad160_big_uint381, + 0x121e6a16e0b5a24b03bbb18ffb108c934781f5ecde689729b47c69a575592c4f6e3cf19d34140428cbf71a48dfef8bcb_big_uint381, }, { - 0xb553aa2c1842453a98e70e3b56072c63b46e44263600e260ab0a965cdfe9f157c88606b1f8e1746a3fb50fb9357b764_cppui_modular381, - 0x59982a07b047d5af04a0f9e7d6f8d607d88a077f176e4a22357d0d9d1013f38a5da65f4e2f19bd60aff1bb66a365bc8_cppui_modular381, + 0xb553aa2c1842453a98e70e3b56072c63b46e44263600e260ab0a965cdfe9f157c88606b1f8e1746a3fb50fb9357b764_big_uint381, + 0x59982a07b047d5af04a0f9e7d6f8d607d88a077f176e4a22357d0d9d1013f38a5da65f4e2f19bd60aff1bb66a365bc8_big_uint381, }, { - 0x1004f42fded04e85fa8e21b945dc955abd3b349e52494a628d102e1240123038bdadd47f92750bdb8355b798d119a030_cppui_modular381, - 0xe7eeef4fb0a1d7470dad9548096233fcf664d7178e62b8c8d716197b84e31d7da79bbf5be757d63519b997c81d5c95e_cppui_modular381, + 0x1004f42fded04e85fa8e21b945dc955abd3b349e52494a628d102e1240123038bdadd47f92750bdb8355b798d119a030_big_uint381, + 0xe7eeef4fb0a1d7470dad9548096233fcf664d7178e62b8c8d716197b84e31d7da79bbf5be757d63519b997c81d5c95e_big_uint381, }, { - 0xef716581f3a2e7e2bf0f2850ea9bd3bbccf4933d4f4dcf616b181e1a894eb07e194b611cf5a2d532637b6ae800e33b6_cppui_modular381, - 0x2054d1d319feb67161dcd0ba4ab91a498197d89f44158513b8ddee4e46a8b50b6752621e17a61e0952d6daf2e0d9e8a_cppui_modular381, + 0xef716581f3a2e7e2bf0f2850ea9bd3bbccf4933d4f4dcf616b181e1a894eb07e194b611cf5a2d532637b6ae800e33b6_big_uint381, + 0x2054d1d319feb67161dcd0ba4ab91a498197d89f44158513b8ddee4e46a8b50b6752621e17a61e0952d6daf2e0d9e8a_big_uint381, }, { - 0x9f218e6d8b2f410874af5f7a8290dfa6ba23f059630fc7afe87138081863aed2730b5b19c3945c3bf5a03780d276861_cppui_modular381, - 0x120c0b9fea1fdde517eee773dc43ba6c0f14b8594a7fd86e93b40a71e7ae9b118444713de4606eedc4391acfab10218a_cppui_modular381, + 0x9f218e6d8b2f410874af5f7a8290dfa6ba23f059630fc7afe87138081863aed2730b5b19c3945c3bf5a03780d276861_big_uint381, + 0x120c0b9fea1fdde517eee773dc43ba6c0f14b8594a7fd86e93b40a71e7ae9b118444713de4606eedc4391acfab10218a_big_uint381, }, { - 0xe9042dd6be3a4248432d05bdf942a3b7574fa29fabc16dd474af9b64aea7d6e66d5be0bb505a97d67105d045d5e533d_cppui_modular381, - 0x79d8473ab5a748a8321a5f996ddde6cbaa2f723bfffcf3da67045bd122fbb639f1ea54d5bc7c7dcc9cec9834c666f37_cppui_modular381, + 0xe9042dd6be3a4248432d05bdf942a3b7574fa29fabc16dd474af9b64aea7d6e66d5be0bb505a97d67105d045d5e533d_big_uint381, + 0x79d8473ab5a748a8321a5f996ddde6cbaa2f723bfffcf3da67045bd122fbb639f1ea54d5bc7c7dcc9cec9834c666f37_big_uint381, }, { - 0x14567498d8bdd47076546f44689b737446d3d963c1d50bac61d87dee0fb1a6996067cfc9218cf45c680157823653cef9_cppui_modular381, - 0x17345099fbfda7ecd2f69fe70493e62725b2fb48fac9a06e5584ea340e305687cbbecd043fdb3214b47f7224cae47cc7_cppui_modular381, + 0x14567498d8bdd47076546f44689b737446d3d963c1d50bac61d87dee0fb1a6996067cfc9218cf45c680157823653cef9_big_uint381, + 0x17345099fbfda7ecd2f69fe70493e62725b2fb48fac9a06e5584ea340e305687cbbecd043fdb3214b47f7224cae47cc7_big_uint381, }}}; static constexpr const_set_t constants1 = {928943650}; check_field_operations_static(); constexpr value_type not_square1 = { - 0x72076a0fb063f674c504b550525707cbea30259021a274bc9dcba7a9fdaf9e36011466eea87f70870c4b91a400d3395_cppui_modular381, - 0x1127508c363a11a7b6f6572124fe882786e91ad0a2ce25e139949d37b8a3d6f6392920c23b07e3896dd4e8f743c2567f_cppui_modular381, + 0x72076a0fb063f674c504b550525707cbea30259021a274bc9dcba7a9fdaf9e36011466eea87f70870c4b91a400d3395_big_uint381, + 0x1127508c363a11a7b6f6572124fe882786e91ad0a2ce25e139949d37b8a3d6f6392920c23b07e3896dd4e8f743c2567f_big_uint381, }; static_assert(not_square1.is_square() == false, "not square error"); static_assert(not_square1.pow(2).is_square() == true, "square error"); @@ -242,129 +242,129 @@ BOOST_AUTO_TEST_CASE(field_operation_test_bls12_381_fq6) { using const_set_t = std::array; constexpr value_type element1( - {{0xe35bdcd1e6bea40fb5a65a36a415ef84cb2260e7c7a21b479352a56a257128bbd2f6b8e5d96dca7917292801387ca3f_cppui_modular381, - 0x842c6e159819c8c3119def19ef737ef9d412ac4f720e96f807739f66f612fc3efa0ddefa8948bb897af24c57ffb0847_cppui_modular381}}, - {{0x530d34cbd121e5d4889dc058b70e8c4d1113cb8fda0d324ca7c04e86b39f93a569946fb5896e04494e99aab3af56417_cppui_modular381, - 0x66c9141b489a64a63108c7b1f019e760e4475a1c3deb8ca5805758a8d3bc99bba1e9cac8f610e9bc7b8ef295527957d_cppui_modular381}}, - {{0x191648b522c815d6b754d0ae9811b8009faa26fad2fa9ebe1ec57d29575c5667cbf0cae8e048167f55b9f5f107de315_cppui_modular381, - 0x18874ddc2384d2512f6b9c61dc1650f8c3f013e86e260af76dd326c6505041962b4c652db429eb9751788d323a9fe14d_cppui_modular381}}); + {{0xe35bdcd1e6bea40fb5a65a36a415ef84cb2260e7c7a21b479352a56a257128bbd2f6b8e5d96dca7917292801387ca3f_big_uint381, + 0x842c6e159819c8c3119def19ef737ef9d412ac4f720e96f807739f66f612fc3efa0ddefa8948bb897af24c57ffb0847_big_uint381}}, + {{0x530d34cbd121e5d4889dc058b70e8c4d1113cb8fda0d324ca7c04e86b39f93a569946fb5896e04494e99aab3af56417_big_uint381, + 0x66c9141b489a64a63108c7b1f019e760e4475a1c3deb8ca5805758a8d3bc99bba1e9cac8f610e9bc7b8ef295527957d_big_uint381}}, + {{0x191648b522c815d6b754d0ae9811b8009faa26fad2fa9ebe1ec57d29575c5667cbf0cae8e048167f55b9f5f107de315_big_uint381, + 0x18874ddc2384d2512f6b9c61dc1650f8c3f013e86e260af76dd326c6505041962b4c652db429eb9751788d323a9fe14d_big_uint381}}); constexpr value_type element2( {{ - 0x12c6da93e6f1749bb5b55d45be19c3447ac88cefa858ff5ed5eccb5e8cb36ccf8923ed675278d5ed0b21f04d3770e191_cppui_modular381, - 0x298353679126c9fad35a3ea30ab0a3307a256877ca8689641bc43d1689c801d215110906ed9ef31c0f03df8e1a1bbac_cppui_modular381, + 0x12c6da93e6f1749bb5b55d45be19c3447ac88cefa858ff5ed5eccb5e8cb36ccf8923ed675278d5ed0b21f04d3770e191_big_uint381, + 0x298353679126c9fad35a3ea30ab0a3307a256877ca8689641bc43d1689c801d215110906ed9ef31c0f03df8e1a1bbac_big_uint381, }}, {{ - 0x19af88a6400fc27b35efde0bfd718cb83f7cf34abc1a66ae709a889084847930a94b1b706a3e0d8859f77c6cbdfb005c_cppui_modular381, - 0x11d0d2e8f588862f71072a1131d2a680183e37687d73ea2271c50233e63be12dd7e3ced525de82aefde44d9c7dc4548d_cppui_modular381, + 0x19af88a6400fc27b35efde0bfd718cb83f7cf34abc1a66ae709a889084847930a94b1b706a3e0d8859f77c6cbdfb005c_big_uint381, + 0x11d0d2e8f588862f71072a1131d2a680183e37687d73ea2271c50233e63be12dd7e3ced525de82aefde44d9c7dc4548d_big_uint381, }}, {{ - 0x3953b4d910cbcf606bd2e1cff60d71686058fe97df3f565e38c5eb62919e761123f27da473b7d74ab1b2c263acf8a67_cppui_modular381, - 0xa5b6acd4357f48cdb0d890dc2f1dd294ca52aa4a63423b4208fa9b3865f6e6f663b02505b64d3383423ab07f155b0e0_cppui_modular381, + 0x3953b4d910cbcf606bd2e1cff60d71686058fe97df3f565e38c5eb62919e761123f27da473b7d74ab1b2c263acf8a67_big_uint381, + 0xa5b6acd4357f48cdb0d890dc2f1dd294ca52aa4a63423b4208fa9b3865f6e6f663b02505b64d3383423ab07f155b0e0_big_uint381, }}); constexpr value_type element_add( {{ - 0x6fb8676cbdd784265f41b32e50f756563036779314e0e53e7f123143859893727a758f6febbb294e29582cd4af90125_cppui_modular381, - 0xadafc17d294092bde4f82dbcfa24222a4e3814c73c95205c2337dc7d7fdafe110f1ee80176e7aea589f62be619cc3f3_cppui_modular381, + 0x6fb8676cbdd784265f41b32e50f756563036779314e0e53e7f123143859893727a758f6febbb294e29582cd4af90125_big_uint381, + 0xadafc17d294092bde4f82dbcfa24222a4e3814c73c95205c2337dc7d7fdafe110f1ee80176e7aea589f62be619cc3f3_big_uint381, }}, {{ - 0x4df4a08c3a1fa3e335e125b4596c8a5ac16e47ec6362713d3e5bad7f90d7c46e138626d1180edcd34e21717f8f0b9c8_cppui_modular381, - 0x183d642aaa122c79d417b68c50d444f62682ad0a4152a2ecc9ca77be7377aac992026b81b53f914ac59d3cc5d2ebea0a_cppui_modular381, + 0x4df4a08c3a1fa3e335e125b4596c8a5ac16e47ec6362713d3e5bad7f90d7c46e138626d1180edcd34e21717f8f0b9c8_big_uint381, + 0x183d642aaa122c79d417b68c50d444f62682ad0a4152a2ecc9ca77be7377aac992026b81b53f914ac59d3cc5d2ebea0a_big_uint381, }}, {{ - 0x5269fd8e3393e5372327b27e8e1f296900032592b239f51c578b688be8facc78efe3488d53ffedca076cb854b4d6d7c_cppui_modular381, - 0x8e1a6bf2d5ce043bf5d7db95bbc814aac1df30820d51bec2731fdd8dffeb9e172db677f5e3abecfcb9d383a2bf5e782_cppui_modular381, + 0x5269fd8e3393e5372327b27e8e1f296900032592b239f51c578b688be8facc78efe3488d53ffedca076cb854b4d6d7c_big_uint381, + 0x8e1a6bf2d5ce043bf5d7db95bbc814aac1df30820d51bec2731fdd8dffeb9e172db677f5e3abecfcb9d383a2bf5e782_big_uint381, }}); constexpr value_type element_sub( {{ - 0x156ff52370fa5c3f90c0b013ef73488b3660e4a3c7a635150a7931990c549be052b77e25bc7206ba404fa232dc169359_cppui_modular381, - 0x5aa91aae06f2fec83e43b076e4c2dbc959ed43d7a7880d93ebaf62506c4afa6ce4fcd5f39ba9c86d6bee6cc9e594c9b_cppui_modular381, + 0x156ff52370fa5c3f90c0b013ef73488b3660e4a3c7a635150a7931990c549be052b77e25bc7206ba404fa232dc169359_big_uint381, + 0x5aa91aae06f2fec83e43b076e4c2dbc959ed43d7a7880d93ebaf62506c4afa6ce4fcd5f39ba9c86d6bee6cc9e594c9b_big_uint381, }}, {{ - 0x5825c90b682427c5db5a5afd14b08e3f60b94f3350b7f35c1124ef8dd66762dcbfa2b899facd2bbf4f11e3e7cfa0e66_cppui_modular381, - 0xe9cd042f88106b53d250a20307aa4cd5a7d89be39efe1674d7145f79db0de9200e6cdd61ad68bec83d3a18cd762eb9b_cppui_modular381, + 0x5825c90b682427c5db5a5afd14b08e3f60b94f3350b7f35c1124ef8dd66762dcbfa2b899facd2bbf4f11e3e7cfa0e66_big_uint381, + 0xe9cd042f88106b53d250a20307aa4cd5a7d89be39efe1674d7145f79db0de9200e6cdd61ad68bec83d3a18cd762eb9b_big_uint381, }}, {{ - 0x17fd3b27fa9fab01afd3c6a42d6bf140e86c5e0b22c0c7456590cbbd630cd429892be4d2f81d03f3043f7338d5ae0359_cppui_modular381, - 0xe2be30ee02cddc4545e1354192473cf774ae943c7f1e7434d437d12c9f0d326c51162dd58c5185f1d54e22a494a306d_cppui_modular381, + 0x17fd3b27fa9fab01afd3c6a42d6bf140e86c5e0b22c0c7456590cbbd630cd429892be4d2f81d03f3043f7338d5ae0359_big_uint381, + 0xe2be30ee02cddc4545e1354192473cf774ae943c7f1e7434d437d12c9f0d326c51162dd58c5185f1d54e22a494a306d_big_uint381, }}); constexpr value_type element_mul( {{ - 0xee860564acc5f0b9735eeb963c12b5f13e7185ee07cc64faa29f7625722ab4f22c5de62ba7bfbb2f4b89271e1c08cf5_cppui_modular381, - 0x15da2707b1131595a4c8f52d21033bf4effa6f8bb329b87ff145c246996a06e5658f600cf48194d3de04de2b12440b05_cppui_modular381, + 0xee860564acc5f0b9735eeb963c12b5f13e7185ee07cc64faa29f7625722ab4f22c5de62ba7bfbb2f4b89271e1c08cf5_big_uint381, + 0x15da2707b1131595a4c8f52d21033bf4effa6f8bb329b87ff145c246996a06e5658f600cf48194d3de04de2b12440b05_big_uint381, }}, {{ - 0x7d5becd415aa1ab429792cd7886c38f099b8822fe2addde4be8a4d6474b942ca3e1748e05f554399c4b91cd3b3f16a8_cppui_modular381, - 0xa76f981e0a2529242f4ff7aed73d90f0edbbf42fb6eeafe7c2c1b00a06410cffd8aeb068642fd6acdc620d34b112d4c_cppui_modular381, + 0x7d5becd415aa1ab429792cd7886c38f099b8822fe2addde4be8a4d6474b942ca3e1748e05f554399c4b91cd3b3f16a8_big_uint381, + 0xa76f981e0a2529242f4ff7aed73d90f0edbbf42fb6eeafe7c2c1b00a06410cffd8aeb068642fd6acdc620d34b112d4c_big_uint381, }}, {{ - 0x13cf641327fca9e6e6f030760e3c15db66560f38f9e3c0b01c145a618cabeff77a4eecb05ce3dd6fbcbacefd30be8d06_cppui_modular381, - 0xc6d2165eb733e306f8cb4fa077fbcf150ddca205f82ed83018a9f25df5356029d6cebbcd949869db0d1fde551fbe5fb_cppui_modular381, + 0x13cf641327fca9e6e6f030760e3c15db66560f38f9e3c0b01c145a618cabeff77a4eecb05ce3dd6fbcbacefd30be8d06_big_uint381, + 0xc6d2165eb733e306f8cb4fa077fbcf150ddca205f82ed83018a9f25df5356029d6cebbcd949869db0d1fde551fbe5fb_big_uint381, }}); constexpr value_type element_dbl( {{ - 0x26a69b00357ede7ab9923909137111934ed0098056f30a98b39820c4dfd2ef35bb2d71e09d9b94f68e62500270fe9d3_cppui_modular381, - 0x10858dc2b30339186233bde33dee6fdf3a825589ee41d2df00ee73ecdec25f87df41bbdf512917712f5e498afff6108e_cppui_modular381, + 0x26a69b00357ede7ab9923909137111934ed0098056f30a98b39820c4dfd2ef35bb2d71e09d9b94f68e62500270fe9d3_big_uint381, + 0x10858dc2b30339186233bde33dee6fdf3a825589ee41d2df00ee73ecdec25f87df41bbdf512917712f5e498afff6108e_big_uint381, }}, {{ - 0xa61a6997a243cba9113b80b16e1d189a2227971fb41a64994f809d0d673f274ad328df6b12dc08929d3355675eac82e_cppui_modular381, - 0xcd9228369134c94c62118f63e033cec1c88eb4387bd7194b00aeb151a779337743d39591ec21d378f71de52aa4f2afa_cppui_modular381, + 0xa61a6997a243cba9113b80b16e1d189a2227971fb41a64994f809d0d673f274ad328df6b12dc08929d3355675eac82e_big_uint381, + 0xcd9228369134c94c62118f63e033cec1c88eb4387bd7194b00aeb151a779337743d39591ec21d378f71de52aa4f2afa_big_uint381, }}, {{ - 0x322c916a45902bad6ea9a15d302370013f544df5a5f53d7c3d8afa52aeb8accf97e195d1c0902cfeab73ebe20fbc62a_cppui_modular381, - 0x170d89ce0d89be0813bb910d74e0f51a2368dc4be8c7032f74757aeba9ef8d0837ecca5cb6ffd72ee8f21a64754017ef_cppui_modular381, + 0x322c916a45902bad6ea9a15d302370013f544df5a5f53d7c3d8afa52aeb8accf97e195d1c0902cfeab73ebe20fbc62a_big_uint381, + 0x170d89ce0d89be0813bb910d74e0f51a2368dc4be8c7032f74757aeba9ef8d0837ecca5cb6ffd72ee8f21a64754017ef_big_uint381, }}); constexpr value_type element_inv( {{ - 0x12ee7ea5e0d228be7def0065aadeb7da8095517cb58fc1db216d0b7b2d744534757ae10609732ec72999898bdbbdf399_cppui_modular381, - 0x6626a59529d1a4a5639122be3bf0c9840f0c47e083a6d2d7fd8fb11400d19efe488e987e3fcf90ae89d098fae2adb15_cppui_modular381, + 0x12ee7ea5e0d228be7def0065aadeb7da8095517cb58fc1db216d0b7b2d744534757ae10609732ec72999898bdbbdf399_big_uint381, + 0x6626a59529d1a4a5639122be3bf0c9840f0c47e083a6d2d7fd8fb11400d19efe488e987e3fcf90ae89d098fae2adb15_big_uint381, }}, {{ - 0x987d5a6a07024d1728020ddc12fe8359aaa166216145d3830e01f8c397aa1b5b0df5b42f4c82b8481f8b327b20fc8b7_cppui_modular381, - 0xd4566bba6b0d25880bb0c3be74ae401b0988116914166df91f1a61af5af32a7aec7967d12e040e528629136a3c8c9bc_cppui_modular381, + 0x987d5a6a07024d1728020ddc12fe8359aaa166216145d3830e01f8c397aa1b5b0df5b42f4c82b8481f8b327b20fc8b7_big_uint381, + 0xd4566bba6b0d25880bb0c3be74ae401b0988116914166df91f1a61af5af32a7aec7967d12e040e528629136a3c8c9bc_big_uint381, }}, {{ - 0xd7a5de8dc422548facb0cd895f0fb045dbbf0872d5c257a91720916fc59552d14879c0a1954661e452606be48cf7bc6_cppui_modular381, - 0x41669d95d4700d9d78b96f4292bfa008b60170188c8f6737157800c6cb8bd8887afa3411ff6e700f89f480ba8b889a3_cppui_modular381, + 0xd7a5de8dc422548facb0cd895f0fb045dbbf0872d5c257a91720916fc59552d14879c0a1954661e452606be48cf7bc6_big_uint381, + 0x41669d95d4700d9d78b96f4292bfa008b60170188c8f6737157800c6cb8bd8887afa3411ff6e700f89f480ba8b889a3_big_uint381, }}); constexpr value_type element_pow_C( {{ - 0x289ab5220ebbed9d65e184825cc39c3ad9288269839db599ddc54fed213cb8dc29f668ef33a28352cb76133d3003f3b_cppui_modular381, - 0x1924a52997eef1bd7ae41fb0ec3983e4cf1c6c2da62ad149e6f4d4bdbad63f701c5cff340d29d23516d058aea2deb5b4_cppui_modular381, + 0x289ab5220ebbed9d65e184825cc39c3ad9288269839db599ddc54fed213cb8dc29f668ef33a28352cb76133d3003f3b_big_uint381, + 0x1924a52997eef1bd7ae41fb0ec3983e4cf1c6c2da62ad149e6f4d4bdbad63f701c5cff340d29d23516d058aea2deb5b4_big_uint381, }}, {{ - 0xcd023da96a2033fd26952aecdaad57c57f62ba9ce4864486d81991f8fcd8075b736cf799ee243d8d9291c20285dfc5d_cppui_modular381, - 0x146f298a42cf556357a296833b14967329b954633f3b0dff55fbd269317c79d1d67ae65c6626032261fda641f7121f1_cppui_modular381, + 0xcd023da96a2033fd26952aecdaad57c57f62ba9ce4864486d81991f8fcd8075b736cf799ee243d8d9291c20285dfc5d_big_uint381, + 0x146f298a42cf556357a296833b14967329b954633f3b0dff55fbd269317c79d1d67ae65c6626032261fda641f7121f1_big_uint381, }}, {{ - 0x18da863345461ccc88fa8918d151de5fa527839e59ece3575c73ab805a78f66e712974f2e27e641e18731934dd72c484_cppui_modular381, - 0x7e8b156d32a43b79e904543ff5e79949488e5993c6a86c976b07826ec0b48957b4de5287333bd3452cfb34aabc63db8_cppui_modular381, + 0x18da863345461ccc88fa8918d151de5fa527839e59ece3575c73ab805a78f66e712974f2e27e641e18731934dd72c484_big_uint381, + 0x7e8b156d32a43b79e904543ff5e79949488e5993c6a86c976b07826ec0b48957b4de5287333bd3452cfb34aabc63db8_big_uint381, }}); constexpr int C1 = 980386333; constexpr value_type element_pow_2( {{ - 0xd021823530aa495ad91e8ef633c8b36a6c6d5e5812fdb235aa35082f610dd3e5417f3f9b5476a5715bad9a03f41f531_cppui_modular381, - 0x2ea43195614413f4c50621a1113ebc172ebb7d6233f741e4cc6c668d11937364a33df9bd3aec396eebc57c37d51cd19_cppui_modular381, + 0xd021823530aa495ad91e8ef633c8b36a6c6d5e5812fdb235aa35082f610dd3e5417f3f9b5476a5715bad9a03f41f531_big_uint381, + 0x2ea43195614413f4c50621a1113ebc172ebb7d6233f741e4cc6c668d11937364a33df9bd3aec396eebc57c37d51cd19_big_uint381, }}, {{ - 0xe28656d2e81bf9db44a2ed61847fcf8d1413b99a8e4f056cb8d33cc72953745cb3d9142ff9c1270741cf8e91ee7017a_cppui_modular381, - 0x101cb4244b677c1f85235503d9215dd97521158b008bf22fcea5700a1bd7b9e83ecaa5c371e4259727b6984781409022_cppui_modular381, + 0xe28656d2e81bf9db44a2ed61847fcf8d1413b99a8e4f056cb8d33cc72953745cb3d9142ff9c1270741cf8e91ee7017a_big_uint381, + 0x101cb4244b677c1f85235503d9215dd97521158b008bf22fcea5700a1bd7b9e83ecaa5c371e4259727b6984781409022_big_uint381, }}, {{ - 0x96d2835c975421e540a1d70cdbbcf1f90ea98c39d5b894ab7185ae631efd6e4d0aa3896dca1cd280031806546151d9d_cppui_modular381, - 0x194d9e3edf767e4c871506bf5d9b026f0998d835e46f1dd4717ba13922b78fec335ca5d9d1305420269bf7a423540b84_cppui_modular381, + 0x96d2835c975421e540a1d70cdbbcf1f90ea98c39d5b894ab7185ae631efd6e4d0aa3896dca1cd280031806546151d9d_big_uint381, + 0x194d9e3edf767e4c871506bf5d9b026f0998d835e46f1dd4717ba13922b78fec335ca5d9d1305420269bf7a423540b84_big_uint381, }}); constexpr value_type minus_element( {{ - 0xbcb541d1b13fc594fc14212d90a4ddf17c52576770af10aedfba84a5459e398617c947053bd2358288c6d7fec77e06c_cppui_modular381, - 0x11be4b08dffe4a0e1a01c8c4a45474e7c73620bffc64294fe6b998aa874fc6602f0b220f08bf7447224fdb3a8004a264_cppui_modular381, + 0xbcb541d1b13fc594fc14212d90a4ddf17c52576770af10aedfba84a5459e398617c947053bd2358288c6d7fec77e06c_big_uint381, + 0x11be4b08dffe4a0e1a01c8c4a45474e7c73620bffc64294fe6b998aa874fc6602f0b220f08bf7447224fdb3a8004a264_big_uint381, }}, {{ - 0x14d03e9d7c6dc83d0291cbb0b7dac41293660ecbf5e43f9a9cb4cdb88b76fce9c812b90358bd1fbb25156554c50a4694_cppui_modular381, - 0x139480a884f6404fe80b1b3b244a0e615632d5e32fa659f50f2b5d1669752c88648d635221f2f163f24610d6aad8152e_cppui_modular381, + 0x14d03e9d7c6dc83d0291cbb0b7dac41293660ecbf5e43f9a9cb4cdb88b76fce9c812b90358bd1fbb25156554c50a4694_big_uint381, + 0x139480a884f6404fe80b1b3b244a0e615632d5e32fa659f50f2b5d1669752c88648d635221f2f163f24610d6aad8152e_big_uint381, }}, {{ - 0x186fad5ee753653cdfa65aab59ca91575a7ca915465568d385447ace613b30bda1ecf350234f7e97c4a360a0ef81c796_cppui_modular381, - 0x179c40e15fb14491bb00b5467355bdea087379c855f07c7f95dabdaa660b48df35f9ad0fd2a1468688672cdc55fc95e_cppui_modular381, + 0x186fad5ee753653cdfa65aab59ca91575a7ca915465568d385447ace613b30bda1ecf350234f7e97c4a360a0ef81c796_big_uint381, + 0x179c40e15fb14491bb00b5467355bdea087379c855f07c7f95dabdaa660b48df35f9ad0fd2a1468688672cdc55fc95e_big_uint381, }}); static constexpr test_set_t elements1 = { @@ -391,17 +391,17 @@ BOOST_AUTO_TEST_CASE(field_operation_test_mnt4_fq) { using const_set_t = std::array; static constexpr test_set_t elements1 = { - 0x1a1f0b89abd62c63c669a0cafeaa872558eeb1dffedc21f8ded61768d6ae02a0b973de3139b_cppui_modular298, - 0x13557b8d70144c7c1a18ce98b3f9f52fbadbcda323d5cb293304f09f24b8ce2cf00cce7a2e9_cppui_modular298, - 0x2d7487171bea78dfe0826f63b2a47c5513ca7f8322b1ed2211db0807fb66d0cda980acab684_cppui_modular298, - 0x6c98ffc3bc1dfe7ac50d2324ab091f59e12e43cdb0656cfabd126c9b1f53473c9670fb70b2_cppui_modular298, - 0x1a2fe564e8a33991ffa2e6ae2b09192db6f041ebc2019591666e27112edf80a4b1ca21f8721_cppui_modular298, - 0x343e171357ac58c78cd34195fd550e4ab1dd63bffdb843f1bdac2ed1ad5c054172e7bc62736_cppui_modular298, - 0x33d2be79b5b111967f10c7e3873bdf19f47ca81c5eee3601cbe0514fbde6a5f756a0e47b663_cppui_modular298, - 0x70c2a23f094063c8a1f7cad92abfa0e8988973db14a1d71dcd1e2706fdbd57204f00e60df5_cppui_modular298, - 0xc5b94b8804b94b443d9fd27dd32200114bccb9ffa650ad2ef53048c53ad1c8723e31f1ba90_cppui_modular298, - 0x287a003fd725d9e62fc1ac6c94f2b9bcdb5a038feace4f7502e02161bc73c2a0759a47e5d18_cppui_modular298, - 0x21b070439b63f9fe8370da3a4a4227c73d471f530fc7f8a5570efa980a7e8e2cac33382ec66_cppui_modular298}; + 0x1a1f0b89abd62c63c669a0cafeaa872558eeb1dffedc21f8ded61768d6ae02a0b973de3139b_big_uint298, + 0x13557b8d70144c7c1a18ce98b3f9f52fbadbcda323d5cb293304f09f24b8ce2cf00cce7a2e9_big_uint298, + 0x2d7487171bea78dfe0826f63b2a47c5513ca7f8322b1ed2211db0807fb66d0cda980acab684_big_uint298, + 0x6c98ffc3bc1dfe7ac50d2324ab091f59e12e43cdb0656cfabd126c9b1f53473c9670fb70b2_big_uint298, + 0x1a2fe564e8a33991ffa2e6ae2b09192db6f041ebc2019591666e27112edf80a4b1ca21f8721_big_uint298, + 0x343e171357ac58c78cd34195fd550e4ab1dd63bffdb843f1bdac2ed1ad5c054172e7bc62736_big_uint298, + 0x33d2be79b5b111967f10c7e3873bdf19f47ca81c5eee3601cbe0514fbde6a5f756a0e47b663_big_uint298, + 0x70c2a23f094063c8a1f7cad92abfa0e8988973db14a1d71dcd1e2706fdbd57204f00e60df5_big_uint298, + 0xc5b94b8804b94b443d9fd27dd32200114bccb9ffa650ad2ef53048c53ad1c8723e31f1ba90_big_uint298, + 0x287a003fd725d9e62fc1ac6c94f2b9bcdb5a038feace4f7502e02161bc73c2a0759a47e5d18_big_uint298, + 0x21b070439b63f9fe8370da3a4a4227c73d471f530fc7f8a5570efa980a7e8e2cac33382ec66_big_uint298}; static constexpr const_set_t constants1 = {72022261}; check_field_operations_static(); } @@ -414,48 +414,48 @@ BOOST_AUTO_TEST_CASE(field_operation_test_mnt4_fq2) { static constexpr test_set_t elements1 = { {{ - 0x1151c6efca2088ebb32162cb5d04bd8f95a6c5e45cb9e83551692a0073e7315ee195036fcc9_cppui_modular298, - 0x2e2ba3c821f4d8efe6fc374a478954a2ea9081032d6e63cdc1398d234f189e0c31547552516_cppui_modular298, + 0x1151c6efca2088ebb32162cb5d04bd8f95a6c5e45cb9e83551692a0073e7315ee195036fcc9_big_uint298, + 0x2e2ba3c821f4d8efe6fc374a478954a2ea9081032d6e63cdc1398d234f189e0c31547552516_big_uint298, }, { - 0x19c25638d56bdfd7ac08d72ec325d17ec5c1fa835f75669818f1012dce65a3e1c09fde080b5_cppui_modular298, - 0x886a482d7d20161b9a9952def31f16025a1e9063d38dab6594e964ec56de38fd93a7b47994_cppui_modular298, + 0x19c25638d56bdfd7ac08d72ec325d17ec5c1fa835f75669818f1012dce65a3e1c09fde080b5_big_uint298, + 0x886a482d7d20161b9a9952def31f16025a1e9063d38dab6594e964ec56de38fd93a7b47994_big_uint298, }, { - 0x2b141d289f8c68c35f2a39fa202a8f0e5b68c067bc2f4ecd6a5a2b2e424cd540a234e177d7e_cppui_modular298, - 0x36b2484af9c6da51a0a5cc7836bb460310326a096aa73e841a8823721486819c0a8ef099eaa_cppui_modular298, + 0x2b141d289f8c68c35f2a39fa202a8f0e5b68c067bc2f4ecd6a5a2b2e424cd540a234e177d7e_big_uint298, + 0x36b2484af9c6da51a0a5cc7836bb460310326a096aa73e841a8823721486819c0a8ef099eaa_big_uint298, }, { - 0x335eec843beecf7650f306a1e2cb9afd661a9c940be89c3b6e5d3ad386ae1e4a869c3bc7c15_cppui_modular298, - 0x25a4ff454a22d78e2d52a21c58576342c4ee97fcf035891767eaf6d489aaba7c5819fa0ab82_cppui_modular298, + 0x335eec843beecf7650f306a1e2cb9afd661a9c940be89c3b6e5d3ad386ae1e4a869c3bc7c15_big_uint298, + 0x25a4ff454a22d78e2d52a21c58576342c4ee97fcf035891767eaf6d489aaba7c5819fa0ab82_big_uint298, }, { - 0x231b2db64e90b460eb4b5eebcc66ac09a7546b0d1fff02b81dc61c82a840d32680117a98e79_cppui_modular298, - 0x21c4451e3efba1d3deee73d089740ff6fc2e4318ab8a5d8cb68ec9235f5262809110ce05bbd_cppui_modular298, + 0x231b2db64e90b460eb4b5eebcc66ac09a7546b0d1fff02b81dc61c82a840d32680117a98e79_big_uint298, + 0x21c4451e3efba1d3deee73d089740ff6fc2e4318ab8a5d8cb68ec9235f5262809110ce05bbd_big_uint298, }, { - 0x22a38ddf944111d76642c596ba097b1f2b4d8bc8b973d06aa2d25400e7ce62bdc32a06df992_cppui_modular298, - 0x2087cbc2fcaf8b7d841df38f4625fa593eeb30d34c38acfd4c8e0845bd04ab4afd01d444a2b_cppui_modular298, + 0x22a38ddf944111d76642c596ba097b1f2b4d8bc8b973d06aa2d25400e7ce62bdc32a06df992_big_uint298, + 0x2087cbc2fcaf8b7d841df38f4625fa593eeb30d34c38acfd4c8e0845bd04ab4afd01d444a2b_big_uint298, }, { - 0x33eb8e3c5c5cf4e81905e973afc4b1809df27c74f41cd41228f5b807e25d30948a673525aff_cppui_modular298, - 0x3666450712d00c28ce3b6c17d7be4d41cc15882ff7813140ff4985b80c69eabafdc9e702da2_cppui_modular298, + 0x33eb8e3c5c5cf4e81905e973afc4b1809df27c74f41cd41228f5b807e25d30948a673525aff_big_uint298, + 0x3666450712d00c28ce3b6c17d7be4d41cc15882ff7813140ff4985b80c69eabafdc9e702da2_big_uint298, }, { - 0x3b00f0f648ec6defbc68d6135d08331e58d16f9928496abfe6933dc4d0bece2ff435b3f1045_cppui_modular298, - 0x1dfb4d888d1b137534826bc566536e54c0c3df69ba26f2173577bad45d7709d18fe89a2b3b5_cppui_modular298, + 0x3b00f0f648ec6defbc68d6135d08331e58d16f9928496abfe6933dc4d0bece2ff435b3f1045_big_uint298, + 0x1dfb4d888d1b137534826bc566536e54c0c3df69ba26f2173577bad45d7709d18fe89a2b3b5_big_uint298, }, { - 0x31226162b0ed7eb00b3bd868ac9850f8d652056121a55e3f6d639877f5697a940aca9d5634c_cppui_modular298, - 0x26a24e91b8347e0ca08efef5b20a5f1636c1270de7be1c5f378bb2628f17e6ca36ff6f203c2_cppui_modular298, + 0x31226162b0ed7eb00b3bd868ac9850f8d652056121a55e3f6d639877f5697a940aca9d5634c_big_uint298, + 0x26a24e91b8347e0ca08efef5b20a5f1636c1270de7be1c5f378bb2628f17e6ca36ff6f203c2_big_uint298, }, { - 0x220d259471ce468a9dd1a3d685c6dd6dd073d6afaf2eb4061cf410d312c6eceba5073857f4c_cppui_modular298, - 0x3348d74a6f6825009030e5d759babd8c7093e82cd16b3fe7dc967bb21bbead3d8c6c9b1866d_cppui_modular298, + 0x220d259471ce468a9dd1a3d685c6dd6dd073d6afaf2eb4061cf410d312c6eceba5073857f4c_big_uint298, + 0x3348d74a6f6825009030e5d759babd8c7093e82cd16b3fe7dc967bb21bbead3d8c6c9b1866d_big_uint298, }, { - 0x2a7db4dd7d199d7696b91839ebe7f15d008f0b4eb1ea3268e47be8006d455f6e841212f0338_cppui_modular298, - 0xda3d80525454d7262de43bb01635a49aba5502fe135b6d074ab84dd9213f2c13452a10daeb_cppui_modular298, + 0x2a7db4dd7d199d7696b91839ebe7f15d008f0b4eb1ea3268e47be8006d455f6e841212f0338_big_uint298, + 0xda3d80525454d7262de43bb01635a49aba5502fe135b6d074ab84dd9213f2c13452a10daeb_big_uint298, }}}; static constexpr const_set_t constants1 = {11963068}; check_field_operations_static(); @@ -469,94 +469,94 @@ BOOST_AUTO_TEST_CASE(field_operation_test_mnt4_fq4) { constexpr value_type element1( {{ - 0x2ec8702bfdda6a3cf3155e0b0fed1a45bdaeab2a50aeb383af86516091fdffb1dd929f408d4_cppui_modular298, - 0x2db7a9802c314b194556ba1937cdf0e8fc38ecf09133815788dc03758c2a744cc0621330a85_cppui_modular298, + 0x2ec8702bfdda6a3cf3155e0b0fed1a45bdaeab2a50aeb383af86516091fdffb1dd929f408d4_big_uint298, + 0x2db7a9802c314b194556ba1937cdf0e8fc38ecf09133815788dc03758c2a744cc0621330a85_big_uint298, }}, {{ - 0x110b67194f3169301ef71fce5c6bd9734f5d59c83f311b79d1e90e3554a824092e83ee3d1aa_cppui_modular298, - 0x4d71748423267212fc9b71f2851f906b7caff8a8a371f4948e2f4cea3fbca99854b384f062_cppui_modular298, + 0x110b67194f3169301ef71fce5c6bd9734f5d59c83f311b79d1e90e3554a824092e83ee3d1aa_big_uint298, + 0x4d71748423267212fc9b71f2851f906b7caff8a8a371f4948e2f4cea3fbca99854b384f062_big_uint298, }}); constexpr value_type element2( {{ - 0x309f7b7995abfbc6b15f27b8e54d5179a473af5a22277fcad58416ff58c91d2ea14c618323a_cppui_modular298, - 0x260b66c38ced3023011d2588d0f6b91bc73ed3df10dbafcaec7b8554e2957183759796ff89d_cppui_modular298, + 0x309f7b7995abfbc6b15f27b8e54d5179a473af5a22277fcad58416ff58c91d2ea14c618323a_big_uint298, + 0x260b66c38ced3023011d2588d0f6b91bc73ed3df10dbafcaec7b8554e2957183759796ff89d_big_uint298, }}, {{ - 0x277a801ef759c8fad30f16f3bb49ccbd22668b1dd1bc56f48be064b357f5f2248a6d4852d3e_cppui_modular298, - 0x220b88fccb81a6ccaacfe031ad6c5d909e3d6415428afbe548f6111593e3310455b7ef1c6be_cppui_modular298, + 0x277a801ef759c8fad30f16f3bb49ccbd22668b1dd1bc56f48be064b357f5f2248a6d4852d3e_big_uint298, + 0x220b88fccb81a6ccaacfe031ad6c5d909e3d6415428afbe548f6111593e3310455b7ef1c6be_big_uint298, }}); constexpr value_type element_add( {{ - 0x23986fd84c4c3fa15a9a0abeac4dbcd2cbec8951643218b04f25565f099a8c131937ea63b0d_cppui_modular298, - 0x17f3947671e454d9fc99649cbfd7fb182d41ef9c936b16843f7276c98d935502d05293d0321_cppui_modular298, + 0x23986fd84c4c3fa15a9a0abeac4dbcd2cbec8951643218b04f25565f099a8c131937ea63b0d_big_uint298, + 0x17f3947671e454d9fc99649cbfd7fb182d41ef9c936b16843f7276c98d935502d05293d0321_big_uint298, }}, {{ - 0x3885e738468b322af20636c217b5a63071c3e4e610ed726e5dc972e8ac9e162db8f1368fee8_cppui_modular298, - 0x26e2a0450db40dedda999750d5be56975608639fccc21b2e91d905e437defb9ddb03276b720_cppui_modular298, + 0x3885e738468b322af20636c217b5a63071c3e4e610ed726e5dc972e8ac9e162db8f1368fee8_big_uint298, + 0x26e2a0450db40dedda999750d5be56975608639fccc21b2e91d905e437defb9ddb03276b720_big_uint298, }}); constexpr value_type element_sub( {{ - 0x39f8707faf6894d88b90b157738c77b8af70cd033d2b4e570fe74c621a617350a1ed541d69b_cppui_modular298, - 0x7ac42bc9f441af64439949066d737cd34fa19118057d18c9c607e20a99502c94aca7c311e8_cppui_modular298, + 0x39f8707faf6894d88b90b157738c77b8af70cd033d2b4e570fe74c621a617350a1ed541d69b_big_uint298, + 0x7ac42bc9f441af64439949066d737cd34fa19118057d18c9c607e20a99502c94aca7c311e8_big_uint298, }}, {{ - 0x256062c79f11c69795c283dfea0ebba2c32c9fdd7c18df237bedbb82dddec2b209bdbc4a46d_cppui_modular298, - 0x1e9b0a18bdeae6b6ced451f2c3d24a62afc36ca856503e0235d1f5b9f1452a62953a5f929a5_cppui_modular298, + 0x256062c79f11c69795c283dfea0ebba2c32c9fdd7c18df237bedbb82dddec2b209bdbc4a46d_big_uint298, + 0x1e9b0a18bdeae6b6ced451f2c3d24a62afc36ca856503e0235d1f5b9f1452a62953a5f929a5_big_uint298, }}); constexpr value_type element_mul( {{ - 0x27adde109a6630689fafb4c98b4acafbbdf160d0149621253a6f216a963151d9d0b52cb9cd2_cppui_modular298, - 0x37b128ce2442b354ea55c96ee99bb1d01eb2e51d999143d26348f5294c1568a824de5201c65_cppui_modular298, + 0x27adde109a6630689fafb4c98b4acafbbdf160d0149621253a6f216a963151d9d0b52cb9cd2_big_uint298, + 0x37b128ce2442b354ea55c96ee99bb1d01eb2e51d999143d26348f5294c1568a824de5201c65_big_uint298, }}, {{ - 0x2df4acf1f2669edc372a8fe2aa867cb43c6474034226815dcb27208b3795f66be5983574224_cppui_modular298, - 0x2bad83d2b5ea04a48f2378550261b0ff190d4844c01791a81e46cf172891e4fdeebdc9aab90_cppui_modular298, + 0x2df4acf1f2669edc372a8fe2aa867cb43c6474034226815dcb27208b3795f66be5983574224_big_uint298, + 0x2bad83d2b5ea04a48f2378550261b0ff190d4844c01791a81e46cf172891e4fdeebdc9aab90_big_uint298, }}); constexpr value_type element_dbl( {{ - 0x21c1648ab47aae179c504110d6ed859ee527852192b94c69292790c042cf6e96557e28211a7_cppui_modular298, - 0x1f9fd73311286fd040d2f92d26af32e5623c08ae13c2e810dbd2f4ea372857cc1b1d1001509_cppui_modular298, + 0x21c1648ab47aae179c504110d6ed859ee527852192b94c69292790c042cf6e96557e28211a7_big_uint298, + 0x1f9fd73311286fd040d2f92d26af32e5623c08ae13c2e810dbd2f4ea372857cc1b1d1001509_big_uint298, }}, {{ - 0x2216ce329e62d2603dee3f9cb8d7b2e69ebab3907e6236f3a3d21c6aa95048125d07dc7a354_cppui_modular298, - 0x9ae2e908464ce425f936e3e50a3f20d6f95ff15146e3e9291c5e99d47f795330a96709e0c4_cppui_modular298, + 0x2216ce329e62d2603dee3f9cb8d7b2e69ebab3907e6236f3a3d21c6aa95048125d07dc7a354_big_uint298, + 0x9ae2e908464ce425f936e3e50a3f20d6f95ff15146e3e9291c5e99d47f795330a96709e0c4_big_uint298, }}); constexpr value_type element_inv( {{ - 0x275fe52589436c84119e92e612e306bb38a2bc6b0d2285f569de5c172b58ceb759043300dd_cppui_modular298, - 0x9f87ebb8f67b631cbdf45085d4d658b850f08be02e1fcb059cbc390b52fe0b2cdfffc694a1_cppui_modular298, + 0x275fe52589436c84119e92e612e306bb38a2bc6b0d2285f569de5c172b58ceb759043300dd_big_uint298, + 0x9f87ebb8f67b631cbdf45085d4d658b850f08be02e1fcb059cbc390b52fe0b2cdfffc694a1_big_uint298, }}, {{ - 0x931764a541aedb5a54fd67d1de71b0d5060c4aa4f7616208caa1eca6f5d946556a9986d631_cppui_modular298, - 0x38bf08f1554cbfd41d3973d1c82cc9c4bfada40c384601ab53394165e86b32cebcb8b2c8397_cppui_modular298, + 0x931764a541aedb5a54fd67d1de71b0d5060c4aa4f7616208caa1eca6f5d946556a9986d631_big_uint298, + 0x38bf08f1554cbfd41d3973d1c82cc9c4bfada40c384601ab53394165e86b32cebcb8b2c8397_big_uint298, }}); constexpr value_type element_pow_C( {{ - 0x1f856985ef90234acadd1a697214747a04c1dd270cdf98ca6a5c11ad800aa1d250b42457e0e_cppui_modular298, - 0x2490e9fb909e98c51289b5effd25cdbdd6a996406ab808dd4d12f76105de85c739bf750909e_cppui_modular298, + 0x1f856985ef90234acadd1a697214747a04c1dd270cdf98ca6a5c11ad800aa1d250b42457e0e_big_uint298, + 0x2490e9fb909e98c51289b5effd25cdbdd6a996406ab808dd4d12f76105de85c739bf750909e_big_uint298, }}, {{ - 0x243e7c0206aae33c5a4d9354486eeef1a784906a8217630c568edc3e0334ad03e8fb1831bd_cppui_modular298, - 0x92a71ad08691b8a9daeb9be8c7419443a5fe4bf5fb6fb91ce362b376f54aabd065fc0c02e5_cppui_modular298, + 0x243e7c0206aae33c5a4d9354486eeef1a784906a8217630c568edc3e0334ad03e8fb1831bd_big_uint298, + 0x92a71ad08691b8a9daeb9be8c7419443a5fe4bf5fb6fb91ce362b376f54aabd065fc0c02e5_big_uint298, }}); constexpr int C1 = 702385922; constexpr value_type element_pow_2( {{ - 0x3181739b8b5fcd6cc2bc6512bf1611ccac5b7018a0c63fa9841d6fb052ff6482a8721e4ca5f_cppui_modular298, - 0x25bd4e0f0f15467cee761e28f8f9e2a693a50472d21744e08e254d14f75dff1fe16bacc266d_cppui_modular298, + 0x3181739b8b5fcd6cc2bc6512bf1611ccac5b7018a0c63fa9841d6fb052ff6482a8721e4ca5f_big_uint298, + 0x25bd4e0f0f15467cee761e28f8f9e2a693a50472d21744e08e254d14f75dff1fe16bacc266d_big_uint298, }}, {{ - 0x1ac6a8f976369568d460f31c1df537a605c50fc6b1de558ff243d66b3d1f1ba4180eb981961_cppui_modular298, - 0x1c017b5dfeadd6387bb4798bf3630eca6dcc3c8a4be79fc9b834c698dc1b7a3bc927eb6ce1_cppui_modular298, + 0x1ac6a8f976369568d460f31c1df537a605c50fc6b1de558ff243d66b3d1f1ba4180eb981961_big_uint298, + 0x1c017b5dfeadd6387bb4798bf3630eca6dcc3c8a4be79fc9b834c698dc1b7a3bc927eb6ce1_big_uint298, }}); constexpr value_type minus_element( {{ - 0xd070ba1495fbc2556c51cfa38ff94a6d8872608bdf5671a865ec0a04f2e911b8814771f72d_cppui_modular298, - 0xe17d24d1b08db490483c0ec111ebe0399fce4427d709946ad090e8b55021c80a545032f57c_cppui_modular298, + 0xd070ba1495fbc2556c51cfa38ff94a6d8872608bdf5671a865ec0a04f2e911b8814771f72d_big_uint298, + 0xe17d24d1b08db490483c0ec111ebe0399fce4427d709946ad090e8b55021c80a545032f57c_big_uint298, }}, {{ - 0x2ac414b3f808bd322ae35b36ec80d57946d8776acf72ff2463fc03cb8c846cc437232822e57_cppui_modular298, - 0x36f864850507bf411a10c3e6209ab5e5de6ad1a8846cfb54ed021d323d30c633e05bde10f9f_cppui_modular298, + 0x2ac414b3f808bd322ae35b36ec80d57946d8776acf72ff2463fc03cb8c846cc437232822e57_big_uint298, + 0x36f864850507bf411a10c3e6209ab5e5de6ad1a8846cfb54ed021d323d30c633e05bde10f9f_big_uint298, }}); static constexpr test_set_t elements1 = { @@ -583,17 +583,17 @@ BOOST_AUTO_TEST_CASE(field_operation_test_mnt6_fq) { using const_set_t = std::array; static constexpr test_set_t elements1 = { - 0x13e0a5422b598aaf0c031434995b02459b127b91c1d19c61a0b7e6305b367e9d6c4ecef24ca_cppui_modular298, - 0x3a2ee65237145a6fec8c095b3acfa5e6e969214f2b1dfb4f47fd258dd1eeadf4a606892870e_cppui_modular298, - 0x12400fc71b33bebcaeb4a28a8b3df93fee45cd9cd39fe31c283be5e77fe9785ec815581abd7_cppui_modular298, - 0x15813abd3b7f56a1695185dea7780b4b47df2986b00355a71933e679368384dc108845c9dbd_cppui_modular298, - 0xdfd40332fa67aaf44e1616dbed9461cc900b87a694ef5531100271a1a620c361c6b0944a2e_cppui_modular298, - 0x27c14a8456b3155e1806286932b6048b3624f72383a338c3416fcc60b66cfd3ad89d9de4994_cppui_modular298, - 0x27f311284963f256e9c61f2f413960b1baebdfe7052158a992b9239586173c5ef5d48021c0b_cppui_modular298, - 0x3191fd7720fb4dbf2833ec75eeda111fa486fa664a30355b5328ade83a1901b876542cd1c4c_cppui_modular298, - 0x2a5232860338c9a2e55e313e9ccd6f738b5e09d156f002f151295a73f188f688a5228623423_cppui_modular298, - 0x1a0957b1025cbf25d4e71aa0e1d0905acccadf4ee31b945787c0048db4d063ea43976d78f3_cppui_modular298, - 0x27eed68b1be09bb33dd766d0af91aca6fb2353b2577e18331fc13fa652053595ddf1310db37_cppui_modular298}; + 0x13e0a5422b598aaf0c031434995b02459b127b91c1d19c61a0b7e6305b367e9d6c4ecef24ca_big_uint298, + 0x3a2ee65237145a6fec8c095b3acfa5e6e969214f2b1dfb4f47fd258dd1eeadf4a606892870e_big_uint298, + 0x12400fc71b33bebcaeb4a28a8b3df93fee45cd9cd39fe31c283be5e77fe9785ec815581abd7_big_uint298, + 0x15813abd3b7f56a1695185dea7780b4b47df2986b00355a71933e679368384dc108845c9dbd_big_uint298, + 0xdfd40332fa67aaf44e1616dbed9461cc900b87a694ef5531100271a1a620c361c6b0944a2e_big_uint298, + 0x27c14a8456b3155e1806286932b6048b3624f72383a338c3416fcc60b66cfd3ad89d9de4994_big_uint298, + 0x27f311284963f256e9c61f2f413960b1baebdfe7052158a992b9239586173c5ef5d48021c0b_big_uint298, + 0x3191fd7720fb4dbf2833ec75eeda111fa486fa664a30355b5328ade83a1901b876542cd1c4c_big_uint298, + 0x2a5232860338c9a2e55e313e9ccd6f738b5e09d156f002f151295a73f188f688a5228623423_big_uint298, + 0x1a0957b1025cbf25d4e71aa0e1d0905acccadf4ee31b945787c0048db4d063ea43976d78f3_big_uint298, + 0x27eed68b1be09bb33dd766d0af91aca6fb2353b2577e18331fc13fa652053595ddf1310db37_big_uint298}; static constexpr const_set_t constants1 = {332771434}; check_field_operations_static(); } @@ -606,59 +606,59 @@ BOOST_AUTO_TEST_CASE(field_operation_test_mnt6_fq3) { static constexpr test_set_t elements1 = { {{ - 0x2ca04ab44858078455357ce7027f603b2e60169f6e2728089c31d43de94857de0f8cf4fecff_cppui_modular298, - 0x17fe793178a3dc42295619e37d3c39c9ae5dc0a738d046d9744e9bdf8058661f0c3c82295af_cppui_modular298, - 0x1806278fd83496047a6ff4572fe4dabe56820a6b4d73c0b06771d763a8f37d1f4c1745525be_cppui_modular298, + 0x2ca04ab44858078455357ce7027f603b2e60169f6e2728089c31d43de94857de0f8cf4fecff_big_uint298, + 0x17fe793178a3dc42295619e37d3c39c9ae5dc0a738d046d9744e9bdf8058661f0c3c82295af_big_uint298, + 0x1806278fd83496047a6ff4572fe4dabe56820a6b4d73c0b06771d763a8f37d1f4c1745525be_big_uint298, }, { - 0x39abbb38fd5dd88b187dc951f6853610c3bbda388b4040b59f85217073c9c7ee2639cdf06d5_cppui_modular298, - 0x24e79da3e9004c8fa879550da47f43e42a1150804cdc9df23dd0597b7d7ae189a118b102252_cppui_modular298, - 0x32cb5f242ff7a6e77fde5deb2257f93218176b243f55c0f764bdb40ec9319ee5bf8491383b7_cppui_modular298, + 0x39abbb38fd5dd88b187dc951f6853610c3bbda388b4040b59f85217073c9c7ee2639cdf06d5_big_uint298, + 0x24e79da3e9004c8fa879550da47f43e42a1150804cdc9df23dd0597b7d7ae189a118b102252_big_uint298, + 0x32cb5f242ff7a6e77fde5deb2257f93218176b243f55c0f764bdb40ec9319ee5bf8491383b7_big_uint298, }, { - 0x2a7c8a1ffe7bb9ad23d8cb33b017e75f5be62193e017b4297b3dcfd7afd66b98eb86c2ef3d3_cppui_modular298, - 0x1169b081a6a026f87f4f3ebd8cecec1423941e36c5d3036f1a5cf84509793756315332b800_cppui_modular298, - 0xf020ae6c0f21689b073d73d09502503d863a64b7379cd130bb6659bc4e967d1c15bd68a974_cppui_modular298, + 0x2a7c8a1ffe7bb9ad23d8cb33b017e75f5be62193e017b4297b3dcfd7afd66b98eb86c2ef3d3_big_uint298, + 0x1169b081a6a026f87f4f3ebd8cecec1423941e36c5d3036f1a5cf84509793756315332b800_big_uint298, + 0xf020ae6c0f21689b073d73d09502503d863a64b7379cd130bb6659bc4e967d1c15bd68a974_big_uint298, }, { - 0x2ec40b489234555b86922e9a54e6d91700da0baafc369be7bd25d8a422ba44233393270e62b_cppui_modular298, - 0x2ee6575ad6ddb614cab73fdb21a9a4d21a823f6b05435d7bf6f7683ab01938c8b563d12735e_cppui_modular298, - 0x210a4438ef77157f446c117156799078d4a06e8b276db44dc32d492b8cfd926cd6d2b41a208_cppui_modular298, + 0x2ec40b489234555b86922e9a54e6d91700da0baafc369be7bd25d8a422ba44233393270e62b_big_uint298, + 0x2ee6575ad6ddb614cab73fdb21a9a4d21a823f6b05435d7bf6f7683ab01938c8b563d12735e_big_uint298, + 0x210a4438ef77157f446c117156799078d4a06e8b276db44dc32d492b8cfd926cd6d2b41a208_big_uint298, }, { - 0x7e14908ff393a62f5c6e25db37271be6f44b06b1dfef0a4d359c6e98d2ad9eca128616b7ce_cppui_modular298, - 0x307fb33edfa7981503d8f8236f9139d1e850e720d0c2a3ac956fc1882504ba72d3cf8056c88_cppui_modular298, - 0x2c214a535d65c86b01d87d7a1609595037ccc97565bb242a93ff057a679728315267d4d3035_cppui_modular298, + 0x7e14908ff393a62f5c6e25db37271be6f44b06b1dfef0a4d359c6e98d2ad9eca128616b7ce_big_uint298, + 0x307fb33edfa7981503d8f8236f9139d1e850e720d0c2a3ac956fc1882504ba72d3cf8056c88_big_uint298, + 0x2c214a535d65c86b01d87d7a1609595037ccc97565bb242a93ff057a679728315267d4d3035_big_uint298, }, { - 0x1d71199b4975e8a660907ec8bc121189c68a5dfac2fe9b7c77ea82a52554fb88d4d9e9fd9fd_cppui_modular298, - 0x2ffcf262f147b88452ac33c6fa7873935cbb814e71a08db2e89d37bf00b0cc3e18790452b5e_cppui_modular298, - 0x300c4f1fb0692c08f4dfe8ae5fc9b57cad0414d69ae78160cee3aec751e6fa3e982e8aa4b7c_cppui_modular298, + 0x1d71199b4975e8a660907ec8bc121189c68a5dfac2fe9b7c77ea82a52554fb88d4d9e9fd9fd_big_uint298, + 0x2ffcf262f147b88452ac33c6fa7873935cbb814e71a08db2e89d37bf00b0cc3e18790452b5e_big_uint298, + 0x300c4f1fb0692c08f4dfe8ae5fc9b57cad0414d69ae78160cee3aec751e6fa3e982e8aa4b7c_big_uint298, }, { - 0x24daec3d446e4157ea7d86931c7cab59005910419fa7bcca958bdef9bb0484751421c7be9a7_cppui_modular298, - 0x1fc4de5a19d41e618210e55a07a542061d6a32b4617b18cd144f71d805f68911378d08697a_cppui_modular298, - 0x2064daaf7ff56ed4460a7689139a2313270bdb5f204a03ad6d2f7aff766941f06e27e9a119e_cppui_modular298, + 0x24daec3d446e4157ea7d86931c7cab59005910419fa7bcca958bdef9bb0484751421c7be9a7_big_uint298, + 0x1fc4de5a19d41e618210e55a07a542061d6a32b4617b18cd144f71d805f68911378d08697a_big_uint298, + 0x2064daaf7ff56ed4460a7689139a2313270bdb5f204a03ad6d2f7aff766941f06e27e9a119e_big_uint298, }, { - 0x296448823914574c22b9cd9ccdc259206663d2d968fa3a4a017656de00a9da52417bf8c2b52_cppui_modular298, - 0x3b3681274845f285af891a0d1d1ff27fcb167d902cb65b3a9bdccfab33b150d02eb20282f1b_cppui_modular298, - 0x29a3f16f714a6894390659a393bef1c31bf8cad70868ef2e5cb7b2383159f6de9c938ae7d82_cppui_modular298, + 0x296448823914574c22b9cd9ccdc259206663d2d968fa3a4a017656de00a9da52417bf8c2b52_big_uint298, + 0x3b3681274845f285af891a0d1d1ff27fcb167d902cb65b3a9bdccfab33b150d02eb20282f1b_big_uint298, + 0x29a3f16f714a6894390659a393bef1c31bf8cad70868ef2e5cb7b2383159f6de9c938ae7d82_big_uint298, }, { - 0x1177e716e67def7292e404a289d4d931d353ca156b80072db8dbd2dbad9cf7b6259d8e5cf5_cppui_modular298, - 0x2f7454d98c65041a40025a34485c4878a29e8c0065a72eefb9b5919d23906ef61261c14cb8_cppui_modular298, - 0x1a53d2ba023b90bbaf5941b79dcd7d131bc9eba69c5cc78f00a0deedd904745cc00d2ff6bef_cppui_modular298, + 0x1177e716e67def7292e404a289d4d931d353ca156b80072db8dbd2dbad9cf7b6259d8e5cf5_big_uint298, + 0x2f7454d98c65041a40025a34485c4878a29e8c0065a72eefb9b5919d23906ef61261c14cb8_big_uint298, + 0x1a53d2ba023b90bbaf5941b79dcd7d131bc9eba69c5cc78f00a0deedd904745cc00d2ff6bef_big_uint298, }, { - 0x39abbb38fd5dd88b187dc951f6853610c3bbda388b4040b59f85217073c9c7ee2639cdf06d5_cppui_modular298, - 0x24e79da3e9004c8fa879550da47f43e42a1150804cdc9df23dd0597b7d7ae189a118b102252_cppui_modular298, - 0x32cb5f242ff7a6e77fde5deb2257f93218176b243f55c0f764bdb40ec9319ee5bf8491383b7_cppui_modular298, + 0x39abbb38fd5dd88b187dc951f6853610c3bbda388b4040b59f85217073c9c7ee2639cdf06d5_big_uint298, + 0x24e79da3e9004c8fa879550da47f43e42a1150804cdc9df23dd0597b7d7ae189a118b102252_big_uint298, + 0x32cb5f242ff7a6e77fde5deb2257f93218176b243f55c0f764bdb40ec9319ee5bf8491383b7_big_uint298, }, { - 0xf2f3118fee21eddf4a4fe1e466d4eb167d5b8a4ab288c8c24475198c3f35c553ab30b01302_cppui_modular298, - 0x23d1029bce964a2020846121cbb07522e7d80e9ce07f6dbb4c2a89f72ce34e143e037dd6a52_cppui_modular298, - 0x23c9543d6f05905dcf6a86ae1907d42e3fb3c4d8cbdbf3e459074e7304483713fe28baada43_cppui_modular298, + 0xf2f3118fee21eddf4a4fe1e466d4eb167d5b8a4ab288c8c24475198c3f35c553ab30b01302_big_uint298, + 0x23d1029bce964a2020846121cbb07522e7d80e9ce07f6dbb4c2a89f72ce34e143e037dd6a52_big_uint298, + 0x23c9543d6f05905dcf6a86ae1907d42e3fb3c4d8cbdbf3e459074e7304483713fe28baada43_big_uint298, }}}; static constexpr const_set_t constants1 = {1042617086}; @@ -673,114 +673,114 @@ BOOST_AUTO_TEST_CASE(field_operation_test_mnt6_fq6) { constexpr value_type element1( {{ - 0x2b254b9c632ab1cb93e575c1b0c5d890eb0a7ee656612c7c37d1c5f03fd346cbd4f9ceae2e1_cppui_modular298, - 0x7370368322d2e40fa97c49d1b9cdc00cc6005a779b8e377dff6108bc7416b71c8f0bfa9938_cppui_modular298, - 0x25b755a137f30bc5da6b21b28357a20669667eb5f6cbb6b821d8939d1370a2886334e7f90b7_cppui_modular298, + 0x2b254b9c632ab1cb93e575c1b0c5d890eb0a7ee656612c7c37d1c5f03fd346cbd4f9ceae2e1_big_uint298, + 0x7370368322d2e40fa97c49d1b9cdc00cc6005a779b8e377dff6108bc7416b71c8f0bfa9938_big_uint298, + 0x25b755a137f30bc5da6b21b28357a20669667eb5f6cbb6b821d8939d1370a2886334e7f90b7_big_uint298, }}, {{ - 0x37020ec205dfd50d6629d194bb28e0231094f047902048bed7db660cadd135b05cc5b187c39_cppui_modular298, - 0x30dfac7da797127d24d3bd5b66895c5139146b253e894bcc68a9a9229849079d46ab1821c95_cppui_modular298, - 0xc5e81aaf1ed4f51ffad6ff70fa2c46d9eda55721079f37f4a9899c394719d0280aabfbf094_cppui_modular298, + 0x37020ec205dfd50d6629d194bb28e0231094f047902048bed7db660cadd135b05cc5b187c39_big_uint298, + 0x30dfac7da797127d24d3bd5b66895c5139146b253e894bcc68a9a9229849079d46ab1821c95_big_uint298, + 0xc5e81aaf1ed4f51ffad6ff70fa2c46d9eda55721079f37f4a9899c394719d0280aabfbf094_big_uint298, }}); constexpr value_type element2( {{ - 0x938d85408f45627918f1ccebb48acf97d3fad71ebbcb368dcbb1fa32d17a05bd452164ab02_cppui_modular298, - 0x2c475110a74073f1b9e81bb00fd5eb59e4c7fbcdb4fe4c9eeaa820074d058fd59d61376e916_cppui_modular298, - 0x195d2d3dabdbbbdcfaceba4f7aba9aa58b45a3f06df7344cff6afe5df3a4806deaee9b50a6_cppui_modular298, + 0x938d85408f45627918f1ccebb48acf97d3fad71ebbcb368dcbb1fa32d17a05bd452164ab02_big_uint298, + 0x2c475110a74073f1b9e81bb00fd5eb59e4c7fbcdb4fe4c9eeaa820074d058fd59d61376e916_big_uint298, + 0x195d2d3dabdbbbdcfaceba4f7aba9aa58b45a3f06df7344cff6afe5df3a4806deaee9b50a6_big_uint298, }}, {{ - 0x2a7aec578f966ff93df221571efd5cb4f8a6d250f90a68f0f74b0ee56321df789c4611cfa1f_cppui_modular298, - 0x21464c1876b0a316b6b927c9aa93cff327a0e4ea1e24cbce279ccbdd62eaa00d723ebe70606_cppui_modular298, - 0xea64135530377ac3298f41053bab4e9de742ae37453aed2f1bbfedbed5f970d529f08c6a42_cppui_modular298, + 0x2a7aec578f966ff93df221571efd5cb4f8a6d250f90a68f0f74b0ee56321df789c4611cfa1f_big_uint298, + 0x21464c1876b0a316b6b927c9aa93cff327a0e4ea1e24cbce279ccbdd62eaa00d723ebe70606_big_uint298, + 0xea64135530377ac3298f41053bab4e9de742ae37453aed2f1bbfedbed5f970d529f08c6a42_big_uint298, }}); constexpr value_type element_add( {{ - 0x345e23f06c1f07f3257492906c0e858a684a2c58421ddfe5148ce5936ceae727a94be4f8de3_cppui_modular298, - 0x337e5478d96da232b47fe04d2b72c75ab12801752eb73016ca9e30931446fb476651f71824e_cppui_modular298, - 0x274d287512b0c783aa180d577b034bb0c21ad8f4fdab29fcf1cf4382f2aaea8f41e3d1ae15d_cppui_modular298, + 0x345e23f06c1f07f3257492906c0e858a684a2c58421ddfe5148ce5936ceae727a94be4f8de3_big_uint298, + 0x337e5478d96da232b47fe04d2b72c75ab12801752eb73016ca9e30931446fb476651f71824e_big_uint298, + 0x274d287512b0c783aa180d577b034bb0c21ad8f4fdab29fcf1cf4382f2aaea8f41e3d1ae15d_big_uint298, }}, {{ - 0x25ad7f4c4e3c1ea45a4177e691398deb7305f3546fdafd1b0ead4f1b63b760f5aecbc357657_cppui_modular298, - 0x16567cc8d70d8f3191b26a1fc8307d57ca7f80cb435e6305cfcd4f294df7f3776ea9d69229a_cppui_modular298, - 0x1b04c2e044f0c6fe32466407635d79577d4e805584cda2523c54989f81d1340fd349c885ad6_cppui_modular298, + 0x25ad7f4c4e3c1ea45a4177e691398deb7305f3546fdafd1b0ead4f1b63b760f5aecbc357657_big_uint298, + 0x16567cc8d70d8f3191b26a1fc8307d57ca7f80cb435e6305cfcd4f294df7f3776ea9d69229a_big_uint298, + 0x1b04c2e044f0c6fe32466407635d79577d4e805584cda2523c54989f81d1340fd349c885ad6_big_uint298, }}); constexpr value_type element_sub( {{ - 0x21ec73485a365ba4025658f2f57d2b976dcad1746aa479135b16a64d12bba67000a7b8637df_cppui_modular298, - 0x16bf2e24d226e0b18a8a23f254b39f937dcdd91dde0a4b6db5c7165b27778fcf75cf883b023_cppui_modular298, - 0x242182cd5d3550080abe360d8babf85c10b22476efec437351e1e3b734365a818485fe44011_cppui_modular298, + 0x21ec73485a365ba4025658f2f57d2b976dcad1746aa479135b16a64d12bba67000a7b8637df_big_uint298, + 0x16bf2e24d226e0b18a8a23f254b39f937dcdd91dde0a4b6db5c7165b27778fcf75cf883b023_big_uint298, + 0x242182cd5d3550080abe360d8babf85c10b22476efec437351e1e3b734365a818485fe44011_big_uint298, }}, {{ - 0xc87226a764965142837b03d9c2b836e17ee1df69715dfcde09057274aaf5637c07f9fb821a_cppui_modular298, - 0xf99606530e66f666e1a9591bbf58c5e1173863b20647ffe410cdd45355e678fd46c59b168f_cppui_modular298, - 0x3987bc42e623fe0816eef6ec04d4be70569bf9d2b575f9411955c0be544dba28784bb6f8653_cppui_modular298, + 0xc87226a764965142837b03d9c2b836e17ee1df69715dfcde09057274aaf5637c07f9fb821a_big_uint298, + 0xf99606530e66f666e1a9591bbf58c5e1173863b20647ffe410cdd45355e678fd46c59b168f_big_uint298, + 0x3987bc42e623fe0816eef6ec04d4be70569bf9d2b575f9411955c0be544dba28784bb6f8653_big_uint298, }}); constexpr value_type element_mul( {{ - 0x8d3a722d66e3deb9e3e23a817a672e4a7777b7227633de0cdbe83f3de0db084860ed6e05f5_cppui_modular298, - 0x1d9da0ee2873cbddc6cbea8bd130b642a58252233a9517d821b23105867d1cc8f8e3762096c_cppui_modular298, - 0x1ca200fb84e152e8e4cece1be0dc2c892996064d5127bea290c50cb5538c2d9a4d93a8e545e_cppui_modular298, + 0x8d3a722d66e3deb9e3e23a817a672e4a7777b7227633de0cdbe83f3de0db084860ed6e05f5_big_uint298, + 0x1d9da0ee2873cbddc6cbea8bd130b642a58252233a9517d821b23105867d1cc8f8e3762096c_big_uint298, + 0x1ca200fb84e152e8e4cece1be0dc2c892996064d5127bea290c50cb5538c2d9a4d93a8e545e_big_uint298, }}, {{ - 0x32d226e51e190838ce9857905d0baf2fe1893f23139523b467ac924adec99c81b0337d98e08_cppui_modular298, - 0x279a3e076479ed256f9165dcff1c51903cd36e7d043177fa8eac4015d4b16dfcefe18db1392_cppui_modular298, - 0x37b12fff7cb9a2602ab0a1e6ad39cbf4e2e16ae51507528e836e837fda74e19d3964c6518d0_cppui_modular298, + 0x32d226e51e190838ce9857905d0baf2fe1893f23139523b467ac924adec99c81b0337d98e08_big_uint298, + 0x279a3e076479ed256f9165dcff1c51903cd36e7d043177fa8eac4015d4b16dfcefe18db1392_big_uint298, + 0x37b12fff7cb9a2602ab0a1e6ad39cbf4e2e16ae51507528e836e837fda74e19d3964c6518d0_big_uint298, }}); constexpr value_type element_dbl( {{ - 0x1a7b1b6b7f1b3d34ddf0707e189f02353fdf2e889372a463af2a6609d26ad9645fb39d5c5c1_cppui_modular298, - 0xe6e06d0645a5c81f52f893a3739b80198c00b4ef371c6efbfec21178e82d6e391e17f53270_cppui_modular298, - 0xf9f2f7528abf1296afbc85fbdc295203c972e27d447b8db8338016379a590dd7c29cff216d_cppui_modular298, + 0x1a7b1b6b7f1b3d34ddf0707e189f02353fdf2e889372a463af2a6609d26ad9645fb39d5c5c1_big_uint298, + 0xe6e06d0645a5c81f52f893a3739b80198c00b4ef371c6efbfec21178e82d6e391e17f53270_big_uint298, + 0xf9f2f7528abf1296afbc85fbdc295203c972e27d447b8db8338016379a590dd7c29cff216d_big_uint298, }}, {{ - 0x3234a1b6c48583b8827928242d6511598af4114b06f0dce8ef3da642ae66b72d6f4b630f871_cppui_modular298, - 0x25efdd2e07f3fe97ffccffb1842609b5dbf3070663c2e30410da2c6e83565b0743163043929_cppui_modular298, - 0x18bd0355e3da9ea3ff5adfee1f4588db3db4aae420f3e6fe9531338728e33a0501557f7e128_cppui_modular298, + 0x3234a1b6c48583b8827928242d6511598af4114b06f0dce8ef3da642ae66b72d6f4b630f871_big_uint298, + 0x25efdd2e07f3fe97ffccffb1842609b5dbf3070663c2e30410da2c6e83565b0743163043929_big_uint298, + 0x18bd0355e3da9ea3ff5adfee1f4588db3db4aae420f3e6fe9531338728e33a0501557f7e128_big_uint298, }}); constexpr value_type element_inv( {{ - 0x2229740213208804b7a307caecd43fae547ce1d4a393980be860a3ca420037a6fb3fedecdc8_cppui_modular298, - 0x2c21a740569cfb57d5c15e6743b60af44fccd06ed1088ee0b126af8e26ef78d1513759ce38e_cppui_modular298, - 0x2f372d4fb01505ba001564145f042ce04d94cc88f008922a6cd8ed6d8357afa68e18b0da09a_cppui_modular298, + 0x2229740213208804b7a307caecd43fae547ce1d4a393980be860a3ca420037a6fb3fedecdc8_big_uint298, + 0x2c21a740569cfb57d5c15e6743b60af44fccd06ed1088ee0b126af8e26ef78d1513759ce38e_big_uint298, + 0x2f372d4fb01505ba001564145f042ce04d94cc88f008922a6cd8ed6d8357afa68e18b0da09a_big_uint298, }}, {{ - 0xbe1724a204fce65a1de9f1f6f5145dc012216eb836a0026d202fa913aee26166c271bb609_cppui_modular298, - 0x22b82b44d7d1b00961e24fd93e35729ef571a5bbfcd087f8b8cbf8898719d9ebc972555655e_cppui_modular298, - 0x1cd0fd8863f24b2bce803c67a11f46a07c5d9458d5377def93cd8eda67a76280f9135e447d4_cppui_modular298, + 0xbe1724a204fce65a1de9f1f6f5145dc012216eb836a0026d202fa913aee26166c271bb609_big_uint298, + 0x22b82b44d7d1b00961e24fd93e35729ef571a5bbfcd087f8b8cbf8898719d9ebc972555655e_big_uint298, + 0x1cd0fd8863f24b2bce803c67a11f46a07c5d9458d5377def93cd8eda67a76280f9135e447d4_big_uint298, }}); constexpr value_type element_pow_C( {{ - 0x13f6912825e1f33c39c955863e222227e40b01a5d609dbf9823754cc371fb75459ba0e4832e_cppui_modular298, - 0x27bcef7ccb3cedd9fc14b02f2e5f72f9df9375c9ce236eea4a4938f2559ea68dd6745dd114a_cppui_modular298, - 0x26b25efbe6119e9ffe0ef0930f9f6e676c9d2a0363cd26e428ced3a5c6b5e45f9171c4ed025_cppui_modular298, + 0x13f6912825e1f33c39c955863e222227e40b01a5d609dbf9823754cc371fb75459ba0e4832e_big_uint298, + 0x27bcef7ccb3cedd9fc14b02f2e5f72f9df9375c9ce236eea4a4938f2559ea68dd6745dd114a_big_uint298, + 0x26b25efbe6119e9ffe0ef0930f9f6e676c9d2a0363cd26e428ced3a5c6b5e45f9171c4ed025_big_uint298, }}, {{ - 0x3a216edce558c508d70fa737a2165214e1040f52bdcb7bd982fb2ed3473b81ca0ab3d6224f8_cppui_modular298, - 0x11fb3ef9eb611f7b499ab1a4966b50aee43d130ef1bd2dab0dd4d157e09c4f3522d32327bc_cppui_modular298, - 0x2cb3c29d951cdc7e154524cb358680f48cfe823a4fa4bba794003b2682fb49efe7d7e13ce69_cppui_modular298, + 0x3a216edce558c508d70fa737a2165214e1040f52bdcb7bd982fb2ed3473b81ca0ab3d6224f8_big_uint298, + 0x11fb3ef9eb611f7b499ab1a4966b50aee43d130ef1bd2dab0dd4d157e09c4f3522d32327bc_big_uint298, + 0x2cb3c29d951cdc7e154524cb358680f48cfe823a4fa4bba794003b2682fb49efe7d7e13ce69_big_uint298, }}); constexpr int C1 = 671190979; constexpr value_type element_pow_2( {{ - 0x39a90e53a451db4bd16cd928809d27b64dd89e69bf8d7550aaaf5ecb166527806f909b06272_cppui_modular298, - 0x1f854c19c9a4e19b7fa4c05f119f0b01a8678c0b8f94244d07e56872f27569bde500d542cff_cppui_modular298, - 0x369cd4cb21ddf49cbd57a11f7d59331dc46c98bd6e35eda00ce9d3a31501e5b72d3614f74a0_cppui_modular298, + 0x39a90e53a451db4bd16cd928809d27b64dd89e69bf8d7550aaaf5ecb166527806f909b06272_big_uint298, + 0x1f854c19c9a4e19b7fa4c05f119f0b01a8678c0b8f94244d07e56872f27569bde500d542cff_big_uint298, + 0x369cd4cb21ddf49cbd57a11f7d59331dc46c98bd6e35eda00ce9d3a31501e5b72d3614f74a0_big_uint298, }}, {{ - 0x373b855899523e4c57836379670894e20c69c49864dec3a935b3953332f9909e021755b5b37_cppui_modular298, - 0x1f7ba018368f998f5361fc232c07fac7a3a34d90b53492ab9f7d0c1f34b4935b17bc242fda0_cppui_modular298, - 0x1cbab6642ca9a2c1111552f87aeb3d87dfc6fd9a89e77add4a829d3321af7916982bd42cde6_cppui_modular298, + 0x373b855899523e4c57836379670894e20c69c49864dec3a935b3953332f9909e021755b5b37_big_uint298, + 0x1f7ba018368f998f5361fc232c07fac7a3a34d90b53492ab9f7d0c1f34b4935b17bc242fda0_big_uint298, + 0x1cbab6642ca9a2c1111552f87aeb3d87dfc6fd9a89e77add4a829d3321af7916982bd42cde6_big_uint298, }}); constexpr value_type minus_element( {{ - 0x10aa3030e40f7496b5f505439826d65bab2b505dc2ee881888a75fe66d686d6775463151d20_cppui_modular298, - 0x34987865150cf8214f42b6682d4fd2ebc9d5c99c9f96d11ce083154ae5fa48c1814f40566c9_cppui_modular298, - 0x1618262c0f471a9c6f6f5952c5950ce62ccf508e2283fddc9ea0923999cb11aae70b1806f4a_cppui_modular298, + 0x10aa3030e40f7496b5f505439826d65bab2b505dc2ee881888a75fe66d686d6775463151d20_big_uint298, + 0x34987865150cf8214f42b6682d4fd2ebc9d5c99c9f96d11ce083154ae5fa48c1814f40566c9_big_uint298, + 0x1618262c0f471a9c6f6f5952c5950ce62ccf508e2283fddc9ea0923999cb11aae70b1806f4a_big_uint298, }}, {{ - 0x4cd6d0b415a5154e3b0a9708dc3cec985a0defc892f6bd5e89dbfc9ff6a7e82ed7a4e783c8_cppui_modular298, - 0xaefcf4f9fa313e52506bda9e263529b5d21641edac668c857cf7cb414f2ac960394e7de36c_cppui_modular298, - 0x2f70fa22554cd7104a2d0b0e3949ea7ef75b79d208d5c11575e08c1318ca1730c9954040f6d_cppui_modular298, + 0x4cd6d0b415a5154e3b0a9708dc3cec985a0defc892f6bd5e89dbfc9ff6a7e82ed7a4e783c8_big_uint298, + 0xaefcf4f9fa313e52506bda9e263529b5d21641edac668c857cf7cb414f2ac960394e7de36c_big_uint298, + 0x2f70fa22554cd7104a2d0b0e3949ea7ef75b79d208d5c11575e08c1318ca1730c9954040f6d_big_uint298, }}); static constexpr test_set_t elements1 = { @@ -803,7 +803,7 @@ BOOST_AUTO_TEST_CASE(test_goldilocks) { using field_type = nil::crypto3::algebra::fields::goldilocks64; using value_type = field_type::value_type; constexpr value_type val = 0xdef0; - static_assert(val.data == 0xdef0u, "goldilocks initialization error"); + static_assert(val.data.base() == 0xdef0u, "goldilocks initialization error"); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/algebra/test/pairing.cpp b/crypto3/libs/algebra/test/pairing.cpp index 622e2b08c0..f9db4e0452 100644 --- a/crypto3/libs/algebra/test/pairing.cpp +++ b/crypto3/libs/algebra/test/pairing.cpp @@ -38,8 +38,6 @@ #include #include -#include - #include #include #include @@ -59,7 +57,6 @@ using namespace nil::crypto3::algebra::pairing; using namespace nil::crypto3::algebra; -using namespace boost::multiprecision; namespace boost { namespace test_tools { @@ -174,7 +171,7 @@ void check_pairing_operations(std::vector const& Fr_elements, std::cout << " * Reduced pairing tests with pow started..." << std::endl; BOOST_CHECK_EQUAL( *pair_reduced(Fr_elements[VKx_poly] * G1_elements[A1], G2_elements[B1]), - pair_reduced(G1_elements[A1], G2_elements[B1])->pow(Fr_elements[VKx_poly].data)); + pair_reduced(G1_elements[A1], G2_elements[B1])->pow(Fr_elements[VKx_poly].data.base())); std::cout << " * Reduced pairing tests with pow finished." << std::endl << std::endl; std::cout << " * Miller loop tests started..." << std::endl; diff --git a/crypto3/libs/algebra/test/short_weierstrass_coordinates.cpp b/crypto3/libs/algebra/test/short_weierstrass_coordinates.cpp index 6792e95fc0..ba145be196 100644 --- a/crypto3/libs/algebra/test/short_weierstrass_coordinates.cpp +++ b/crypto3/libs/algebra/test/short_weierstrass_coordinates.cpp @@ -41,8 +41,6 @@ #include -#include - using namespace nil::crypto3::algebra; diff --git a/crypto3/libs/algebra/test/type_traits.cpp b/crypto3/libs/algebra/test/type_traits.cpp index 0dff7d8553..6df54b7f8b 100644 --- a/crypto3/libs/algebra/test/type_traits.cpp +++ b/crypto3/libs/algebra/test/type_traits.cpp @@ -51,8 +51,6 @@ #include -#include - #include using namespace nil::crypto3::algebra; diff --git a/crypto3/libs/block/CMakeLists.txt b/crypto3/libs/block/CMakeLists.txt deleted file mode 100644 index c4b13c673f..0000000000 --- a/crypto3/libs/block/CMakeLists.txt +++ /dev/null @@ -1,209 +0,0 @@ -#---------------------------------------------------------------------------# -# Copyright (c) 2018-2020 Mikhail Komarov -# -# Distributed under the Boost Software License, Version 1.0 -# See accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt -#---------------------------------------------------------------------------# - -include(CMConfig) -include(CMSetupVersion) - -cm_project(block WORKSPACE_NAME ${CMAKE_WORKSPACE_NAME} LANGUAGES C CXX) - -include(TargetArchitecture) -include(TargetConfiguration) -include(PlatformConfiguration) - -include(CheckSSE) -include(CheckAVX) - -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_AES - "Build with AES block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_ARIA - "Build with ARIA block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_BLOWFISH - "Build with Blowfish block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_CAMELLIA - "Build with Camellia block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_CAST - "Build with Cast block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_DES - "Build with DES block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_GOST_28147_89 - "Build with GOST.28147.89 block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_IDEA - "Build with IDEA block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_KASUMI - "Build with Kasumi block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_MD4 - "Build with MD4 block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_MD5 - "Build with MD5 block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_MISTY1 - "Build with Misty1 block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_NOEKEON - "Build with Noekeon block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_NOEKEON_SIMD - "Build with Noekeon block encryption through SMID instruction set support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SEED - "Build with Seed block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SERPENT - "Build with Serpent block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SHACAL2 - "Build with Shacal2 block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SM4 - "Build with SM4 block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_TWOFISH - "Build with Twofish block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_THREEFISH - "Build with Threefish block encryption support" TRUE) -option(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_XTEA - "Build with XTEA block encryption support" TRUE) - -set(BUILD_WITH_TARGET_ARCHITECTURE "" CACHE STRING "Target build architecture") - -if(BUILD_WITH_TARGET_ARCHITECTURE) - set(CMAKE_TARGET_ARCHITECTURE ${BUILD_WITH_TARGET_ARCHITECTURE}) -else() - target_architecture(CMAKE_TARGET_ARCHITECTURE) -endif() - -define_target_architecture(${CMAKE_UPPER_WORKSPACE_NAME} ${CMAKE_TARGET_ARCHITECTURE}) -define_target_endianness(${CMAKE_UPPER_WORKSPACE_NAME} ${CMAKE_TARGET_ARCHITECTURE}) -define_target_platform_features(${CMAKE_UPPER_WORKSPACE_NAME}) - -check_sse() -check_avx() - -set(BUILD_WITH_CONFIGURATION_FILE_DIR "${CMAKE_CURRENT_LIST_DIR}/cmake" CACHE STRING "Directory for build.hpp lookup") - - - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_AES) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_RIJNDAEL) - - if(${CMAKE_TARGET_ARCHITECTURE} STREQUAL "armv8" OR ${CMAKE_TARGET_ARCHITECTURE} STREQUAL "arm64") - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_RIJNDAEL_ARMV8) - elseif(${CMAKE_TARGET_ARCHITECTURE} STREQUAL "ppc64") - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_RIJNDAEL_POWER8) - endif() -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_ARIA) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_ARIA) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_BLOWFISH) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_BLOWFISH) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_CAMELLIA) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_CAMELLIA) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_CAST128) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_CAST -D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_CAST_128 - -D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_CAST_256) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_DES) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_DES) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_GOST_28147_89) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_GOST_28147_89) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_IDEA) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_IDEA) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_KASUMI) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_KASUMI) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_MISTY1) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_MISTY1) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_MD4) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_MD4) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_MD5) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_MD5) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_NOEKEON) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_NOEKEON) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SEED) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_SEED) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SERPENT) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_SERPENT) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SHACAL2) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_SHACAL2) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_SM4) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_SM4) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_THREEFISH) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_THREEFISH) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_TWOFISH) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_TWOFISH) -endif() - -if(${CMAKE_UPPER_WORKSPACE_NAME}_${CURRENT_UPPER_PROJECT_NAME}_XTEA) - add_definitions(-D${CMAKE_UPPER_WORKSPACE_NAME}_HAS_XTEA) -endif() - -cm_setup_version(VERSION 0.1.0 PREFIX ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}) - -add_library(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE) -add_library(${CMAKE_WORKSPACE_NAME}::${CURRENT_PROJECT_NAME} ALIAS ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}) - -set_target_properties(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} PROPERTIES - EXPORT_NAME ${CURRENT_PROJECT_NAME}) - -if(${CMAKE_TARGET_ARCHITECTURE} STREQUAL "x86_64" OR ${CMAKE_TARGET_ARCHITECTURE} STREQUAL "x86") - if(SSE2_FOUND) - target_compile_definitions(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - "${CMAKE_UPPER_WORKSPACE_NAME}_HAS_RIJNDAEL_NI") - target_compile_options(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE "-maes;-mpclmul;-mssse3") - elseif(SSSE3_FOUND) - target_compile_definitions(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - "${CMAKE_UPPER_WORKSPACE_NAME}_HAS_RIJNDAEL_SSSE3") - target_compile_options(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE "-maes;-mpclmul;-mssse3") - endif() -elseif(${CMAKE_TARGET_ARCHITECTURE} STREQUAL "armv8" OR ${CMAKE_TARGET_ARCHITECTURE} STREQUAL "arm64") - target_compile_definitions(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - "${CMAKE_UPPER_WORKSPACE_NAME}_HAS_RIJNDAEL_ARMV8") -elseif(${CMAKE_TARGET_ARCHITECTURE} STREQUAL "ppc64") - target_compile_definitions(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - "${CMAKE_UPPER_WORKSPACE_NAME}_HAS_RIJNDAEL_POWER8") -endif() - -target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - Boost::container) - -target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - $ - $ - - ${Boost_INCLUDE_DIRS}) - -include(CMTest) -add_tests(test) - -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/crypto3/libs/block/docs/concepts.md b/crypto3/libs/block/docs/concepts.md deleted file mode 100644 index 4fabec2cb4..0000000000 --- a/crypto3/libs/block/docs/concepts.md +++ /dev/null @@ -1,45 +0,0 @@ -# Concepts # {#block_ciphers_concepts} - -@tableofcontents - -## BlockCipher Concept ## {#block_cipher_concept} - -A ```BlockCipher``` is an object intended to compute non-isomorphic permutations over particular sized integers (e.g. rijndael). - -### Requirements ### {#block_ciphers_concepts_requirements} - -The type ```X``` satisfies ```BlockCipher``` if - -Given -* ```WordType```, the type named by ```X::word_type``` -* ```KeyType```, the type named by ```X::key_type``` -* ```BlockType```, the type named by ```X::block_type``` -* ```RoundConstantsType```, the type named by ```X::round_constants_type``` -* ```StreamProcessor```, the type template named by ```X::stream_processor``` - -The following type members must be valid and have their specified effects - -|Expression |Type |Requirements and Notes | -|-----------------------------|------------------------|-----------------------| -|```X::block_type``` |```BlockType``` |```BlockType``` type is a ```SequenceContainer``` of type ```T``` or ```std::array```| -|```X::word_type``` |```WordType``` |```WordType``` type satisfies ```Integral``` concept| -|```X::key_type``` |```KeyType``` |```KeyType``` type is a ```SequenceContainer``` of type ```T```| -|```X::round_constants_type```|```RoundConstantsType```|```RoundConstantsType``` type satisfies ```Integral``` concept| - -The following static data member definitions must be valid and have their specified effects - -|Expression |Type |Requirements and Notes | -|--------------------|-----------------|---------------------------------------| -|```X::word_bits``` |```std::size_t```|```Integral``` bits amount in ```WordType```| -|```X::key_bits``` |```std::size_t```|```Integral``` bits amount in ```KeyType```| -|```X::block_bits``` |```std::size_t```|```Integral``` bits amount in ```BlockType```| -|```X::block_words```|```std::size_t```|```Integral``` amount of ```WordType``` values in ```BlockType```| -|```X::rounds``` |```std::size_t```|```Integral``` amount of rounds the algorithm does.| - -The following expressions must be valid and have their specified effects - -|Expression |Requirements |Return Type | -|---------------------------|------------------|-------------------------------| -|```X(key_type)```|Constructs stateful ```BlockCipher``` object with input key of ```key_type```|```BlockCipher```| -|```X.encrypt(block_type)```|Encrypts a block of data in decoded format specified for particular algorithm. A block can be of a variable size. Should be a non-mutating function depending only on a ```BlockCipher``` object inner state of ```key_type``` type.|```block_type```| -|```X.decrypt(block_type)```|Decrypts a block of data in encoded format specified for particular algorithm. A block can be of a variable size. Should be a non-mutating function depending only on a ```BlockCipher``` object inner state of ```key_type``` type.|```block_type```| diff --git a/crypto3/libs/block/docs/extension.md b/crypto3/libs/block/docs/extension.md deleted file mode 100644 index 30dcc5e47b..0000000000 --- a/crypto3/libs/block/docs/extension.md +++ /dev/null @@ -1,3 +0,0 @@ -# Extension {#block_ciphers_extension_manual} - -@tableofcontents \ No newline at end of file diff --git a/crypto3/libs/block/docs/implementation.md b/crypto3/libs/block/docs/implementation.md deleted file mode 100644 index 4a786994aa..0000000000 --- a/crypto3/libs/block/docs/implementation.md +++ /dev/null @@ -1,336 +0,0 @@ -# Implementation # {#block_ciphers_impl} - -@tableofcontents - -Block ciphers usage is usually split to three stages: - -1. Initialization (key scheduling) -2. Accumulation (data processing/preprocessing) -3. Encryption - -This separation defines the implementation architecture. - -Some particular cases merge accumulation step with encryption step. This means -block gets encrypted as far as it is found filled with enough data. - -## Architecture Overview ## {#block_ciphers_architecture} - -Block cipher library architecture consists of several parts listed below: - -1. Algorithms -2. Stream Processors -3. Cipher Algorithms -4. Accumulators -5. Value Processors - -@dot -digraph block_cipher_arch { -bgcolor="#151515" -rankdir="TB" -node [shape="box"] - - a [label="Algorithms" color="#f5f2f1" fontcolor="#f5f2f1" fontname="helvetica" URL="@ref block_cipher_algorithms"]; - b [label="Stream Processors" color="#f5f2f1" fontcolor="#f5f2f1" fontname="helvetica" URL="@ref block_cipher_stream"]; - c [label="Cipher Algorithms" color="#f5f2f1" fontcolor="#f5f2f1" fontname="helvetica" URL="@ref block_cipher_policies"]; - d [label="Accumulators" color="#f5f2f1" fontcolor="#f5f2f1" fontname="helvetica" URL="@ref block_cipher_accumulators"]; - e [label="Value Processors" color="#f5f2f1" fontcolor="#f5f2f1" fontname="helvetica" URL="@ref block_cipher_value"]; - - a -> b; - b -> c; - c -> d; - d -> e; -} -@enddot - -## Algorithms ## {#block_cipher_algorithms} - -Implementation of a library is considered to be highly compliant with STL. So -the crucial point is to have ciphers to be usable in the same way as STL -algorithms do. - -STL algorithms library mostly consists of generic iterator and since C++20 -range-based algorithms over generic concept-compliant types. Great example is -`std::transform` algorithm: - -```cpp -template -OutputIterator transform(InputIterator first, InputIterator last, OutputIterator out, UnaryOperation unary_op); -``` - -Input values of type `InputIterator` operate over any iterable range, no -matter which particular type is supposed to be processed. While -`OutputIterator` provides a type-independent output place for the algorithm -to put results no matter which particular range this `OutputIterator` -represents. - -Since C++20 this algorithm got it analogous inside Ranges library as follows: - -```cpp -template -OutputRange transform(InputRange rng, OutputRange out, UnaryOperation unary_op); -``` - -This particular modification takes no difference if `InputRange` is a -`Container` or something else. The algorithm is generic just as data -representation types are. - -As much as such algorithms are implemented as generic ones, block cipher -algorithms should follow that too: - -```cpp -template -OutputIterator encrypt(InputIterator first, InputIterator last, KeyIterator kfirst, KeyIterator klast, OutputIterator out); -``` - -[`BlockCipher`](@ref block_cipher_concept) represents the particular block -cipher will be used. `InputIterator` represents the input data coming to be -encrypted. Since block ciphers rely on secret key `KeyIterator` represents the -key data, and `OutputIterator` is exactly the same as it was in `std::transform` -algorithm - it handles all the output storage operations. - -The most obvious difference between `std::transform` is a representation of a -policy defining the particular behaviour of an algorithm. `std::transform` -proposes to pass it as a reference to `Functor`, which is also possible in -case of [`BlockCipher`](@ref block_cipher_concept) policy used in function -already pre-scheduled: - -```cpp -template -OutputIterator encrypt(InputIterator first, InputIterator last, KeyIterator kfirst, KeyIterator klast, OutputIterator out); -``` - -Algorithms are no more than an internal structures initializer wrapper. In this -particular case algorithm would initialize stream processor fed with accumulator -set with [`block`](@ref accumulators::block) accumulator inside initialized -with [`BlockCipher`](@ref block_cipher_concept) initialized with `KeyType` -retrieved from input `KeyIterator` instances. - -## Stream Data Processing ## {#block_cipher_stream} - -Block ciphers are usually defined for processing `Integral` value typed byte -sequences of specific size packed in blocks (e.g. `rijndael` is defined for -blocks of words which are actually plain `n`-sized arrays of `uint32_t` ). -Input data in the implementation proposed is supposed to be a various-length -input stream, which length could be not even to block size. - -This requires an introduction of stream processor specified with particular -parameter set unique for each [`BlockCipher`](@ref block_cipher_concept) type, -which takes input data stream and gets it split to blocks filled with converted -to appropriate size integers (words in the cryptography meaning, not machine words). - -Example. Lets assume input data stream consists of 16 bytes as follows. - -@dot -digraph bytes { -bgcolor="#151515" -node [shape=record color="#f5f2f1" fontcolor="#f5f2f1" fontname="helvetica"]; - -struct1 [label="0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x10 | 0x11 | 0x12 | 0x13 - | 0x14 | 0x15"]; - -} -@enddot - -Lets assume the selected cipher to be used is Rijndael with 32 bit word size, -128 bit block size and 128 bit key size. This means input data stream needs to -be converted to 32 bit words and merged to 128 bit blocks as follows: - -@dot -digraph bytes_to_words { -bgcolor="#151515" -node [shape=record color="#f5f2f1" fontcolor="#f5f2f1" fontname="helvetica"]; - -struct1 [label=" 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x10 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15"]; - -struct2 [label=" 0x00 0x01 0x02 0x03 | 0x04 0x05 0x06 0x07 | 0x08 0x09 0x10 0x11 | 0x12 0x13 0x14 0x15"]; - -struct3 [label=" 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 - 0x15"]; - -struct1:b0 -> struct2:w0 -struct1:b1 -> struct2:w0 -struct1:b2 -> struct2:w0 -struct1:b3 -> struct2:w0 - -struct1:b4 -> struct2:w1 -struct1:b5 -> struct2:w1 -struct1:b6 -> struct2:w1 -struct1:b7 -> struct2:w1 - -struct1:b8 -> struct2:w2 -struct1:b9 -> struct2:w2 -struct1:b10 -> struct2:w2 -struct1:b11 -> struct2:w2 - -struct1:b12 -> struct2:w3 -struct1:b13 -> struct2:w3 -struct1:b14 -> struct2:w3 -struct1:b15 -> struct2:w3 - -struct2:w0 -> struct3:bl0 -struct2:w1 -> struct3:bl0 -struct2:w2 -> struct3:bl0 -struct2:w3 -> struct3:bl0 -} - -@enddot - -Now with this a [`BlockCipher`](@ref block_cipher_concept) instance of -[`rijndael`](@ref block::rijndael) can be fed. - -This mechanism is handled with `stream_processor` template class specified for -each particular cipher with parameters required. Block ciphers suppose only -one type of stream processor exist - the one which split the data to blocks, -converts them and passes to `AccumulatorSet` reference as cipher input of -format required. The rest of data not even to block size gets converted too and -fed value by value to the same `AccumulatorSet` reference. - -## Data Type Conversion ## {#block_cipher_data} - -Since block cipher algorithms are usually defined for `Integral` types or byte -sequences of unique format for each cipher, encryption function being generic -requirement should be handled with particular cipher-specific input data format -converter. - -For example [`rijndael` cipher](@ref block::rijndael) is defined over blocks of -32 bit words, which could be represented with `uint32_t`. This means all the -input data should be in some way converted to 4 byte sized `Integral` type. -In case of `InputIterator` is defined over some range of `Integral` value -type, this is is handled with plain byte repack as shown in previous section. -This is a case with both input stream and required data format are satisfy the -same concept. - -The more case with input data being presented by sequence of various type `T` -requires for the `T` to has conversion operator `operator Integral()` to the -type required by particular [`BlockCipher`](@ref block_cipher_concept) policy. - -Example. Let us assume the following class is presented: -```cpp -class A { -public: - std::size_t vals; - std::uint16_t val16; - std::char valc; -}; -``` - -Now let us assume there exists an initialized and filled with random values -`SequenceContainer` of value type `A`: - -```cpp -std::vector a; -``` - -To feed the [`BlockCipher`](@ref block_cipher_concept) with the data presented, -it is required to convert `A` to `Integral` type which is only available if `A` -has conversion operator in some way as follows: - -```cpp -class A { -public: - operator uint128_t() { - return (vals << (3U * CHAR_BIT)) & (val16 << 16) & valc; - } - - std::size_t vals; - std::uint16_t val16; - std::char valc; -}; -``` - -This part is handled internally with `stream_processor` configured for each -particular cipher. - -## Block Cipher Algorithms ## {#block_cipher_policies} - -Block cipher algorithms architecturally are stateful policies, which structural -contents are regulated by concepts and runtime content is a scheduled key data. -Block cipher policies are required to be compliant with -[`BlockCipher` concept](@ref block_cipher_concept). - -[`BlockCipher`](@ref block_cipher_concept) policies are required to be -constructed with particular policy-compliant strictly-typed key data, usually -represented by `BlockCipher::key_type`. This means construction of such a policy -is quite a heavy task, so this should be handled with care. The result of -a [`BlockCipher`](@ref block_cipher_concept) construction is filled and -strictly-typed key schedule data member. - -Once initialized with particular key, [`BlockCipher`](@ref block_cipher_concept) -policy is not meant to be reinitialized, but only destructed. Destruction of a -[`BlockCipher`](@ref block_cipher_concept) instance should zeroize key schedule data. - -Usually such a [`BlockCipher`](@ref block_cipher_concept) policy would contain -`constexpr static const std::size_t`-typed numerical cipher parameters, such as -block bits, word bits, block words or cipher rounds. - -Coming to typedefs contained in policy - they meant to be mostly a fixed-length -arrays (usually `std::array`), which guarantees type-safety and no occasional -input data length issues. - -Functions contained in policy are meant to process one block of strictly-typed -data (usually it is represented by `block_type` typedef) per call. -Such functions are stateful with respect to key schedule data represented by -`key_schedule_type` and generated while block cipher constructor call. - -## Accumulators ## {#block_cipher_accumulators} - -Encryption contains an accumulation step, which is implemented with -[Boost.Accumulators](https://boost.org/libs/accumulators) library. - -All the concepts are held. - -Block ciphers contains pre-defined [`block::accumulator_set`](@ref nil::crypto3::block::accumulator_set), -which is a `boost::accumulator_set` with pre-filled -[`block` accumulator](@ref nil::crypto3::accumulators::block). - -Block accumulator accepts only one either `block_type::value_type` or `block_type` -at insert. - -Accumulator is implemented as a caching one. This means there is an input cache -sized as same as particular `BlockCipher::block_type`, which accumulates -unprocessed data. After it gets filled, data gets encrypted, then it gets moved -to the main accumulator storage, then cache gets emptied. - -[`block` accumulator](@ref accumulators::block) internally uses -[`bit_count` accumulator](@ref accumulators::bit_count) and designed to be -combined with other accumulators available for -[Boost.Accumulators](https://boost.org/libs/accumulators). - -Example. Let's assume there is an accumulator set, which intention is to encrypt -all the incoming data with [`rijndael<128, 128>` cipher](@ref block::rijndael) -and to compute a [`sha2<256>` hashes](@ref hashes::sha2) of all the incoming data -as well. - -This means there will be an accumulator set defined as follows: -```cpp -using namespace boost::accumulators; -using namespace nil::crypto3; - -boost::accumulator_set< - accumulators::block>, - accumulators::hash>> acc; -``` - -Extraction is supposed to be defined as follows: -```cpp -std::string hash = extract::hash>(acc); -std::string ciphertext = extract::block>(acc); -``` - -## Value Postprocessors ## {#block_cipher_value} - -Since the accumulator output type is strictly tied to [`digest_type`](@ref block::digest_type) -of particular [`BlockCipher`](@ref block_cipher_concept) policy, the output -format in generic is closely tied to digest type too. Digest type is usually -defined as fixed or variable length byte array, which is not always the format of -container or range user likes to store output in. It could easily be a -`std::vector` or a `std::string`, so there is a [`cipher_value`](@ref cipher_value) -state holder which is made to be implicitly convertible to various container and -range types with internal data repacking implemented. - -Such a state holder is split to a couple of types: -1. Value holder. Intended to have an internal output data storage. -Actually stores the `AccumulatorSet` with digest data. -2. Reference holder. Intended to store a reference to external `AccumulatorSet`, -which is usable in case of data gets appended to existing accumulator. - diff --git a/crypto3/libs/block/docs/index.md b/crypto3/libs/block/docs/index.md deleted file mode 100644 index 695155c949..0000000000 --- a/crypto3/libs/block/docs/index.md +++ /dev/null @@ -1,5 +0,0 @@ -# Block Ciphers {#block_cipher_index} -@subpage block_ciphers_introduction -@subpage block_ciphers_manual -@subpage block_ciphers_concepts -@subpage block_ciphers_impl \ No newline at end of file diff --git a/crypto3/libs/block/docs/introduction.md b/crypto3/libs/block/docs/introduction.md deleted file mode 100644 index 9aad941474..0000000000 --- a/crypto3/libs/block/docs/introduction.md +++ /dev/null @@ -1,22 +0,0 @@ -# Introduction # {#block_ciphers_introduction} - -@tableofcontents - -Crypto3.Block library extends the =nil; Crypto3 C++ -cryptography suite and provides a set of block ciphers -implemented in way C++ standard library implies: -concepts, algorithms, predictable behavior, latest -standard features support and clean architecture without compromising security and performance. - -Crypto3.Block consists of several parts to review: -* [Manual](@ref block_ciphers_manual). -* [Implementation](@ref block_ciphers_impl). -* [Concepts](@ref block_ciphers_concepts). - -## Dependencies ## {#block_ciphers_dependencies} - -Internal dependencies: -Crypto3.Block has no dependencies on other suite libraries and can be used standalone. - -External dependencies: -1. [Boost](https://boost.org) (>= 1.58) diff --git a/crypto3/libs/block/docs/manual.md b/crypto3/libs/block/docs/manual.md deleted file mode 100644 index aff73f9bff..0000000000 --- a/crypto3/libs/block/docs/manual.md +++ /dev/null @@ -1,3 +0,0 @@ -# Manual {#block_ciphers_manual} -@subpage block_ciphers_usage_manual -@subpage block_ciphers_extension_manual \ No newline at end of file diff --git a/crypto3/libs/block/docs/usage.md b/crypto3/libs/block/docs/usage.md deleted file mode 100644 index 807d21d096..0000000000 --- a/crypto3/libs/block/docs/usage.md +++ /dev/null @@ -1,72 +0,0 @@ -# Usage {#block_ciphers_usage_manual} - -@tableofcontents - -## Quick Start - -The easiest way to use Crypto3.Block library is to use an algorithm with explicit key initialization and - implicit state usage. Following example encrypts byte sequence with AES block cipher: - -```cpp - -#include -#include - -using namespace nil::crypto3; - -int main(int argc, char *argv[]) { - - std::string input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f\xac\x45\xaf\x8e\x51" - "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11\xe5\xfb\xc1\x19\x1a\x0a\x52\xef\xf6\x9f\x24\x45\xdf\x4f\x9b\x17\xad\x2b\x41\x7b\xe6\x6c\x37\x10"; - - std::string key = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"; - - - std::string out = encrypt>(input.begn(), input.end(), key); - - assert(out == "3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf" - "43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4"); -} - -``` - -Similar technique is available for ranges: - -```cpp - -#include -#include - -using namespace nil::crypto3; - -int main(int argc, char *argv[]) { - - std::string input = "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f\xac\x45\xaf\x8e\x51" - "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11\xe5\xfb\xc1\x19\x1a\x0a\x52\xef\xf6\x9f\x24\x45\xdf\x4f\x9b\x17\xad\x2b\x41\x7b\xe6\x6c\x37\x10"; - - std::string key = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"; - - - std::string out = encrypt>(input, key); - - assert(out == "3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf" - "43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4"); -} - -``` - -## Stateful encryption - -In case of accumulative encryption requirement is present, following example demonstrates -[accumulator](@ref block::accumulator_set) usage: - -```cpp -#include -#include - -using namespace nil::crypto3; - -int main(int argc, char *argv[]) { - block::accumulator_set acc; -} -``` \ No newline at end of file diff --git a/crypto3/libs/block/include/nil/crypto3/block/accumulators/bits_count.hpp b/crypto3/libs/block/include/nil/crypto3/block/accumulators/bits_count.hpp deleted file mode 100644 index b5804c2ecd..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/accumulators/bits_count.hpp +++ /dev/null @@ -1,95 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2019 Aleksey Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BITS_COUNT_HPP -#define CRYPTO3_BITS_COUNT_HPP - -#include - -#include -#include -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace accumulators { - namespace impl { - - /////////////////////////////////////////////////////////////////////////////// - // bits_count_impl - struct bits_count_impl : boost::accumulators::accumulator_base { - // for boost::result_of - typedef std::size_t result_type; - - bits_count_impl(boost::accumulators::dont_care) : cnt(0) { - } - - template - inline void operator()(const ArgumentPack &args) { - resolve_type(args[boost::accumulators::sample], args[bits | std::size_t()]); - } - - inline result_type result(boost::accumulators::dont_care) const { - return cnt; - } - - protected: - template - inline void resolve_type(const Block &value, std::size_t bits) { - cnt += bits; - } - - std::size_t cnt; - }; - - } // namespace impl - - /////////////////////////////////////////////////////////////////////////////// - // tag::count - // - namespace tag { - struct bits_count : boost::accumulators::depends_on<> { - /// INTERNAL ONLY - /// - typedef boost::mpl::always impl; - }; - } // namespace tag - - /////////////////////////////////////////////////////////////////////////////// - // extract::count - // - namespace extract { - boost::accumulators::extractor const bits_count = {}; - - BOOST_ACCUMULATORS_IGNORE_GLOBAL(bits_count) - } // namespace extract - - } // namespace accumulators - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_BLOCK_BITS_COUNT_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/accumulators/block.hpp b/crypto3/libs/block/include/nil/crypto3/block/accumulators/block.hpp deleted file mode 100644 index f36658d223..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/accumulators/block.hpp +++ /dev/null @@ -1,267 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ACCUMULATORS_BLOCK_HPP -#define CRYPTO3_ACCUMULATORS_BLOCK_HPP - -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace accumulators { - namespace impl { - template - struct block_impl : boost::accumulators::accumulator_base { - protected: - typedef Mode mode_type; - typedef typename Mode::cipher_type cipher_type; - typedef typename Mode::padding_type padding_type; - - typedef typename mode_type::endian_type endian_type; - - constexpr static const std::size_t word_bits = mode_type::word_bits; - typedef typename mode_type::word_type word_type; - - constexpr static const std::size_t block_bits = mode_type::block_bits; - constexpr static const std::size_t block_words = mode_type::block_words; - typedef typename mode_type::block_type block_type; - - constexpr static const std::size_t value_bits = sizeof(typename block_type::value_type) * CHAR_BIT; - constexpr static const std::size_t block_values = block_bits / value_bits; - - typedef ::nil::crypto3::detail::injector - injector_type; - - public: - typedef digest result_type; - - template - block_impl(const Args &args) : - total_seen(0), filled(false), mode(args[boost::accumulators::sample]) { - } - - template - inline void operator()(const ArgumentPack &args) { - resolve_type(args[boost::accumulators::sample], - args[::nil::crypto3::accumulators::bits | std::size_t()]); - } - - inline result_type result(boost::accumulators::dont_care) const { - using namespace ::nil::crypto3::detail; - - result_type res = dgst; - - block_type processed_block = mode.end_message(cache, total_seen); - - res = ::nil::crypto3::resize(res, res.size() + block_values); - - pack( - processed_block.begin(), processed_block.end(), res.end() - block_values); - - return res; - } - - protected: - inline void resolve_type(const block_type &value, std::size_t bits) { - process(value, bits == 0 ? block_bits : bits); - } - - inline void resolve_type(const word_type &value, std::size_t bits) { - process(value, bits == 0 ? word_bits : bits); - } - - inline void process_block() { - using namespace ::nil::crypto3::detail; - - block_type processed_block; - if (dgst.empty()) { - processed_block = mode.begin_message(cache, total_seen); - } else { - processed_block = mode.process_block(cache, total_seen); - } - - dgst = ::nil::crypto3::resize(dgst, dgst.size() + block_values); - - pack( - processed_block.begin(), processed_block.end(), dgst.end() - block_values); - - filled = false; - } - - inline void process(const block_type &value, std::size_t value_seen) { - using namespace ::nil::crypto3::detail; - - if (filled) { - process_block(); - } - - std::size_t cached_bits = total_seen % block_bits; - - if (cached_bits != 0) { - // If there are already any bits in the cache - - std::size_t needed_to_fill_bits = block_bits - cached_bits; - std::size_t new_bits_to_append = - (needed_to_fill_bits > value_seen) ? value_seen : needed_to_fill_bits; - - injector_type::inject(value, new_bits_to_append, cache, cached_bits); - total_seen += new_bits_to_append; - - if (cached_bits == block_bits) { - // If there are enough bits in the incoming value to fill the block - filled = true; - - if (value_seen > new_bits_to_append) { - - process_block(); - - // If there are some remaining bits in the incoming value - put them into the cache, - // which is now empty - - cached_bits = 0; - - injector_type::inject(value, value_seen - new_bits_to_append, cache, cached_bits, - new_bits_to_append); - - total_seen += value_seen - new_bits_to_append; - } - } - - } else { - - total_seen += value_seen; - - // If there are no bits in the cache - if (value_seen == block_bits) { - // The incoming value is a full block - filled = true; - - std::move(value.begin(), value.end(), cache.begin()); - - } else { - // The incoming value is not a full block - std::move(value.begin(), - value.begin() + value_seen / word_bits + (value_seen % word_bits ? 1 : 0), - cache.begin()); - } - } - } - - inline void process(const word_type &value, std::size_t value_seen) { - using namespace ::nil::crypto3::detail; - - if (filled) { - process_block(); - } - - std::size_t cached_bits = total_seen % block_bits; - - if (cached_bits % word_bits != 0) { - std::size_t needed_to_fill_bits = block_bits - cached_bits; - std::size_t new_bits_to_append = - (needed_to_fill_bits > value_seen) ? value_seen : needed_to_fill_bits; - - injector_type::inject(value, new_bits_to_append, cache, cached_bits); - total_seen += new_bits_to_append; - - if (cached_bits == block_bits) { - // If there are enough bits in the incoming value to fill the block - - filled = true; - - if (value_seen > new_bits_to_append) { - - process_block(); - - // If there are some remaining bits in the incoming value - put them into the cache, - // which is now empty - cached_bits = 0; - - injector_type::inject(value, value_seen - new_bits_to_append, cache, cached_bits, - new_bits_to_append); - - total_seen += value_seen - new_bits_to_append; - } - } - - } else { - cache[cached_bits / word_bits] = value; - - total_seen += value_seen; - } - } - - mode_type mode; - - bool filled; - std::size_t total_seen; - block_type cache; - result_type dgst; - }; - } // namespace impl - - namespace tag { - template - struct block : boost::accumulators::depends_on { - typedef Mode mode_type; - - /// INTERNAL ONLY - /// - - typedef boost::mpl::always> impl; - }; - } // namespace tag - - namespace extract { - template - typename boost::mpl::apply>::type::result_type - block(const AccumulatorSet &acc) { - return boost::accumulators::extract_result>(acc); - } - } // namespace extract - } // namespace accumulators - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ACCUMULATORS_BLOCK_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/accumulators/parameters/bits.hpp b/crypto3/libs/block/include/nil/crypto3/block/accumulators/parameters/bits.hpp deleted file mode 100644 index 567aa2f8b3..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/accumulators/parameters/bits.hpp +++ /dev/null @@ -1,40 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ACCUMULATORS_PARAMETERS_BITS_HPP -#define CRYPTO3_ACCUMULATORS_PARAMETERS_BITS_HPP - -#include -#include - -namespace nil { - namespace crypto3 { - namespace accumulators { - BOOST_PARAMETER_KEYWORD(tag, bits) - BOOST_ACCUMULATORS_IGNORE_GLOBAL(bits) - } // namespace accumulators - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_ACCUMULATORS_PARAMETERS_BITS_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/adaptor/decrypted.hpp b/crypto3/libs/block/include/nil/crypto3/block/adaptor/decrypted.hpp deleted file mode 100644 index bf5b514a7c..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/adaptor/decrypted.hpp +++ /dev/null @@ -1,117 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_DECRYPTED_HPP -#define CRYPTO3_DECRYPTED_HPP - -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace range_detail { - // A type generator to produce the transform_iterator type conditionally - // including a wrapped predicate as appropriate. - template - struct transform_iterator_gen { - typedef transform_iterator< - typename default_constructible_unary_fn_gen::reference>::type, - It> - type; - }; - - template - struct decoded_range - : public boost::iterator_range::type>::type> { - private: - typedef typename transform_iterator_gen::type>::type transform_iter_t; - - typedef boost::iterator_range base; - - public: - typedef typename default_constructible_unary_fn_gen< - F, - typename transform_iterator::type>::reference>::type transform_fn_type; - - typedef R source_range_type; - - decoded_range(transform_fn_type f, R &r) : - base(transform_iter_t(boost::begin(r), f), transform_iter_t(boost::end(r), f)) { - } - }; - - template - struct transform_holder : holder { - transform_holder(T r) : holder(r) { - } - }; - - template - inline decoded_range operator|(SinglePassRange &r, - const transform_holder &f) { - BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept)); - - return decoded_range(f.val, r); - } - - template - inline decoded_range operator|(const SinglePassRange &r, - const transform_holder &f) { - BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept)); - - return decoded_range(f.val, r); - } - - } // namespace range_detail - - using range_detail::decoded_range; - - namespace adaptors { - namespace { - const range_detail::forwarder decoded = - range_detail::forwarder(); - } - - template - inline decoded_range transform(SinglePassRange &rng, UnaryFunction fn) { - BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept)); - - return decoded_range(fn, rng); - } - - template - inline decoded_range transform(const SinglePassRange &rng, - UnaryFunction fn) { - BOOST_RANGE_CONCEPT_ASSERT((SinglePassRangeConcept)); - - return decoded_range(fn, rng); - } - } // namespace adaptors - -} // namespace nil - -#endif // CRYPTO3_DECRYPTED_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/adaptor/encrypted.hpp b/crypto3/libs/block/include/nil/crypto3/block/adaptor/encrypted.hpp deleted file mode 100644 index 2553c3d272..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/adaptor/encrypted.hpp +++ /dev/null @@ -1,122 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ENCRYPTED_HPP -#define CRYPTO3_ENCRYPTED_HPP - -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace detail { - // A type generator to produce the transform_iterator type conditionally - // including a wrapped predicate as appropriate. - template - struct transform_iterator_gen { - typedef boost::transform_iterator::reference>::type, - It> - type; - }; - - template - struct encoded_range - : public boost::iterator_range< - typename transform_iterator_gen::type>::type> { - private: - typedef - typename transform_iterator_gen::type>::type transform_iter_t; - - typedef boost::iterator_range base; - - public: - typedef typename boost::range_detail::default_constructible_unary_fn_gen< - F, - typename boost::transform_iterator::type>::reference>::type - transform_fn_type; - - typedef R source_range_type; - - encoded_range(transform_fn_type f, R &r) : - base(transform_iter_t(boost::begin(r), f), transform_iter_t(boost::end(r), f)) { - } - }; - - template - struct encode_holder : boost::range_detail::holder { - encode_holder(T r) : boost::range_detail::holder(r) { - } - }; - - template - inline encoded_range operator|(SinglePassRange &r, - const encode_holder &f) { - BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); - - return encoded_range(f.val, r); - } - - template - inline encoded_range - operator|(const SinglePassRange &r, const encode_holder &f) { - BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); - - return encoded_range(f.val, r); - } - - } // namespace detail - - using detail::encoded_range; - - namespace adaptors { - namespace { - const range_detail::forwarder encoded = - detail::forwarder(); - } - - template - inline encoded_range transform(SinglePassRange &rng, UnaryFunction fn) { - BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); - - return encoded_range(fn, rng); - } - - template - inline encoded_range transform(const SinglePassRange &rng, - UnaryFunction fn) { - BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); - - return encoded_range(fn, rng); - } - } // namespace adaptors - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ENCRYPTED_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/aes.hpp b/crypto3/libs/block/include/nil/crypto3/block/aes.hpp deleted file mode 100644 index 564a582869..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/aes.hpp +++ /dev/null @@ -1,42 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_AES_HPP -#define CRYPTO3_BLOCK_AES_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief AES block cipher. Equals to Rijndael block cipher with 128 bit block length. - */ - template - using aes = rijndael; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_AES_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/algorithm/block.hpp b/crypto3/libs/block/include/nil/crypto3/block/algorithm/block.hpp deleted file mode 100644 index 02695d3d08..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/algorithm/block.hpp +++ /dev/null @@ -1,63 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_ALGORITHM_HPP -#define CRYPTO3_BLOCK_ALGORITHM_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief - * @tparam Cipher - */ - template - struct nop_padding { - typedef std::size_t size_type; - - typedef Cipher cipher_type; - - constexpr static const size_type block_bits = cipher_type::block_bits; - constexpr static const size_type block_words = cipher_type::block_words; - typedef typename cipher_type::block_type block_type; - }; - } // namespace block - - /*! - * @defgroup block Block Ciphers - * - * @brief Block ciphers are a n-bit permutation for some small ```n```, - * typically 64 or 128 bits. It is a cryptographic primitive used - * to generate higher level operations such as authenticated encryption. - * - * @defgroup block_algorithms Algorithms - * @ingroup block - * @brief Algorithms are meant to provide encryption interface similar to STL algorithms' one. - */ - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/algorithm/decrypt.hpp b/crypto3/libs/block/include/nil/crypto3/block/algorithm/decrypt.hpp deleted file mode 100644 index f846138be2..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/algorithm/decrypt.hpp +++ /dev/null @@ -1,747 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_DECRYPT_HPP -#define CRYPTO3_BLOCK_DECRYPT_HPP - -#include - -#include - -#include -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - template - using decryption_policy = typename modes::isomorphic::decryption_policy; - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeyIterator - * @tparam OutputIterator - * - * @param first - * @param last - * @param key_first - * @param key_last - * @param out - * - * @return - */ - template::value>::type> - OutputIterator decrypt(InputIterator first, InputIterator last, KeyInputIterator key_first, - KeyInputIterator key_last, OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl(first, last, std::move(out), - CipherAccumulator(DecryptionMode( - BlockCipher(block::cipher_key(key_first, key_last).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeySinglePassRange - * @tparam OutputIterator - * - * @param first - * @param last - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputIterator decrypt(InputIterator first, InputIterator last, const KeySinglePassRange &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl( - first, last, std::move(out), - CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam K - * @tparam OutputIterator - * - * @param first - * @param last - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputIterator decrypt(InputIterator first, InputIterator last, std::initializer_list key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl( - first, last, std::move(out), - CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam OutputIterator - * - * @param first - * @param last - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputIterator decrypt(InputIterator first, InputIterator last, const block::cipher_key &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl(first, last, std::move(out), CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam OutputAccumulator - * - * @param first - * @param last - * @param acc - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - typename std::enable_if::value, - OutputAccumulator>::type & - decrypt(InputIterator first, InputIterator last, OutputAccumulator &acc) { - - typedef block::detail::ref_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(first, last, std::forward(acc)); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam OutputAccumulator - * - * @param r - * @param acc - * - * @return - */ - - template::template bind< - typename block::modes::isomorphic::decryption_policy>::type>, - typename = typename std::enable_if::value>::type> - typename std::enable_if::value, - OutputAccumulator>::type & - decrypt(const SinglePassRange &r, OutputAccumulator &acc) { - - typedef block::detail::ref_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(r, acc); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam OutputAccumulator - * - * @param r - * @param acc - * - * @return - */ - - template::template bind< - typename block::modes::isomorphic::decryption_policy>::type>> - typename std::enable_if::value, - OutputAccumulator>::type & - decrypt(std::initializer_list r, OutputAccumulator &acc) { - - typedef block::detail::ref_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(r, acc); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeyIterator - * @tparam CipherAccumulator - * - * @param first - * @param last - * @param key_first - * @param key_last - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - decrypt(InputIterator first, InputIterator last, KeyInputIterator key_first, KeyInputIterator key_last) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(first, last, - CipherAccumulator(DecryptionMode( - BlockCipher(block::cipher_key(key_first, key_last).key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeySinglePassRange - * @tparam CipherAccumulator - * - * @param first - * @param last - * @param key - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - decrypt(InputIterator first, InputIterator last, const KeySinglePassRange &key) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl( - first, last, CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeySinglePassRange - * @tparam CipherAccumulator - * - * @param first - * @param last - * @param key - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - decrypt(InputIterator first, InputIterator last, std::initializer_list key) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl( - first, last, CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam CipherAccumulator - * @param first - * @param last - * @param key - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - decrypt(InputIterator first, InputIterator last, const block::cipher_key &key) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(first, last, CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam KeyRange - * @tparam OutputIterator - * - * @param rng - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputIterator decrypt(const SinglePassRange &rng, const KeySinglePassRange &key, OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl( - rng, std::move(out), - CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam KeyRange - * @tparam OutputIterator - * - * @param rng - * @param key - * @param out - * - * @return - */ - template - OutputIterator decrypt(std::initializer_list rng, std::initializer_list key, OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl( - rng, std::move(out), - CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam OutputIterator - * - * @param rng - * @param key - * @param out - * @return - */ - template::value>::type> - OutputIterator decrypt(const SinglePassRange &rng, const block::cipher_key &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl(rng, std::move(out), CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam OutputIterator - * - * @param rng - * @param key - * @param out - * @return - */ - template - OutputIterator decrypt(std::initializer_list rng, const block::cipher_key &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::itr_cipher_impl DecrypterImpl; - - return DecrypterImpl(rng, std::move(out), CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam KeySinglePassRange - * @tparam OutputRange - * - * @param rng - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputRange &decrypt(const SinglePassRange &rng, const KeySinglePassRange &key, OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl( - rng, std::move(out), - CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam T - * @tparam K - * @tparam OutputRange - * - * @param rng - * @param key - * @param out - * - * @return - */ - template - OutputRange &decrypt(std::initializer_list rng, std::initializer_list key, OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl( - rng, std::move(out), - CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam OutputRange - * @param rng - * @param key - * @param out - * @return - */ - template::value>::type> - OutputRange &decrypt(const SinglePassRange &rng, const block::cipher_key &key, OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(rng, std::move(out), CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam OutputRange - * @param rng - * @param key - * @param out - * @return - */ - template - OutputRange &decrypt(std::initializer_list rng, const block::cipher_key &key, - OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(rng, std::move(out), CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam KeyRange - * @tparam CipherAccumulator - * - * @param r - * @param key - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - decrypt(const SinglePassRange &r, const KeySinglePassRange &key) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl( - r, CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam KeyRange - * @tparam CipherAccumulator - * - * @param r - * @param key - * - * @return - */ - template::template bind>::type>> - block::detail::range_cipher_impl> - decrypt(std::initializer_list r, std::initializer_list key) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl( - r, CipherAccumulator(DecryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam CipherAccumulator - * @param r - * @param key - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - decrypt(const SinglePassRange &r, const block::cipher_key &key) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(r, CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam CipherAccumulator - * @param r - * @param key - * @return - */ - template::template bind>::type>> - block::detail::range_cipher_impl> - decrypt(std::initializer_list r, const block::cipher_key &key) { - - typedef typename block::modes::isomorphic::template bind< - block::decryption_policy>::type DecryptionMode; - - typedef block::detail::value_cipher_impl StreamDecrypterImpl; - typedef block::detail::range_cipher_impl DecrypterImpl; - - return DecrypterImpl(r, CipherAccumulator(DecryptionMode(BlockCipher(key.key)))); - } - } // namespace crypto3 -} // namespace nil - -#endif // include guard diff --git a/crypto3/libs/block/include/nil/crypto3/block/algorithm/encrypt.hpp b/crypto3/libs/block/include/nil/crypto3/block/algorithm/encrypt.hpp deleted file mode 100644 index 3b3329ef78..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/algorithm/encrypt.hpp +++ /dev/null @@ -1,683 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_ENCRYPT_HPP -#define CRYPTO3_BLOCK_ENCRYPT_HPP - -#include - -#include - -#include -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - template - using encryption_policy = typename block::modes::isomorphic::encryption_policy; - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeyIterator - * @tparam OutputIterator - * - * @param first - * @param last - * @param key_first - * @param key_last - * @param out - * - * @return - */ - template::value>::type> - OutputIterator encrypt(InputIterator first, InputIterator last, KeyInputIterator key_first, - KeyInputIterator key_last, OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::itr_cipher_impl EncrypterImpl; - - return EncrypterImpl(first, last, std::move(out), - CipherAccumulator(EncryptionMode( - BlockCipher(block::cipher_key(key_first, key_last).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeySinglePassRange - * @tparam OutputIterator - * - * @param first - * @param last - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputIterator encrypt(InputIterator first, InputIterator last, const KeySinglePassRange &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::itr_cipher_impl EncrypterImpl; - - return EncrypterImpl( - first, last, std::move(out), - CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam OutputIterator - * - * @param first - * @param last - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputIterator encrypt(InputIterator first, InputIterator last, const block::cipher_key &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::itr_cipher_impl EncrypterImpl; - - return EncrypterImpl(first, last, std::move(out), CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam OutputAccumulator - * - * @param first - * @param last - * @param acc - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - typename std::enable_if::value, - OutputAccumulator>::type & - encrypt(InputIterator first, InputIterator last, OutputAccumulator &acc) { - - typedef block::detail::ref_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(first, last, std::forward(acc)); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam OutputAccumulator - * - * @param r - * @param acc - * - * @return - */ - - template::template bind< - typename block::modes::isomorphic::encryption_policy>::type>, - typename = typename std::enable_if::value>::type> - typename std::enable_if::value, - OutputAccumulator>::type & - encrypt(const SinglePassRange &r, OutputAccumulator &acc) { - - typedef block::detail::ref_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(r, acc); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeyIterator - * @tparam CipherAccumulator - * - * @param first - * @param last - * @param key_first - * @param key_last - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - encrypt(InputIterator first, InputIterator last, KeyInputIterator key_first, KeyInputIterator key_last) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(first, last, - CipherAccumulator(EncryptionMode( - BlockCipher(block::cipher_key(key_first, key_last).key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam KeySinglePassRange - * @tparam CipherAccumulator - * - * @param first - * @param last - * @param key - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - encrypt(InputIterator first, InputIterator last, const KeySinglePassRange &key) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl( - first, last, CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam K - * @tparam CipherAccumulator - * - * @param first - * @param last - * @param key - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - encrypt(InputIterator first, InputIterator last, std::initializer_list key) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl( - first, last, CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam InputIterator - * @tparam CipherAccumulator - * @param first - * @param last - * @param key - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - encrypt(InputIterator first, InputIterator last, const block::cipher_key &key) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(first, last, CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam KeyRange - * @tparam OutputIterator - * - * @param rng - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputIterator encrypt(const SinglePassRange &rng, const KeySinglePassRange &key, OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::itr_cipher_impl EncrypterImpl; - - return EncrypterImpl( - rng, std::move(out), - CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam OutputIterator - * - * @param rng - * @param key - * @param out - * @return - */ - template::value>::type> - OutputIterator encrypt(const SinglePassRange &rng, const block::cipher_key &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::itr_cipher_impl EncrypterImpl; - - return EncrypterImpl(rng, std::move(out), CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam KeySinglePassRange - * @tparam OutputRange - * - * @param rng - * @param key - * @param out - * - * @return - */ - template::value>::type> - OutputRange &encrypt(const SinglePassRange &rng, const KeySinglePassRange &key, OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl( - rng, std::move(out), - CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam OutputRange - * @param rng - * @param key - * @param out - * @return - */ - template::value>::type> - OutputRange &encrypt(const SinglePassRange &rng, const block::cipher_key &key, OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(rng, std::move(out), CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam KeyRange - * @tparam CipherAccumulator - * - * @param r - * @param key - * - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - encrypt(const SinglePassRange &r, const KeySinglePassRange &key) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl( - r, CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam CipherAccumulator - * @param r - * @param key - * @return - */ - template::template bind>::type>, - typename = typename std::enable_if::value>::type> - block::detail::range_cipher_impl> - encrypt(const SinglePassRange &r, const block::cipher_key &key) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(r, CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam KeyRange - * @tparam OutputIterator - * - * @param r - * @param key - * @param out - * - * @return - */ - template - OutputIterator encrypt(std::initializer_list r, std::initializer_list key, OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::itr_cipher_impl EncrypterImpl; - - return EncrypterImpl( - r, std::move(out), - CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam OutputIterator - * - * @param r - * @param key - * @param out - * @return - */ - template - OutputIterator encrypt(std::initializer_list r, const block::cipher_key &key, - OutputIterator out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::itr_cipher_impl EncrypterImpl; - - return EncrypterImpl(r, std::move(out), CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @tparam BlockCipher - * @tparam T - * @tparam K - * @tparam OutputRange - * - * @param r - * @param key - * @param out - * - * @return - */ - template - OutputRange &encrypt(std::initializer_list r, std::initializer_list key, OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl( - r, std::move(out), - CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam OutputRange - * @param r - * @param key - * @param out - * @return - */ - template - OutputRange &encrypt(std::initializer_list r, const block::cipher_key &key, OutputRange &out) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - typedef typename block::accumulator_set CipherAccumulator; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(r, std::move(out), CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam T - * @tparam KeyRange - * @tparam CipherAccumulator - * - * @param il - * @param key - * - * @return - */ - template::template bind>::type>> - block::detail::range_cipher_impl> - encrypt(std::initializer_list il, std::initializer_list key) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl( - il, CipherAccumulator(EncryptionMode(BlockCipher(block::cipher_key(key).key)))); - } - - /*! - * @brief - * - * @ingroup block_algorithms - * - * @tparam BlockCipher - * @tparam SinglePassRange - * @tparam CipherAccumulator - * @param r - * @param key - * @return - */ - template::template bind>::type>> - block::detail::range_cipher_impl> - encrypt(std::initializer_list r, const block::cipher_key &key) { - - typedef typename block::modes::isomorphic::template bind< - block::encryption_policy>::type EncryptionMode; - - typedef block::detail::value_cipher_impl StreamEncrypterImpl; - typedef block::detail::range_cipher_impl EncrypterImpl; - - return EncrypterImpl(r, CipherAccumulator(EncryptionMode(BlockCipher(key.key)))); - } - } // namespace crypto3 -} // namespace nil - -#endif // include guard diff --git a/crypto3/libs/block/include/nil/crypto3/block/cipher.hpp b/crypto3/libs/block/include/nil/crypto3/block/cipher.hpp deleted file mode 100644 index 1974db824f..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/cipher.hpp +++ /dev/null @@ -1,49 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_CIPHER_HPP -#define CRYPTO3_BLOCK_CIPHER_HPP - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief - * @tparam Cipher - * @tparam Mode - * @tparam Padding - */ - template - struct cipher : public Mode::template bind::type { - typedef std::size_t size_type; - - typedef Cipher cipher_type; - typedef Mode mode_type; - typedef Padding padding_type; - }; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif diff --git a/crypto3/libs/block/include/nil/crypto3/block/cipher_key.hpp b/crypto3/libs/block/include/nil/crypto3/block/cipher_key.hpp deleted file mode 100644 index 4f8130515d..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/cipher_key.hpp +++ /dev/null @@ -1,85 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_CIPHER_KEY_HPP -#define CRYPTO3_BLOCK_CIPHER_KEY_HPP - -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - template - struct cipher_key { - typedef BlockCipher cipher_type; - - typedef typename cipher_type::endian_type endian_type; - - constexpr static const std::size_t key_bits = cipher_type::key_bits; - constexpr static const std::size_t key_value_bits = - sizeof(typename cipher_type::key_type::value_type) * CHAR_BIT; - typedef typename cipher_type::key_type key_type; - - template - explicit cipher_key(const SinglePassRange &r) { - using namespace nil::crypto3::detail; - - BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); - - typedef typename std::iterator_traits::value_type value_type; - - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized); - - constexpr static const std::size_t value_bits = - std::numeric_limits::digits + std::numeric_limits::is_signed; - - pack_to(r.begin(), r.end(), key.begin()); - } - - template - explicit cipher_key(InputIterator first, InputIterator last) { - using namespace nil::crypto3::detail; - - BOOST_CONCEPT_ASSERT((boost::InputIteratorConcept)); - - typedef typename std::iterator_traits::value_type value_type; - - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized); - - constexpr static const std::size_t value_bits = - std::numeric_limits::digits + std::numeric_limits::is_signed; - - pack_to(first, last, key.begin()); - } - - key_type key; - }; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHER_KEY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/cipher_state.hpp b/crypto3/libs/block/include/nil/crypto3/block/cipher_state.hpp deleted file mode 100644 index e295caa0b0..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/cipher_state.hpp +++ /dev/null @@ -1,56 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_CIPHER_STATE_HPP -#define CRYPTO3_BLOCK_CIPHER_STATE_HPP - -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief Accumulator set with pre-defined block cipher accumulator params. - * - * Meets the requirements of AccumulatorSet - * - * @ingroup block - * - * @tparam Mode Cipher state preprocessing mode type (e.g. isomorphic_encryption_mode) - * @tparam Endian - * @tparam ValueBits - * @tparam LengthBits - */ - template - using accumulator_set = boost::accumulators::accumulator_set< - digest, - boost::accumulators::features>, std::size_t>; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHER_STATE_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/cipher_value.hpp b/crypto3/libs/block/include/nil/crypto3/block/cipher_value.hpp deleted file mode 100644 index f00a3e238f..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/cipher_value.hpp +++ /dev/null @@ -1,226 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_CIPHER_VALUE_HPP -#define CRYPTO3_BLOCK_CIPHER_VALUE_HPP - -//#include -//#include - -#include -#include - -#include - -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - template - struct ref_cipher_impl { - typedef CipherAccumulator accumulator_set_type; - typedef - typename boost::mpl::front::type accumulator_type; - - typedef typename accumulator_type::mode_type mode_type; - typedef typename mode_type::cipher_type cipher_type; - - ref_cipher_impl(const accumulator_set_type &acc) : accumulator_set(acc) { - } - - accumulator_set_type &accumulator_set; - }; - - template - struct value_cipher_impl { - typedef CipherAccumulator accumulator_set_type; - typedef - typename boost::mpl::front::type accumulator_type; - - typedef typename accumulator_type::mode_type mode_type; - typedef typename mode_type::cipher_type cipher_type; - - value_cipher_impl(const accumulator_set_type &acc) : accumulator_set(acc) { - } - - mutable accumulator_set_type accumulator_set; - }; - - template - struct range_cipher_impl : public CipherStateImpl { - typedef CipherStateImpl cipher_state_impl_type; - - typedef typename cipher_state_impl_type::accumulator_type accumulator_type; - typedef typename cipher_state_impl_type::accumulator_set_type accumulator_set_type; - - typedef typename cipher_state_impl_type::mode_type mode_type; - typedef typename cipher_state_impl_type::cipher_type cipher_type; - - typedef typename boost::mpl::apply::type::result_type - result_type; - - template - range_cipher_impl(const SinglePassRange &range, const accumulator_set_type &ise) : - CipherStateImpl(ise) { - BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); - - typedef - typename std::iterator_traits::value_type value_type; - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized); - typedef typename cipher_type::template stream_processor< - mode_type, accumulator_set_type, - std::numeric_limits::digits + std::numeric_limits::is_signed>::type - stream_processor; - - stream_processor(this->accumulator_set)(range.begin(), range.end()); - } - - template - range_cipher_impl(InputIterator first, InputIterator last, const accumulator_set_type &ise) : - CipherStateImpl(ise) { - BOOST_CONCEPT_ASSERT((boost::InputIteratorConcept)); - - typedef typename std::iterator_traits::value_type value_type; - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized); - typedef typename cipher_type::template stream_processor< - mode_type, accumulator_set_type, - std::numeric_limits::digits + std::numeric_limits::is_signed>::type - stream_processor; - - stream_processor(this->accumulator_set)(first, last); - } - - template - inline operator std::array() const { - result_type result = - boost::accumulators::extract_result(this->accumulator_set); - std::array out; - std::copy(result.begin(), result.end(), out.end()); - return out; - } - - template - inline operator boost::array() const { - result_type result = - boost::accumulators::extract_result(this->accumulator_set); - boost::array out; - std::copy(result.begin(), result.end(), out.end()); - return out; - } - - template - operator OutputRange() const { - result_type result = - boost::accumulators::extract_result(this->accumulator_set); - return OutputRange(result.cbegin(), result.cend()); - } - - operator result_type() const { - return boost::accumulators::extract_result(this->accumulator_set); - } - - operator accumulator_set_type() const { - return this->accumulator_set; - } - -#ifndef CRYPTO3_RAW_HASH_STRING_OUTPUT - - template - operator std::basic_string() const { - return std::to_string( - boost::accumulators::extract_result(this->accumulator_set)); - } - -#endif - }; - - template - struct itr_cipher_impl : public CipherStateImpl { - private: - mutable OutputIterator out; - - public: - typedef CipherStateImpl cipher_state_impl_type; - - typedef typename cipher_state_impl_type::accumulator_type accumulator_type; - typedef typename cipher_state_impl_type::accumulator_set_type accumulator_set_type; - - typedef typename cipher_state_impl_type::mode_type mode_type; - typedef typename cipher_state_impl_type::cipher_type cipher_type; - - typedef typename boost::mpl::apply::type::result_type - result_type; - - template - itr_cipher_impl(const SinglePassRange &range, OutputIterator out, const accumulator_set_type &ise) : - CipherStateImpl(ise), out(std::move(out)) { - BOOST_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); - - typedef - typename std::iterator_traits::value_type value_type; - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized); - typedef typename cipher_type::template stream_processor< - mode_type, accumulator_set_type, - std::numeric_limits::digits + std::numeric_limits::is_signed>::type - stream_processor; - - stream_processor(this->accumulator_set)(range.begin(), range.end()); - } - - template - itr_cipher_impl(InputIterator first, InputIterator last, OutputIterator out, - const accumulator_set_type &ise) : - CipherStateImpl(ise), - out(std::move(out)) { - BOOST_CONCEPT_ASSERT((boost::InputIteratorConcept)); - - typedef typename std::iterator_traits::value_type value_type; - BOOST_STATIC_ASSERT(std::numeric_limits::is_specialized); - typedef typename cipher_type::template stream_processor< - mode_type, accumulator_set_type, - std::numeric_limits::digits + std::numeric_limits::is_signed>::type - stream_processor; - - stream_processor(this->accumulator_set)(first, last); - } - - operator OutputIterator() const { - result_type result = - boost::accumulators::extract_result(this->accumulator_set); - - return std::move(result.cbegin(), result.cend(), out); - } - }; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_CODEC_POSTPROCESSOR_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/cipher_modes.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/cipher_modes.hpp deleted file mode 100644 index e0ea9d4cb6..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/cipher_modes.hpp +++ /dev/null @@ -1,147 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_CIPHER_MODES_HPP -#define CRYPTO3_CIPHER_MODES_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - - template - struct isomorphic_policy { - typedef std::size_t size_type; - - typedef Cipher cipher_type; - typedef Padding padding_type; - - constexpr static const size_type block_bits = cipher_type::block_bits; - constexpr static const size_type block_words = cipher_type::block_words; - typedef typename cipher_type::block_type block_type; - - typedef typename cipher_type::endian_type endian_type; - }; - - template - struct isomorphic_encryption_policy : public isomorphic_policy { - typedef typename isomorphic_policy::cipher_type cipher_type; - typedef typename isomorphic_policy::block_type block_type; - - inline static block_type begin_message(const cipher_type &cipher, const block_type &plaintext) { - return cipher.encrypt(plaintext); - } - - inline static block_type process_block(const cipher_type &cipher, const block_type &plaintext) { - return cipher.encrypt(plaintext); - } - - inline static block_type end_message(const cipher_type &cipher, const block_type &plaintext) { - return cipher.encrypt(plaintext); - } - }; - - template - struct isomorphic_decryption_policy : public isomorphic_policy { - typedef typename isomorphic_policy::cipher_type cipher_type; - typedef typename isomorphic_policy::block_type block_type; - - inline static block_type begin_message(const cipher_type &cipher, const block_type &ciphertext) { - return cipher.decrypt(ciphertext); - } - - inline static block_type process_block(const cipher_type &cipher, const block_type &ciphertext) { - return cipher.decrypt(ciphertext); - } - - inline static block_type end_message(const cipher_type &cipher, const block_type &ciphertext) { - return cipher.decrypt(ciphertext); - } - }; - - template - class isomorphic { - typedef Policy policy_type; - - public: - typedef typename policy_type::cipher_type cipher_type; - typedef typename policy_type::padding_type padding_type; - - typedef typename policy_type::size_type size_type; - - typedef typename cipher_type::key_type key_type; - - typedef typename policy_type::endian_type endian_type; - - typedef typename cipher_type::block_type block_type; - typedef typename cipher_type::word_type word_type; - - constexpr static const size_type block_bits = policy_type::block_bits; - constexpr static const size_type block_words = policy_type::block_words; - constexpr static const size_type word_bits = cipher_type::word_bits; - - isomorphic(const cipher_type &cipher) : cipher(cipher) { - } - - block_type begin_message(const block_type &plaintext, std::size_t total_seen) { - return policy_type::begin_message(cipher, plaintext); - } - - block_type process_block(const block_type &plaintext, std::size_t total_seen) { - return policy_type::process_block(cipher, plaintext); - } - - block_type end_message(const block_type &plaintext, std::size_t total_seen) const { - return policy_type::end_message(cipher, plaintext); - } - - protected: - cipher_type cipher; - }; - } // namespace detail - - namespace modes { - - template class Padding> - struct isomorphic { - typedef Cipher cipher_type; - typedef Padding padding_type; - - typedef detail::isomorphic_encryption_policy encryption_policy; - typedef detail::isomorphic_decryption_policy decryption_policy; - - template - struct bind { - typedef detail::isomorphic type; - }; - }; - } // namespace modes - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_CIPHER_MODES_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/kasumi/kasumi_functions.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/kasumi/kasumi_functions.hpp deleted file mode 100644 index 29970cdb7f..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/kasumi/kasumi_functions.hpp +++ /dev/null @@ -1,55 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_KASUMI_FUNCTIONS_CPP_HPP -#define CRYPTO3_KASUMI_FUNCTIONS_CPP_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - struct kasumi_functions : public kasumi_policy { - constexpr static const std::size_t word_bits = kasumi_policy::word_bits; - typedef typename kasumi_policy::word_type word_type; - - static inline word_type FI(word_type I, word_type K) { - word_type D9 = (I >> 7); - word_type D7 = (I & 0x7F); - D9 = s9_substitution[D9] ^ D7; - D7 = s7_substitution[D7] ^ (D9 & 0x7F); - - D7 ^= (K >> 9); - D9 = s9_substitution[D9 ^ (K & 0x1FF)] ^ D7; - D7 = s7_substitution[D7] ^ (D9 & 0x7F); - return static_cast(D7 << 9) | D9; - } - }; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_KASUMI_FUNCTIONS_CPP_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/kasumi/kasumi_policy.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/kasumi/kasumi_policy.hpp deleted file mode 100644 index c45df5f87c..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/kasumi/kasumi_policy.hpp +++ /dev/null @@ -1,130 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_KASUMI_POLICY_HPP -#define CRYPTO3_KASUMI_POLICY_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - struct kasumi_policy : ::nil::crypto3::detail::basic_functions<16> { - constexpr static const std::size_t word_bits = - ::nil::crypto3::detail::basic_functions<16>::word_bits; - typedef typename ::nil::crypto3::detail::basic_functions<16>::word_type word_type; - - constexpr static const std::size_t block_bits = 128; - constexpr static const std::size_t block_words = block_bits / word_bits; - typedef std::array block_type; - - constexpr static const std::size_t key_bits = 128; - constexpr static const std::size_t key_words = key_bits / word_bits; - typedef std::array key_type; - - constexpr static const std::size_t rounds = 8; - - constexpr static const std::size_t key_schedule_size = 64; - typedef std::array key_schedule_type; - - constexpr static const std::size_t round_constants_size = 16; - typedef std::array round_constants_type; - - constexpr static const round_constants_type round_constants = {0x0123, 0x4567, 0x89AB, 0xCDEF, - 0xFEDC, 0xBA98, 0x7654, 0x3210}; - - constexpr static const std::size_t s7_sbox_size = 128; - typedef std::array s7_substitution_type; - constexpr static const s7_substitution_type s7_substitution = { - 0x36, 0x32, 0x3E, 0x38, 0x16, 0x22, 0x5E, 0x60, 0x26, 0x06, 0x3F, 0x5D, 0x02, 0x12, 0x7B, 0x21, - 0x37, 0x71, 0x27, 0x72, 0x15, 0x43, 0x41, 0x0C, 0x2F, 0x49, 0x2E, 0x1B, 0x19, 0x6F, 0x7C, 0x51, - 0x35, 0x09, 0x79, 0x4F, 0x34, 0x3C, 0x3A, 0x30, 0x65, 0x7F, 0x28, 0x78, 0x68, 0x46, 0x47, 0x2B, - 0x14, 0x7A, 0x48, 0x3D, 0x17, 0x6D, 0x0D, 0x64, 0x4D, 0x01, 0x10, 0x07, 0x52, 0x0A, 0x69, 0x62, - 0x75, 0x74, 0x4C, 0x0B, 0x59, 0x6A, 0x00, 0x7D, 0x76, 0x63, 0x56, 0x45, 0x1E, 0x39, 0x7E, 0x57, - 0x70, 0x33, 0x11, 0x05, 0x5F, 0x0E, 0x5A, 0x54, 0x5B, 0x08, 0x23, 0x67, 0x20, 0x61, 0x1C, 0x42, - 0x66, 0x1F, 0x1A, 0x2D, 0x4B, 0x04, 0x55, 0x5C, 0x25, 0x4A, 0x50, 0x31, 0x44, 0x1D, 0x73, 0x2C, - 0x40, 0x6B, 0x6C, 0x18, 0x6E, 0x53, 0x24, 0x4E, 0x2A, 0x13, 0x0F, 0x29, 0x58, 0x77, 0x3B, 0x03}; - - static const std::size_t s9_substitution_size = 512; - typedef std::array s9_substitution_type; - constexpr static const s9_substitution_type s9_substitution = { - 0x00A7, 0x00EF, 0x00A1, 0x017B, 0x0187, 0x014E, 0x0009, 0x0152, 0x0026, 0x00E2, 0x0030, 0x0166, - 0x01C4, 0x0181, 0x005A, 0x018D, 0x00B7, 0x00FD, 0x0093, 0x014B, 0x019F, 0x0154, 0x0033, 0x016A, - 0x0132, 0x01F4, 0x0106, 0x0052, 0x00D8, 0x009F, 0x0164, 0x00B1, 0x00AF, 0x00F1, 0x01E9, 0x0025, - 0x00CE, 0x0011, 0x0000, 0x014D, 0x002C, 0x00FE, 0x017A, 0x003A, 0x008F, 0x00DC, 0x0051, 0x0190, - 0x005F, 0x0003, 0x013B, 0x00F5, 0x0036, 0x00EB, 0x00DA, 0x0195, 0x01D8, 0x0108, 0x00AC, 0x01EE, - 0x0173, 0x0122, 0x018F, 0x004C, 0x00A5, 0x00C5, 0x018B, 0x0079, 0x0101, 0x01E0, 0x01A7, 0x00D4, - 0x00F0, 0x001C, 0x01CE, 0x00B0, 0x0196, 0x01FB, 0x0120, 0x00DF, 0x01F5, 0x0197, 0x00F9, 0x0109, - 0x0059, 0x00BA, 0x00DD, 0x01AC, 0x00A4, 0x004A, 0x01B8, 0x00C4, 0x01CA, 0x01A5, 0x015E, 0x00A3, - 0x00E8, 0x009E, 0x0086, 0x0162, 0x000D, 0x00FA, 0x01EB, 0x008E, 0x00BF, 0x0045, 0x00C1, 0x01A9, - 0x0098, 0x00E3, 0x016E, 0x0087, 0x0158, 0x012C, 0x0114, 0x00F2, 0x01B5, 0x0140, 0x0071, 0x0116, - 0x000B, 0x00F3, 0x0057, 0x013D, 0x0024, 0x005D, 0x01F0, 0x001B, 0x01E7, 0x01BE, 0x01E2, 0x0029, - 0x0044, 0x009C, 0x01C9, 0x0083, 0x0146, 0x0193, 0x0153, 0x0014, 0x0027, 0x0073, 0x01BA, 0x007C, - 0x01DB, 0x0180, 0x01FC, 0x0035, 0x0070, 0x00AA, 0x01DF, 0x0097, 0x007E, 0x00A9, 0x0049, 0x010C, - 0x0117, 0x0141, 0x00A8, 0x016C, 0x016B, 0x0124, 0x002E, 0x01F3, 0x0189, 0x0147, 0x0144, 0x0018, - 0x01C8, 0x010B, 0x009D, 0x01CC, 0x01E8, 0x01AA, 0x0135, 0x00E5, 0x01B7, 0x01FA, 0x00D0, 0x010F, - 0x015D, 0x0191, 0x01B2, 0x00EC, 0x0010, 0x00D1, 0x0167, 0x0034, 0x0038, 0x0078, 0x00C7, 0x0115, - 0x01D1, 0x01A0, 0x00FC, 0x011F, 0x00F6, 0x0006, 0x0053, 0x0131, 0x01A4, 0x0159, 0x0099, 0x01F6, - 0x0041, 0x003D, 0x00F4, 0x011A, 0x00AD, 0x00DE, 0x01A2, 0x0043, 0x0182, 0x0170, 0x0105, 0x0065, - 0x01DC, 0x0123, 0x00C3, 0x01AE, 0x0031, 0x004F, 0x00A6, 0x014A, 0x0118, 0x017F, 0x0175, 0x0080, - 0x017E, 0x0198, 0x009B, 0x01EF, 0x016F, 0x0184, 0x0112, 0x006B, 0x01CB, 0x01A1, 0x003E, 0x01C6, - 0x0084, 0x00E1, 0x00CB, 0x013C, 0x00EA, 0x000E, 0x012D, 0x005B, 0x01F7, 0x011E, 0x01A8, 0x00D3, - 0x015B, 0x0133, 0x008C, 0x0176, 0x0023, 0x0067, 0x007D, 0x01AB, 0x0013, 0x00D6, 0x01C5, 0x0092, - 0x01F2, 0x013A, 0x01BC, 0x00E6, 0x0100, 0x0149, 0x00C6, 0x011D, 0x0032, 0x0074, 0x004E, 0x019A, - 0x000A, 0x00CD, 0x01FE, 0x00AB, 0x00E7, 0x002D, 0x008B, 0x01D3, 0x001D, 0x0056, 0x01F9, 0x0020, - 0x0048, 0x001A, 0x0156, 0x0096, 0x0139, 0x01EA, 0x01AF, 0x00EE, 0x019B, 0x0145, 0x0095, 0x01D9, - 0x0028, 0x0077, 0x00AE, 0x0163, 0x00B9, 0x00E9, 0x0185, 0x0047, 0x01C0, 0x0111, 0x0174, 0x0037, - 0x006E, 0x00B2, 0x0142, 0x000C, 0x01D5, 0x0188, 0x0171, 0x00BE, 0x0001, 0x006D, 0x0177, 0x0089, - 0x00B5, 0x0058, 0x004B, 0x0134, 0x0104, 0x01E4, 0x0062, 0x0110, 0x0172, 0x0113, 0x019C, 0x006F, - 0x0150, 0x013E, 0x0004, 0x01F8, 0x01EC, 0x0103, 0x0130, 0x004D, 0x0151, 0x01B3, 0x0015, 0x0165, - 0x012F, 0x014C, 0x01E3, 0x0012, 0x002F, 0x0055, 0x0019, 0x01F1, 0x01DA, 0x0121, 0x0064, 0x010D, - 0x0128, 0x01DE, 0x010E, 0x006A, 0x001F, 0x0068, 0x01B1, 0x0054, 0x019E, 0x01E6, 0x018A, 0x0060, - 0x0063, 0x009A, 0x01FF, 0x0094, 0x019D, 0x0169, 0x0199, 0x00FF, 0x00A2, 0x00D7, 0x012E, 0x00C9, - 0x010A, 0x015F, 0x0157, 0x0090, 0x01B9, 0x016D, 0x006C, 0x012A, 0x00FB, 0x0022, 0x00B6, 0x01FD, - 0x008A, 0x00D2, 0x014F, 0x0085, 0x0137, 0x0160, 0x0148, 0x008D, 0x018C, 0x015A, 0x007B, 0x013F, - 0x01C2, 0x0119, 0x01AD, 0x00E4, 0x01BB, 0x01E1, 0x005C, 0x0194, 0x01E5, 0x01A6, 0x00F8, 0x0129, - 0x0017, 0x00D5, 0x0082, 0x01D2, 0x0016, 0x00D9, 0x011B, 0x0046, 0x0126, 0x0168, 0x01A3, 0x007F, - 0x0138, 0x0179, 0x0007, 0x01D4, 0x00C2, 0x0002, 0x0075, 0x0127, 0x01CF, 0x0102, 0x00E0, 0x01BF, - 0x00F7, 0x00BB, 0x0050, 0x018E, 0x011C, 0x0161, 0x0069, 0x0186, 0x012B, 0x01D7, 0x01D6, 0x00B8, - 0x0039, 0x00C8, 0x015C, 0x003F, 0x00CC, 0x00BC, 0x0021, 0x01C3, 0x0061, 0x001E, 0x0136, 0x00DB, - 0x005E, 0x00A0, 0x0081, 0x01ED, 0x0040, 0x00B3, 0x0107, 0x0066, 0x00BD, 0x00CF, 0x0072, 0x0192, - 0x01B6, 0x01DD, 0x0183, 0x007A, 0x00C0, 0x002A, 0x017D, 0x0005, 0x0091, 0x0076, 0x00B4, 0x01C1, - 0x0125, 0x0143, 0x0088, 0x017C, 0x002B, 0x0042, 0x003C, 0x01C7, 0x0155, 0x01BD, 0x00CA, 0x01B0, - 0x0008, 0x00ED, 0x000F, 0x0178, 0x01B4, 0x01D0, 0x003B, 0x01CD}; - }; - - constexpr const typename kasumi_policy::s7_substitution_type kasumi_policy::s7_substitution; - - constexpr const typename kasumi_policy::s9_substitution_type kasumi_policy::s9_substitution; - - constexpr const typename kasumi_policy::round_constants_type kasumi_policy::round_constants; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_KASUMI_POLICY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/md4/md4_functions.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/md4/md4_functions.hpp deleted file mode 100644 index fd1e287b98..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/md4/md4_functions.hpp +++ /dev/null @@ -1,54 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MD4_FUNCTIONS_HPP -#define CRYPTO3_MD4_FUNCTIONS_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - struct md4_functions : public ::nil::crypto3::detail::basic_functions<32> { - static word_type ff(word_type x, word_type y, word_type z) { - return (x & y) | (~x & z); - } - - static word_type gg(word_type x, word_type y, word_type z) { - return (x & y) | (x & z) | (y & z); - } - - static word_type hh(word_type x, word_type y, word_type z) { - return x ^ y ^ z; - } - }; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_MD4_FUNCTIONS_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/md4/md4_policy.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/md4/md4_policy.hpp deleted file mode 100644 index f0cd61ee45..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/md4/md4_policy.hpp +++ /dev/null @@ -1,64 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_CIPHERS_DETAIL_MD4_POLICY_HPP -#define CRYPTO3_BLOCK_CIPHERS_DETAIL_MD4_POLICY_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - struct md4_policy : md4_functions { - - constexpr static const std::size_t block_bits = 128; - constexpr static const std::size_t block_words = block_bits / word_bits; - typedef std::array block_type; - - constexpr static const std::size_t key_words = 16; - constexpr static const std::size_t key_bits = key_words * word_bits; - typedef std::array key_type; - - constexpr static const std::size_t rounds = 48; - typedef std::array key_indexes_type; - - constexpr static const key_indexes_type key_indexes = {{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - - 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, - - 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, - }}; - }; - - constexpr md4_policy::key_indexes_type const md4_policy::key_indexes; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHERS_DETAIL_MD4_POLICY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/md5/md5_functions.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/md5/md5_functions.hpp deleted file mode 100644 index 9c3268d641..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/md5/md5_functions.hpp +++ /dev/null @@ -1,57 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MD5_FUNCTIONS_HPP -#define CRYPTO3_MD5_FUNCTIONS_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - struct md5_functions : public ::nil::crypto3::detail::basic_functions<32> { - static word_type ff(word_type x, word_type y, word_type z) { - return (x & y) | (~x & z); - } - - static word_type gg(word_type x, word_type y, word_type z) { - return (x & z) | (y & ~z); - // return F(z, x, y); - } - - static word_type hh(word_type x, word_type y, word_type z) { - return x ^ y ^ z; - } - - static word_type ii(word_type x, word_type y, word_type z) { - return y ^ (x | ~z); - } - }; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_MD5_FUNCTIONS_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/md5/md5_policy.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/md5/md5_policy.hpp deleted file mode 100644 index 8e738eb749..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/md5/md5_policy.hpp +++ /dev/null @@ -1,84 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_CIPHERS_DETAIL_MD5_POLICY_HPP -#define CRYPTO3_BLOCK_CIPHERS_DETAIL_MD5_POLICY_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - - struct md5_policy : md5_functions { - - constexpr static const std::size_t block_bits = 128; - constexpr static const std::size_t block_words = block_bits / word_bits; - typedef std::array block_type; - - constexpr static const std::size_t key_words = 16; - constexpr static const std::size_t key_bits = key_words * word_bits; - typedef std::array key_type; - - constexpr static const std::size_t rounds = 64; - typedef std::array constants_type; - typedef std::array key_indexes_type; - - constexpr static const constants_type constants = {{ - 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, - 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, - - 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, - 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, - - 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, - 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, - - 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, - 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, - }}; - - constexpr static const key_indexes_type key_indexes = {{ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - - 1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, - - 5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2, - - 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9, - }}; - }; - - constexpr md5_policy::constants_type const md5_policy::constants; - constexpr md5_policy::key_indexes_type const md5_policy::key_indexes; - - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHERS_DETAIL_MD5_POLICY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/nop_finalizer.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/nop_finalizer.hpp deleted file mode 100644 index 032b6d9069..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/nop_finalizer.hpp +++ /dev/null @@ -1,42 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_NOP_FINALIZER_HPP -#define CRYPTO3_BLOCK_NOP_FINALIZER_HPP - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - struct nop_finalizer { - template - void operator()(T &) { - } - }; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_NOP_FINALIZER_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_armv8_impl.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_armv8_impl.hpp deleted file mode 100644 index 2aa539422e..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_armv8_impl.hpp +++ /dev/null @@ -1,353 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_RIJNDAEL_ARMV8_IMPL_HPP -#define CRYPTO3_RIJNDAEL_ARMV8_IMPL_HPP - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { -#define AES_ENC_4_ROUNDS(K) \ - do { \ - B0 = vaesmcq_u8(vaeseq_u8(B0, K)); \ - B1 = vaesmcq_u8(vaeseq_u8(B1, K)); \ - B2 = vaesmcq_u8(vaeseq_u8(B2, K)); \ - B3 = vaesmcq_u8(vaeseq_u8(B3, K)); \ - } while (0) - -#define AES_ENC_4_LAST_ROUNDS(K, K2) \ - do { \ - B0 = veorq_u8(vaeseq_u8(B0, K), K2); \ - B1 = veorq_u8(vaeseq_u8(B1, K), K2); \ - B2 = veorq_u8(vaeseq_u8(B2, K), K2); \ - B3 = veorq_u8(vaeseq_u8(B3, K), K2); \ - } while (0) - -#define AES_DEC_4_ROUNDS(K) \ - do { \ - B0 = vaesimcq_u8(vaesdq_u8(B0, K)); \ - B1 = vaesimcq_u8(vaesdq_u8(B1, K)); \ - B2 = vaesimcq_u8(vaesdq_u8(B2, K)); \ - B3 = vaesimcq_u8(vaesdq_u8(B3, K)); \ - } while (0) - -#define AES_DEC_4_LAST_ROUNDS(K, K2) \ - do { \ - B0 = veorq_u8(vaesdq_u8(B0, K), K2); \ - B1 = veorq_u8(vaesdq_u8(B1, K), K2); \ - B2 = veorq_u8(vaesdq_u8(B2, K), K2); \ - B3 = veorq_u8(vaesdq_u8(B3, K), K2); \ - } while (0) - - template - class basic_armv8_rijndael_impl { - static_assert(BlockBitsImpl != 128, "Wrong block size!"); - }; - - template - class basic_armv8_rijndael_impl; - - template - class rijndael_armv8_impl : public basic_armv8_rijndael_impl { - static_assert(BlockBitsImpl != 128, "Wrong block size!"); - }; - - template - class rijndael_armv8_impl; - - template - class basic_armv8_rijndael_impl { - protected: - typedef rijndael_policy policy_type; - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - public: - static inline void schedule_key(const key_type &key, - key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { - rijndael_impl::schedule_key(key, encryption_key, decryption_key); - - for (typename key_schedule_type::value_type &c : encryption_key) { - boost::endian::endian_reverse_inplace(c); - } - for (typename key_schedule_type::value_type &c : decryption_key) { - boost::endian::endian_reverse_inplace(c); - } - } - }; - - template<> - class rijndael_armv8_impl<128, 128> : public basic_armv8_rijndael_impl<128, 128> { - typedef rijndael_policy<128, 128> policy_type; - - public: - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - typename policy_type::block_type out = {0}; - - const uint8_t *skey = reinterpret_cast(encryption_key.data()); - - const uint8x16_t K0 = vld1q_u8(skey + 0); - const uint8x16_t K1 = vld1q_u8(skey + 16); - const uint8x16_t K2 = vld1q_u8(skey + 32); - const uint8x16_t K3 = vld1q_u8(skey + 48); - const uint8x16_t K4 = vld1q_u8(skey + 64); - const uint8x16_t K5 = vld1q_u8(skey + 80); - const uint8x16_t K6 = vld1q_u8(skey + 96); - const uint8x16_t K7 = vld1q_u8(skey + 112); - const uint8x16_t K8 = vld1q_u8(skey + 128); - const uint8x16_t K9 = vld1q_u8(skey + 144); - const uint8x16_t K10 = vld1q_u8(skey + 160); - - uint8x16_t B = vld1q_u8(plaintext.data()); - B = vaesmcq_u8(vaeseq_u8(B, K0)); - B = vaesmcq_u8(vaeseq_u8(B, K1)); - B = vaesmcq_u8(vaeseq_u8(B, K2)); - B = vaesmcq_u8(vaeseq_u8(B, K3)); - B = vaesmcq_u8(vaeseq_u8(B, K4)); - B = vaesmcq_u8(vaeseq_u8(B, K5)); - B = vaesmcq_u8(vaeseq_u8(B, K6)); - B = vaesmcq_u8(vaeseq_u8(B, K7)); - B = vaesmcq_u8(vaeseq_u8(B, K8)); - B = veorq_u8(vaeseq_u8(B, K9), K10); - vst1q_u8(out.data(), B); - - return out; - } - - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type out = {0}; - - const uint8_t *skey = reinterpret_cast(decryption_key.data()); - - const uint8x16_t K0 = vld1q_u8(skey + 0); - const uint8x16_t K1 = vld1q_u8(skey + 16); - const uint8x16_t K2 = vld1q_u8(skey + 32); - const uint8x16_t K3 = vld1q_u8(skey + 48); - const uint8x16_t K4 = vld1q_u8(skey + 64); - const uint8x16_t K5 = vld1q_u8(skey + 80); - const uint8x16_t K6 = vld1q_u8(skey + 96); - const uint8x16_t K7 = vld1q_u8(skey + 112); - const uint8x16_t K8 = vld1q_u8(skey + 128); - const uint8x16_t K9 = vld1q_u8(skey + 144); - const uint8x16_t K10 = vld1q_u8(skey + 160); - - uint8x16_t B = vld1q_u8(plaintext.data()); - B = vaesimcq_u8(vaesdq_u8(B, K0)); - B = vaesimcq_u8(vaesdq_u8(B, K1)); - B = vaesimcq_u8(vaesdq_u8(B, K2)); - B = vaesimcq_u8(vaesdq_u8(B, K3)); - B = vaesimcq_u8(vaesdq_u8(B, K4)); - B = vaesimcq_u8(vaesdq_u8(B, K5)); - B = vaesimcq_u8(vaesdq_u8(B, K6)); - B = vaesimcq_u8(vaesdq_u8(B, K7)); - B = vaesimcq_u8(vaesdq_u8(B, K8)); - B = veorq_u8(vaesdq_u8(B, K9), K10); - - vst1q_u8(out.data(), B); - - return out; - } - }; - - template<> - class rijndael_armv8_impl<192, 128> : public basic_armv8_rijndael_impl<192, 128> { - public: - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - - const uint8_t *skey = reinterpret_cast(encryption_key.data()); - - const uint8x16_t K0 = vld1q_u8(skey + 0); - const uint8x16_t K1 = vld1q_u8(skey + 16); - const uint8x16_t K2 = vld1q_u8(skey + 32); - const uint8x16_t K3 = vld1q_u8(skey + 48); - const uint8x16_t K4 = vld1q_u8(skey + 64); - const uint8x16_t K5 = vld1q_u8(skey + 80); - const uint8x16_t K6 = vld1q_u8(skey + 96); - const uint8x16_t K7 = vld1q_u8(skey + 112); - const uint8x16_t K8 = vld1q_u8(skey + 128); - const uint8x16_t K9 = vld1q_u8(skey + 144); - const uint8x16_t K10 = vld1q_u8(skey + 160); - const uint8x16_t K11 = vld1q_u8(skey + 176); - const uint8x16_t K12 = vld1q_u8(skey + 192); - - uint8x16_t B = vld1q_u8(plaintext.data()); - B = vaesmcq_u8(vaeseq_u8(B, K0)); - B = vaesmcq_u8(vaeseq_u8(B, K1)); - B = vaesmcq_u8(vaeseq_u8(B, K2)); - B = vaesmcq_u8(vaeseq_u8(B, K3)); - B = vaesmcq_u8(vaeseq_u8(B, K4)); - B = vaesmcq_u8(vaeseq_u8(B, K5)); - B = vaesmcq_u8(vaeseq_u8(B, K6)); - B = vaesmcq_u8(vaeseq_u8(B, K7)); - B = vaesmcq_u8(vaeseq_u8(B, K8)); - B = vaesmcq_u8(vaeseq_u8(B, K9)); - B = vaesmcq_u8(vaeseq_u8(B, K10)); - B = veorq_u8(vaeseq_u8(B, K11), K12); - vst1q_u8(out.data(), B); - - return out; - } - - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type out = {0}; - const uint8_t *skey = reinterpret_cast(decryption_key.data()); - - const uint8x16_t K0 = vld1q_u8(skey + 0); - const uint8x16_t K1 = vld1q_u8(skey + 16); - const uint8x16_t K2 = vld1q_u8(skey + 32); - const uint8x16_t K3 = vld1q_u8(skey + 48); - const uint8x16_t K4 = vld1q_u8(skey + 64); - const uint8x16_t K5 = vld1q_u8(skey + 80); - const uint8x16_t K6 = vld1q_u8(skey + 96); - const uint8x16_t K7 = vld1q_u8(skey + 112); - const uint8x16_t K8 = vld1q_u8(skey + 128); - const uint8x16_t K9 = vld1q_u8(skey + 144); - const uint8x16_t K10 = vld1q_u8(skey + 160); - const uint8x16_t K11 = vld1q_u8(skey + 176); - const uint8x16_t K12 = vld1q_u8(skey + 192); - - uint8x16_t B = vld1q_u8(plaintext.data()); - B = vaesimcq_u8(vaesdq_u8(B, K0)); - B = vaesimcq_u8(vaesdq_u8(B, K1)); - B = vaesimcq_u8(vaesdq_u8(B, K2)); - B = vaesimcq_u8(vaesdq_u8(B, K3)); - B = vaesimcq_u8(vaesdq_u8(B, K4)); - B = vaesimcq_u8(vaesdq_u8(B, K5)); - B = vaesimcq_u8(vaesdq_u8(B, K6)); - B = vaesimcq_u8(vaesdq_u8(B, K7)); - B = vaesimcq_u8(vaesdq_u8(B, K8)); - B = vaesimcq_u8(vaesdq_u8(B, K9)); - B = vaesimcq_u8(vaesdq_u8(B, K10)); - B = veorq_u8(vaesdq_u8(B, K11), K12); - vst1q_u8(out.data(), B); - - return out; - } - }; - - template<> - class rijndael_armv8_impl<256, 128> : public basic_armv8_rijndael_impl<256, 128> { - public: - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - const uint8_t *skey = reinterpret_cast(encryption_key.data()); - - const uint8x16_t K0 = vld1q_u8(skey + 0); - const uint8x16_t K1 = vld1q_u8(skey + 16); - const uint8x16_t K2 = vld1q_u8(skey + 32); - const uint8x16_t K3 = vld1q_u8(skey + 48); - const uint8x16_t K4 = vld1q_u8(skey + 64); - const uint8x16_t K5 = vld1q_u8(skey + 80); - const uint8x16_t K6 = vld1q_u8(skey + 96); - const uint8x16_t K7 = vld1q_u8(skey + 112); - const uint8x16_t K8 = vld1q_u8(skey + 128); - const uint8x16_t K9 = vld1q_u8(skey + 144); - const uint8x16_t K10 = vld1q_u8(skey + 160); - const uint8x16_t K11 = vld1q_u8(skey + 176); - const uint8x16_t K12 = vld1q_u8(skey + 192); - const uint8x16_t K13 = vld1q_u8(skey + 208); - const uint8x16_t K14 = vld1q_u8(skey + 224); - - uint8x16_t B = vld1q_u8(plaintext.data()); - B = vaesmcq_u8(vaeseq_u8(B, K0)); - B = vaesmcq_u8(vaeseq_u8(B, K1)); - B = vaesmcq_u8(vaeseq_u8(B, K2)); - B = vaesmcq_u8(vaeseq_u8(B, K3)); - B = vaesmcq_u8(vaeseq_u8(B, K4)); - B = vaesmcq_u8(vaeseq_u8(B, K5)); - B = vaesmcq_u8(vaeseq_u8(B, K6)); - B = vaesmcq_u8(vaeseq_u8(B, K7)); - B = vaesmcq_u8(vaeseq_u8(B, K8)); - B = vaesmcq_u8(vaeseq_u8(B, K9)); - B = vaesmcq_u8(vaeseq_u8(B, K10)); - B = vaesmcq_u8(vaeseq_u8(B, K11)); - B = vaesmcq_u8(vaeseq_u8(B, K12)); - B = veorq_u8(vaeseq_u8(B, K13), K14); - vst1q_u8(out.data(), B); - - return out; - } - - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type out = {0}; - - const uint8_t *skey = reinterpret_cast(decryption_key.data()); - - const uint8x16_t K0 = vld1q_u8(skey + 0); - const uint8x16_t K1 = vld1q_u8(skey + 16); - const uint8x16_t K2 = vld1q_u8(skey + 32); - const uint8x16_t K3 = vld1q_u8(skey + 48); - const uint8x16_t K4 = vld1q_u8(skey + 64); - const uint8x16_t K5 = vld1q_u8(skey + 80); - const uint8x16_t K6 = vld1q_u8(skey + 96); - const uint8x16_t K7 = vld1q_u8(skey + 112); - const uint8x16_t K8 = vld1q_u8(skey + 128); - const uint8x16_t K9 = vld1q_u8(skey + 144); - const uint8x16_t K10 = vld1q_u8(skey + 160); - const uint8x16_t K11 = vld1q_u8(skey + 176); - const uint8x16_t K12 = vld1q_u8(skey + 192); - const uint8x16_t K13 = vld1q_u8(skey + 208); - const uint8x16_t K14 = vld1q_u8(skey + 224); - - uint8x16_t B = vld1q_u8(plaintext.data()); - B = vaesimcq_u8(vaesdq_u8(B, K0)); - B = vaesimcq_u8(vaesdq_u8(B, K1)); - B = vaesimcq_u8(vaesdq_u8(B, K2)); - B = vaesimcq_u8(vaesdq_u8(B, K3)); - B = vaesimcq_u8(vaesdq_u8(B, K4)); - B = vaesimcq_u8(vaesdq_u8(B, K5)); - B = vaesimcq_u8(vaesdq_u8(B, K6)); - B = vaesimcq_u8(vaesdq_u8(B, K7)); - B = vaesimcq_u8(vaesdq_u8(B, K8)); - B = vaesimcq_u8(vaesdq_u8(B, K9)); - B = vaesimcq_u8(vaesdq_u8(B, K10)); - B = vaesimcq_u8(vaesdq_u8(B, K11)); - B = vaesimcq_u8(vaesdq_u8(B, K12)); - B = veorq_u8(vaesdq_u8(B, K13), K14); - vst1q_u8(out.data(), B); - - return out; - } - }; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_RIJNDAEL_ARMV8_IMPL_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_functions.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_functions.hpp deleted file mode 100644 index cf03b4e557..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_functions.hpp +++ /dev/null @@ -1,177 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_RIJNDAEL_FUNCTIONS_CPP_HPP -#define CRYPTO3_RIJNDAEL_FUNCTIONS_CPP_HPP - -#include - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - template - struct rijndael_functions : public ::nil::crypto3::detail::basic_functions { - constexpr static const std::size_t byte_bits = - ::nil::crypto3::detail::basic_functions::byte_bits; - typedef typename ::nil::crypto3::detail::basic_functions::byte_type byte_type; - - constexpr static const std::size_t word_bits = - ::nil::crypto3::detail::basic_functions::word_bits; - constexpr static const std::size_t word_bytes = word_bits / byte_bits; - typedef std::array word_type; - - constexpr static const std::size_t constants_size = 256; - typedef std::array constants_type; - typedef std::array prefetched_constants_type; - - BOOST_ALIGNMENT(64) - constexpr static const constants_type log_ = { - 0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3, 100, 4, 224, - 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193, 125, 194, 29, 181, 249, 185, - 39, 106, 77, 228, 166, 114, 154, 201, 9, 120, 101, 47, 138, 5, 33, 15, 225, 36, 18, - 240, 130, 69, 53, 147, 218, 142, 150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, - 64, 70, 131, 56, 102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, - 16, 126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186, 43, 121, - 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87, 175, 88, 168, 80, 244, - 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232, 44, 215, 117, 122, 235, 22, 11, 245, - 89, 203, 95, 176, 156, 169, 81, 160, 127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, - 45, 164, 118, 123, 183, 204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, - 41, 157, 151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209, 83, - 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171, 68, 17, 146, 217, - 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165, 103, 74, 237, 222, 197, 49, 254, - 24, 13, 99, 140, 128, 192, 247, 112, 7}; - - BOOST_ALIGNMENT(64) - constexpr static const constants_type pow_ = { - 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53, 95, 225, 56, - 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170, 229, 52, 92, 228, 55, 89, - 235, 38, 106, 190, 217, 112, 144, 171, 230, 49, 83, 245, 4, 12, 20, 60, 68, 204, 79, - 209, 104, 184, 211, 110, 178, 205, 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, - 24, 40, 120, 136, 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, - 154, 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163, 254, 25, - 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160, 251, 22, 58, 78, 210, - 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65, 195, 94, 226, 61, 71, 201, 64, 192, - 91, 237, 44, 116, 156, 191, 218, 117, 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, - 223, 122, 142, 137, 128, 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, - 197, 84, 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, 69, - 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, 18, 54, 90, 238, - 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, 57, 75, 221, 124, 132, 151, 162, - 253, 28, 36, 108, 180, 199, 82, 246, 1}; - - inline static byte_type mul(byte_type x, byte_type y) { - if (x && y) { - return pow_[(log_[x] + log_[y]) % 255]; - } else { - return 0; - } - } - - inline static typename ::nil::crypto3::detail::basic_functions::word_type - rotate_left(typename ::nil::crypto3::detail::basic_functions::word_type x) { - uint8_t c = reinterpret_cast(&x)[0]; - for (int i = 0; i < 3; i++) { - reinterpret_cast(&x)[i] = reinterpret_cast(&x)[i + 1]; - } - reinterpret_cast(&x)[3] = c; - return x; - } - - inline static byte_type xtime(byte_type s) { - return static_cast(static_cast(s << 1) ^ ((s >> 7) * 0x1B)); - } - - inline static byte_type xtime4(byte_type s) { - return xtime(xtime(s)); - } - - inline static byte_type xtime8(byte_type s) { - return xtime(xtime(xtime(s))); - } - - inline static byte_type xtime3(byte_type s) { - return xtime(s) ^ s; - } - - inline static byte_type xtime9(byte_type s) { - return xtime8(s) ^ s; - } - - inline static byte_type xtime11(byte_type s) { - return xtime8(s) ^ xtime(s) ^ s; - } - - inline static byte_type xtime13(byte_type s) { - return xtime8(s) ^ xtime4(s) ^ s; - } - - inline static byte_type xtime14(byte_type s) { - return xtime8(s) ^ xtime4(s) ^ xtime(s); - } - - static const prefetched_constants_type prefetch_constants(const constants_type &constants) { - BOOST_ALIGNMENT(64) prefetched_constants_type result; - - copy_n_if(constants.begin(), result.size(), result.begin(), - [](const typename constants_type::value_type &c) -> - typename prefetched_constants_type::value_type { - return {xtime(c), c, c, xtime3(c)}; - }); - - return result; - } - - static const prefetched_constants_type - prefetch_inverted_constants(const constants_type &constants) { - BOOST_ALIGNMENT(64) prefetched_constants_type result; - - copy_n_if(constants.begin(), result.size(), result.begin(), - [](const typename constants_type::value_type &c) -> - typename prefetched_constants_type::value_type { - return {xtime14(c), xtime9(c), xtime13(c), xtime11(c)}; - }); - - return result; - } - }; - - template - BOOST_ALIGNMENT(64) - constexpr typename rijndael_functions::constants_type const - rijndael_functions::log_; - - template - BOOST_ALIGNMENT(64) - constexpr typename rijndael_functions::constants_type const - rijndael_functions::pow_; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_RIJNDAEL_FUNCTIONS_CPP_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_impl.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_impl.hpp deleted file mode 100644 index 0dc9fb7196..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_impl.hpp +++ /dev/null @@ -1,230 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_RIJNDAEL_IMPL_HPP -#define CRYPTO3_RIJNDAEL_IMPL_HPP - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @cond DETAIL_IMPL - */ - namespace detail { - template - class rijndael_impl { - typedef rijndael_policy policy_type; - - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - typedef typename policy_type::key_schedule_word_type key_schedule_word_type; - - typedef typename policy_type::block_type block_type; - - typedef typename policy_type::constants_type constants_type; - typedef typename policy_type::shift_offsets_type shift_offsets_type; - typedef typename policy_type::mm_type mm_type; - - BOOST_STATIC_ASSERT(KeyBitsImpl == policy_type::key_bits); - BOOST_STATIC_ASSERT(BlockBitsImpl == policy_type::block_bits); - - static inline key_schedule_word_type sub_word(const key_schedule_word_type &x, - const constants_type &constants) { - key_schedule_word_type result = {0}; - - for (std::size_t i = 0; i < policy_type::word_bytes; ++i) { - result = - result << CHAR_BIT | constants[::nil::crypto3::detail::extract_uint_t(x, i)]; - } - - return result; - } - - static inline void sub_bytes(block_type &state, const constants_type &sbox) { - - for (std::size_t i = 0; i < policy_type::word_bytes * policy_type::block_words; ++i) { - state[i] = sbox[state[i]]; - } - } - - static inline void shift_rows(block_type &state, const shift_offsets_type &offset) { - std::array tmp = {0}; - - // row 0 never gets shifted - - for (std::size_t row = 1; row < policy_type::word_bytes; ++row) { - const std::size_t off = offset[row - 1]; - - for (std::size_t i = 0; i < off; ++i) { - tmp[i] = state[i * policy_type::word_bytes + row]; - } - - for (std::size_t i = 0; i < policy_type::block_words - off; ++i) { - state[i * policy_type::word_bytes + row] = - state[(i + off) * policy_type::word_bytes + row]; - } - - for (std::size_t i = 0; i < off; ++i) { - state[(policy_type::block_words - off + i) * policy_type::word_bytes + row] = - tmp[i]; - } - } - } - - template - static inline block_type mix_columns(const StateType &state, const mm_type &mm) { - block_type tmp = {0}; - - for (std::size_t col = 0; col < policy_type::block_words; ++col) { - - for (std::size_t row = 0; row < policy_type::word_bytes; ++row) { - - for (std::size_t k = 0; k < policy_type::word_bytes; ++k) { - tmp[col * policy_type::word_bytes + row] ^= - policy_type::mul(mm[row * policy_type::word_bytes + k], - state[col * policy_type::word_bytes + k]); - } - } - } - - return tmp; - } - - template - static inline void add_round_key(block_type &state, InputIterator first, InputIterator last) { - BOOST_ASSERT(std::distance(first, last) == policy_type::block_words && - state.size() == policy_type::block_bytes); - - for (std::size_t i = 0; i < policy_type::block_words && first != last; ++i && ++first) { - - for (std::size_t j = 0; j < policy_type::word_bytes; ++j) { - state[i * policy_type::word_bytes + j] ^= - ::nil::crypto3::detail::extract_uint_t(*first, - policy_type::word_bytes - (j + 1)); - } - } - } - - static inline void apply_round(std::uint8_t round, block_type &state, const key_schedule_type &w, - const constants_type &sbox, const shift_offsets_type &offsets, - const mm_type &mm) { - sub_bytes(state, sbox); - shift_rows(state, offsets); - state = mix_columns(state, mm); - add_round_key(state, w.begin() + round * policy_type::block_words, - w.begin() + (round + 1) * policy_type::block_words); - } - - public: - static typename policy_type::block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type state = plaintext; - - add_round_key(state, encryption_key.begin(), encryption_key.begin() + policy_type::block_words); - - for (std::size_t round = 1; round < policy_type::rounds; ++round) { - apply_round(round, state, encryption_key, policy_type::constants, - policy_type::shift_offsets, policy_type::mm); - } - - sub_bytes(state, policy_type::constants); - shift_rows(state, policy_type::shift_offsets); - add_round_key(state, encryption_key.begin() + policy_type::rounds * policy_type::block_words, - encryption_key.begin() + (policy_type::rounds + 1) * policy_type::block_words); - - return state; - } - - static typename policy_type::block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type state = plaintext; - - add_round_key(state, decryption_key.begin() + policy_type::rounds * policy_type::block_words, - decryption_key.begin() + (policy_type::rounds + 1) * policy_type::block_words); - - for (std::size_t round = policy_type::rounds - 1; round > 0; --round) { - apply_round(round, state, decryption_key, policy_type::inverted_constants, - policy_type::inverted_shift_offsets, policy_type::inverted_mm); - } - - sub_bytes(state, policy_type::inverted_constants); - shift_rows(state, policy_type::inverted_shift_offsets); - add_round_key(state, decryption_key.begin(), decryption_key.begin() + policy_type::block_words); - - return state; - } - - static void schedule_key(const key_type &key, key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { - // the first key_words words are the original key - ::nil::crypto3::detail::pack( - key.begin(), key.begin() + policy_type::key_words * policy_type::word_bytes, - encryption_key.begin()); - - for (std::size_t i = policy_type::key_words; i < policy_type::key_schedule_words; ++i) { - typename policy_type::key_schedule_word_type tmp = encryption_key[i - 1]; - if (i % policy_type::key_words == 0) { - tmp = sub_word(policy_type::rotate_left(tmp), policy_type::constants) ^ - policy_type::round_constants[i / policy_type::key_words - 1]; - } else if (policy_type::key_words > 6 && i % policy_type::key_words == 4) { - tmp = sub_word(tmp, policy_type::constants); - } - encryption_key[i] = encryption_key[i - policy_type::key_words] ^ tmp; - } - - std::array bekey = {0}; - ::nil::crypto3::detail::pack(encryption_key.begin(), encryption_key.end(), - bekey.begin()); - - for (std::uint8_t round = 1; round < policy_type::rounds; ++round) { - move(mix_columns(boost::adaptors::slice(bekey, round * policy_type::block_bytes, - (round + 1) * policy_type::block_bytes), - policy_type::inverted_mm), - bekey.begin() + round * policy_type::block_bytes); - } - - ::nil::crypto3::detail::pack(bekey.begin(), bekey.end(), - decryption_key.begin()); - } - }; - } // namespace detail - /*! - * @endcond - */ - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_RIJNDAEL_IMPL_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_ni_impl.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_ni_impl.hpp deleted file mode 100644 index 33d556bbb5..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_ni_impl.hpp +++ /dev/null @@ -1,596 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_RIJNDAEL_NI_IMPL_HPP -#define CRYPTO3_RIJNDAEL_NI_IMPL_HPP - -#include - -#include - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @cond DETAIL_IMPL - */ - namespace detail { - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - __m128i aes_128_key_expansion(__m128i key, __m128i key_with_rcon) { - key_with_rcon = _mm_shuffle_epi32(key_with_rcon, _MM_SHUFFLE(3, 3, 3, 3)); - key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - return _mm_xor_si128(key, key_with_rcon); - } - - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - void aes_192_key_expansion(__m128i *K1, __m128i *K2, __m128i key2_with_rcon, uint32_t out[], - bool last) { - __m128i key1 = *K1; - __m128i key2 = *K2; - - key2_with_rcon = _mm_shuffle_epi32(key2_with_rcon, _MM_SHUFFLE(1, 1, 1, 1)); - key1 = _mm_xor_si128(key1, _mm_slli_si128(key1, 4)); - key1 = _mm_xor_si128(key1, _mm_slli_si128(key1, 4)); - key1 = _mm_xor_si128(key1, _mm_slli_si128(key1, 4)); - key1 = _mm_xor_si128(key1, key2_with_rcon); - - *K1 = key1; - _mm_storeu_si128(reinterpret_cast<__m128i *>(out), key1); - - if (last) { - return; - } - - key2 = _mm_xor_si128(key2, _mm_slli_si128(key2, 4)); - key2 = _mm_xor_si128(key2, _mm_shuffle_epi32(key1, _MM_SHUFFLE(3, 3, 3, 3))); - - *K2 = key2; - out[4] = _mm_cvtsi128_si32(key2); - out[5] = _mm_cvtsi128_si32(_mm_srli_si128(key2, 4)); - } - - /* - * The second half of the AES-256 key expansion (other half same as AES-128) - */ - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - __m128i aes_256_key_expansion(__m128i key, __m128i key2) { - __m128i key_with_rcon = _mm_aeskeygenassist_si128(key2, 0x00); - key_with_rcon = _mm_shuffle_epi32(key_with_rcon, _MM_SHUFFLE(2, 2, 2, 2)); - - key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - key = _mm_xor_si128(key, _mm_slli_si128(key, 4)); - return _mm_xor_si128(key, key_with_rcon); - } - - template - class rijndael_ni_impl { - typedef rijndael_policy policy_type; - - BOOST_STATIC_ASSERT(policy_type::block_bits == 128 && BlockBitsImpl == 128); - }; - - template<> - class rijndael_ni_impl<128, 128> { - typedef rijndael_policy<128, 128> policy_type; - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - BOOST_STATIC_ASSERT(policy_type::key_bits == 128); - - public: - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *key_mm = reinterpret_cast(encryption_key.data()); - - const __m128i K0 = _mm_loadu_si128(key_mm); - const __m128i K1 = _mm_loadu_si128(key_mm + 1); - const __m128i K2 = _mm_loadu_si128(key_mm + 2); - const __m128i K3 = _mm_loadu_si128(key_mm + 3); - const __m128i K4 = _mm_loadu_si128(key_mm + 4); - const __m128i K5 = _mm_loadu_si128(key_mm + 5); - const __m128i K6 = _mm_loadu_si128(key_mm + 6); - const __m128i K7 = _mm_loadu_si128(key_mm + 7); - const __m128i K8 = _mm_loadu_si128(key_mm + 8); - const __m128i K9 = _mm_loadu_si128(key_mm + 9); - const __m128i K10 = _mm_loadu_si128(key_mm + 10); - - __m128i B = _mm_loadu_si128(in_mm); - - B = _mm_xor_si128(B, K0); - - B = _mm_aesenc_si128(B, K1); - B = _mm_aesenc_si128(B, K2); - B = _mm_aesenc_si128(B, K3); - B = _mm_aesenc_si128(B, K4); - B = _mm_aesenc_si128(B, K5); - B = _mm_aesenc_si128(B, K6); - B = _mm_aesenc_si128(B, K7); - B = _mm_aesenc_si128(B, K8); - B = _mm_aesenc_si128(B, K9); - B = _mm_aesenclast_si128(B, K10); - - _mm_storeu_si128(out_mm, B); - - return out; - } - - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type out = {0}; - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *key_mm = reinterpret_cast(decryption_key.data()); - - const __m128i K0 = _mm_loadu_si128(key_mm); - const __m128i K1 = _mm_loadu_si128(key_mm + 1); - const __m128i K2 = _mm_loadu_si128(key_mm + 2); - const __m128i K3 = _mm_loadu_si128(key_mm + 3); - const __m128i K4 = _mm_loadu_si128(key_mm + 4); - const __m128i K5 = _mm_loadu_si128(key_mm + 5); - const __m128i K6 = _mm_loadu_si128(key_mm + 6); - const __m128i K7 = _mm_loadu_si128(key_mm + 7); - const __m128i K8 = _mm_loadu_si128(key_mm + 8); - const __m128i K9 = _mm_loadu_si128(key_mm + 9); - const __m128i K10 = _mm_loadu_si128(key_mm + 10); - - __m128i B = _mm_loadu_si128(in_mm); - - B = _mm_xor_si128(B, K0); - - B = _mm_aesdec_si128(B, K1); - B = _mm_aesdec_si128(B, K2); - B = _mm_aesdec_si128(B, K3); - B = _mm_aesdec_si128(B, K4); - B = _mm_aesdec_si128(B, K5); - B = _mm_aesdec_si128(B, K6); - B = _mm_aesdec_si128(B, K7); - B = _mm_aesdec_si128(B, K8); - B = _mm_aesdec_si128(B, K9); - B = _mm_aesdeclast_si128(B, K10); - - _mm_storeu_si128(out_mm, B); - - return out; - } - - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static void schedule_key(const key_type &input_key, - key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { -#define AES_128_KEY_EXPANSION(K, RCON) detail::aes_128_key_expansion(K, _mm_aeskeygenassist_si128(K, RCON)) - - const __m128i K0 = _mm_loadu_si128(reinterpret_cast(input_key.data())); - const __m128i K1 = AES_128_KEY_EXPANSION(K0, 0x01); - const __m128i K2 = AES_128_KEY_EXPANSION(K1, 0x02); - const __m128i K3 = AES_128_KEY_EXPANSION(K2, 0x04); - const __m128i K4 = AES_128_KEY_EXPANSION(K3, 0x08); - const __m128i K5 = AES_128_KEY_EXPANSION(K4, 0x10); - const __m128i K6 = AES_128_KEY_EXPANSION(K5, 0x20); - const __m128i K7 = AES_128_KEY_EXPANSION(K6, 0x40); - const __m128i K8 = AES_128_KEY_EXPANSION(K7, 0x80); - const __m128i K9 = AES_128_KEY_EXPANSION(K8, 0x1B); - const __m128i K10 = AES_128_KEY_EXPANSION(K9, 0x36); - -#undef AES_128_KEY_EXPANSION - - __m128i *EK_mm = reinterpret_cast<__m128i *>(encryption_key.data()); - _mm_storeu_si128(EK_mm, K0); - _mm_storeu_si128(EK_mm + 1, K1); - _mm_storeu_si128(EK_mm + 2, K2); - _mm_storeu_si128(EK_mm + 3, K3); - _mm_storeu_si128(EK_mm + 4, K4); - _mm_storeu_si128(EK_mm + 5, K5); - _mm_storeu_si128(EK_mm + 6, K6); - _mm_storeu_si128(EK_mm + 7, K7); - _mm_storeu_si128(EK_mm + 8, K8); - _mm_storeu_si128(EK_mm + 9, K9); - _mm_storeu_si128(EK_mm + 10, K10); - - // Now generate decryption keys - - __m128i *DK_mm = reinterpret_cast<__m128i *>(decryption_key.data()); - _mm_storeu_si128(DK_mm, K10); - _mm_storeu_si128(DK_mm + 1, _mm_aesimc_si128(K9)); - _mm_storeu_si128(DK_mm + 2, _mm_aesimc_si128(K8)); - _mm_storeu_si128(DK_mm + 3, _mm_aesimc_si128(K7)); - _mm_storeu_si128(DK_mm + 4, _mm_aesimc_si128(K6)); - _mm_storeu_si128(DK_mm + 5, _mm_aesimc_si128(K5)); - _mm_storeu_si128(DK_mm + 6, _mm_aesimc_si128(K4)); - _mm_storeu_si128(DK_mm + 7, _mm_aesimc_si128(K3)); - _mm_storeu_si128(DK_mm + 8, _mm_aesimc_si128(K2)); - _mm_storeu_si128(DK_mm + 9, _mm_aesimc_si128(K1)); - _mm_storeu_si128(DK_mm + 10, K0); - } - }; - - template<> - class rijndael_ni_impl<192, 128> { - protected: - typedef rijndael_policy<192, 128> policy_type; - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - BOOST_STATIC_ASSERT(policy_type::key_bits == 192); - - public: - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *key_mm = reinterpret_cast(encryption_key.data()); - - const __m128i K0 = _mm_loadu_si128(key_mm); - const __m128i K1 = _mm_loadu_si128(key_mm + 1); - const __m128i K2 = _mm_loadu_si128(key_mm + 2); - const __m128i K3 = _mm_loadu_si128(key_mm + 3); - const __m128i K4 = _mm_loadu_si128(key_mm + 4); - const __m128i K5 = _mm_loadu_si128(key_mm + 5); - const __m128i K6 = _mm_loadu_si128(key_mm + 6); - const __m128i K7 = _mm_loadu_si128(key_mm + 7); - const __m128i K8 = _mm_loadu_si128(key_mm + 8); - const __m128i K9 = _mm_loadu_si128(key_mm + 9); - const __m128i K10 = _mm_loadu_si128(key_mm + 10); - const __m128i K11 = _mm_loadu_si128(key_mm + 11); - const __m128i K12 = _mm_loadu_si128(key_mm + 12); - - __m128i B = _mm_loadu_si128(in_mm); - - B = _mm_xor_si128(B, K0); - - B = _mm_aesenc_si128(B, K1); - B = _mm_aesenc_si128(B, K2); - B = _mm_aesenc_si128(B, K3); - B = _mm_aesenc_si128(B, K4); - B = _mm_aesenc_si128(B, K5); - B = _mm_aesenc_si128(B, K6); - B = _mm_aesenc_si128(B, K7); - B = _mm_aesenc_si128(B, K8); - B = _mm_aesenc_si128(B, K9); - B = _mm_aesenc_si128(B, K10); - B = _mm_aesenc_si128(B, K11); - B = _mm_aesenclast_si128(B, K12); - - _mm_storeu_si128(out_mm, B); - - return out; - } - - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type out = {0}; - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *key_mm = reinterpret_cast(decryption_key.data()); - - const __m128i K0 = _mm_loadu_si128(key_mm); - const __m128i K1 = _mm_loadu_si128(key_mm + 1); - const __m128i K2 = _mm_loadu_si128(key_mm + 2); - const __m128i K3 = _mm_loadu_si128(key_mm + 3); - const __m128i K4 = _mm_loadu_si128(key_mm + 4); - const __m128i K5 = _mm_loadu_si128(key_mm + 5); - const __m128i K6 = _mm_loadu_si128(key_mm + 6); - const __m128i K7 = _mm_loadu_si128(key_mm + 7); - const __m128i K8 = _mm_loadu_si128(key_mm + 8); - const __m128i K9 = _mm_loadu_si128(key_mm + 9); - const __m128i K10 = _mm_loadu_si128(key_mm + 10); - const __m128i K11 = _mm_loadu_si128(key_mm + 11); - const __m128i K12 = _mm_loadu_si128(key_mm + 12); - - __m128i B = _mm_loadu_si128(in_mm); - - B = _mm_xor_si128(B, K0); - - B = _mm_aesdec_si128(B, K1); - B = _mm_aesdec_si128(B, K2); - B = _mm_aesdec_si128(B, K3); - B = _mm_aesdec_si128(B, K4); - B = _mm_aesdec_si128(B, K5); - B = _mm_aesdec_si128(B, K6); - B = _mm_aesdec_si128(B, K7); - B = _mm_aesdec_si128(B, K8); - B = _mm_aesdec_si128(B, K9); - B = _mm_aesdec_si128(B, K10); - B = _mm_aesdec_si128(B, K11); - B = _mm_aesdeclast_si128(B, K12); - - _mm_storeu_si128(out_mm, B); - - return out; - } - - /** - * Load a variable number of little-endian words - * @param out the output array of words - * @param in the input array of bytes - * @param count how many words are in in - */ - template - static inline void load_le(T out[], const uint8_t in[], size_t count) { - if (count > 0) { -#if defined(BOOST_ENDIAN_LITTLE_BYTE_AVAILABLE) - std::memcpy(out, in, sizeof(T) * count); -#elif defined(BOOST_ENDIAN_BIG_BYTE_AVAILABLE) - std::memcpy(out, in, sizeof(T) * count); - const size_t blocks = count - (count % 4); - const size_t left = count - blocks; - - for (size_t i = 0; i != blocks; i += 4) - bswap_4(out + i); - - for (size_t i = 0; i != left; ++i) - out[blocks + i] = boost::endian::endian_reverse(out[blocks + i]); -#else - for (size_t i = 0; i != count; ++i) { - out[i] = load_le(in, i); - } -#endif - } - } - - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static void schedule_key(const key_type &input_key, - key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { - __m128i K0 = _mm_loadu_si128(reinterpret_cast(input_key.data())); - __m128i K1 = _mm_loadu_si128(reinterpret_cast(input_key.data() + 8)); - K1 = _mm_srli_si128(K1, 8); - - load_le(encryption_key.data(), input_key.data(), 6); - -#define AES_192_KEY_EXPANSION(RCON, EK_OFF) \ - detail::aes_192_key_expansion(&K0, &K1, _mm_aeskeygenassist_si128(K1, RCON), &encryption_key[EK_OFF], EK_OFF == 48) - - AES_192_KEY_EXPANSION(0x01, 6); - AES_192_KEY_EXPANSION(0x02, 12); - AES_192_KEY_EXPANSION(0x04, 18); - AES_192_KEY_EXPANSION(0x08, 24); - AES_192_KEY_EXPANSION(0x10, 30); - AES_192_KEY_EXPANSION(0x20, 36); - AES_192_KEY_EXPANSION(0x40, 42); - AES_192_KEY_EXPANSION(0x80, 48); - -#undef AES_192_KEY_EXPANSION - - // Now generate decryption keys - const __m128i *EK_mm = reinterpret_cast(encryption_key.data()); - - __m128i *DK_mm = reinterpret_cast<__m128i *>(decryption_key.data()); - _mm_storeu_si128(DK_mm, _mm_loadu_si128(EK_mm + 12)); - _mm_storeu_si128(DK_mm + 1, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 11))); - _mm_storeu_si128(DK_mm + 2, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 10))); - _mm_storeu_si128(DK_mm + 3, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 9))); - _mm_storeu_si128(DK_mm + 4, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 8))); - _mm_storeu_si128(DK_mm + 5, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 7))); - _mm_storeu_si128(DK_mm + 6, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 6))); - _mm_storeu_si128(DK_mm + 7, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 5))); - _mm_storeu_si128(DK_mm + 8, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 4))); - _mm_storeu_si128(DK_mm + 9, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 3))); - _mm_storeu_si128(DK_mm + 10, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 2))); - _mm_storeu_si128(DK_mm + 11, _mm_aesimc_si128(_mm_loadu_si128(EK_mm + 1))); - _mm_storeu_si128(DK_mm + 12, _mm_loadu_si128(EK_mm + 0)); - } - }; - - template<> - class rijndael_ni_impl<256, 128> { - protected: - typedef rijndael_policy<256, 128> policy_type; - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - BOOST_STATIC_ASSERT(policy_type::key_bits == 256); - - public: - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *key_mm = reinterpret_cast(encryption_key.data()); - - const __m128i K0 = _mm_loadu_si128(key_mm); - const __m128i K1 = _mm_loadu_si128(key_mm + 1); - const __m128i K2 = _mm_loadu_si128(key_mm + 2); - const __m128i K3 = _mm_loadu_si128(key_mm + 3); - const __m128i K4 = _mm_loadu_si128(key_mm + 4); - const __m128i K5 = _mm_loadu_si128(key_mm + 5); - const __m128i K6 = _mm_loadu_si128(key_mm + 6); - const __m128i K7 = _mm_loadu_si128(key_mm + 7); - const __m128i K8 = _mm_loadu_si128(key_mm + 8); - const __m128i K9 = _mm_loadu_si128(key_mm + 9); - const __m128i K10 = _mm_loadu_si128(key_mm + 10); - const __m128i K11 = _mm_loadu_si128(key_mm + 11); - const __m128i K12 = _mm_loadu_si128(key_mm + 12); - const __m128i K13 = _mm_loadu_si128(key_mm + 13); - const __m128i K14 = _mm_loadu_si128(key_mm + 14); - - __m128i B = _mm_loadu_si128(in_mm); - - B = _mm_xor_si128(B, K0); - - B = _mm_aesenc_si128(B, K1); - B = _mm_aesenc_si128(B, K2); - B = _mm_aesenc_si128(B, K3); - B = _mm_aesenc_si128(B, K4); - B = _mm_aesenc_si128(B, K5); - B = _mm_aesenc_si128(B, K6); - B = _mm_aesenc_si128(B, K7); - B = _mm_aesenc_si128(B, K8); - B = _mm_aesenc_si128(B, K9); - B = _mm_aesenc_si128(B, K10); - B = _mm_aesenc_si128(B, K11); - B = _mm_aesenc_si128(B, K12); - B = _mm_aesenc_si128(B, K13); - B = _mm_aesenclast_si128(B, K14); - - _mm_storeu_si128(out_mm, B); - - return out; - } - - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type out = {0}; - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *key_mm = reinterpret_cast(decryption_key.data()); - - const __m128i K0 = _mm_loadu_si128(key_mm); - const __m128i K1 = _mm_loadu_si128(key_mm + 1); - const __m128i K2 = _mm_loadu_si128(key_mm + 2); - const __m128i K3 = _mm_loadu_si128(key_mm + 3); - const __m128i K4 = _mm_loadu_si128(key_mm + 4); - const __m128i K5 = _mm_loadu_si128(key_mm + 5); - const __m128i K6 = _mm_loadu_si128(key_mm + 6); - const __m128i K7 = _mm_loadu_si128(key_mm + 7); - const __m128i K8 = _mm_loadu_si128(key_mm + 8); - const __m128i K9 = _mm_loadu_si128(key_mm + 9); - const __m128i K10 = _mm_loadu_si128(key_mm + 10); - const __m128i K11 = _mm_loadu_si128(key_mm + 11); - const __m128i K12 = _mm_loadu_si128(key_mm + 12); - const __m128i K13 = _mm_loadu_si128(key_mm + 13); - const __m128i K14 = _mm_loadu_si128(key_mm + 14); - - __m128i B = _mm_loadu_si128(in_mm); - - B = _mm_xor_si128(B, K0); - - B = _mm_aesdec_si128(B, K1); - B = _mm_aesdec_si128(B, K2); - B = _mm_aesdec_si128(B, K3); - B = _mm_aesdec_si128(B, K4); - B = _mm_aesdec_si128(B, K5); - B = _mm_aesdec_si128(B, K6); - B = _mm_aesdec_si128(B, K7); - B = _mm_aesdec_si128(B, K8); - B = _mm_aesdec_si128(B, K9); - B = _mm_aesdec_si128(B, K10); - B = _mm_aesdec_si128(B, K11); - B = _mm_aesdec_si128(B, K12); - B = _mm_aesdec_si128(B, K13); - B = _mm_aesdeclast_si128(B, K14); - - _mm_storeu_si128(out_mm, B); - - return out; - } - - BOOST_ATTRIBUTE_TARGET("ssse3,aes") - static void schedule_key(const key_type &input_key, - key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { - const __m128i K0 = _mm_loadu_si128(reinterpret_cast(input_key.data())); - const __m128i K1 = _mm_loadu_si128(reinterpret_cast(input_key.data() + 16)); - - const __m128i K2 = detail::aes_128_key_expansion(K0, _mm_aeskeygenassist_si128(K1, 0x01)); - const __m128i K3 = detail::aes_256_key_expansion(K1, K2); - - const __m128i K4 = detail::aes_128_key_expansion(K2, _mm_aeskeygenassist_si128(K3, 0x02)); - const __m128i K5 = detail::aes_256_key_expansion(K3, K4); - - const __m128i K6 = detail::aes_128_key_expansion(K4, _mm_aeskeygenassist_si128(K5, 0x04)); - const __m128i K7 = detail::aes_256_key_expansion(K5, K6); - - const __m128i K8 = detail::aes_128_key_expansion(K6, _mm_aeskeygenassist_si128(K7, 0x08)); - const __m128i K9 = detail::aes_256_key_expansion(K7, K8); - - const __m128i K10 = detail::aes_128_key_expansion(K8, _mm_aeskeygenassist_si128(K9, 0x10)); - const __m128i K11 = detail::aes_256_key_expansion(K9, K10); - - const __m128i K12 = detail::aes_128_key_expansion(K10, _mm_aeskeygenassist_si128(K11, 0x20)); - const __m128i K13 = detail::aes_256_key_expansion(K11, K12); - - const __m128i K14 = detail::aes_128_key_expansion(K12, _mm_aeskeygenassist_si128(K13, 0x40)); - - __m128i *EK_mm = reinterpret_cast<__m128i *>(encryption_key.data()); - _mm_storeu_si128(EK_mm, K0); - _mm_storeu_si128(EK_mm + 1, K1); - _mm_storeu_si128(EK_mm + 2, K2); - _mm_storeu_si128(EK_mm + 3, K3); - _mm_storeu_si128(EK_mm + 4, K4); - _mm_storeu_si128(EK_mm + 5, K5); - _mm_storeu_si128(EK_mm + 6, K6); - _mm_storeu_si128(EK_mm + 7, K7); - _mm_storeu_si128(EK_mm + 8, K8); - _mm_storeu_si128(EK_mm + 9, K9); - _mm_storeu_si128(EK_mm + 10, K10); - _mm_storeu_si128(EK_mm + 11, K11); - _mm_storeu_si128(EK_mm + 12, K12); - _mm_storeu_si128(EK_mm + 13, K13); - _mm_storeu_si128(EK_mm + 14, K14); - - // Now generate decryption keys - __m128i *DK_mm = reinterpret_cast<__m128i *>(decryption_key.data()); - _mm_storeu_si128(DK_mm, K14); - _mm_storeu_si128(DK_mm + 1, _mm_aesimc_si128(K13)); - _mm_storeu_si128(DK_mm + 2, _mm_aesimc_si128(K12)); - _mm_storeu_si128(DK_mm + 3, _mm_aesimc_si128(K11)); - _mm_storeu_si128(DK_mm + 4, _mm_aesimc_si128(K10)); - _mm_storeu_si128(DK_mm + 5, _mm_aesimc_si128(K9)); - _mm_storeu_si128(DK_mm + 6, _mm_aesimc_si128(K8)); - _mm_storeu_si128(DK_mm + 7, _mm_aesimc_si128(K7)); - _mm_storeu_si128(DK_mm + 8, _mm_aesimc_si128(K6)); - _mm_storeu_si128(DK_mm + 9, _mm_aesimc_si128(K5)); - _mm_storeu_si128(DK_mm + 10, _mm_aesimc_si128(K4)); - _mm_storeu_si128(DK_mm + 11, _mm_aesimc_si128(K3)); - _mm_storeu_si128(DK_mm + 12, _mm_aesimc_si128(K2)); - _mm_storeu_si128(DK_mm + 13, _mm_aesimc_si128(K1)); - _mm_storeu_si128(DK_mm + 14, K0); - } - }; - } // namespace detail - /*! - * @endcond - */ - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_RIJNDAEL_NI_IMPL_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_policy.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_policy.hpp deleted file mode 100644 index 7985319248..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_policy.hpp +++ /dev/null @@ -1,183 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_RIJNDAEL_POLICY_HPP -#define CRYPTO3_RIJNDAEL_POLICY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - template - struct basic_rijndael_policy : rijndael_functions<32, BlockBits> { - constexpr static const std::size_t byte_bits = rijndael_functions<32, BlockBits>::byte_bits; - typedef typename rijndael_functions<32, BlockBits>::byte_type byte_type; - - constexpr static const std::size_t word_bits = rijndael_functions<32, BlockBits>::word_bits; - constexpr static const std::size_t word_bytes = rijndael_functions<32, BlockBits>::word_bytes; - typedef typename rijndael_functions<32, BlockBits>::word_type word_type; - - constexpr static const std::size_t block_bits = BlockBits; - constexpr static const std::size_t block_bytes = BlockBits / byte_bits; - constexpr static const std::size_t block_words = block_bits / word_bits; - typedef std::array block_type; - - constexpr static const std::size_t key_bits = KeyBits; - constexpr static const std::size_t key_words = key_bits / word_bits; - constexpr static const std::size_t key_bytes = word_bytes * key_words; - typedef std::array key_type; - - constexpr static const std::size_t round_constants_size = 30; - typedef std::array round_constants_type; - - BOOST_ALIGNMENT(64) constexpr static const round_constants_type round_constants = { - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, - 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91}; - - constexpr static const std::size_t shift_offsets_size = 3; - typedef std::array shift_offsets_type; - - constexpr static const shift_offsets_type shift_offsets = {1, block_words == 8 ? 3 : 2, - block_words > 6 ? 4 : 3}; - - constexpr static const shift_offsets_type inverted_shift_offsets = { - block_words - 1, block_words == 8 ? 5 : block_words - 2, - block_words == 8 ? 4 : block_words == 7 ? 3 : block_words - 3}; - - constexpr static const std::size_t mm_size = 16; - typedef std::array mm_type; - - constexpr static const mm_type mm = {0x02, 0x03, 0x01, 0x01, 0x01, 0x02, 0x03, 0x01, - 0x01, 0x01, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02}; - - constexpr static const mm_type inverted_mm = {0x0e, 0x0b, 0x0d, 0x09, 0x09, 0x0e, 0x0b, 0x0d, - 0x0d, 0x09, 0x0e, 0x0b, 0x0b, 0x0d, 0x09, 0x0e}; - - constexpr static const std::size_t constants_size = - rijndael_functions<32, block_bits>::constants_size; - typedef typename rijndael_functions<32, block_bits>::constants_type constants_type; - typedef typename rijndael_functions<32, block_bits>::prefetched_constants_type - prefetched_constants_type; - - BOOST_ALIGNMENT(64) constexpr static const constants_type constants = { - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16}; - - BOOST_ALIGNMENT(64) constexpr static constants_type const inverted_constants = { - 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, - 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, - 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, - 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, - 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, - 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, - 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, - 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, - 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, - 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, - 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, - 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, - 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, - 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, - 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d}; - }; - - template - BOOST_ALIGNMENT(64) constexpr typename basic_rijndael_policy::round_constants_type const - basic_rijndael_policy::round_constants; - - template - BOOST_ALIGNMENT(64) constexpr typename basic_rijndael_policy::constants_type const - basic_rijndael_policy::constants; - - template - BOOST_ALIGNMENT(64) constexpr typename basic_rijndael_policy::constants_type const - basic_rijndael_policy::inverted_constants; - - template - constexpr typename basic_rijndael_policy::shift_offsets_type const - basic_rijndael_policy::shift_offsets; - - template - constexpr typename basic_rijndael_policy::shift_offsets_type const - basic_rijndael_policy::inverted_shift_offsets; - - template - constexpr typename basic_rijndael_policy::mm_type const - basic_rijndael_policy::mm; - - template - constexpr typename basic_rijndael_policy::mm_type const - basic_rijndael_policy::inverted_mm; - - template - struct rijndael_policy : public basic_rijndael_policy { - constexpr static const std::size_t word_bits = basic_rijndael_policy::word_bits; - constexpr static const std::size_t word_bytes = - basic_rijndael_policy::word_bytes; - typedef typename basic_rijndael_policy::word_type word_type; - - constexpr static const std::size_t block_bits = - basic_rijndael_policy::block_bits; - constexpr static const std::size_t block_words = - basic_rijndael_policy::block_words; - - constexpr static const std::size_t key_bits = basic_rijndael_policy::key_bits; - constexpr static const std::size_t key_words = basic_rijndael_policy::key_words; - - constexpr static const std::uint8_t rounds = - (key_words > block_words ? key_words : block_words) + 6; - constexpr static const std::size_t key_schedule_words = - basic_rijndael_policy::block_words * (rounds + 1); - constexpr static const std::size_t key_schedule_bytes = key_schedule_words * word_bytes; - - typedef - typename ::nil::crypto3::detail::basic_functions::word_type key_schedule_word_type; - typedef std::array key_schedule_type; - }; - - template - using aes_policy = rijndael_policy; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_RIJNDAEL_POLICY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_power8_impl.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_power8_impl.hpp deleted file mode 100644 index ca8bc71d85..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_power8_impl.hpp +++ /dev/null @@ -1,377 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_RIJNDAEL_POWER8_IMPL_HPP -#define CRYPTO3_RIJNDAEL_POWER8_IMPL_HPP - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - -#undef vector -#undef bool - - __vector unsigned long long LoadKey(const uint32_t *src) { - __vector unsigned int vec = vec_vsx_ld(0, src); - - if (cpuid::is_little_endian()) { - const __vector unsigned char mask = {12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3}; - const __vector unsigned char zero = {0}; - return (__vector unsigned long long)vec_perm((__vector unsigned char)vec, zero, mask); - } else { - return (__vector unsigned long long)vec; - } - } - - __vector unsigned char Reverse8x16(const __vector unsigned char src) { - if (cpuid::is_little_endian()) { - const __vector unsigned char mask = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; - const __vector unsigned char zero = {0}; - return vec_perm(src, zero, mask); - } else { - return src; - } - } - - __vector unsigned long long LoadBlock(const uint8_t *src) { - return (__vector unsigned long long)Reverse8x16(vec_vsx_ld(0, src)); - } - - void StoreBlock(const __vector unsigned long long src, uint8_t *dest) { - vec_vsx_st(Reverse8x16((__vector unsigned char)src), 0, dest); - } - - template - class basic_rijndael_power8_impl { - BOOST_STATIC_ASSERT(BlockBitsImpl == 128); - - public: - static inline void schedule_key(const key_type &key, - key_schedule_type encryption_key, - key_schedule_type &decryption_key) { - rijndael_impl::schedule_key(key, encryption_key, decryption_key); - - for (typename basic_type::key_schedule_type::value_type &c : encryption_key) { - c = reverse_bytes(c); - } - for (typename basic_type::key_schedule_type::value_type &c : decryption_key) { - c = reverse_bytes(c); - } - } - }; - - template - class rijndael_power8_impl : public basic_rijndael_power8_impl { - BOOST_STATIC_ASSERT(BlockBitsImpl == 128); - }; - - template<> - class rijndael_power8_impl<128, 128> - : public basic_rijndael_power8_impl<128, 128> { - protected: - typedef rijndael_policy<128, 128> policy_type; - - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - BOOST_STATIC_ASSERT(policy_type::key_bits == 128); - BOOST_STATIC_ASSERT(policy_type::block_bits == 128); - - public: - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - - const __vector unsigned long long K0 = LoadKey(&encryption_key[0]); - const __vector unsigned long long K1 = LoadKey(&encryption_key[4]); - const __vector unsigned long long K2 = LoadKey(&encryption_key[8]); - const __vector unsigned long long K3 = LoadKey(&encryption_key[12]); - const __vector unsigned long long K4 = LoadKey(&encryption_key[16]); - const __vector unsigned long long K5 = LoadKey(&encryption_key[20]); - const __vector unsigned long long K6 = LoadKey(&encryption_key[24]); - const __vector unsigned long long K7 = LoadKey(&encryption_key[28]); - const __vector unsigned long long K8 = LoadKey(&encryption_key[32]); - const __vector unsigned long long K9 = LoadKey(&encryption_key[36]); - const __vector unsigned long long K10 = LoadBlock(m_ME.data()); - - __vector unsigned long long B = LoadBlock(plaintext.data()); - - B = vec_xor(B, K0); - B = __builtin_crypto_vcipher(B, K1); - B = __builtin_crypto_vcipher(B, K2); - B = __builtin_crypto_vcipher(B, K3); - B = __builtin_crypto_vcipher(B, K4); - B = __builtin_crypto_vcipher(B, K5); - B = __builtin_crypto_vcipher(B, K6); - B = __builtin_crypto_vcipher(B, K7); - B = __builtin_crypto_vcipher(B, K8); - B = __builtin_crypto_vcipher(B, K9); - B = __builtin_crypto_vcipherlast(B, K10); - - StoreBlock(B, out.data()); - - return out; - } - - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - - const __vector unsigned long long K0 = LoadBlock(&m_ME.data()); - const __vector unsigned long long K1 = LoadKey(&encryption_key[36]); - const __vector unsigned long long K2 = LoadKey(&encryption_key[32]); - const __vector unsigned long long K3 = LoadKey(&encryption_key[28]); - const __vector unsigned long long K4 = LoadKey(&encryption_key[24]); - const __vector unsigned long long K5 = LoadKey(&encryption_key[20]); - const __vector unsigned long long K6 = LoadKey(&encryption_key[16]); - const __vector unsigned long long K7 = LoadKey(&encryption_key[12]); - const __vector unsigned long long K8 = LoadKey(&encryption_key[8]); - const __vector unsigned long long K9 = LoadKey(&encryption_key[4]); - const __vector unsigned long long K10 = LoadKey(&encryption_key[0]); - - __vector unsigned long long B = LoadBlock(plaintext.data()); - - B = vec_xor(B, K0); - B = __builtin_crypto_vncipher(B, K1); - B = __builtin_crypto_vncipher(B, K2); - B = __builtin_crypto_vncipher(B, K3); - B = __builtin_crypto_vncipher(B, K4); - B = __builtin_crypto_vncipher(B, K5); - B = __builtin_crypto_vncipher(B, K6); - B = __builtin_crypto_vncipher(B, K7); - B = __builtin_crypto_vncipher(B, K8); - B = __builtin_crypto_vncipher(B, K9); - B = __builtin_crypto_vncipherlast(B, K10); - - StoreBlock(B, out.data()); - - return out; - } - }; - - template<> - class rijndael_power8_impl<192, 128> - : public basic_rijndael_power8_impl<192, 128> { - protected: - typedef rijndael_policy<192, 128> policy_type; - - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - BOOST_STATIC_ASSERT(policy_type::key_bits == 192); - BOOST_STATIC_ASSERT(policy_type::block_bits == 128); - - public: - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - - const __vector unsigned long long K0 = LoadKey(&encryption_key[0]); - const __vector unsigned long long K1 = LoadKey(&encryption_key[4]); - const __vector unsigned long long K2 = LoadKey(&encryption_key[8]); - const __vector unsigned long long K3 = LoadKey(&encryption_key[12]); - const __vector unsigned long long K4 = LoadKey(&encryption_key[16]); - const __vector unsigned long long K5 = LoadKey(&encryption_key[20]); - const __vector unsigned long long K6 = LoadKey(&encryption_key[24]); - const __vector unsigned long long K7 = LoadKey(&encryption_key[28]); - const __vector unsigned long long K8 = LoadKey(&encryption_key[32]); - const __vector unsigned long long K9 = LoadKey(&encryption_key[36]); - const __vector unsigned long long K10 = LoadKey(&encryption_key[40]); - const __vector unsigned long long K11 = LoadKey(&encryption_key[44]); - const __vector unsigned long long K12 = LoadBlock(m_ME.data()); - - __vector unsigned long long B = LoadBlock(plaintext.data()); - - B = vec_xor(B, K0); - B = __builtin_crypto_vcipher(B, K1); - B = __builtin_crypto_vcipher(B, K2); - B = __builtin_crypto_vcipher(B, K3); - B = __builtin_crypto_vcipher(B, K4); - B = __builtin_crypto_vcipher(B, K5); - B = __builtin_crypto_vcipher(B, K6); - B = __builtin_crypto_vcipher(B, K7); - B = __builtin_crypto_vcipher(B, K8); - B = __builtin_crypto_vcipher(B, K9); - B = __builtin_crypto_vcipher(B, K10); - B = __builtin_crypto_vcipher(B, K11); - B = __builtin_crypto_vcipherlast(B, K12); - - StoreBlock(B, out.data()); - - return out; - } - - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - - const __vector unsigned long long K0 = LoadBlock(m_ME.data()); - const __vector unsigned long long K1 = LoadKey(&encryption_key[44]); - const __vector unsigned long long K2 = LoadKey(&encryption_key[40]); - const __vector unsigned long long K3 = LoadKey(&encryption_key[36]); - const __vector unsigned long long K4 = LoadKey(&encryption_key[32]); - const __vector unsigned long long K5 = LoadKey(&encryption_key[28]); - const __vector unsigned long long K6 = LoadKey(&encryption_key[24]); - const __vector unsigned long long K7 = LoadKey(&encryption_key[20]); - const __vector unsigned long long K8 = LoadKey(&encryption_key[16]); - const __vector unsigned long long K9 = LoadKey(&encryption_key[12]); - const __vector unsigned long long K10 = LoadKey(&encryption_key[8]); - const __vector unsigned long long K11 = LoadKey(&encryption_key[4]); - const __vector unsigned long long K12 = LoadKey(&encryption_key[0]); - - __vector unsigned long long B = LoadBlock(plaintext.data()); - - B = vec_xor(B, K0); - B = __builtin_crypto_vncipher(B, K1); - B = __builtin_crypto_vncipher(B, K2); - B = __builtin_crypto_vncipher(B, K3); - B = __builtin_crypto_vncipher(B, K4); - B = __builtin_crypto_vncipher(B, K5); - B = __builtin_crypto_vncipher(B, K6); - B = __builtin_crypto_vncipher(B, K7); - B = __builtin_crypto_vncipher(B, K8); - B = __builtin_crypto_vncipher(B, K9); - B = __builtin_crypto_vncipher(B, K10); - B = __builtin_crypto_vncipher(B, K11); - B = __builtin_crypto_vncipherlast(B, K12); - - StoreBlock(B, out.data()); - } - }; - - template<> - class rijndael_power8_impl<256, 128> - : public basic_rijndael_power8_impl<256, 128> { - protected: - typedef rijndael_policy<256, 128> policy_type; - - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - BOOST_STATIC_ASSERT(policy_type::key_bits == 256); - BOOST_STATIC_ASSERT(policy_type::block_bits == 128); - - public: - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - - const __vector unsigned long long K0 = LoadKey(&encryption_key[0]); - const __vector unsigned long long K1 = LoadKey(&encryption_key[4]); - const __vector unsigned long long K2 = LoadKey(&encryption_key[8]); - const __vector unsigned long long K3 = LoadKey(&encryption_key[12]); - const __vector unsigned long long K4 = LoadKey(&encryption_key[16]); - const __vector unsigned long long K5 = LoadKey(&encryption_key[20]); - const __vector unsigned long long K6 = LoadKey(&encryption_key[24]); - const __vector unsigned long long K7 = LoadKey(&encryption_key[28]); - const __vector unsigned long long K8 = LoadKey(&encryption_key[32]); - const __vector unsigned long long K9 = LoadKey(&encryption_key[36]); - const __vector unsigned long long K10 = LoadKey(&encryption_key[40]); - const __vector unsigned long long K11 = LoadKey(&encryption_key[44]); - const __vector unsigned long long K12 = LoadKey(&encryption_key[48]); - const __vector unsigned long long K13 = LoadKey(&encryption_key[52]); - const __vector unsigned long long K14 = LoadBlock(m_ME.data()); - - __vector unsigned long long B = LoadBlock(plaintext.data()); - - B = vec_xor(B, K0); - B = __builtin_crypto_vcipher(B, K1); - B = __builtin_crypto_vcipher(B, K2); - B = __builtin_crypto_vcipher(B, K3); - B = __builtin_crypto_vcipher(B, K4); - B = __builtin_crypto_vcipher(B, K5); - B = __builtin_crypto_vcipher(B, K6); - B = __builtin_crypto_vcipher(B, K7); - B = __builtin_crypto_vcipher(B, K8); - B = __builtin_crypto_vcipher(B, K9); - B = __builtin_crypto_vcipher(B, K10); - B = __builtin_crypto_vcipher(B, K11); - B = __builtin_crypto_vcipher(B, K12); - B = __builtin_crypto_vcipher(B, K13); - B = __builtin_crypto_vcipherlast(B, K14); - - StoreBlock(B, out.data()); - - return out; - } - - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - - block_type out = {0}; - - const __vector unsigned long long K0 = LoadBlock(m_ME.data()); - const __vector unsigned long long K1 = LoadKey(&encryption_key[52]); - const __vector unsigned long long K2 = LoadKey(&encryption_key[48]); - const __vector unsigned long long K3 = LoadKey(&encryption_key[44]); - const __vector unsigned long long K4 = LoadKey(&encryption_key[40]); - const __vector unsigned long long K5 = LoadKey(&encryption_key[36]); - const __vector unsigned long long K6 = LoadKey(&encryption_key[32]); - const __vector unsigned long long K7 = LoadKey(&encryption_key[28]); - const __vector unsigned long long K8 = LoadKey(&encryption_key[24]); - const __vector unsigned long long K9 = LoadKey(&encryption_key[20]); - const __vector unsigned long long K10 = LoadKey(&encryption_key[16]); - const __vector unsigned long long K11 = LoadKey(&encryption_key[12]); - const __vector unsigned long long K12 = LoadKey(&encryption_key[8]); - const __vector unsigned long long K13 = LoadKey(&encryption_key[4]); - const __vector unsigned long long K14 = LoadKey(&encryption_key[0]); - - __vector unsigned long long B = LoadBlock(plaintext.data()); - - B = vec_xor(B, K0); - B = __builtin_crypto_vncipher(B, K1); - B = __builtin_crypto_vncipher(B, K2); - B = __builtin_crypto_vncipher(B, K3); - B = __builtin_crypto_vncipher(B, K4); - B = __builtin_crypto_vncipher(B, K5); - B = __builtin_crypto_vncipher(B, K6); - B = __builtin_crypto_vncipher(B, K7); - B = __builtin_crypto_vncipher(B, K8); - B = __builtin_crypto_vncipher(B, K9); - B = __builtin_crypto_vncipher(B, K10); - B = __builtin_crypto_vncipher(B, K11); - B = __builtin_crypto_vncipher(B, K12); - B = __builtin_crypto_vncipher(B, K13); - B = __builtin_crypto_vncipherlast(B, K14); - - StoreBlock(B, out.data()); - - return out; - } - }; - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_RIJNDAEL_POWER8_IMPL_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_ssse3_impl.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_ssse3_impl.hpp deleted file mode 100644 index 994ce048e1..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/rijndael/rijndael_ssse3_impl.hpp +++ /dev/null @@ -1,529 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// -// @file AES using SSSE3 -// -// @brief This is more or less a direct translation of public domain x86-64 -// assembly written by Mike Hamburg, described in "Accelerating AES -// with Vector Permute Instructions" (CHES 2009). His original code is -// available at https://crypto.stanford.edu/vpaes/ -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_SSSE3_RIJNDAEL_IMPL_HPP -#define CRYPTO3_SSSE3_RIJNDAEL_IMPL_HPP - -#include - -#include - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - /*! - * @cond DETAIL_IMPL - */ - - const __m128i low_nibs = _mm_set1_epi8(0x0F); - - const __m128i k_ipt1 = _mm_set_epi32(0xCABAE090, 0x52227808, 0xC2B2E898, 0x5A2A7000); - const __m128i k_ipt2 = _mm_set_epi32(0xCD80B1FC, 0xB0FDCC81, 0x4C01307D, 0x317C4D00); - - const __m128i k_inv1 = _mm_set_epi32(0x04070309, 0x0A0B0C02, 0x0E05060F, 0x0D080180); - const __m128i k_inv2 = _mm_set_epi32(0x030D0E0C, 0x02050809, 0x01040A06, 0x0F0B0780); - - const __m128i sb1u = _mm_set_epi32(0xA5DF7A6E, 0x142AF544, 0xB19BE18F, 0xCB503E00); - const __m128i sb1t = _mm_set_epi32(0x3BF7CCC1, 0x0D2ED9EF, 0x3618D415, 0xFAE22300); - - const __m128i mc_forward[4] = {_mm_set_epi32(0x0C0F0E0D, 0x080B0A09, 0x04070605, 0x00030201), - _mm_set_epi32(0x00030201, 0x0C0F0E0D, 0x080B0A09, 0x04070605), - _mm_set_epi32(0x04070605, 0x00030201, 0x0C0F0E0D, 0x080B0A09), - _mm_set_epi32(0x080B0A09, 0x04070605, 0x00030201, 0x0C0F0E0D)}; - - const __m128i sr[4] = { - _mm_set_epi32(0x0F0E0D0C, 0x0B0A0908, 0x07060504, 0x03020100), - _mm_set_epi32(0x0B06010C, 0x07020D08, 0x030E0904, 0x0F0A0500), - _mm_set_epi32(0x070E050C, 0x030A0108, 0x0F060D04, 0x0B020900), - _mm_set_epi32(0x0306090C, 0x0F020508, 0x0B0E0104, 0x070A0D00), - }; - -#define mm_xor3(x, y, z) _mm_xor_si128(x, _mm_xor_si128(y, z)) - - BOOST_ATTRIBUTE_TARGET("ssse3") - __m128i aes_schedule_transform(__m128i input, __m128i table_1, __m128i table_2) { - __m128i i_1 = _mm_and_si128(low_nibs, input); - __m128i i_2 = _mm_srli_epi32(_mm_andnot_si128(low_nibs, input), 4); - - return _mm_xor_si128(_mm_shuffle_epi8(table_1, i_1), _mm_shuffle_epi8(table_2, i_2)); - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_schedule_mangle(__m128i k, uint8_t round_no) { - __m128i t = _mm_shuffle_epi8(_mm_xor_si128(k, _mm_set1_epi8(0x5B)), mc_forward[0]); - - __m128i t2 = t; - - t = _mm_shuffle_epi8(t, mc_forward[0]); - - t2 = mm_xor3(t2, t, _mm_shuffle_epi8(t, mc_forward[0])); - - return _mm_shuffle_epi8(t2, sr[round_no % 4]); - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_schedule_192_smear(__m128i x, __m128i y) { - return mm_xor3(y, _mm_shuffle_epi32(x, 0xFE), _mm_shuffle_epi32(y, 0x80)); - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_schedule_mangle_dec(__m128i k, uint8_t round_no) { - const __m128i dsk[8] = {_mm_set_epi32(0x4AED9334, 0x82255BFC, 0xB6116FC8, 0x7ED9A700), - _mm_set_epi32(0x8BB89FAC, 0xE9DAFDCE, 0x45765162, 0x27143300), - _mm_set_epi32(0x4622EE8A, 0xADC90561, 0x27438FEB, 0xCCA86400), - _mm_set_epi32(0x73AEE13C, 0xBD602FF2, 0x815C13CE, 0x4F92DD00), - _mm_set_epi32(0xF83F3EF9, 0xFA3D3CFB, 0x03C4C502, 0x01C6C700), - _mm_set_epi32(0xA5526A9D, 0x7384BC4B, 0xEE1921D6, 0x38CFF700), - _mm_set_epi32(0xA080D3F3, 0x10306343, 0xE3C390B0, 0x53732000), - _mm_set_epi32(0x2F45AEC4, 0x8CE60D67, 0xA0CA214B, 0x036982E8)}; - - __m128i t = aes_schedule_transform(k, dsk[0], dsk[1]); - __m128i output = _mm_shuffle_epi8(t, mc_forward[0]); - - t = aes_schedule_transform(t, dsk[2], dsk[3]); - output = _mm_shuffle_epi8(_mm_xor_si128(t, output), mc_forward[0]); - - t = aes_schedule_transform(t, dsk[4], dsk[5]); - output = _mm_shuffle_epi8(_mm_xor_si128(t, output), mc_forward[0]); - - t = aes_schedule_transform(t, dsk[6], dsk[7]); - output = _mm_shuffle_epi8(_mm_xor_si128(t, output), mc_forward[0]); - - return _mm_shuffle_epi8(output, sr[round_no % 4]); - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_schedule_mangle_last(__m128i k, uint8_t round_no) { - const __m128i out_tr1 = _mm_set_epi32(0xF7974121, 0xDEBE6808, 0xFF9F4929, 0xD6B66000); - const __m128i out_tr2 = _mm_set_epi32(0xE10D5DB1, 0xB05C0CE0, 0x01EDBD51, 0x50BCEC00); - - k = _mm_shuffle_epi8(k, sr[round_no % 4]); - k = _mm_xor_si128(k, _mm_set1_epi8(0x5B)); - return aes_schedule_transform(k, out_tr1, out_tr2); - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_schedule_mangle_last_dec(__m128i k) { - const __m128i deskew1 = _mm_set_epi32(0x1DFEB95A, 0x5DBEF91A, 0x07E4A340, 0x47A4E300); - const __m128i deskew2 = _mm_set_epi32(0x2841C2AB, 0xF49D1E77, 0x5F36B5DC, 0x83EA6900); - - k = _mm_xor_si128(k, _mm_set1_epi8(0x5B)); - return aes_schedule_transform(k, deskew1, deskew2); - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_schedule_round(__m128i *rcon, __m128i input1, __m128i input2) { - if (rcon) { - input2 = _mm_xor_si128(_mm_alignr_epi8(_mm_setzero_si128(), *rcon, 15), input2); - - *rcon = _mm_alignr_epi8(*rcon, *rcon, 15); // next rcon - - input1 = _mm_shuffle_epi32(input1, 0xFF); // rotate - input1 = _mm_alignr_epi8(input1, input1, 1); - } - - __m128i smeared = _mm_xor_si128(input2, _mm_slli_si128(input2, 4)); - smeared = mm_xor3(smeared, _mm_slli_si128(smeared, 8), _mm_set1_epi8(0x5B)); - - __m128i t = _mm_srli_epi32(_mm_andnot_si128(low_nibs, input1), 4); - - input1 = _mm_and_si128(low_nibs, input1); - - __m128i t2 = _mm_shuffle_epi8(k_inv2, input1); - - input1 = _mm_xor_si128(input1, t); - - __m128i t3 = _mm_xor_si128(t2, _mm_shuffle_epi8(k_inv1, t)); - __m128i t4 = _mm_xor_si128(t2, _mm_shuffle_epi8(k_inv1, input1)); - - __m128i t5 = _mm_xor_si128(input1, _mm_shuffle_epi8(k_inv1, t3)); - __m128i t6 = _mm_xor_si128(t, _mm_shuffle_epi8(k_inv1, t4)); - - return mm_xor3(_mm_shuffle_epi8(sb1u, t5), _mm_shuffle_epi8(sb1t, t6), smeared); - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_ssse3_encrypt(__m128i B, const __m128i *keys, size_t rounds) { - const __m128i sb2u = _mm_set_epi32(0x5EB7E955, 0xBC982FCD, 0xE27A93C6, 0x0B712400); - const __m128i sb2t = _mm_set_epi32(0xC2A163C8, 0xAB82234A, 0x69EB8840, 0x0AE12900); - - const __m128i sbou = _mm_set_epi32(0x15AABF7A, 0xC502A878, 0xD0D26D17, 0x6FBDC700); - const __m128i sbot = _mm_set_epi32(0x8E1E90D1, 0x412B35FA, 0xCFE474A5, 0x5FBB6A00); - - const __m128i mc_backward[4] = { - _mm_set_epi32(0x0E0D0C0F, 0x0A09080B, 0x06050407, 0x02010003), - _mm_set_epi32(0x0A09080B, 0x06050407, 0x02010003, 0x0E0D0C0F), - _mm_set_epi32(0x06050407, 0x02010003, 0x0E0D0C0F, 0x0A09080B), - _mm_set_epi32(0x02010003, 0x0E0D0C0F, 0x0A09080B, 0x06050407), - }; - - B = mm_xor3(_mm_shuffle_epi8(k_ipt1, _mm_and_si128(low_nibs, B)), - _mm_shuffle_epi8(k_ipt2, _mm_srli_epi32(_mm_andnot_si128(low_nibs, B), 4)), - _mm_loadu_si128(keys)); - - for (size_t r = 1;; ++r) { - const __m128i K = _mm_loadu_si128(keys + r); - - __m128i t = _mm_srli_epi32(_mm_andnot_si128(low_nibs, B), 4); - - B = _mm_and_si128(low_nibs, B); - - __m128i t2 = _mm_shuffle_epi8(k_inv2, B); - - B = _mm_xor_si128(B, t); - - __m128i t3 = _mm_xor_si128(t2, _mm_shuffle_epi8(k_inv1, t)); - __m128i t4 = _mm_xor_si128(t2, _mm_shuffle_epi8(k_inv1, B)); - - __m128i t5 = _mm_xor_si128(B, _mm_shuffle_epi8(k_inv1, t3)); - __m128i t6 = _mm_xor_si128(t, _mm_shuffle_epi8(k_inv1, t4)); - - if (r == rounds) { - B = _mm_shuffle_epi8(mm_xor3(_mm_shuffle_epi8(sbou, t5), _mm_shuffle_epi8(sbot, t6), K), - sr[r % 4]); - - return B; - } - - __m128i t7 = mm_xor3(_mm_shuffle_epi8(sb1t, t6), _mm_shuffle_epi8(sb1u, t5), K); - - __m128i t8 = mm_xor3(_mm_shuffle_epi8(sb2t, t6), _mm_shuffle_epi8(sb2u, t5), - _mm_shuffle_epi8(t7, mc_forward[r % 4])); - - B = mm_xor3(_mm_shuffle_epi8(t8, mc_forward[r % 4]), _mm_shuffle_epi8(t7, mc_backward[r % 4]), - t8); - } - } - - BOOST_ATTRIBUTE_TARGET("ssse3") __m128i aes_ssse3_decrypt(__m128i B, const __m128i *keys, size_t rounds) { - const __m128i k_dipt1 = _mm_set_epi32(0x154A411E, 0x114E451A, 0x0F505B04, 0x0B545F00); - const __m128i k_dipt2 = _mm_set_epi32(0x12771772, 0xF491F194, 0x86E383E6, 0x60056500); - - const __m128i sb9u = _mm_set_epi32(0xCAD51F50, 0x4F994CC9, 0x851C0353, 0x9A86D600); - const __m128i sb9t = _mm_set_epi32(0x725E2C9E, 0xB2FBA565, 0xC03B1789, 0xECD74900); - - const __m128i sbeu = _mm_set_epi32(0x22426004, 0x64B4F6B0, 0x46F29296, 0x26D4D000); - const __m128i sbet = _mm_set_epi32(0x9467F36B, 0x98593E32, 0x0C55A6CD, 0xFFAAC100); - - const __m128i sbdu = _mm_set_epi32(0xF56E9B13, 0x882A4439, 0x7D57CCDF, 0xE6B1A200); - const __m128i sbdt = _mm_set_epi32(0x2931180D, 0x15DEEFD3, 0x3CE2FAF7, 0x24C6CB00); - - const __m128i sbbu = _mm_set_epi32(0x602646F6, 0xB0F2D404, 0xD0226492, 0x96B44200); - const __m128i sbbt = _mm_set_epi32(0xF3FF0C3E, 0x3255AA6B, 0xC19498A6, 0xCD596700); - - __m128i mc = mc_forward[3]; - - __m128i t = _mm_shuffle_epi8(k_dipt2, _mm_srli_epi32(_mm_andnot_si128(low_nibs, B), 4)); - - B = mm_xor3(t, _mm_loadu_si128(keys), _mm_shuffle_epi8(k_dipt1, _mm_and_si128(B, low_nibs))); - - for (size_t r = 1;; ++r) { - const __m128i K = _mm_loadu_si128(keys + r); - - t = _mm_srli_epi32(_mm_andnot_si128(low_nibs, B), 4); - - B = _mm_and_si128(low_nibs, B); - - __m128i t2 = _mm_shuffle_epi8(k_inv2, B); - - B = _mm_xor_si128(B, t); - - __m128i t3 = _mm_xor_si128(t2, _mm_shuffle_epi8(k_inv1, t)); - __m128i t4 = _mm_xor_si128(t2, _mm_shuffle_epi8(k_inv1, B)); - __m128i t5 = _mm_xor_si128(B, _mm_shuffle_epi8(k_inv1, t3)); - __m128i t6 = _mm_xor_si128(t, _mm_shuffle_epi8(k_inv1, t4)); - - if (r == rounds) { - const __m128i sbou = _mm_set_epi32(0xC7AA6DB9, 0xD4943E2D, 0x1387EA53, 0x7EF94000); - const __m128i sbot = _mm_set_epi32(0xCA4B8159, 0xD8C58E9C, 0x12D7560F, 0x93441D00); - - __m128i x = _mm_shuffle_epi8(sbou, t5); - __m128i y = _mm_shuffle_epi8(sbot, t6); - x = _mm_xor_si128(x, K); - x = _mm_xor_si128(x, y); - - const uint32_t which_sr = ((((rounds - 1) << 4) ^ 48) & 48) / 16; - return _mm_shuffle_epi8(x, sr[which_sr]); - } - - __m128i t8 = - _mm_xor_si128(_mm_shuffle_epi8(sb9t, t6), _mm_xor_si128(_mm_shuffle_epi8(sb9u, t5), K)); - - __m128i t9 = - mm_xor3(_mm_shuffle_epi8(t8, mc), _mm_shuffle_epi8(sbdu, t5), _mm_shuffle_epi8(sbdt, t6)); - - __m128i t12 = _mm_xor_si128(_mm_xor_si128(_mm_shuffle_epi8(t9, mc), _mm_shuffle_epi8(sbbu, t5)), - _mm_shuffle_epi8(sbbt, t6)); - - B = _mm_xor_si128(_mm_xor_si128(_mm_shuffle_epi8(t12, mc), _mm_shuffle_epi8(sbeu, t5)), - _mm_shuffle_epi8(sbet, t6)); - - mc = _mm_alignr_epi8(mc, mc, 12); - } - } - - template - class basic_rijndael_ssse3_impl { - BOOST_STATIC_ASSERT(BlockBitsImpl == 128); - }; - - template - class rijndael_ssse3_impl : public basic_rijndael_ssse3_impl { - BOOST_STATIC_ASSERT(BlockBitsImpl == 128); - }; - - template - class basic_rijndael_ssse3_impl { - protected: - typedef PolicyType policy_type; - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - BOOST_STATIC_ASSERT(PolicyType::key_bits == KeyBitsImpl); - BOOST_STATIC_ASSERT(PolicyType::block_bits == 128); - - public: - static block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &encryption_key) { - block_type out = {0}; - - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *keys = reinterpret_cast(encryption_key.data()); - - using namespace nil::crypto3::detail; -// poison(plaintext.data(), policy_type::block_bytes); - - __m128i B = _mm_loadu_si128(in_mm); - _mm_storeu_si128(out_mm, detail::aes_ssse3_encrypt(B, keys, policy_type::rounds)); - -// unpoison(plaintext.data(), policy_type::block_bytes); -// unpoison(out.data(), policy_type::block_bytes); - - return out; - } - - static block_type decrypt_block(const block_type &plaintext, - const key_schedule_type &decryption_key) { - block_type out = {0}; - - const __m128i *in_mm = reinterpret_cast(plaintext.data()); - __m128i *out_mm = reinterpret_cast<__m128i *>(out.data()); - - const __m128i *keys = reinterpret_cast(decryption_key.data()); - - using namespace nil::crypto3::detail; -// poison(plaintext.data(), policy_type::block_bytes); - - __m128i B = _mm_loadu_si128(in_mm); - _mm_storeu_si128(out_mm, detail::aes_ssse3_decrypt(B, keys, policy_type::rounds)); - -// unpoison(plaintext.data(), policy_type::block_bytes); -// unpoison(out.data(), policy_type::block_bytes); - - return out; - } - }; - - template - class rijndael_ssse3_impl<128, 128, PolicyType> - : public basic_rijndael_ssse3_impl<128, 128, PolicyType> { - protected: - typedef typename basic_rijndael_ssse3_impl<128, 128, PolicyType>::policy_type policy_type; - - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - public: - static void schedule_key(const key_type &input_key, key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { - __m128i rcon = _mm_set_epi32(0x702A9808, 0x4D7C7D81, 0x1F8391B9, 0xAF9DEEB6); - - __m128i key = _mm_loadu_si128(reinterpret_cast(input_key.data())); - - __m128i *encryption_key_mm = reinterpret_cast<__m128i *>(encryption_key.data()); - __m128i *decryption_key_mm = reinterpret_cast<__m128i *>(decryption_key.data()); - - _mm_storeu_si128(decryption_key_mm + policy_type::rounds, _mm_shuffle_epi8(key, detail::sr[2])); - - key = detail::aes_schedule_transform(key, detail::k_ipt1, detail::k_ipt2); - - _mm_storeu_si128(encryption_key_mm, key); - - - for (size_t i = 1; i != policy_type::rounds; ++i) { - key = detail::aes_schedule_round(&rcon, key, key); - - _mm_storeu_si128(encryption_key_mm + i, detail::aes_schedule_mangle(key, (12 - i) % 4)); - - _mm_storeu_si128(decryption_key_mm + (policy_type::rounds - i), - detail::aes_schedule_mangle_dec(key, (10 - i) % 4)); - } - - key = detail::aes_schedule_round(&rcon, key, key); - _mm_storeu_si128(encryption_key_mm + policy_type::rounds, - detail::aes_schedule_mangle_last(key, 2)); - _mm_storeu_si128(decryption_key_mm, detail::aes_schedule_mangle_last_dec(key)); - } - }; - - template - class rijndael_ssse3_impl<192, 128, PolicyType> - : public basic_rijndael_ssse3_impl<192, 128, PolicyType> { - protected: - typedef typename basic_rijndael_ssse3_impl<192, 128, PolicyType>::policy_type policy_type; - - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - public: - static void schedule_key(const key_type &input_key, key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { - __m128i rcon = _mm_set_epi32(0x702A9808, 0x4D7C7D81, 0x1F8391B9, 0xAF9DEEB6); - - __m128i *encryption_key_mm = reinterpret_cast<__m128i *>(encryption_key.data()); - __m128i *decryption_key_mm = reinterpret_cast<__m128i *>(decryption_key.data()); - - __m128i key1 = _mm_loadu_si128(reinterpret_cast(input_key.data())); - __m128i key2 = _mm_loadu_si128(reinterpret_cast((input_key.data() + 8))); - - _mm_storeu_si128(decryption_key_mm + policy_type::rounds, - _mm_shuffle_epi8(key1, detail::sr[0])); - - key1 = detail::aes_schedule_transform(key1, detail::k_ipt1, detail::k_ipt2); - key2 = detail::aes_schedule_transform(key2, detail::k_ipt1, detail::k_ipt2); - - _mm_storeu_si128(encryption_key_mm + 0, key1); - - // key2 with 8 high bytes masked off - __m128i t = _mm_slli_si128(_mm_srli_si128(key2, 8), 8); - - - for (size_t i = 0; i != 4; ++i) { - key2 = detail::aes_schedule_round(&rcon, key2, key1); - - _mm_storeu_si128(encryption_key_mm + 3 * i + 1, - detail::aes_schedule_mangle(_mm_alignr_epi8(key2, t, 8), (i + 3) % 4)); - _mm_storeu_si128(decryption_key_mm + 11 - 3 * i, - detail::aes_schedule_mangle_dec(_mm_alignr_epi8(key2, t, 8), (i + 3) % 4)); - - t = detail::aes_schedule_192_smear(key2, t); - - _mm_storeu_si128(encryption_key_mm + 3 * i + 2, - detail::aes_schedule_mangle(t, (i + 2) % 4)); - _mm_storeu_si128(decryption_key_mm + 10 - 3 * i, - detail::aes_schedule_mangle_dec(t, (i + 2) % 4)); - - key2 = detail::aes_schedule_round(&rcon, t, key2); - - if (i == 3) { - _mm_storeu_si128(encryption_key_mm + 3 * i + 3, - detail::aes_schedule_mangle_last(key2, (i + 1) % 4)); - _mm_storeu_si128(decryption_key_mm + 9 - 3 * i, - detail::aes_schedule_mangle_last_dec(key2)); - } else { - _mm_storeu_si128(encryption_key_mm + 3 * i + 3, - detail::aes_schedule_mangle(key2, (i + 1) % 4)); - _mm_storeu_si128(decryption_key_mm + 9 - 3 * i, - detail::aes_schedule_mangle_dec(key2, (i + 1) % 4)); - } - - key1 = key2; - key2 = detail::aes_schedule_192_smear(key2, _mm_slli_si128(_mm_srli_si128(t, 8), 8)); - t = _mm_slli_si128(_mm_srli_si128(key2, 8), 8); - } - } - }; - - template - class rijndael_ssse3_impl<256, 128, PolicyType> - : public basic_rijndael_ssse3_impl<256, 128, PolicyType> { - protected: - typedef typename basic_rijndael_ssse3_impl<256, 128, PolicyType>::policy_type policy_type; - - typedef typename policy_type::block_type block_type; - typedef typename policy_type::key_type key_type; - typedef typename policy_type::key_schedule_type key_schedule_type; - - public: - static void schedule_key(const key_type &input_key, key_schedule_type &encryption_key, - key_schedule_type &decryption_key) { - __m128i rcon = _mm_set_epi32(0x702A9808, 0x4D7C7D81, 0x1F8391B9, 0xAF9DEEB6); - - __m128i *encryption_key_mm = reinterpret_cast<__m128i *>(encryption_key.data()); - __m128i *decryption_key_mm = reinterpret_cast<__m128i *>(decryption_key.data()); - - __m128i key1 = _mm_loadu_si128(reinterpret_cast(input_key.data())); - __m128i key2 = _mm_loadu_si128(reinterpret_cast((input_key.data() + 16))); - - _mm_storeu_si128(decryption_key_mm + policy_type::rounds, - _mm_shuffle_epi8(key1, detail::sr[2])); - - key1 = detail::aes_schedule_transform(key1, detail::k_ipt1, detail::k_ipt2); - key2 = detail::aes_schedule_transform(key2, detail::k_ipt1, detail::k_ipt2); - - _mm_storeu_si128(encryption_key_mm + 0, key1); - _mm_storeu_si128(encryption_key_mm + 1, detail::aes_schedule_mangle(key2, 3)); - - _mm_storeu_si128(decryption_key_mm + 13, detail::aes_schedule_mangle_dec(key2, 1)); - - - for (size_t i = 2; i != 14; i += 2) { - __m128i k_t = key2; - key1 = key2 = detail::aes_schedule_round(&rcon, key2, key1); - - _mm_storeu_si128(encryption_key_mm + i, detail::aes_schedule_mangle(key2, i % 4)); - _mm_storeu_si128(decryption_key_mm + (14 - i), - detail::aes_schedule_mangle_dec(key2, (i + 2) % 4)); - - key2 = detail::aes_schedule_round(nullptr, _mm_shuffle_epi32(key2, 0xFF), k_t); - _mm_storeu_si128(encryption_key_mm + i + 1, detail::aes_schedule_mangle(key2, (i - 1) % 4)); - _mm_storeu_si128(decryption_key_mm + (13 - i), - detail::aes_schedule_mangle_dec(key2, (i + 1) % 4)); - } - - key2 = detail::aes_schedule_round(&rcon, key2, key1); - - _mm_storeu_si128(encryption_key_mm + 14, detail::aes_schedule_mangle_last(key2, 2)); - _mm_storeu_si128(decryption_key_mm + 0, detail::aes_schedule_mangle_last_dec(key2)); - } - }; - - /*! - * @endcond - */ - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_SSSE3_RIJNDAEL_IMPL_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal1_policy.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal1_policy.hpp deleted file mode 100644 index f2a0820b42..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal1_policy.hpp +++ /dev/null @@ -1,42 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_CIPHERS_DETAIL_SHACAL1_POLICY_HPP -#define CRYPTO3_BLOCK_CIPHERS_DETAIL_SHACAL1_POLICY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - namespace detail { - - typedef shacal_policy shacal1_policy; - - } // namespace detail - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHERS_DETAIL_SHACAL1_POLICY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid.hpp deleted file mode 100644 index a3ead2d776..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid.hpp +++ /dev/null @@ -1 +0,0 @@ -#ifndef CRYPTO3_CPUID_HPP #define CRYPTO3_CPUID_HPP #include #include #include /* * If no way of dynamically determining the cache line size for the * system exists, this value is used as the default. Used by the side * channel countermeasures rather than for alignment purposes, so it is * better to be on the smaller side if the exact value cannot be * determined. Typically 32 or 64 bytes on modern CPUs. */ #if !defined(CRYPTO3_TARGET_CPU_DEFAULT_CACHE_LINE_SIZE) #define CRYPTO3_TARGET_CPU_DEFAULT_CACHE_LINE_SIZE 32 #endif namespace nil { namespace crypto3 { /*! * A class handling runtime CPU feature detection. It is limited to * just the features necessary to implement CPU specific code in library, * rather than being a general purpose utility. * * This class supports: * * - x86 features using CPUID. x86 is also the only processor with * accurate cache line detection currently. * * - PowerPC AltiVec detection on Linux, NetBSD, OpenBSD, and Darwin * * - ARM NEON and crypto extensions detection. On Linux and Android * systems which support getauxval, that is used to access CPU * feature information. Otherwise a relatively portable but * thread-unsafe mechanism involving executing probe functions which * catching SIGILL signal is used. */ class cpuid final { public: /** * Probe the CPU and see what extensions are supported */ static void initialize() { g_processor_features = 0; #if defined(BOOST_ARCH_PPC) || defined(BOOST_ARCH_ARM) || defined(BOOST_ARCH_X86) g_processor_features = cpuid::detect_cpu_features(&g_cache_line_size); #endif g_endian_status = runtime_check_endian(); g_processor_features |= cpuid::CPUID_INITIALIZED_BIT; } static bool has_simd_32() { #if BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_SSE2_VERSION return cpuid::has_sse2(); #elif BOOST_HW_SIMD_ARM >= BOOST_HW_SIMD_ARM_NEON_VERSION return cpuid::has_altivec(); #elif BOOST_HW_SIMD_PPC >= BOOST_HW_SIMD_PPC_VMX_VERSION return cpuid::has_neon(); #else return true; #endif } /** * Return a possibly empty string containing list of known CPU * extensions. Each name will be seperated by a space, and the ordering * will be arbitrary. This list only contains values that are useful for * the library (for example FMA instructions are not checked). * * Example outputs "sse2 ssse3 rdtsc", "neon arm_aes", "altivec" */ static std::string to_string() { std::vector flags; #define CPUID_PRINT(flag) \ do { \ if (has_##flag()) { \ flags.push_back(#flag); \ } \ } while (0) #if defined(BOOST_ARCH_X86) CPUID_PRINT(sse2); CPUID_PRINT(ssse3); CPUID_PRINT(sse41); CPUID_PRINT(sse42); CPUID_PRINT(avx2); CPUID_PRINT(avx512f); CPUID_PRINT(rdtsc); CPUID_PRINT(bmi2); CPUID_PRINT(adx); CPUID_PRINT(aes_ni); CPUID_PRINT(clmul); CPUID_PRINT(rdrand); CPUID_PRINT(rdseed); CPUID_PRINT(intel_sha); #endif #if defined(BOOST_ARCH_PPC) CPUID_PRINT(altivec); CPUID_PRINT(ppc_crypto); #endif #if defined(BOOST_ARCH_ARM) CPUID_PRINT(neon); CPUID_PRINT(arm_sha1); CPUID_PRINT(arm_sha2); CPUID_PRINT(arm_aes); CPUID_PRINT(arm_pmull); #endif #undef CPUID_PRINT std::string out; for (const std::string &c : flags) { out.push_back(' '); out.insert(out.end(), c.begin(), c.end()); } return out; } /** * Return a best guess of the cache line size */ static size_t cache_line_size() { if (g_processor_features == 0) { initialize(); } return g_cache_line_size; } static bool is_little_endian() { return get_endian_status() == ENDIAN_LITTLE; } static bool is_big_endian() { return get_endian_status() == ENDIAN_BIG; } enum CPUID_bits : uint64_t { #if defined(BOOST_ARCH_X86) // These values have no relation to cpuid bitfields // SIMD instruction sets CPUID_SSE2_BIT = (1ULL << 0), CPUID_SSSE3_BIT = (1ULL << 1), CPUID_SSE41_BIT = (1ULL << 2), CPUID_SSE42_BIT = (1ULL << 3), CPUID_AVX2_BIT = (1ULL << 4), CPUID_AVX512F_BIT = (1ULL << 5), // Misc useful instructions CPUID_RDTSC_BIT = (1ULL << 10), CPUID_BMI2_BIT = (1ULL << 11), CPUID_ADX_BIT = (1ULL << 12), CPUID_BMI1_BIT = (1ULL << 13), // Crypto-specific ISAs CPUID_AESNI_BIT = (1ULL << 16), CPUID_CLMUL_BIT = (1ULL << 17), CPUID_RDRAND_BIT = (1ULL << 18), CPUID_RDSEED_BIT = (1ULL << 19), CPUID_SHA_BIT = (1ULL << 20), #endif #if defined(BOOST_ARCH_PPC) CPUID_ALTIVEC_BIT = (1ULL << 0), CPUID_PPC_CRYPTO3_BIT = (1ULL << 1), #endif #if defined(BOOST_ARCH_ARM) CPUID_ARM_NEON_BIT = (1ULL << 0), CPUID_ARM_RIJNDAEL_BIT = (1ULL << 16), CPUID_ARM_PMULL_BIT = (1ULL << 17), CPUID_ARM_SHA1_BIT = (1ULL << 18), CPUID_ARM_SHA2_BIT = (1ULL << 19), #endif CPUID_INITIALIZED_BIT = (1ULL << 63) }; #if defined(BOOST_ARCH_PPC) /** * Check if the processor supports AltiVec/VMX */ static bool has_altivec() { return has_cpuid_bit(CPUID_ALTIVEC_BIT); } /** * Check if the processor supports POWER8 crypto3 extensions */ static bool has_ppc_crypto() { return has_cpuid_bit(CPUID_PPC_CRYPTO3_BIT); } #endif #if defined(BOOST_ARCH_ARM) /** * Check if the processor supports NEON SIMD */ static bool has_neon() { return has_cpuid_bit(CPUID_ARM_NEON_BIT); } /** * Check if the processor supports ARMv8 SHA1 */ static bool has_arm_sha1() { return has_cpuid_bit(CPUID_ARM_SHA1_BIT); } /** * Check if the processor supports ARMv8 SHA2 */ static bool has_arm_sha2() { return has_cpuid_bit(CPUID_ARM_SHA2_BIT); } /** * Check if the processor supports ARMv8 AES */ static bool has_arm_aes() { return has_cpuid_bit(CPUID_ARM_RIJNDAEL_BIT); } /** * Check if the processor supports ARMv8 PMULL */ static bool has_arm_pmull() { return has_cpuid_bit(CPUID_ARM_PMULL_BIT); } #endif #if defined(BOOST_ARCH_X86) /** * Check if the processor supports RDTSC */ static bool has_rdtsc() { return has_cpuid_bit(CPUID_RDTSC_BIT); } /** * Check if the processor supports SSE2 */ static bool has_sse2() { return has_cpuid_bit(CPUID_SSE2_BIT); } /** * Check if the processor supports SSSE3 */ static bool has_ssse3() { return has_cpuid_bit(CPUID_SSSE3_BIT); } /** * Check if the processor supports SSE4.1 */ static bool has_sse41() { return has_cpuid_bit(CPUID_SSE41_BIT); } /** * Check if the processor supports SSE4.2 */ static bool has_sse42() { return has_cpuid_bit(CPUID_SSE42_BIT); } /** * Check if the processor supports AVX2 */ static bool has_avx2() { return has_cpuid_bit(CPUID_AVX2_BIT); } /** * Check if the processor supports AVX-512F */ static bool has_avx512f() { return has_cpuid_bit(CPUID_AVX512F_BIT); } /** * Check if the processor supports BMI1 */ static bool has_bmi1() { return has_cpuid_bit(CPUID_BMI1_BIT); } /** * Check if the processor supports BMI2 */ static bool has_bmi2() { return has_cpuid_bit(CPUID_BMI2_BIT); } /** * Check if the processor supports AES-NI */ static bool has_aes_ni() { return has_cpuid_bit(CPUID_AESNI_BIT); } /** * Check if the processor supports CLMUL */ static bool has_clmul() { return has_cpuid_bit(CPUID_CLMUL_BIT); } /** * Check if the processor supports Intel SHA extension */ static bool has_intel_sha() { return has_cpuid_bit(CPUID_SHA_BIT); } /** * Check if the processor supports ADX extension */ static bool has_adx() { return has_cpuid_bit(CPUID_ADX_BIT); } /** * Check if the processor supports RDRAND */ static bool has_rdrand() { return has_cpuid_bit(CPUID_RDRAND_BIT); } /** * Check if the processor supports RDSEED */ static bool has_rdseed() { return has_cpuid_bit(CPUID_RDSEED_BIT); } #endif /* * Clear a cpuid bit * Call cpuid::initialize to reset * * This is only exposed for testing, don't use unless you know * what you are doing. */ static void clear_cpuid_bit(CPUID_bits bit) { const uint64_t mask = ~(static_cast(bit)); g_processor_features &= mask; } /* * Don't call this function, use cpuid::has_xxx above * It is only exposed for the tests. */ static bool has_cpuid_bit(CPUID_bits elem) { if (g_processor_features == 0) { initialize(); } const uint64_t elem64 = static_cast(elem); return ((g_processor_features & elem64) == elem64); } static std::vector bit_from_string(const std::string &tok) { #if defined(BOOST_ARCH_X86) if (tok == "sse2" || tok == "simd") { return {nil::crypto3::cpuid::CPUID_SSE2_BIT}; } if (tok == "ssse3") { return {nil::crypto3::cpuid::CPUID_SSSE3_BIT}; } if (tok == "aesni") { return {nil::crypto3::cpuid::CPUID_AESNI_BIT}; } if (tok == "clmul") { return {nil::crypto3::cpuid::CPUID_CLMUL_BIT}; } if (tok == "avx2") { return {nil::crypto3::cpuid::CPUID_AVX2_BIT}; } if (tok == "sha") { return {nil::crypto3::cpuid::CPUID_SHA_BIT}; } #elif defined(BOOST_ARCH_PPC) if (tok == "altivec" || tok == "simd") return {nil::crypto3::cpuid::CPUID_ALTIVEC_BIT}; #elif defined(BOOST_ARCH_ARM) if (tok == "neon" || tok == "simd") return {nil::crypto3::cpuid::CPUID_ARM_NEON_BIT}; if (tok == "armv8sha1") return {nil::crypto3::cpuid::CPUID_ARM_SHA1_BIT}; if (tok == "armv8sha2") return {nil::crypto3::cpuid::CPUID_ARM_SHA2_BIT}; if (tok == "armv8aes") return {nil::crypto3::cpuid::CPUID_ARM_RIJNDAEL_BIT}; if (tok == "armv8pmull") return {nil::crypto3::cpuid::CPUID_ARM_PMULL_BIT}; #else CRYPTO3_UNUSED(tok); #endif return {}; } private: enum endian_status : uint32_t { ENDIAN_UNKNOWN = 0x00000000, ENDIAN_BIG = 0x01234567, ENDIAN_LITTLE = 0x67452301, }; #if defined(BOOST_ARCH_PPC) || defined(BOOST_ARCH_ARM) || defined(BOOST_ARCH_X86) static uint64_t detect_cpu_features(size_t *cache_line_size); #endif static endian_status runtime_check_endian() { // Check runtime endian const uint32_t endian32 = 0x01234567; const uint8_t *e8 = reinterpret_cast(&endian32); endian_status endian = ENDIAN_UNKNOWN; if (e8[0] == 0x01 && e8[1] == 0x23 && e8[2] == 0x45 && e8[3] == 0x67) { endian = ENDIAN_BIG; } else if (e8[0] == 0x67 && e8[1] == 0x45 && e8[2] == 0x23 && e8[3] == 0x01) { endian = ENDIAN_LITTLE; } else { throw std::exception(); } // If we were compiled with a known endian, verify it matches at runtime #if defined(BOOST_ENDIAN_LITTLE_BYTE_AVAILABLE) BOOST_ASSERT_MSG(endian == ENDIAN_LITTLE, "Build and runtime endian match"); #elif defined(BOOST_ENDIAN_BIG_BYTE_AVAILABLE) BOOST_ASSERT_MSG(endian == ENDIAN_BIG, "Build and runtime endian match"); #endif return endian; } static endian_status get_endian_status() { if (g_endian_status == ENDIAN_UNKNOWN) { g_endian_status = runtime_check_endian(); } return g_endian_status; } static uint64_t g_processor_features; static size_t g_cache_line_size; static enum endian_status g_endian_status; }; uint64_t cpuid::g_processor_features = 0; size_t cpuid::g_cache_line_size = CRYPTO3_TARGET_CPU_DEFAULT_CACHE_LINE_SIZE; cpuid::endian_status cpuid::g_endian_status = ENDIAN_UNKNOWN; } // namespace crypto3 } // namespace nil #endif \ No newline at end of file diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_arm.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_arm.hpp deleted file mode 100644 index f12e3baeba..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_arm.hpp +++ /dev/null @@ -1,214 +0,0 @@ -#include - -#if defined(BOOST_ARCH_ARM) - -#if defined(CRYPTO3_TARGET_OS_HAS_GETAUXVAL) -#include - -#elif defined(CRYPTO3_TARGET_OS_IS_IOS) -#include -#include - -#else -#include - -#endif - -#endif - -namespace nil { - namespace crypto3 { - -#if defined(BOOST_ARCH_ARM) - -#if defined(CRYPTO3_TARGET_OS_IS_IOS) - - namespace { - - uint64_t flags_by_ios_machine_type(const std::string &machine) { - /* - * This relies on a map of known machine names to features. This - * will quickly grow out of date as new products are introduced, but - * is apparently the best we can do for iOS. - */ - - struct version_info { - std::string name; - size_t min_version_neon; - size_t min_version_armv8; - }; - - static const version_info min_versions[] = { - {"iPhone", 2, 6}, - {"iPad", 1, 4}, - {"iPod", 4, 7}, - {"AppleTV", 2, 5}, - }; - - if (machine.size() < 3) - return 0; - - auto comma = machine.find(','); - - // Simulator, or something we don't know about - if (comma == std::string::npos) - return 0; - - std::string product = machine.substr(0, comma); - - size_t version = 0; - size_t place = 1; - while (product.size() > 1 && ::isdigit(product.back())) { - const size_t digit = product.back() - '0'; - version += digit * place; - place *= 10; - product.pop_back(); - } - - if (version == 0) - return 0; - - for (const version_info &info : min_versions) { - if (info.name != product) - continue; - - if (version >= info.min_version_armv8) { - return cpuid::CPUID_ARM_RIJNDAEL_BIT | cpuid::CPUID_ARM_PMULL_BIT | cpuid::CPUID_ARM_SHA1_BIT | - cpuid::CPUID_ARM_SHA2_BIT | cpuid::CPUID_ARM_NEON_BIT; - } - - if (version >= info.min_version_neon) - return cpuid::CPUID_ARM_NEON_BIT; - } - - // Some other product we don't know about - return 0; - } - - } // namespace - -#endif - - uint64_t cpuid::detect_cpu_features(size_t *cache_line_size) { - uint64_t detected_features = 0; - -#if defined(CRYPTO3_TARGET_OS_HAS_GETAUXVAL) - /* - * On systems with getauxval these bits should normally be defined - * in bits/auxv.h but some buggy? glibc installs seem to miss them. - * These following values are all fixed, for the Linux ELF format, - * so we just hardcode them in ARM_hwcap_bit enum. - */ - - enum ARM_hwcap_bit { -#if defined(CRYPTO3_TARGET_ARCHITECTURE_IS_ARM32) - NEON_bit = (1 << 12), - AES_bit = (1 << 0), - PMULL_bit = (1 << 1), - SHA1_bit = (1 << 2), - SHA2_bit = (1 << 3), - - ARCH_hwcap_neon = 16, // AT_HWCAP - ARCH_hwcap_crypto = 26, // AT_HWCAP2 -#elif defined(CRYPTO3_TARGET_ARCHITECTURE_IS_ARM64) - NEON_bit = (1 << 1), - AES_bit = (1 << 3), - PMULL_bit = (1 << 4), - SHA1_bit = (1 << 5), - SHA2_bit = (1 << 6), - - ARCH_hwcap_neon = 16, // AT_HWCAP - ARCH_hwcap_crypto = 16, // AT_HWCAP -#endif - }; - -#if defined(AT_DCACHEBSIZE) - const unsigned long dcache_line = ::getauxval(AT_DCACHEBSIZE); - - // plausibility check - if (dcache_line == 32 || dcache_line == 64 || dcache_line == 128) - *cache_line_size = static_cast(dcache_line); -#endif - - const unsigned long hwcap_neon = ::getauxval(ARM_hwcap_bit::ARCH_hwcap_neon); - if (hwcap_neon & ARM_hwcap_bit::NEON_bit) - detected_features |= cpuid::CPUID_ARM_NEON_BIT; - - /* - On aarch64 this ends up calling getauxval twice with AT_HWCAP - It doesn't seem worth optimizing this out, since getauxval is - just reading a field in the ELF header. - */ - const unsigned long hwcap_crypto = ::getauxval(ARM_hwcap_bit::ARCH_hwcap_crypto); - if (hwcap_crypto & ARM_hwcap_bit::AES_bit) - detected_features |= cpuid::CPUID_ARM_RIJNDAEL_BIT; - if (hwcap_crypto & ARM_hwcap_bit::PMULL_bit) - detected_features |= cpuid::CPUID_ARM_PMULL_BIT; - if (hwcap_crypto & ARM_hwcap_bit::SHA1_bit) - detected_features |= cpuid::CPUID_ARM_SHA1_BIT; - if (hwcap_crypto & ARM_hwcap_bit::SHA2_bit) - detected_features |= cpuid::CPUID_ARM_SHA2_BIT; - -#elif defined(CRYPTO3_TARGET_OS_IS_IOS) - - char machine[64] = {0}; - size_t size = sizeof(machine) - 1; - ::sysctlbyname("hw.machine", machine, &size, nullptr, 0); - - detected_features = flags_by_ios_machine_type(machine); - -#elif defined(CRYPTO3_USE_GCC_INLINE_ASM) && defined(CRYPTO3_TARGET_ARCHITECTURE_IS_ARM64) - - /* - No getauxval API available, fall back on probe functions. We only - bother with Aarch64 here to simplify the code and because going to - extreme contortions to support detect NEON on devices that probably - don't support it doesn't seem worthwhile. - - NEON registers v0-v7 are caller saved in Aarch64 - */ - - auto neon_probe = []() -> int { - asm("and v0.16b, v0.16b, v0.16b"); - return 1; - }; - auto aes_probe = []() -> int { - asm(".word 0x4e284800"); - return 1; - }; - auto pmull_probe = []() -> int { - asm(".word 0x0ee0e000"); - return 1; - }; - auto sha1_probe = []() -> int { - asm(".word 0x5e280800"); - return 1; - }; - auto sha2_probe = []() -> int { - asm(".word 0x5e282800"); - return 1; - }; - - // Only bother running the crypto3 detection if we found NEON - - if (run_cpu_instruction_probe(neon_probe) == 1) { - detected_features |= cpuid::CPUID_ARM_NEON_BIT; - - if (run_cpu_instruction_probe(aes_probe) == 1) - detected_features |= cpuid::CPUID_ARM_RIJNDAEL_BIT; - if (run_cpu_instruction_probe(pmull_probe) == 1) - detected_features |= cpuid::CPUID_ARM_PMULL_BIT; - if (run_cpu_instruction_probe(sha1_probe) == 1) - detected_features |= cpuid::CPUID_ARM_SHA1_BIT; - if (run_cpu_instruction_probe(sha2_probe) == 1) - detected_features |= cpuid::CPUID_ARM_SHA2_BIT; - } - -#endif - - return detected_features; - } - -#endif - } // namespace crypto3 -} // namespace nil diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_ppc.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_ppc.hpp deleted file mode 100644 index f8a9d33605..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_ppc.hpp +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include - -#if defined(BOOST_ARCH_PPC) - -/* - * On Darwin and OpenBSD ppc, use sysctl to detect AltiVec - */ -#if defined(CRYPTO3_TARGET_OS_IS_DARWIN) -#include -#elif defined(CRYPTO3_TARGET_OS_IS_OPENBSD) -#include -#include -#include -#elif defined(CRYPTO3_TARGET_OS_HAS_GETAUXVAL) -#include -#endif - -#endif - -namespace nil { - namespace crypto3 { - -#if defined(BOOST_ARCH_PPC) - - /* - * PowerPC specific block: check for AltiVec using either - * sysctl or by reading processor version number register. - */ - uint64_t cpuid::detect_cpu_features(size_t *cache_line_size) { - CRYPTO3_UNUSED(cache_line_size); - -#if defined(CRYPTO3_TARGET_OS_IS_DARWIN) || defined(CRYPTO3_TARGET_OS_IS_OPENBSD) - // On Darwin/OS X and OpenBSD, use sysctl - - int sels[2] = { -#if defined(CRYPTO3_TARGET_OS_IS_OPENBSD) - CTL_MACHDEP, - CPU_ALTIVEC -#else - CTL_HW, - HW_VECTORUNIT -#endif - }; - - int vector_type = 0; - size_t length = sizeof(vector_type); - int error = ::sysctl(sels, 2, &vector_type, &length, NULL, 0); - - if (error == 0 && vector_type > 0) - return cpuid::CPUID_ALTIVEC_BIT; - -#elif defined(CRYPTO3_TARGET_OS_HAS_GETAUXVAL) && defined(CRYPTO3_TARGET_ARCHITECTURE_IS_PPC64) - - enum PPC_hwcap_bit { - ALTIVEC_bit = (1 << 28), - CRYPTO3_bit = (1 << 25), - - ARCH_hwcap_altivec = 16, // AT_HWCAP - ARCH_hwcap_crypto = 26, // AT_HWCAP2 - }; - - uint64_t detected_features = 0; - - const unsigned long hwcap_altivec = ::getauxval(PPC_hwcap_bit::ARCH_hwcap_altivec); - if (hwcap_altivec & PPC_hwcap_bit::ALTIVEC_bit) - detected_features |= cpuid::CPUID_ALTIVEC_BIT; - - const unsigned long hwcap_crypto = ::getauxval(PPC_hwcap_bit::ARCH_hwcap_crypto); - if (hwcap_crypto & PPC_hwcap_bit::CRYPTO3_bit) - detected_features |= cpuid::CPUID_PPC_CRYPTO3_BIT; - - return detected_features; - -#else - - /* - On PowerPC, MSR 287 is PVR, the Processor Version Number - Normally it is only accessible to ring 0, but Linux and NetBSD - (others, too, maybe?) will trap and emulate it for us. - */ - - int pvr = run_cpu_instruction_probe([]() -> int { - uint32_t pvr = 0; - asm volatile("mfspr %0, 287" : "=r"(pvr)); - // Top 16 bits suffice to identify the model - return static_cast(pvr >> 16); - }); - - if (pvr > 0) { - const uint16_t ALTIVEC_PVR[] = { - 0x003E, // IBM POWER6 - 0x003F, // IBM POWER7 - 0x004A, // IBM POWER7p - 0x004D, // IBM POWER8 - 0x004B, // IBM POWER8E - 0x000C, // G4-7400 - 0x0039, // G5 970 - 0x003C, // G5 970FX - 0x0044, // G5 970MP - 0x0070, // Cell PPU - 0, // end - }; - - for (size_t i = 0; ALTIVEC_PVR[i]; ++i) { - if (pvr == ALTIVEC_PVR[i]) - return cpuid::CPUID_ALTIVEC_BIT; - } - - return 0; - } - - // TODO try direct instruction probing - -#endif - - return 0; - } - -#endif - } // namespace crypto3 -} // namespace nil diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_x86.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_x86.hpp deleted file mode 100644 index 5cdcf35cff..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/cpuid/cpuid_x86.hpp +++ /dev/null @@ -1,174 +0,0 @@ -#include -#include -#include - -#if defined(BOOST_ARCH_X86) - -#if defined(CRYPTO3_BUILD_COMPILER_IS_MSVC) -#include -#elif defined(CRYPTO3_BUILD_COMPILER_IS_INTEL) -#include -#elif defined(CRYPTO3_BUILD_COMPILER_IS_GCC) || defined(CRYPTO3_BUILD_COMPILER_IS_CLANG) -#include -#endif - -#endif - -namespace nil { - namespace crypto3 { - -#if defined(BOOST_ARCH_X86) - - uint64_t cpuid::detect_cpu_features(size_t *cache_line_size) { -#if defined(CRYPTO3_BUILD_COMPILER_IS_MSVC) -#define X86_CPUID(type, out) \ - do { \ - __cpuid((int *)out, type); \ - } while (0) -#define X86_CPUID_SUBLEVEL(type, level, out) \ - do { \ - __cpuidex((int *)out, type, level); \ - } while (0) - -#elif defined(CRYPTO3_BUILD_COMPILER_IS_INTEL) -#define X86_CPUID(type, out) \ - do { \ - __cpuid(out, type); \ - } while (0) -#define X86_CPUID_SUBLEVEL(type, level, out) \ - do { \ - __cpuidex((int *)out, type, level); \ - } while (0) - -#elif defined(CRYPTO3_TARGET_ARCHITECTURE_IS_X86_64) && defined(CRYPTO3_USE_GCC_INLINE_ASM) -#define X86_CPUID(type, out) asm("cpuid\n\t" : "=a"(out[0]), "=b"(out[1]), "=c"(out[2]), "=d"(out[3]) : "0"(type)) - -#define X86_CPUID_SUBLEVEL(type, level, out) \ - asm("cpuid\n\t" : "=a"(out[0]), "=b"(out[1]), "=c"(out[2]), "=d"(out[3]) : "0"(type), "2"(level)) - -#elif defined(CRYPTO3_BUILD_COMPILER_IS_GCC) || defined(CRYPTO3_BUILD_COMPILER_IS_CLANG) -#define X86_CPUID(type, out) \ - do { \ - __get_cpuid(type, out, out + 1, out + 2, out + 3); \ - } while (0) - -#define X86_CPUID_SUBLEVEL(type, level, out) \ - do { \ - __cpuid_count(type, level, out[0], out[1], out[2], out[3]); \ - } while (0) -#else -#warning "No way of calling x86 cpuid instruction for this compiler" -#define X86_CPUID(type, out) \ - do { \ - clear_mem(out, 4); \ - } while (0) -#define X86_CPUID_SUBLEVEL(type, level, out) \ - do { \ - clear_mem(out, 4); \ - } while (0) -#endif - - uint64_t features_detected = 0; - uint32_t cpuid[4] = {0}; - - // cpuid 0: vendor identification, max sublevel - X86_CPUID(0, cpuid); - - const uint32_t max_supported_sublevel = cpuid[0]; - - const uint32_t INTEL_CPUID[3] = {0x756E6547, 0x6C65746E, 0x49656E69}; - const uint32_t AMD_CPUID[3] = {0x68747541, 0x444D4163, 0x69746E65}; - const bool is_intel = same_mem(cpuid + 1, INTEL_CPUID, 3); - const bool is_amd = same_mem(cpuid + 1, AMD_CPUID, 3); - - if (max_supported_sublevel >= 1) { - // cpuid 1: feature bits - X86_CPUID(1, cpuid); - const uint64_t flags0 = (static_cast(cpuid[2]) << 32) | cpuid[3]; - - enum x86_CPUID_1_bits : uint64_t { - RDTSC = (1ULL << 4), - SSE2 = (1ULL << 26), - CLMUL = (1ULL << 33), - SSSE3 = (1ULL << 41), - SSE41 = (1ULL << 51), - SSE42 = (1ULL << 52), - AESNI = (1ULL << 57), - RDRAND = (1ULL << 62) - }; - - if (flags0 & x86_CPUID_1_bits::RDTSC) - features_detected |= cpuid::CPUID_RDTSC_BIT; - if (flags0 & x86_CPUID_1_bits::SSE2) - features_detected |= cpuid::CPUID_SSE2_BIT; - if (flags0 & x86_CPUID_1_bits::CLMUL) - features_detected |= cpuid::CPUID_CLMUL_BIT; - if (flags0 & x86_CPUID_1_bits::SSSE3) - features_detected |= cpuid::CPUID_SSSE3_BIT; - if (flags0 & x86_CPUID_1_bits::SSE41) - features_detected |= cpuid::CPUID_SSE41_BIT; - if (flags0 & x86_CPUID_1_bits::SSE42) - features_detected |= cpuid::CPUID_SSE42_BIT; - if (flags0 & x86_CPUID_1_bits::AESNI) - features_detected |= cpuid::CPUID_AESNI_BIT; - if (flags0 & x86_CPUID_1_bits::RDRAND) - features_detected |= cpuid::CPUID_RDRAND_BIT; - } - - if (is_intel) { - // Intel cache line size is in cpuid(1) output - *cache_line_size = 8 * extract_uint_t(cpuid[1], 2); - } else if (is_amd) { - // AMD puts it in vendor zone - X86_CPUID(0x80000005, cpuid); - *cache_line_size = extract_uint_t(cpuid[2], 3); - } - - if (max_supported_sublevel >= 7) { - clear_mem(cpuid, 4); - X86_CPUID_SUBLEVEL(7, 0, cpuid); - - enum x86_CPUID_7_bits : uint64_t { - AVX2 = (1ULL << 5), - BMI2 = (1ULL << 8), - AVX512F = (1ULL << 16), - RDSEED = (1ULL << 18), - ADX = (1ULL << 19), - SHA = (1ULL << 29), - }; - uint64_t flags7 = (static_cast(cpuid[2]) << 32) | cpuid[1]; - - if (flags7 & x86_CPUID_7_bits::AVX2) - features_detected |= cpuid::CPUID_AVX2_BIT; - if (flags7 & x86_CPUID_7_bits::BMI2) - features_detected |= cpuid::CPUID_BMI2_BIT; - if (flags7 & x86_CPUID_7_bits::AVX512F) - features_detected |= cpuid::CPUID_AVX512F_BIT; - if (flags7 & x86_CPUID_7_bits::RDSEED) - features_detected |= cpuid::CPUID_RDSEED_BIT; - if (flags7 & x86_CPUID_7_bits::ADX) - features_detected |= cpuid::CPUID_ADX_BIT; - if (flags7 & x86_CPUID_7_bits::SHA) - features_detected |= cpuid::CPUID_SHA_BIT; - } - -#undef X86_CPUID -#undef X86_CPUID_SUBLEVEL - - /* - * If we don't have access to cpuid, we can still safely assume that - * any x86-64 processor has SSE2 and RDTSC - */ -#if defined(CRYPTO3_TARGET_ARCHITECTURE_IS_X86_64) - if (features_detected == 0) { - features_detected |= cpuid::CPUID_SSE2_BIT; - features_detected |= cpuid::CPUID_RDTSC_BIT; - } -#endif - - return features_detected; - } - -#endif - } // namespace crypto3 -} // namespace nil diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/locking_allocator.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/locking_allocator.hpp deleted file mode 100644 index 2d7e11eecd..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/locking_allocator.hpp +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef CRYPTO3_MLOCK_ALLOCATOR_HPP -#define CRYPTO3_MLOCK_ALLOCATOR_HPP - -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - - class memory_pool; - - class mlock_allocator final { - public: - static mlock_allocator &instance() { - static mlock_allocator mlock; - return mlock; - } - - void *allocate(size_t num_elems, size_t elem_size) { - if (!m_pool) { - return nullptr; - } - - const size_t n = num_elems * elem_size; - if (n / elem_size != num_elems) { - return nullptr; - } // overflow! - - return m_pool->allocate(n); - } - - bool deallocate(void *p, size_t num_elems, size_t elem_size) BOOST_NOEXCEPT { - if (!m_pool) { - return false; - } - - size_t n = num_elems * elem_size; - - /* - We return nullptr in allocate if there was an overflow, so if an - overflow occurs here we know the pointer was not allocated by this pool. - */ - if (n / elem_size != num_elems) { - return false; - } - - return m_pool->deallocate(p, n); - } - - mlock_allocator(const mlock_allocator &) = delete; - - mlock_allocator &operator=(const mlock_allocator &) = delete; - - private: - mlock_allocator() { - const size_t mem_to_lock = get_memory_locking_limit(); - - if (mem_to_lock) { - m_locked_pages = static_cast(allocate_locked_pages(mem_to_lock)); - - if (m_locked_pages) { - m_locked_pages_size = mem_to_lock; - m_pool = std::make_unique(m_locked_pages, m_locked_pages_size, system_page_size(), - CRYPTO3_MLOCK_ALLOCATOR_MIN_ALLOCATION, - CRYPTO3_MLOCK_ALLOCATOR_MAX_ALLOCATION, 4); - } - } - } - - ~mlock_allocator() { - if (m_pool) { - m_pool.reset(); - // free_locked_pages scrubs the memory before free - free_locked_pages(m_locked_pages, m_locked_pages_size); - } - } - - std::unique_ptr m_pool; - uint8_t *m_locked_pages = nullptr; - size_t m_locked_pages_size = 0; - }; - } // namespace crypto3 -} // namespace nil - -#endif \ No newline at end of file diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/memory_operations.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/memory_operations.hpp deleted file mode 100644 index fa8ff0a45b..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/memory_operations.hpp +++ /dev/null @@ -1,329 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MEMORY_OPERATIONS_HPP -#define CRYPTO3_MEMORY_OPERATIONS_HPP - -#include -#include - -#ifdef CRYPTO3_HAS_LOCKING_ALLOCATOR - -#include - -#endif - -namespace nil { - namespace crypto3 { - - /** - * Allocate a memory buffer by some method. This should only be used for - * primitive types (uint8_t, uint32_t, etc). - * - * @param elems the number of elements - * @param elem_size the size of each element - * @return pointer to allocated and zeroed memory, or throw std::bad_alloc on failure - */ - __attribute__((malloc)) void *allocate_memory(size_t elems, size_t elem_size) { -#if defined(CRYPTO3_HAS_LOCKING_ALLOCATOR) - if (void *p = mlock_allocator::instance().allocate(elems, elem_size)) { - return p; - } -#endif - - void *ptr = std::calloc(elems, elem_size); - if (!ptr) { - throw std::bad_alloc(); - } - return ptr; - } - - /** - * Scrub memory contents in a way that a compiler should not elide, - * using some system specific technique. Note that this function might - * not zero the memory (for example, in some hypothetical - * implementation it might combine the memory contents with the output - * of a system PRNG), but if you can detect any difference in behavior - * at runtime then the clearing is side-effecting and you can just - * use `clear_mem`. - * - * Use this function to scrub memory just before deallocating it, or on - * a stack buffer before returning from the function. - * - * @param ptr a pointer to memory to scrub - * @param n the number of bytes pointed to by ptr - */ - void secure_scrub_memory(void *ptr, size_t n) { -#if defined(CRYPTO3_TARGET_OS_HAS_RTLSECUREZEROMEMORY) - ::RtlSecureZeroMemory(ptr, n); - -#elif defined(CRYPTO3_TARGET_OS_HAS_EXPLICIT_BZERO) - ::explicit_bzero(ptr, n); - -#elif defined(CRYPTO3_USE_VOLATILE_MEMSET_FOR_ZERO) && (CRYPTO3_USE_VOLATILE_MEMSET_FOR_ZERO == 1) - /* - * Call memset through a static volatile pointer, which the compiler - * should not elide. This construct should be safe in conforming - * compilers, but who knows. I did confirm that on x86-64 GCC 6.1 and - * Clang 3.8 both create code that saves the memset address in the - * data segment and uncondtionally loads and jumps to that address. - */ - static void *(*const volatile memset_ptr)(void *, int, size_t) = std::memset; - (memset_ptr)(ptr, 0, n); -#else - - volatile uint8_t *p = reinterpret_cast(ptr); - - for (size_t i = 0; i != n; ++i) { - p[i] = 0; - } -#endif - } - - /** - * Free a pointer returned by allocate_memory - * @param p the pointer returned by allocate_memory - * @param elems the number of elements, as passed to allocate_memory - * @param elem_size the size of each element, as passed to allocate_memory - */ - void deallocate_memory(void *p, size_t elems, size_t elem_size) { - if (p == nullptr) { - return; - } - - secure_scrub_memory(p, elems * elem_size); - -#if defined(CRYPTO3_HAS_LOCKING_ALLOCATOR) - if (mlock_allocator::instance().deallocate(p, elems, elem_size)) { - return; - } -#endif - - std::free(p); - } - - /** - * Ensure the allocator is initialized - */ - void initialize_allocator() { -#if defined(CRYPTO3_HAS_LOCKING_ALLOCATOR) - mlock_allocator::instance(); -#endif - } - - /** - * Memory comparison, input insensitive - * @param x a pointer to an array - * @param y a pointer to another array - * @param len the number of Ts in x and y - * @return true iff x[i] == y[i] forall i in [0...n) - */ - - bool constant_time_compare(const uint8_t x[], const uint8_t y[], size_t len) { - volatile uint8_t difference = 0; - - for (size_t i = 0; i != len; ++i) { - difference |= (x[i] ^ y[i]); - } - - return difference == 0; - } - - /** - * Zero out some bytes - * @param ptr a pointer to memory to zero - * @param bytes the number of bytes to zero in ptr - */ - inline void clear_bytes(void *ptr, size_t bytes) { - if (bytes > 0) { - std::memset(ptr, 0, bytes); - } - } - - /** - * Zero memory before use. This simply calls memset and should not be - * used in cases where the compiler cannot see the call as a - * side-effecting operation (for example, if calling clear_mem before - * deallocating memory, the compiler would be allowed to omit the call - * to memset entirely under the as-if rule.) - * - * @param ptr a pointer to an array of Ts to zero - * @param n the number of Ts pointed to by ptr - */ - template - inline void clear_mem(T *ptr, size_t n) { - clear_bytes(ptr, sizeof(T) * n); - } - - /** - * Copy memory - * @param out the destination array - * @param in the source array - * @param n the number of elements of in/out - */ - template - inline void copy_mem(T *out, const T *in, size_t n) { - if (n > 0) { - std::memmove(out, in, sizeof(T) * n); - } - } - - /** - * Set memory to a fixed value - * @param ptr a pointer to an array - * @param n the number of Ts pointed to by ptr - * @param val the value to set each byte to - */ - template - inline void set_mem(T *ptr, size_t n, uint8_t val) { - if (n > 0) { - std::memset(ptr, val, sizeof(T) * n); - } - } - - inline const uint8_t *cast_char_ptr_to_uint8(const char *s) { - return reinterpret_cast(s); - } - - inline const char *cast_uint8_ptr_to_char(const uint8_t *b) { - return reinterpret_cast(b); - } - - inline uint8_t *cast_char_ptr_to_uint8(char *s) { - return reinterpret_cast(s); - } - - inline char *cast_uint8_ptr_to_char(uint8_t *b) { - return reinterpret_cast(b); - } - - /** - * Memory comparison, input insensitive - * @param p1 a pointer to an array - * @param p2 a pointer to another array - * @param n the number of Ts in p1 and p2 - * @return true iff p1[i] == p2[i] forall i in [0...n) - */ - template - inline bool same_mem(const T *p1, const T *p2, size_t n) { - volatile T difference = 0; - - for (size_t i = 0; i != n; ++i) { - difference |= (p1[i] ^ p2[i]); - } - - return difference == 0; - } - - /** - * XOR arrays. Postcondition out[i] = in[i] ^ out[i] forall i = 0...length - * @param out the input/output buffer - * @param in the read-only input buffer - * @param length the length of the buffers - */ - inline void xor_buf(uint8_t out[], const uint8_t in[], size_t length) { - while (length >= 16) { - uint64_t x0, x1, y0, y1; - std::memcpy(&x0, in, 8); - std::memcpy(&x1, in + 8, 8); - std::memcpy(&y0, out, 8); - std::memcpy(&y1, out + 8, 8); - - y0 ^= x0; - y1 ^= x1; - std::memcpy(out, &y0, 8); - std::memcpy(out + 8, &y1, 8); - out += 16; - in += 16; - length -= 16; - } - - while (length > 0) { - out[0] ^= in[0]; - out += 1; - in += 1; - length -= 1; - } - } - - /** - * XOR arrays. Postcondition out[i] = in[i] ^ in2[i] forall i = 0...length - * @param out the output buffer - * @param in the first input buffer - * @param in2 the second output buffer - * @param length the length of the three buffers - */ - inline void xor_buf(uint8_t out[], const uint8_t in[], const uint8_t in2[], size_t length) { - while (length >= 16) { - uint64_t x0, x1, y0, y1; - std::memcpy(&x0, in, 8); - std::memcpy(&x1, in + 8, 8); - std::memcpy(&y0, in2, 8); - std::memcpy(&y1, in2 + 8, 8); - - x0 ^= y0; - x1 ^= y1; - std::memcpy(out, &x0, 8); - std::memcpy(out + 8, &x1, 8); - out += 16; - in += 16; - in2 += 16; - length -= 16; - } - - for (size_t i = 0; i != length; ++i) { - out[i] = in[i] ^ in2[i]; - } - } - - template - void xor_buf(std::vector &out, const std::vector &in, size_t n) { - xor_buf(out.data(), in.data(), n); - } - - template - void xor_buf(std::vector &out, const uint8_t *in, size_t n) { - xor_buf(out.data(), in, n); - } - - template - void xor_buf(std::vector &out, const uint8_t *in, const std::vector &in2, - size_t n) { - xor_buf(out.data(), in, in2.data(), n); - } - - template - std::vector &operator^=(std::vector &out, - const std::vector &in) { - if (out.size() < in.size()) { - out.resize(in.size()); - } - - xor_buf(out.data(), in.data(), in.size()); - return out; - } - } // namespace crypto3 -} // namespace nil - -#endif \ No newline at end of file diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/memory_pool.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/memory_pool.hpp deleted file mode 100644 index b1599c43e4..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/memory_pool.hpp +++ /dev/null @@ -1,200 +0,0 @@ -#ifndef CRYPTO3_MEM_POOL_HPP -#define CRYPTO3_MEM_POOL_HPP - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace detail { - inline bool ptr_in_pool(const void *pool_ptr, size_t poolsize, const void *buf_ptr, size_t bufsize) { - const uintptr_t pool = reinterpret_cast(pool_ptr); - const uintptr_t buf = reinterpret_cast(buf_ptr); - return (buf >= pool) && (buf + bufsize <= pool + poolsize); - } - - inline size_t padding_for_alignment(size_t n, size_t alignment) { - const size_t mod = n % alignment; - if (mod == 0) { - return 0; - } - return alignment - mod; - } - } // namespace detail - - class memory_pool final { - public: - /** - * Initialize a memory pool. The memory is not owned by *this, - * it must be freed by the caller. - * @param pool the pool - * @param pool_size size of pool - * @param page_size some nominal page size (does not need to match - * the system page size) - * @param min_allocation return null for allocs for smaller amounts - * @param max_allocation return null for allocs of larger amounts - * @param align_bit align all returned memory to (1< m_max_alloc) { - throw std::invalid_argument("memory_pool min_alloc > max_alloc"); - } - - if (m_align_bit > 6) { - throw std::invalid_argument("memory_pool invalid align_bit"); - } - - // This is basically just to verify that the range is valid - clear_mem(pool, pool_size); - - m_pool = pool; - m_pool_size = pool_size; - m_freelist.emplace_back(0, m_pool_size); - } - - void *allocate(size_t req) { - const size_t alignment = (1 << m_align_bit); - - if (req > m_pool_size) { - return nullptr; - } - if (req < m_min_alloc || req > m_max_alloc) { - return nullptr; - } - - std::lock_guard lock(m_mutex); - - auto best_fit = m_freelist.end(); - - for (auto i = m_freelist.begin(); i != m_freelist.end(); ++i) { - // If we have a perfect fit, use it immediately - if (i->second == req && (i->first % alignment) == 0) { - const size_t offset = i->first; - m_freelist.erase(i); - clear_mem(m_pool + offset, req); - - BOOST_ASSERT_MSG((reinterpret_cast(m_pool) + offset) % alignment == 0, - "Returning correctly aligned pointer"); - - return m_pool + offset; - } - - if (((best_fit == m_freelist.end()) || (best_fit->second > i->second)) && - (i->second >= (req + detail::padding_for_alignment(i->first, alignment)))) { - best_fit = i; - } - } - - if (best_fit != m_freelist.end()) { - const size_t offset = best_fit->first; - - const size_t alignment_padding = detail::padding_for_alignment(offset, alignment); - - best_fit->first += req + alignment_padding; - best_fit->second -= req + alignment_padding; - - // Need to realign, split the block - if (alignment_padding) { - /* - If we used the entire block except for small piece used for - alignment at the beginning, so just update the entry already - in place (as it is in the correct location), rather than - deleting the empty range and inserting the new one in the - same location. - */ - if (best_fit->second == 0) { - best_fit->first = offset; - best_fit->second = alignment_padding; - } else { - m_freelist.insert(best_fit, std::make_pair(offset, alignment_padding)); - } - } - - clear_mem(m_pool + offset + alignment_padding, req); - - BOOST_ASSERT_MSG((reinterpret_cast(m_pool) + offset + alignment_padding) % alignment == - 0, - "Returning correctly aligned pointer"); - - return m_pool + offset + alignment_padding; - } - - return nullptr; - } - - bool deallocate(void *p, std::size_t n) BOOST_NOEXCEPT { - if (!detail::ptr_in_pool(m_pool, m_pool_size, p, n)) { - return false; - } - - std::memset(p, 0, n); - - std::lock_guard lock(m_mutex); - - const size_t start = static_cast(p) - m_pool; - - auto comp = [](std::pair x, std::pair y) { return x.first < y.first; }; - - auto i = std::lower_bound(m_freelist.begin(), m_freelist.end(), std::make_pair(start, 0), comp); - - // try to merge with later block - if (i != m_freelist.end() && - - start + n == i->first) { - i->first = start; - i->second += n; - n = 0; - } - - // try to merge with previous block - if (i != m_freelist.begin()) { - auto prev = std::prev(i); - - if (prev->first + prev->second == start) { - if (n) { - prev->second += n; - n = 0; - } else { - // merge adjoining - prev->second += i->second; - m_freelist.erase(i); - } - } - } - - if (n != 0) { // no merge possible? - m_freelist.insert(i, std::make_pair(start, n)); - } - - return true; - } - - memory_pool(const memory_pool &) = delete; - - memory_pool &operator=(const memory_pool &) = delete; - - private: - const size_t m_page_size = 0; - const size_t m_min_alloc = 0; - const size_t m_max_alloc = 0; - const uint8_t m_align_bit = 0; - - std::mutex m_mutex; - - std::vector> m_freelist; - uint8_t *m_pool = nullptr; - size_t m_pool_size = 0; - }; - } // namespace crypto3 -} // namespace nil - -#endif \ No newline at end of file diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/secure_allocator.hpp b/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/secure_allocator.hpp deleted file mode 100644 index 7ce174cc4e..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/utilities/secure_allocator.hpp +++ /dev/null @@ -1,104 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_SECURE_ALLOCATOR_HPP -#define CRYPTO3_SECURE_ALLOCATOR_HPP - -#include - -namespace nil { - namespace crypto3 { - template - class secure_allocator { - public: - /* - * Assert exists to prevent someone from doing something that will - * probably crash anyway (like secure_vector where ~non_POD_t - * deletes a member pointer which was zeroed before it ran). - * MSVC in debug mode uses non-integral proxy types in container types - * like std::vector, thus we disable the check there. - */ -#if !defined(_ITERATOR_DEBUG_LEVEL) || _ITERATOR_DEBUG_LEVEL == 0 - static_assert(std::is_integral::value, "secure_allocator supports only integer types"); -#endif - - typedef T value_type; - typedef std::size_t size_type; - -#ifdef CRYPTO3_BUILD_COMPILER_IS_MSVC_2013 - secure_allocator() = default; - secure_allocator(const secure_allocator &) = default; - secure_allocator &operator=(const secure_allocator &) = default; - ~secure_allocator() = default; - - template - struct rebind { - typedef secure_allocator other; - }; - - void construct(value_type *mem, const value_type &value) { - std::_Construct(mem, value); - } - - void destroy(value_type *mem) { - std::_Destroy(mem); - } -#else - - secure_allocator() BOOST_NOEXCEPT = default; - - secure_allocator(const secure_allocator &) BOOST_NOEXCEPT = default; - - secure_allocator &operator=(const secure_allocator &) BOOST_NOEXCEPT = default; - - ~secure_allocator() BOOST_NOEXCEPT = default; - -#endif - - template - secure_allocator(const secure_allocator &) BOOST_NOEXCEPT { - } - - T *allocate(std::size_t n) { - return static_cast(allocate_memory(n, sizeof(T))); - } - - void deallocate(T *p, std::size_t n) { - deallocate_memory(p, n, sizeof(T)); - } - }; - - template - inline bool operator==(const secure_allocator &, const secure_allocator &) { - return true; - } - - template - inline bool operator!=(const secure_allocator &, const secure_allocator &) { - return false; - } - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_SECURE_ALLOCATOR_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/kasumi.hpp b/crypto3/libs/block/include/nil/crypto3/block/kasumi.hpp deleted file mode 100644 index c6f01eb96e..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/kasumi.hpp +++ /dev/null @@ -1,195 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_KASUMI_HPP -#define CRYPTO3_BLOCK_KASUMI_HPP - -#include -#include - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief Kasumi. A 64-bit cipher used in 3GPP mobile phone protocols. - * There is no reason to use it outside of this context. - * - * @ingroup block - */ - class kasumi { - protected: - typedef detail::kasumi_functions policy_type; - - constexpr static const std::size_t key_schedule_size = policy_type::key_schedule_size; - typedef typename policy_type::key_schedule_type key_schedule_type; - - public: - constexpr static const std::size_t rounds = policy_type::rounds; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t key_bits = policy_type::key_bits; - constexpr static const std::size_t key_words = policy_type::key_words; - typedef typename policy_type::key_type key_type; - - template - struct stream_processor { - struct params_type { - - constexpr static const std::size_t value_bits = ValueBits; - constexpr static const std::size_t length_bits = policy_type::word_bits * 2; - }; - - typedef block_stream_processor type; - }; - - typedef typename stream_endian::little_octet_big_bit endian_type; - - kasumi(const key_type &key) { - schedule_key(key_schedule, key); - } - - ~kasumi() { - key_schedule.fill(0); - } - - inline block_type encrypt(const block_type &plaintext) const { - return encrypt_block(plaintext, key_schedule); - } - - inline block_type decrypt(const block_type &ciphertext) const { - return decrypt_block(ciphertext, key_schedule); - } - - protected: - inline block_type encrypt_block(const block_type &plaintext, - const key_schedule_type &key_schedule) const { - word_type B0 = boost::endian::native_to_big(plaintext[0]); - word_type B1 = boost::endian::native_to_big(plaintext[1]); - word_type B2 = boost::endian::native_to_big(plaintext[2]); - word_type B3 = boost::endian::native_to_big(plaintext[3]); - - for (size_t j = 0; j != rounds; j += 2) { - const word_type *K = &key_schedule[8 * j]; - - word_type R = B1 ^ (policy_type::template rotl<1>(B0) & K[0]); - word_type L = B0 ^ (policy_type::template rotl<1>(R) | K[1]); - - L = policy_type::FI(L ^ K[2], K[3]) ^ R; - R = policy_type::FI(R ^ K[4], K[5]) ^ L; - L = policy_type::FI(L ^ K[6], K[7]) ^ R; - - R = B2 ^= R; - L = B3 ^= L; - - R = policy_type::FI(R ^ K[10], K[11]) ^ L; - L = policy_type::FI(L ^ K[12], K[13]) ^ R; - R = policy_type::FI(R ^ K[14], K[15]) ^ L; - - R ^= (policy_type::template rotl<1>(L) & K[8]); - L ^= (policy_type::template rotl<1>(R) | K[9]); - - B0 ^= L; - B1 ^= R; - } - - return {boost::endian::big_to_native(B0), boost::endian::big_to_native(B1), - boost::endian::big_to_native(B2), boost::endian::big_to_native(B3)}; - } - - inline block_type decrypt_block(const block_type &ciphertext, - const key_schedule_type &key_schedule) const { - word_type B0 = boost::endian::native_to_big(ciphertext[0]); - word_type B1 = boost::endian::native_to_big(ciphertext[1]); - word_type B2 = boost::endian::native_to_big(ciphertext[2]); - word_type B3 = boost::endian::native_to_big(ciphertext[3]); - - for (size_t j = 0; j != rounds; j += 2) { - const word_type *K = &key_schedule[8 * (6 - j)]; - - word_type L = B2, R = B3; - - L = policy_type::FI(L ^ K[10], K[11]) ^ R; - R = policy_type::FI(R ^ K[12], K[13]) ^ L; - L = policy_type::FI(L ^ K[14], K[15]) ^ R; - - L ^= (policy_type::template rotl<1>(R) & K[8]); - R ^= (policy_type::template rotl<1>(L) | K[9]); - - R = B0 ^= R; - L = B1 ^= L; - - L ^= (policy_type::template rotl<1>(R) & K[0]); - R ^= (policy_type::template rotl<1>(L) | K[1]); - - R = policy_type::FI(R ^ K[2], K[3]) ^ L; - L = policy_type::FI(L ^ K[4], K[5]) ^ R; - R = policy_type::FI(R ^ K[6], K[7]) ^ L; - - B2 ^= L; - B3 ^= R; - } - - return {boost::endian::big_to_native(B0), boost::endian::big_to_native(B1), - boost::endian::big_to_native(B2), boost::endian::big_to_native(B3)}; - } - - key_schedule_type key_schedule; - - void schedule_key(key_schedule_type &key_schedule, const key_type &key) { - std::array K = {0}; - for (size_t i = 0; i != rounds; ++i) { - K[i] = boost::endian::native_to_big(key[i]); - K[i + 8] = K[i] ^ policy_type::round_constants[i]; - } - - for (size_t i = 0; i != rounds; ++i) { - key_schedule[8 * i] = policy_type::template rotl<2>(K[(i + 0) % 8]); - key_schedule[8 * i + 1] = policy_type::template rotl<1>(K[(i + 2) % 8 + 8]); - key_schedule[8 * i + 2] = policy_type::template rotl<5>(K[(i + 1) % 8]); - key_schedule[8 * i + 3] = K[(i + 4) % 8 + 8]; - key_schedule[8 * i + 4] = policy_type::template rotl<8>(K[(i + 5) % 8]); - key_schedule[8 * i + 5] = K[(i + 3) % 8 + 8]; - key_schedule[8 * i + 6] = policy_type::template rotl<13>(K[(i + 6) % 8]); - key_schedule[8 * i + 7] = K[(i + 7) % 8 + 8]; - } - - K.fill(0); - } - }; - } // namespace block - } // namespace crypto3 -} // namespace nil -#endif diff --git a/crypto3/libs/block/include/nil/crypto3/block/md4.hpp b/crypto3/libs/block/include/nil/crypto3/block/md4.hpp deleted file mode 100644 index 141a1006b6..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/md4.hpp +++ /dev/null @@ -1,175 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_MD4_HPP -#define CRYPTO3_BLOCK_MD4_HPP - -#include - -#include -#include - -#ifdef CRYPTO3_BLOCK_SHOW_PROGRESS -#include -#endif - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief MD4 block cipher. Stands as a foundation for - * @ref nil::crypto3::hashes::md4 "MD4" hashes. - * - * @ingroup block - * - * Encrypt implemented directly from the RFC as found at - * http://www.faqs.org/rfcs/rfc1320.html - * - * Decrypt is a straight-forward inverse - * - * In MD4 terminology: - * - plaintext = AA, BB, CC, and DD - * - ciphertext = A, B, C, and D - * - key = M^(i) and X - */ - class md4 { - typedef detail::md4_policy policy_type; - - public: - constexpr static const std::size_t rounds = policy_type::rounds; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef policy_type::word_type word_type; - - constexpr static const std::size_t key_bits = policy_type::key_bits; - constexpr static const std::size_t key_words = policy_type::key_words; - typedef policy_type::key_type key_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef policy_type::block_type block_type; - - template - struct stream_processor { - struct params_type { - - constexpr static const std::size_t value_bits = ValueBits; - constexpr static const std::size_t length_bits = policy_type::word_bits * 2; - }; - - typedef block_stream_processor type; - }; - - typedef typename stream_endian::little_octet_big_bit endian_type; - - md4(const key_type &k) : key(k) { - } - - virtual ~md4() { - key.fill(0); - } - - inline block_type encrypt(const block_type &plaintext) const { - return encrypt_block(key, plaintext); - } - - inline block_type decrypt(const block_type &ciphertext) const { - return decrypt_block(key, ciphertext); - } - - private: - key_type key; - - inline static block_type encrypt_block(const key_type &key, const block_type &plaintext) { - // Initialize working variables with block - word_type a = plaintext[0], b = plaintext[1], c = plaintext[2], d = plaintext[3]; - - // Encipher block -#define CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(aa, bb, cc, dd, fun, k, s, val) \ - { \ - word_type T = aa + policy_type::fun(bb, cc, dd) + key[policy_type::key_indexes[k]] + val; \ - aa = policy_type::rotl(T); \ - } - for (unsigned t = 0; t < policy_type::rounds / 3; t += 4) { - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(a, b, c, d, ff, t + 0, 3, 0x00000000) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(d, a, b, c, ff, t + 1, 7, 0x00000000) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(c, d, a, b, ff, t + 2, 11, 0x00000000) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(b, c, d, a, ff, t + 3, 19, 0x00000000) - } - - for (unsigned t = 0; t < policy_type::rounds / 12; t += 1) { - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(a, b, c, d, gg, t + 0, 3, 0x5a827999) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(d, a, b, c, gg, t + 4, 5, 0x5a827999) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(c, d, a, b, gg, t + 8, 9, 0x5a827999) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(b, c, d, a, gg, t + 12, 13, 0x5a827999) - } - std::array t_step3 {{0, 2, 1, 3}}; - for (unsigned int &t : t_step3) { - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(a, b, c, d, hh, t + 0, 3, 0x6ed9eba1) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(d, a, b, c, hh, t + 8, 9, 0x6ed9eba1) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(c, d, a, b, hh, t + 4, 11, 0x6ed9eba1) - CRYPTO3_BLOCK_MD4_ENCRYPT_STEP(b, c, d, a, hh, t + 12, 15, 0x6ed9eba1) - } - - return {{a, b, c, d}}; - } - - inline static block_type decrypt_block(const key_type &key, const block_type &ciphertext) { - // Initialize working variables with block - word_type a = ciphertext[0], b = ciphertext[1], c = ciphertext[2], d = ciphertext[3]; - - // Decipher block -#define CRYPTO3_BLOCK_MD4_DECRYPT_STEP(aa, bb, cc, dd, fun, k, s, val) \ - { \ - word_type T = policy_type::rotr(aa); \ - aa = T - policy_type::fun(bb, cc, dd) - key[policy_type::key_indexes[k]] - val; \ - } - for (unsigned t = policy_type::rounds; t -= 4, t >= 2 * policy_type::rounds / 3;) { - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(b, c, d, a, hh, t + 3, 15, 0x6ed9eba1) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(c, d, a, b, hh, t + 2, 11, 0x6ed9eba1) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(d, a, b, c, hh, t + 1, 9, 0x6ed9eba1) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(a, b, c, d, hh, t + 0, 3, 0x6ed9eba1) - } - for (unsigned t = 2 * policy_type::rounds / 3; t -= 4, t >= policy_type::rounds / 3;) { - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(b, c, d, a, gg, t + 3, 13, 0x5a827999) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(c, d, a, b, gg, t + 2, 9, 0x5a827999) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(d, a, b, c, gg, t + 1, 5, 0x5a827999) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(a, b, c, d, gg, t + 0, 3, 0x5a827999) - } - for (unsigned t = policy_type::rounds / 3; t -= 4, t < policy_type::rounds / 3;) { - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(b, c, d, a, ff, t + 3, 19, 0x00000000) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(c, d, a, b, ff, t + 2, 11, 0x00000000) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(d, a, b, c, ff, t + 1, 7, 0x00000000) - CRYPTO3_BLOCK_MD4_DECRYPT_STEP(a, b, c, d, ff, t + 0, 3, 0x00000000) - } - - return {{a, b, c, d}}; - } - }; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHERS_MD4_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/md5.hpp b/crypto3/libs/block/include/nil/crypto3/block/md5.hpp deleted file mode 100644 index 03311acf5e..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/md5.hpp +++ /dev/null @@ -1,186 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_MD5_HPP -#define CRYPTO3_BLOCK_MD5_HPP - -#include - -#include -#include - -#ifdef CRYPTO3_BLOCK_SHOW_PROGRESS -#include -#endif - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief MD5 block cipher. Stands as a foundation for - * @ref nil::crypto3::hashes::md5 "MD5" hashes. - * - * @ingroup block - * - * Encrypt implemented directly from the RFC as found at - * http://www.faqs.org/rfcs/rfc1321.html - * - * Decrypt is a straight-forward inverse - * - * In MD5 terminology: - * - plaintext = AA, BB, CC, and DD - * - ciphertext = A, B, C, and D - * - key = M^(i) and X - */ - class md5 { - typedef detail::md5_policy policy_type; - - public: - constexpr static const std::size_t rounds = policy_type::rounds; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef policy_type::word_type word_type; - - constexpr static const std::size_t key_bits = policy_type::key_bits; - constexpr static const std::size_t key_words = policy_type::key_words; - typedef policy_type::key_type key_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef policy_type::block_type block_type; - - template - struct stream_processor { - struct params_type { - - constexpr static const std::size_t value_bits = ValueBits; - constexpr static const std::size_t length_bits = policy_type::word_bits * 2; - }; - - typedef block_stream_processor type; - }; - - typedef typename stream_endian::little_octet_big_bit endian_type; - - md5(const key_type &k) : key(k) { - } - - virtual ~md5() { - key.fill(0); - } - - inline block_type encrypt(const block_type &plaintext) const { - return encrypt_block(key, plaintext); - } - - inline block_type decrypt(const block_type &ciphertext) const { - return decrypt_block(key, ciphertext); - } - - protected: - key_type key; - - static inline block_type encrypt_block(key_type const &key, block_type const &plaintext) { - // Initialize working variables with block - word_type a = plaintext[0], b = plaintext[1], c = plaintext[2], d = plaintext[3]; - - // Encipher block -#define CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(aa, bb, cc, dd, fun, k, s, i) \ - { \ - word_type T = \ - aa + policy_type::fun(bb, cc, dd) + key[policy_type::key_indexes[k]] + policy_type::constants[i - 1]; \ - aa = bb + policy_type::rotl(T); \ - } - for (unsigned t = 0; t < policy_type::rounds / 4; t += 4) { - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(a, b, c, d, ff, t + 0, 7, t + 1) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(d, a, b, c, ff, t + 1, 12, t + 2) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(c, d, a, b, ff, t + 2, 17, t + 3) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(b, c, d, a, ff, t + 3, 22, t + 4) - } - for (unsigned t = policy_type::rounds / 4; t < policy_type::rounds / 2; t += 4) { - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(a, b, c, d, gg, t + 0, 5, t + 1) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(d, a, b, c, gg, t + 1, 9, t + 2) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(c, d, a, b, gg, t + 2, 14, t + 3) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(b, c, d, a, gg, t + 3, 20, t + 4) - } - for (unsigned t = policy_type::rounds / 2; t < 3 * policy_type::rounds / 4; t += 4) { - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(a, b, c, d, hh, t + 0, 4, t + 1) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(d, a, b, c, hh, t + 1, 11, t + 2) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(c, d, a, b, hh, t + 2, 16, t + 3) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(b, c, d, a, hh, t + 3, 23, t + 4) - } - for (unsigned t = 3 * policy_type::rounds / 4; t < policy_type::rounds; t += 4) { - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(a, b, c, d, ii, t + 0, 6, t + 1) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(d, a, b, c, ii, t + 1, 10, t + 2) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(c, d, a, b, ii, t + 2, 15, t + 3) - CRYPTO3_BLOCK_MD5_ENCRYPT_STEP(b, c, d, a, ii, t + 3, 21, t + 4) - } - - return {{a, b, c, d}}; - } - - static inline block_type decrypt_block(key_type const &key, const block_type &ciphertext) { - // Initialize working variables with block - word_type a = ciphertext[0], b = ciphertext[1], c = ciphertext[2], d = ciphertext[3]; - - // Decipher block -#define CRYPTO3_BLOCK_MD5_DECRYPT_STEP(aa, bb, cc, dd, fun, k, s, i) \ - { \ - word_type T = policy_type::rotr(aa - bb); \ - aa = T - policy_type::fun(bb, cc, dd) - key[policy_type::key_indexes[k]] - policy_type::constants[i - 1]; \ - } - for (unsigned t = policy_type::rounds; t -= 4, t >= 3 * policy_type::rounds / 4;) { - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(b, c, d, a, ii, t + 3, 21, t + 4) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(c, d, a, b, ii, t + 2, 15, t + 3) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(d, a, b, c, ii, t + 1, 10, t + 2) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(a, b, c, d, ii, t + 0, 6, t + 1) - } - for (unsigned t = 3 * policy_type::rounds / 4; t -= 4, t >= policy_type::rounds / 2;) { - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(b, c, d, a, hh, t + 3, 23, t + 4) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(c, d, a, b, hh, t + 2, 16, t + 3) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(d, a, b, c, hh, t + 1, 11, t + 2) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(a, b, c, d, hh, t + 0, 4, t + 1) - } - for (unsigned t = policy_type::rounds / 2; t -= 4, t >= policy_type::rounds / 4;) { - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(b, c, d, a, gg, t + 3, 20, t + 4) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(c, d, a, b, gg, t + 2, 14, t + 3) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(d, a, b, c, gg, t + 1, 9, t + 2) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(a, b, c, d, gg, t + 0, 5, t + 1) - } - for (unsigned t = policy_type::rounds / 4; t -= 4, t < policy_type::rounds / 4;) { - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(b, c, d, a, ff, t + 3, 22, t + 4) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(c, d, a, b, ff, t + 2, 17, t + 3) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(d, a, b, c, ff, t + 1, 12, t + 2) - CRYPTO3_BLOCK_MD5_DECRYPT_STEP(a, b, c, d, ff, t + 0, 7, t + 1) - } - - return {{a, b, c, d}}; - } - }; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHERS_MD5_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/rijndael.hpp b/crypto3/libs/block/include/nil/crypto3/block/rijndael.hpp deleted file mode 100644 index fa75c9ac26..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/rijndael.hpp +++ /dev/null @@ -1,197 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_RIJNDAEL_HPP -#define CRYPTO3_BLOCK_RIJNDAEL_HPP - -#include - -#include -#include - -#include -#include - -#if defined(CRYPTO3_HAS_RIJNDAEL_NI) - -#include - -#elif defined(CRYPTO3_HAS_RIJNDAEL_SSSE3) || \ - ((BOOST_ARCH_X86_32 || BOOST_ARCH_X86_64) && BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_SSSE3_VERSION) - -#include - -// #elif defined(CRYPTO3_HAS_RIJNDAEL_ARMV8) || BOOST_ARCH_ARM - -// #include - -#elif defined(CRYPTO3_HAS_RIJNDAEL_POWER8) - -#include - -#endif - -#include - -namespace nil { - namespace crypto3 { - namespace block { - - /*! - * @brief Rijndael. AES competition winner. - * - * @ingroup block - * - * Generic Rijndael cipher implementation. Contains AES-standardized - * cipher modifications with timing-attack and cache-line leaking - * attack preventing mechanisms. Optimized for particular architecture - * used. - * AES-standartized version comes in three variants, AES-128, AES-192, - * and AES-256. - * - * The standard 128-bit block cipher. Many modern platforms offer hardware - * acceleration. However, on platforms without hardware support, AES - * implementations typically are vulnerable to side channel attacks. For x86 - * systems with SSSE3 but without AES-NI, crypto3 has an implementation which avoids - * known side channels. - * - * This implementation is intended to be based on table lookups which - * are known to be vulnerable to timing and cache based side channel - * attacks. Some countermeasures are used which may be helpful in some - * situations: - * - * - Only a single 256-word T-table is used, with rotations applied. - * Most implementations use 4 T-tables which leaks much more - * information via cache usage. - * - * - The TE and TD tables are computed at runtime to avoid flush+reload - * attacks using clflush. As different processes will not share the - * same underlying table data, an attacker can't manipulate another - * processes cache lines via their shared reference to the library - * read only segment. - * - * - Each cache line of the lookup tables is accessed at the beginning - * of each call to encrypt or decrypt. (See the Z variable below) - * - * If available SSSE3 or AES-NI are used instead of this version, as both - * are faster and immune to side channel attacks. - * - * Some AES cache timing papers for reference: - * - * [Software mitigations to hedge AES against cache-based software side channel - * vulnerabilities](https://eprint.iacr.org/2006/052.pdf) - * - * [Cache Games - Bringing Access-Based Cache Attacks on AES to - * Practice](http://www.ieee-security.org/TC/SP2011/PAPERS/2011/paper031.pdf) - * - * [Cache-Collision Timing Attacks Against AES. Bonneau, - * Mironov](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.88.4753) - * - * @tparam KeyBits Key length used in bits. Available values are: 128, 192, 256 - * @tparam BlockBits Block length used in bits. Available values are: 128, 192, 256 - */ - template - class rijndael { - - BOOST_STATIC_ASSERT(KeyBits >= 128 && KeyBits <= 256 && KeyBits % 32 == 0); - BOOST_STATIC_ASSERT(BlockBits >= 128 && BlockBits <= 256 && BlockBits % 32 == 0); - - constexpr static const std::size_t version = KeyBits; - typedef detail::rijndael_policy policy_type; - - typedef - typename std::conditional, -#elif defined(CRYPTO3_HAS_RIJNDAEL_SSSE3) && \ - ((BOOST_ARCH_X86_32 || BOOST_ARCH_X86_64) && BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_SSSE3_VERSION) - detail::rijndael_ssse3_impl, -// #elif defined(CRYPTO3_HAS_RIJNDAEL_ARMV8) || BOOST_ARCH_ARM >= BOOST_VERSION_NUMBER(8, 0, 0) -// detail::rijndael_armv8_impl, -#elif defined(CRYPTO3_HAS_RIJNDAEL_POWER8) || (BOOST_ARCH_PPC >= BOOST_VERSION_NUMBER(8, 0, 0) || BOOST_ARCH_PPC_64) - detail::rijndael_power8_impl, -#else - detail::rijndael_impl, -#endif - detail::rijndael_impl>::type impl_type; - - constexpr static const std::size_t key_schedule_words = policy_type::key_schedule_words; - constexpr static const std::size_t key_schedule_bytes = policy_type::key_schedule_bytes; - typedef typename policy_type::key_schedule_type key_schedule_type; - - public: - constexpr static const std::size_t word_bits = policy_type::word_bits; - constexpr static const std::size_t word_bytes = policy_type::word_bytes; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t key_bits = policy_type::key_bits; - constexpr static const std::size_t key_words = policy_type::key_words; - // typedef typename policy_type::key_schedule_word_type key_schedule_word_type; - typedef typename policy_type::key_type key_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::uint8_t rounds = policy_type::rounds; - typedef typename policy_type::round_constants_type round_constants_type; - - template - struct stream_processor { - struct params_type { - constexpr static const std::size_t value_bits = ValueBits; - constexpr static const std::size_t length_bits = policy_type::word_bits * 2; - }; - - typedef block_stream_processor type; - }; - - typedef typename stream_endian::little_octet_big_bit endian_type; - - rijndael(const key_type &key) : encryption_key({0}), decryption_key({0}) { - impl_type::schedule_key(key, encryption_key, decryption_key); - } - - virtual ~rijndael() { - encryption_key.fill(0); - decryption_key.fill(0); - } - - inline block_type encrypt(const block_type &plaintext) const { - return impl_type::encrypt_block(plaintext, encryption_key); - } - - inline block_type decrypt(const block_type &plaintext) const { - return impl_type::decrypt_block(plaintext, decryption_key); - } - - protected: - key_schedule_type encryption_key, decryption_key; - }; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif diff --git a/crypto3/libs/block/include/nil/crypto3/block/shacal.hpp b/crypto3/libs/block/include/nil/crypto3/block/shacal.hpp deleted file mode 100644 index 065117b16c..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/shacal.hpp +++ /dev/null @@ -1,84 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_SHACAL_HPP -#define CRYPTO3_BLOCK_SHACAL_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief Shacal. Merkle-Damgård construction foundation for - * @ref nil::crypto3::hashes::sha "SHA" hashes. - * - * @ingroup block - * - * Implemented directly from the SHA standard as found at - * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf - * - * The original FIPS-180 seems to be gone, but FIPS 180-1 - * (http://www.itl.nist.gov/fipspubs/fip180-1.htm) says the onl - * in SHA-1 from SHA(-0) is the rotation in the key scheduling. - * - * In SHA terminology: - * - plaintext = H^(i-1) - * - ciphertext = H^(i) - * - key = M^(i) - * - schedule = W - */ - class shacal : public basic_shacal { - public: - shacal(const key_type &k) : basic_shacal(build_schedule(k)) { - } - - shacal(schedule_type s) : basic_shacal((prepare_schedule(s), s)) { - } - - private: - static schedule_type build_schedule(const key_type &key) { - // Copy key into beginning of round_constants_words - schedule_type schedule; - for (unsigned t = 0; t < key_words; ++t) { - schedule[t] = key[t]; - } - prepare_schedule(schedule); - return schedule; - } - - static void prepare_schedule(schedule_type &schedule) { - for (unsigned t = key_words; t < rounds; ++t) { - schedule[t] = schedule[t - 3] ^ schedule[t - 8] ^ schedule[t - 14] ^ schedule[t - 16]; - } - } - }; - - typedef shacal shacal0; - - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHERS_SHACAL_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/shacal1.hpp b/crypto3/libs/block/include/nil/crypto3/block/shacal1.hpp deleted file mode 100644 index 2d81faa49d..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/block/shacal1.hpp +++ /dev/null @@ -1,78 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLOCK_SHACAL1_HPP -#define CRYPTO3_BLOCK_SHACAL1_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief Shacal1. Merkle-Damgård construction foundation for - * @ref nil::crypto3::hashes::sha1 "SHA1" hashes. - * - * @ingroup block - * - * Implemented directly from the SHA standard as found at - * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf - * - * In SHA terminology: - * - plaintext = H^(i-1) - * - ciphertext = H^(i) - * - key = M^(i) - * - schedule = W - */ - class shacal1 : public basic_shacal { - public: - shacal1(const key_type &k) : basic_shacal(build_schedule(k)) { - } - - shacal1(schedule_type s) : basic_shacal((prepare_schedule(s), s)) { - } - - private: - static schedule_type build_schedule(key_type const &key) { - // Copy key into beginning of round_constants_words - schedule_type schedule; - for (unsigned t = 0; t < key_words; ++t) { - schedule[t] = key[t]; - } - prepare_schedule(schedule); - return schedule; - } - - static void prepare_schedule(schedule_type &schedule) { - for (unsigned t = key_words; t < rounds; ++t) { - schedule[t] = schedule[t - 3] ^ schedule[t - 8] ^ schedule[t - 14] ^ schedule[t - 16]; - schedule[t] = policy_type::rotl<1>(schedule[t]); - } - } - }; - } // namespace block - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_CIPHERS_SHACAL1_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/detail/assert.hpp b/crypto3/libs/block/include/nil/crypto3/detail/assert.hpp deleted file mode 100644 index 6eabed6c53..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/detail/assert.hpp +++ /dev/null @@ -1,90 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_DETAIL_ASSERTS_HPP -#define CRYPTO3_DETAIL_ASSERTS_HPP - -#include -#include - -#define UNREACHABLE(msg) ::nil::crypto3::unreachable((msg), __FILE__, __LINE__) - -#define ASSERT(expr) ::nil::crypto3::assert_check((expr), #expr, __FILE__, __LINE__) - -#define ASSERT_MSG(expr, msg) ::nil::crypto3::assert_check((expr), #expr, __FILE__, __LINE__, (msg)) - -#define TODO(msg) ::nil::crypto3::todo((msg), __FILE__, __LINE__) - -#define TODO_WITH_LINK(msg, link) ::nil::crypto3::todo_with_link((msg), (link), __FILE__, __LINE__) - -namespace nil { - namespace crypto3 { - [[noreturn]] void abort_process() { - std::abort(); - } - - [[noreturn]] void unreachable(const char *msg, const char *filename, unsigned line) { - std::cerr << "UNREACHABLE at " << filename << ":" << line << std::endl; - std::cerr <<'\t' << msg << std::endl; - abort_process(); - } - - [[noreturn]] void unreachable(const std::string &msg, const char *filename, unsigned line) { - unreachable(msg.c_str(),filename, line); - } - - void assert_check(bool expr, const char *expr_str, const char *filename, unsigned line, const char *msg = "") { - if (!expr) { - std::cerr << "Assertion failed at " << filename << ":" << line << ":" << std::endl; - std::cerr << '\t' << expr_str; - if (strlen(msg) != 0) { - std::cerr << " -> " << msg; - } - std::cerr << std::endl; - abort_process(); - } - } - - [[noreturn]] void todo(const char *msg, const char *filename, unsigned line) { - std::cerr << "NOT YET IMPLEMENTED at " << filename << ":" << line << std::endl; - std::cerr << '\t' << msg << std::endl; - abort_process(); - } - - [[noreturn]] void todo_with_link(const char *msg, const char *link, const char *filename, unsigned line) { - std::string new_msg(msg); - new_msg += "\n\tTracking issue: "; - new_msg += link; - todo(new_msg.c_str(), filename, line); - } - - [[noreturn]] void todo_with_link(const std::string &msg, const std::string &link, const char *filename, unsigned line) { - todo_with_link(msg.c_str(), link.c_str(), filename, line); - } - } -} - -#endif // CRYPTO3_DETAIL_ASSERTS_HPP - diff --git a/crypto3/libs/block/include/nil/crypto3/detail/config.hpp b/crypto3/libs/block/include/nil/crypto3/detail/config.hpp deleted file mode 100644 index 538736a938..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/detail/config.hpp +++ /dev/null @@ -1,57 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// -// @file This file is used to define various compiler-dependent attributes macros -// absent in Boost.Config until following PRs are accepted: -// https://github.com/boostorg/config/pull/338, -// https://github.com/boostorg/config/pull/339 -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_DETAIL_CONFIG_HPP -#define CRYPTO3_DETAIL_CONFIG_HPP - -#include - -#ifdef BOOST_CLANG -#if (__clang_major__ >= 4 || (__clang_major__ >= 3 && __clang_minor__ >= 8)) -#define BOOST_ATTRIBUTE_TARGET(isa) __attribute__((target(isa))) -#endif - -#if defined(__clang__) && !defined(_MSC_VER) -#define BOOST_ATTRIBUTE_MALLOC_FUNCTION __attribute__((malloc)) -#endif -#endif - -#ifdef BOOST_GCC -#if (BOOST_GCC_VERSION >= 40800) -#define BOOST_ATTRIBUTE_TARGET(isa) __attribute__((target(isa))) -#endif - -#define BOOST_ATTRIBUTE_MALLOC_FUNCTION __attribute__((malloc)) -#endif - -#if defined(_MSC_VER) -#define BOOST_ATTRIBUTE_MALLOC_FUNCTION __declspec(restrict) -#endif - -#endif // CRYPTO3_PREDEF_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/detail/inline_variable.hpp b/crypto3/libs/block/include/nil/crypto3/detail/inline_variable.hpp deleted file mode 100644 index 1c36127aa7..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/detail/inline_variable.hpp +++ /dev/null @@ -1,60 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_INLINE_VARIABLE_HPP -#define CRYPTO3_INLINE_VARIABLE_HPP - -#define CRYPTO3_CXX_STD_14 201402L -#define CRYPTO3_CXX_STD_17 201703L - -#if defined(_MSVC_LANG) && _MSVC_LANG > __cplusplus // Older clangs define _MSVC_LANG < __cplusplus -#define CRYPTO3_CXX_VER _MSVC_LANG -#else -#define CRYPTO3_CXX_VER __cplusplus -#endif - -#ifndef CRYPTO3_CXX17_INLINE_VARIABLES -#ifdef __cpp_inline_variables -#define CRYPTO3_CXX17_INLINE_VARIABLES __cpp_inline_variables -#else -#define CRYPTO3_CXX17_INLINE_VARIABLES (CRYPTO3_CXX_VER >= CRYPTO3_CXX_STD_17) -#endif -#endif - -#ifdef CRYPTO3_CXX17_INLINE_VARIABLES -#define CRYPTO3_INLINE_VARIABLE(TYPE, NAME, VALUE) \ - constexpr static inline TYPE NAME() { \ - return TYPE VALUE; \ - } -#else -#define CRYPTO3_INLINE_VARIABLE(TYPE, NAME, VALUE) \ - struct NAME { \ - inline TYPE const &operator()() const { \ - static TYPE const v VALUE; \ - return v; \ - } \ - }; -#endif - -#endif // CRYPTO3_INLINE_VARIABLE_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/detail/make_array.hpp b/crypto3/libs/block/include/nil/crypto3/detail/make_array.hpp deleted file mode 100644 index cd01123eca..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/detail/make_array.hpp +++ /dev/null @@ -1,75 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MAKE_ARRAY_HPP -#define CRYPTO3_MAKE_ARRAY_HPP - -#include -#include - -namespace nil { - namespace crypto3 { - namespace detail { - template - struct indices { - using next = indices; - }; - template - struct build_indices { - using type = typename build_indices::type::next; - }; - template<> - struct build_indices<0> { - using type = indices<>; - }; - template - using BuildIndices = typename build_indices::type; - - template - using ValueType = typename std::iterator_traits::value_type; - - // internal overload with indices tag - - template, sizeof...(I)>> - - Array make_array(InputIterator first, indices) { - return Array {{(void(I), *first++)...}}; - } - } // namespace detail - - // externally visible interface - template - std::array, N> make_array(RandomAccessIterator first, - RandomAccessIterator last) { - // last is not relevant if we're assuming the size is N - // I'll assert it is correct anyway - assert(last - first == N); - return make_array(first, detail::BuildIndices {}); - } - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_MAKE_ARRAY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/detail/pack_numeric.hpp b/crypto3/libs/block/include/nil/crypto3/detail/pack_numeric.hpp deleted file mode 100644 index 5a0051241b..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/detail/pack_numeric.hpp +++ /dev/null @@ -1,62 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_PACK_NUMERIC_HPP -#define CRYPTO3_PACK_NUMERIC_HPP - -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace detail { - using namespace nil::crypto3::multiprecision; - - template - inline void pack(InputIterator first, InputIterator last, number &out) { - import_bits(out, first, last); - BOOST_ASSERT(msb(out) == OutValueBits); - } - - template - inline void pack(const InputType &in, number &out) { - import_bits(out, in.begin(), in.end()); - BOOST_ASSERT(msb(out) == OutValueBits); - } - - template - inline void pack(const number &in, OutputType &out) { - export_bits(in, out); - BOOST_ASSERT(msb(out) == OutValueBits); - } - } // namespace detail - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_PACK_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/detail/primes.hpp b/crypto3/libs/block/include/nil/crypto3/detail/primes.hpp deleted file mode 100644 index 1080b481ac..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/detail/primes.hpp +++ /dev/null @@ -1,94 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_DETAIL_PRIMES_HPP -#define CRYPTO3_DETAIL_PRIMES_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace detail { - - template - struct all_ones { - typedef typename boost::uint_t::least type; - static type const value = (all_ones::value << 1) | 1; - }; - template<> - struct all_ones<0> { - typedef boost::uint_t<0>::least type; - static type const value = 0; - }; - - template - struct largest_prime; - -#define CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(B, D) \ - template<> \ - struct largest_prime { \ - constexpr static boost::uint_t::least const value = all_ones::value - D; \ - }; \ - constexpr boost::uint_t::least const largest_prime::value; - - // http://primes.utm.edu/lists/2small/0bit.html or - // http://www.research.att.com/~njas/sequences/A013603 - // Though those offets are from 2**b; This code is offsets from 2**b-1 - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(2, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(3, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(4, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(5, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(6, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(7, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(8, 4); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(9, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(10, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(11, 8); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(12, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(13, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(14, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(15, 18); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(16, 14); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(17, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(18, 4); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(19, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(20, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(21, 8); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(22, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(23, 14); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(24, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(25, 38); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(26, 4); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(27, 38); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(28, 56); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(29, 2); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(30, 34); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(31, 0); - CRYPTO3_HASH_DEFINE_LARGEST_PRIME_BY_OFFSET(32, 4); - - } // namespace detail - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_PRIMES_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/detail/type_traits.hpp b/crypto3/libs/block/include/nil/crypto3/detail/type_traits.hpp deleted file mode 100644 index 67912ee4da..0000000000 --- a/crypto3/libs/block/include/nil/crypto3/detail/type_traits.hpp +++ /dev/null @@ -1,328 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_TYPE_TRAITS_HPP -#define CRYPTO3_TYPE_TRAITS_HPP - -#define GENERATE_HAS_MEMBER_TYPE(Type) \ - template \ - class HasMemberType_##Type { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMemberType_##Type::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - struct Type { }; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(typename U::Type *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##Type : public std::integral_constant::RESULT> { }; - -#define GENERATE_HAS_MEMBER(member) \ - template \ - class HasMember_##member { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMember_##member::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - int member; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(decltype(U::member) *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##member : public std::integral_constant::RESULT> { }; - -#define GENERATE_HAS_MEMBER_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_CONST_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -namespace nil { - namespace crypto3 { - namespace detail { - GENERATE_HAS_MEMBER_TYPE(iterator) - GENERATE_HAS_MEMBER_TYPE(const_iterator) - - GENERATE_HAS_MEMBER_TYPE(encoded_value_type) - GENERATE_HAS_MEMBER_TYPE(encoded_block_type) - GENERATE_HAS_MEMBER_TYPE(decoded_value_type) - GENERATE_HAS_MEMBER_TYPE(decoded_block_type) - - GENERATE_HAS_MEMBER_TYPE(block_type) - GENERATE_HAS_MEMBER_TYPE(digest_type) - GENERATE_HAS_MEMBER_TYPE(key_type) - GENERATE_HAS_MEMBER_TYPE(key_schedule_type) - GENERATE_HAS_MEMBER_TYPE(word_type) - - GENERATE_HAS_MEMBER(encoded_value_bits) - GENERATE_HAS_MEMBER(encoded_block_bits) - GENERATE_HAS_MEMBER(decoded_value_bits) - GENERATE_HAS_MEMBER(decoded_block_bits) - - GENERATE_HAS_MEMBER(block_bits) - GENERATE_HAS_MEMBER(digest_bits) - GENERATE_HAS_MEMBER(key_bits) - GENERATE_HAS_MEMBER(min_key_bits) - GENERATE_HAS_MEMBER(max_key_bits) - GENERATE_HAS_MEMBER(key_schedule_bits) - GENERATE_HAS_MEMBER(word_bits) - - GENERATE_HAS_MEMBER(rounds) - - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(begin, const_iterator) - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(end, const_iterator) - - GENERATE_HAS_MEMBER_RETURN_FUNCTION(encode, encoded_block_type); - GENERATE_HAS_MEMBER_RETURN_FUNCTION(decode, decoded_block_type); - - GENERATE_HAS_MEMBER_RETURN_FUNCTION(encrypt, block_type); - GENERATE_HAS_MEMBER_RETURN_FUNCTION(decrypt, block_type); - - GENERATE_HAS_MEMBER_FUNCTION(generate) - GENERATE_HAS_MEMBER_CONST_FUNCTION(check) - - template - struct is_iterator { - static char test(...); - - template::difference_type, - typename = typename std::iterator_traits::pointer, - typename = typename std::iterator_traits::reference, - typename = typename std::iterator_traits::value_type, - typename = typename std::iterator_traits::iterator_category> - static long test(U &&); - - constexpr static bool value = std::is_same())), long>::value; - }; - - template - struct is_range { - static const bool value = has_begin::value && has_end::value; - }; - - template - struct is_container { - static const bool value = - has_const_iterator::value && has_begin::value && has_end::value; - }; - - template - struct is_codec { - static const bool value = has_encoded_value_type::value && has_encoded_value_bits::value && - has_decoded_value_type::value && has_decoded_value_bits::value && - has_encoded_block_type::value && has_encoded_block_bits::value && - has_decoded_block_type::value && has_decoded_block_bits::value && - has_encode::value && has_decode::value; - typedef T type; - }; - - template - struct is_block_cipher { - static const bool value = has_word_type::value && has_word_bits::value && - has_block_type::value && has_block_bits::value && - has_key_type::value && has_key_bits::value && has_rounds::value && - has_encrypt::value && has_decrypt::value; - typedef T type; - }; - - template - struct is_hash { - private: - typedef char one; - typedef struct { - char array[2]; - } two; - - template - static one test_construction_type(typename C::construction::type *); - - template - static two test_construction_type(...); - - template - static one test_construction_params(typename C::construction::params_type *); - - template - static two test_construction_params(...); - - public: - static const bool value = has_digest_type::value && has_digest_bits::value && - sizeof(test_construction_type(0)) == sizeof(one) && - sizeof(test_construction_params(0)) == sizeof(one); - typedef T type; - }; - - template - struct is_mac { - static const bool value = has_digest_type::value && has_digest_bits::value && - has_block_type::value && has_block_bits::value && - has_key_type::value && has_key_bits::value; - typedef T type; - }; - - template - struct is_kdf { - static const bool value = has_digest_type::value && has_digest_bits::value && - has_key_type::value && has_max_key_bits::value && - has_min_key_bits::value; - typedef T type; - }; - - template - struct is_passhash { - static const bool value = has_generate::value && has_check::value; - typedef T type; - }; - } // namespace detail - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_TYPE_TRAITS_HPP \ No newline at end of file diff --git a/crypto3/libs/block/test/CMakeLists.txt b/crypto3/libs/block/test/CMakeLists.txt deleted file mode 100644 index 25b9948d43..0000000000 --- a/crypto3/libs/block/test/CMakeLists.txt +++ /dev/null @@ -1,43 +0,0 @@ -#---------------------------------------------------------------------------# -# Copyright (c) 2018-2020 Mikhail Komarov -# -# Distributed under the Boost Software License, Version 1.0 -# See accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt -#---------------------------------------------------------------------------# - -cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} - Boost::unit_test_framework) - -macro(define_block_cipher_test name) - set(test_name "block_${name}_test") - - cm_test(NAME ${test_name} SOURCES ${name}.cpp) - - target_include_directories(${test_name} PRIVATE - "$" - "$" - - ${Boost_INCLUDE_DIRS}) - - if(NOT CMAKE_CXX_STANDARD) - set_target_properties(${test_name} PROPERTIES CXX_STANDARD 17) - endif() - - string(CONCAT TEST_DATA ${CMAKE_CURRENT_SOURCE_DIR} "/data/" "${name}" ".json") - target_compile_definitions(${test_name} PRIVATE TEST_DATA="${TEST_DATA}") -endmacro() - -set(TESTS_NAMES - "injector" - "kasumi" - "md4" - "md5" - "pack" - "rijndael" - "shacal" - "shacal2") - -foreach(TEST_NAME ${TESTS_NAMES}) - define_block_cipher_test(${TEST_NAME}) -endforeach() diff --git a/crypto3/libs/block/test/data/rijndael.json b/crypto3/libs/block/test/data/rijndael.json deleted file mode 100644 index 1a33067231..0000000000 --- a/crypto3/libs/block/test/data/rijndael.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "key_128_block_128": - { - "00112233445566778899aabbccddeeff": - { - "000102030405060708090a0b0c0d0e0f": "69c4e0d86a7b0430d8cdb78070b4c55a" - } - }, - - "key_160_block_128": - { - "3243f6a8885a308d313198a2e0370734": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160": "231d844639b31b412211cfe93712b880" - } - }, - - "key_192_block_128": - { - "00112233445566778899aabbccddeeff": - { - "000102030405060708090a0b0c0d0e0f1011121314151617": "dda97ca4864cdfe06eaf70a0ec0d7191" - } - }, - - "key_224_block_128": - { - "3243f6a8885a308d313198a2e0370734": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90": "8faa8fe4dee9eb17caa4797502fc9d3f" - } - }, - - "key_256_block_128": - { - "00112233445566778899aabbccddeeff": - { - "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f": "8ea2b7ca516745bfeafc49904b496089" - } - }, - - "key_128_block_160": - { - "3243f6a8885a308d313198a2e03707344a409382": - { - "2b7e151628aed2a6abf7158809cf4f3c": "16e73aec921314c29df905432bc8968ab64b1f51" - } - }, - - "key_160_block_160": - { - "3243f6a8885a308d313198a2e03707344a409382": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160": "0553eb691670dd8a5a5b5addf1aa7450f7a0e587" - } - }, - - "key_192_block_160": - { - "3243f6a8885a308d313198a2e03707344a409382": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5": "73cd6f3423036790463aa9e19cfcde894ea16623" - } - }, - - "key_224_block_160": - { - "3243f6a8885a308d313198a2e03707344a409382": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90": "601b5dcd1cf4ece954c740445340bf0afdc048df" - } - }, - - "key_256_block_160": - { - "3243f6a8885a308d313198a2e03707344a409382": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe": - "579e930b36c1529aa3e86628bacfe146942882cf" - } - }, - - "key_128_block_192": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d": - { - "2b7e151628aed2a6abf7158809cf4f3c": "b24d275489e82bb8f7375e0d5fcdb1f481757c538b65148a" - } - }, - - "key_160_block_192": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160": "738dae25620d3d3beff4a037a04290d73eb33521a63ea568" - } - }, - - "key_192_block_192": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5": "725ae43b5f3161de806a7c93e0bca93c967ec1ae1b71e1cf" - } - }, - - "key_224_block_192": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90": - "bbfc14180afbf6a36382a061843f0b63e769acdc98769130" - } - }, - - "key_256_block_192": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe": - "0ebacf199e3315c2e34b24fcc7c46ef4388aa475d66c194c" - } - }, - - "key_128_block_224": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9": - { - "2b7e151628aed2a6abf7158809cf4f3c": "b0a8f78f6b3c66213f792ffd2a61631f79331407a5e5c8d3793aceb1" - } - }, - - "key_160_block_224": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160": "08b99944edfce33a2acb131183ab0168446b2d15e958480010f545e3" - } - }, - - "key_192_block_224": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5": - "be4c597d8f7efe22a2f7e5b1938e2564d452a5bfe72399c7af1101e2" - } - }, - - "key_224_block_224": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90": - "ef529598ecbce297811b49bbed2c33bbe1241d6e1a833dbe119569e8" - } - }, - - "key_256_block_224": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa9": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe": - "02fafc200176ed05deb8edb82a3555b0b10d47a388dfd59cab2f6c11" - } - }, - - "key_128_block_256": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8": - { - "2b7e151628aed2a6abf7158809cf4f3c": "7d15479076b69a46ffb3b3beae97ad8313f622f67fedb487de9f06b9ed9c8f19" - } - }, - - "key_160_block_256": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160": - "514f93fb296b5ad16aa7df8b577abcbd484decacccc7fb1f18dc567309ceeffd" - } - }, - - "key_192_block_256": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da5": - "5d7101727bb25781bf6715b0e6955282b9610e23a43c2eb062699f0ebf5887b2" - } - }, - - "key_224_block_256": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d90": - "d56c5a63627432579e1dd308b2c8f157b40a4bfb56fea1377b25d3ed3d6dbf80" - } - }, - - "key_256_block_256": - { - "3243f6a8885a308d313198a2e03707344a4093822299f31d0082efa98ec4e6c8": - { - "2b7e151628aed2a6abf7158809cf4f3c762e7160f38b4da56a784d9045190cfe": - "a49406115dfb30a40418aafa4869b7c6a886ff31602a7dd19c889dc64f7e4e7a" - } - } -} diff --git a/crypto3/libs/block/test/injector.cpp b/crypto3/libs/block/test/injector.cpp deleted file mode 100644 index e67295a901..0000000000 --- a/crypto3/libs/block/test/injector.cpp +++ /dev/null @@ -1,308 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2024 Iosif (x-mass) -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE injector_test - -#include -#include - -#include - -#include - -using namespace nil::crypto3; - -template -using fixed_uint = typename boost::uint_t::exact; - -template -void verify_injection( - Src& src, - size_t n_bits, - size_t src_block_offset, - size_t dst_coursor, - Block& initial_dst, - const Block& expected_dst -) { - Block b_dst = initial_dst; - size_t b_dst_coursor = dst_coursor; - - detail::injector::inject(src, n_bits, b_dst, b_dst_coursor, src_block_offset); - - BOOST_CHECK_EQUAL_COLLECTIONS(b_dst.begin(), b_dst.end(), expected_dst.begin(), expected_dst.end()); - BOOST_CHECK_EQUAL(b_dst_coursor, dst_coursor + n_bits); -} - -BOOST_AUTO_TEST_SUITE(InjectorTestSuit) - -BOOST_AUTO_TEST_CASE(FirstBitInjectionBOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::big_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b10001111, 0b11111111}; - word_type w_src = 0b11111111; - - verify_injection(w_src, 1, 0, 0, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(SecondBitInjectionBOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::big_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b01001111, 0b11111111}; - word_type w_src = 0b11111111; - - verify_injection(w_src, 1, 0, 1, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToStartBOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::big_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b10101111, 0b11111111}; - word_type w_src = 0b10101010; - - verify_injection(w_src, 3, 0, 0, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidBOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::big_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b01011111, 0b11111111}; - word_type w_src = 0b10101010; - - verify_injection(w_src, 3, 0, 1, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidCrossWordBOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::big_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b00001110, 0b10111111}; - word_type w_src = 0b10101010; - - verify_injection(w_src, 5, 0, 6, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidCrossLongWordBOBB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::big_octet_big_bit; - - block_type initial_dst = {0b00000000'00000000, 0b00000000'00000000}; - block_type expected_dst = {0b00000000'00000101, 0b10111011'10000000}; - word_type w_src = 0b10110111'01111011; - - verify_injection(w_src, 12, 0, 13, initial_dst, expected_dst); -} - -// Since there is not difference between big and little octet for 8-bit values, tests are the same -BOOST_AUTO_TEST_CASE(FirstBitInjectionLOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::little_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b10001111, 0b11111111}; - word_type w_src = 0b11111111; - - verify_injection(w_src, 1, 0, 0, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(SecondBitInjectionLOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::little_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b01001111, 0b11111111}; - word_type w_src = 0b11111111; - - verify_injection(w_src, 1, 0, 1, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToStartLOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::little_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b10101111, 0b11111111}; - word_type w_src = 0b10101010; - - verify_injection(w_src, 3, 0, 0, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidLOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::little_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b01011111, 0b11111111}; - word_type w_src = 0b10101010; - - verify_injection(w_src, 3, 0, 1, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidCrossWordLOBB) { - using word_type = fixed_uint<8>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::little_octet_big_bit; - - block_type initial_dst = {0b00001111, 0b11111111}; - block_type expected_dst = {0b00001110, 0b10111111}; - word_type w_src = 0b10101010; - - verify_injection(w_src, 5, 0, 6, initial_dst, expected_dst); -} - -// From here LOBB tests differs from BOBB as words are long -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidCrossLongWordLOBB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::little_octet_big_bit; - - block_type initial_dst = {0b00000000'00000000, 0b00000000'00000000}; - block_type expected_dst = {0b00000101'00000000, 0b10000000'10111011}; - word_type w_src = 0b10110111'01111011; - - verify_injection(w_src, 12, 0, 13, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidCrossLongWordBOLB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::big_octet_little_bit; - - block_type initial_dst = {0b00000000'00000000, 0b00000000'00000000}; - block_type expected_dst = {0b00000000'10100000, 0b11011101'00000001}; - word_type w_src = 0b10110111'01111011; - - verify_injection(w_src, 12, 0, 13, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(BOBBMultipleBitToMidCrossLongWordLOLB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::big_octet_big_bit; - using output_endian_type = stream_endian::little_octet_little_bit; - - block_type initial_dst = {0b00000000'00000000, 0b00000000'00000000}; - block_type expected_dst = {0b10100000'00000000, 0b00000001'11011101}; - word_type w_src = 0b10110111'01111011; - - verify_injection(w_src, 12, 0, 13, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(LOBBMultipleBitToMidCrossLongWordLOLB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::little_octet_big_bit; - using output_endian_type = stream_endian::little_octet_little_bit; - - block_type initial_dst = {0b00001001'10011001, 0b10010000'11111111}; - block_type expected_dst = {0b11001001'10011001, 0b10010001'10111011}; - word_type w_src = 0b10110111'01111011; - - verify_injection(w_src, 12, 0, 13, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(LOBBMultipleBitToMidCrossLongWordBOLB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::little_octet_big_bit; - using output_endian_type = stream_endian::big_octet_little_bit; - - block_type initial_dst = {0b10011001'00001001, 0b00000000'10010000}; - block_type expected_dst = {0b10011001'11001001, 0b10111011'10010001}; - word_type w_src = 0b10110111'01111011; - - verify_injection(w_src, 12, 0, 13, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(LOBBOffsetMultipleBitToMidCrossLongWordBOLB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::little_octet_big_bit; - using output_endian_type = stream_endian::big_octet_little_bit; - - block_type initial_dst = {0b10011001'00001001, 0b00000000'10010000}; - block_type expected_dst = {0b10011001'01101001, 0b10110111'10010001}; - word_type w_src = 0b10110111'01111011; - - verify_injection(w_src, 12, 3, 13, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(LOBBOffsetMultipleBlockBitToMidCrossLongWordBOLB) { - using word_type = fixed_uint<16>; - using block_type = std::array; - using input_endian_type = stream_endian::little_octet_big_bit; - using output_endian_type = stream_endian::big_octet_little_bit; - - block_type initial_dst = {0b00000000'00000000, 0b00000000'10011001}; - block_type expected_dst = {0b11101100'11110110, 0b00011011'10011001}; - block_type b_src = {0b10110111'01111011, 0b11011110'11101101}; - - verify_injection(b_src, 20, 3, 2, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_CASE(LOBBOffsetMultipleBlockBitToMidCrossLongWordBOLB16Unit) { - using word_type = fixed_uint<32>; - using block_type = std::array; - using input_endian_type = stream_endian::little_unit_big_bit<16>; - using output_endian_type = stream_endian::big_unit_little_bit<16>; - - block_type initial_dst = {0b0000000000000000'0000000000000000, 0b0000000000000000'0000000000000000}; - block_type expected_dst = {0b0000000000000000'1110111100000000, 0b1110111011010110'0111011110111101}; - block_type b_src = {0b1011011101111011'1110111101110110, 0b0110111011110111'1101111011101101}; - - verify_injection(b_src, 40, 3, 23, initial_dst, expected_dst); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/block/test/kasumi.cpp b/crypto3/libs/block/test/kasumi.cpp deleted file mode 100644 index 57444c0c23..0000000000 --- a/crypto3/libs/block/test/kasumi.cpp +++ /dev/null @@ -1,55 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE kasumi_cipher_test - -#include -#include - -#include -#include -#include - -#include -#include - -#include - - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(kasumi_test_suite) - -BOOST_AUTO_TEST_CASE(kasumi_1) { - - std::vector input = {'\xea', '\x02', '\x47', '\x14', '\xad', '\x5c', '\x4d', '\x84'}; - std::vector key = {'\x2b', '\xd6', '\x45', '\x9f', '\x82', '\xc5', '\xb3', '\x00', '\x95', '\x2c', '\x49', '\x10', '\x48', '\x81', '\xff', '\x48'}; - - std::string out = encrypt(input, key); - - BOOST_CHECK_EQUAL(out, "df1f9b251c0bf45f"); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/block/test/md4.cpp b/crypto3/libs/block/test/md4.cpp deleted file mode 100644 index 1753a82a18..0000000000 --- a/crypto3/libs/block/test/md4.cpp +++ /dev/null @@ -1,60 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE md4_cipher_test - -#include -#include - -#include -#include -#include - -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::block; - -struct state_adder { - template - void operator()(T &s1, T const &s2) { - typedef typename T::size_type size_type; - size_type n = (s2.size() < s1.size() ? s2.size() : s1.size()); - for (typename T::size_type i = 0; i < n; ++i) { - s1[i] += s2[i]; - } - } -}; - -BOOST_TEST_DONT_PRINT_LOG_VALUE(md4::block_type) - -BOOST_AUTO_TEST_SUITE(md4_test_suite) - -BOOST_AUTO_TEST_CASE(md4_single_block_encrypt1) { -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/block/test/pack.cpp b/crypto3/libs/block/test/pack.cpp deleted file mode 100644 index c438628a18..0000000000 --- a/crypto3/libs/block/test/pack.cpp +++ /dev/null @@ -1,1097 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE block_pack_test - -#include -#include -#include - -#include -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::detail; -using namespace nil::crypto3::stream_endian; - - -BOOST_AUTO_TEST_SUITE(pack_imploder_test_suite) - -BOOST_AUTO_TEST_CASE(bubb_to_bubb_1) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x1234, 0x5678}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bubb_2) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x12345678, 0x90abcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bulb_1) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x482c6a1e}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bulb_2) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x482c6a1e, 0x09d5b3f7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lubb_1) { - std::array in = {{0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}}; - std::array out {}; - std::array res = {{0xefcdab9078563412}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lubb_2) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x78563412, 0xefcdab90}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lulb_1) { - std::array in = {{0x1234, 0x5678}}; - std::array out {}; - std::array res = {{0x1e6a2c48}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lulb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x2c48, 0x1e6a}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bubb_1) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x34127856ab90efcd}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bubb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x1234, 0x5678}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bulb_1) { - std::array in = {{0x12345678, 0x90abcdef}}; - std::array out {}; - std::array res = {{0x1e6a2c48f7b3d509}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bulb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x482c, 0x6a1e}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lubb_1) { - std::array in = {{0x56, 0x78}}; - std::array out {}; - std::array res = {{0x7856}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lubb_2) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x56781234, 0xcdef90ab}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lulb_1) { - std::array in = {{0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}}; - std::array out {}; - std::array res = {{0x1e6a2c48, 0xf7b3d509}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lulb_2) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x6a1e482c, 0xb3f709d5}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bubb_1) { - std::array in = {{0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, - 0x48, 0x2c, 0x6a, 0x1e, 0x09, 0xd5, 0xb3, 0xf7}}; - std::array out {}; - std::array res = {{0x482c6a1e09d5b3f7, 0x1234567890abcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bubb_2) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x482c6a1e, 0x09d5b3f7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bulb_1) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x12345678, 0x90abcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bulb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x1234, 0x5678}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lubb_1) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef, 0x482c, 0x6a1e, 0x09d5, 0xb3f7}}; - std::array out {}; - std::array res = {{0xf7b3d5091e6a2c48, 0xefcdab9078563412}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lubb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x2c48, 0x1e6a}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lulb_1) { - std::array in = {{0x12345678, 0x90abcdef, 0x482c6a1e, 0x09d5b3f7}}; - std::array out {}; - std::array res = {{0xefcdab9078563412, 0xf7b3d5091e6a2c48}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lulb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x3412, 0x7856}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bubb_1) { - std::array in = {{0x48, 0x2c, 0x6a, 0x1e}}; - std::array out {}; - std::array res = {{0x1234, 0x5678}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bubb_2) { - std::array in = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - std::array out {}; - std::array res = {{0x2c481e6a, 0xd509f7b3}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bulb_1) { - std::array in = {{0x09d5, 0xb3f7}}; - std::array out {}; - std::array res = {{0xd509f7b3}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bulb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x1234, 0x5678}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lubb_1) { - std::array in = {{0x482c, 0x6a1e, 0x09d5, 0xb3f7}}; - std::array out {}; - std::array res = {{0xcdef90ab56781234}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lubb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x2c48, 0x1e6a}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lulb_1) { - std::array in = {{0x12345678, 0x90abcdef, 0x482c6a1e, 0x09d5b3f7}}; - std::array out {}; - std::array res = {{0x90abcdef12345678, 0x09d5b3f7482c6a1e}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lulb_2) { - std::array in = {{0x12, 0x34, 0x56, 0x78}}; - std::array out {}; - std::array res = {{0x3412, 0x7856}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_SUITE_END() - - -BOOST_AUTO_TEST_SUITE(pack_exploder_test_suite) - -BOOST_AUTO_TEST_CASE(bubb_to_bubb_1) { - std::array in = {{0x1234, 0x5678}}; - std::array out {}; - std::array res = {{0x12, 0x34, 0x56, 0x78}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bubb_2) { - std::array in = {{0x12345678, 0x90abcdef}}; - std::array out {}; - std::array res = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bulb_1) { - std::array in = {{0x482c6a1e}}; - std::array out {}; - std::array res = {{0x12, 0x34, 0x56, 0x78}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bulb_2) { - std::array in = {{0x482c6a1e, 0x09d5b3f7}}; - std::array out {}; - std::array res = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lubb_1) { - std::array in = {{0xefcdab9078563412}}; - std::array out {}; - std::array res = {{0xef, 0xcd, 0xab, 0x90, 0x78, 0x56, 0x34, 0x12}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lubb_2) { - std::array in = {{0x78563412, 0xefcdab90}}; - std::array out {}; - std::array res = {{0x5678, 0x1234, 0xcdef, 0x90ab}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lulb_1) { - std::array in = {{0x1e6a2c48}}; - std::array out {}; - std::array res = {{0x5678, 0x1234}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lulb_2) { - std::array in = {{0x2c48, 0x1e6a}}; - std::array out {}; - std::array res = {{0x34, 0x12, 0x78, 0x56}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bubb_1) { - std::array in = {{0x34127856ab90efcd}}; - std::array out {}; - std::array res = {{0xcdef, 0x90ab, 0x5678, 0x1234}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bubb_2) { - std::array in = {{0x1234, 0x5678}}; - std::array out {}; - std::array res = {{0x34, 0x12, 0x78, 0x56}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bulb_1) { - std::array in = {{0x1e6a2c48f7b3d509}}; - std::array out {}; - std::array res = {{0x90abcdef, 0x12345678}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bulb_2) { - std::array in = {{0x482c, 0x6a1e}}; - std::array out {}; - std::array res = {{0x34, 0x12, 0x78, 0x56}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lubb_1) { - std::array in = {{0x7856}}; - std::array out {}; - std::array res = {{0x56, 0x78}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lubb_2) { - std::array in = {{0x56781234, 0xcdef90ab}}; - std::array out {}; - std::array res = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lulb_1) { - std::array in = {{0x1e6a2c48, 0xf7b3d509}}; - std::array out {}; - std::array res = {{0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lulb_2) { - std::array in = {{0x6a1e482c, 0xb3f709d5}}; - std::array out {}; - std::array res = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bubb_1) { - std::array in = {{0x482c6a1e09d5b3f7, 0x1234567890abcdef}}; - std::array out {}; - std::array res = {{0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, - 0x48, 0x2c, 0x6a, 0x1e, 0x09, 0xd5, 0xb3, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bubb_2) { - std::array in = {{0x482c6a1e, 0x09d5b3f7}}; - std::array out {}; - std::array res = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bulb_1) { - std::array in = {{0x12345678, 0x90abcdef}}; - std::array out {}; - std::array res = {{0x1234, 0x5678, 0x90ab, 0xcdef}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bulb_2) { - std::array in = {{0x1234, 0x5678}}; - std::array out {}; - std::array res = {{0x12, 0x34, 0x56, 0x78}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lubb_1) { - std::array in = {{0xf7b3d5091e6a2c48, 0xefcdab9078563412}}; - std::array out {}; - std::array res = {{0xcdef, 0x90ab, 0x5678, 0x1234, 0xb3f7, 0x09d5, 0x6a1e, 0x482c}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lubb_2) { - std::array in = {{0x2c48, 0x1e6a}}; - std::array out {}; - std::array res = {{0x34, 0x12, 0x78, 0x56}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lulb_1) { - std::array in = {{0xefcdab9078563412, 0xf7b3d5091e6a2c48}}; - std::array out {}; - std::array res = {{0x90abcdef, 0x12345678, 0x09d5b3f7, 0x482c6a1e}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lulb_2) { - std::array in = {{0x3412, 0x7856}}; - std::array out {}; - std::array res = {{0x34, 0x12, 0x78, 0x56}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bubb_1) { - std::array in = {{0x1234, 0x5678}}; - std::array out {}; - std::array res = {{0x2c, 0x48, 0x1e, 0x6a}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bubb_2) { - std::array in = {{0x2c481e6a, 0xd509f7b3}}; - std::array out {}; - std::array res = {{0x5678, 0x1234, 0xcdef, 0x90ab}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bulb_1) { - std::array in = {{0xd509f7b3}}; - std::array out {}; - std::array res = {{0xb3f7, 0x09d5}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bulb_2) { - std::array in = {{0x1234, 0x5678}}; - std::array out {}; - std::array res = {{0x34, 0x12, 0x78, 0x56}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lubb_1) { - std::array in = {{0xcdef90ab56781234}}; - std::array out {}; - std::array res = {{0x482c, 0x6a1e, 0x09d5, 0xb3f7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lubb_2) { - std::array in = {{0x2c48, 0x1e6a}}; - std::array out {}; - std::array res = {{0x12, 0x34, 0x56, 0x78}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lulb_1) { - std::array in = {{0x90abcdef12345678, 0x09d5b3f7482c6a1e}}; - std::array out {}; - std::array res = {{0x12345678, 0x90abcdef, 0x482c6a1e, 0x09d5b3f7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lulb_2) { - std::array in = {{0x3412, 0x7856}}; - std::array out {}; - std::array res = {{0x12, 0x34, 0x56, 0x78}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_SUITE_END() - - -BOOST_AUTO_TEST_SUITE(pack_equal_test_suite) - -BOOST_AUTO_TEST_CASE(bubb_to_bubb_1) { - - std::array in = {{0x01928374, 0x65473829}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bubb_2) { - - std::array in = {{0x01, 0x23}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bubb_3) { - - std::array in = {{0xC, 0x4}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lubb_1) { - - std::array in = {{0x01928374, 0x65473829}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lubb_2) { - - std::array in = {{0x01, 0x23}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lubb_3) { - - std::array in = {{0xC, 0x4}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bulb_1) { - - std::array in = {{0x01928374, 0x65473829}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bulb_2) { - - std::array in = {{0x01, 0x23}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bulb_3) { - - std::array in = {{0xC, 0x4}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lulb_1) { - - std::array in = {{0x01928374, 0x65473829}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lulb_2) { - - std::array in = {{0x01, 0x23}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lulb_3) { - - std::array in = {{0xC, 0x4}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lubb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lubb_2) { - - std::array in = {{0x8, 0xa, 0x5, 0xe}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lubb_3) { - - std::array in = {{0x89ad, 0x56ef, 0x7340, 0x12cb}}; - std::array out {}; - std::array res = {{0xad89, 0xef56, 0x4073, 0xcb12}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bulb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_bulb_2) { - - std::array in = {{0x89ad, 0x56ef, 0x7340, 0x12cb}}; - std::array out {}; - std::array res = {{0x91b5, 0x6af7, 0xce02, 0x48d3}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lulb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bubb_to_lulb_2) { - - std::array in = {{0x89ad, 0x56ef, 0x7340, 0x12cb}}; - std::array out {}; - std::array res = {{0xb591, 0xf76a, 0x02ce, 0xd348}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bubb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bubb_2) { - - std::array in = {{0x8, 0xa, 0x5, 0xe}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bubb_3) { - - std::array in = {{0x89ad56ef, 0x734012cb}}; - std::array out {}; - std::array res = {{0xef56ad89, 0xcb124073}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bulb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_bulb_2) { - - std::array in = {{0x89ad56ef, 0x734012cb}}; - std::array out {}; - std::array res = {{0xf76ab591, 0xd34802ce}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lulb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lubb_to_lulb_2) { - - std::array in = {{0x89ad56ef, 0x734012cb}}; - std::array out {}; - std::array res = {{0x91b56af7, 0xce0248d3}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bubb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bubb_2) { - - std::array in = {{0x0f19, 0x5628, 0xca73, 0xbe4d}}; - std::array out {}; - std::array res = {{0x98f0, 0x146a, 0xce53, 0xb27d}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bulb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(lulb_to_bulb_2) { - - std::array in = {{0x0f19, 0x5628, 0xca73, 0xbe4d}}; - std::array out {}; - std::array res = {{0x190f, 0x2856, 0x73ca, 0x4dbe}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lubb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(lulb_to_lubb_2) { - - std::array in = {{0x0f19, 0x5628, 0xca73, 0xbe4d}}; - std::array out {}; - std::array res = {{0xf098, 0x6a14, 0x53ce, 0x7db2}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bubb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_bubb_2) { - - std::array in = {{0x0f19, 0x5628, 0xca73, 0xbe4d}}; - std::array out {}; - std::array res = {{0xf098, 0x6a14, 0x53ce, 0x7db2}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lubb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - std::array res = {{0x91, 0xb5, 0x6a, 0xf7}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lubb_2) { - - std::array in = {{0x0f19, 0x5628, 0xca73, 0xbe4d}}; - std::array out {}; - std::array res = {{0x98f0, 0x146a, 0xce53, 0xb27d}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lulb_1) { - - std::array in = {{0x89, 0xad, 0x56, 0xef}}; - std::array out {}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == in); -} - -BOOST_AUTO_TEST_CASE(bulb_to_lulb_2) { - - std::array in = {{0x0f19, 0x5628, 0xca73, 0xbe4d}}; - std::array out {}; - std::array res = {{0x190f, 0x2856, 0x73ca, 0x4dbe}}; - - pack(in.begin(), in.end(), out.begin()); - - BOOST_CHECK(out == res); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/block/test/rijndael.cpp b/crypto3/libs/block/test/rijndael.cpp deleted file mode 100644 index 071966f246..0000000000 --- a/crypto3/libs/block/test/rijndael.cpp +++ /dev/null @@ -1,446 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE rijndael_cipher_test - -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::block; -using namespace nil::crypto3::detail; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -class byte_string { - typedef std::vector vec_type; - - vec_type s_; - -public: - typedef vec_type::size_type size_type; - typedef vec_type::value_type value_type; - typedef vec_type::pointer pointer; - typedef vec_type::const_pointer const_pointer; - typedef vec_type::reference reference; - typedef vec_type::const_reference const_reference; - typedef vec_type::iterator iterator; - typedef vec_type::const_iterator const_iterator; - - explicit byte_string(size_type n, const value_type &value = value_type()) : s_(n, value) { - } - - template - byte_string(InputIterator first, InputIterator last) : s_(first, last) { - } - - byte_string(const std::string &src) { - assert(!(src.size() % 2)); - // const unsigned char* src = static_cast(vsrc); - s_.resize(src.size() / 2); - unsigned int j = 0; - for (unsigned int i = 0; i < src.size();) { - if (src[i] >= '0' && src[i] <= '9') { - s_[j] = 16 * (src[i] - '0'); - } else if (src[i] >= 'a' && src[i] <= 'f') { - s_[j] = 16 * (src[i] - 'a' + 10); - } else if (src[i] >= 'A' && src[i] <= 'F') { - s_[j] = 16 * (src[i] - 'A' + 10); - } - ++i; - if (src[i] >= '0' && src[i] <= '9') { - s_[j] += src[i] - '0'; - } else if (src[i] >= 'a' && src[i] <= 'f') { - s_[j] += src[i] - 'a' + 10; - } else if (src[i] >= 'A' && src[i] <= 'F') { - s_[j] = 16 * (src[i] - 'A' + 10); - } - ++i; - ++j; - } - - /*for (size_type i = 0; i < len;) - { - value_type x; - if (src[i] >= '0' && src[i] <= '9') - x = 16 * (src[i] - '0'); - else if (src[i] >= 'a' && src[i] <= 'f') - x = 16 * (src[i] - 'a' + 10); - ++i; - if (src[i] >= '0' && src[i] <= '9') - x += src[i] - '0'; - else if (src[i] >= 'a' && src[i] <= 'f') - x += src[i] - 'a' + 10; - s_.push_back(x); - ++i; - }*/ - } - - byte_string(const byte_string ©) : s_(copy.s_) { - } - - size_type size() const { - return s_.size(); - } - - pointer data() { - return &s_[0]; - } - - const_pointer data() const { - return &s_[0]; - } - - reference operator[](size_type i) { - return s_[i]; - } - - const_reference operator[](size_type i) const { - return s_[i]; - } - - void reserve(size_type n) { - s_.reserve(n); - } - - void resize(size_type n, value_type c = value_type()) { - s_.resize(n, c); - } - - iterator begin() { - return s_.begin(); - } - - const_iterator begin() const { - return s_.begin(); - } - - iterator end() { - return s_.end(); - } - - const_iterator end() const { - return s_.end(); - } - - iterator erase(iterator loc) { - return s_.erase(loc); - } - - iterator erase(iterator first, iterator last) { - return s_.erase(first, last); - } - - friend bool operator==(const byte_string &, const byte_string &); - - friend bool operator!=(const byte_string &, const byte_string &); - - byte_string &operator+=(const byte_string &rhs) { - s_.insert(s_.end(), rhs.s_.begin(), rhs.s_.end()); - return *this; - } -}; - -template -std::basic_ostream &operator<<(std::basic_ostream &out, const byte_string &s) { - byte_string::size_type bufsize = s.size() * 2 + 1; - char buf[bufsize]; - for (byte_string::size_type i = 0; i < s.size(); ++i) { - std::snprintf(buf + i * 2, 3, "%02x", static_cast(s[i])); - } - buf[bufsize - 1] = '\0'; - out << buf; - return out; -} - -inline bool operator==(const byte_string &lhs, const byte_string &rhs) { - return lhs.s_ == rhs.s_; -} - -inline bool operator!=(const byte_string &lhs, const byte_string &rhs) { - return lhs.s_ != rhs.s_; -} - -const char *test_data = "data/rijndael.json"; - -boost::property_tree::ptree string_data(const char *child_name) { - boost::property_tree::ptree root_data; - boost::property_tree::read_json(test_data, root_data); - return root_data.get_child(child_name); -} - -BOOST_AUTO_TEST_SUITE(rijndael_stream_processor_data_driven_test_suite) - -BOOST_AUTO_TEST_CASE(rijndael_128_128_1) { - - std::vector input = {'\x00', '\x11', '\x22', '\x33', '\x44', '\x55', '\x66', '\x77', - '\x88', '\x99', '\xaa', '\xbb', '\xcc', '\xdd', '\xee', '\xff'}; - std::vector key = {'\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', - '\x08', '\x09', '\x0a', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f'}; - - std::string out = encrypt>(input, key); - - BOOST_CHECK_EQUAL(out, "69c4e0d86a7b0430d8cdb78070b4c55a"); -} - -BOOST_AUTO_TEST_CASE(rijndael_128_128_2) { - - std::string input = "00112233445566778899aabbccddeeff"; - std::string key = "000102030405060708090a0b0c0d0e0f"; - - byte_string bk(key), bi(input); - - std::string out = encrypt>(bi, bk); - - BOOST_CHECK_EQUAL(out, "69c4e0d86a7b0430d8cdb78070b4c55a"); -} - -BOOST_DATA_TEST_CASE(rijndael_128_128, string_data("key_128_block_128"), triples) { - - byte_string const p(triples.first); - - BOOST_FOREACH (boost::property_tree::ptree::value_type pair, triples.second) { - byte_string const k(pair.first); - - std::string out = encrypt>(p, k); - - BOOST_CHECK_EQUAL(out, pair.second.data()); - } -} - -BOOST_DATA_TEST_CASE(rijndael_160_128, string_data("key_160_block_128"), triples) { - - byte_string const p(triples.first); - - BOOST_FOREACH (boost::property_tree::ptree::value_type pair, triples.second) { - byte_string const k(pair.first); - - std::string out = encrypt>(p, k); - - BOOST_CHECK_EQUAL(out, pair.second.data()); - } -} - -BOOST_DATA_TEST_CASE(rijndael_192_128, string_data("key_192_block_128"), triples) { - - byte_string const p(triples.first); - - BOOST_FOREACH (boost::property_tree::ptree::value_type pair, triples.second) { - byte_string const k(pair.first); - - std::string out = encrypt>(p, k); - - BOOST_CHECK_EQUAL(out, pair.second.data()); - } -} - -BOOST_DATA_TEST_CASE(rijndael_224_128, string_data("key_224_block_128"), triples) { - - byte_string const p(triples.first); - - BOOST_FOREACH (boost::property_tree::ptree::value_type pair, triples.second) { - byte_string const k(pair.first); - - std::string out = encrypt>(p, k); - - BOOST_CHECK_EQUAL(out, pair.second.data()); - } -} - -BOOST_DATA_TEST_CASE(rijndael_256_128, string_data("key_256_block_128"), triples) { - - byte_string const p(triples.first); - - BOOST_FOREACH (boost::property_tree::ptree::value_type pair, triples.second) { - byte_string const k(pair.first); - - std::string out = encrypt>(p, k); - - BOOST_CHECK_EQUAL(out, pair.second.data()); - } -} - -BOOST_AUTO_TEST_SUITE_END() - -/* NIST SP 800-38A AES tests - https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf */ - -BOOST_AUTO_TEST_SUITE(aes_stream_processor_test_suite) -// F.1.1, F.1.2 -BOOST_AUTO_TEST_CASE(aes_128_cipher_usage) { - - std::string input = - "\x6b\xc1\xbe\xe2\x2e\x40\x9f\x96\xe9\x3d\x7e\x11\x73\x93\x17\x2a\xae\x2d\x8a\x57\x1e\x03\xac\x9c\x9e\xb7\x6f" - "\xac\x45\xaf\x8e\x51" - "\x30\xc8\x1c\x46\xa3\x5c\xe4\x11\xe5\xfb\xc1\x19\x1a\x0a\x52\xef\xf6\x9f\x24\x45\xdf\x4f\x9b\x17\xad\x2b\x41" - "\x7b\xe6\x6c\x37\x10"; - - std::string key = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6\xab\xf7\x15\x88\x09\xcf\x4f\x3c"; - - std::string out = encrypt>(input, key); - - BOOST_CHECK_EQUAL(out, - "3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf" - "43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4"); -} - -BOOST_AUTO_TEST_CASE(aes_128_cipher) { - - std::string input = - "6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710"; - - std::string key = "2b7e151628aed2a6abf7158809cf4f3c"; - - byte_string bk(key), bi(input); - - std::string out = encrypt>(bi, bk); - - BOOST_CHECK_EQUAL(out, - "3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf" - "43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4"); -} - -// F.1.3, F.1.4 -BOOST_AUTO_TEST_CASE(aes_192_cipher) { - std::string input = - "6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710"; - - std::string key = "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"; - - byte_string bk(key), bi(input); - - std::string out = encrypt>(bi, bk); - - BOOST_CHECK_EQUAL(out, - "bd334f1d6e45f25ff712a214571fa5cc974104846d0ad3ad7734ecb3ecee4eef" - "ef7afd2270e2e60adce0ba2face6444e9a4b41ba738d6c72fb16691603c18e0e"); -} - -// F.1.5, F.1.6 -BOOST_AUTO_TEST_CASE(aes_256_cipher) { - std::string input = - "6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51" - "30c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710"; - - std::string key = "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"; - - byte_string bk(key), bi(input); - - std::string out = encrypt>(bi, bk); - - BOOST_CHECK_EQUAL(out, - "f3eed1bdb5d2a03c064b5a7e3db181f8591ccb10d410ed26dc5ba74a31362870" - "b6ed21b99ca6f4f9f153e7b1beafed1d23304b7a39f9f3ff067d8d8f9e24ecc7"); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(rijndael_initializer_list_test_suite) - -BOOST_AUTO_TEST_CASE(rijndael_128_128_1) { - - std::string out = - encrypt>({'\x00', '\x11', '\x22', '\x33', '\x44', '\x55', '\x66', '\x77', '\x88', - '\x99', '\xaa', '\xbb', '\xcc', '\xdd', '\xee', '\xff'}, - {'\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', - '\x09', '\x0a', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f'}); - - BOOST_CHECK_EQUAL(out, "69c4e0d86a7b0430d8cdb78070b4c55a"); -} - -BOOST_AUTO_TEST_SUITE_END() - -/* -BOOST_AUTO_TEST_SUITE(aes_various_containers_test_suite) - -BOOST_AUTO_TEST_CASE(aes_128_with_array_32) { - - std::array const k = {0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c}; - std::array const p = {0x33221100, 0x77665544, 0xbbaa9988, 0xffeeddcc}; - std::array const c = {0xd8e0c469, 0x30047b6a, 0x80b7cdd8, 0x5ac5b470}; - - cipher_fixture, std::array, std::array> f(k, p, c); - f.encrypt(); - f.check_encrypt(); - f.decrypt(); - f.check_decrypt(); -} - -BOOST_AUTO_TEST_CASE(aes_128_with_array_16) { - std::array const k = {0x0100, 0x0302, 0x0504, 0x0706, 0x0908, 0x0b0a, 0x0d0c, 0x0f0e}; - std::array const p = {0x1100, 0x3322, 0x5544, 0x7766, 0x9988, 0xbbaa, 0xddcc, 0xffee}; - std::array const c = {0xc469, 0xd8e0, 0x7b6a, 0x3004, 0xcdd8, 0x80b7, 0xb470, 0x5ac5}; - - cipher_fixture, std::array, std::array> f(k, p, c); - f.encrypt(); - f.check_encrypt(); - f.decrypt(); - f.check_decrypt(); -} - -BOOST_AUTO_TEST_CASE(aes_128_with_array_8) { - std::array const k = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, - 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}; - std::array const p = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, - 0xbb, 0xcc, 0xdd, 0xee, 0xff}; - std::array const c = {0x69, 0xc4, 0xe0, 0xd8, 0x6a, 0x7b, 0x04, 0x30, 0xd8, 0xcd, 0xb7, - 0x80, 0x70, 0xb4, 0xc5, 0x5a}; - - cipher_fixture, std::array, std::array> f(k, p, c); - f.encrypt(); - f.check_encrypt(); - f.decrypt(); - f.check_decrypt(); -} - -BOOST_AUTO_TEST_SUITE_END()*/ diff --git a/crypto3/libs/block/test/shacal.cpp b/crypto3/libs/block/test/shacal.cpp deleted file mode 100644 index 0c8f6baa86..0000000000 --- a/crypto3/libs/block/test/shacal.cpp +++ /dev/null @@ -1,63 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE shacal_cipher_test - -#include -#include - -#include -#include -#include - -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::block; - -BOOST_TEST_DONT_PRINT_LOG_VALUE(shacal1::block_type) - -BOOST_AUTO_TEST_SUITE(shacal1_test_suite) - -BOOST_AUTO_TEST_CASE(shacal1_single_block_encrypt1) { - typedef block::shacal1 bct; - - // Test with the equivalent of SHA-1("") - bct::block_type plaintext = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}}; - bct::key_type key = {{0x80000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; - - bct cipher(key); - bct::block_type ciphertext = cipher.encrypt(plaintext); - bct::block_type expected_ciphertext = {{0x72f480ed, 0x6e9d9f84, 0x999ae2f1, 0x852dc41a, 0xec052519}}; - - BOOST_CHECK_EQUAL(ciphertext, expected_ciphertext); - - bct::block_type new_plaintext = cipher.decrypt(ciphertext); - BOOST_CHECK_EQUAL(plaintext, new_plaintext); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/block/test/shacal2.cpp b/crypto3/libs/block/test/shacal2.cpp deleted file mode 100644 index 70eeed1aab..0000000000 --- a/crypto3/libs/block/test/shacal2.cpp +++ /dev/null @@ -1,65 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE shacal2_cipher_test - -#include - -#include -#include -#include - -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::block; - -BOOST_TEST_DONT_PRINT_LOG_VALUE(block::shacal2<256>::block_type) - -BOOST_AUTO_TEST_SUITE(shacal_test_suite) - -BOOST_AUTO_TEST_CASE(shacal2_single_block_encrypt1) { - typedef block::shacal2<256> bct; - - // Test with the equivalent of SHA-256("") - bct::block_type plaintext = { - {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}}; - bct::key_type key = {{0x80000000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; - bct cipher(key); - bct::block_type ciphertext = cipher.encrypt(plaintext); - bct::block_type expected_ciphertext = { - {0x79a6dddb, 0xdd946d8f, 0x5e8d0156, 0xf41fc3ea, 0xd69fef65, 0xc9962ac0, 0x8511bf70, 0x1c71eb3c}}; - - BOOST_CHECK_EQUAL(ciphertext, expected_ciphertext); - - bct::block_type new_plaintext = cipher.decrypt(ciphertext); - - BOOST_CHECK_EQUAL(plaintext, new_plaintext); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/CMakeLists.txt b/crypto3/libs/blueprint/CMakeLists.txt index 7e5930b786..64ec6f180a 100644 --- a/crypto3/libs/blueprint/CMakeLists.txt +++ b/crypto3/libs/blueprint/CMakeLists.txt @@ -12,11 +12,12 @@ set_target_properties(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} PROPERTIES EXPORT_NAME ${CURRENT_PROJECT_NAME}) target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE + $ $ $) target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - ${Boost_LIBRARIES} + Boost::container ) include(CMTest) add_tests(test) diff --git a/crypto3/libs/blueprint/example/CMakeLists.txt b/crypto3/libs/blueprint/example/CMakeLists.txt index 67f80a5c6f..0043c270d2 100644 --- a/crypto3/libs/blueprint/example/CMakeLists.txt +++ b/crypto3/libs/blueprint/example/CMakeLists.txt @@ -17,13 +17,11 @@ macro(define_blueprint_example name) ${CMAKE_WORKSPACE_NAME}::algebra ${CMAKE_WORKSPACE_NAME}::math - ${CMAKE_WORKSPACE_NAME}::block ${CMAKE_WORKSPACE_NAME}::hash ${CMAKE_WORKSPACE_NAME}::multiprecision ${CMAKE_WORKSPACE_NAME}::zk - - ${Boost_LIBRARIES}) - set_target_properties(${full_example_name} PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED TRUE) + ) + set_target_properties(${full_example_name} PROPERTIES CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) endmacro() diff --git a/crypto3/libs/blueprint/include/nil/blueprint/basic_non_native_policy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/basic_non_native_policy.hpp index bff1d15277..a298d12f64 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/basic_non_native_policy.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/basic_non_native_policy.hpp @@ -32,7 +32,6 @@ #include #include -#include #include namespace nil { @@ -51,8 +50,7 @@ namespace nil { constexpr static const std::uint32_t ratio = 4; // 66,66,66,66 bits using non_native_field_type = typename crypto3::algebra::curves::ed25519::base_field_type; using native_field_type = typename crypto3::algebra::curves::pallas::base_field_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * native_field_type::policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * native_field_type::policy_type::modulus_bits>; using var = crypto3::zk::snark::plonk_variable; @@ -124,8 +122,7 @@ namespace nil { constexpr static const std::uint32_t ratio = 2; // 254, 1 bits using non_native_field_type = typename crypto3::algebra::curves::pallas::scalar_field_type; using native_field_type = typename crypto3::algebra::curves::pallas::base_field_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * native_field_type::policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * native_field_type::policy_type::modulus_bits>; using var = crypto3::zk::snark::plonk_variable; typedef std::array non_native_var_type; @@ -137,8 +134,8 @@ namespace nil { static native_field_type::value_type get_i_th_chunk(non_native_field_type::value_type input, std::size_t i_th) { assert(i_th < ratio && "non-native type does not have that much chunks!"); - extended_integral_type result = extended_integral_type::backend_type( - input.data.backend().base_data()); + extended_integral_type result = extended_integral_type( + input.data.base()); native_field_type::integral_type base = 1; native_field_type::integral_type mask = (base << chunk_sizes[i_th]) - 1; std::size_t shift = 0; @@ -274,16 +271,13 @@ namespace nil { */ template struct basic_non_native_policy_field_type>> { + nil::crypto3::multiprecision::big_uint<256>> { constexpr static const std::uint32_t ratio = 2; // 128, 128 bits // not actually a field, but we preserve the interface - using non_native_field_type = typename boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<256>>; + using non_native_field_type = typename nil::crypto3::multiprecision::big_uint<256>; using native_field_type = typename crypto3::algebra::curves::pallas::base_field_type; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * native_field_type::policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * native_field_type::policy_type::modulus_bits>; using var = crypto3::zk::snark::plonk_variable; typedef std::array non_native_var_type; @@ -292,11 +286,11 @@ namespace nil { constexpr static const std::array chunk_sizes = {128, 128}; - static native_field_type::value_type get_i_th_chunk(non_native_field_type::value_type input, + static native_field_type::value_type get_i_th_chunk(non_native_field_type input, std::size_t i_th) { assert(i_th < ratio && "non-native type does not have that much chunks!"); - extended_integral_type result = extended_integral_type::backend_type( - input.backend()); + extended_integral_type result = extended_integral_type( + input); native_field_type::integral_type base = 1; native_field_type::integral_type mask = (base << chunk_sizes[i_th]) - 1; @@ -309,7 +303,7 @@ namespace nil { } - static chopped_value_type chop_non_native(non_native_field_type::value_type input) { + static chopped_value_type chop_non_native(non_native_field_type input) { chopped_value_type result; for (std::size_t i = 0; i < ratio; i++) { result[i] = get_i_th_chunk(input, i); @@ -317,111 +311,15 @@ namespace nil { return result; } - static non_native_field_type::value_type glue_non_native(chopped_value_type input) { - non_native_field_type::value_type result; - result = non_native_field_type::value_type(native_field_type::integral_type(input[0].data)); + static non_native_field_type glue_non_native(chopped_value_type input) { + non_native_field_type result; + result = non_native_field_type(native_field_type::integral_type(input[0].data)); for (std::size_t i = 1; i < ratio; i++) { std::size_t shift = 0; for (std::size_t j = 0; j < i; j++) { shift += chunk_sizes[j]; } - result += non_native_field_type::value_type(native_field_type::integral_type(input[i].data) << shift); - } - return result; - } - }; - - /* - * Small and big signed numbers. This one is different from the others, it accepts - * boost::multiprecision::cpp_int_backend, which is not supposed to be used in algebra, so - * conversions need to happen before it can be used. - */ - template - struct basic_non_native_policy_field_type>> { - - constexpr static const std::uint32_t ratio = BitsAmount < 256 ? 2 : 3; // sign and all other bits - static constexpr std::array chunk_sizes_init() { - if constexpr (BitsAmount < 256) { - return {1, BitsAmount - 1}; - } else { - return {1, 127, 128}; - } - } - - // not actually a field, but we preserve the interface - using non_native_field_type = typename boost::multiprecision::number< - boost::multiprecision::cpp_int_backend>; - - using non_native_unsigned_integral_type = typename boost::multiprecision::number< - boost::multiprecision::cpp_int_backend>; - - using native_field_type = typename crypto3::algebra::curves::pallas::base_field_type; - using native_integral_type = typename native_field_type::integral_type; - using native_backend_type = typename native_integral_type::backend_type; - using var = crypto3::zk::snark::plonk_variable; - - typedef std::array non_native_var_type; - typedef std::array chopped_value_type; - - constexpr static const std::array chunk_sizes = chunk_sizes_init(); - - static native_field_type::value_type get_i_th_chunk(typename non_native_field_type::value_type input, - std::size_t i_th) { - assert(i_th < ratio && "non-native type does not have that much chunks!"); - - if constexpr (BitsAmount < 256) { - if (i_th == 0) { - return input.sign() == 0 ? 1 : -1; - } else { - return native_field_type::value_type(input.sign() == 0 ? 1 : -1) * - native_integral_type(native_backend_type( - non_native_unsigned_integral_type(input).data.backend())); - } - } else { - static const non_native_field_type top_mask = ((non_native_field_type(1) << 128) - 1) << 128; - static const non_native_field_type bottom_mask = (non_native_field_type(1) << 128) - 1; - - if (i_th == 0) { - return input.sign() == 0 ? 1 : -1; - } else if (i_th == 1) { - return native_integral_type(native_backend_type( - non_native_unsigned_integral_type(top_mask & input).data.backend())); - } else { - return native_integral_type(native_backend_type( - non_native_unsigned_integral_type(bottom_mask & input).data.backend())); - } - } - } - - - static chopped_value_type chop_non_native(typename non_native_field_type::value_type input) { - chopped_value_type result; - for (std::size_t i = 0; i < ratio; i++) { - result[i] = get_i_th_chunk(input, i); - } - return result; - } - - static typename non_native_field_type::value_type glue_non_native(chopped_value_type input) { - typename non_native_field_type::value_type result; - if constexpr (BitsAmount < 256) { - result = - (non_native_field_type::value_type(native_field_type::integral_type(input[0].data)) == 0 ? 1 : -1) * non_native_field_type::value_type(native_field_type::integral_type(input[1].data)); - } else { - static const non_native_field_type two_128 = - boost::multiprecision::pow(non_native_field_type(2), 128); - result = - (non_native_field_type::value_type(native_field_type::integral_type(input[0].data)) == 0 ? 1 : -1) * - (non_native_field_type::value_type(native_field_type::integral_type(input[1].data) * two_128 + - non_native_field_type::value_type(input[2].data))); + result += non_native_field_type(native_field_type::integral_type(input[i].data) << shift); } return result; } diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/circuit_builder.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/circuit_builder.hpp new file mode 100644 index 0000000000..f64ccd7596 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/circuit_builder.hpp @@ -0,0 +1,694 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for BBF-components' circuit builder class +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_PLONK_BBF_CIRCUIT_BUILDER_HPP +#define CRYPTO3_BLUEPRINT_PLONK_BBF_CIRCUIT_BUILDER_HPP + +#include + +#include + +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + + template class Component, typename... ComponentStaticInfoArgs> + class circuit_builder { + using static_info_args_storage_type = std::tuple; + public: + + circuit_builder(std::size_t witnesses, std::size_t public_inputs, std::size_t user_constants, std::size_t rows, + ComponentStaticInfoArgs... component_static_info_args) { + + static_info_args_storage = {component_static_info_args...}; + prepare_circuit_parameters(witnesses,public_inputs,user_constants,rows); + } + + // typical setup: 1 PI column, 0 constant columns, witnesses × rows + circuit_builder(std::size_t witnesses, std::size_t rows, ComponentStaticInfoArgs... component_static_info_args) { + static_info_args_storage = {component_static_info_args...}; + prepare_circuit_parameters(witnesses,1,0,rows); + } + + // query component for minimal requirements + circuit_builder(ComponentStaticInfoArgs... component_static_info_args) { + using generator = Component; + static_info_args_storage = {component_static_info_args...}; + typename generator::table_params min_params = std::apply(generator::get_minimal_requirements, static_info_args_storage); + prepare_circuit_parameters(min_params.witnesses, + std::max(min_params.public_inputs,std::size_t(1)), // assure at least 1 PI column is present + min_params.constants, + min_params.rows); + } + + private: + void prepare_circuit_parameters(std::size_t witnesses, std::size_t public_inputs, + std::size_t user_constants, std::size_t rows) { + using generator = Component; + + typename generator::table_params min_params = std::apply(generator::get_minimal_requirements, static_info_args_storage); + if (witnesses < min_params.witnesses) { + std::stringstream error; + error << "Number of witnesses = " << witnesses + << " is below the minimal number of witnesses (" << min_params.witnesses << ") for the component."; + throw std::out_of_range(error.str()); + } + if (public_inputs < min_params.public_inputs) { + std::stringstream error; + error << "Number of public inputs = " << public_inputs + << " is below the minimal number of public inputs (" << min_params.public_inputs << ") for the component."; + throw std::out_of_range(error.str()); + } + if (user_constants < min_params.constants) { + std::stringstream error; + error << "Number of constants = " << user_constants + << " is below the minimal number of constants (" << min_params.constants << ") for the component."; + throw std::out_of_range(error.str()); + } + if (rows < min_params.rows) { + std::stringstream error; + error << "Number of rows = " << rows + << " is below the minimal number of rows (" << min_params.rows << ") for the component."; + throw std::out_of_range(error.str()); + } + // initialize params according to arguments + witnesses_amount = witnesses; + public_inputs_amount = public_inputs; + constants_amount = user_constants; + rows_amount = rows; + presets = crypto3::zk::snark::plonk_assignment_table(0,0,constants_amount,0); // intended extensible + generate_constraints(); + } + + void generate_constraints() { + using generator = Component; + using context_type = typename nil::blueprint::bbf::context; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using copy_constraint_type = crypto3::zk::snark::plonk_copy_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using value_type = typename FieldType::value_type; + using var = crypto3::zk::snark::plonk_variable; + using TYPE = typename generator::TYPE; + using raw_input_type = typename generator::raw_input_type; + + using plonk_lookup_table = nil::crypto3::zk::snark::plonk_lookup_table; + + context_type ct = context_type( + crypto3::zk::snark::plonk_table_description( + witnesses_amount, public_inputs_amount, constants_amount, 0, rows_amount, + std::pow(2, std::ceil(std::log2(rows_amount)))), + rows_amount, 0 // use all rows, start from 0 + ); + + raw_input_type raw_input = {}; + auto v = std::tuple_cat(std::make_tuple(ct), generator::form_input(ct,raw_input), static_info_args_storage); + std::make_from_tuple(v); + + // constants + auto c_list = ct.get_constants(); + // std::cout << "const list size = " << c_list.size() << "\n"; + for(std::size_t i = 0; i < c_list.size(); i++) { // columns + // std::cout << "column size = " << c_list[i].size() << "\n"; + for(std::size_t j = 0; j < c_list[i].size(); j++) { // rows + presets.constant(i,j) = c_list[i][j]; + } + } + + ////////////////////////// Don't use 'ct' below this line, we just moved it!!! ///////////////////////////// + gates_optimizer optimizer(std::move(ct)); + optimized_gates gates = optimizer.optimize_gates(); + + for(const auto& [selector_id, constraints] : gates.constraint_list) { + /* + std::cout << "GATE:\n"; + for(const auto& c : constraints) { + std::cout << c << "\n"; + } + std::cout << "Rows: "; + */ + bp.add_gate(selector_id, constraints); + + //std::cout << "\n"; + } + + // compatibility layer: copy constraint list + for(const auto& cc : gates.copy_constraints) { + bp.add_copy_constraint(cc); + } + + std::set lookup_table_names; + for(const auto& [selector_id, lookup_list] : gates.lookup_constraints) { + std::vector lookup_gate; + for(const auto& single_lookup_constraint : lookup_list) { + std::string table_name = single_lookup_constraint.first; + if (lookup_table_names.find(table_name) == lookup_table_names.end()) { + if (gates.dynamic_lookup_tables.find(table_name) != gates.dynamic_lookup_tables.end()) { + bp.reserve_dynamic_table(table_name); + } else { + bp.reserve_table(table_name); + } + lookup_table_names.insert(table_name); + } + std::size_t table_index = bp.get_reserved_indices().at(table_name); + lookup_gate.push_back({table_index, single_lookup_constraint.second}); + } + + bp.add_lookup_gate(selector_id, lookup_gate); + } + + // compatibility layer: dynamic lookup tables - continued + for(const auto& [name, area] : gates.dynamic_lookup_tables) { + bp.register_dynamic_table(name); + + std::size_t selector_index = area.second; + + //crypto3::zk::snark::plonk_lookup_table table_specs; + plonk_lookup_table table_specs; + table_specs.tag_index = selector_index; + table_specs.columns_number = area.first.size(); + std::vector dynamic_lookup_cols; + for(const auto& c : area.first) { + // TODO: does this make sense?! + dynamic_lookup_cols.push_back(var(c, 0, false, var::column_type::witness)); + } + table_specs.lookup_options = {dynamic_lookup_cols}; + bp.define_dynamic_table(name,table_specs); + } + + // this is where we pack lookup tables into constant columns and assign them selectors + std::size_t usable_rows = std::pow(2, std::ceil(std::log2(rows_amount))) - 1; // assure minimum inflation after padding + const auto &lookup_table_ids = bp.get_reserved_indices(); + const auto &lookup_tables = bp.get_reserved_tables(); + const auto &dynamic_tables = bp.get_reserved_dynamic_tables(); + + std::vector ordered_table_names = + nil::crypto3::zk::snark::get_tables_ordered_by_rows_number(lookup_tables); + + std::size_t start_row = 1; + std::vector bp_lookup_tables(lookup_table_ids.size()); + std::size_t start_constant_column = presets.constants_amount(); + std::size_t prev_columns_number = 0; + int full_selector_id = -1; + + for(const auto &table_name : ordered_table_names) { + const auto &table = lookup_tables.at(table_name); + + std::size_t table_rows_number = table->subtables.size() > 1 ? table->get_rows_number() : + (table->subtables.begin()->second.end - table->subtables.begin()->second.begin + 1); + std::size_t table_columns_number = table->subtables.size() > 1 ? table->get_columns_number() : + table->subtables.begin()->second.column_indices.size(); + std::vector column_map(table_columns_number); + if (table->subtables.size() == 1) { + column_map = table->subtables.begin()->second.column_indices; + } else { + for(std::size_t k = 0; k < table_columns_number; k++) { + column_map[k] = k; + } + } + std::size_t table_row_shift = table->subtables.size() > 1 ? 0 : table->subtables.begin()->second.begin; + + if (table_rows_number > usable_rows) { + std::size_t options_number = table_rows_number / usable_rows + 1; + start_constant_column += prev_columns_number; + std::size_t cur_constant_column = start_constant_column; + prev_columns_number = options_number * table_columns_number; + + if (presets.constants_amount() < start_constant_column + prev_columns_number) { + presets.resize_constants(start_constant_column + prev_columns_number); + } + // assure all added columns have same amount of usable_rows and need no resizement later + for(std::size_t i = start_constant_column; i < start_constant_column + prev_columns_number; i++) + presets.constant(i,usable_rows-1) = 0; + + if (full_selector_id == -1) { + row_selector selector_column(usable_rows); + for(std::size_t i = 1; i < usable_rows; i++) + selector_column.set_row(i); + full_selector_id = gates.add_selector(selector_column); + } + + if (table_rows_number % usable_rows == 0) options_number--; + std::size_t cur = 0; + for(std::size_t i = 0; i < options_number; i++) { + for(std::size_t local_start_row = 1; local_start_row < usable_rows; local_start_row++, cur++) { + for(std::size_t k = 0; k < table_columns_number; k++) { + if (cur < table_rows_number) + presets.constant(cur_constant_column + k,local_start_row) = + table->get_table()[column_map[k]][table_row_shift + cur]; + else + presets.constant(cur_constant_column + k,local_start_row) = + table->get_table()[column_map[k]][table_row_shift + table_rows_number-1]; + } + } + cur_constant_column += table_columns_number; + } + for(const auto &[subtable_name, subtable] : table->subtables) { + if ((table->subtables.size() > 1) && + (subtable.begin != 0 || subtable.end != table->get_rows_number() -1)) + BOOST_ASSERT_MSG(false, "Only full big tables are supported now"); + std::string full_table_name = table->table_name + "/" + subtable_name; + bp_lookup_tables[lookup_table_ids.at(full_table_name) - 1] = + plonk_lookup_table(subtable.column_indices.size(), full_selector_id); + + for(std::size_t i = 0; i < options_number; i++) { + std::vector> option; + for(std::size_t k = 0; k < subtable.column_indices.size(); k++) { + // if current subtable is the only one in the table, its columns are exatly + // the columns present in the table + std::size_t column_index = (table->subtables.size() > 1) ? subtable.column_indices[k] : k; + option.emplace_back(nil::crypto3::zk::snark::plonk_variable( + start_constant_column + i * table_columns_number + column_index, 0, false, + nil::crypto3::zk::snark::plonk_variable::column_type::constant)); + } + bp_lookup_tables[lookup_table_ids.at(full_table_name) - 1].append_option(option); + } + } + start_constant_column = cur_constant_column; + continue; + } else if (start_row + table_rows_number < usable_rows) { + if (prev_columns_number < table_columns_number) prev_columns_number = table_columns_number; + } else if (table_rows_number < usable_rows) { + start_row = 1; + start_constant_column += prev_columns_number; + prev_columns_number = table_columns_number; + } + + // Place table into constant_columns. + + // add constant columns if necessary + if (presets.constants_amount() < start_constant_column + table_columns_number) { + presets.resize_constants(start_constant_column + table_columns_number); + } + // assure all added columns have same amount of usable_rows and need no resizement later + for(std::size_t i = start_constant_column; i < start_constant_column + table_columns_number; i++) + presets.constant(i,usable_rows - 1) = 0; + + for(std::size_t i = 0; i < table_columns_number; i++) { + for(std::size_t j = table_row_shift; j < std::min(table_row_shift + table_rows_number, + table->get_table()[column_map[i]].size()); j++) { + presets.constant(start_constant_column + i,start_row + j - table_row_shift) = + table->get_table()[column_map[i]][j]; + } + } + + std::map, std::size_t> selector_ids; + for(const auto &[subtable_name, subtable] : table->subtables) { + if( selector_ids.find(std::make_pair(subtable.begin, subtable.end)) != selector_ids.end() ){ + // std::cout << "selector for " << subtable_name << " from " << start_row + subtable.begin + // << " to " << start_row + subtable.end << std::endl; + auto selector_id = selector_ids[std::make_pair(subtable.begin, subtable.end)]; + std::string full_table_name = table->table_name + "/" + subtable_name; + bp_lookup_tables[lookup_table_ids.at(full_table_name) - 1] = + plonk_lookup_table(subtable.column_indices.size(), selector_id); + std::vector> option; + for(std::size_t k = 0; k < subtable.column_indices.size(); k++) { + // if current subtable is the only one in the table, its columns are exatly + // the columns present in the table + std::size_t column_index = (table->subtables.size() > 1) ? subtable.column_indices[k] : k; + option.emplace_back( nil::crypto3::zk::snark::plonk_variable( +// TODO! The following line was missing start_constant_column term + start_constant_column + column_index, 0, false, + nil::crypto3::zk::snark::plonk_variable::column_type::constant + ) ); + } + bp_lookup_tables[lookup_table_ids.at(full_table_name) - 1].append_option(option); + continue; + } + // Create selector + row_selector selector_column(usable_rows); + // std::cout << "selector for " << subtable_name << " from " << start_row + subtable.begin + // << " to " << start_row + subtable.end << std::endl; + for(std::size_t k = subtable.begin; k <= subtable.end; k++){ + selector_column.set_row(start_row + k); + } + std::size_t cur_selector_id = gates.add_selector(selector_column); + + std::string full_table_name = table->table_name + "/" + subtable_name; + bp_lookup_tables[lookup_table_ids.at(full_table_name) - 1] = + plonk_lookup_table(subtable.column_indices.size(), cur_selector_id); + + std::vector> option; + for(const auto &column_index : subtable.column_indices) { + option.emplace_back(nil::crypto3::zk::snark::plonk_variable( +// TODO: check, why the following line did not have the start_constant_column term! + start_constant_column + column_index, 0, false, + nil::crypto3::zk::snark::plonk_variable::column_type::constant + ) ); + } + bp_lookup_tables[lookup_table_ids.at(full_table_name) - 1].append_option(option); + selector_ids[std::make_pair(subtable.begin, subtable.end)] = cur_selector_id; + } + start_row += table_rows_number; + } + for(const auto&[k, table]:dynamic_tables) { + BOOST_ASSERT(table->is_defined()); + bp_lookup_tables[lookup_table_ids.at(k) - 1] = table->lookup_table; + } + for(std::size_t i = 0; i < bp_lookup_tables.size(); i++) { + bp.add_lookup_table(std::move(bp_lookup_tables[i])); + } + + // Emplace all the selectors. + for(const auto& [row_list, selector_id]: gates.selectors_) { +//std::cout << "Selector id " << selector_id << " has row_list " << row_list << " after processing " << std::endl; + for(std::size_t row_index : row_list) { + if (presets.selectors_amount() <= selector_id) { + presets.resize_selectors(selector_id + 1); + } +//std::cout << "Enabling selector " << selector_id << " on row " << row_index << std::endl; + presets.enable_selector(selector_id, row_index); + } + } + + // std::cout << "Gates amount = " << bp.num_gates() << "\n"; + // std::cout << "Lookup gates amount = " << bp.num_lookup_gates() << "\n"; + } + + std::set> + load_dynamic_lookup(const crypto3::zk::snark::plonk_assignment_table &assignments, std::size_t table_id) { + std::set> result; + auto &table = bp.lookup_tables()[table_id-1]; + + crypto3::zk::snark::plonk_column selector = assignments.selector(table.tag_index); + + for( std::size_t selector_row = 0; selector_row < rows_amount; selector_row++ ){ + if( selector_row < selector.size() && !selector[selector_row].is_zero() ){ + for( std::size_t op = 0; op < table.lookup_options.size(); op++){ + std::vector item(table.lookup_options[op].size()); + for( std::size_t i = 0; i < table.lookup_options[op].size(); i++){ + crypto3::zk::snark::plonk_constraint expr = table.lookup_options[op][i];; + item[i] = expr.evaluate(selector_row, assignments); + } + result.insert(item); + } + } + } + return result; + } + + public: + std::tuple< + crypto3::zk::snark::plonk_assignment_table, + Component, + zk::snark::plonk_table_description + > + assign(typename Component::raw_input_type raw_input) { + using generator = Component; + using assignment_type = crypto3::zk::snark::plonk_assignment_table; + using context_type = typename nil::blueprint::bbf::context; + + // actually we should use presets to chose the right size and partly fill it + assignment_type at = assignment_type(witnesses_amount, public_inputs_amount, + presets.constants_amount(), presets.selectors_amount()); + + // copy preset constants + for(std::size_t i = 0; i < presets.constants_amount(); i++) { + at.fill_constant(i, presets.constant(i)); + } + // copy preset selectors + for(std::size_t i = 0; i < presets.selectors_amount(); i++) { + at.fill_selector(i, presets.selector(i)); + } + + context_type ct = context_type(at, rows_amount, 0); // use all rows, start from 0 + + auto v = std::tuple_cat(std::make_tuple(ct), generator::form_input(ct,raw_input), static_info_args_storage); + auto o = std::make_from_tuple(v); + + zk::snark::plonk_table_description desc = at.get_description(); + std::cout << "Rows amount = " << at.rows_amount() << std::endl; + desc.usable_rows_amount = at.rows_amount(); + nil::crypto3::zk::snark::basic_padding(at); + std::cout << "Rows amount after padding = " << at.rows_amount() << std::endl; + desc.rows_amount = at.rows_amount(); + + return std::make_tuple(at,o,desc); + } + + bool is_satisfied(const crypto3::zk::snark::plonk_assignment_table &assignments) { + std::set used_gates; + for (std::uint32_t i = 0; i < bp.gates().size(); i++) { + used_gates.insert(i); + } + + std::set used_lookup_gates; + for (std::uint32_t i = 0; i < bp.lookup_gates().size(); i++) { + used_lookup_gates.insert(i); + } + + std::set used_copy_constraints; + for (std::uint32_t i = 0; i < bp.copy_constraints().size(); i++) { + used_copy_constraints.insert(i); + } + + std::set selector_rows; + for (std::uint32_t i = 0; i < rows_amount; i++) { + selector_rows.insert(i); + } + + const auto &gates = bp.gates(); + const auto ©_constraints = bp.copy_constraints(); + const auto &lookup_gates = bp.lookup_gates(); + + std::map>> used_dynamic_tables; + + for (const auto& i : used_gates) { + crypto3::zk::snark::plonk_column selector = assignments.selector(gates[i].selector_index); + + for (const auto& selector_row : selector_rows) { + if (selector_row < selector.size() && !selector[selector_row].is_zero()) { + for (std::size_t j = 0; j < gates[i].constraints.size(); j++) { + + typename FieldType::value_type constraint_result = + gates[i].constraints[j].evaluate(selector_row, assignments); + + if (!constraint_result.is_zero()) { + std::cout << "Constraint " << j << " from gate " << i << " on row " << selector_row + << " is not satisfied." << std::endl; + std::cout << "Constraint result: " << constraint_result << std::endl; + std::cout << "Offending contraint: " << gates[i].constraints[j] << std::endl; + return false; + } + } + } + } + } + + for (const auto& i : used_lookup_gates) { + crypto3::zk::snark::plonk_column selector = assignments.selector(lookup_gates[i].tag_index); + for (const auto& selector_row : selector_rows) { + if (selector_row < selector.size() && !selector[selector_row].is_zero()) { + for (std::size_t j = 0; j < lookup_gates[i].constraints.size(); j++) { + std::vector input_values; + input_values.reserve(lookup_gates[i].constraints[j].lookup_input.size()); + for (std::size_t k = 0; k < lookup_gates[i].constraints[j].lookup_input.size(); k++) { + input_values.emplace_back(lookup_gates[i].constraints[j].lookup_input[k].evaluate( + selector_row, assignments)); + } + const auto table_name = + bp.get_reserved_indices_right().at(lookup_gates[i].constraints[j].table_id); + try { + if( bp.get_reserved_dynamic_tables().find(table_name) != bp.get_reserved_dynamic_tables().end() ) { + if( used_dynamic_tables.find(table_name) == used_dynamic_tables.end()) { + used_dynamic_tables[table_name] = + load_dynamic_lookup(assignments, lookup_gates[i].constraints[j].table_id); + } + if(used_dynamic_tables[table_name].find(input_values) == used_dynamic_tables[table_name].end()) { + for (std::size_t k = 0; k < input_values.size(); k++) { + std::cout << input_values[k] << " "; + } + std::cout << std::endl; + std::cout << "Constraint " << j << " from lookup gate " << i << " from table " + << table_name << " on row " << selector_row << " is not satisfied." + << std::endl; + std::cout << "Offending Lookup Gate: " << std::endl; + for (const auto &constraint : lookup_gates[i].constraints) { + std::cout << "Table id: " << constraint.table_id << std::endl; + for (auto &lookup_input : constraint.lookup_input) { + std::cout << lookup_input << std::endl; + } + } + return false; + } + continue; + } + std::string main_table_name = table_name.substr(0, table_name.find("/")); + std::string subtable_name = table_name.substr(table_name.find("/") + 1, table_name.size() - 1); + + const auto &table = bp.get_reserved_tables().at(main_table_name)->get_table(); + const auto &subtable = bp.get_reserved_tables().at(main_table_name)->subtables.at(subtable_name); + + std::size_t columns_number = subtable.column_indices.size(); + + // Search the table for the input values + // We can cache it with sorting, or use KMP, but I need a simple solution first + bool found = false; + BOOST_ASSERT(columns_number == input_values.size()); + for (std::size_t k = 0; k < table[0].size(); k++) { + bool match = true; + for (std::size_t l = 0; l < columns_number; l++) { + if (table[subtable.column_indices[l]][k] != input_values[l]) { + match = false; + break; + } + } + if (match) { + found = true; + break; + } + } + if (!found) { + std::cout << "Input values:"; + for (std::size_t k = 0; k < input_values.size(); k++) { + std::cout << input_values[k] << " "; + } + std::cout << std::endl; + std::cout << "Constraint " << j << " from lookup gate " << i << " from table " + << table_name << " on row " << selector_row << " is not satisfied." + << std::endl; + std::cout << "Offending Lookup Gate: " << std::endl; + for (const auto &constraint : lookup_gates[i].constraints) { + std::cout << "Table id: " << constraint.table_id << std::endl; + for (auto &lookup_input : constraint.lookup_input) { + std::cout << lookup_input << std::endl; + } + } + return false; + } + } catch (std::out_of_range &e) { + std::cout << "Lookup table " << table_name << " not found." << std::endl; + std::cout << "Table_id = " << lookup_gates[i].constraints[j].table_id << " table_name " + << table_name << std::endl; + return false; + } + } + } + } + } + + for (const auto& i : used_copy_constraints) { + if (var_value(assignments, copy_constraints[i].first) != + var_value(assignments, copy_constraints[i].second)) { + std::cout << "Copy constraint number " << i << " is not satisfied." + << " First variable: " << copy_constraints[i].first + << " second variable: " << copy_constraints[i].second << std::endl; + std::cout << var_value(assignments, copy_constraints[i].first) << " != " + << var_value(assignments, copy_constraints[i].second) << std::endl; + return false; + } + } + return true; + } + + bool check_proof( + const crypto3::zk::snark::plonk_assignment_table &assignment, + const zk::snark::plonk_table_description &desc) { + + std::size_t Lambda = 9; + + typedef nil::crypto3::zk::snark::placeholder_circuit_params circuit_params; + using transcript_hash_type = nil::crypto3::hashes::keccak_1600<256>; + using merkle_hash_type = nil::crypto3::hashes::keccak_1600<256>; + using transcript_type = typename nil::crypto3::zk::transcript::fiat_shamir_heuristic_sequential; + using lpc_params_type = nil::crypto3::zk::commitments::list_polynomial_commitment_params< + merkle_hash_type, + transcript_hash_type, + 2 //m + >; + + using lpc_type = nil::crypto3::zk::commitments::list_polynomial_commitment; + using lpc_scheme_type = typename nil::crypto3::zk::commitments::lpc_commitment_scheme; + using lpc_placeholder_params_type = nil::crypto3::zk::snark::placeholder_params; + typename lpc_type::fri_type::params_type fri_params(1, std::ceil(log2(assignment.rows_amount())), Lambda, 2); + lpc_scheme_type lpc_scheme(fri_params); + + std::cout << "Public preprocessor" << std::endl; + typename nil::crypto3::zk::snark::placeholder_public_preprocessor::preprocessed_data_type lpc_preprocessed_public_data = + nil::crypto3::zk::snark::placeholder_public_preprocessor::process( + bp, assignment.public_table(), desc, lpc_scheme, 10); + + std::cout << "Private preprocessor" << std::endl; + typename nil::crypto3::zk::snark::placeholder_private_preprocessor::preprocessed_data_type lpc_preprocessed_private_data = + nil::crypto3::zk::snark::placeholder_private_preprocessor::process( + bp, assignment.private_table(), desc); + + std::cout << "Prover" << std::endl; + auto lpc_proof = nil::crypto3::zk::snark::placeholder_prover::process( + lpc_preprocessed_public_data, std::move(lpc_preprocessed_private_data), desc, bp, + lpc_scheme); + + // We must not use the same instance of lpc_scheme. + lpc_scheme_type verifier_lpc_scheme(fri_params); + + std::cout << "Verifier" << std::endl; + bool verifier_res = nil::crypto3::zk::snark::placeholder_verifier::process( + lpc_preprocessed_public_data.common_data, lpc_proof, desc, bp, verifier_lpc_scheme); + return verifier_res; + } + + circuit>& get_circuit() { + return bp; + } + + private: + std::size_t witnesses_amount; + std::size_t public_inputs_amount; + std::size_t constants_amount; + std::size_t rows_amount; + + static_info_args_storage_type static_info_args_storage; + + circuit> bp; + crypto3::zk::snark::plonk_assignment_table presets; + }; + + } // namespace bbf + } // namespace blueprint +} // namespace nil +#endif // CRYPTO3_BLUEPRINT_PLONK_BBF_CIRCUIT_BUILDER_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/components/hashes/poseidon/plonk/poseidon.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/components/hashes/poseidon/plonk/poseidon.hpp new file mode 100644 index 0000000000..854fa5b8ab --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/components/hashes/poseidon/plonk/poseidon.hpp @@ -0,0 +1,251 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Alexey Yashunsky +// Copyright (c) 2023 Dmitrii Tabalin +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for FRI verification array swapping component. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_BBF_COMPONENTS_HASHES_POSEIDON_PLONK_HPP +#define CRYPTO3_BLUEPRINT_BBF_COMPONENTS_HASHES_POSEIDON_PLONK_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + namespace components { + template + struct flexible_poseidon_raw_input { + using TYPE = typename FieldType::value_type; + + std::vector state; + }; + + template + class flexible_poseidon : public generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + + using component_type = generic_component; + constexpr static const std::size_t total_rounds_amount = + nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::total_rounds_amount; + constexpr static const std::size_t full_rounds_amount = + nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::full_rounds_amount; + constexpr static const std::size_t partial_rounds_amount = + nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::partial_rounds_amount; + constexpr static const std::size_t state_size = + nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::state_size; + constexpr static const std::size_t sbox_alpha = + nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::sbox_alpha; + constexpr static const std::size_t mina_version = + nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::mina_version; + + constexpr static const std::array< + std::array, state_size> + mds = nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::mds; + constexpr static const std::array< + std::array, total_rounds_amount> + round_constant = + nil::blueprint::bbf::components::detail::poseidon_constants< + FieldType>::round_constant; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + using typename generic_component::table_params; + using raw_input_type = typename std::conditional,std::tuple<>>::type; + +/* + public: + static nil::crypto3::zk::snark::plonk_table_description + get_table_description(std::size_t witness) { + constexpr std::size_t total_cells = (total_rounds_amount + 2) * state_size; + constexpr std::size_t public_inputs = 1; + constexpr std::size_t constants = 0; + std::size_t selectors = (total_cells + witness - 1) / witness; + nil::crypto3::zk::snark::plonk_table_description desc( + witness, public_inputs, constants, selectors); + desc.usable_rows_amount = selectors; + return desc; + } +*/ + public: + TYPE input[state_size]; + TYPE res[state_size]; + + static table_params get_minimal_requirements() { + constexpr std::size_t witness = 10; + constexpr std::size_t total_cells = (total_rounds_amount + 2) * state_size; + constexpr std::size_t public_inputs = 1; + constexpr std::size_t constants = 0; + std::size_t rows = (total_cells + witness - 1) / witness; + return {witness, public_inputs, constants, rows}; + } + + static std::tuple> form_input(context_type &context_object, raw_input_type raw_input) { + std::array input_state; + for(std::size_t i = 0; i < state_size; i++) { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + input_state[i] = raw_input.state[i]; + } + context_object.allocate(input_state[i],0,i,column_type::public_input); + } + return std::make_tuple(input_state); + } + + flexible_poseidon(context_type &context_object, + std::array input_state, + bool make_links = true) + : generic_component(context_object) { + TYPE X[total_rounds_amount + 1][state_size]; +// TYPE W[(total_rounds_amount + 1) * state_size]; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + X[0][0] = input_state[0]; + X[0][1] = input_state[1]; + X[0][2] = input_state[2]; + } + + allocate(X[0][0]); + allocate(X[0][1]); + allocate(X[0][2]); +/* + allocate(input_state[0]); + allocate(input_state[1]); + allocate(input_state[2]); +*/ + if (make_links) { + copy_constrain(X[0][0], input_state[0]); + copy_constrain(X[0][1], input_state[1]); + copy_constrain(X[0][2], input_state[2]); + } + + static_assert(state_size == 3); + + // Mina version + if (mina_version) { + // First full rounds + for (std::size_t i = 0; i < full_rounds_amount / 2; i++) { + for (std::size_t j = 0; j < state_size; j++) { + X[i + 1][j] = X[i][0].pow(sbox_alpha) * mds[j][0] + + X[i][1].pow(sbox_alpha) * mds[j][1] + + X[i][2].pow(sbox_alpha) * mds[j][2] + + round_constant[i][j]; + allocate(X[i + 1][j]); + } + } + + // Middle partial rounds + for (std::size_t i = full_rounds_amount / 2; + i < partial_rounds_amount + full_rounds_amount / 2; i++) { + for (std::size_t j = 0; j < state_size; j++) { + X[i + 1][j] = X[i][0].pow(sbox_alpha) * mds[j][0] + + X[i][1] * mds[j][1] + X[i][2] * mds[j][2] + + round_constant[i][j]; + allocate(X[i + 1][j]); + } + } + + // Last full rounds + for (std::size_t i = partial_rounds_amount + full_rounds_amount / 2; + i < total_rounds_amount; i++) { + for (std::size_t j = 0; j < state_size; j++) { + X[i + 1][j] = X[i][0].pow(sbox_alpha) * mds[j][0] + + X[i][1].pow(sbox_alpha) * mds[j][1] + + X[i][2].pow(sbox_alpha) * mds[j][2] + + round_constant[i][j]; + allocate(X[i + 1][j]); + } + } + } else { + // Version with original constants + // First full rounds + for (std::size_t i = 0; i < full_rounds_amount / 2; i++) { + for (std::size_t j = 0; j < state_size; j++) { + X[i + 1][j] = (X[i][0] + round_constant[i][0]).pow(sbox_alpha) * + mds[j][0] + + (X[i][1] + round_constant[i][1]).pow(sbox_alpha) * + mds[j][1] + + (X[i][2] + round_constant[i][2]).pow(sbox_alpha) * + mds[j][2]; + allocate(X[i + 1][j]); + } + } + // Middle partial rounds + for (std::size_t i = full_rounds_amount / 2; + i < partial_rounds_amount + full_rounds_amount / 2; i++) { + for (std::size_t j = 0; j < state_size; j++) { + X[i + 1][j] = (X[i][0] + round_constant[i][0]).pow(sbox_alpha) * + mds[j][0] + + (X[i][1] + round_constant[i][1]) * mds[j][1] + + (X[i][2] + round_constant[i][2]) * mds[j][2]; + allocate(X[i + 1][j]); + } + } + // Final full rounds + for (std::size_t i = partial_rounds_amount + full_rounds_amount / 2; + i < total_rounds_amount; i++) { + for (std::size_t j = 0; j < state_size; j++) { + X[i + 1][j] = (X[i][0] + round_constant[i][0]).pow(sbox_alpha) * + mds[j][0] + + (X[i][1] + round_constant[i][1]).pow(sbox_alpha) * + mds[j][1] + + (X[i][2] + round_constant[i][2]).pow(sbox_alpha) * + mds[j][2]; + allocate(X[i + 1][j]); + } + } + } + input[0] = X[0][0]; + input[1] = X[0][1]; + input[2] = X[0][2]; + res[0] = X[total_rounds_amount][0]; + res[1] = X[total_rounds_amount][1]; + res[2] = X[total_rounds_amount][2]; + } + }; + + } // namespace components + } // namespace bbf + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_BBF_COMPONENTS_HASHES_POSEIDON_PLONK_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/components/hashes/poseidon/plonk/poseidon_constants.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/components/hashes/poseidon/plonk/poseidon_constants.hpp new file mode 100644 index 0000000000..14e4dbffb0 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/components/hashes/poseidon/plonk/poseidon_constants.hpp @@ -0,0 +1,779 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2021 Mikhail Komarov +// Copyright (c) 2021 Nikita Kaskov +// Copyright (c) 2022 Alisa Cherniaeva +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BBF_PLONK_DETAIL_POSEIDON_CONSTANTS_HPP +#define CRYPTO3_BBF_PLONK_DETAIL_POSEIDON_CONSTANTS_HPP + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + namespace components { + namespace detail { + + template + struct poseidon_constants; + + template<> + struct poseidon_constants< + typename nil::crypto3::algebra::fields::pallas_base_field> { + using FieldType = nil::crypto3::algebra::fields::pallas_base_field; + constexpr static const std::size_t state_size = 3; + constexpr static const std::size_t full_rounds_amount = 55; + constexpr static const std::size_t partial_rounds_amount = 0; + constexpr static const std::size_t total_rounds_amount = + full_rounds_amount + partial_rounds_amount; + constexpr static const std::size_t sbox_alpha = 7; + constexpr static bool mina_version = true; + + constexpr static const std::array< + std::array, state_size> + mds = {{ + {{0x1a9bd250757e29ef4959b9bef59b4e60e20a56307d6491e7b7ea1fac679c7903_big_uint255, + 0x384aa09faf3a48737e2d64f6a030aa242e6d5d455ae4a13696b48a7320c506cd_big_uint255, + 0x3d2b7b0209bc3080064d5ce4a7a03653f8346506bfa6d076061217be9e6cfed5_big_uint255}}, + {{0x9ee57c70bc351220b107983afcfabbea79868a4a8a5913e24b7aaf3b4bf3a42_big_uint255, + 0x20989996bc29a96d17684d3ad4c859813115267f35225d7e1e9a5b5436a2458f_big_uint255, + 0x14e39adb2e171ae232116419ee7f26d9191edde8a5632298347cdb74c3b2e69d_big_uint255}}, + {{0x174544357b687f65a9590c1df621818b5452d5d441597a94357f112316ef67cb_big_uint255, + 0x3ca9263dc1a19d17cfbf15b0166bb25f95dffc53212db207fcee35f02c2c4137_big_uint255, + 0x3cf1fbef75d4ab63b7a812f80b7b0373b2dc21d269ba7c4c4d6581d50aae114c_big_uint255}}, + }}; + + constexpr static const std::array, total_rounds_amount> round_constant = {{ + {{0x2ec559cd1a1f2f6889fc8ae5f07757f202b364429677c8ff6603fd6d93659b47_big_uint255, + 0x2553b08c788551bfe064d91c17eb1edb8662283229757711b2b30895f0aa3bad_big_uint255, + 0x25a706fb0f35b260b6f28d61e082d36a8f161be1f4d9416371a7b65f2bfafe4e_big_uint255}}, + {{0x37c0281fda664cc2448d0e7dd77aaa04752250817a945abeea8cfaaf3ee39ba0_big_uint255, + 0x140488321291998b8582eaceeb3fa9ca3980eb64a453573c5aaa2910405936b6_big_uint255, + 0x3a73fe35b1bdd66b809aad5eab47b5c83b0146fd7fc632dfb49cd91ae1169378_big_uint255}}, + {{0x21b7c2b35fd7710b06245711f26c0635d3e21de4db10dd3a7369f59f468d7be6_big_uint255, + 0x1803a068d25fef2ef652c8a4847aa18a29d1885e7bf77fd6a34d66536d09cad7_big_uint255, + 0x291de61c5e6268213772cf7e03c80c2e833eb77c58c46548d158a70fbbd9724b_big_uint255}}, + {{0x230043a0dc2dfab63607cbe1b9c482fdd937fdefecc6905aa5012e89babead13_big_uint255, + 0x218af77a05c502d3fa3144efcf47a0f2a0292498c10c6e2368565674e78764f4_big_uint255, + 0x223e2d94c177d27e071d55729d13a9b216955c7102cc9a95ea40058efb506117_big_uint255}}, + {{0x2a18257c15ad9b6fe8b7c5ad2129394e902c3c3802e738f24ce2f585ae5f6a38_big_uint255, + 0xa6f7ba75f216403d2e4940469d199474a65aa5ef814e36400bddef06158dcf8_big_uint255, + 0x169be41c6227956efef5b4cdde65d00d5e04fe766178bdc731615c6e5b93e31e_big_uint255}}, + {{0x2e28f50a9a55d2e91774083072734544417e290a1cfebc01801b94d0728fe663_big_uint255, + 0xfdedf8da8654a22831040cfc74432464b173ee68628fd90498480b9902f2819_big_uint255, + 0x46a3ed9863d2d739dd8bc9e90a746fda1197162d0a0bec3db1f2f6042cf04e2_big_uint255}}, + {{0x219e08b460c305b428670bacab86ac1e9458075778d35c3619ae7ba1f9b2ed76_big_uint255, + 0x38bb36a12ebcec4d4e8728eb43e3f12a6e33b1ffa1463379018d4e12424e62ca_big_uint255, + 0x1e9aa3fe25d116ccfbd6a8fccdae0aa9bc164a03ab7e951704ee9a715fbedee6_big_uint255}}, + {{0x30f33ed70da4c2bfb844ff1a7558b817d1ec300da86a1694f2db45047d5f18b_big_uint255, + 0x282b04137350495ab417cf2c47389bf681c39f6c22d9e370b7af75cbcbe4bb1_big_uint255, + 0x9b1528dea2eb5bd96905b88ff05fdf3e0f220fe1d93d1b54953ac98fec825f0_big_uint255}}, + {{0x30083dbbb5eab39311c7a8bfd5e55567fa864b3468b5f9200e529cda03d9ef71_big_uint255, + 0x17eace73cf67c6112239cbf51dec0e714ee4e5a91dbc9209dc17bbea5bcd094_big_uint255, + 0x37af1de8f5475ba165b90f8d568683d54e215df97e9287943370cf4118428097_big_uint255}}, + {{0x16ff7592836a45340ec6f2b0f122736d03f0bcb84012f922a4baa73ea0e66f51_big_uint255, + 0x1a5985d4b359d03de60b2edabb1853f476915febc0e40f83a2d1d0084efc3fd9_big_uint255, + 0x255a9d4beb9b5ea18ab9782b1abb267fc5b773b98ab655fd4d469698e1e1f975_big_uint255}}, + {{0x34a8d9f45200a9ac28021712be81e905967bac580a0b9ee57bc4231f5ecb936a_big_uint255, + 0x979556cb3edcbe4f33edd2094f1443b4b4ec6c457b0425b8463e788b9a2dcda_big_uint255, + 0x2a4d028c09ad39c30666b78b45cfadd5279f6239379c689a727f626679272654_big_uint255}}, + {{0xc31b68f6850b3bd71fe4e89984e2c87415523fb54f24ec8ae71430370154b33_big_uint255, + 0x1a27ca0b953d3dba6b8e01cf07d76c611a211d139f2dff5ac023ed2454f2ed90_big_uint255, + 0x109ae97c25d60242b86d7169196d2212f268b952dfd95a3937916b9905303180_big_uint255}}, + {{0x3698c932f2a16f7bb9abac089ec2de79c9965881708878683caf53caa83ad9c4_big_uint255, + 0x3c7e25e0ac8fba3dc1360f8a9a9fa0be0e031c8c76a93497b7cac7ed32ade6c0_big_uint255, + 0x2fc5023c5e4aed5aa7dfca0f5492f1b6efab3099360ec960237512f48c858a79_big_uint255}}, + {{0x2c124735f3f924546fb4fdfa2a018e03f53063d3a2e87fd285ba8d647eda6765_big_uint255, + 0x12c875c9b79591acf9033f8b6c1e357126c44b23f3486fbee0d98340a3382251_big_uint255, + 0x3cda935e895857d39a7db8476aeda5a5131cb165a353073fd3e473fd8855528d_big_uint255}}, + {{0x218eb756fa5f1df9f1eb922ef80b0852588779a7368e3d010def1512815d8759_big_uint255, + 0x23bcf1032957015ef171fbb4329bca0c57d59885522f25f4b082a3cf301cfbc6_big_uint255, + 0x17474c3b6a9bc1057df64b9e4d62badbc7f3867b3dd757c71c1f656205d7bceb_big_uint255}}, + {{0x19826c0ee22972deb41745d3bd412c2ae3d4c18535f4b60c9e870edffa3d550_big_uint255, + 0x30bcb17dfd622c46f3275f698319b68d8816bed0368ded435ed61992bc43efa9_big_uint255, + 0x3bd816c214c66410229cfbd1f4a3a42e6a0f82f3c0d49b09bc7b4c042ff2c94b_big_uint255}}, + {{0x8943ec01d9fb9f43c840757738979b146c3b6d1982280e92a52e8d045633ea1_big_uint255, + 0x2670bf8c01822e31c70976269d89ed58bc79ad2f9d1e3145df890bf898b57e47_big_uint255, + 0xdd53b41599ae78dbd3e689b65ebcca493effa94ed765eeec75a0d3bb20407f9_big_uint255}}, + {{0x68177d293585e0b8c8e76a8a565c8689a1d88e6a9afa79220bb0a2253f203c3_big_uint255, + 0x35216f471043866edc324ad8d8cf0cc792fe7a10bf874b1eeac67b451d6b2cf5_big_uint255, + 0x1fd6efb2536bfe11ec3736e7f7448c01eb2a5a9041bbf84631cc83ee0464f6af_big_uint255}}, + {{0x2c982c7352102289fc1b48dafcd9e3cc364d5a4324575e4721daf0af10033c67_big_uint255, + 0x352f7e8c7662d86db9c722d4d07778858771b832af5bb5dc3b13cf94851c1b45_big_uint255, + 0x18e3c0c1caa5e3ed66ee1ab6f55a5c8063d8c9b034ae47db43435147149e37d5_big_uint255}}, + {{0x3124b12deb37dcbb3d96c1a08d507523e30e03e0919559bf2daaab238422eade_big_uint255, + 0x143bf0def31437eb21095200d2d406e6e5727833683d9740b9bfc1713215dc9a_big_uint255, + 0x1ebee92143f32b4f9d9a90ad62b8483c977480767b53c71f6bde934a8ef38f17_big_uint255}}, + {{0xff6c794ad1afaa494088d5f8ee6c47bf9e83013478628cf9f41f2e81383ebeb_big_uint255, + 0x3d0a10ac3ee707c62e8bdf2cdb49ac2cf4096cf41a7f214fdd1f8f9a24804f17_big_uint255, + 0x1d61014cd3ef0d87d037c56bdfa370a73352b95d472ead1937bed06a31801c91_big_uint255}}, + {{0x123e185b2ec7f072507ac1e4e743589bb25c8fdb468e329e7de169875f90c525_big_uint255, + 0x30b780c0c1cb0609623732824c75017da9799bdc7e08b527bae7f409ebdbecf2_big_uint255, + 0x1dfb3801b7ae4e209f68195612965c6e37a2ed5cf1eeee3d46edf655d6f5afef_big_uint255}}, + {{0x2fdee42805b2774064e963c741552556019a9611928dda728b78311e1f049528_big_uint255, + 0x31b2b65c431212ed36fdda5358d90cd9cb51c9f493bff71cdc75654547e4a22b_big_uint255, + 0x1e3ca033d8413b688db7a543e62ac2e69644c0614801379cfe62fa220319e0ef_big_uint255}}, + {{0xc8ef1168425028c52a32d93f9313153e52e9cf15e5ec2b4ca09d01730dad432_big_uint255, + 0x378c73373a36a5ed94a34f75e5de7a7a6187ea301380ecfb6f1a22cf8552638e_big_uint255, + 0x3218aeec20048a564015e8f221657fbe489ba404d7f5f15b829c7a75a85c2f44_big_uint255}}, + {{0x3312ef7cbbad31430f20f30931b070379c77119c1825c6560cd2c82cf767794e_big_uint255, + 0x356449a71383674c607fa31ded8c0c0d2d20fb45c36698d258cecd982dba478c_big_uint255, + 0xcc88d1c91481d5321174e55b49b2485682c87fac2adb332167a20bcb57db359_big_uint255}}, + {{0x1defccbd33740803ad284bc48ab959f349b94e18d773c6c0c58a4b9390cc300f_big_uint255, + 0x2d263cc2e9af126d768d9e1d2bf2cbf32063be831cb1548ffd716bc3ee7034fe_big_uint255, + 0x111e314db6fb1a28e241028ce3d347c52558a33b6b11285a97fffa1b479e969d_big_uint255}}, + {{0x27409401e92001d434cba2868e9e371703199c2372d23ef329e537b513f453e_big_uint255, + 0x24a852bdf9cb2a8fedd5e85a59867d4916b8a57bdd5f84e1047d410770ffffa0_big_uint255, + 0x205d1b0ee359f621845ac64ff7e383a3eb81e03d2a2966557746d21b47329d6e_big_uint255}}, + {{0x25c327e2cc93ec6f0f23b5e41c931bfbbe4c12da7d55a2b1c91c79db982df903_big_uint255, + 0x39df3e22d22b09b4265da50ef175909ce79e8f0b9599dff01cf80e70884982b9_big_uint255, + 0x9b08d58853d8ac908c5b14e5eb8611b45f40faaa59cb8dff98fb30efcdfaa01_big_uint255}}, + {{0x1ece62374d79e717db4a68f9cddaaf52f8884f397375c0f3c5c1dbaa9c57a0a6_big_uint255, + 0x3bd089b727a0ee08e263fa5e35b618db87d7bcce03441475e3fd49639b9fa1c1_big_uint255, + 0x3fedea75f37ad9cfc94c95141bfb4719ee9b32b874b93dcfc0cc12f51a7b2aff_big_uint255}}, + {{0x36dfa18a9ba1b194228494a8acaf0668cb43aca9d4e0a251b20ec3424d0e65cd_big_uint255, + 0x119e98db3f49cd7fcb3b0632567d9ccaa5498b0d411a1437f57c658f41931d0c_big_uint255, + 0x1100b21c306475d816b3efcd75c3ae135c54ad3cc56ca22abd9b7f45e6d02c19_big_uint255}}, + {{0x15791f9bbea213937208c82794eb667f157f003c65b64aa9800f4bbee4ea5119_big_uint255, + 0x1adbeb5e9c4d515ecfd250ebee56a2a816eb3e3dc8d5d440c1ab4285b350be64_big_uint255, + 0x1fbf4738844a9a249aec253e8e4260e4ab09e26bea29ab0020bf0e813ceecbc3_big_uint255}}, + {{0x3418a929556ec51a086459bb9e63a821d407388cce83949b9af3e3b0434eaf0e_big_uint255, + 0x9406b5c3af0290f997405d0c51be69544afb240d48eeab1736cda0432e8ff9e_big_uint255, + 0x23ece5d70b38ccc9d43cd923e5e3e2f62d1d873c9141ef01f89b6de1336f5bc7_big_uint255}}, + {{0x1852d574e46d370a0b1e64f6c41eeb8d40cf96c524a62965661f2ef87e67234d_big_uint255, + 0xa657027cce8d4f238ea896dde273b7537b508674a366c66b3789d9828b0ce90_big_uint255, + 0x3482f98a46ec358108fbbb68fd94f8f2baa73c723baf21922a850e45511f5a2d_big_uint255}}, + {{0x3f62f164f8c905b335a6cbf76131d2430237e17ad6abc76d2a6329c1ec5463ee_big_uint255, + 0x7e397f503f9c1cea028465b2950ea444b15c5eab567d5a69ea2925685694df0_big_uint255, + 0x405f1fc711872373d6eb50a09fbfb05b2703ae0a0b4edb86aedb216db17a876_big_uint255}}, + {{0xbe0848eb3e09c7027110ad842c502441c97afa14a844406fcfec754a25658c1_big_uint255, + 0x26b78788fd98ac020bac92d0e7792bb5ffed06b697d847f61d984f905d9ba870_big_uint255, + 0x38fd5318d39055c82fef9bdd33315a541c0ec4363e6cc0687005871355dfa573_big_uint255}}, + {{0x380bd03b840c48c8ba3830e7cace72f91a5002218c617294e8c8bc687d5216de_big_uint255, 0x2c6e57ddc1d7c81a0299ed49c3d74759416bc8426f30e2af5622895c531b4e1c_big_uint255, + 0x11d3a81b262fc76ef506ee6d88e5991d0de8cb9dd162d97c58b175e3bc4584f3_big_uint255}}, + {{0x9b6b283ebaf45fbb1e448969ace9be62adf67ddf58614925741deb6a1ba7def_big_uint255, + 0x15d5095164c885763fa83cdf776d436382821a17bc5563a5b6f6dfcdac504ade_big_uint255, + 0x3427fdbfca3cea23063eb138c5055c6cad9c4252b23d12c12293308eff7d9124_big_uint255}}, + {{0x272f12e731077b74317ef2543c33b86194db1da5f6a7e1eee0656672c81685fe_big_uint255, + 0x5323f85deb8c07c193c37a73d76f6114967913a2bdce11995f183e769f42967_big_uint255, + 0x3d5ce415ecae4ba42b417ea3a501b44694f46efddff2fcca952b097f3852d3d8_big_uint255}}, + {{0xe8ec18c7b52c514d42047f1f0b2a90cb8c0c7391cf9479cd7fd5bfe1d3db8f2_big_uint255, + 0x1591c865ea7065d54304519f8bb268bddbeaf3afae54edcd01a833ed0a9ef1a_big_uint255, + 0x3eddbeeee5eca5deee4bf1789c435e1241e0d71186d8f0f62d74729dfc3119fb_big_uint255}}, + {{0x23691c7009b9283b268766e8d491716d3c1993e6ecf458def8f762af3e355707_big_uint255, + 0x26cdab2c837ebeac5bea4be1d6f0488034907374d81a61a34f1c4db397d4c09b_big_uint255, + 0x2d2206730664d58be0676dad1fee0e990c264a7410a2cdb6b55653c1df72ef56_big_uint255}}, + {{0x2bb74bb185372334a4ef5f6d18e2ece54086e62b04985dd794b7117b0be9217f_big_uint255, + 0x366250fe928c45d8d5aa35f0a142754907ff3c598410199b589b28cd851b2204_big_uint255, + 0x1868f8118482c6b4a5a61a81c8aaca128953179c20f73a44022d9976bdc34af1_big_uint255}}, + {{0xb7901c670e1d75d726eb88d000950b3c963f0f7a6ca24994bdc07ae2f78b4d3_big_uint255, + 0x32c4bd8ab70e1f25af77af57dd340c8e6c8a101dfc5e8dd03314566db90b870_big_uint255, + 0x1ce36db31fe6ea3cd9308db9aa43a8af5c41a8f0a6509bfe00f0e7b486c0ab8a_big_uint255}}, + {{0x26596ea9e1915e53da3479e9d13c3c920505e2449e325810ff6ca855fe4b7c6e_big_uint255, + 0x30f296a269868a7fca8f5b1e269c0116304df31729559a270e713509d3a6d5dc_big_uint255, + 0x2588961eff7897d87eb6ac72350ef9f52640647cbd23136919a994dfd1979d5_big_uint255}}, + {{0x16a49e69721e80690d41e06229e9bc2dbaf9a2abf4b89388db2485595409d62b_big_uint255, + 0x3d7aca02c051fcad8073cfd67210cd423a31888afc4a444d9d3adf3d6c5da7bf_big_uint255, + 0x299bd48a740b7790075268312ab8072c72421de5a6437fa5e25431ef951847b4_big_uint255}}, + {{0x11a69b867d9ea22ec1b2f28e96617129e36eefaea9e8126bdc6a42b99072902b_big_uint255, + 0x25bc1af391f3c1f2284a95da92b5883d1b3a40794b2358b2e7a70fca22da64ce_big_uint255, + 0x361ab3843f4d8ddadede39d82bb1a8109f89b6d9aa117b8f365de43895de0baa_big_uint255}}, + {{0x38ef3ab5b61c117a3465a017a9c8ba4c227659b41fdf145206d5c960f49dd45b_big_uint255, + 0x3992f83f26143dbdbd335604a1a14daf238ae43c249783f694feaf560aaae20f_big_uint255, + 0x350287977eb71c81b10ecd039aad99cfa9ed84a04301cb30869e1dc7fa1dc638_big_uint255}}, + {{0x3afb5bc126020586dcccba32dd054cd9a3f3b834ca9678d6802c48b1da97d6ed_big_uint255, + 0x172b7c2d8e7e4b06d183a2575b790749d0970c54966407fa8f59072c729de671_big_uint255, + 0x2eb53fe3a278688a70494569e54a0f0d269935aec6c897bef4d368c1f67d57e4_big_uint255}}, + {{0x375ae56b8d9310d553ed77d406dedc3f0393e5a321b71caee6a5bb7078b5035_big_uint255, + 0x1d49a0d53bc2993cbf1fb5d1da9bb76fe46a7031d5e5d43fadbf54bc17c1ef38_big_uint255, + 0x132d17b87cab6d707ddfa1f01df1724ad37957e989c44f1ff71426367f953160_big_uint255}}, + {{0x62da5280948d8c6c4acc7e6a1aa421f0f9ec179a44146750060be4be6755f85_big_uint255, + 0xa4b4d5cde54a974ea4e57ee4132d2ab2510c300f21930d6bbbf211d1add80f9_big_uint255, + 0x3356f1fbeac493ccab752b70bbed821ce49965c19284d7aacd78fbf3ff864e91_big_uint255}}, + {{0x42721e8a9cc32557851feb0e0190c5dfbf4cb1b8f47d37e7e653ec6ff8a4059_big_uint255, + 0x53d9b2633fff31ca4fc5724ce6b4422318128cdf01897d321e86f47cdf748b1_big_uint255, + 0x267d96caeafde5dbd3db1f0668b09ccd532a22f0205494716a786219fb4c801c_big_uint255}}, + {{0x39316997737610193c3f9ffcfd4e23d38aac12cd7b95b8d256d774101650a6ca_big_uint255, + 0x191e377462986563fdabf9b23529f7c84c6b200b9101b3a5096bca5f377981fb_big_uint255, + 0x20f89af9722f79c860d2059a0ec209cf3a7925ad0798cab655eca62fe73ff3d9_big_uint255}}, + {{0x1ca568aeddb2ef391a7c78ecf104d32d785b9ca145d97e35879df3534a7d1e0b_big_uint255, + 0x25de9ba0a37472c3b4c0b9c3bc25cbbf78d91881b6f94ee70e4abf090211251c_big_uint255, + 0x3393debd38d311881c7583bee07e605ef0e55c62f0508ccc2d26518cd568e1ef_big_uint255}}, + {{0x38df2fd18a8d7563806aa9d994a611f642d5c397388d1dd3e78bc7a4515c5b1_big_uint255, + 0x5c6503ff1ee548f2435ad9148d7fb94c9222b0908f445537a6667047f6d501c_big_uint255, + 0x104c88d6d0682d82d3d664826dc9565db101a220aa8f90572eb798468a82a2ab_big_uint255}}, + {{0x2caad6108c09ee6aee7851b4a2d2d3b7c3ca3c56a80003c8471f90bfa4ac628b_big_uint255, + 0xa57dbd4c327826c8a97bc7285f94bcddb966177346f1792c4bd7088aa0353f3_big_uint255, + 0x3c15552f9124318b8433d01bb53ba04ba1cc9eb91d83b918e32fea39fbe908fa_big_uint255}}, + {{0xe10c10cbbe1717a9441c6299c4fc087c222208bd4fa8f3be66d2075f623b513_big_uint255, + 0x1e8b254cbff2c92a83dff1728c81dd22a9570f590e497cb2d640042cb879a930_big_uint255, + 0x1812dbcd70c440610057bbfdd0cc4d31d1faf5786419b53841c4adc43f2b2352_big_uint255}}, + }}; + }; + + template<> + struct poseidon_constants< + typename nil::crypto3::algebra::fields::vesta_base_field> { + using FieldType = nil::crypto3::algebra::fields::vesta_base_field; + constexpr static const std::size_t state_size = 3; + constexpr static const std::size_t full_rounds_amount = 55; + constexpr static const std::size_t partial_rounds_amount = 0; + constexpr static const std::size_t total_rounds_amount = + full_rounds_amount + partial_rounds_amount; + constexpr static const std::size_t sbox_alpha = 7; + constexpr static bool mina_version = true; + + constexpr static const std::array< + std::array, state_size> + mds = {{ + {{ + 0x3e28f7dd17f47a7e304a54d377dd7aeead6b92027d60baf300246cf023dd594e_big_uint255, + 0x30db06abb696fccb92b28ac214f4893d3fd84b3d4a9018754975e24477c32600_big_uint255, + 0x174110bc1b058c6016ff5e8152ab3ffb6e2e6c4d01e66aba302659c51b7f563a_big_uint255, + }}, + {{ + 0x12d36fa83503146980c05a1d48bcd50d2e9d4390e353a158a0fe387e2b4aeb0c_big_uint255, + 0x2ab17c8eb369bea76e9f0c385e8bafc71536bedc8e06d06fd65c1670e94d9c55_big_uint255, + 0xcc915328165c13986af127e108b9e5d9a60c5dc92e3e7636b8c3da5b4a8537_big_uint255, + }}, + {{ + 0x4d9a6d270696688eb4346153b380c613a3dcaf0fb5a1e8380409ae0a143d31b_big_uint255, + 0x2a805eee3317c8bae1f7d15abe4d27fee5fabcf9a3334d18b1932a33774c324_big_uint255, + 0x19b092e9c6dffd1eb1b6df2dbc00bb2283b9a787273dcbad9b8d89cd502b7bbd_big_uint255, + }}, + }}; + + constexpr static const std::array< + std::array, + total_rounds_amount> + round_constant = { + { + {{ + 0x590ef2a14ba3cef7e8f93a6dde4d481057d5d0547f6f09341b6b8be19c00ee6_big_uint255, + 0x77faa77ed78ff8b695859df34db5157f6b491567f5f382a8fce538f0e5ffe6f_big_uint255, + 0x3e54b7c94955c8994ed16ec9950d59aca4c9b6e419ef4935682528c2eba2de50_big_uint255, + }}, + {{ + 0x37d991dc8d4de3912355745c7d78f8b04516b14d30e29324bb5dd075ca0f0c1d_big_uint255, + 0xc0614dd1cff6c6817aff09d82ef828e80caed4da023823088fd021020f81f0e_big_uint255, + 0x3335e335a3fed44842359528b3e88e1824a173da819d7ee6905e82eed054243_big_uint255, + }}, + {{ + 0xb2202aa54d42f4f07693766723b9624c9fca4d33a2b9ee40f1c809a15a48a1d_big_uint255, + 0x290253e0e1d2c72b32a5b272137a0892b5934b0b8f26b4fc25ea00d63a70e9df_big_uint255, + 0x3e99873e73025d7c8b71fd209d13dba7a1021013f0815ea33a42ae94b63d00f3_big_uint255, + }}, + {{ + 0x164682f55ec314f639f5f8062a4ddf11ed80d5822591a22ff54f340d90165d85_big_uint255, + 0x309ba21093c9d04c81bd5273ad1064e1bd9067312d3269dddadf74c2eb1d3e01_big_uint255, + 0x159e72bb030cb8994b2eac1d4ee7d0f06b0b092e7611d460605b3d8c60a274d9_big_uint255, + }}, + {{ + 0xd743dbfc6f3c833ce2ef4956bead3c118fd3198652038781903ac929218fdd6_big_uint255, + 0x18cb5a9230eb74045ede834ac6dd129bd2a0462dca1d96d167b9be0e1e96a688_big_uint255, + 0x2d82f85fc222b215902d61c85c968b39759d6c2e9aa0e11fd08881bfae311e66_big_uint255, + }}, + {{ + 0x2920828be5972cb8ff8023386a90a837bbfcca99be240137f7d211ecb72521e6_big_uint255, + 0x3101774e1c3d72d010efb29c16c476e988bdb47321af3f82e05cc9c6b0360853_big_uint255, + 0x327b4e6353c099e41a8ffab9103996b9d29d07da0f1a191aa6fb55c0720c6f54_big_uint255, + }}, + {{ + 0x71c29018dd48d5c557379ea9d4afd80b92788ed509ced6bac47a65ba8b475c_big_uint255, + 0x25efdeef6c5ad56834b24cfe03d57360b4335ec902c78ee9348ebaceab726038_big_uint255, + 0x109ffe5cd918fcd7da7fdb40d32ac406f453874fda431c35c9e35601bcf708e9_big_uint255, + }}, + {{ + 0x1f4de5d78b4378e0eca49ed94999d8bc91489fadfd896c8affbaa6e2654d18bf_big_uint255, + 0x173185e1eaad0664ba1c01b8e417a4422c22a43d622c5df98c11481e205e499e_big_uint255, + 0x161a0e8b31a6fd42727dc0a37ae4f715683af35873bd37e78e10abcb0e21fabd_big_uint255, + }}, + {{ + 0x3decab3f42934acc644cc227315ecd6bcee79e5d92dc686823f60e6a3c40a7cd_big_uint255, + 0x29d7541d2a4fcdf9c7f144ce1e957a5e5c6d5d064618416817d0ad39708b2807_big_uint255, + 0x1d0525558685977d321fe86c05f462ae2e569e6d202bd5c62b0815320454114a_big_uint255, + }}, + {{ + 0x27d1aec0ccc80f71d09d2a9c0b76ee5fe9a87516f0e691a9f5fba360cb79f32_big_uint255, + 0x1c28ed68159e54df8296e654b0c1b5872de41557b7b02adc256dcc1600229ba8_big_uint255, + 0x15c9cbe29bf4e7d8bae22dd2213c86724e9944ea4b9e34b6681beb1b0972215e_big_uint255, + }}, + {{ + 0xd479e19db4686f5cb1ef9a8331a1ab680c5d3770e9a9a8a7a6ac58f8006c38a_big_uint255, + 0x3494f6ecf12d5c3d758c5380652154e26f7f3c888d362ea512da8dc265fc32b0_big_uint255, + 0x37ed9343bcc46adb4300f3d8cb88c311383061710836351ded0a146de837966_big_uint255, + }}, + {{ + 0x35548be14e1cbcbd7d2c0e8c4a95e5fc2893daba34197ef41c350ae7072cde4e_big_uint255, + 0x34e58327efe8d41b81b66b6c3fad424b2ff9008392909bb90eb10f08462b998b_big_uint255, + 0xf55c1223abf50500c4ac4103f679dcfea4eebb368cf64ef3a63ee27146846f_big_uint255, + }}, + {{ + 0x11dd4ab1734f7069498cc390a41b7de375d8968cec91b5c74cef9812e8ee7ce7_big_uint255, + 0x1e344f255d7c5e537439e75f9c4ea64dd1fda1b0988e5c83626055859369b43c_big_uint255, + 0x147db9afad2d2f7c4249357587faba99a6a38da16fe9ba74ef2f3fc5a0878f44_big_uint255, + }}, + {{ + 0x31774ce29d00f566bd499f181517df231be7205c05e7527d71a1c89cb0e841a7_big_uint255, + 0x32bdf60a6685665871f654169996f508be8710c99f3fa6f44a7bc4d2c25fbfd8_big_uint255, + 0x2f567f84ec13720611900c4b9e8303f04c8cc5c57daa4d95d9ee009514205e65_big_uint255, + }}, + {{ + 0x2dbd279621e591da57f54459f4160dde2f5c78e478d20f2f4763832e013bc07f_big_uint255, + 0x1275fb5ba53b7d2b5322e63f09a48026d684369c8e12241a808085a78ab3a369_big_uint255, + 0x1dd0beba925fe1df13f732b03287cad943569d62ec9059afc2c8120655e97d78_big_uint255, + }}, + {{ + 0xa37d78e392a5c8441f98e9dbd51a9151e78fb877885ecb885b0834c50cfea4d_big_uint255, + 0x1ebb7e2592122cd16d27e13410b2b48d520d8e99d38c1d86af0ac13565dfeb88_big_uint255, + 0x24a6454b0a69c59916d64f532b56226f8d49969432b7d0efc675f599c3bdb64f_big_uint255, + }}, + {{ + 0x269668b3e7835df2f85b82e9ef8647c43205e799135ce669256bf55f07448209_big_uint255, + 0x15c87375d4514bbdddbfd84e51f246446f1b16bb58bd4bd9fa2ff57e6aa66057_big_uint255, + 0x11ce62bbe1242334c260a67817be908a9422d9b9c6ee96c00772fcc8fc501db6_big_uint255, + }}, + {{ + 0x20348b7d6b381bfd3ac923d60b965086d281d8a654ad5f3210d277789641fe98_big_uint255, + 0x1398d090fd1144d1e84798e3a0efa942abfe650947e4a3cfa409ff14b541fae9_big_uint255, + 0x2461a1a2d6e3a0b2e5185ae6c844fe2a3b2d85dfb1cf891efc79ae80dd776bed_big_uint255, + }}, + {{ + 0x3e1f1de94c4af008188ba5eaef1da9ab9792ce54eda56bb5a519a65cd808885b_big_uint255, + 0x1dee6ead07fbc0fe883f4d397994d75ba3c4f90720e74ae2da13066bc3a7dc3b_big_uint255, + 0x287d06396bcb63555cb2ff408ea075cf402b10a3c608043d0cf2e3685ec6e2ad_big_uint255, + }}, + {{ + 0x36d84c953d584607478da6183dc4da71bdbf737d45fb57d5a53badc123ae071c_big_uint255, + 0x24c8fd13d2687a9f90c61da26823d4934b350cfa488d528482399e106a70ac74_big_uint255, + 0x52e052a6a493457c9476ccc4fd9924e5c7247b98e58a3cfa688c0f8314bea68_big_uint255, + }}, + {{ + 0x2fd32bae8a40ab498f6ba290733bb82504de1be782c1cdf039e2fbc843a01e52_big_uint255, + 0x4e8e7d3413c8c8ccfe154dc51f31c7682627c71fa4b50daab27f2a4d2623ea6_big_uint255, + 0x20c16d0097cebeb385508b606487baaf3bad515ba8a0b977f15cb50239418e38_big_uint255, + }}, + {{ + 0x34f1df6035aac75204368125b0c4cec107e2f9eb0005517d26d6113e1f366271_big_uint255, + 0x375973b59ed7b4bdb33642d20e6364f37a942f9018f6bca5abc10705481425e0_big_uint255, + 0x269e8c978803e51d43439b7c18c4260e819e09e7d8c8d38706463bbb811c698c_big_uint255, + }}, + {{ + 0x21be1913f874f3edb88a1f60cd157fcb76ff20b4eb139aae205b5a2764098782_big_uint255, + 0x37a0a8ba83db884f721c25027d188c7ab7c7840b7860675b33e1c93e4023927f_big_uint255, + 0x56d0e67fde779b7be5f308a3ce119e23e0503e6dabdbbd5189bb44dc6a6f0a4_big_uint255, + }}, + {{ + 0x144723436a329da5644cce96fee4952b066092c36bd12838b4ffd4283cfe82c4_big_uint255, + 0xec0b5f14ba50aa2b022d06fbb920a2aafb465b8c7f81fc119371a4cbb6acff7_big_uint255, + 0x685de18d9a346a35c44a2a4ac7283d6fe2e4a9dc058bd537700bc2495271721_big_uint255, + }}, + {{ + 0x178dcb74b546adea41afd5d93ef564cb3adb0ef5200201daea0faa5026bb8cbc_big_uint255, + 0x1c1dcb1ef6cf5f036ae0030bf78f1643c439843959dd74fa28ea3663735cc923_big_uint255, + 0xcfae6c99994c5f702cba3b32a4e38f3764207bfe7cd9bf577633b41843ea138_big_uint255, + }}, + {{ + 0x2838a02558716d2b49c06fb34c49cd820ec71e861caa935f4a303e42030ae3df_big_uint255, + 0x2c1944f3ec2852ed6b50fbc4abbc8f284797b36a23b321d2763ef48b1a5a0212_big_uint255, + 0x30a218acd109f04657954e82f9faccc477731f4a954cf8ac12d15ebd450e9dcb_big_uint255, + }}, + {{ + 0x2488defa4553fa5bd5afbb5fd28a1e99c585c5f541c6242e702215b2212c1d23_big_uint255, + 0x3d0c9d7282245c776daa1655697fa879e470a26fcbb3bea62fa8ff32a4f04e50_big_uint255, + 0x33aac46524f32f3556ed16a0912ef27482c2afcacbfb99ced98394b6c0e3765f_big_uint255, + }}, + {{ + 0x1858a5f543ab0a70cb3957e0884b146b42cc3863fba4e034145ab09cc77d428d_big_uint255, + 0x2d9d6fae68eff2e79396617207e28dba3d793b1e3739d30e9e9b10644e9f99cd_big_uint255, + 0x1747fab074b37cc1ca7dbf7d6dc136740f5d26e30319b3577fc8987f1247caae_big_uint255, + }}, + {{ + 0x38f905db5128f24e498e36a84df5a58ed3c0b0ed8f39336eb792cb634f86b87_big_uint255, + 0xfffe42ce4a87a0b3a9ebe7eedf16c0cdb29c959b6e594faa69c0727c6e825f_big_uint255, + 0x314c3090cd0a465da95afd515c0771703e4ee2a8eabe8fa405daf8bd49bce458_big_uint255, + }}, + {{ + 0x3e5fb71d9071c658c39fe64392e90bac65bdaf8f723b6790cce7dd7440ce06aa_big_uint255, + 0x3e9fe7b8fd0aaa379fa7be0dbd64309607cc5b00474ef6670370e631902e98cd_big_uint255, + 0x33ee4f76ff95bd735ec602ee6f4d1664caec27a7c435ead3b4c8df6cb51f010e_big_uint255, + }}, + {{ + 0x1670c2080f2965bed3f49db0b63aef5f562b347235645b921c0132b01cc82130_big_uint255, + 0x210565224e2ee64dd479be3a969dc30c65933352ba9b2271a0942bf1bf485743_big_uint255, + 0x9a7c6dd48dfbf50b13055b30fe85f934be9518b8af074b88f9de4b1df689616_big_uint255, + }}, + {{ + 0x1f9116811eaadf677e6cb50fb59ce0fab11fa9f0ddf1432403610e1932a7aa1c_big_uint255, + 0x19b51a48c225daf9b34611ccc5ba077ebbc0a19cfc9bbbd78ade11cfa655075f_big_uint255, + 0x3286d29eb60c3d6204eb534d13f40d1af6364f0fe1622a12ba5fa069886f31fe_big_uint255, + }}, + {{ + 0x9bd403d05db137ea793f10b6dd087a74a78c9b01bcd6f9daf39af2ef57d346e_big_uint255, + 0x3a71654023e43363e60889eac50eb1f17c044606886771eaaf851bb2d00b3aeb_big_uint255, + 0x3415b94f62c59466f102442b4bae7d6bb348987154cce16bd187525a6fb5b443_big_uint255, + }}, + {{ + 0x3ca35f0fc660092b81f15dd6f0b3d17a16a053480ef2f935fce806dd0d9a3466_big_uint255, + 0x26e1360af7fdc62e9be08651c2c5900ed5aefcb0d84b3aa88e354c6658a07863_big_uint255, + 0x30d05884174d7a1de9d34c89224d17f3b9dbdfb0793b54c0d2aaaeedcc357bd6_big_uint255, + }}, + {{ + 0x2c7f66f8b0580236f025dd626520049a09e1bfff0e5fd9f69cbc70daf0ac56c4_big_uint255, + 0xc5cb9a350d2dc463dd05dbd696e122c6917b76654180c323937dee44c6beb93_big_uint255, + 0x14d4d799d43d91b4d09d9c2bfdc13a64b48d18750503324361f9bf7267ec9b92_big_uint255, + }}, + {{ + 0x60c56a884cd6a1d3514f2895816b84e7160df5106e8d031710769be1ac5c04c_big_uint255, + 0x23e15f37c21266c86ead998a46e42f6e97fbd5d1c384f51d8b54d051a80d753d_big_uint255, + 0x25eb2911034ab6bef4a969653f5cc33e6914b8b6411f064ec01bcf157fea4e55_big_uint255, + }}, + {{ + 0x1e95c04c5057abd1b43a2fbc942b2391d0e0daef873838b3494e6d5fb067a117_big_uint255, + 0x1547602fc83558aa1327221fd220fa22bcb1f6ec42edb7cc05eff508c65883cb_big_uint255, + 0x16b669eac31e72a9e739fb03fd7ea3882fc5791b157143929ae12fc2fefe8b3d_big_uint255, + }}, + {{ + 0x7034f4e251a65c4423479dc9d5287a341c108e0b56e29a391f9a07a0ca822f1_big_uint255, + 0x3fdf9d5731ba040dc568e61b8571ea95ead2e89f0a9856b2d12a7e87e43f5683_big_uint255, + 0x33f2cdf6960139a0fb4a3a8127992e2abbd42847728425228a35ee72bd5b01c7_big_uint255, + }}, + {{ + 0x35616d55033d8fc092398f6c58bfc6eaaf2ec9dd500122516f489dbc631457b_big_uint255, + 0x1eca80189643df1473e98da93fe58a9576def0d192d4153faebcd1b210c1603f_big_uint255, + 0x26223ca4af2d8d878ca5530c3e67ff1c95b50b9c5b8295e19150bc31ef90ba98_big_uint255, + }}, + {{ + 0x19180fa5facb64ee9b4827ccd766622adf12fe80ab17c7395075368e10a2a361_big_uint255, + 0x169f165855e097501f25d6b3aae815ce6e8a1c289850936d956657f0ed99446_big_uint255, + 0x363a8f891de5974f06bae043bc6a26b4518d217af6590e9318e325fb215cda00_big_uint255, + }}, + {{ + 0x122aaa7c330ddcb57180749e659600a4dfac5dda7b9b68ab0f8b2ee6de350ced_big_uint255, + 0xed203defca13ebdf6af805a9f5dbdfef90007df2ad32fb1c83165e837ab5e3f_big_uint255, + 0x11cce94bbc7a96e9708e99d3666c0a275329ac4bff42634a5f989ddcfc28fd68_big_uint255, + }}, + {{ + 0x1705663587a03cb11485ac9d01fd10cb1138be1820d26a14e4ab7b1c0fdec8d2_big_uint255, + 0x12ad28a60485a2d911639051971f43dd15a0dfd2f8a0de756f0c847fed63ed7d_big_uint255, + 0xa9e61cc35eba9374eea117753aaaa93d6b29f550c2c54bce0a6078e05db9475_big_uint255, + }}, + {{ + 0x72c3d62cf006a95dc8b2a53f878bb26fcaf3c28d709a91634f3a09f525054ad_big_uint255, + 0x1ce8f168b446f7e797b91677fc46a975d2caa63dc359132c7c9729f5be24a7c_big_uint255, + 0xe846a7211efda3d8115b5bf76aab7eac2b6099026fc7504fb81ac4a77c5560d_big_uint255, + }}, + {{ + 0xabb8fd9d6fa3772022fa88800c12bdcbb1234473022cd141213d452255a0f55_big_uint255, + 0x1c5d9938bc35a4832e8375dc307dba7a116d2a566e406ab31e8b03a36ec807cf_big_uint255, + 0x35bea7ac6f40e0f50f08d325be9f051fd75ada8c03461f4d15b2c5e1a3d72431_big_uint255, + }}, + {{ + 0x419357c205a7e1e028c0f49cbdeab85b82f4db78f1afb1b5568ec1bd2e48cb0_big_uint255, + 0x1933e424c788e7466a159f1fe015ac7210f47044d9df6872cdfa227ae4d2190a_big_uint255, + 0xde27ccdda95abb3d98db76d6f7f152a08d37ba81758beaf2eddbc58d13e560f_big_uint255, + }}, + {{ + 0x35a312d5d6cbf00d55f097febaf9bd5eac5f2881ebf0afa377e2ba7cdcf2f51_big_uint255, + 0xce6f415449ca515e4da9177527c9242adcc988de5e1846d07cdd5284f39f9d0_big_uint255, + 0x38fd71543da5c4c0447dc22aa2c1e3744cb84eb1ff17040640b50f5ddf8c8e61_big_uint255, + }}, + {{ + 0x158de859aad53c6a17de455ab067a09ad6cba22f4101d19e77d8a2975c0dc965_big_uint255, + 0x2c300588eeae8cbc3814bd1d7646f472ef6b44a60c710bf6100937504e532c8b_big_uint255, + 0xb198cf742a029409ac02397b91e2704fa94ecf147909fa8d71ece5087e2cfc3_big_uint255, + }}, + {{ + 0x100b375c21d357d5679d8e6d9eb7bff8edd4575535bf651ba0b1bd83cfb54598_big_uint255, + 0x15a474d44590e2b23b8bb1e79f5613f1659e7ae2bce10def0ce1a101eb3e3ce5_big_uint255, + 0x2aa20e6642a989e1e6f9814c24f022991c23a7e40af505d4b931079025b7ed4d_big_uint255, + }}, + {{ + 0x196597f2d65c5692706795bf46eb7be96b31647c23441213642ccceedc01ebc4_big_uint255, + 0x248291aa516daa0a6cd191c1c651a82f7d1b5f087dcb7cee91a27c488483e2bd_big_uint255, + 0x36c02b98ad2722b774aeb131b31bfd087c6a7f2d0a3faa40bd9899e5f270877f_big_uint255, + }}, + {{ + 0x1240e06949a1ad92bd8ae90772b5d8505174182c87a23227aa74b7630dba4195_big_uint255, + 0x3b83f7e36f30939a78ec63cb2554aa0669a1bfc1b8b8714c6b8a3958beb6a163_big_uint255, + 0x1668b0582ce04f7f5b1e35e1b7cc3e05be23cc2c9e0be9436559193f2a8d102e_big_uint255, + }}, + {{ + 0x26d6a708e9464c85e9c7605e87fb96036fd1fe87379ac43ad560885582e4026d_big_uint255, + 0x594fccf1863993b43ad0a13c5fc7a53f59f7d622e7b206d425907243a69e62d_big_uint255, + 0x78e4c588b6ddd0fe7ed53a9f25b6ac3c2eac1c63faecc7e916f4d4599051940_big_uint255, + }}, + {{ + 0xf44ea3e14c3e4849ee7a525fe77170b8658a6753680e269c9fd1d12932af69d_big_uint255, + 0x2e8567bc9e8e369bdf7748d6c7f677837c601455d4651a2f102b94ff1f951379_big_uint255, + 0x37c35b056171982cc7d74e6081fcac2f764f1fe30ee985db306a22b097d51bae_big_uint255, + }}, + {{ + 0x29dbcffd5b55d671c85ca42037ac5e64d2ef42d2704af47a20877e3a5e5f1d9d_big_uint255, + 0x201098422e054c1ddcc465411d002d2bc5a824e1c7f4f2ded9443c37bd04a520_big_uint255, + 0x7de32ed4c5143430ef43aef100f948ef859ab3793aa52640156f5e7d92cdc84_big_uint255, + }}, + {{ + 0x34e95adcc0c5c34fd38ab9246a04cc1029f678ba53c0f6fd27f8805094e36199_big_uint255, + 0x1d5faf157126c599232982356ca0ea7b81d875c01d842b5cd1998a5c470fa623_big_uint255, + 0x160a80176bd281e3fa9b82e44063cc7bf86eb81397e51e41fe4745e27c57e1d2_big_uint255, + }}, + {{ + 0x17ecc7f5deb148c542a22d02b098439724910a3bbd4903428c8fc680f31b2406_big_uint255, + 0x20a6aae17f822bc7035da3b8931896c82152346f2a43ab4e0029dbf0101b3d_big_uint255, + 0x9ea0ec10c0e77b9385a58ccd5ecc3c88b5bed58af72a6d87bb446e14fa7c8d6_big_uint255, + }}, + }}; + }; + template<> + struct poseidon_constants< + nil::crypto3::algebra::fields::alt_bn128_scalar_field<254>> { + using FieldType = + nil::crypto3::algebra::fields::alt_bn128_scalar_field<254>; + constexpr static const std::size_t state_size = 3; + constexpr static const std::size_t full_rounds_amount = 8; + constexpr static const std::size_t partial_rounds_amount = 57; + constexpr static const std::size_t total_rounds_amount = + full_rounds_amount + partial_rounds_amount; + constexpr static const std::size_t sbox_alpha = 5; + constexpr static bool mina_version = false; + + constexpr static const std::array< + std::array, state_size> + mds = { + {{{0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b_big_uint255, + 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0_big_uint255, + 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d_big_uint255}}, + {{0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771_big_uint255, + 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23_big_uint255, + 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa_big_uint255}}, + {{0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7_big_uint255, + 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911_big_uint255, + 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0_big_uint255}}}}; + + constexpr static const std::array, total_rounds_amount> round_constant = + {{{{0x0ee9a592ba9a9518d05986d656f40c2114c4993c11bb29938d21d47304cd8e6e_big_uint255, + 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864_big_uint255, + 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5_big_uint255}}, + {{0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0_big_uint255, + 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2_big_uint255, + 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa_big_uint255}}, + {{0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d_big_uint255, + 0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78_big_uint255, + 0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632_big_uint255}}, + {{0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428_big_uint255, + 0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6_big_uint255, + 0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c_big_uint255}}, + {{0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559_big_uint255, + 0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6_big_uint255, + 0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705_big_uint255}}, + {{0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d_big_uint255, + 0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828_big_uint255, + 0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9_big_uint255}}, + {{0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6_big_uint255, + 0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc_big_uint255, + 0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1_big_uint255}}, + {{0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09_big_uint255, + 0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565_big_uint255, + 0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9_big_uint255}}, + {{0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5_big_uint255, + 0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280_big_uint255, + 0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b_big_uint255}}, + {{0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0_big_uint255, + 0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460_big_uint255, + 0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0_big_uint255}}, + {{0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e_big_uint255, + 0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448_big_uint255, + 0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f_big_uint255}}, + {{0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e_big_uint255, + 0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f_big_uint255, + 0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887_big_uint255}}, + {{0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8_big_uint255, + 0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1_big_uint255, + 0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53_big_uint255}}, + {{0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c_big_uint255, + 0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e_big_uint255, + 0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38_big_uint255}}, + {{0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206_big_uint255, + 0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad_big_uint255, + 0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c_big_uint255}}, + {{0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef_big_uint255, + 0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91_big_uint255, + 0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0_big_uint255}}, + {{0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750_big_uint255, + 0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e_big_uint255, + 0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e_big_uint255}}, + {{0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab_big_uint255, + 0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311_big_uint255, + 0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a_big_uint255}}, + {{0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9_big_uint255, + 0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529_big_uint255, + 0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502_big_uint255}}, + {{0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54_big_uint255, + 0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef_big_uint255, + 0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a_big_uint255}}, + {{0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804_big_uint255, + 0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649_big_uint255, + 0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a_big_uint255}}, + {{0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1_big_uint255, + 0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3_big_uint255, + 0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89_big_uint255}}, + {{0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be_big_uint255, + 0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1_big_uint255, + 0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5_big_uint255}}, + {{0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100_big_uint255, + 0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967_big_uint255, + 0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4_big_uint255}}, + {{0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02_big_uint255, + 0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646_big_uint255, + 0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d_big_uint255}}, + {{0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6_big_uint255, + 0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4_big_uint255, + 0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e_big_uint255}}, + {{0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626_big_uint255, + 0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb_big_uint255, + 0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13_big_uint255}}, + {{0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758_big_uint255, + 0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef_big_uint255, + 0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9_big_uint255}}, + {{0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d_big_uint255, + 0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2_big_uint255, + 0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035_big_uint255}}, + {{0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147_big_uint255, + 0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2_big_uint255, + 0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a_big_uint255}}, + {{0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc_big_uint255, + 0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f_big_uint255, + 0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69_big_uint255}}, + {{0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a_big_uint255, 0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1_big_uint255, + 0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8_big_uint255}}, + {{0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a_big_uint255, + 0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785_big_uint255, + 0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77_big_uint255}}, + {{0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67_big_uint255, + 0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727_big_uint255, + 0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b_big_uint255}}, + {{0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2_big_uint255, + 0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe_big_uint255, + 0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512_big_uint255}}, + {{0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d_big_uint255, + 0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9_big_uint255, + 0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808_big_uint255}}, + {{0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1_big_uint255, + 0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973_big_uint255, + 0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09_big_uint255}}, + {{0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38_big_uint255, + 0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd_big_uint255, + 0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284_big_uint255}}, + {{0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af_big_uint255, + 0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466_big_uint255, + 0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad_big_uint255}}, + {{0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086_big_uint255, + 0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3_big_uint255, + 0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800_big_uint255}}, + {{0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6_big_uint255, + 0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7_big_uint255, + 0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b_big_uint255}}, + {{0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b_big_uint255, + 0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591_big_uint255, + 0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178_big_uint255}}, + {{0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40_big_uint255, + 0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4_big_uint255, + 0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233_big_uint255}}, + {{0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873_big_uint255, + 0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d_big_uint255, + 0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0_big_uint255}}, + {{0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb_big_uint255, + 0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875_big_uint255, + 0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e_big_uint255}}, + {{0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019_big_uint255, + 0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b_big_uint255, + 0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59_big_uint255}}, + {{0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f_big_uint255, + 0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8_big_uint255, + 0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948_big_uint255}}, + {{0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f_big_uint255, + 0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f_big_uint255, + 0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142_big_uint255}}, + {{0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b_big_uint255, + 0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23_big_uint255, + 0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0_big_uint255}}, + {{0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a_big_uint255, + 0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5_big_uint255, + 0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58_big_uint255}}, + {{0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2_big_uint255, + 0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b_big_uint255, + 0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01_big_uint255}}, + {{0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1_big_uint255, + 0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b_big_uint255, + 0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d_big_uint255}}, + {{0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec_big_uint255, + 0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2_big_uint255, + 0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792_big_uint255}}, + {{0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860_big_uint255, + 0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d_big_uint255, + 0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111_big_uint255}}, + {{0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711_big_uint255, + 0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb_big_uint255, + 0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336_big_uint255}}, + {{0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a_big_uint255, + 0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860_big_uint255, + 0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6_big_uint255}}, + {{0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b_big_uint255, + 0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b_big_uint255, + 0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451_big_uint255}}, + {{0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556_big_uint255, + 0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70_big_uint255, + 0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77_big_uint255}}, + {{0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea_big_uint255, + 0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d_big_uint255, + 0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630_big_uint255}}, + {{0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f_big_uint255, + 0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78_big_uint255, + 0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc_big_uint255}}, + {{0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb_big_uint255, + 0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60_big_uint255, + 0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f_big_uint255}}, + {{0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4_big_uint255, + 0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1_big_uint255, + 0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc_big_uint255}}, + {{0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08_big_uint255, + 0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100_big_uint255, + 0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320_big_uint255}}, + {{0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870_big_uint255, + 0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba_big_uint255, 0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8_big_uint255}}, + {{0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1_big_uint255, + 0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22_big_uint255, + 0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161_big_uint255}}}}; + }; + } // namespace detail + } // namespace components + } // namespace bbf + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BBF_PLONK_DETAIL_POSEIDON_CONSTANTS_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/enums.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/enums.hpp index f7e0d32548..b1c94be43c 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/bbf/enums.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/enums.hpp @@ -27,6 +27,9 @@ #ifndef CRYPTO3_BLUEPRINT_PLONK_BBF_ENUMS_HPP #define CRYPTO3_BLUEPRINT_PLONK_BBF_ENUMS_HPP +#include +#include + namespace nil { namespace blueprint { namespace bbf { @@ -35,7 +38,7 @@ namespace nil { enum column_type { witness = 0, public_input = 1, constant = 2, COLUMN_TYPES_COUNT = 3}; std::ostream &operator<<(std::ostream &os, const column_type &t) { - std::map type_map = { + static std::map type_map = { {column_type::witness, "witness"}, {column_type::public_input, "public input"}, {column_type::constant, "constant"}, diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/exp.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/exp.hpp new file mode 100644 index 0000000000..684c191309 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/exp.hpp @@ -0,0 +1,392 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK BBF exp component class +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_PLONK_BBF_EXP_COMPONENT_HPP +#define CRYPTO3_BLUEPRINT_PLONK_BBF_EXP_COMPONENT_HPP + +#include +#include +#include +#include +#include +// #include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + + template + class exp_circuit : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + using word_type = zkevm_word_type; + + std::size_t max_rows; + std::size_t max_exponentiations; + + + constexpr static std::size_t num_chunks = 2; + constexpr static const typename FieldType::value_type one = 1; + constexpr static const typename FieldType::value_type two_16 = 65536; + constexpr static const typename FieldType::value_type two_32 = 4294967296; + constexpr static const typename FieldType::value_type two_48 = 281474976710656; + constexpr static const typename FieldType::value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const typename FieldType::value_type two_80 = 0x100000000000000000000_big_uint254; + constexpr static const typename FieldType::value_type two_96 = 0x1000000000000000000000000_big_uint254; + constexpr static const typename FieldType::value_type two112 = 0x10000000000000000000000000000_big_uint254; + constexpr static const typename FieldType::value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const typename FieldType::value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T chunk_sum_128(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 2); + return chunks[8 * chunk_idx] + chunks[8 * chunk_idx + 1] * two_16 + + chunks[8 * chunk_idx + 2] * two_32 + chunks[8 * chunk_idx + 3] * two_48 + + chunks[8 * chunk_idx + 4] * two_64 + chunks[8 * chunk_idx + 5] * two_80 + + chunks[8 * chunk_idx + 6] * two_96 + chunks[8 * chunk_idx + 7] * two112; + } + + template + T first_carryless_consrtruct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return a_64_chunks[0] * b_64_chunks[0] + + two_64 * + (a_64_chunks[0] * b_64_chunks[1] + a_64_chunks[1] * b_64_chunks[0]) - + r_64_chunks[0] - two_64 * r_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) { + return (a_64_chunks[0] * b_64_chunks[2] + a_64_chunks[1] * b_64_chunks[1] + + a_64_chunks[2] * b_64_chunks[0] - r_64_chunks[2]) + + two_64 * + (a_64_chunks[0] * b_64_chunks[3] + a_64_chunks[1] * b_64_chunks[2] + + a_64_chunks[2] * b_64_chunks[1] + a_64_chunks[3] * b_64_chunks[0] - + r_64_chunks[3]); + } + + public: + + exp_circuit(context_type &context_object, + const exp_table_input_type &input, + std::size_t max_rows_amount, std::size_t max_exponentiations_, + bool make_links = true) : + max_rows(max_rows_amount), + max_exponentiations(max_exponentiations_), + generic_component(context_object) + { + + std::size_t num_proving_blocks = (max_rows) / 3; + std::vector> base = std::vector>(max_rows); + std::vector> exponent = std::vector>(max_rows); + std::vector> exponentiation = std::vector>(max_rows); + + std::vector> a_chunks = std::vector>(num_proving_blocks, std::vector(16)); + std::vector> b_chunks = std::vector>(num_proving_blocks, std::vector(16)); + std::vector> r_chunks = std::vector>(num_proving_blocks, std::vector(16)); + + std::vector> c_1_chunks = std::vector>(num_proving_blocks, std::vector(4)); + std::vector> c_3_chunks = std::vector>(num_proving_blocks, std::vector(4)); + + std::vector c_2 = std::vector(num_proving_blocks); + std::vector c_4 = std::vector(num_proving_blocks); + std::vector> itermediate_exponents = std::vector>(max_rows); + std::vector hi_last = std::vector(num_proving_blocks); + std::vector exp_is_even = std::vector(num_proving_blocks); + std::vector is_last = std::vector(max_rows); + std::vector header_selector = std::vector(max_rows); + + + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + auto triplets = input.get_triplets(); // TODO: work with exp_table interface directly + std::size_t cur = 0; + BOOST_ASSERT(triplets.size() <= max_exponentiations); + for(std::size_t i = 0; i < triplets.size(); i++){ + + word_type exp_a = triplets[i][0]; + word_type exp_d = triplets[i][1]; + word_type exp_A = triplets[i][2]; + + word_type e = exp_d; + std::vector bitmap; + std::vector tmp_exp; + while( e >= 2){ + tmp_exp.push_back(e); + if(e & 1){ + bitmap.push_back(true); + e = e - 1; + }else{ + bitmap.push_back(false); + e = e >> 1; + } + } + std::reverse(bitmap.begin(), bitmap.end()); + std::vector> intermediate_triplets; + word_type a, b; + + e = exp_a; + for(const auto &bit : bitmap){ + a = e; + if(!bit){ + b = a; + }else{ + b = exp_a; + } + e = a * b; + intermediate_triplets.push_back({a, b, e}); + } + BOOST_ASSERT(intermediate_triplets.size() == bitmap.size()); + BOOST_ASSERT(tmp_exp.size() == bitmap.size()); + + std::size_t its = intermediate_triplets.size(); + + for(std::size_t j = 0; j < its; j++){ + BOOST_ASSERT(cur < num_proving_blocks); + + header_selector[3*cur] = (j == 0) ? 1 : 0; + header_selector[3*cur + 1] = 0; + header_selector[3*cur + 2] = 0; + + base[3*cur][0] = w_hi(exp_a); + base[3*cur][1] = w_lo(exp_a); + + base[3*cur + 1][0] = base[3*cur][0]; + base[3*cur + 1][1] = base[3*cur][1]; + + base[3*cur + 2][0] = base[3*cur][0]; + base[3*cur + 2][1] = base[3*cur][1]; + + + exponent[3*cur][0] = w_hi(tmp_exp[j]); + exponent[3*cur][1] = w_lo(tmp_exp[j]); + + exponent[3*cur + 1][0] = exponent[3*cur][0]; + exponent[3*cur + 1][1] = exponent[3*cur][1]; + + exponent[3*cur + 2][0] = exponent[3*cur][0]; + exponent[3*cur + 2][1] = exponent[3*cur][1]; + + exponentiation[3*cur][0] = w_hi(intermediate_triplets[its - j - 1][2]); + exponentiation[3*cur][1] = w_lo(intermediate_triplets[its - j - 1][2]); + + exponentiation[3*cur + 1][0] = exponentiation[3*cur][0]; + exponentiation[3*cur + 1][1] = exponentiation[3*cur][1]; + + exponentiation[3*cur + 2][0] = exponentiation[3*cur][0]; + exponentiation[3*cur + 2][1] = exponentiation[3*cur][1]; + + exp_is_even[cur] = (bitmap[its - j - 1]) ? 0 : 1; + hi_last[cur] = static_cast(exponent[3*cur][0].data & one.data); + + is_last[3*cur] = (j == its - 1) ? 1 : 0; + is_last[3*cur + 1] = is_last[3*cur]; + is_last[3*cur + 2] = is_last[3*cur]; + + + a_chunks[cur] = zkevm_word_to_field_element(intermediate_triplets[its - j - 1][0]); + b_chunks[cur] = zkevm_word_to_field_element(intermediate_triplets[its - j - 1][1]); + r_chunks[cur] = zkevm_word_to_field_element(intermediate_triplets[its - j - 1][2]); + + std::vector a_64_chunks, b_64_chunks, r_64_chunks; + for (std::size_t k = 0; k < 4; k++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks[cur], k)); + b_64_chunks.push_back(chunk_sum_64(b_chunks[cur], k)); + r_64_chunks.push_back(chunk_sum_64(r_chunks[cur], k)); + } + + auto first_row_carries = first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks).data.base() >> 128; + TYPE c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + c_2[cur] = static_cast(first_row_carries >> 64); + c_1_chunks[cur] = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + auto second_row_carries = (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks) + c_1 + c_2[cur] * two_64).data.base() >> 128; + TYPE c_3 = static_cast(second_row_carries & (two_64 - 1).data.base()); + c_4[cur] = static_cast(second_row_carries >> 64); + c_3_chunks[cur] = chunk_64_to_16(c_3); + + cur++; + } + + } + while(cur < num_proving_blocks){ + // unused rows will be filled with zeros. To satisfy all constraints + // exp_is_even is set 1 (because 0 is even) + exp_is_even[cur++] = 1; + } + } + + for(std::size_t i = 0; i < max_rows; i++){ + allocate(header_selector[i], 0, i); + + for(std::size_t j = 0; j < num_chunks; j++){ + allocate(base[i][j], j + 1, i); + allocate(exponent[i][j], num_chunks + j + 1, i); + allocate(exponentiation[i][j], 2*num_chunks + j + 1,i); + } + allocate(is_last[i], 3*num_chunks + 1, i); + } + + for(std::size_t i=0; i < num_proving_blocks; i++){ + // TODO: 16-bit range check lookup + for(std::size_t j = 0; j < 16; j++){ + allocate(r_chunks[i][j], 3*num_chunks + j + 2, 3*i); + allocate(b_chunks[i][j], 3*num_chunks + j + 2, 3*i + 1); + allocate(a_chunks[i][j], 3*num_chunks + j + 2, 3*i + 2); + } + for(std::size_t j = 0; j < 4; j++){ + allocate(c_1_chunks[i][j], 3*num_chunks + j + 18, 3*i); + allocate(c_3_chunks[i][j], 3*num_chunks + j + 18, 3*i + 1); + } + allocate(c_2[i], 3*num_chunks + 18, 3*i + 2); + allocate(c_4[i], 3*num_chunks + 19, 3*i + 2); + + allocate(exp_is_even[i], 3*num_chunks + 20, 3*i + 2); + allocate(hi_last[i], 3*num_chunks + 21, 3*i + 2); + } + + if(make_links){ + + } + + for(std::size_t i = 0; i < max_rows; i++){ + lookup(std::vector({header_selector[i]*base[i][0], header_selector[i]*base[i][1], + header_selector[i]*exponent[i][0], header_selector[i]*exponent[i][1] + (1 - header_selector[i]), + header_selector[i]*exponentiation[i][0],header_selector[i]*exponentiation[i][1]}), "exp_table"); + + constrain(header_selector[i]*(1-header_selector[i])); + constrain(is_last[i]*(1-is_last[i])); + } + + for(std::size_t i = 0; i < num_proving_blocks; i++){ + copy_constrain(base[3*i][0], base[3*i+1][0]); + copy_constrain(base[3*i][0], base[3*i+2][0]); + + copy_constrain(exponent[3*i][0], exponent[3*i+1][0]); + copy_constrain(exponent[3*i][0], exponent[3*i+2][0]); + + copy_constrain(exponentiation[3*i][0], exponentiation[3*i+1][0]); + copy_constrain(exponentiation[3*i][0], exponentiation[3*i+2][0]); + + copy_constrain(base[3*i][1], base[3*i+1][1]); + copy_constrain(base[3*i][1], base[3*i+2][1]); + + copy_constrain(exponent[3*i][1], exponent[3*i+1][1]); + copy_constrain(exponent[3*i][1], exponent[3*i+2][1]); + + copy_constrain(exponentiation[3*i][1], exponentiation[3*i+1][1]); + copy_constrain(exponentiation[3*i][1], exponentiation[3*i+2][1]); + + copy_constrain(is_last[3*i], is_last[3*i+1]); + copy_constrain(is_last[3*i], is_last[3*i+2]); + + + constrain(exp_is_even[i]*(1-exp_is_even[i])); + constrain(hi_last[i]*(1-hi_last[i])); + + constrain(chunk_sum_128(r_chunks[i], 0) - exponentiation[3*i][1]); // exponent_lo = r_chunk[0:7] + constrain(chunk_sum_128(r_chunks[i], 1) - exponentiation[3*i][0]); // exponent_hi = r_chunk[8:15] + for(std::size_t j = 0; j < 16; j++){ + constrain(exp_is_even[i]*(a_chunks[i][j] - b_chunks[i][j])); // if exp is even a = b + } + constrain((1-exp_is_even[i])*(chunk_sum_128(b_chunks[i], 0) - base[3*i][1])); // if exp is odd b[0:7] = base_lo + constrain((1-exp_is_even[i])*(chunk_sum_128(b_chunks[i], 1) - base[3*i][0])); // if exp is odd b[8:15] = base_hi + + // if is_last ==> exp_is_even and exp_lo = 2, exp_lo = 0, and a = b = base + // One constraint is enough. The other can be decuded from exp_is_even => a=b constraint + constrain(is_last[3*i]*(exponent[3*i][1]- 2)); + constrain(is_last[3*i]*(exponent[3*i][0])); + constrain(is_last[3*i]*(1 - exp_is_even[i])); + constrain(is_last[3*i]*(chunk_sum_128(b_chunks[i], 1) - base[3*i][0])); + constrain(is_last[3*i]*(chunk_sum_128(b_chunks[i], 0) - base[3*i][1])); + + if( i > 1){ + // if prev_exp is odd prev_exp = curr_exp + 1 + constrain((1 - exp_is_even[i-1])*(exponent[3*i - 1][0] - exponent[3*i][0])); // that is prev_exp_hi = cur_exp_hi + constrain((1 - exp_is_even[i-1])*(exponent[3*i - 1][1] - exponent[3*i][1] - 1)); // prev_exp_lo = cur_exp_lo + 1 + // if prev_exp is even prev_exp = cur_exp * 2 except is_last = 1 + constrain((1-is_last[3*i-1])*exp_is_even[i-1]*(exponent[3*i - 1][0] - 2 * exponent[3*i][0] - hi_last[i-1])); // that is prev_exp_hi = 2* cur_exp_hi + prev_exp_hi & 2 + constrain((1-is_last[3*i-1])*exp_is_even[i-1]*(exponent[3*i - 1][1] - 2 * exponent[3*i][1] + two128*hi_last[i-1])); // prev_exp_lo = cur_exp_lo * 2 - (prev_exp_hi & 2) << 128 + } + + + std::vector a_64_chunks = { + chunk_sum_64(a_chunks[i], 0), + chunk_sum_64(a_chunks[i], 1), + chunk_sum_64(a_chunks[i], 2), + chunk_sum_64(a_chunks[i], 3) + }; + std::vector b_64_chunks = { + chunk_sum_64(b_chunks[i], 0), + chunk_sum_64(b_chunks[i], 1), + chunk_sum_64(b_chunks[i], 2), + chunk_sum_64(b_chunks[i], 3) + }; + std::vector r_64_chunks = { + chunk_sum_64(r_chunks[i], 0), + chunk_sum_64(r_chunks[i], 1), + chunk_sum_64(r_chunks[i], 2), + chunk_sum_64(r_chunks[i], 3) + }; + + TYPE c_1_64 = chunk_sum_64(c_1_chunks[i], 0); + TYPE c_3_64 = chunk_sum_64(c_3_chunks[i], 0); + TYPE first_carryless = first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks); + constrain(first_carryless - c_1_64 * two128 - c_2[i] * two192); + + TYPE second_carryless = second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks); + constrain(second_carryless + c_1_64 + c_2[i] * two_64 - c_3_64 * two128 - c_4[i] * two192); + constrain(c_2[i] * (c_2[i] - 1)); + constrain(c_4[i] * (c_4[i] - 1) * (c_4[i] - 2) * (c_4[i] - 3)); + } + + }; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_PLONK_BBF_EXP_COMPONENT_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/bbf_wrapper.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/exp_wrapper.hpp similarity index 56% rename from crypto3/libs/blueprint/include/nil/blueprint/bbf/bbf_wrapper.hpp rename to crypto3/libs/blueprint/include/nil/blueprint/bbf/exp_wrapper.hpp index 996ae4e31f..2e0eff7276 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/bbf/bbf_wrapper.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/exp_wrapper.hpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Alexey Yashunsky +// 2024 Valeh Farzaliyev // // MIT License // @@ -24,8 +25,8 @@ // @file Declaration of interfaces for PLONK component wrapping the BBF-component interface //---------------------------------------------------------------------------// -#ifndef CRYPTO3_BLUEPRINT_PLONK_BBF_WRAPPER_HPP -#define CRYPTO3_BLUEPRINT_PLONK_BBF_WRAPPER_HPP +#ifndef CRYPTO3_BLUEPRINT_PLONK_EXP_WRAPPER_HPP +#define CRYPTO3_BLUEPRINT_PLONK_EXP_WRAPPER_HPP #include @@ -36,11 +37,10 @@ #include #include -#include // also included by is_zero.hpp below -#include -#include -#include -#include +#include +#include // also included by exp.hpp below +#include + #include @@ -49,26 +49,30 @@ namespace nil { namespace components { template - class bbf_wrapper; + class exp_wrapper; template - class bbf_wrapper, BlueprintFieldType> + class exp_wrapper, BlueprintFieldType> : public plonk_component { public: using component_type = plonk_component; + using word_type = zkevm_word_type; using var = typename component_type::var; using manifest_type = plonk_component_manifest; + std::size_t max_rows; + std::size_t max_exponentiations; + class gate_manifest_type : public component_gate_manifest { public: std::uint32_t gates_amount() const override { - return bbf_wrapper::gates_amount; + return exp_wrapper::gates_amount; } }; - static gate_manifest get_gate_manifest(std::size_t witness_amount) { + static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_rows, std::size_t max_exponentiations) { static gate_manifest manifest = gate_manifest(gate_manifest_type()); return manifest; } @@ -81,49 +85,46 @@ namespace nil { return manifest; } - constexpr static std::size_t get_rows_amount(std::size_t witness_amount) { - return 3; + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_rows, std::size_t max_exponentiations) { + return max_rows; } - constexpr static std::size_t get_empty_rows_amount() { - return 3; + constexpr static std::size_t get_empty_rows_amount(std::size_t witness_amount, std::size_t max_rows, std::size_t max_exponentiations) { + return max_rows; } constexpr static const std::size_t gates_amount = 6; // TODO: this is very unoptimized! - const std::size_t rows_amount = get_rows_amount(this->witness_amount()); - const std::size_t empty_rows_amount = get_empty_rows_amount(); - const std::string component_name = "wrapper of BBF-components"; + const std::size_t rows_amount = get_rows_amount(this->witness_amount(),max_rows, max_exponentiations); + const std::size_t empty_rows_amount = get_empty_rows_amount(this->witness_amount(),max_rows, max_exponentiations); + const std::string component_name = "wrapper of exp BBF-component"; - struct input_type { - var x, q, cx[3], cy[3]; + class input_type : public bbf::exp_table_input_type { + public: std::vector> all_vars() { - return {x, q, cx[0], cx[1], cx[2], cy[0], cy[1], cy[2]}; + + return {}; } }; struct result_type { - result_type(const bbf_wrapper &component, std::size_t start_row_index) { } + result_type(const exp_wrapper &component, std::size_t start_row_index) { } std::vector> all_vars() { return {}; } }; - template - explicit bbf_wrapper(ContainerType witness) : component_type(witness, {}, {}, get_manifest()) {}; - - template - bbf_wrapper(WitnessContainerType witness, ConstantContainerType constant, - PublicInputContainerType public_input) : - component_type(witness, constant, public_input, get_manifest()) {}; - bbf_wrapper(std::initializer_list witnesses, - std::initializer_list - constants, - std::initializer_list - public_inputs) : - component_type(witnesses, constants, public_inputs, get_manifest()) {}; + exp_wrapper( + typename component_type::witness_container_type witnesses, + typename component_type::constant_container_type constants, + typename component_type::public_input_container_type public_inputs, + std::size_t _max_rows, + std::size_t _max_exponentiations + ) : component_type(witnesses, constants, public_inputs, get_manifest()), + max_rows(_max_rows), + max_exponentiations(_max_exponentiations) + {}; std::map component_lookup_tables() const{ std::map lookup_tables; @@ -132,112 +133,78 @@ namespace nil { }; template - using plonk_bbf_wrapper = bbf_wrapper, BlueprintFieldType>; + using plonk_exp_wrapper = exp_wrapper, BlueprintFieldType>; template - typename plonk_bbf_wrapper::result_type + typename plonk_exp_wrapper::result_type generate_assignments( - const plonk_bbf_wrapper &component, + const plonk_exp_wrapper &component, assignment> &assignment, - const typename plonk_bbf_wrapper::input_type instance_input, + const typename plonk_exp_wrapper::input_type instance_input, const std::uint32_t start_row_index) { using value_type = typename BlueprintFieldType::value_type; using context_type = typename nil::blueprint::bbf::context; - using Is_Zero = typename nil::blueprint::bbf::is_zero; - using Choice_Function = typename nil::blueprint::bbf::choice_function; - using Carry_On_Addition = typename nil::blueprint::bbf::carry_on_addition; - using Useless = typename nil::blueprint::bbf::useless; //using TYPE = typename Is_Zero::TYPE; using TYPE = typename context_type::TYPE; - context_type ct = context_type(assignment, 8, start_row_index); // max_rows = 8 - TYPE const_test = 5; - ct.allocate(const_test,0,0,bbf::column_type::constant); - - Is_Zero c1 = Is_Zero(ct, var_value(assignment, instance_input.x)); - - std::array input_x = {var_value(assignment,instance_input.cx[0]), - var_value(assignment,instance_input.cx[1]), - var_value(assignment,instance_input.cx[2])}; - std::array input_y = {var_value(assignment,instance_input.cy[0]), - var_value(assignment,instance_input.cy[1]), - var_value(assignment,instance_input.cy[2])}; - - // ct.print_witness_allocation_log(); - - std::vector ct2_area = {2,3,4,5}; - context_type ct2 = ct.subcontext(ct2_area,0,4); - Choice_Function c2 = Choice_Function(ct2, var_value(assignment,instance_input.q), input_x, input_y); - - // ct.print_witness_allocation_log(); - - std::vector ct3_area = {7,8,9,10,11}; - context_type ct3 = ct.subcontext(ct3_area,0,4); - Carry_On_Addition c3 = Carry_On_Addition(ct3, input_x, input_y); - - // ct.print_witness_allocation_log(); - - std::vector ct4_area = {12}; - context_type ct4 = ct.subcontext(ct4_area,0,4); - Useless c4 = Useless(ct4); + context_type ct = context_type(assignment, component.max_rows, start_row_index); - return typename plonk_bbf_wrapper::result_type(component, start_row_index); + std::vector table_lookup_area = {0,1,2,3,4,5}; + std::vector circuit_area; + for(std::size_t i = 6; i < component.witness_amount(); i++){ + circuit_area.push_back(i); + } + context_type ct1 = ct.subcontext(table_lookup_area, 0, component.max_exponentiations + 1); + context_type ct2 = ct.subcontext(circuit_area, 0, component.max_rows); + + + EXP_TABLE exp_table = EXP_TABLE(ct1, instance_input, component.max_exponentiations +1); + EXP_CIRCUIT exp_component = EXP_CIRCUIT(ct2, instance_input, component.max_rows, component.max_exponentiations); + + return typename plonk_exp_wrapper::result_type(component, start_row_index); } template - typename plonk_bbf_wrapper::result_type generate_circuit( - const plonk_bbf_wrapper &component, + typename plonk_exp_wrapper::result_type generate_circuit( + const plonk_exp_wrapper &component, circuit> &bp, assignment> &assignment, - const typename plonk_bbf_wrapper::input_type &instance_input, + const typename plonk_exp_wrapper::input_type &instance_input, const std::size_t start_row_index) { using context_type = typename nil::blueprint::bbf::context; - using Is_Zero = typename nil::blueprint::bbf::is_zero; - using Choice_Function = typename nil::blueprint::bbf::choice_function; - using Carry_On_Addition = typename nil::blueprint::bbf::carry_on_addition; - using Useless = typename nil::blueprint::bbf::useless; using constraint_type = crypto3::zk::snark::plonk_constraint; using plonk_copy_constraint = crypto3::zk::snark::plonk_copy_constraint; using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; using TYPE = typename context_type::TYPE; - using component_type = plonk_bbf_wrapper; + using component_type = plonk_exp_wrapper; using var = typename component_type::var; using nil::blueprint::bbf::row_selector; - std::size_t max_rows = 8; - context_type ct = context_type(assignment.get_description(), max_rows, start_row_index); // max_rows = 8 - TYPE const_test = 5; // TODO: this is a workaround!!! we need a normal way to assign constants to constraint type! - ct.allocate(const_test,0,0,bbf::column_type::constant); - - Is_Zero c1 = Is_Zero(ct, instance_input.x); - - std::array input_x = {instance_input.cx[0],instance_input.cx[1],instance_input.cx[2]}; - std::array input_y = {instance_input.cy[0],instance_input.cy[1],instance_input.cy[2]}; - - std::vector ct2_area = {2,3,4,5}; - context_type ct2 = ct.subcontext(ct2_area,0,4); - Choice_Function c2 = Choice_Function(ct2, instance_input.q, input_x, input_y); + context_type ct = context_type(assignment.get_description(), component.max_rows, start_row_index); - std::vector ct3_area = {7,8,9,10,11}; - context_type ct3 = ct.subcontext(ct3_area,0,4); - Carry_On_Addition c3 = Carry_On_Addition(ct3, input_x, input_y); + std::vector table_lookup_area = {0,1,2,3,4,5}; + std::vector circuit_area; + for(std::size_t i = 6; i < component.witness_amount(); i++){ + circuit_area.push_back(i); + } + context_type ct1 = ct.subcontext(table_lookup_area, 0, component.max_exponentiations + 1); + context_type ct2 = ct.subcontext(circuit_area, 0, component.max_rows); - std::vector ct4_area = {12}; - context_type ct4 = ct.subcontext(ct4_area,0,4); - Useless c4 = Useless(ct4); + EXP_TABLE exp_table = EXP_TABLE(ct1, instance_input, component.max_exponentiations + 1); + EXP_CIRCUIT exp_component = EXP_CIRCUIT(ct2, instance_input, component.max_rows, component.max_exponentiations); ct.optimize_gates(); @@ -245,9 +212,6 @@ namespace nil { std::unordered_map, std::vector> constraint_list = ct.get_constraints(); - // We will store selectors to re-use for lookup gates. - std::unordered_map, std::size_t> selector_to_index_map; - for(const auto& [row_list, constraints] : constraint_list) { /* std::cout << "GATE:\n"; @@ -257,8 +221,6 @@ namespace nil { std::cout << "Rows: "; */ std::size_t selector_index = bp.add_gate(constraints); - selector_to_index_map[row_list] = selector_index; - for(const std::size_t& row_index : row_list) { // std::cout << row_index << " "; assignment.enable_selector(selector_index, row_index); @@ -295,50 +257,25 @@ namespace nil { std::size_t table_index = bp.get_reserved_indices().at(table_name); lookup_gate.push_back({table_index,single_lookup_constraint.second}); } - - auto iter = selector_to_index_map.find(row_list); - if (iter == selector_to_index_map.end()) { - // We have a new selector. - std::size_t selector_index = bp.add_lookup_gate(lookup_gate); - selector_to_index_map[row_list] = selector_index; - for(std::size_t row_index : row_list) { - assignment.enable_selector(selector_index, row_index); - } - } - else { - // Re-use an existing selector. - std::size_t selector_index = iter->second; - bp.add_lookup_gate(lookup_gate, selector_index); + std::size_t selector_index = bp.add_lookup_gate(lookup_gate); + for(std::size_t row_index : row_list) { + assignment.enable_selector(selector_index, row_index); } } // compatibility layer: dynamic lookup tables - continued for(const auto& [name, area] : dynamic_lookup_tables) { bp.register_dynamic_table(name); - - const auto& row_list = area.second; - auto iter = selector_to_index_map.find(row_list); - std::size_t selector_index; - if (iter == selector_to_index_map.end()) { - // Create a new selector. - selector_index = bp.get_dynamic_lookup_table_selector(); - selector_to_index_map[row_list] = selector_index; - for(std::size_t row_index : row_list) { - assignment.enable_selector(selector_index,row_index); - } - } else { - // Re-use existing selector. - selector_index = iter->second; + std::size_t selector_index = bp.get_dynamic_lookup_table_selector(); + for(std::size_t row_index : area.second) { + assignment.enable_selector(selector_index,row_index); } - crypto3::zk::snark::plonk_lookup_table table_specs; table_specs.tag_index = selector_index; table_specs.columns_number = area.first.size(); std::vector dynamic_lookup_cols; for(const auto& c : area.first) { - // TODO: does this make sense?! - dynamic_lookup_cols.push_back( - var(c, 0, false, var::column_type::witness)); + dynamic_lookup_cols.push_back(var(c, 0, false, var::column_type::witness)); // TODO: does this make sense?! } table_specs.lookup_options = {dynamic_lookup_cols}; bp.define_dynamic_table(name,table_specs); @@ -358,10 +295,10 @@ namespace nil { // std::cout << "Gates amount = " << bp.num_gates() << "\n"; // std::cout << "Lookup gates amount = " << bp.num_lookup_gates() << "\n"; - return typename plonk_bbf_wrapper::result_type(component, start_row_index); + return typename plonk_exp_wrapper::result_type(component, start_row_index); } } // namespace components } // namespace blueprint } // namespace nil -#endif // CRYPTO3_BLUEPRINT_PLONK_BBF_WRAPPER_HPP +#endif // CRYPTO3_BLUEPRINT_PLONK_EXP_WRAPPER_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/expresion_visitor_helpers.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/expresion_visitor_helpers.hpp deleted file mode 100644 index f7a984594d..0000000000 --- a/crypto3/libs/blueprint/include/nil/blueprint/bbf/expresion_visitor_helpers.hpp +++ /dev/null @@ -1,195 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2024 Alexey Yashunsky -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// -// @file Declaration of expression visitors that are used by the PLONK BBF context & generic component classes -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_PLONK_BBF_EXPRESSION_VISITOR_HELPERS_HPP -#define CRYPTO3_BLUEPRINT_PLONK_BBF_EXPRESSION_VISITOR_HELPERS_HPP - -#include - -#include -#include - -namespace nil { - namespace blueprint { - namespace bbf { - - // Checks if an expression is just a single variable. - template - class expression_is_variable_visitor : public boost::static_visitor { - public: - expression_is_variable_visitor() {} - - static bool is_var(const crypto3::math::expression& expr) { - expression_is_variable_visitor v = expression_is_variable_visitor(); - return boost::apply_visitor(v, expr.get_expr()); - } - - bool operator()(const crypto3::math::term& term) { - return ((term.get_vars().size() == 1) && term.get_coeff().is_one()); - } - - bool operator()(const crypto3::math::pow_operation& pow) { - return false; - } - - bool operator()(const crypto3::math::binary_arithmetic_operation& op) { - return false; - } - }; - - // Returns the range of rows used by the given expression. The first bool value returns if the expression - // has any variables or not, I.E. if it's false, the other 2 values have no meaning. - template - class expression_row_range_visitor : public boost::static_visitor> { - public: - expression_row_range_visitor() {} - - static std::tuple row_range(const crypto3::math::expression& expr) { - expression_row_range_visitor v = expression_row_range_visitor(); - return boost::apply_visitor(v, expr.get_expr()); - } - - std::tuple operator()(const crypto3::math::term& term) { - bool has_vars = false; - int32_t min_row, max_row; - - if (term.get_vars().size() > 0) { - has_vars = true; - min_row = term.get_vars()[0].rotation; - max_row = term.get_vars()[0].rotation; - for(std::size_t i = 1; i < term.get_vars().size(); i++) { - min_row = std::min(min_row, term.get_vars()[i].rotation); - max_row = std::max(max_row, term.get_vars()[i].rotation); - } - } - return {has_vars, min_row, max_row}; - } - - std::tuple operator()(const crypto3::math::pow_operation& pow) { - return boost::apply_visitor(*this, pow.get_expr().get_expr()); - } - - std::tuple operator()(const crypto3::math::binary_arithmetic_operation& op) { - auto [A_has_vars, A_min, A_max] = boost::apply_visitor(*this, op.get_expr_left().get_expr()); - auto [B_has_vars, B_min, B_max] = boost::apply_visitor(*this, op.get_expr_right().get_expr()); - - if (!A_has_vars) { - return {B_has_vars, B_min, B_max}; - } - if (!B_has_vars) { - return {A_has_vars, A_min, A_max}; - } - return {true, std::min(A_min,B_min), std::max(A_max,B_max)}; - } - }; - - // Converts the given expression to become relative to the given row shift using rotations. - template - class expression_relativize_visitor : public boost::static_visitor> { - private: - int32_t shift; - public: - expression_relativize_visitor(int32_t shift_) : shift(shift_) {} - - static crypto3::math::expression - relativize(const crypto3::math::expression& expr, int32_t shift) { - expression_relativize_visitor v = expression_relativize_visitor(shift); - return boost::apply_visitor(v, expr.get_expr()); - } - - crypto3::math::expression - operator()(const crypto3::math::term& term) { - std::vector vars = term.get_vars(); - - for(std::size_t i = 0; i < vars.size(); i++) { - vars[i].relative = true; - vars[i].rotation += shift; - if (std::abs(vars[i].rotation) > 1) { - BOOST_LOG_TRIVIAL(warning) << "Rotation exceeds 1 after relativization in term " << term << ".\n"; - } - } - - return crypto3::math::term(vars, term.get_coeff()); - } - - crypto3::math::expression - operator()(const crypto3::math::pow_operation& pow) { - return crypto3::math::pow_operation( - boost::apply_visitor(*this, pow.get_expr().get_expr()), - pow.get_power()); - } - - crypto3::math::expression - operator()(const crypto3::math::binary_arithmetic_operation& op) { - return crypto3::math::binary_arithmetic_operation( - boost::apply_visitor(*this, op.get_expr_left().get_expr()), - boost::apply_visitor(*this, op.get_expr_right().get_expr()), - op.get_op()); - } - }; - - // A visitor for checking that in an expression all variables are absolute or all variables are relative - template - class expression_relativity_check_visitor : public boost::static_visitor { - public: - expression_relativity_check_visitor(bool relativity_) : relativity(relativity_) {} - - static bool is_absolute(const crypto3::math::expression& expr) { - expression_relativity_check_visitor v = expression_relativity_check_visitor(false); - return boost::apply_visitor(v, expr.get_expr()); - } - static bool is_relative(const crypto3::math::expression& expr) { - expression_relativity_check_visitor v = expression_relativity_check_visitor(true); - return boost::apply_visitor(v, expr.get_expr()); - } - - bool operator()(const crypto3::math::term& term) { - bool res = true; - - for(std::size_t i = 0; i < term.get_vars().size(); i++) { - res = res && (term.get_vars()[i].relative == relativity); - } - return res; - } - - bool operator()(const crypto3::math::pow_operation& pow) { - return boost::apply_visitor(*this, pow.get_expr().get_expr()); - } - - bool operator()(const crypto3::math::binary_arithmetic_operation& op) { - bool A_res = boost::apply_visitor(*this, op.get_expr_left().get_expr()); - bool B_res = boost::apply_visitor(*this, op.get_expr_right().get_expr()); - - return A_res && B_res; - } - private: - bool relativity; - }; - } // namespace bbf - } // namespace blueprint -} // namespace nil - -#endif // CRYPTO3_BLUEPRINT_PLONK_BBF_EXPRESSION_VISITOR_HELPERS_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/gate_optimizer.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/gate_optimizer.hpp new file mode 100644 index 0000000000..68d440da47 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/gate_optimizer.hpp @@ -0,0 +1,477 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Martun Karapetyan +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK BBF context & generic component classes +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_BBF_GATE_OPTIMIZER_HPP +#define CRYPTO3_BLUEPRINT_BBF_GATE_OPTIMIZER_HPP + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + + template + class optimized_gates { + public: + using context_type = context; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using plonk_copy_constraint = crypto3::zk::snark::plonk_copy_constraint; + using lookup_input_constraints_type = crypto3::zk::snark::lookup_input_constraints; + using lookup_constraint_type = std::pair; + + // Here size_t is the index of the selector from 'selectors_'. + std::unordered_map> constraint_list; + std::vector copy_constraints; + std::map, size_t>> dynamic_lookup_tables; + std::unordered_map> lookup_constraints; + + // We will map each selector to the corresponding id. + std::unordered_map, size_t> selectors_; + + size_t add_selector(const row_selector<>& selector) { + auto iter = selectors_.find(selector); + size_t next_selector_id = selectors_.size(); + if (iter == selectors_.end()) { + selectors_.insert({selector, next_selector_id}); + return next_selector_id; + } + return iter->second; + } + + void add_constraints(size_t selector_id, const std::vector& constraints) { + auto iter = constraint_list.find(selector_id); + if (iter != constraint_list.end()) { + iter->second.insert( + iter->second.end(), + constraints.begin(), + constraints.end()); + } else { + constraint_list.insert({selector_id, constraints}); + } + } + + void add_lookup_constraints( + size_t selector_id, + const std::vector& lookup_list) { + auto iter = lookup_constraints.find(selector_id); + if (iter != lookup_constraints.end()) { + iter->second.insert( + iter->second.end(), + lookup_list.begin(), + lookup_list.end()); + } else { + lookup_constraints.insert({selector_id, lookup_list}); + } + } + }; + + // This is for debugging, don't use extensively. + template + std::ostream& operator<<(std::ostream& os, const optimized_gates& gates) { + for (const auto& [selector, id]: gates.selectors_) { + auto iter = gates.constraint_list.find(id); + if (iter != gates.constraint_list.end()) { + os << "Selector #" << id << " " << selector << std::endl; + for (const auto &constraint : iter->second) { + os << constraint << std::endl; + } + os << "--------------------------------------------------------------" << std::endl; + } + } + return os; + } + + template + class gates_optimizer { + public: + using constraint_type = crypto3::zk::snark::plonk_constraint; + using context_type = context; + using plonk_copy_constraint = crypto3::zk::snark::plonk_copy_constraint; + using lookup_input_constraints_type = crypto3::zk::snark::lookup_input_constraints; + using lookup_constraint_type = std::pair; + + // We expect you to move context into this object, and stop using it. + gates_optimizer(context_type&& c) + : context_(std::make_unique(std::move(c))) { + } + + std::optional> shift_constraints( + const std::vector& constraints, int shift) { + std::vector shifted_constraints; + for (const auto& c: constraints) { + std::optional shifted = c.rotate(shift); + if (!shifted) + return std::nullopt; + shifted_constraints.push_back(*shifted); + } + return shifted_constraints; + } + + /** Tries to shift the lookup constraints to left or right. + * \param[in] shift - Must be +-1, we cannot shift more than by 1. + */ + std::optional> shift_lookup_constraints( + const std::vector& lookup_list, int shift) { + std::vector shifted_lookup_list; + for (const std::pair& lookup: lookup_list) { + std::optional> shifted_constraints = + shift_constraints(lookup.second, shift); + if (!shifted_constraints) + return std::nullopt; + shifted_lookup_list.push_back({lookup.first, *shifted_constraints}); + } + return shifted_lookup_list; + } + + // This function just makes the conversion, does not actually optimize. + optimized_gates context_to_gates() { + optimized_gates result; + + // Take everything out of context, and erase the context to free its memory. + std::unordered_map, std::vector> constraint_list = context_->get_constraints(); + std::map, row_selector<>>> + dynamic_lookup_tables = context_->get_dynamic_lookup_tables(); + std::vector copy_constraints = context_->get_copy_constraints(); + std::unordered_map, std::vector> + lookup_constraints = context_->get_lookup_constraints(); + context_.reset(nullptr); + + // Push all the selectors into 'selectors_' and change the values to ids. + for (auto& [row_list, constraints] : constraint_list) { + size_t id = result.add_selector(row_list); + result.constraint_list[id] = std::move(constraints); + } + for (auto& [name, area] : dynamic_lookup_tables) { + const auto& selector = area.second; + size_t id = result.add_selector(selector); + result.dynamic_lookup_tables[name] = {std::move(area.first), id}; + } + for (const auto& [row_list, lookup_list] : lookup_constraints) { + size_t id = result.add_selector(row_list); +//std::cout << "Processing lookup constraint with row list " << row_list << ", got id = " << id << std::endl; + result.lookup_constraints[id] = std::move(lookup_list); + } + return result; + } + + optimized_gates optimize_gates() { + optimized_gates result = context_to_gates(); + // optimized_gates result = gates_storage_; + // std::cout << "Before: \n\n" << result << std::endl; + // optimize_selectors_by_shifting(result); + optimize_selectors_by_shifting(result); + // std::cout << "After: \n\n" << result << std::endl; + return result; + } + + + private: + + /** This function tries to reduce the number of selectors required by rotating the constraints by +-1. + */ + void optimize_selectors_by_shifting(optimized_gates& gates) { + // First, if some selector can be shifted left or right, and the resulting selector is present, + // record the corresponsing ids. + std::vector left_shifts(gates.selectors_.size(), -1); + std::vector right_shifts(gates.selectors_.size(), -1); + create_selector_shift_maps(gates, left_shifts, right_shifts); + std::vector> chosen_selectors = choose_selectors( + left_shifts, right_shifts); + + //std::cout << "The following selector shifts were selected: \n"; + //for (size_t i = 0; i < chosen_selectors.size(); ++i) { + // std::cout << "#" << i << " -> " << "#" << chosen_selectors[i].first << " shifted " << chosen_selectors[i].second << std::endl; + //} + //std::cout << std::endl; + + // Maps the old selector ID to the new one, only for the selectors to be used. + std::map new_selector_mapping; + size_t next_selector_id = 0; + + // We will move the gates to 'result', since we want to change the selector ids. + // Then they will be moved back to the initial object. + optimized_gates result; + + // Run over the constraints and apply the chosen shifts. + for (size_t id = 0; id < chosen_selectors.size(); ++id) { + size_t replacement_id = chosen_selectors[id].first; + if (new_selector_mapping.find(replacement_id) == new_selector_mapping.end()) + new_selector_mapping[replacement_id] = next_selector_id++; + + int shift = chosen_selectors[id].second; + + if (shift == 0) { + auto iter = gates.constraint_list.find(id); + if (iter != gates.constraint_list.end()) + result.add_constraints(new_selector_mapping[id], std::move(iter->second)); + + auto iter2 = gates.lookup_constraints.find(id); + if (iter2 != gates.lookup_constraints.end()) + result.add_lookup_constraints(new_selector_mapping[id], std::move(iter2->second)); + } else { + // Selector #id is replaced by #replacement_id by shifting 'shift'. + + // Move all from constraints_list. + auto iter = gates.constraint_list.find(id); + if (iter != gates.constraint_list.end()) { + std::vector constraints = std::move(iter->second); + gates.constraint_list.erase(id); + // We need the minus on the next line, we need to shift the constraints in the + // opposite direction of the selector shift. + std::optional> shifted_constraints = + shift_constraints(std::move(constraints), -shift); + + //std::cout << "Shifting " << -shift << " :" << std::endl; + //for (const auto &constraint : constraints) { + // std::cout << constraint << std::endl; + //} + //std::cout << "result is: " << std::endl; + //for (const auto &constraint : *shifted_constraints) { + // std::cout << constraint << std::endl; + //} + //std::cout << "Corresponding selectors are :" << id << " shifting to " << replacement_id << std::endl; + if (!shifted_constraints) + throw std::logic_error("Unable to shift constraints after the shift decisions are made."); + result.add_constraints(new_selector_mapping[replacement_id], *shifted_constraints); + } + + // Move all lookup_constraints. + auto iter2 = gates.lookup_constraints.find(id); + if (iter2 != gates.lookup_constraints.end()) { + std::vector lookup_list = std::move(iter2->second); + gates.lookup_constraints.erase(id); + + // We need the minus on the next line, we need to shift the constraints in the + // opposite direction of the selector shift. + std::optional> shifted_lookup_list = + shift_lookup_constraints(lookup_list, -shift); + if (!shifted_lookup_list) + throw std::logic_error("Unable to shift lookup constraints after the shift decisions are made."); + result.add_lookup_constraints(new_selector_mapping[replacement_id], *shifted_lookup_list); + } + } + } + // Update the selector ids. + for (auto& [selector, id]: gates.selectors_) { + if (new_selector_mapping.find(id) != new_selector_mapping.end()) + result.selectors_.insert({ std::move(selector), new_selector_mapping[id] }); + } + + // Update the selector ids in dynamic lookups. + for(auto& [name, area] : gates.dynamic_lookup_tables) { + area.second = new_selector_mapping[area.second]; + } + + gates.constraint_list = std::move(result.constraint_list); + gates.lookup_constraints = std::move(result.lookup_constraints); + gates.selectors_ = result.selectors_; + } + + /** + * This function is responsible for choosing the selectors we will use. If some selector can be shifted and used instead of another, + * we should do it. We must be careful, such that if there are 3 selectors s1->s2->s3, and we can shift both s1 and s3 to s2, + * we should do that, rather than shifting s2 to s3, and kepping s1. + * \param[in] left_shifts - if not zero, then left_shifts[i] shows the ID of selector that results in shifting selector with ID 'i' to the left, if the corresponding constrants can be rotated. + * \param[in] right_shifts - if not zero, then right_shifts[i] shows the ID of selector that results in shifting selector with ID 'i' to the right, if the corresponding constrants can be rotated. + * \returns The vector of choices made. Element #i in the vector is the selector that will replace selector #i. The second value is either 0, meaning we don't shift, or +-1 showing the shift direction. Careful with the shift value, it shows the direction selector is shifted, the constraints must be rotated in the opposize direction. + */ + std::vector> choose_selectors( + const std::vector& left_shifts, const std::vector& right_shifts) { + size_t N = left_shifts.size(); + // For each selector we will keep a pair, the id of selector that will substitute the current one, and the shift used. + // If shift is 0, then the selector is used. + std::vector> chosen_shifts(N, {-1, -1}); + + // Create the opposite mappings as well. + std::vector reversed_left_shifts(N, -1); + std::vector reversed_right_shifts(N, -1); + for (size_t i = 0; i < N; ++i) { + if (left_shifts[i] != -1) + reversed_left_shifts[left_shifts[i]] = i; + } + for (size_t i = 0; i < N; ++i) { + if (right_shifts[i] != -1) + reversed_right_shifts[right_shifts[i]] = i; + } + + // For each node go to the left and right as far as possible. + // Then run over the chain of selectors and make the decisions. + for (size_t i = 0; i < N; ++i) { + // We may already have a decision for the current node. + if (chosen_shifts[i].first != -1) + continue; + + std::vector chain; + chain.push_back(i); + + size_t current_node = i; + + // Go all the way to the right. + // reversed_left_shifts[i] if shifted to the left will become selector 'i'. + // selector i if shifted right will result in right_shifts[current_node]. + while (reversed_left_shifts[current_node] != -1 || right_shifts[current_node] != -1) { + if (reversed_left_shifts[current_node] != -1) { + current_node = reversed_left_shifts[current_node]; + } else { + current_node = right_shifts[current_node]; + } + chain.push_back(current_node); + } + + // Go all the way to the left. + current_node = i; + while (reversed_right_shifts[current_node] != -1 || left_shifts[current_node] != -1) { + if (reversed_right_shifts[current_node] != -1) { + current_node = reversed_right_shifts[current_node]; + } else { + current_node = left_shifts[current_node]; + } + // It's not optimal to insert into vector, but the vector is very short. + chain.insert(chain.begin(), current_node); + } + + // Now we have a chain of selectors, where chain[i] can be shifted right to create chain[i+1], + // but the shift may or may not be permitted. + for (int j = chain.size() - 1; j >= 0; j--) { + if (chosen_shifts[chain[j]].first != -1) + continue; + // We must either take node chain[j], or (chain[j-1] if chain[j] left shift to chain[j-1] is permitted. + // Check if we have the ability to NOT include chain[j]. + if (j != 0) { + // chain[j] if shifted left will result in chain[j - 1], so let's include chain[j - 1]. + if (left_shifts[chain[j]] == chain[j - 1]) { + chosen_shifts[chain[j - 1]] = {chain[j - 1], 0}; + chosen_shifts[chain[j]] = {chain[j - 1], -1}; + + // Check if chain[j - 2] can be skipped by rotating it to the right. + if (j >= 2 && right_shifts[chain[j - 2]] == chain[j - 1]) { + chosen_shifts[chain[j - 2]] = {chain[j - 1], +1}; + } + } else { + // Include chain[j]. + chosen_shifts[chain[j]] = {chain[j], 0}; + // Check if chain[j - 1] can be skipped by rotating it to the right. + if (right_shifts[chain[j - 1]] == chain[j]) { + chosen_shifts[chain[j - 1]] = {chain[j], +1}; + } + } + } else { + // We cannot skip chain[j] by using chain[j - 1]. + chosen_shifts[chain[j]] = {chain[j], 0}; + } + } + } + return chosen_shifts; + } + + /** + * This function creates vectors with allowed shifts of selectors to the left and right. + * \param[out] left_shifts - if not zero, then left_shifts[i] shows the ID of selector that results in shifting selector with ID 'i' to the left, if the corresponding constrants can be rotated. + * \param[out] right_shifts - if not zero, then right_shifts[i] shows the ID of selector that results in shifting selector with ID 'i' to the right, if the corresponding constrants can be rotated. + */ + void create_selector_shift_maps(const optimized_gates& gates, + std::vector& left_shifts, + std::vector& right_shifts) { + for (const auto& [selector, id]: gates.selectors_) { + if (!selector[0]) { + row_selector<> left_selector = selector; + left_selector >>= 1; + auto iter = gates.selectors_.find(left_selector); + if (iter != gates.selectors_.end()) { + size_t left_id = iter->second; + // We need to check shift +1, if the selecor is shifted left, + // the constraint must be rotated right. + if (can_shift(gates, id, +1)) { + left_shifts[id] = left_id; + } + } + } + + if (!selector[selector.max_index() - 1]) { + row_selector<> right_selector = selector; + right_selector <<= 1; + auto iter = gates.selectors_.find(right_selector); + if (iter != gates.selectors_.end()) { + size_t right_id = iter->second; + // We need to check shift -1, if the selecor is shifted left, + // the constraint must be rotated right. + if (can_shift(gates, id, -1)) { + right_shifts[id] = right_id; + } + } + } + } + } + + bool can_shift(const optimized_gates& gates, + size_t selector_id, + size_t shift) { + // Check if there is a constraint that can't be shifted. + auto iter = gates.constraint_list.find(selector_id); + if (iter != gates.constraint_list.end()) { + const std::vector& constraints = iter->second; + std::optional> shifted_constraints = + shift_constraints(constraints, shift); + if (!shifted_constraints) { + return false; + } + } + + // Check if there is a lookup constraint that can't be shifted. + auto iter2 = gates.lookup_constraints.find(selector_id); + if (iter2 != gates.lookup_constraints.end()) { + const std::vector& lookup_list = iter2->second; + for (const std::pair& lookup: lookup_list) { + std::optional> shifted_constraints = + shift_constraints(lookup.second, shift); + if (!shifted_constraints) { + return false; + } + } + } + return true; + } + + std::unique_ptr> context_; + //optimized_gates gates_storage_; + }; + + } // namespace bbf + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_BBF_GATE_OPTIMIZER_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/generic.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/generic.hpp index ce6a38b8ff..b12ce7dc54 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/bbf/generic.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/generic.hpp @@ -35,15 +35,15 @@ #include #include +#include #include +#include // #include // NB: part of the previous include -#include #include #include //#include #include -#include #include #include #include @@ -54,7 +54,7 @@ namespace nil { template class basic_context { - using assignment_type = assignment>; + using assignment_type = nil::crypto3::zk::snark::plonk_assignment_table; using assignment_description_type = nil::crypto3::zk::snark::plonk_table_description; public: @@ -175,104 +175,107 @@ namespace nil { template class context : public basic_context { // assignment-specific definition - using assignment_type = assignment>; + public: + using TYPE = typename FieldType::value_type; + using assignment_type = nil::crypto3::zk::snark::plonk_assignment_table; using assignment_description_type = nil::crypto3::zk::snark::plonk_table_description; using plonk_copy_constraint = crypto3::zk::snark::plonk_copy_constraint; - using lookup_constraint_type = std::pair>; + using lookup_input_constraints_type = std::vector; + using lookup_constraint_type = std::pair; using dynamic_lookup_table_container_type = std::map, row_selector<>>>; using basic_context::col_map; using basic_context::add_rows_to_description; - public: - using TYPE = typename FieldType::value_type; - using basic_context::get_col; - using basic_context::get_row; - using basic_context::is_allocated; - using basic_context::mark_allocated; - - public: - - context(assignment_type &assignment_table, std::size_t max_rows) - : basic_context(add_rows_to_description(assignment_table.get_description(), max_rows), max_rows) - , at(assignment_table) - { }; - - context(assignment_type &assignment_table, std::size_t max_rows, std::size_t row_shift) - : basic_context(add_rows_to_description(assignment_table.get_description(), max_rows), max_rows, row_shift) - , at(assignment_table) - { }; - - void allocate(TYPE &C, size_t col, size_t row, column_type t) { - if (is_allocated(col, row, t)) { - std::stringstream ss; - ss << "RE-allocation of " << t << " cell at col = " << col << ", row = " << row << ".\n"; - throw std::logic_error(ss.str()); - } - switch (t) { - // NB: we use get_col/get_row here because active area might differ - // from the entire assignment table, while col and row are intended - // to be _relative_ to the active area - case column_type::witness: at.witness(get_col(col,t), get_row(row)) = C; break; - case column_type::public_input: at.public_input(get_col(col,t), get_row(row)) = C; break; - case column_type::constant: - // constants should already be assigned at this point - if (C != at.constant(get_col(col,t), get_row(row))) { - BOOST_LOG_TRIVIAL(error) << "Constant " << C << "doesn't match previous assignment " - << at.constant(get_col(col,t), get_row(row)) << "\n"; - } - BOOST_ASSERT(C == at.constant(get_col(col,t), get_row(row))); - break; - } - mark_allocated(col, row, t); - } - - void copy_constrain(TYPE &A, TYPE &B) { - if (A != B) { - // NB: This might be an error, but we don't stop execution, - // because we want to be able to run tests-to-fail. - BOOST_LOG_TRIVIAL(warning) << "Assignment violates copy constraint (" << A << " != " << B << ")"; - } - } - void constrain(TYPE C, std::string constraint_name) { - if (C != 0) { - // NB: This might be an error, but we don't stop execution, - // because we want to be able to run tests-to-fail. - BOOST_LOG_TRIVIAL(warning) << "Assignment violates polynomial constraint " - << constraint_name << " (" << C << " != 0)"; - } - } - void lookup(std::vector &C, std::string table_name) { - // TODO: actually check membership of C in table? - } - void lookup_table(std::string name, std::vector W, std::size_t from_row, std::size_t num_rows) { - // most probably do nothing - } - context subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { - context res = *this; - std::vector new_W = {}; - for(std::size_t i = 0; i < W.size(); i++) { - new_W.push_back(col_map[column_type::witness][W[i]]); - } - res.col_map[column_type::witness] = new_W; - res.row_shift += new_row_shift; - res.max_rows = new_max_rows; - res.current_row[column_type::witness] = 0; // reset to 0, because in the new column set everything is different - return res; - } - - context fresh_subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { - context res = subcontext(W, new_row_shift, new_max_rows); - // TODO: Maybe we should create a fresh assignment table here? - return res; - } + using basic_context::get_col; + using basic_context::get_row; + using basic_context::is_allocated; + using basic_context::mark_allocated; + + context(assignment_type &assignment_table, std::size_t max_rows) + : basic_context(add_rows_to_description(assignment_table.get_description(), max_rows), max_rows) + , at(assignment_table) + { }; + + context(assignment_type &assignment_table, std::size_t max_rows, std::size_t row_shift) + : basic_context(add_rows_to_description(assignment_table.get_description(), max_rows), max_rows, row_shift) + , at(assignment_table) + { }; + + void allocate(TYPE &C, size_t col, size_t row, column_type t) { + if (is_allocated(col, row, t)) { + std::stringstream ss; + ss << "RE-allocation of " << t << " cell at col = " << col << ", row = " << row << ".\n"; + throw std::logic_error(ss.str()); + } + switch (t) { + // NB: we use get_col/get_row here because active area might differ + // from the entire assignment table, while col and row are intended + // to be _relative_ to the active area + case column_type::witness: at.witness(get_col(col,t), get_row(row)) = C; break; + case column_type::public_input: at.public_input(get_col(col,t), get_row(row)) = C; break; + case column_type::constant: + // constants should already be assigned at this point + if (C != at.constant(get_col(col,t), get_row(row))) { + BOOST_LOG_TRIVIAL(error) << "Constant " << C << "doesn't match previous assignment " + << at.constant(get_col(col,t), get_row(row)) << "\n"; + } + BOOST_ASSERT(C == at.constant(get_col(col,t), get_row(row))); + break; + default: + throw std::logic_error("Unknown column type."); + } + mark_allocated(col, row, t); + } + + void copy_constrain(TYPE &A, TYPE &B) { + if (A != B) { + // NB: This might be an error, but we don't stop execution, + // because we want to be able to run tests-to-fail. + BOOST_LOG_TRIVIAL(warning) << "Assignment violates copy constraint (" << A << " != " << B << ")"; + } + } + void constrain(TYPE C, std::string constraint_name) { + if (C != 0) { + // NB: This might be an error, but we don't stop execution, + // because we want to be able to run tests-to-fail. + BOOST_LOG_TRIVIAL(warning) << "Assignment violates polynomial constraint " + << constraint_name << " (" << C << " != 0)"; + } + } + void lookup(std::vector &C, std::string table_name) { + // TODO: actually check membership of C in table? + } + void lookup_table(std::string name, std::vector W, std::size_t from_row, std::size_t num_rows) { + // most probably do nothing + } + context subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { + context res = *this; + std::vector new_W = {}; + for(std::size_t i = 0; i < W.size(); i++) { + new_W.push_back(col_map[column_type::witness][W[i]]); + } + res.col_map[column_type::witness] = new_W; + res.row_shift += new_row_shift; + res.max_rows = new_max_rows; + res.current_row[column_type::witness] = 0; // reset to 0, because in the new column set everything is different + return res; + } + + context fresh_subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { + context res = subcontext(W, new_row_shift, new_max_rows); + // TODO: Maybe we should create a fresh assignment table here? + return res; + } private: // reference to the actual assignment table assignment_type &at; }; + // circuit-specific definition template - class context : public basic_context { // circuit-specific definition + class context : public basic_context { + public: using constraint_id_type = gate_id; using value_type = typename FieldType::value_type; using var = crypto3::zk::snark::plonk_variable; @@ -280,357 +283,392 @@ namespace nil { using plonk_copy_constraint = crypto3::zk::snark::plonk_copy_constraint; using constraints_container_type = std::map>>; using copy_constraints_container_type = std::vector; // TODO: maybe it's a set, not a vec? + using lookup_input_constraints_type = crypto3::zk::snark::lookup_input_constraints; using lookup_constraints_container_type = std::map, // - std::pair,row_selector<>>>; + std::pair>>; // ^^^ expressions, rows - using lookup_constraint_type = std::pair>; // NB: NOT exactly as plonk!!! + // NB: NOT exactly as plonk!!! + using lookup_constraint_type = std::pair; using dynamic_lookup_table_container_type = std::map, row_selector<>>>; // ^^^ name -> (columns, rows) using basic_context::col_map; using basic_context::add_rows_to_description; - using assignment_type = assignment>; + using assignment_type = nil::crypto3::zk::snark::plonk_assignment_table; using assignment_description_type = nil::crypto3::zk::snark::plonk_table_description; using basic_context::row_shift; - public: - using TYPE = constraint_type; - using basic_context::get_col; - using basic_context::get_row; - using basic_context::is_allocated; - using basic_context::mark_allocated; - - public: - - /** - * \param[in] desc - this assignment table description actually shows the used part of the table, - * and 'max_rows' rows will be added to it. - */ - context(const assignment_description_type& desc, std::size_t max_rows) - : desc(add_rows_to_description(desc, max_rows)) - , basic_context(add_rows_to_description(desc, max_rows), max_rows) { - reset_storage(); - } - - /** - * \param[in] desc - this assignment table description actually shows the used part of the table, - * and 'max_rows' rows will be added to it. - */ - context(const assignment_description_type& desc, std::size_t max_rows, std::size_t row_shift) - : desc(add_rows_to_description(desc, max_rows)) - , basic_context(add_rows_to_description(desc, max_rows), max_rows, row_shift) { - reset_storage(); - } - - void allocate(TYPE &C, size_t col, size_t row, column_type t) { - if (is_allocated(col, row, t)) { - BOOST_LOG_TRIVIAL(warning) << "RE-allocation of " << t << " cell at col = " << col << ", row = " << row << ".\n"; - } - if (t == column_type::constant) { - auto [has_vars, min_row, max_row] = expression_row_range_visitor::row_range(C); - if (has_vars) { - std::stringstream error; - error << "Trying to assign constraint " << C << " to constant cell!"; - throw std::invalid_argument(error.str()); - } - value_type C_val = C.evaluate(0, *constants_storage); - constants_storage->constant(get_col(col,t), get_row(row)) = C_val; // store the constant - } - var res = var(get_col(col,t), get_row(row), // get_col/get_row are active-area-aware - false, // false = use absolute cell address - static_cast(t)); - if ((C != TYPE()) && (t == column_type::witness)) { // TODO: TYPE() - is this ok? NB: we only constrain witnesses! - constrain(res - C,""); // TODO: maybe add a name for this constraint? - } - - C = res; - mark_allocated(col, row, t); + using TYPE = constraint_type; + using basic_context::get_col; + using basic_context::get_row; + using basic_context::is_allocated; + using basic_context::mark_allocated; + + /** + * \param[in] desc - this assignment table description actually shows the used part of the table, + * and 'max_rows' rows will be added to it. + */ + context(const assignment_description_type& desc, std::size_t max_rows) + : desc(add_rows_to_description(desc, max_rows)) + , basic_context(add_rows_to_description(desc, max_rows), max_rows) { + reset_storage(); + } + + /** + * \param[in] desc - this assignment table description actually shows the used part of the table, + * and 'max_rows' rows will be added to it. + */ + context(const assignment_description_type& desc, std::size_t max_rows, std::size_t row_shift) + : desc(add_rows_to_description(desc, max_rows)) + , basic_context(add_rows_to_description(desc, max_rows), max_rows, row_shift) { + reset_storage(); + } + + void allocate(TYPE &C, size_t col, size_t row, column_type t) { + if (is_allocated(col, row, t)) { + // BOOST_LOG_TRIVIAL(warning) << "RE-allocation of " << t << " cell at col = " << col << ", row = " << row << ".\n"; + } + if (t == column_type::constant) { + auto [has_vars, min_row, max_row] = nil::crypto3::math::expression_row_range_visitor::row_range(C); + if (has_vars) { + std::stringstream error; + error << "Trying to assign constraint " << C << " to constant cell!"; + throw std::invalid_argument(error.str()); + } + value_type C_val = C.evaluate(0, *constants_storage); + constants_storage->constant(get_col(col,t), get_row(row)) = C_val; // store the constant + } + var res = var(get_col(col,t), get_row(row), // get_col/get_row are active-area-aware + false, // false = use absolute cell address + static_cast(t)); + if ((C != TYPE()) && (t == column_type::witness)) { // TODO: TYPE() - is this ok? NB: we only constrain witnesses! + constrain(res - C,""); // TODO: maybe add a name for this constraint? + } + + C = res; + mark_allocated(col, row, t); + } + + void copy_constrain(TYPE &A, TYPE &B) { + auto is_var = nil::crypto3::math::expression_is_variable_visitor::is_var; + + if (!is_var(A) || !is_var(B)) { + BOOST_LOG_TRIVIAL(error) << "Copy constraint applied to non-variable: " << A << " = " << B << ".\n"; + } + BOOST_ASSERT(is_var(A) && is_var(B)); + + var A_var = boost::get>(A.get_expr()).get_vars()[0]; + var B_var = boost::get>(B.get_expr()).get_vars()[0]; + + if (A_var != B_var) { + copy_constraints->push_back({A_var,B_var}); + } + } + + TYPE relativize(const TYPE& C, int32_t shift) { + auto constraint = C.rotate(shift); + if (!constraint) + throw std::logic_error("Can't shift the constraint in the given direction."); + return *constraint; + } + + std::vector relativize(const std::vector& C, int32_t shift) { + std::vector res; + for(const TYPE& c_part : C) { + auto constraint = c_part.rotate(shift); + if (!constraint) + throw std::logic_error("Can't shift the constraint in the given direction."); + res.push_back(*constraint); + } + return res; + } + + void constrain(const TYPE& C, std::string constraint_name) { + if (!C.is_absolute()) { + std::stringstream ss; + ss << "Constraint " << C << " has relative variables, cannot constrain."; + throw std::logic_error(ss.str()); + } + + auto [has_vars, min_row, max_row] = nil::crypto3::math::expression_row_range_visitor::row_range(C); + if (!has_vars) { + BOOST_LOG_TRIVIAL(error) << "Constraint " << C << " has no variables!\n"; + } + BOOST_ASSERT(has_vars); + if (max_row - min_row > 2) { + BOOST_LOG_TRIVIAL(warning) << "Constraint " << C << " spans over 3 rows!\n"; + } + std::size_t row = (min_row + max_row)/2; + + std::optional C_rel = C.rotate(-row); + if (!C_rel) { + throw std::logic_error("Can't shift the constraint in the given direction."); + } + add_constraint(*C_rel, row); + } + + // accesible only at GenerationStage::CONSTRAINTS ! + void relative_constrain(TYPE C_rel, std::size_t row) { + if (!C_rel.is_relative()) { + std::stringstream ss; + ss << "Constraint " << C_rel << " has absolute variables, cannot constrain."; + throw std::logic_error(ss.str()); + } + add_constraint(C_rel, get_row(row)); + } + + void relative_constrain(TYPE C_rel, std::size_t start_row, std::size_t end_row) { + if (!is_relative(C_rel)) { + std::stringstream ss; + ss << "Constraint " << C_rel << " has absolute variables, cannot constrain."; + throw std::logic_error(ss.str()); } + add_constraint(C_rel, get_row(start_row), get_row(end_row)); + } - void copy_constrain(TYPE &A, TYPE &B) { - auto is_var = expression_is_variable_visitor::is_var; - - if (!is_var(A) || !is_var(B)) { - BOOST_LOG_TRIVIAL(error) << "Copy constraint applied to non-variable: " << A << " = " << B << ".\n"; - } - BOOST_ASSERT(is_var(A) && is_var(B)); - var A_var = boost::get>(A.get_expr()).get_vars()[0]; - var B_var = boost::get>(B.get_expr()).get_vars()[0]; + void lookup(std::vector &C, std::string table_name) { + std::set base_rows = {}; - if (A_var != B_var) { - copy_constraints->push_back({A_var,B_var}); + // Choose the best row to relativize. Different expressions in a single lookup might accept + // up to 3 different rows for relativization. We take the intersection for all expressions in + // the constraint. + for(TYPE c_part : C) { + auto [has_vars, min_row, max_row] = nil::crypto3::math::expression_row_range_visitor::row_range(c_part); + if (has_vars) { // NB: not having variables seems to be ok for a part of a lookup expression + if (max_row - min_row > 2) { + BOOST_LOG_TRIVIAL(warning) << "Expression " << c_part << " in lookup constraint spans over 3 rows!\n"; + } + std::size_t row = (min_row + max_row)/2; + std::set current_base_rows = {row}; + if (max_row - min_row <= 1) { + current_base_rows.insert(row+1); + } + if ((max_row == min_row) && (row > 0)) { + current_base_rows.insert(row-1); + } + if (base_rows.empty()) { + base_rows = current_base_rows; + } else { + std::set new_base_rows; + std::set_intersection(base_rows.begin(), base_rows.end(), + current_base_rows.begin(), current_base_rows.end(), + std::inserter(new_base_rows, new_base_rows.end())); + base_rows = new_base_rows; + } } } - - bool is_absolute(TYPE C) { - return expression_relativity_check_visitor::is_absolute(C); - } - bool is_relative(TYPE C) { - return expression_relativity_check_visitor::is_relative(C); - } - TYPE relativize(TYPE C, int32_t shift) { - return expression_relativize_visitor::relativize(C, shift); - } - std::vector relativize(std::vector C, int32_t shift) { - std::vector res; - for(TYPE c_part : C) { - res.push_back(expression_relativize_visitor::relativize(c_part,shift)); - } - return res; + if (base_rows.empty()) { + BOOST_LOG_TRIVIAL(error) << "Lookup constraint expressions have no variables or have incompatible spans!\n"; } + BOOST_ASSERT(!base_rows.empty()); + std::size_t row = (base_rows.size() == 3) ? *(std::next(base_rows.begin())) : *(base_rows.begin()); + add_lookup_constraint(table_name, relativize(C, -row), row); + } - void constrain(TYPE C, std::string constraint_name) { - if (!is_absolute(C)) { + // accesible only at GenerationStage::CONSTRAINTS ! + void relative_lookup(std::vector &C, std::string table_name, std::size_t row) { + for(const TYPE c_part : C) { + if (!c_part.is_relative()) { std::stringstream ss; - ss << "Constraint " << C << " has relative variables, cannot constrain."; + ss << "Constraint " << c_part << " has absolute variables, cannot constrain."; throw std::logic_error(ss.str()); } - - auto [has_vars, min_row, max_row] = expression_row_range_visitor::row_range(C); - if (!has_vars) { - BOOST_LOG_TRIVIAL(error) << "Constraint " << C << " has no variables!\n"; - } - BOOST_ASSERT(has_vars); - if (max_row - min_row > 2) { - BOOST_LOG_TRIVIAL(warning) << "Constraint " << C << " spans over 3 rows!\n"; - } - std::size_t row = (min_row + max_row)/2; - - TYPE C_rel = relativize(C, -row); - - add_constraint(C_rel, row); } + add_lookup_constraint(table_name, C, row); + } - // accesible only at GenerationStage::CONSTRAINTS ! - void relative_constrain(TYPE C_rel, std::size_t row) { - if (!is_relative(C_rel)) { + void relative_lookup(std::vector &C, std::string table_name, std::size_t start_row, std::size_t end_row) { + for(const TYPE c_part : C) { + if (!is_relative(c_part)) { std::stringstream ss; - ss << "Constraint " << C_rel << " has absolute variables, cannot constrain."; + ss << "Constraint " << c_part << " has absolute variables, cannot constrain."; throw std::logic_error(ss.str()); } - add_constraint(C_rel, get_row(row)); - } - - void lookup(std::vector &C, std::string table_name) { - std::set base_rows = {}; - - // Choose the best row to relativize. Different expressions in a single lookup might accept - // up to 3 different rows for relativization. We take the intersection for all expressions in - // the constraint. - for(TYPE c_part : C) { - auto [has_vars, min_row, max_row] = expression_row_range_visitor::row_range(c_part); - if (has_vars) { // NB: not having variables seems to be ok for a part of a lookup expression - if (max_row - min_row > 2) { - BOOST_LOG_TRIVIAL(warning) << "Expression " << c_part << " in lookup constraint spans over 3 rows!\n"; - } - std::size_t row = (min_row + max_row)/2; - std::set current_base_rows = {row}; - if (max_row - min_row <= 1) { - current_base_rows.insert(row+1); - } - if (max_row == min_row) { - current_base_rows.insert(row-1); - } - if (base_rows.empty()) { - base_rows = current_base_rows; - } else { - std::set new_base_rows; - std::set_intersection(base_rows.begin(), base_rows.end(), - current_base_rows.begin(), current_base_rows.end(), - std::inserter(new_base_rows, new_base_rows.end())); - base_rows = new_base_rows; - } - } - } - if (base_rows.empty()) { - BOOST_LOG_TRIVIAL(error) << "Lookup constraint expressions have no variables or have incompatible spans!\n"; - } - BOOST_ASSERT(!base_rows.empty()); - - std::size_t row = (base_rows.size() == 3) ? *(std::next(base_rows.begin())) : *(base_rows.begin()); - std::vector res; - for(TYPE c_part : C) { - TYPE c_part_rel = expression_relativize_visitor::relativize(c_part, -row); - res.push_back(c_part_rel); - } - add_lookup_constraint(table_name, res, row); - } - - // accesible only at GenerationStage::CONSTRAINTS ! - void relative_lookup(std::vector &C, std::string table_name, std::size_t row) { - for(const TYPE c_part : C) { - if (!is_relative(c_part)) { - std::stringstream ss; - ss << "Constraint " << c_part << " has absolute variables, cannot constrain."; - throw std::logic_error(ss.str()); - } - } - add_lookup_constraint(table_name, C, row); - } - - void lookup_table(std::string name, std::vector W, std::size_t from_row, std::size_t num_rows) { - if (lookup_tables->find(name) != lookup_tables->end()) { - BOOST_LOG_TRIVIAL(error) << "Double declaration of dynamic lookup table '" << name << "'!\n"; - } - BOOST_ASSERT(lookup_tables->find(name) == lookup_tables->end()); - std::vector cols; - row_selector<> rows(desc.rows_amount); - - for(std::size_t i = 0; i < W.size(); i++) { - cols.push_back(col_map[column_type::witness][W[i]]); - } - for(std::size_t i = 0; i < num_rows; i++) { - rows.set_row(get_row(from_row + i)); // store absolute row numbers - } - - lookup_tables->insert({name,{cols,rows}}); - } - - void optimize_gates() { - // NB: std::map>> constraints; - // intended to - // shift some of the constraints so that we have less selectors - /* - for(const auto& [id, data] : *constraints) { - std::cout << "Constraint: " << data.first << "\n"; - for(std::size_t row : data.second) { - std::cout << row << " "; - } - std::cout << "\n"; - } - */ } + add_lookup_constraint(table_name, C, start_row, end_row); + } - std::unordered_map, std::vector> get_constraints() { - // joins constraints with identic selectors into a single gate - - // drop the constraint_id from the stored id->(constraint,row_list) map and - // join constrains into single element if they have the same row list: - std::unordered_map, std::vector> res; - for(const auto& [id, data] : *constraints) { - auto it = res.find(data.second); - if (it == res.end()) { - res[data.second] = {data.first}; - } else { - it->second.push_back(data.first); - } - } - return res; + void lookup_table(std::string name, std::vector W, std::size_t from_row, std::size_t num_rows) { + if (lookup_tables->find(name) != lookup_tables->end()) { + BOOST_LOG_TRIVIAL(error) << "Double declaration of dynamic lookup table '" << name << "'!\n"; } + BOOST_ASSERT(lookup_tables->find(name) == lookup_tables->end()); + std::vector cols; + row_selector<> rows(desc.rows_amount); - std::vector& get_copy_constraints() { - return *copy_constraints; + for(std::size_t i = 0; i < W.size(); i++) { + cols.push_back(col_map[column_type::witness][W[i]]); } - - dynamic_lookup_table_container_type& get_dynamic_lookup_tables() { - return *lookup_tables; + for(std::size_t i = 0; i < num_rows; i++) { + rows.set_row(get_row(from_row + i)); // store absolute row numbers } - std::unordered_map, std::vector> get_lookup_constraints() { - // std::map, // - // std::pair,row_selector<>>> // expressions, rows + lookup_tables->insert({name,{cols,rows}}); + } - std::unordered_map, std::vector> res; - for(const auto& [id, data] : *lookup_constraints) { - auto it = res.find(data.second); - if (it == res.end()) { - res[data.second] = {{id.first, data.first}}; - } else { - it->second.push_back({id.first, data.first}); - } - } + std::unordered_map, std::vector> get_constraints() { + // joins constraints with identic selectors into a single gate - /* - for(const auto& [lcs, rows] : res) { - for(const auto& [table, cs] : lcs) { - std::cout << "Table " << table << ": "; - for(const auto& c : cs) { std::cout << c << ", "; } - } - std::cout << "Rows: "; - for(const auto& r : rows) { std::cout << r << " "; } - std::cout << "\n"; + // drop the constraint_id from the stored id->(constraint,row_list) map and + // join constrains into single element if they have the same row list: + std::unordered_map, std::vector> res; + for(const auto& [id, data] : *constraints) { + auto it = res.find(data.second); + if (it == res.end()) { + res[data.second] = {data.first}; + } else { + it->second.push_back(data.first); } - */ - return res; } + return res; + } - context subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { - context res = *this; - std::vector new_W = {}; - for(std::size_t i = 0; i < W.size(); i++) { - new_W.push_back(col_map[column_type::witness][W[i]]); - } - res.col_map[column_type::witness] = new_W; - res.row_shift += new_row_shift; - res.max_rows = new_max_rows; - res.current_row[column_type::witness] = 0; // reset to 0, because in the new column set everything is different - return res; - } + std::vector& get_copy_constraints() { + return *copy_constraints; + } - void reset_storage() { - constraints = std::make_shared(); - copy_constraints = std::make_shared(); - lookup_constraints = std::make_shared(); - lookup_tables = std::make_shared(); - constants_storage = std::make_shared(0, 0, desc.constant_columns, 0); - is_fresh = false; - } + dynamic_lookup_table_container_type& get_dynamic_lookup_tables() { + return *lookup_tables; + } - auto get_constants() { - return constants_storage->constants(); - } + std::unordered_map, std::vector> get_lookup_constraints() { + // std::map, // + // std::pair,row_selector<>>> // expressions, rows - // This one will create its own set of constraint storages. - context fresh_subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { - context res = subcontext(W, new_row_shift, new_max_rows); - res.reset_storage(); - is_fresh = true; - return res; + std::unordered_map, std::vector> res; + for(const auto& [id, data] : *lookup_constraints) { + auto it = res.find(data.second); + if (it == res.end()) { + res[data.second] = {{id.first, data.first}}; + } else { + it->second.push_back({id.first, data.first}); + } } - - private: - - void add_constraint(TYPE &C_rel, std::size_t row) { - std::size_t stored_row = row - (is_fresh ? row_shift : 0); - constraint_id_type C_id = constraint_id_type(C_rel); - if (constraints->find(C_id) == constraints->end()) { - constraints->insert({C_id, {C_rel, row_selector<>(desc.rows_amount)}}); + /* + for(const auto& [lcs, rows] : res) { + for(const auto& [table, cs] : lcs) { + std::cout << "Table " << table << ": "; + for(const auto& c : cs) { std::cout << c << ", "; } } - constraints->at(C_id).second.set_row(stored_row); + std::cout << "Rows: "; + for(const auto& r : rows) { std::cout << r << " "; } + std::cout << "\n"; } - - void add_lookup_constraint(std::string table_name, std::vector &C_rel, std::size_t row) { - std::size_t stored_row = row - (is_fresh ? row_shift : 0); - constraint_id_type C_id = constraint_id_type(C_rel); - if (lookup_constraints->find({table_name,C_id}) == lookup_constraints->end()) { - lookup_constraints->insert({{table_name,C_id}, {C_rel, row_selector<>(desc.rows_amount)}}); - } - lookup_constraints->at({table_name,C_id}).second.set_row(stored_row); - } - - // Assignment description will be used when resetting the context. - assignment_description_type desc; - - // constraints (with unique id), and the rows they are applied to - std::shared_ptr constraints; - // copy constraints as in BP - std::shared_ptr copy_constraints; - // lookup constraints with table name, unique id and row list - std::shared_ptr lookup_constraints; - // dynamic lookup tables - std::shared_ptr lookup_tables; - // constants - std::shared_ptr constants_storage; - // are we in a fresh context or not - bool is_fresh; + */ + return res; + } + + context subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { + context res = *this; + std::vector new_W = {}; + for(std::size_t i = 0; i < W.size(); i++) { + new_W.push_back(col_map[column_type::witness][W[i]]); + } + res.col_map[column_type::witness] = new_W; + res.row_shift += new_row_shift; + res.max_rows = new_max_rows; + res.current_row[column_type::witness] = 0; // reset to 0, because in the new column set everything is different + return res; + } + + void reset_storage() { + constraints = std::make_shared(); + copy_constraints = std::make_shared(); + lookup_constraints = std::make_shared(); + lookup_tables = std::make_shared(); + constants_storage = std::make_shared(0, 0, desc.constant_columns, 0); + is_fresh = false; + } + + auto get_constants() { + return constants_storage->constants(); + } + + // This one will create its own set of constraint storages. + context fresh_subcontext(const std::vector& W, std::size_t new_row_shift, std::size_t new_max_rows) { + context res = subcontext(W, new_row_shift, new_max_rows); + res.reset_storage(); + is_fresh = true; + return res; + } + + private: + void add_constraint(TYPE &C_rel, std::size_t row) { + std::size_t stored_row = row - (is_fresh ? row_shift : 0); + constraint_id_type C_id = constraint_id_type(C_rel); + if (constraints->find(C_id) == constraints->end()) { + constraints->insert({C_id, {C_rel, row_selector<>(desc.rows_amount)}}); + } + constraints->at(C_id).second.set_row(stored_row); + } + + void add_constraint(TYPE &C_rel, std::size_t start_row, std::size_t end_row) { + std::size_t stored_start_row = start_row - (is_fresh ? row_shift : 0); + std::size_t stored_end_row = end_row - (is_fresh ? row_shift : 0); + constraint_id_type C_id = constraint_id_type(C_rel); + if (constraints->find(C_id) == constraints->end()) { + constraints->insert({C_id, {C_rel, row_selector<>(desc.rows_amount)}}); + } + constraints->at(C_id).second.set_interval(stored_start_row, stored_end_row); + } + + void add_lookup_constraint( + std::string table_name, const lookup_input_constraints_type &C_rel, std::size_t row) { + std::size_t stored_row = row - (is_fresh ? row_shift : 0); + constraint_id_type C_id = constraint_id_type(C_rel); + std::pair key = {table_name, C_id}; + if (lookup_constraints->find(key) == lookup_constraints->end()) { + lookup_constraints->insert({ + key, + {C_rel, row_selector<>(desc.rows_amount)} + }); + } + lookup_constraints->at(key).second.set_row(stored_row); + } + + void add_lookup_constraint(std::string table_name, std::vector &C_rel, std::size_t start_row, std::size_t end_row) { + std::size_t stored_start_row = start_row - (is_fresh ? row_shift : 0); + std::size_t stored_end_row = end_row - (is_fresh ? row_shift : 0); + constraint_id_type C_id = constraint_id_type(C_rel); + if (lookup_constraints->find({table_name,C_id}) == lookup_constraints->end()) { + lookup_constraints->insert({{table_name,C_id}, {lookup_input_constraints_type(C_rel), row_selector<>(desc.rows_amount)}}); + } + lookup_constraints->at({table_name,C_id}).second.set_interval(stored_start_row, stored_end_row); + } + + void add_lookup_constraint(std::string table_name, std::vector &C_rel, std::size_t row) { + add_lookup_constraint(table_name, lookup_input_constraints_type(C_rel), row); + } + + // Assignment description will be used when resetting the context. + assignment_description_type desc; + + // constraints (with unique id), and the rows they are applied to + std::shared_ptr constraints; + // copy constraints as in BP + std::shared_ptr copy_constraints; + // lookup constraints with table name, unique id and row list + std::shared_ptr lookup_constraints; + // dynamic lookup tables + std::shared_ptr lookup_tables; + // constants + std::shared_ptr constants_storage; + // are we in a fresh context or not + bool is_fresh; }; template class generic_component { public: + struct table_params { + std::size_t witnesses; + std::size_t public_inputs; + std::size_t constants; + std::size_t rows; + }; using TYPE = typename std::conditional(stage), crypto3::zk::snark::plonk_constraint, typename FieldType::value_type>::type; @@ -641,43 +679,47 @@ namespace nil { context_type &ct; public: - void allocate(TYPE &C, column_type t = column_type::witness) { - auto [col, row] = ct.next_free_cell(t); - ct.allocate(C, col, row, t); - } - - void allocate(TYPE &C, size_t col, size_t row, column_type t = column_type::witness) { - ct.allocate(C,col,row,t); - } - - void copy_constrain(TYPE &A, TYPE &B) { - ct.copy_constrain(A,B); - } - - void constrain(TYPE C, std::string constraint_name = "") { - ct.constrain(C, constraint_name); - } - - void lookup(std::vector C, std::string table_name) { - ct.lookup(C,table_name); - } - - void lookup(TYPE C, std::string table_name) { - std::vector input = {C}; - ct.lookup(input,table_name); - } - - void lookup_table(std::string name, std::vector W, std::size_t from_row, std::size_t num_rows) { - ct.lookup_table(name,W,from_row,num_rows); - } - - generic_component(context_type &context_object, // context object, created outside - bool crlf = true // do we assure a component starts on a new row? Default is "yes" - ) : ct(context_object) { - if (crlf) { // TODO: Implement crlf parameter consequences - ct.new_line(column_type::witness); - } - }; + static table_params get_minimal_requirements() { + return {0,0,0,0}; + } + + void allocate(TYPE &C, column_type t = column_type::witness) { + auto [col, row] = ct.next_free_cell(t); + ct.allocate(C, col, row, t); + } + + void allocate(TYPE &C, size_t col, size_t row, column_type t = column_type::witness) { + ct.allocate(C,col,row,t); + } + + void copy_constrain(TYPE &A, TYPE &B) { + ct.copy_constrain(A,B); + } + + void constrain(TYPE C, std::string constraint_name = "") { + ct.constrain(C, constraint_name); + } + + void lookup(std::vector C, std::string table_name) { + ct.lookup(C,table_name); + } + + void lookup(TYPE C, std::string table_name) { + std::vector input = {C}; + ct.lookup(input,table_name); + } + + void lookup_table(std::string name, std::vector W, std::size_t from_row, std::size_t num_rows) { + ct.lookup_table(name,W,from_row,num_rows); + } + + generic_component(context_type &context_object, // context object, created outside + bool crlf = true // do we assure a component starts on a new row? Default is "yes" + ) : ct(context_object) { + if (crlf) { // TODO: Implement crlf parameter consequences + ct.new_line(column_type::witness); + } + } }; } // namespace bbf diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_dynamic.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_dynamic.hpp new file mode 100644 index 0000000000..98f3eb1c64 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_dynamic.hpp @@ -0,0 +1,862 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + struct keccak_dynamic_raw_input { + using TYPE = typename FieldType::value_type; + + TYPE rlc_challenge; + std::vector, std::pair>> input; + }; + + // Component for keccak table + template + class keccak_dynamic : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + using typename generic_component::table_params; + using raw_input_type = typename std::conditional,std::tuple<>>::type; + using integral_type = typename FieldType::integral_type; + using value_type = typename FieldType::value_type; + using KECCAK_ROUND = typename bbf::keccak_round; + + struct input_type { + TYPE rlc_challenge; + std::vector, std::pair>> input; + }; + + const std::size_t block_rows_amount = 6247; + const std::size_t state_rows_amount = 5; + const std::size_t chunks_rows_amount = 34; + const std::size_t unsparser_rows_amount = 4; + + const integral_type sparse_x80 = + calculate_sparse(integral_type(0x8000000000000000)) >> 144; + const integral_type sparse_x7f = + calculate_sparse(integral_type(0x8000000000000000 - 1)) >> 144; + + integral_type calculate_sparse(const integral_type &value) const { + integral_type result = 0; + integral_type power = 1; + integral_type val = value; + while (val > 0) { + result += (val & 1) * power; + power <<= 3; + val >>= 1; + } + return result; + } + + const std::size_t round_constant[24] = {1, + 0x8082, + 0x800000000000808a, + 0x8000000080008000, + 0x808b, + 0x80000001, + 0x8000000080008081, + 0x8000000000008009, + 0x8a, + 0x88, + 0x80008009, + 0x8000000a, + 0x8000808b, + 0x800000000000008b, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x800a, + 0x800000008000000a, + 0x8000000080008081, + 0x8000000000008080, + 0x80000001, + 0x8000000080008008}; + + struct header_map { + TYPE hash_hi; + TYPE hash_lo; + TYPE RLC; + TYPE is_first; + TYPE is_last; + TYPE L; + TYPE l; + TYPE hash_cur_hi; + TYPE hash_cur_lo; + TYPE rlc_before; + TYPE rlc_after; + TYPE r; + }; + + struct state_map { + TYPE is_first; + TYPE s0; + TYPE s1; + TYPE s2; + TYPE s3; + TYPE s4; + TYPE S0; + TYPE S1; + TYPE S2; + TYPE S3; + TYPE S4; + TYPE rng; + TYPE XOR; + TYPE ch; + TYPE out; + }; + + struct chunks_map { + TYPE b0; + TYPE b1; + TYPE b2; + TYPE b3; + TYPE sp0; + TYPE sp1; + TYPE chunk; + TYPE l; + TYPE l_before; + TYPE rlc; + TYPE rlc_before; + TYPE r; + TYPE r2; + TYPE r4; + TYPE first_in_block; + }; + + struct unsparser_map { + TYPE SP; // sparsed 64 bit round output + TYPE sp0; + TYPE sp1; + TYPE sp2; + TYPE sp3; // 16-bit chunks for SP + TYPE ch0; + TYPE ch1; + TYPE ch2; + TYPE ch3; // unpacked 16-bit chunks + TYPE hash_chunk; // 64 bit final chunk -- used only in last block but we + // compute it for all blocks + }; + + struct keccak_map { + header_map h; + header_map f; + state_map s[5]; + chunks_map c[34]; + unsparser_map u[4]; + }; + + static table_params get_minimal_requirements(std::size_t max_blocks) { + constexpr std::size_t witness = 15; + constexpr std::size_t public_inputs = 1; + constexpr std::size_t constants = 1; + std::size_t rows = 6247 * max_blocks; + return {witness, public_inputs, constants, rows}; + } + + static std::tuple form_input(context_type &context_object, raw_input_type raw_input) { + + input_type input; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + input.input = raw_input.input; + input.rlc_challenge = raw_input.rlc_challenge; + } + + context_object.allocate(input.rlc_challenge, 0, 0, column_type::public_input); + + return std::make_tuple(input); + } + + keccak_dynamic(context_type &context_object, input_type instance_input, + std::size_t max_blocks, bool make_links = true) + : generic_component(context_object) { + using integral_type = typename FieldType::integral_type; + using value_type = typename FieldType::value_type; + + std::size_t block_counter = 0; + std::size_t input_idx = 0; + std::size_t l; + std::size_t l_before; + std::size_t first_in_block; + TYPE rlc; + TYPE rlc_before; + TYPE RLC[max_blocks]; + // constants + + keccak_map m[max_blocks]; + std::array state; + std::vector msg = std::vector(); + std::vector padded_msg = std::vector(); + std::pair hash; + + TYPE C[26]; + + C[0] = value_type(0); + allocate(C[0], 0, 0, column_type::constant); + C[1] = value_type(1); + allocate(C[1], 0, 1, column_type::constant); + for(std::size_t i = 2; i < 26; i++){ + C[i] = value_type(calculate_sparse(integral_type(round_constant[i-2]))); + allocate(C[i], 0, i, column_type::constant); + } + + std::size_t row = 0; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + TYPE theta = instance_input.rlc_challenge; + std::cout << "RLC challenge = " << theta << std::endl; + + while (block_counter < max_blocks) { + if (input_idx < instance_input.input.size()) { + msg = std::get<0>(instance_input.input[input_idx]); + hash = std::get<1>(instance_input.input[input_idx]); + input_idx++; + } else { + msg = {}; + // hash = {TYPE(0xbc36789e7a1e281436464229828f817d), TYPE(6612f7b477d66591ff96a9e064bcc98a)}; // edit me + } + + padded_msg = msg; + padded_msg.push_back(1); + while (padded_msg.size() % 136 != 0) { + padded_msg.push_back(0); + } + RLC[block_counter] = calculateRLC(msg, theta); + std::cout << "RLC = " << std::hex << RLC[block_counter] << std::dec + << std::endl; + + for (std::size_t block = 0; block < padded_msg.size() / 136; block++) { + l = msg.size() - block * 136; + bool is_first = (block == 0 ? 1 : 0); + bool is_last = ((block == padded_msg.size() / 136 - 1) ? 1 : 0); + std::cout << "Is_last = " << is_last << std::endl; + if (is_first) rlc = msg.size(); + + m[block_counter].h.is_first = is_first; + m[block_counter].h.is_last = is_last; + m[block_counter].h.L = msg.size(); + m[block_counter].h.l = msg.size() - block * 136; + m[block_counter].h.hash_hi = hash.first; + m[block_counter].h.hash_lo = hash.second; + m[block_counter].h.RLC = RLC[block_counter]; + m[block_counter].h.rlc_before = rlc; + m[block_counter].h.r = theta; + + m[block_counter].f.is_first = is_first; + m[block_counter].f.is_last = is_last; + m[block_counter].f.L = msg.size(); + m[block_counter].f.l = msg.size() - block * 136; + m[block_counter].f.hash_hi = hash.first; + m[block_counter].f.hash_lo = hash.second; + m[block_counter].f.RLC = RLC[block_counter]; + m[block_counter].f.r = theta; + + for (std::size_t i = 0; i < state_rows_amount; i++) { + m[block_counter].s[i].s0 = state[5 * i]; + m[block_counter].s[i].s1 = state[5 * i + 1]; + m[block_counter].s[i].s2 = state[5 * i + 2]; + m[block_counter].s[i].s3 = state[5 * i + 3]; + m[block_counter].s[i].s4 = state[5 * i + 4]; + + m[block_counter].s[i].is_first = is_first; + m[block_counter].s[i].S0 = is_first ? 0 : state[5 * i]; + m[block_counter].s[i].S1 = is_first ? 0 : state[5 * i + 1]; + m[block_counter].s[i].S2 = is_first ? 0 : state[5 * i + 2]; + m[block_counter].s[i].S3 = is_first ? 0 : state[5 * i + 3]; + m[block_counter].s[i].S4 = is_first ? 0 : state[5 * i + 4]; + } + + TYPE s16 = m[block_counter].s[3].S1; + std::array s16_chunks = + sparsed_64bits_to_4_chunks(s16); + TYPE mod = integral_type(s16_chunks[0].data) >= sparse_x80 + ? s16_chunks[0] - sparse_x80 + : sparse_x7f - s16_chunks[0]; + TYPE XOR = integral_type(s16_chunks[0].data) >= sparse_x80 + ? s16_chunks[0] - sparse_x80 + : s16_chunks[0] + sparse_x80; + + m[block_counter].s[0].rng = mod; + m[block_counter].s[1].rng = s16_chunks[0]; + m[block_counter].s[2].rng = s16_chunks[1]; + m[block_counter].s[3].rng = s16_chunks[2]; + m[block_counter].s[4].rng = s16_chunks[3]; + + m[block_counter].s[0].XOR = XOR; + m[block_counter].s[1].XOR = is_last ? XOR : s16_chunks[0]; + m[block_counter].s[2].XOR = s16_chunks[2]; + m[block_counter].s[3].XOR = s16_chunks[0]; + m[block_counter].s[4].XOR = s16_chunks[2]; + + m[block_counter].s[0].ch = is_last; + m[block_counter].s[1].ch = s16_chunks[1]; + m[block_counter].s[2].ch = s16_chunks[3]; + m[block_counter].s[3].ch = s16_chunks[1]; + m[block_counter].s[4].ch = s16_chunks[3]; + + for (std::size_t i = 1; i < state_rows_amount;i++) { + m[block_counter].s[i].out = + m[block_counter].s[i - 1].XOR * + (integral_type(1) << (48 * 3)) + + m[block_counter].s[i - 1].ch * + (integral_type(1) << (48 * 2)) + + m[block_counter].s[i].XOR * (integral_type(1) << 48) + + m[block_counter].s[i].ch; + } + + for (std::size_t i = 0; i < chunks_rows_amount; i++) { + first_in_block = (i == 0) ? 1 : 0; + l_before = l; + rlc_before = rlc; + if (l > 4) + l -= 4; + else + l = 0; + + std::size_t msg_idx = 136 * block + 4 * i; + m[block_counter].c[i].r = theta; + m[block_counter].c[i].b0 = padded_msg[msg_idx]; + m[block_counter].c[i].b1 = padded_msg[msg_idx + 1]; + m[block_counter].c[i].b2 = padded_msg[msg_idx + 2]; + m[block_counter].c[i].b3 = padded_msg[msg_idx + 3]; + + auto sp0 = pack( + integral_type(padded_msg[msg_idx + 1]) * 256 + + integral_type(padded_msg[msg_idx])); + auto sp1 = pack( + integral_type(padded_msg[msg_idx + 3]) * 256 + + integral_type(padded_msg[msg_idx + 2])); + TYPE sp0_prev = ( i > 0) ? m[block_counter].c[i - 1].sp0 : 0; + TYPE sp1_prev = ( i > 0) ? m[block_counter].c[i - 1].sp1 : 0; + m[block_counter].c[i].sp0 = sp0; + m[block_counter].c[i].sp1 = sp1; + + TYPE chunk_factor = TYPE(integral_type(1) << 48); + TYPE chunk = sp1 * chunk_factor + sp0; + chunk = chunk * chunk_factor + sp1_prev; + chunk = chunk * chunk_factor + sp0_prev; + + m[block_counter].c[i].chunk = chunk; + m[block_counter].c[i].first_in_block = first_in_block; + m[block_counter].c[i].l = l; + m[block_counter].c[i].l_before = l_before; + m[block_counter].c[i].rlc_before = rlc_before; + m[block_counter].c[i].r2 = theta * theta; + m[block_counter].c[i].r4 = theta * theta * theta * theta; + + if (l_before - l == 4) + rlc = rlc_before * theta * theta * theta * theta + + msg[msg_idx] * theta * theta * theta + + msg[msg_idx + 1] * theta * theta + + msg[msg_idx + 2] * theta + msg[msg_idx + 3]; + else if (l_before - l == 3) + rlc = rlc_before * theta * theta * theta + + msg[msg_idx] * theta * theta + + msg[msg_idx + 1] * theta + msg[msg_idx + 2]; + else if (l_before - l == 2) + rlc = rlc_before * theta * theta + msg[msg_idx] * theta + + msg[msg_idx + 1]; + else if (l_before - l == 1) + rlc = rlc_before * theta + msg[msg_idx]; + else + rlc = rlc_before; + + m[block_counter].c[i].rlc = rlc; + // std::cout << std::hex << std::size_t(padded_msg[msg_idx]) + // << ", " << std::size_t(padded_msg[msg_idx + 1]) + // << ", " << std::size_t(padded_msg[msg_idx + 2]) + // << ", " << std::size_t(padded_msg[msg_idx + 3]) + // << std::dec << " l=" << l + // << " l_before=" << l_before << std::hex + // << " rlc=" << rlc << " rlc_before=" << rlc_before + // << std::dec << " first_in_block = " << + // first_in_block + // << std::endl; + } + + m[block_counter].h.rlc_after = rlc; + m[block_counter].f.rlc_before = rlc; + + std::array inner_state; + for (std::size_t i = 0; i < 5; i++) { + inner_state[5 * i] = m[block_counter].s[i].S0; + inner_state[5 * i + 1] = m[block_counter].s[i].S1; + inner_state[5 * i + 2] = m[block_counter].s[i].S2; + inner_state[5 * i + 3] = m[block_counter].s[i].S3; + inner_state[5 * i + 4] = m[block_counter].s[i].S4; + } + inner_state[16] = m[block_counter].s[2].out; + + std::size_t offset = 0; + std::array pmc; + for (std::size_t i = 0; i < 17; i++) { + pmc[i] = m[block_counter].c[2 * i + 1].chunk; + } + + row += 40; + for (std::size_t j = 0; j < 24; ++j) { + typename KECCAK_ROUND::input_type round_input = {inner_state, + pmc, C[j + 2]}; + + if (j == 0) { + context_type ct = context_object.subcontext( + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, row, + row + 291); + auto round_tf = KECCAK_ROUND(ct, round_input, true); + for (std::size_t k = 0; k < 25; k++) + inner_state[k] = round_tf.inner_state[k]; + row += 291; + } else { + context_type ct = context_object.subcontext( + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, row, + row + 257); + auto round_ff = KECCAK_ROUND(ct, round_input, false, false); + for (std::size_t k = 0; k < 25; k++) + inner_state[k] = round_ff.inner_state[k]; + row += 257; + } + } + + for (std::size_t i = 0; i < 25; i++) { + state[i] = inner_state[i]; + } + + std::cout << "Sparse hash chunks : " << std::endl; + std::array result; + for (std::size_t i = 0; i < 4; i++) { + TYPE sparse_value = inner_state[i]; + result[i] = sparse_value; + // std::cout << "\t" << std::hex << sparse_value << std::dec << + // std::endl; + TYPE regular = unpack(sparse_value); + std::cout << "\t" << std::hex << regular << std::dec << " "; + } + std::cout << std::endl; + + integral_type chunk_factor = integral_type(1) << 16; + for (std::size_t i = 0; i < unsparser_rows_amount; i++) { + auto chunks = sparsed_64bits_to_4_chunks(result[i]); + m[block_counter].u[i].SP = result[i]; + m[block_counter].u[i].sp0 = chunks[0]; + m[block_counter].u[i].sp1 = chunks[1]; + m[block_counter].u[i].sp2 = chunks[2]; + m[block_counter].u[i].sp3 = chunks[3]; + m[block_counter].u[i].ch0 = + swap_bytes(unpack(chunks[0])); + m[block_counter].u[i].ch1 = + swap_bytes(unpack(chunks[1])); + m[block_counter].u[i].ch2 = + swap_bytes(unpack(chunks[2])); + m[block_counter].u[i].ch3 = + swap_bytes(unpack(chunks[3])); + if ( i == 0 ){ + m[block_counter].u[i].hash_chunk = + m[block_counter].u[i].ch3 * (chunk_factor << (16 * 2)) + + m[block_counter].u[i].ch2 * (chunk_factor << (16)) + + m[block_counter].u[i].ch1 * chunk_factor + + m[block_counter].u[i].ch0; + }else{ + m[block_counter].u[i].hash_chunk = + m[block_counter].u[i - 1].ch3 * (chunk_factor << (16 * 6)) + + m[block_counter].u[i - 1].ch2 * (chunk_factor << (16 * 5)) + + m[block_counter].u[i - 1].ch1 * (chunk_factor << (16 * 4)) + + m[block_counter].u[i - 1].ch0 * (chunk_factor << (16 * 3)) + + m[block_counter].u[i].ch3 * (chunk_factor << (16 * 2)) + + m[block_counter].u[i].ch2 * (chunk_factor << (16)) + + m[block_counter].u[i].ch1 * chunk_factor + + m[block_counter].u[i].ch0; + } + } + m[block_counter].h.hash_cur_hi = m[block_counter].u[1].hash_chunk; + m[block_counter].h.hash_cur_lo = m[block_counter].u[3].hash_chunk; + + if (is_last) { + std::cout << "Previous hash: " << std::hex + << m[block_counter].h.hash_hi << " " + << m[block_counter].h.hash_lo << " " << std::endl; + std::cout << "Current hash: " << std::hex + << m[block_counter].h.hash_cur_hi << " " + << m[block_counter].h.hash_cur_lo << " " << std::endl; + std::cout << "Final hash: " << std::hex + << m[block_counter].u[1].hash_chunk << " " + << m[block_counter].u[3].hash_chunk << std::dec + << std::endl; + } + row += 5; + block_counter++; + } + } + } + + row = 0; + for (std::size_t block_counter = 0; block_counter < max_blocks; + block_counter++) { + allocate(m[block_counter].h.L, 0, row); + allocate(m[block_counter].h.RLC, 1, row); + allocate(m[block_counter].h.hash_hi, 2, row); + allocate(m[block_counter].h.hash_lo, 3, row); + allocate(m[block_counter].h.rlc_before, 4, row); + allocate(m[block_counter].h.rlc_after, 5, row); + allocate(m[block_counter].h.l, 6, row); + allocate(m[block_counter].h.hash_cur_hi, 7, row); + allocate(m[block_counter].h.hash_cur_lo, 8, row); + allocate(m[block_counter].h.is_last, 9, row); + allocate(m[block_counter].h.is_first, 10, row); + allocate(m[block_counter].h.r, 14, row); + + row++; + for (std::size_t i = 0; i < state_rows_amount; i++) { + allocate(m[block_counter].s[i].s0, 0, row); + allocate(m[block_counter].s[i].s1, 1, row); + allocate(m[block_counter].s[i].s2, 2, row); + allocate(m[block_counter].s[i].s3, 3, row); + allocate(m[block_counter].s[i].s4, 4, row); + allocate(m[block_counter].s[i].S0, 5, row); + allocate(m[block_counter].s[i].S1, 6, row); + allocate(m[block_counter].s[i].S2, 7, row); + allocate(m[block_counter].s[i].S3, 8, row); + allocate(m[block_counter].s[i].S4, 9, row); + allocate(m[block_counter].s[i].is_first, 10, row); + allocate(m[block_counter].s[i].rng, 11, row); + allocate(m[block_counter].s[i].XOR, 12, row); + allocate(m[block_counter].s[i].ch, 13, row); + allocate(m[block_counter].s[i].out, 14, row); + row++; + } + + for (std::size_t i = 0; i < chunks_rows_amount; i++) { + allocate(m[block_counter].c[i].b0, 0, row); + allocate(m[block_counter].c[i].b1, 1, row); + allocate(m[block_counter].c[i].b2, 2, row); + allocate(m[block_counter].c[i].b3, 3, row); + allocate(m[block_counter].c[i].sp0, 4, row); + allocate(m[block_counter].c[i].sp1, 5, row); + allocate(m[block_counter].c[i].chunk, 6, row); + allocate(m[block_counter].c[i].l, 7, row); + allocate(m[block_counter].c[i].l_before, 8, row); + allocate(m[block_counter].c[i].rlc, 9, row); + allocate(m[block_counter].c[i].rlc_before, 10, row); + allocate(m[block_counter].c[i].r2, 11, row); + allocate(m[block_counter].c[i].r4, 12, row); + allocate(m[block_counter].c[i].first_in_block, 13, row); + allocate(m[block_counter].c[i].r, 14, row); + row++; + } + + size_t old_row = row; + if(stage == GenerationStage::CONSTRAINTS){ + std::array pmc; + for (std::size_t i = 0; i < 17; i++) { + pmc[i] = m[block_counter].c[2 * i + 1].chunk; + } + std::array inner_state; + for (std::size_t i = 0; i < 5; i++) { + inner_state[5 * i] = m[block_counter].s[i].S0; + inner_state[5 * i + 1] = m[block_counter].s[i].S1; + inner_state[5 * i + 2] = m[block_counter].s[i].S2; + inner_state[5 * i + 3] = m[block_counter].s[i].S3; + inner_state[5 * i + 4] = m[block_counter].s[i].S4; + } + inner_state[16] = m[block_counter].s[2].out; + + for (std::size_t j = 0; j < 24; ++j) { + typename KECCAK_ROUND::input_type round_input = {inner_state, + pmc, C[j + 2]}; + + if (j == 0) { + context_type ct = context_object.subcontext( + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, row, + row + 291); + auto round_tf = KECCAK_ROUND(ct, round_input, true); + for (std::size_t k = 0; k < 25; k++) + inner_state[k] = round_tf.inner_state[k]; + row += 291; + } else { + context_type ct = context_object.subcontext( + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, row, + row + 257); + auto round_ff = KECCAK_ROUND(ct, round_input, false); + for (std::size_t k = 0; k < 25; k++) + inner_state[k] = round_ff.inner_state[k]; + row += 257; + } + } + } + + if(row == old_row) row += 6202; // 6202 = 291 + 23*257 total round rows + + for (std::size_t i = 0; i < unsparser_rows_amount; i++) { + allocate(m[block_counter].u[i].SP, 0, row); + allocate(m[block_counter].u[i].sp0, 1, row); + allocate(m[block_counter].u[i].sp1, 2, row); + allocate(m[block_counter].u[i].sp2, 3, row); + allocate(m[block_counter].u[i].sp3, 4, row); + allocate(m[block_counter].u[i].ch0, 5, row); + allocate(m[block_counter].u[i].ch1, 6, row); + allocate(m[block_counter].u[i].ch2, 7, row); + allocate(m[block_counter].u[i].ch3, 8, row); + allocate(m[block_counter].u[i].hash_chunk, 9, row); + row++; + } + + allocate(m[block_counter].f.L, 0, row); + allocate(m[block_counter].f.RLC, 1, row); + allocate(m[block_counter].f.hash_hi, 2, row); + allocate(m[block_counter].f.hash_lo, 3, row); + allocate(m[block_counter].f.rlc_before, 4, row); + allocate(m[block_counter].f.rlc_after, 5, row); + allocate(m[block_counter].f.l, 6, row); + allocate(m[block_counter].f.hash_cur_hi, 7, row); + allocate(m[block_counter].f.hash_cur_lo, 8, row); + allocate(m[block_counter].f.is_last, 9, row); + allocate(m[block_counter].f.is_first, 10, row); + allocate(m[block_counter].f.r, 14, row); + row++; + std::cout << "final rows: " << row << std::endl; + } + + // gates: + + for (std::size_t block_counter = 0; block_counter < max_blocks; + block_counter++) { + // Is_first and is_last definition + constrain(m[block_counter].h.is_first * + (m[block_counter].h.is_first - 1)); + constrain(m[block_counter].h.is_last * + (m[block_counter].h.is_last - 1)); + constrain(m[block_counter].h.is_first * + (m[block_counter].h.L - m[block_counter].h.l)); + // lookup constraint m.h.is_last * m.h.l at + // keccak_pack_table/range_check_135 + + // Hash computation correctness + constrain( + m[block_counter].h.is_last * + (m[block_counter].h.hash_hi - m[block_counter].h.hash_cur_hi)); + constrain( + m[block_counter].h.is_last * + (m[block_counter].h.hash_lo - m[block_counter].h.hash_cur_lo)); + + // RLC computation correctness + constrain(m[block_counter].h.is_first * + (m[block_counter].h.rlc_before - m[block_counter].h.L)); + constrain(m[block_counter].h.is_last * + (m[block_counter].h.rlc_after - m[block_counter].h.RLC)); + + // copy constraint r with public input + copy_constrain(instance_input.rlc_challenge, m[block_counter].h.r); + copy_constrain(instance_input.rlc_challenge, m[block_counter].f.r); + + constrain((1 - m[0].h.is_first)); + constrain((1 - m[0].f.is_first)); + if (block_counter > 0) { + constrain((1 - m[block_counter - 1].f.is_last) * + m[block_counter].h.is_first); + // Transition between blocks + constrain((1 - m[block_counter].h.is_first) * + (m[block_counter].h.L - m[block_counter - 1].f.L)); + constrain((1 - m[block_counter].h.is_first) * + (m[block_counter].h.RLC - m[block_counter - 1].f.RLC)); + constrain( + (1 - m[block_counter].h.is_first) * + (m[block_counter].h.hash_hi - m[block_counter - 1].f.hash_hi)); + constrain( + (1 - m[block_counter].h.is_first) * + (m[block_counter].h.hash_lo - m[block_counter - 1].f.hash_lo)); + constrain((1 - m[block_counter].h.is_first) * + (m[block_counter].h.rlc_before - + m[block_counter - 1].f.rlc_before)); + constrain((1 - m[block_counter].h.is_first) * + (1 - m[block_counter].h.is_last) * + (m[block_counter].h.l - m[block_counter - 1].f.l - 136)); + // lookup constraint m.h.L, m.h.l at + // keccak_pack_table/range_check_16bit + } + + // State transitions + for (std::size_t i = 0; i < state_rows_amount; i++) { + constrain(m[block_counter].s[i].S0 - + (1 - m[block_counter].s[i].is_first) * + m[block_counter].s[i].s0); + constrain(m[block_counter].s[i].S1 - + (1 - m[block_counter].s[i].is_first) * + m[block_counter].s[i].s1); + constrain(m[block_counter].s[i].S2 - + (1 - m[block_counter].s[i].is_first) * + m[block_counter].s[i].s2); + constrain(m[block_counter].s[i].S3 - + (1 - m[block_counter].s[i].is_first) * + m[block_counter].s[i].s3); + constrain(m[block_counter].s[i].S4 - + (1 - m[block_counter].s[i].is_first) * + m[block_counter].s[i].s4); + if (i > 0) { + constrain(m[block_counter].s[i].is_first - + m[block_counter].s[i - 1].is_first); + constrain(m[block_counter].s[i].out - + m[block_counter].s[i - 1].XOR * + (integral_type(1) << (48 * 3)) - + m[block_counter].s[i - 1].ch * + (integral_type(1) << (48 * 2)) - + m[block_counter].s[i].XOR * + (integral_type(1) << (48)) - + m[block_counter].s[i].ch); + } + // lookup constraint s.rng at keccak_pack_table/sparse_16bit + // lookup(m[block_counter].s[i].rng, + // "keccak_pack_table/sparse_16bit"); + } + // XOR constraints + constrain((m[block_counter].s[1].rng - sparse_x80 - + m[block_counter].s[0].rng) * + (m[block_counter].s[0].rng - sparse_x7f + + m[block_counter].s[1].rng)); + constrain((m[block_counter].s[1].rng - sparse_x7f + + m[block_counter].s[0].rng) * + (m[block_counter].s[0].XOR + sparse_x80 - + m[block_counter].s[1].rng)); + constrain((m[block_counter].s[1].rng - sparse_x80 - + m[block_counter].s[0].rng) * + (m[block_counter].s[0].XOR - sparse_x80 - + m[block_counter].s[1].rng)); + constrain( + (m[block_counter].s[1].XOR - + m[block_counter].s[0].ch * m[block_counter].s[0].XOR - + (1 - m[block_counter].s[0].ch) * m[block_counter].s[1].rng)); + + // Chunk constraints + TYPE chunk_factor = TYPE(integral_type(1) << 48); + + for (std::size_t i = 0; i < chunks_rows_amount; i++) { + auto diff = + m[block_counter].c[i].l_before - m[block_counter].c[i].l; + constrain(diff * (diff - 1) * (diff - 2) * (diff - 3) * (diff - 4)); + constrain(diff * (diff - 1) * (diff - 2) * (diff - 4) * + (m[block_counter].c[i].b3 - 1)); + constrain(diff * (diff - 1) * (diff - 3) * (diff - 4) * + (m[block_counter].c[i].b2 - 1)); + constrain(diff * (diff - 1) * (diff - 3) * (diff - 4) * + m[block_counter].c[i].b3); + constrain(diff * (diff - 2) * (diff - 3) * (diff - 4) * + (m[block_counter].c[i].b1 - 1)); + constrain(diff * (diff - 2) * (diff - 3) * (diff - 4) * + m[block_counter].c[i].b2); + constrain(diff * (diff - 2) * (diff - 3) * (diff - 4) * + m[block_counter].c[i].b3); + constrain(m[block_counter].c[i].first_in_block * (diff - 1) * + (diff - 2) * (diff - 3) * (diff - 4) * + (m[block_counter].c[i].b0 - 1)); + constrain(m[block_counter].c[i].first_in_block * (diff - 1) * + (diff - 2) * (diff - 3) * (diff - 4) * + m[block_counter].c[i].b1); + constrain(m[block_counter].c[i].first_in_block * (diff - 1) * + (diff - 2) * (diff - 3) * (diff - 4) * + m[block_counter].c[i].b2); + constrain(m[block_counter].c[i].first_in_block * (diff - 1) * + (diff - 2) * (diff - 3) * (diff - 4) * + m[block_counter].c[i].b3); + if (i > 0) { + constrain(m[block_counter].c[i].chunk - + m[block_counter].c[i].sp1 * chunk_factor * + chunk_factor * chunk_factor - + m[block_counter].c[i].sp0 * chunk_factor * + chunk_factor - + m[block_counter].c[i - 1].sp1 * chunk_factor - + m[block_counter].c[i - 1].sp0); + + auto diff_prev = m[block_counter].c[i - 1].l_before - + m[block_counter].c[i - 1].l; + constrain((1 - m[block_counter].c[i].first_in_block) * + (m[block_counter].c[i].l_before - + m[block_counter].c[i - 1].l)); + constrain((1 - m[block_counter].c[i].first_in_block) * diff * + (diff_prev - 4)); + constrain((1 - m[block_counter].c[i].first_in_block) * + (diff_prev - diff) * (diff_prev - diff - 1) * + (diff_prev - diff - 2) * (diff_prev - diff - 3) * + (m[block_counter].c[i].b0 - 1)); + constrain((1 - m[block_counter].c[i].first_in_block) * + (diff_prev - diff) * (diff_prev - diff - 1) * + (diff_prev - diff - 2) * (diff_prev - diff - 3) * + m[block_counter].c[i].b1); + constrain((1 - m[block_counter].c[i].first_in_block) * + (diff_prev - diff) * (diff_prev - diff - 1) * + (diff_prev - diff - 2) * (diff_prev - diff - 3) * + m[block_counter].c[i].b2); + constrain((1 - m[block_counter].c[i].first_in_block) * + (diff_prev - diff) * (diff_prev - diff - 1) * + (diff_prev - diff - 2) * (diff_prev - diff - 3) * + m[block_counter].c[i].b3); + + constrain((1-m[block_counter].c[i].first_in_block) * (m[block_counter].c[i].rlc_before - m[block_counter].c[i-1].rlc)); + } + + constrain(m[block_counter].c[i].r2 - m[block_counter].c[i].r * m[block_counter].c[i].r); + constrain(m[block_counter].c[i].r4 - m[block_counter].c[i].r2 * m[block_counter].c[i].r2); + constrain(diff*(diff-1)*(diff-2)*(diff-3)*(m[block_counter].c[i].rlc - + m[block_counter].c[i].r4 * m[block_counter].c[i].rlc_before - + m[block_counter].c[i].r2*m[block_counter].c[i].r*m[block_counter].c[i].b0 - + m[block_counter].c[i].r2 * m[block_counter].c[i].b1 - m[block_counter].c[i].r * m[block_counter].c[i].b2 - m[block_counter].c[i].b3)); + + constrain(diff*(diff-1)*(diff-2)*(diff-4)*(m[block_counter].c[i].rlc - + m[block_counter].c[i].r2 * m[block_counter].c[i].r * m[block_counter].c[i].rlc_before - + m[block_counter].c[i].r2 * m[block_counter].c[i].b0 - + m[block_counter].c[i].r * m[block_counter].c[i].b1 - m[block_counter].c[i].b2)); + + constrain(diff*(diff-1)*(diff-3)*(diff-4)*(m[block_counter].c[i].rlc - + m[block_counter].c[i].r2 * m[block_counter].c[i].rlc_before - + m[block_counter].c[i].r * m[block_counter].c[i].b0 -m[block_counter].c[i].b1)); + + constrain(diff*(diff-2)*(diff-3)*(diff-4)*(m[block_counter].c[i].rlc - + m[block_counter].c[i].r * m[block_counter].c[i].rlc_before - m[block_counter].c[i].b0)); + + constrain((diff-1)*(diff-2)*(diff-3)*(diff-4)*(m[block_counter].c[i].rlc - m[block_counter].c[i].rlc_before)); + } + + // Unparser constraints + //TYPE sparsed_factor = TYPE(integral_type(1) << 48); + TYPE ufactor = TYPE(integral_type(1) << 16); + for(std::size_t i = 0; i < unsparser_rows_amount; i++){ + constrain(m[block_counter].u[i].SP - m[block_counter].u[i].sp0 * (integral_type(1) << (48*3)) - m[block_counter].u[i].sp1 * (integral_type(1) << (48*2)) - m[block_counter].u[i].sp2 * (integral_type(1) << 48) - m[block_counter].u[i].sp3); + } + } + + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_dynamic_bbf_wrapper.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_dynamic_bbf_wrapper.hpp new file mode 100644 index 0000000000..34098791ba --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_dynamic_bbf_wrapper.hpp @@ -0,0 +1,328 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK component wrapping the BBF-component interface +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_PLONK_KECCAK_DYNAMIC_keccak_dynamic_bbf_wrapper_HPP +#define CRYPTO3_BLUEPRINT_PLONK_KECCAK_DYNAMIC_keccak_dynamic_bbf_wrapper_HPP + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + + template + class keccak_dynamic_bbf_wrapper; + + template + class keccak_dynamic_bbf_wrapper< + crypto3::zk::snark::plonk_constraint_system, BlueprintFieldType> + : public plonk_component { + public: + using component_type = plonk_component; + + using var = typename component_type::var; + using manifest_type = plonk_component_manifest; + + class gate_manifest_type : public component_gate_manifest { + public: + std::size_t witness_amount; + std::size_t max_blocks; + + static constexpr const std::size_t clamp = 15; + + gate_manifest_type(std::size_t witness_amount_, std::size_t max_blocks_) + : witness_amount(std::min(witness_amount_, clamp)), max_blocks(max_blocks_) {} + + std::uint32_t gates_amount() const override { + return keccak_dynamic_bbf_wrapper::get_gates_amount(witness_amount, max_blocks); + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_blocks) { + gate_manifest manifest = gate_manifest( + gate_manifest_type(witness_amount, max_blocks)); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param(15)), // TODO: this has nothing to do with reality, + true // to be dropped eventually + ); + return manifest; + } + + static nil::crypto3::zk::snark::plonk_table_description + get_table_description(const bool max_blocks) { + nil::crypto3::zk::snark::plonk_table_description desc( + 15, 1, 30, 50); + desc.usable_rows_amount = 6247*max_blocks; + + return desc; + } + + constexpr static std::size_t get_gates_amount(std::size_t witness_amount, std::size_t max_blocks) { + return 13 + ((max_blocks > 1) ? 1 : 0) + 1; + } + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_blocks) { + return 6247*max_blocks; + } + constexpr static std::size_t get_empty_rows_amount() { return 0; } + + const std::size_t max_blocks; + const std::size_t rows_amount = + get_rows_amount(this->witness_amount(), max_blocks); + const std::size_t gates_amount = + get_gates_amount(this->witness_amount(), max_blocks); + const std::size_t empty_rows_amount = get_empty_rows_amount(); + const std::string component_name = "wrapper of keccak dynamic BBF-component"; + + struct input_type { + var rlc_challenge; + std::vector, + std::pair + >> input; + + std::vector> all_vars() { + std::vector> res; + res.push_back(rlc_challenge); + return res; + } + }; + + struct result_type { + result_type() { + } + std::vector> all_vars() { + return {}; + } + }; + + template + explicit keccak_dynamic_bbf_wrapper(ContainerType witness, std::size_t max_blocks_) + : component_type(witness, {}, {}, get_manifest()), + max_blocks(max_blocks_){}; + + template + keccak_dynamic_bbf_wrapper(WitnessContainerType witness, + ConstantContainerType constant, + PublicInputContainerType public_input, + std::size_t max_blocks_) + : component_type(witness, constant, public_input, get_manifest()), + max_blocks(max_blocks_){}; + + keccak_dynamic_bbf_wrapper( + std::initializer_list< + typename component_type::witness_container_type::value_type> + witnesses, + std::initializer_list< + typename component_type::constant_container_type::value_type> + constants, + std::initializer_list< + typename component_type::public_input_container_type::value_type> + public_inputs, + std::size_t max_blocks_) + : component_type(witnesses, constants, public_inputs, get_manifest()), + max_blocks(max_blocks_) {}; + + std::map component_lookup_tables() const { + std::map lookup_tables; + // lookup_tables["keccak_normalize3_table/full"] = 0; // + // REQUIRED_TABLE lookup_tables["keccak_normalize4_table/full"] = 0; // + // REQUIRED_TABLE lookup_tables["keccak_normalize6_table/full"] = 0; // + // REQUIRED_TABLE lookup_tables["keccak_chi_table/full"] = 0; // REQUIRED_TABLE + // lookup_tables["keccak_pack_table/range_check_sparse"] = 0; // + // REQUIRED_TABLE + return lookup_tables; + } + }; + + template + using plonk_keccak_dynamic_bbf_wrapper = keccak_dynamic_bbf_wrapper< + crypto3::zk::snark::plonk_constraint_system, + BlueprintFieldType>; + + template + typename plonk_keccak_dynamic_bbf_wrapper::result_type + generate_assignments( + const plonk_keccak_dynamic_bbf_wrapper &component, + assignment> + &assignment, + const typename plonk_keccak_dynamic_bbf_wrapper::input_type + instance_input, + const std::uint32_t start_row_index) { + using value_type = typename BlueprintFieldType::value_type; + using context_type = typename nil::blueprint::bbf::context< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::ASSIGNMENT>; + using KECCAK_DYNAMIC = typename nil::blueprint::bbf::keccak_dynamic< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::ASSIGNMENT>; + using TYPE = typename context_type::TYPE; + + context_type ct = context_type(assignment, component.rows_amount, start_row_index); + + typename KECCAK_DYNAMIC::input_type input; + input.rlc_challenge = var_value(assignment, instance_input.rlc_challenge); + input.input = instance_input.input; + + auto keccak_round = KECCAK_DYNAMIC(ct, input, component.max_blocks); + + return typename plonk_keccak_dynamic_bbf_wrapper::result_type(); + } + + template + typename plonk_keccak_dynamic_bbf_wrapper::result_type + generate_circuit( + const plonk_keccak_dynamic_bbf_wrapper &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_keccak_dynamic_bbf_wrapper::input_type + &instance_input, + const std::size_t start_row_index) { + using context_type = typename nil::blueprint::bbf::context< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::CONSTRAINTS>; + using KECCAK_DYNAMIC = typename nil::blueprint::bbf::keccak_dynamic< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::CONSTRAINTS>; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using plonk_copy_constraint = crypto3::zk::snark::plonk_copy_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using TYPE = typename context_type::TYPE; + + using component_type = plonk_keccak_dynamic_bbf_wrapper; + using var = typename component_type::var; + using nil::blueprint::bbf::row_selector; + + context_type ct = context_type(assignment.get_description(), component.rows_amount, + start_row_index); + + typename KECCAK_DYNAMIC::input_type input; + input.rlc_challenge = instance_input.rlc_challenge; + input.input = instance_input.input; + + auto result = KECCAK_DYNAMIC(ct, input, component.max_blocks); + // ct.print_witness_allocation_log(bbf::column_type::constant); + + auto c_list = ct.get_constants(); + // std::cout << "const list size = " << c_list.size() << "\n"; + for(std::size_t i = 0; i < c_list.size(); i++) { // columns + // std::cout << "column size = " << c_list[i].size() << "\n"; + for(std::size_t j = 0; j < c_list[i].size(); j++) { // rows + // std::cout << i << ", " << j << ": " << c_list[i][j] << "\n"; + assignment.constant(component.C(i), j) = c_list[i][j]; + } + } + + ////////////////////////// Don't use 'ct' below this line, we just moved it!!! ///////////////////////////// + nil::blueprint::bbf::gates_optimizer optimizer(std::move(ct)); + nil::blueprint::bbf::optimized_gates gates = optimizer.optimize_gates(); + + // Register all the selectors. + for (const auto& [row_list, selector_id]: gates.selectors_) { + for(std::size_t row_index : row_list) { + assignment.enable_selector(selector_id, row_index); + } + } + + for (const auto& [selector_id, constraints] : gates.constraint_list) { + /* + std::cout << "GATE:\n"; + for(const auto& c : constraints) { + std::cout << c << "\n"; + } + std::cout << "Rows: "; + */ + bp.add_gate(selector_id, constraints); + + //std::cout << "\n"; + } + + // compatibility layer: copy constraint list + for(const auto& cc : gates.copy_constraints) { + bp.add_copy_constraint(cc); + } + + std::set lookup_tables; + for(const auto& [selector_id, lookup_list] : gates.lookup_constraints) { + std::vector lookup_gate; + for(const auto& single_lookup_constraint : lookup_list) { + std::string table_name = single_lookup_constraint.first; + if (lookup_tables.find(table_name) == lookup_tables.end()) { + if (gates.dynamic_lookup_tables.find(table_name) != gates.dynamic_lookup_tables.end()) { + bp.reserve_dynamic_table(table_name); + } else { + bp.reserve_table(table_name); + } + lookup_tables.insert(table_name); + } + std::size_t table_index = bp.get_reserved_indices().at(table_name); + lookup_gate.push_back({table_index, single_lookup_constraint.second}); + } + + bp.add_lookup_gate(selector_id, lookup_gate); + } + + // compatibility layer: dynamic lookup tables - continued + for(const auto& [name, area] : gates.dynamic_lookup_tables) { + bp.register_dynamic_table(name); + + std::size_t selector_index = area.second; + + crypto3::zk::snark::plonk_lookup_table table_specs; + table_specs.tag_index = selector_index; + table_specs.columns_number = area.first.size(); + std::vector dynamic_lookup_cols; + for(const auto& c : area.first) { + // TODO: does this make sense?! + dynamic_lookup_cols.push_back( + var(c, 0, false, var::column_type::witness)); + } + table_specs.lookup_options = {dynamic_lookup_cols}; + bp.define_dynamic_table(name,table_specs); + } + + std::cout << "Gates amount = " << bp.num_gates() << "\n"; + std::cout << "Lookup gates amount = " << bp.num_lookup_gates() << "\n"; + + return typename plonk_keccak_dynamic_bbf_wrapper::result_type(); + } + } // namespace components + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_PLONK_KECCAK_DYNAMIC_keccak_dynamic_bbf_wrapper_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_round.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_round.hpp new file mode 100644 index 0000000000..2732a43543 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_round.hpp @@ -0,0 +1,857 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + struct keccak_round_raw_input { + using TYPE = typename FieldType::value_type; + + std::array inner_state; + std::array padded_message_chunk; + TYPE round_constant; + }; + + // Component for keccak round + template + class keccak_round : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + using typename generic_component::table_params; + using raw_input_type = typename std::conditional,std::tuple<>>::type; + using integral_type = typename FieldType::integral_type; + + struct input_type { + std::array inner_state; + std::array padded_message_chunk; + TYPE round_constant; + }; + + TYPE inner_state[25]; // output state + const std::size_t normalize3_chunk_size = 30; + const std::size_t normalize4_chunk_size = 21; + const std::size_t normalize6_chunk_size = 18; + const std::size_t chi_chunk_size = 18; + const std::size_t rotate_chunk_size = 24; + + const std::size_t normalize3_num_chunks = 7; + const std::size_t normalize4_num_chunks = 10; + const std::size_t normalize6_num_chunks = 11; + const std::size_t chi_num_chunks = 11; + const std::size_t rotate_num_chunks = 8; + + const integral_type big_rot_const = calculate_sparse((integral_type(1) << 64) - 1); + + + const std::array rho_offsets = {0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44}; + + const std::size_t perm[25] = {1, 10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1}; + const integral_type sparse_3 = 0x6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB_big_uint256; + const integral_type sparse_x80 = calculate_sparse(integral_type(0x8000000000000000)); + const integral_type sparse_x7f = calculate_sparse(integral_type(0x8000000000000000 - 1)); + + integral_type calculate_sparse(const integral_type &value) const { + integral_type result = 0; + integral_type power = 1; + integral_type val = value; + while (val > 0) { + result += (val & 1) * power; + power <<= 3; + val >>= 1; + } + return result; + } + + std::array, 29> calculate_rot_consts() const { + std::array, 29> result; + for (int i = 0; i < 5; ++i) { + result[i][0] = calculate_sparse((integral_type(1) << 1) - 1); + result[i][1] = calculate_sparse((integral_type(1) << 63) - 1); + } + for (int i = 1; i < 25; ++i) { + result[i + 4][0] = calculate_sparse((integral_type(1) << rho_offsets[i]) - 1); + result[i + 4][1] = calculate_sparse((integral_type(1) << (64 - rho_offsets[i])) - 1); + } + return result; + } + + integral_type normalize(const integral_type &integral_value) const { + integral_type result = 0; + integral_type value = integral_value; + integral_type power = 1; + while (value > 0) { + result += (value & 1) * power; + power <<= 3; + value >>= 3; + } + return result; + } + + integral_type chi(const integral_type &integral_value) const { + integral_type result = 0; + integral_type value = integral_value; + integral_type power = 1; + integral_type mask = 7; + int table[5] = {0, 1, 1, 0, 0}; + while (value > 0) { + int bit = table[int(value & mask)]; + result += bit * power; + power <<= 3; + value >>= 3; + } + return result; + } + + static table_params get_minimal_requirements(bool xor_with_mes) { + constexpr std::size_t witness = 15; + constexpr std::size_t public_inputs = 1; + constexpr std::size_t constants = 1; +// std::size_t rows = (xor_with_mes) ? 291 : 257; + std::size_t rows = 8191; + return {witness, public_inputs, constants, rows}; + } + + static std::tuple form_input(context_type &context_object, raw_input_type raw_input) { + + input_type input; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + for(std::size_t i = 0; i < 25; i++) { + input.inner_state[i] = raw_input.inner_state[i]; + } + for(std::size_t i = 0; i < 17; i++) { + input.padded_message_chunk[i] = raw_input.padded_message_chunk[i]; + } + input.round_constant = raw_input.round_constant; + } + + for(std::size_t i = 0; i < 25; i++) { + context_object.allocate(input.inner_state[i], 0, i, column_type::public_input); + } + for(std::size_t i = 0; i < 17; i++) { + context_object.allocate(input.padded_message_chunk[i], 0, 25 + i, column_type::public_input); + } + context_object.allocate(input.round_constant, 0, 42, column_type::public_input); + + return std::make_tuple(input); + } + + keccak_round(context_type &context_object, input_type input, + bool xor_with_mes = false, bool make_links = true) + : generic_component(context_object) { + using integral_type = typename FieldType::integral_type; + using value_type = typename FieldType::value_type; + + TYPE message[17], state[17], A0[17], A0_sum[17]; + TYPE A1[25], A1_copy[25]; // inner_state ^ padded_message_chunk + std::vector> A0_chunks = std::vector>( + 17, std::vector(normalize3_num_chunks)); + std::vector> A0_normalized_chunks = + std::vector>(17, std::vector(normalize3_num_chunks)); + // theta + TYPE C[5], C_sum[5], C_copy[5], C_second_copy[5][5]; + std::vector> C_chunks = + std::vector>(5, std::vector(normalize6_num_chunks)); + std::vector> C_chunks_normalized = + std::vector>(5, std::vector(normalize6_num_chunks)); + TYPE C_rot[5], C_rot_shift[5], C_rot_shift_minus[5], C_rot_copy[5][5]; + TYPE C_smaller_part[5], C_bigger_part[5]; + TYPE C_bound_smaller[5], C_bound_bigger[5]; + std::vector> C_rot_small_chunks = + std::vector>(5, std::vector(rotate_chunk_size)); + std::vector> C_rot_big_chunks = + std::vector>(5, std::vector(rotate_chunk_size)); + TYPE A2[25], A2_sum[25], A2_copy[25]; + std::vector> A2_chunks = std::vector>( + 25, std::vector(normalize4_num_chunks)); + std::vector> A2_normalized_chunks = + std::vector>(25, + std::vector(normalize4_num_chunks)); + + // rho/phi + TYPE B[25], B_copy[25], B_rot_shift[24], B_rot_shift_minus[24]; + TYPE B_smaller_part[24], B_bigger_part[24]; + TYPE B_bound_smaller[24], B_bound_bigger[24]; + std::vector> B_small_chunks = + std::vector>(24, std::vector(rotate_chunk_size)); + std::vector> B_big_chunks = + std::vector>(24, std::vector(rotate_chunk_size)); + TYPE B_extra[25][3]; + // chi + TYPE A3[25], A3_sum[25]; + std::vector> A3_chunks = + std::vector>(25, std::vector(chi_num_chunks)); + std::vector> A3_chi_chunks = + std::vector>(25, std::vector(chi_num_chunks)); + + // iota + TYPE A3_0copy, A4, RC, A4_sum; + std::vector A4_chunks = std::vector(normalize3_num_chunks); + std::vector A4_normalized_chunks = + std::vector(normalize3_num_chunks); + + // additional ROT chunks + TYPE ROT_extra[29][2]; + std::vector> ROT_extra_small_chunks = + std::vector>(29, std::vector(rotate_chunk_size)); + std::vector> ROT_extra_big_chunks = + std::vector>(29, std::vector(rotate_chunk_size)); + + TYPE rot_constants[29][2]; + TYPE big_rot_constant[29]; + + TYPE x80_const = value_type(sparse_x80); + + // constant assignments + auto rot_consts = calculate_rot_consts(); + for (std::size_t j = 0; j < 29; j++) { + rot_constants[j][0] = value_type(rot_consts[j][0]); + rot_constants[j][1] = value_type(rot_consts[j][1]); + big_rot_constant[j] = value_type(big_rot_const); + } + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + if (xor_with_mes) { + int upper_bound = 17; + for (int index = 0; index < upper_bound; ++index) { + state[index] = input.inner_state[index]; + message[index] = input.padded_message_chunk[index]; + TYPE sum = state[index] + message[index]; + integral_type integral_sum = integral_type(sum.data); + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << normalize3_chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < normalize3_num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= normalize3_chunk_size; + integral_normalized_chunks.push_back(normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= normalize3_chunk_size; + } + A0[index] = TYPE(integral_normalized_sum); + A0_sum[index] = sum; + for (std::size_t j = 0; j < normalize3_num_chunks; ++j) { + A0_chunks[index][j] = integral_chunks[j]; + A0_normalized_chunks[index][j] = integral_normalized_chunks[j]; + } + } + for (int i = 0; i < 17; ++i) { + A1[i] = A0[i]; + } + for (int i = 17; i < 25; ++i) { + A1[i] = input.inner_state[i]; + } + for (int i = 0; i < 25; ++i) { + A1_copy[i] = A1[i]; + } + } else { + for (int i = 0; i < 25; ++i) { + A1[i] = input.inner_state[i]; + A1_copy[i] = A1[i]; + } + } + + // theta + for (int index = 0; index < 5; ++index) { + TYPE sum = 0; + for (int j = 0; j < 5; ++j) { + sum += A1[index + 5 * j]; + } + C_sum[index] = sum; + + integral_type integral_sum = integral_type(sum.data); + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << normalize6_chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < normalize6_num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= normalize6_chunk_size; + integral_normalized_chunks.push_back(normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= normalize6_chunk_size; + } + C[index] = TYPE(integral_normalized_sum); + + for (std::size_t j = 0; j < normalize6_num_chunks; ++j) { + C_chunks[index][j] = integral_chunks[j]; + C_chunks_normalized[index][j] = integral_normalized_chunks[j]; + } + + C_copy[index] = C[index]; + for(std::size_t j = 0; j < 5; j++){ + C_second_copy[index][j] = C[index]; + } + } + + std::vector additional_rot_chunks; + for (int index = 0; index < 5; ++index) { + integral_type integral_C = integral_type(C[index].data); + integral_type smaller_part = integral_C >> 189; + integral_type bigger_part = integral_C & ((integral_type(1) << 189) - 1); + integral_type integral_C_rot = (bigger_part << 3) + smaller_part; + C_rot[index] = TYPE(integral_C_rot); + + additional_rot_chunks.push_back(smaller_part); + additional_rot_chunks.push_back(bigger_part); + // integral_type bound_smaller = smaller_part - (integral_type(1) << 3) + (integral_type(1) << 192); + // integral_type bound_bigger = bigger_part - (integral_type(1) << 189) + (integral_type(1) << 192); + integral_type bound_smaller = smaller_part + big_rot_const - rot_consts[index][0];; + integral_type bound_bigger = bigger_part + big_rot_const - rot_consts[index][1];; + auto copy_bound_smaller = bound_smaller; + auto copy_bound_bigger = bound_bigger; + std::vector integral_small_chunks; + std::vector integral_big_chunks; + integral_type mask = (integral_type(1) << rotate_chunk_size) - 1; + for (std::size_t j = 0; j < rotate_num_chunks; ++j) { + integral_small_chunks.push_back(bound_smaller & mask); + bound_smaller >>= rotate_chunk_size; + integral_big_chunks.push_back(bound_bigger & mask); + bound_bigger >>= rotate_chunk_size; + } + + for(std::size_t j = 0; j < rotate_num_chunks; ++j){ + C_rot_small_chunks[index][j] = TYPE(integral_small_chunks[j]); + C_rot_big_chunks[index][j] = TYPE(integral_big_chunks[j]); + } + C_smaller_part[index] = TYPE(smaller_part); + C_bigger_part[index] = TYPE(bigger_part); + C_bound_smaller[index]= TYPE(copy_bound_smaller); + C_bound_bigger[index] = TYPE(copy_bound_bigger); + C_rot_shift[index] = TYPE(integral_type(1) << 3); + C_rot_shift_minus[index] = TYPE(integral_type(1) << 189); + + for(std::size_t j = 0; j < 5; j++){ + C_rot_copy[index][j] = C_rot[index]; + } + } + + for (int index = 0; index < 25; ++index) { + int x = index % 5; + TYPE sum = A1[index] + C_rot[(x + 1) % 5] + C[(x + 4) % 5]; + integral_type integral_sum = integral_type(sum.data); + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << normalize4_chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < normalize4_num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= normalize4_chunk_size; + integral_normalized_chunks.push_back(normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= normalize4_chunk_size; + } + + A2[index] = TYPE(integral_normalized_sum); + A2_sum[index] = TYPE(sum); + for (std::size_t j = 0; j < normalize4_num_chunks; ++j) { + A2_chunks[index][j] = TYPE(integral_chunks[j]); + A2_normalized_chunks[index][j] = TYPE(integral_normalized_chunks[j]); + } + A2_copy[index] = A2[index]; + } + + + // rho/pi + + B[0] = A2[0]; + for (int index = 1; index < 25; ++index) { + int r = 3 * rho_offsets[index]; + int minus_r = 192 - r; + integral_type integral_A = integral_type(A2[perm[index - 1]].data); + integral_type smaller_part = integral_A >> minus_r; + integral_type bigger_part = integral_A & ((integral_type(1) << minus_r) - 1); + integral_type integral_A_rot = (bigger_part << r) + smaller_part; + B[perm[index]] = TYPE(integral_A_rot); + additional_rot_chunks.push_back(smaller_part); + additional_rot_chunks.push_back(bigger_part); + // integral_type bound_smaller = smaller_part - (integral_type(1) << r) + (integral_type(1) << 192); + // integral_type bound_bigger = bigger_part - (integral_type(1) << minus_r) + (integral_type(1) << + // 192); + integral_type bound_smaller = smaller_part + big_rot_const - rot_consts[index + 4][0]; + integral_type bound_bigger = bigger_part + big_rot_const - rot_consts[index + 4][1]; + auto copy_bound_smaller = bound_smaller; + auto copy_bound_bigger = bound_bigger; + std::vector integral_small_chunks; + std::vector integral_big_chunks; + integral_type mask = (integral_type(1) << rotate_chunk_size) - 1; + for (std::size_t j = 0; j < rotate_num_chunks; ++j) { + integral_small_chunks.push_back(bound_smaller & mask); + bound_smaller >>= rotate_chunk_size; + integral_big_chunks.push_back(bound_bigger & mask); + bound_bigger >>= rotate_chunk_size; + } + + B_smaller_part[index - 1] = TYPE(smaller_part); + B_bigger_part[index - 1] = TYPE(bigger_part); + B_bound_smaller[index - 1]= TYPE(copy_bound_smaller); + B_bound_bigger[index - 1] = TYPE(copy_bound_bigger); + for(std::size_t j=0; j< rotate_num_chunks; j++){ + B_small_chunks[index - 1][j] = TYPE(integral_small_chunks[j]); + B_big_chunks[index - 1][j] = TYPE(integral_big_chunks[j]); + } + B_rot_shift[index - 1] = TYPE(integral_type(1) << r); + B_rot_shift_minus[index - 1] = TYPE(integral_type(1) << minus_r); + } + + // chi + for (int index = 0; index < 25; ++index) { + int x = index % 5; + int y = index / 5; + TYPE sum = TYPE(sparse_3) - 2 * B[x + 5 * y] + B[(x + 1) % 5 + 5 * y] - B[(x + 2) % 5 + 5 * y]; + integral_type integral_sum = integral_type(sum.data); + std::vector integral_chunks; + std::vector integral_chi_chunks; + integral_type mask = (integral_type(1) << chi_chunk_size) - 1; + integral_type power = 1; + integral_type integral_chi_sum = 0; + for (std::size_t j = 0; j < chi_num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= chi_chunk_size; + integral_chi_chunks.push_back(chi(integral_chunks.back())); + integral_chi_sum += integral_chi_chunks.back() * power; + power <<= chi_chunk_size; + } + A3[index] = TYPE(integral_chi_sum); + A3_sum[index] = sum; + B_extra[index][0] = B[index]; + B_extra[index][1] = B[(x + 1) % 5 + 5 * y]; + B_extra[index][2] = B[(x + 2) % 5 + 5 * y]; + for (std::size_t j = 0; j < chi_num_chunks; ++j) { + A3_chunks[index][j] = TYPE(integral_chunks[j]); + A3_chi_chunks[index][j] = TYPE(integral_chi_chunks[j]); + } + } + + // iota + { + TYPE sum = A3[0] + input.round_constant; + integral_type integral_sum = integral_type(sum.data); + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << normalize3_chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < normalize3_num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= normalize3_chunk_size; + integral_normalized_chunks.push_back(normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= normalize3_chunk_size; + } + A4 = TYPE(integral_normalized_sum); + for (std::size_t j = 0; j < normalize3_num_chunks; ++j) { + A4_chunks[j] = TYPE(integral_chunks[j]); + A4_normalized_chunks[j] = TYPE(integral_normalized_chunks[j]); + } + A3_0copy = A3[0]; + A4_sum = TYPE(sum); + RC = input.round_constant; + } + + // additional rots + + for (std::size_t i = 0; i < 29; ++i) { + auto copy_bound_smaller = additional_rot_chunks[2 * i]; + auto copy_bound_bigger = additional_rot_chunks[2 * i + 1]; + std::vector integral_small_chunks; + std::vector integral_big_chunks; + integral_type mask = (integral_type(1) << rotate_chunk_size) - 1; + for (std::size_t j = 0; j < rotate_num_chunks; ++j) { + integral_small_chunks.push_back(copy_bound_smaller & mask); + copy_bound_smaller >>= rotate_chunk_size; + integral_big_chunks.push_back(copy_bound_bigger & mask); + copy_bound_bigger >>= rotate_chunk_size; + } + ROT_extra[i][0] = TYPE(additional_rot_chunks[2 * i]); + ROT_extra[i][1] = TYPE(additional_rot_chunks[2 * i + 1]); + for(std::size_t j = 0; j < rotate_num_chunks; ++j){ + ROT_extra_small_chunks[i][j] = TYPE(integral_small_chunks[j]); + ROT_extra_big_chunks[i][j] = TYPE(integral_big_chunks[j]); + } + } + } + + std::size_t row_offset = 0; + if (xor_with_mes) { + for (int index = 0; index < 17; ++index) { + allocate(message[index], 0, row_offset + 2 * index); + allocate(state[index], 1, row_offset + 2 * index); + allocate(A0_sum[index], 2, row_offset + 2 * index); + allocate(A0[index], 0, row_offset + 2 * index + 1); + for (std::size_t j = 0; j < normalize3_num_chunks; j++) { + allocate(A0_chunks[index][j], 3 + j, row_offset + 2 * index); + allocate(A0_normalized_chunks[index][j], 1 + j, + row_offset + 2 * index + 1); + } + } + row_offset += 2 * 17; + } + + // theta allocations + for (int index = 0; index < 5; ++index) { + allocate(A1[index], 0, row_offset + 2 * index); + allocate(A1[index + 5], 1, row_offset + 2 * index); + allocate(A1[index + 10], 2, row_offset + 2 * index); + allocate(A1[index + 15], 3, row_offset + 2 * index); + allocate(A1[index + 20], 4, row_offset + 2 * index); + allocate(C_sum[index], 5, row_offset + 2 * index); + for (std::size_t j = 0; j < normalize6_num_chunks - 2; j++) { + allocate(C_chunks[index][j], 6 + j, row_offset + 2 * index); + } + allocate(C_chunks[index][9], 1, row_offset + 2 * index + 1); + allocate(C_chunks[index][10], 2, row_offset + 2 * index + 1); + allocate(C[index], 0, row_offset + 2 * index + 1); + for (std::size_t j = 0; j < normalize6_num_chunks; j++) { + allocate(C_chunks_normalized[index][j], 3 + j, + row_offset + 2 * index + 1); + } + } + row_offset += 10; // 2*5 + + for (int index = 0; index < 5; ++index) { + allocate(C_rot[index], 1, row_offset + 3 * index); + allocate(C_copy[index], 0, row_offset + 3 * index); + allocate(C_smaller_part[index], 4, row_offset + 3 * index); + allocate(C_bigger_part[index], 5, row_offset + 3 * index); + allocate(C_bound_smaller[index], 6, row_offset + 3 * index); + allocate(C_bound_bigger[index], 0, row_offset + 3 * index + 1); + allocate(big_rot_constant[index], 0, row_offset + 3 * index, + column_type::constant); + allocate(rot_constants[index][0], 0, row_offset + 3 * index + 1, + column_type::constant); + allocate(rot_constants[index][1], 0, row_offset + 3 * index + 2, + column_type::constant); + for (std::size_t j = 0; j < rotate_num_chunks; j++) { + allocate(C_rot_small_chunks[index][j], 7 + j, row_offset + 3 * index); + allocate(C_rot_big_chunks[index][j], 1 + j, row_offset + 3 * index + 1); + } + allocate(C_rot_shift[index], 2, row_offset + 3 * index); + allocate(C_rot_shift_minus[index], 3, row_offset + 3 * index); + } + row_offset += 15; // 3*5 + + for (int index = 0; index < 25; ++index) { + auto x = index % 5; + auto y = index / 5; + allocate(A1_copy[index], 0, row_offset + 2 * index); + allocate(C_rot_copy[(x + 1) % 5][y], 1, row_offset + 2 * index); + allocate(C_second_copy[(x + 4) % 5][y], 2, row_offset + 2 * index); + allocate(A2_sum[index], 3, row_offset + 2 * index); + allocate(A2[index], 0, row_offset + 2 * index + 1); + for (std::size_t j = 0; j < normalize4_num_chunks; ++j) { + allocate(A2_chunks[index][j], 4 + j, row_offset + 2 * index); + allocate(A2_normalized_chunks[index][j], 1 + j, + row_offset + 2 * index + 1); + } + } + row_offset += 50; // 2*25 + + // rho/pi allocations + for (int index = 0; index < 24; ++index) { + allocate(B[perm[index + 1]], 1, row_offset + 3 * index); + allocate(A2_copy[perm[index]], 0, row_offset + 3 * index); + allocate(B_smaller_part[index], 4, row_offset + 3 * index); + allocate(B_bigger_part[index], 5, row_offset + 3 * index); + allocate(B_bound_smaller[index], 6, row_offset + 3 * index); + allocate(B_bound_bigger[index], 0, row_offset + 3 * index + 1); + allocate(big_rot_constant[index + 5], 0, row_offset + 3 * index, + column_type::constant); + allocate(rot_constants[index + 5][0], 0, row_offset + 3 * index + 1, + column_type::constant); + allocate(rot_constants[index + 5][1], 0, row_offset + 3 * index + 2, + column_type::constant); + for (std::size_t j = 0; j < rotate_num_chunks; j++) { + allocate(B_small_chunks[index][j], 7 + j, row_offset + 3 * index); + allocate(B_big_chunks[index][j], 1 + j, row_offset + 3 * index + 1); + } + allocate(B_rot_shift[index], 2, row_offset + 3 * index); + allocate(B_rot_shift_minus[index], 3, row_offset + 3 * index); + } + row_offset += 3 * 24; + + // chi allocations + for (int index = 0; index < 25; ++index) { + auto x = index % 5; + auto y = index / 5; + allocate(A3_sum[index], 3, row_offset + 2 * index); + allocate(A3[index], 0, row_offset + 2 * index + 1); + allocate(B_extra[index][0], 0, row_offset + 2 * index); + allocate(B_extra[index][1], 1, row_offset + 2 * index); + allocate(B_extra[index][2], 2, row_offset + 2 * index); + for (std::size_t j = 0; j < chi_num_chunks; j++) { + allocate(A3_chunks[index][j], 4 + j, row_offset + 2 * index); + allocate(A3_chi_chunks[index][j], 1 + j, row_offset + 2 * index + 1); + } + } + row_offset += 50; + + // iota allocations + allocate(A3_0copy, 0, row_offset); + allocate(RC, 1, row_offset); + allocate(A4_sum, 2, row_offset); + allocate(A4, 0, row_offset + 1); + for(std::size_t j = 0; j < normalize3_num_chunks; j++){ + allocate(A4_chunks[j], 3 + j, row_offset); + allocate(A4_normalized_chunks[j], 1 + j, row_offset + 1); + } + row_offset += 2; + + // additional rots allocation + for(int index = 0; index < 29; ++index){ + allocate(ROT_extra[index][0], 0, row_offset + 2*index); + allocate(ROT_extra[index][1], 0, row_offset + 2*index + 1); + for(std::size_t j = 0; j < rotate_num_chunks; j++){ + allocate(ROT_extra_small_chunks[index][j], 1 + j, row_offset + 2*index); + allocate(ROT_extra_big_chunks[index][j], 1 + j, row_offset + 2*index + 1); + } + } + row_offset += 2*29; + + if(make_links){ + if(xor_with_mes){ + for(std::size_t i = 0; i < 17; i++){ + copy_constrain(message[i], input.padded_message_chunk[i]); + copy_constrain(state[i], input.inner_state[i]); + } + for(std::size_t i = 17; i < 25; i++){ + copy_constrain(A1[i], input.inner_state[i]); + } + }else{ + for(std::size_t i = 0; i < 25; i++){ + copy_constrain(A1[i], input.inner_state[i]); + } + } + copy_constrain(RC, input.round_constant); + } + + if (xor_with_mes) { + for (int index = 0; index < 17; index++) { + copy_constrain(A0[index], A1[index]); + constrain(A0_sum[index] - message[index] - state[index]); + TYPE constraint_chunk = A0_sum[index]; + TYPE constraint_normalized_chunk = A0[index]; + for (std::size_t k = 0; k < normalize3_num_chunks; ++k) { + constraint_chunk -= + A0_chunks[index][k] * + (integral_type(1) << (k * normalize3_chunk_size)); + constraint_normalized_chunk -= + A0_normalized_chunks[index][k] * + (integral_type(1) << (k * normalize3_chunk_size)); + lookup({A0_chunks[index][k], A0_normalized_chunks[index][k]}, "keccak_normalize3_table/full"); + } + constrain(constraint_chunk); + constrain(constraint_normalized_chunk); + } + } + + // theta constraints + for (int index = 0; index < 5; ++index) { + constrain(C_sum[index] - A1[index] - A1[index + 5] - A1[index + 10] - A1[index + 15] - A1[index + 20]); + + TYPE constraint_chunk = C_sum[index]; + TYPE constraint_normalized_chunk = C[index]; + for (std::size_t k = 0; k < normalize6_num_chunks; ++k) { + constraint_chunk -= C_chunks[index][k] * (integral_type(1) << (k * normalize6_chunk_size)); + constraint_normalized_chunk -= C_chunks_normalized[index][k] * (integral_type(1) << (k * normalize6_chunk_size)); + lookup({C_chunks[index][k], C_chunks_normalized[index][k]}, "keccak_normalize6_table/full"); + } + constrain(constraint_chunk); + constrain(constraint_normalized_chunk); + } + + for (int index = 0; index < 5; ++index) { + copy_constrain(C[index], C_copy[index]); + constrain(C_copy[index] - C_smaller_part[index] * C_rot_shift_minus[index] - + C_bigger_part[index]); + constrain(C_rot[index] - C_bigger_part[index] * C_rot_shift[index] - + C_smaller_part[index]); + constrain(C_rot_shift[index] * C_rot_shift_minus[index] - + (integral_type(1) << 192)); + constrain(C_bound_smaller[index] - C_smaller_part[index] + + rot_constants[index][0] - big_rot_constant[index]); + constrain(C_bound_bigger[index] - C_bigger_part[index] + + rot_constants[index][1] - big_rot_constant[index]); + + TYPE constraint_small_chunks = C_bound_smaller[index]; + TYPE constraint_big_chunks = C_bound_bigger[index]; + for (std::size_t k = 0; k < rotate_num_chunks; k++) { + constraint_small_chunks -= + C_rot_small_chunks[index][k] * + (integral_type(1) << (k * rotate_chunk_size)); + constraint_big_chunks -= C_rot_big_chunks[index][k] * + (integral_type(1) << (k * rotate_chunk_size)); + lookup(C_rot_small_chunks[index][k], + "keccak_pack_table/range_check_sparse"); + lookup(C_rot_big_chunks[index][k], + "keccak_pack_table/range_check_sparse"); + } + constrain(constraint_small_chunks); + constrain(constraint_big_chunks); + } + + for (int index = 0; index < 25; ++index) { + auto x = index % 5; + auto y = index / 5; + copy_constrain(C[x], C_second_copy[x][y]); + copy_constrain(C_rot[x], C_rot_copy[x][y]); + constrain(A2_sum[index] - A1_copy[index] - C_rot_copy[(x + 1) % 5][y] - C_second_copy[(x + 4) % 5][y]); + TYPE constrain_A2_chunks = A2_sum[index]; + TYPE constrain_A2_normalized_chunks = A2[index]; + for (std::size_t k = 0; k < normalize4_num_chunks; k++) { + constrain_A2_chunks -= A2_chunks[index][k] * (integral_type(1) << (k * normalize4_chunk_size)); + constrain_A2_normalized_chunks -= A2_normalized_chunks[index][k] * (integral_type(1) << (k * normalize4_chunk_size)); + lookup({A2_chunks[index][k], A2_normalized_chunks[index][k]}, "keccak_normalize4_table/full"); + } + constrain(constrain_A2_chunks); + constrain(constrain_A2_normalized_chunks); + } + + // rho/pi constraints + for (int index = 0; index < 24; ++index) { + copy_constrain(A2[perm[index]], A2_copy[perm[index]]); + constrain(A2_copy[perm[index]] - + B_smaller_part[index] * B_rot_shift_minus[index] - + B_bigger_part[index]); + constrain(B[perm[index + 1]] - B_bigger_part[index] * B_rot_shift[index] - + B_smaller_part[index]); + constrain(B_rot_shift[index] * B_rot_shift_minus[index] - + (integral_type(1) << 192)); + constrain(B_bound_smaller[index] - B_smaller_part[index] + + rot_constants[index + 5][0] - big_rot_constant[index + 5]); + constrain(B_bound_bigger[index] - B_bigger_part[index] + + rot_constants[index + 5][1] - big_rot_constant[index + 5]); + + TYPE constraint_small_chunks = B_bound_smaller[index]; + TYPE constraint_big_chunks = B_bound_bigger[index]; + for (std::size_t k = 0; k < rotate_num_chunks; k++) { + constraint_small_chunks -= + B_small_chunks[index][k] * + (integral_type(1) << (k * rotate_chunk_size)); + constraint_big_chunks -= B_big_chunks[index][k] * + (integral_type(1) << (k * rotate_chunk_size)); + // lookup(B_small_chunks[index][k], + // "keccak_pack_table/range_check_sparse"); + // lookup(B_big_chunks[index][k], "keccak_pack_table/range_check_sparse"); + } + constrain(constraint_small_chunks); + constrain(constraint_big_chunks); + } + + // chi constraints + for (int index = 0; index < 25; ++index) { + auto x = index % 5; + auto y = index / 5; + + if (index == 0) { + copy_constrain(B_extra[index][0], A2[index]); + } else { + copy_constrain(B_extra[index][0], B[index]); + } + if ((x + 1) % 5 + 5 * y == 0) { + copy_constrain(B_extra[index][1], A2[0]); + } else { + copy_constrain(B_extra[index][1], B[(x + 1) % 5 + 5 * y]); + } + if ((x + 2) % 5 + 5 * y == 0) { + copy_constrain(B_extra[index][2], A2[0]); + } else { + copy_constrain(B_extra[index][2], B[(x + 2) % 5 + 5 * y]); + } + + constrain(A3_sum[index] - sparse_3 + 2 * B_extra[index][0] - + B_extra[index][1] + B_extra[index][2]); + + TYPE constraint_chunks = A3_sum[index]; + TYPE constraint_chi_chunks = A3[index]; + for (std::size_t k = 0; k < chi_num_chunks; k++) { + constraint_chunks -= + A3_chunks[index][k] * (integral_type(1) << (k * chi_chunk_size)); + constraint_chi_chunks -= A3_chi_chunks[index][k] * + (integral_type(1) << (k * chi_chunk_size)); + lookup({A3_chunks[index][k], A3_chi_chunks[index][k]}, "keccak_chi_table/full"); + } + constrain(constraint_chunks); + constrain(constraint_chi_chunks); + } + + // iota constraints + { + copy_constrain(A3_0copy, A3[0]); + constrain(A4_sum - A3_0copy - RC); + TYPE constraint_chunks = A4_sum; + TYPE constraint_normalized_chunks = A4; + for(std::size_t k = 0; k < normalize3_num_chunks; k++){ + constraint_chunks -= A4_chunks[k] * (integral_type(1) << (k * normalize3_chunk_size)); + constraint_normalized_chunks -= A4_normalized_chunks[k] * (integral_type(1) << (k * normalize3_chunk_size)); + lookup({A4_chunks[k], A4_normalized_chunks[k]}, "keccak_normalize3_table/full"); + } + constrain(constraint_chunks); + constrain(constraint_normalized_chunks); + } + + // additional rot range checks + for(int index = 0; index < 29; ++index){ + if(index < 5){ + copy_constrain(ROT_extra[index][0], C_smaller_part[index]); + copy_constrain(ROT_extra[index][1], C_bigger_part[index]); + }else{ + copy_constrain(ROT_extra[index][0], B_smaller_part[index - 5]); + copy_constrain(ROT_extra[index][1], B_bigger_part[index - 5]); + } + TYPE constraint_small = ROT_extra[index][0]; + TYPE constraint_big = ROT_extra[index][1]; + for(std::size_t k = 0; k < rotate_num_chunks; k++){ + constraint_small -= ROT_extra_small_chunks[index][k] * (integral_type(1) << (k * rotate_chunk_size)); + constraint_big -= ROT_extra_big_chunks[index][k] * (integral_type(1) << (k * rotate_chunk_size)); + // lookup(ROT_extra_small_chunks[index][k], "keccak_pack_table/range_check_sparse"); + // lookup(ROT_extra_big_chunks[index][k], "keccak_pack_table/range_check_sparse"); + } + constrain(constraint_small); + constrain(constraint_big); + } + + inner_state[0] = A4; + for(std::size_t index = 1; index < 25; ++index){ + inner_state[index] = A3[index]; + } + }; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_round_bbf_wrapper.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_round_bbf_wrapper.hpp new file mode 100644 index 0000000000..2b0721998d --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/keccak_round_bbf_wrapper.hpp @@ -0,0 +1,370 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK component wrapping the BBF-component interface +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_PLONK_KECCAK_ROUND_keccak_round_bbf_wrapper_HPP +#define CRYPTO3_BLUEPRINT_PLONK_KECCAK_ROUND_keccak_round_bbf_wrapper_HPP + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + + template + class keccak_round_bbf_wrapper; + + template + class keccak_round_bbf_wrapper< + crypto3::zk::snark::plonk_constraint_system, BlueprintFieldType> + : public plonk_component { + public: + using component_type = plonk_component; + + using var = typename component_type::var; + using manifest_type = plonk_component_manifest; + + class gate_manifest_type : public component_gate_manifest { + public: + std::size_t witness_amount; + bool xor_with_mes; + + static constexpr const std::size_t clamp = 15; + + gate_manifest_type(std::size_t witness_amount_, bool xor_with_mes_) + : witness_amount(std::min(witness_amount_, clamp)), + xor_with_mes(xor_with_mes_) {} + + std::uint32_t gates_amount() const override { + return keccak_round_bbf_wrapper::get_gates_amount( + witness_amount, xor_with_mes); + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, + bool xor_with_mes) { + gate_manifest manifest = gate_manifest( + gate_manifest_type(witness_amount, xor_with_mes)); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param( + 15)), // TODO: this has nothing to do with reality, + true // to be dropped eventually + ); + return manifest; + } + + static nil::crypto3::zk::snark::plonk_table_description + get_table_description(const bool xor_with_mes) { + nil::crypto3::zk::snark::plonk_table_description desc( + 15, 1, 30, 50); + desc.usable_rows_amount = (xor_with_mes) ? 291 : 257; + + return desc; + } + + constexpr static std::size_t get_gates_amount(std::size_t witness_amount, + bool xor_with_mes) { + return 13; + } + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, + bool xor_with_mes) { + return (xor_with_mes) ? 291 : 257; + } + constexpr static std::size_t get_empty_rows_amount() { return 0; } + + const bool xor_with_mes; + const std::size_t rows_amount = + get_rows_amount(this->witness_amount(), xor_with_mes); + const std::size_t gates_amount = + get_gates_amount(this->witness_amount(), xor_with_mes); + const std::size_t empty_rows_amount = get_empty_rows_amount(); + const std::string component_name = "wrapper of keccak round BBF-component"; + + struct input_type { + std::array inner_state; + std::array padded_message_chunk; + var round_constant; + + std::vector> all_vars() { + std::vector> result; + result.insert(result.end(), inner_state.begin(), inner_state.end()); + result.insert(result.end(), padded_message_chunk.begin(), + padded_message_chunk.end()); + result.push_back(round_constant); + return result; + } + }; + + struct result_type { + std::array inner_state; + + result_type() {} + + result_type(const keccak_round_bbf_wrapper &component, + std::size_t start_row_index) {} + + result_type( + const std::array &result) { + for (std::size_t i = 0; i < 25; i++) inner_state[i] = result[i]; + } + + std::vector> all_vars() { + std::vector> result; + // result.insert(result.end(), inner_state.begin(), inner_state.end()); + return result; + } + }; + + template + explicit keccak_round_bbf_wrapper(ContainerType witness, bool xor_with_mes_ = false) + : component_type(witness, {}, {}, get_manifest()), + xor_with_mes(xor_with_mes_){}; + + template + keccak_round_bbf_wrapper(WitnessContainerType witness, + ConstantContainerType constant, + PublicInputContainerType public_input, + bool xor_with_mes_ = false) + : component_type(witness, constant, public_input, get_manifest()), + xor_with_mes(xor_with_mes_) {}; + + keccak_round_bbf_wrapper( + std::initializer_list< + typename component_type::witness_container_type::value_type> + witnesses, + std::initializer_list< + typename component_type::constant_container_type::value_type> + constants, + std::initializer_list< + typename component_type::public_input_container_type::value_type> + public_inputs, + bool xor_with_mes_ = false) + : component_type(witnesses, constants, public_inputs, get_manifest()), + xor_with_mes(xor_with_mes_) {}; + + std::map component_lookup_tables() const { + std::map lookup_tables; + // lookup_tables["keccak_normalize3_table/full"] = 0; // + // REQUIRED_TABLE lookup_tables["keccak_normalize4_table/full"] = 0; // + // REQUIRED_TABLE lookup_tables["keccak_normalize6_table/full"] = 0; // + // REQUIRED_TABLE lookup_tables["keccak_chi_table/full"] = 0; // REQUIRED_TABLE + // lookup_tables["keccak_pack_table/range_check_sparse"] = 0; // + // REQUIRED_TABLE + return lookup_tables; + } + }; + + template + using plonk_keccak_round_bbf_wrapper = keccak_round_bbf_wrapper< + crypto3::zk::snark::plonk_constraint_system, + BlueprintFieldType>; + + template + typename plonk_keccak_round_bbf_wrapper::result_type + generate_assignments( + const plonk_keccak_round_bbf_wrapper &component, + assignment> + &assignment, + const typename plonk_keccak_round_bbf_wrapper::input_type + instance_input, + const std::uint32_t start_row_index) { + using value_type = typename BlueprintFieldType::value_type; + using context_type = typename nil::blueprint::bbf::context< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::ASSIGNMENT>; + using KECCAK_ROUND = typename nil::blueprint::bbf::keccak_round< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::ASSIGNMENT>; + // using TYPE = typename Is_Zero::TYPE; + using TYPE = typename context_type::TYPE; + + context_type ct = context_type(assignment, component.rows_amount, start_row_index); + //ct.print_witness_allocation_log(bbf::column_type::constant); + + typename KECCAK_ROUND::input_type input; + input.round_constant = var_value(assignment, instance_input.round_constant); + for (std::size_t i = 0; i < 17; i++) { + input.padded_message_chunk[i] = + var_value(assignment, instance_input.padded_message_chunk[i]); + } + for (std::size_t i = 0; i < 25; i++) { + input.inner_state[i] = var_value(assignment, instance_input.inner_state[i]); + } + + auto keccak_round = + KECCAK_ROUND(ct, input, component.xor_with_mes); + std::array result; + for (std::size_t i = 0; i < 25; i++) { + result[i] = keccak_round.inner_state[i]; + } + return typename plonk_keccak_round_bbf_wrapper::result_type( + result); + } + + template + typename plonk_keccak_round_bbf_wrapper::result_type + generate_circuit( + const plonk_keccak_round_bbf_wrapper &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_keccak_round_bbf_wrapper::input_type + &instance_input, + const std::size_t start_row_index) { + using context_type = typename nil::blueprint::bbf::context< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::CONSTRAINTS>; + using KECCAK_ROUND = typename nil::blueprint::bbf::keccak_round< + BlueprintFieldType, nil::blueprint::bbf::GenerationStage::CONSTRAINTS>; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using plonk_copy_constraint = + crypto3::zk::snark::plonk_copy_constraint; + using lookup_constraint_type = + crypto3::zk::snark::plonk_lookup_constraint; + using TYPE = typename context_type::TYPE; + + using component_type = plonk_keccak_round_bbf_wrapper; + using var = typename component_type::var; + using nil::blueprint::bbf::row_selector; + + context_type ct = context_type(assignment.get_description(), component.rows_amount, + start_row_index); + + typename KECCAK_ROUND::input_type input; + input.round_constant = instance_input.round_constant; + for (std::size_t i = 0; i < 17; i++) { + input.padded_message_chunk[i] = instance_input.padded_message_chunk[i]; + } + for (std::size_t i = 0; i < 25; i++) { + input.inner_state[i] = instance_input.inner_state[i]; + } + auto result = KECCAK_ROUND(ct, input, component.xor_with_mes); + for (std::size_t i = 0; i < 25; i++) { + // std::cout << result[i] << std::endl; + } + + auto c_list = ct.get_constants(); + // std::cout << "const list size = " << c_list.size() << "\n"; + for(std::size_t i = 0; i < c_list.size(); i++) { // columns + // std::cout << "column size = " << c_list[i].size() << "\n"; + for(std::size_t j = 0; j < c_list[i].size(); j++) { // rows + // std::cout << i << ", " << j << ": " << c_list[i][j] << "\n"; + assignment.constant(component.C(i), j) = c_list[i][j]; + } + } + + ////////////////////////// Don't use 'ct' below this line, we just moved it!!! ///////////////////////////// + nil::blueprint::bbf::gates_optimizer optimizer(std::move(ct)); + nil::blueprint::bbf::optimized_gates gates = optimizer.optimize_gates(); + + // Register all the selectors. + for (const auto& [row_list, selector_id]: gates.selectors_) { + for(std::size_t row_index : row_list) { + assignment.enable_selector(selector_id, row_index); + } + } + + for (const auto& [selector_id, constraints] : gates.constraint_list) { + /* + std::cout << "GATE:\n"; + for(const auto& c : constraints) { + std::cout << c << "\n"; + } + std::cout << "Rows: "; + */ + bp.add_gate(selector_id, constraints); + + //std::cout << "\n"; + } + + // compatibility layer: copy constraint list + for(const auto& cc : gates.copy_constraints) { + bp.add_copy_constraint(cc); + } + + std::set lookup_tables; + for(const auto& [selector_id, lookup_list] : gates.lookup_constraints) { + std::vector lookup_gate; + for(const auto& single_lookup_constraint : lookup_list) { + std::string table_name = single_lookup_constraint.first; + if (lookup_tables.find(table_name) == lookup_tables.end()) { + if (gates.dynamic_lookup_tables.find(table_name) != gates.dynamic_lookup_tables.end()) { + bp.reserve_dynamic_table(table_name); + } else { + bp.reserve_table(table_name); + } + lookup_tables.insert(table_name); + } + std::size_t table_index = bp.get_reserved_indices().at(table_name); + lookup_gate.push_back({table_index, single_lookup_constraint.second}); + } + + bp.add_lookup_gate(selector_id, lookup_gate); + } + + // compatibility layer: dynamic lookup tables - continued + for(const auto& [name, area] : gates.dynamic_lookup_tables) { + bp.register_dynamic_table(name); + + std::size_t selector_index = area.second; + + crypto3::zk::snark::plonk_lookup_table table_specs; + table_specs.tag_index = selector_index; + table_specs.columns_number = area.first.size(); + std::vector dynamic_lookup_cols; + for(const auto& c : area.first) { + // TODO: does this make sense?! + dynamic_lookup_cols.push_back( + var(c, 0, false, var::column_type::witness)); + } + table_specs.lookup_options = {dynamic_lookup_cols}; + bp.define_dynamic_table(name,table_specs); + } + + std::cout << "Gates amount = " << bp.num_gates() << "\n"; + std::cout << "Lookup gates amount = " << bp.num_lookup_gates() << "\n"; + + return typename plonk_keccak_round_bbf_wrapper::result_type( + component, start_row_index); + } + } // namespace components + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_PLONK_KECCAK_ROUND_keccak_round_bbf_wrapper_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/util.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/util.hpp new file mode 100644 index 0000000000..2016d50890 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/hashes/keccak/util.hpp @@ -0,0 +1,97 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_PACK_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_PACK_HPP + +template +typename BlueprintFieldType::value_type pack(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); +} + +template +typename BlueprintFieldType::value_type unpack(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + while (value_integral >= 1) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 3; + power = power << 1; + } + return value_type(result_integral); +} + +template +typename BlueprintFieldType::value_type calculateRLC( + std::vector data, + typename BlueprintFieldType::value_type factor +){ + typename BlueprintFieldType::value_type RLC = data.size(); + for( std::size_t i = 0; i < data.size(); i++ ){ + RLC *= factor; + RLC += typename BlueprintFieldType::value_type(data[i]); + } + return RLC; +} + +template +std::array sparsed_64bits_to_4_chunks(typename BlueprintFieldType::value_type num){ + using integral_type = typename BlueprintFieldType::integral_type; + using value_type = typename BlueprintFieldType::value_type; + integral_type n(num.data); + integral_type mask = (integral_type(1) << 48) - 1; + + std::array result; + result[3] = value_type(n & mask); n >>= 48; + result[2] = value_type(n & mask); n >>= 48; + result[1] = value_type(n & mask); n >>= 48; + result[0] = value_type(n & mask); + + return result; +} + +// For 16-bit numbers placed into field element +template +typename BlueprintFieldType::value_type swap_bytes( typename BlueprintFieldType::value_type i ){ + typename BlueprintFieldType::integral_type n(i.data); + assert( n < 65536 ); + + return ((n & 0xFF) << 8) + ((n & 0xFF00) >> 8); +} +#endif \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/is_zero.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/is_zero.hpp index 1fa1bed907..e8216a9a7b 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/bbf/is_zero.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/is_zero.hpp @@ -41,6 +41,12 @@ namespace nil { namespace blueprint { namespace bbf { + template + struct is_zero_raw_input { + using TYPE = typename FieldType::value_type; + + TYPE X; + }; template class is_zero : public generic_component { @@ -53,11 +59,26 @@ namespace nil { public: using typename generic_component::TYPE; + using typename generic_component::table_params; + using raw_input_type = typename std::conditional,std::tuple<>>::type; - public: TYPE input; TYPE res; + static table_params get_minimal_requirements() { + return {1,0,0,3}; // W, PI, C, rows + } + + static std::tuple form_input(context_type &context_object, raw_input_type raw_input) { + TYPE X; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + X = raw_input.X; + } + context_object.allocate(X,0,0,column_type::public_input); + return std::make_tuple(X); + } + is_zero(context_type &context_object, TYPE input_x, bool make_links = true) : generic_component(context_object) { @@ -82,9 +103,8 @@ namespace nil { input = X; res = R; - }; + } }; - } // namespace bbf } // namespace blueprint } // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/l1_wrapper.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/l1_wrapper.hpp new file mode 100644 index 0000000000..9afd44a107 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/l1_wrapper.hpp @@ -0,0 +1,301 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include + +#include +#include +#include +#include + +#include // also included by any subcomponent +#include + + +namespace nil { + namespace blueprint { + namespace components { + template< + typename ArithmetizationType, + typename FieldType, + template typename BBFType, + typename... ComponentStaticInfoArgs + > + class l1_wrapper; + + template< + typename BlueprintFieldType, + template typename BBFType, + typename... ComponentStaticInfoArgs + > + class l1_wrapper< + crypto3::zk::snark::plonk_constraint_system, + BlueprintFieldType, + BBFType, + ComponentStaticInfoArgs...> + : public plonk_component + { + public: + using component_type = plonk_component; + using bbf_assignment_type = BBFType; + using bbf_constraints_type = BBFType; + + using var = typename component_type::var; + using manifest_type = plonk_component_manifest; + + class gate_manifest_type : public component_gate_manifest { + public: + std::uint32_t gates_amount() const override { + return l1_wrapper::gates_amount; + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount) { + static gate_manifest manifest = gate_manifest(gate_manifest_type()); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param(3)), // TODO: this has nothing to do with reality, + false // to be dropped eventually + ); + return manifest; + } + + static nil::crypto3::zk::snark::plonk_table_description get_table_description( + ComponentStaticInfoArgs... component_static_info_args + ){ + return bbf_constraints_type::get_table_description(component_static_info_args...); + } + + static std::size_t get_rows_amount( + ComponentStaticInfoArgs... component_static_info_args + ){ + auto desc = bbf_constraints_type::get_table_description(component_static_info_args...); + return desc.usable_rows_amount; + } + static std::size_t get_empty_rows_amount( + ComponentStaticInfoArgs... component_static_info_args + ){ + return get_rows_amount(component_static_info_args...); + } + + constexpr static const std::size_t gates_amount = 0; // TODO: this is very unoptimized! + const std::string component_name = "wrapper of BBF-components"; + + struct input_type { + }; + + struct result_type { + result_type() { } + + std::vector> all_vars() { + return {}; + } + }; + + template + explicit l1_wrapper(ContainerType witness) : component_type(witness, {}, {}, get_manifest()) {}; + + template + l1_wrapper(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input) : + component_type(witness, constant, public_input, get_manifest()) {}; + + l1_wrapper(std::initializer_list witnesses, + std::initializer_list + constants, + std::initializer_list + public_inputs) : + component_type(witnesses, constants, public_inputs, get_manifest()) {}; + + std::map component_lookup_tables() const{ + std::map lookup_tables; + return lookup_tables; + } + }; + + template typename BBFType, typename... ComponentStaticInfoArgs> + using plonk_l1_wrapper = l1_wrapper< + crypto3::zk::snark::plonk_constraint_system, + BlueprintFieldType, + BBFType, + ComponentStaticInfoArgs... + >; + + template< + typename BlueprintFieldType, + template typename BBFType, + typename... ComponentStaticInfoArgs + > + typename plonk_l1_wrapper::result_type + generate_assignments( + const plonk_l1_wrapper &component, + assignment> &assignment, + const typename BBFType::input_type &instance_input, + const std::uint32_t start_row_index, + ComponentStaticInfoArgs... component_static_info_args + ) { + using component_type = plonk_l1_wrapper; + using val = typename BlueprintFieldType::value_type; + using context_type = typename nil::blueprint::bbf::context; + using BBF = BBFType; + auto desc = component_type::get_table_description(component_static_info_args...); + + context_type ct = context_type(assignment, desc.usable_rows_amount, start_row_index); + BBF bbf_instance(ct, instance_input, component_static_info_args...); + return typename plonk_l1_wrapper::result_type(); + } + + template< + typename BlueprintFieldType, + template typename BBFType, + typename... ComponentStaticInfoArgs + > + typename plonk_l1_wrapper::result_type generate_circuit( + const plonk_l1_wrapper &component, + circuit> &bp, + nil::crypto3::zk::snark::plonk_assignment_table &assignment, + const typename BBFType::input_type &instance_input, + const std::size_t start_row_index, + ComponentStaticInfoArgs... component_static_info_args + ) { + using constraint_type = crypto3::zk::snark::plonk_constraint; + using plonk_copy_constraint = crypto3::zk::snark::plonk_copy_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + + using component_type = const plonk_l1_wrapper; + using var = typename component_type::var; + using context_type = typename nil::blueprint::bbf::context; + using BBF = BBFType; + using nil::blueprint::bbf::row_selector; + using TYPE = typename context_type::TYPE; + + context_type ct = context_type( + component_type::get_table_description(component_static_info_args...), + component_type::get_table_description(component_static_info_args...).usable_rows_amount, + start_row_index + ); + BBF bbf_instance(ct, instance_input, component_static_info_args...); + + + ct.optimize_gates(); + + // compatibility layer: constraint list => gates & selectors + std::unordered_map, std::vector> constraint_list = + ct.get_constraints(); + + for(const auto& [row_list, constraints] : constraint_list) { + /* + std::cout << "GATE:\n"; + for(const auto& c : constraints) { + std::cout << c << "\n"; + } + std::cout << "Rows: "; + */ + std::size_t selector_index = bp.add_gate(constraints); + for(const std::size_t& row_index : row_list) { + // std::cout << row_index << " "; + assignment.enable_selector(selector_index, row_index); + } + //std::cout << "\n"; + } + + // compatibility layer: copy constraint list + std::vector copy_constraints = ct.get_copy_constraints(); + for(const auto& cc : copy_constraints) { + bp.add_copy_constraint(cc); + } + + // compatibility layer: dynamic lookup tables + std::map,row_selector<>>> + dynamic_lookup_tables = ct.get_dynamic_lookup_tables(); + + // compatibility layer: lookup constraint list + auto lookup_constraints = ct.get_lookup_constraints(); + std::set lookup_tables; + for(const auto& [row_list, lookup_list] : lookup_constraints) { + std::vector lookup_gate; + for(const auto& single_lookup_constraint : lookup_list) { + std::string table_name = single_lookup_constraint.first; + if (lookup_tables.find(table_name) == lookup_tables.end()) { + if (dynamic_lookup_tables.find(table_name) != dynamic_lookup_tables.end()) { + bp.reserve_dynamic_table(table_name); + } else { + bp.reserve_table(table_name); + } + lookup_tables.insert(table_name); + } + std::size_t table_index = bp.get_reserved_indices().at(table_name); + lookup_gate.push_back({table_index,single_lookup_constraint.second}); + } + std::size_t selector_index = bp.add_lookup_gate(lookup_gate); + for(std::size_t row_index : row_list) { + assignment.enable_selector(selector_index, row_index); + } + } + + // compatibility layer: dynamic lookup tables - continued + for(const auto& [name, area] : dynamic_lookup_tables) { + bp.register_dynamic_table(name); + std::size_t selector_index = bp.get_dynamic_lookup_table_selector(); + for(std::size_t row_index : area.second) { + assignment.enable_selector(selector_index,row_index); + } + crypto3::zk::snark::plonk_lookup_table table_specs; + table_specs.tag_index = selector_index; + table_specs.columns_number = area.first.size(); + std::vector dynamic_lookup_cols; + for(const auto& c : area.first) { + dynamic_lookup_cols.push_back(var(c, 0, false, var::column_type::witness)); // TODO: does this make sense?! + } + table_specs.lookup_options = {dynamic_lookup_cols}; + bp.define_dynamic_table(name,table_specs); + } + + // compatibility layer: constants + auto c_list = ct.get_constants(); + // std::cout << "const list size = " << c_list.size() << "\n"; + for(std::size_t i = 0; i < c_list.size(); i++) { // columns + // std::cout << "column size = " << c_list[i].size() << "\n"; + for(std::size_t j = 0; j < c_list[i].size(); j++) { // rows + // std::cout << i << ", " << j << ": " << c_list[i][j] << "\n"; + assignment.constant(component.C(i), j) = c_list[i][j]; + } + } + + // std::cout << "Gates amount = " << bp.num_gates() << "\n"; + // std::cout << "Lookup gates amount = " << bp.num_lookup_gates() << "\n"; + return typename plonk_l1_wrapper::result_type(); + } + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/micro_range_check.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/micro_range_check.hpp new file mode 100644 index 0000000000..7e78d4ef12 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/micro_range_check.hpp @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK BBF is_zero component class +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_PLONK_BBF_MICRO_RANGE_CHECK_COMPONENT_HPP +#define CRYPTO3_BLUEPRINT_PLONK_BBF_MICRO_RANGE_CHECK_COMPONENT_HPP + +#include + +#include + +#include +#include +#include + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + struct mrc_raw_input { + using TYPE = typename FieldType::value_type; + + TYPE X; + }; + + template + class micro_range_check : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + using typename generic_component::table_params; + using raw_input_type = typename std::conditional,std::tuple<>>::type; + + TYPE input; + + static table_params get_minimal_requirements() { + // W, PI, C, rows = 4096-1 so that lookup table is not too hard to fit and padding doesn't inflate the table + return {1,0,0,4095}; + } + + static std::tuple form_input(context_type &context_object, raw_input_type raw_input) { + TYPE X; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + X = raw_input.X; + } + context_object.allocate(X,0,0,column_type::public_input); + return std::make_tuple(X); + } + + micro_range_check(context_type &context_object, TYPE input_x, bool make_links = true) : + generic_component(context_object) { + + TYPE X; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + X = input_x; + } + + allocate(X); + + if (make_links) { + copy_constrain(X,input_x); + } + lookup(X,"chunk_16_bits/full"); + input = X; + } + }; + + } // namespace bbf + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_PLONK_BBF_MICRO_RANGE_CHECK_COMPONENT_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/opcode_poc.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/opcode_poc.hpp new file mode 100644 index 0000000000..ce7520083f --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/opcode_poc.hpp @@ -0,0 +1,177 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK BBF opcode_poc component class +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class dummy_block: public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::constrain; + public: + using typename generic_component::TYPE; + std::size_t block_size; + dummy_block(context_type &context_object, std::size_t _block_size): + generic_component(context_object) + { + block_size = _block_size; + std::vector A(block_size); + for( std::size_t i = 0; i < block_size; i++){ + if( stage == GenerationStage::ASSIGNMENT ){ + A[i] = i; +// std::cout << "\t" << i << std::endl; + } + allocate(A[i], 0, i); + constrain(A[i] - i); + } + } + }; + + template + struct opcode_poc_raw_input { + using TYPE = typename FieldType::value_type; + + std::vector B; + }; + + template + class opcode_poc : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::constrain; + + public: + using typename generic_component::TYPE; + using typename generic_component::table_params; + using raw_input_type = typename std::conditional,std::tuple<>>::type; + using input_type = typename std::conditional, std::nullptr_t>::type; + public: + static nil::crypto3::zk::snark::plonk_table_description get_table_description(std::size_t max_rows_amount){ + nil::crypto3::zk::snark::plonk_table_description desc(11, 1, 0, 10); + desc.usable_rows_amount = max_rows_amount; + return desc; + } + + static table_params get_minimal_requirements(std::size_t max_rows_amount) { + return {11,1,0,max_rows_amount}; + } + + static std::tuple form_input(context_type &context_object, raw_input_type raw_input) { + input_type res; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + res = raw_input.B; + } + return std::make_tuple(res); + } + + opcode_poc(context_type &context_object, const input_type &input, std::size_t max_rows) : + generic_component(context_object) { + + std::vector block_list; + std::vector> block_selector(max_rows); + std::vector> block_row_selector(max_rows); + std::array, std::vector>, 5> block_constraints; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + std::cout << "Opcode POC assignment" << std::endl; + block_list = input; + std::size_t current_row = 0; + for( std::size_t i = 0; i < block_list.size(); i++){ + for( std::size_t j = 0; j < block_list[i];j++, current_row++ ){ + block_selector[current_row][block_list[i] - 1] = 1; + block_row_selector[current_row][j] = 1; + } + } + } else { + std::cout << "Opcode POC constraints" << std::endl; + for( std::uint8_t i = 0; i < 5; i++){ + block_list.push_back(i+1); + } + } + + std::size_t curr_row = 0; + for( std::size_t i = 0; i < block_list.size(); i++ ){ + std::vector block_area = {0}; + context_type fresh_ct = context_object.fresh_subcontext(block_area, curr_row, curr_row + block_list[i]); + dummy_block block(fresh_ct, block_list[i]); + if constexpr (stage == GenerationStage::ASSIGNMENT) { + curr_row += block.block_size; + //std::cout << "curr_row = " << curr_row << std::endl; + } else { + block_constraints[i] = fresh_ct.get_constraints(); + // std::cout << "Block type " << i << std::endl; + // for( auto &constr_list: block_constraints[i]){ + // for( auto &constr: constr_list.first){ + // std::cout << "\t" << constr << ": "; + // for( auto row: constr_list.second){ + // std::cout << row << " "; + // } + // std::cout << std::endl; + // } + // } + } + } + for( std::size_t i = 0; i < max_rows-1; i++){ + for( std::size_t j = 0; j < 5; j++ ){ + allocate(block_selector[i][j], j+1, i); + allocate(block_row_selector[i][j], j+6, i); + } + for( std::size_t block_type = 0; block_type < 5; block_type++ ){ + for( std::size_t block_row = 0; block_row < block_type + 1; block_row ++){ + if constexpr (stage == GenerationStage::CONSTRAINTS) { + TYPE pair_selector = block_selector[i][block_type] * block_row_selector[i][block_row]; + //std::cout << "Pair_selector = " << pair_selector << std::endl; + TYPE pair_selector_relative = context_object.relativize(pair_selector, -i); + //std::cout << "Pair_selector_relative = " << pair_selector_relative << std::endl; + for( auto & constr_list: block_constraints[block_type] ){ + if( !constr_list.first.is_set(block_row) ) continue; + for( auto &constr: constr_list.second ){ + //std::cout << pair_selector_relative * constr << std::endl; + context_object.relative_constrain(pair_selector_relative * constr, i); + } + } + } + } + } + } + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp index 0a3e2b50e5..0f301283a6 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/row_selector.hpp @@ -48,11 +48,19 @@ namespace nil { } void set_row(std::size_t row) { - if (row < used_rows_.size()) { + if (row < max_index()) { used_rows_[row] = true; } } + void set_interval(std::size_t start_row, std::size_t end_row) { + BOOST_ASSERT( end_row < used_rows_.size()); + BOOST_ASSERT( start_row < end_row ); + if (start_row < end_row && end_row < used_rows_.size()) { + used_rows_.set(start_row, end_row-start_row + 1, true); + } + } + bool is_set(std::size_t row) const { return used_rows_.at(row); } @@ -61,6 +69,10 @@ namespace nil { return used_rows_ == other.used_rows_; } + bool operator[](size_t row) const { + return used_rows_.at(row); + } + // Iterator class class const_iterator { public: @@ -69,16 +81,20 @@ namespace nil { using pointer = value_type*; using reference = value_type&; using iterator_category = std::forward_iterator_tag; - + const_iterator(const BitSet& v, size_t pos) - : bitset(v), index(bitset.find_next(pos)) { + : bitset(v) { + if (pos < bitset.size() && bitset[pos]) + index = pos; + else + index = bitset.find_next(pos); } - + // Dereference operator returns the current index size_t operator*() const { return index; } - + // Increment operator const_iterator& operator++() { index = bitset.find_next(index); @@ -89,7 +105,7 @@ namespace nil { bool operator==(const const_iterator& other) const { return index == other.index; } - + bool operator!=(const const_iterator& other) const { return index != other.index; } @@ -98,12 +114,12 @@ namespace nil { const BitSet& bitset; // Reference to the underlying bitset. size_t index; // Current index }; - + // Begin and end functions returning custom const_iterators const_iterator begin() const { return const_iterator(used_rows_, 0); } - + const_iterator end() const { return const_iterator(used_rows_, used_rows_.size()); } @@ -113,6 +129,11 @@ namespace nil { return used_rows_.count(); } + // This one is the maximal allowed index, I.E. the actual size. + std::size_t max_index() const { + return used_rows_.size(); + } + bool empty() const { return used_rows_.none(); } @@ -132,16 +153,30 @@ namespace nil { this->used_rows_ |= other_copy.used_rows_; } else { this->used_rows_ |= other.used_rows_; - } + } return *this; }*/ + + row_selector& operator<<=(size_t bitcount) { + used_rows_ <<= bitcount; + return *this; + } + + row_selector& operator>>=(size_t bitcount) { + used_rows_ >>= bitcount; + return *this; + } + template friend std::size_t hash_value(const row_selector& a); + template + friend std::ostream& operator<<(std::ostream& os, const row_selector& rows); + private: // Contains true if selector is enabled for the given row. - BitSet used_rows_; + BitSet used_rows_; }; template @@ -149,6 +184,15 @@ namespace nil { return hash_value(bitset.used_rows_); } + template + std::ostream& operator<<(std::ostream& os, const row_selector& rows) { + // NOTE: os << rows.used_rows_ prints in the reversed order, which is harder to read. + for (size_t i = 0; i < rows.used_rows_.size(); i++) { + os << rows.used_rows_[i]; + } + return os; + } + } // namespace bbf } // namespace blueprint } // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/bbf/tester.hpp b/crypto3/libs/blueprint/include/nil/blueprint/bbf/tester.hpp new file mode 100644 index 0000000000..15dc7cb427 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/bbf/tester.hpp @@ -0,0 +1,133 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK BBF bbf_tester class +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_PLONK_BBF_TESTER_COMPONENT_HPP +#define CRYPTO3_BLUEPRINT_PLONK_BBF_TESTER_COMPONENT_HPP + +#include + +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include + + +namespace nil { + namespace blueprint { + namespace bbf { + template + struct bbf_tester_raw_input { + using TYPE = typename FieldType::value_type; + + TYPE X, Q; + std::array CX; + std::array CY; + }; + + template + class bbf_tester : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + using typename generic_component::table_params; + using raw_input_type = typename std::conditional,std::tuple<>>::type; + + TYPE input; + TYPE res; + + static table_params get_minimal_requirements() { + return {13,0,1,8191}; // W, PI, C, rows (so many rows, because carry_on_addition has a built-in range check + } + + static std::tuple, std::array> + form_input(context_type &context_object, raw_input_type raw_input) { + TYPE X, Q; + std::array CX; + std::array CY; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + X = raw_input.X; + Q = raw_input.Q; + std::copy(std::begin(raw_input.CX), std::end(raw_input.CX), std::begin(CX)); + std::copy(std::begin(raw_input.CY), std::end(raw_input.CY), std::begin(CY)); + } + context_object.allocate(X,0,0,column_type::public_input); + context_object.allocate(Q,0,1,column_type::public_input); + for(std::size_t i = 0; i < 3; i++) { + context_object.allocate(CX[i],0,2+i,column_type::public_input); + context_object.allocate(CY[i],0,5+i,column_type::public_input); + } + return std::make_tuple(X,Q,CX,CY); + } + + bbf_tester(context_type &context_object, + TYPE X, TYPE Q, std::array CX, std::array CY, + bool make_links = true) : + generic_component(context_object) { + + using Is_Zero = is_zero; + using Choice_Function = choice_function; + using Carry_On_Addition = carry_on_addition; + using Useless = useless; + + TYPE const_test = 5; + allocate(const_test,0,0,column_type::constant); + + Is_Zero(context_object, X, make_links); // make_links delegated to subcomponent + + std::vector ct2_area = {2,3,4,5}; + context_type ct2 = context_object.subcontext(ct2_area,0,4); + auto c2 = Choice_Function(ct2,Q,CX,CY, make_links); // make_links delegated to subcomponent + + std::vector ct3_area = {7,8,9,10,11}; + context_type ct3 = context_object.subcontext(ct3_area,0,4); + auto c3 = Carry_On_Addition(ct3, CX, CY, make_links); + + std::vector ct4_area = {12}; + context_type ct4 = context_object.subcontext(ct4_area,1,4); + auto c4 = Useless(ct4); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_PLONK_BBF_TESTER_COMPONENT_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment.hpp b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment.hpp index ff71bf68c1..38155f6105 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment.hpp @@ -332,20 +332,20 @@ namespace nil { virtual value_type &selector(std::size_t selector_index, std::uint32_t row_index) { - assert(selector_index < this->_public_table._selectors.size()); + assert(selector_index < this->_public_table->_selectors.size()); - if (this->_public_table._selectors[selector_index].size() <= row_index) - this->_public_table._selectors[selector_index].resize(row_index + 1); + if (this->_public_table->_selectors[selector_index].size() <= row_index) + this->_public_table->_selectors[selector_index].resize(row_index + 1); - return this->_public_table._selectors[selector_index][row_index]; + return this->_public_table->_selectors[selector_index][row_index]; } virtual value_type selector(std::size_t selector_index, std::uint32_t row_index) const { - assert(selector_index < this->_public_table._selectors.size()); - assert(row_index < this->_public_table._selectors[selector_index].size()); + assert(selector_index < this->_public_table->_selectors.size()); + assert(row_index < this->_public_table->_selectors[selector_index].size()); - return this->_public_table._selectors[selector_index][row_index]; + return this->_public_table->_selectors[selector_index][row_index]; } virtual const column_type& selector(std::uint32_t index) const { @@ -425,22 +425,22 @@ namespace nil { virtual value_type &witness(std::uint32_t witness_index, std::uint32_t row_index) { BLUEPRINT_ASSERT(witness_index < this->_private_table._witnesses.size()); - if (this->_private_table._witnesses[witness_index].size() <= row_index) - this->_private_table._witnesses[witness_index].resize(row_index + 1); + if (this->_private_table->_witnesses[witness_index].size() <= row_index) + this->_private_table->_witnesses[witness_index].resize(row_index + 1); assignment_allocated_rows = std::max(assignment_allocated_rows, row_index + 1); - return this->_private_table._witnesses[witness_index][row_index]; + return this->_private_table->_witnesses[witness_index][row_index]; } virtual value_type witness(std::uint32_t witness_index, std::uint32_t row_index) const { - BLUEPRINT_RELEASE_ASSERT(witness_index < this->_private_table._witnesses.size()); - BLUEPRINT_RELEASE_ASSERT(row_index < this->_private_table._witnesses[witness_index].size()); + BLUEPRINT_RELEASE_ASSERT(witness_index < this->_private_table->_witnesses.size()); + BLUEPRINT_RELEASE_ASSERT(row_index < this->_private_table->_witnesses[witness_index].size()); - return this->_private_table._witnesses[witness_index][row_index]; + return this->_private_table->_witnesses[witness_index][row_index]; } virtual std::uint32_t witness_column_size(std::uint32_t col_idx) const { - return this->_private_table.witness_column_size(col_idx); + return this->_private_table->witness_column_size(col_idx); } virtual std::uint32_t witnesses_amount() const { @@ -457,9 +457,9 @@ namespace nil { BLUEPRINT_ASSERT(public_input_index < zk_type::public_inputs_amount()); if (zk_type::public_input_column_size(public_input_index) <= row_index) - this->_public_table._public_inputs[public_input_index].resize(row_index + 1); + this->_public_table->_public_inputs[public_input_index].resize(row_index + 1); - return this->_public_table._public_inputs[public_input_index][row_index]; + return this->_public_table->_public_inputs[public_input_index][row_index]; } virtual value_type public_input( @@ -472,7 +472,7 @@ namespace nil { } virtual std::uint32_t public_input_column_size(std::uint32_t col_idx) const { - return this->_public_table.public_input_column_size(col_idx); + return this->_public_table->public_input_column_size(col_idx); } virtual std::uint32_t public_inputs_amount() const { @@ -489,10 +489,10 @@ namespace nil { BLUEPRINT_ASSERT(constant_index < zk_type::constants_amount()); if (zk_type::constant_column_size(constant_index) <= row_index) - this->_public_table._constants[constant_index].resize(row_index + 1); + this->_public_table->_constants[constant_index].resize(row_index + 1); assignment_allocated_rows = std::max(assignment_allocated_rows, row_index + 1); - return this->_public_table._constants[constant_index][row_index]; + return this->_public_table->_constants[constant_index][row_index]; } virtual value_type constant( @@ -522,7 +522,7 @@ namespace nil { } virtual std::uint32_t constant_column_size(std::uint32_t col_idx) const { - return this->_public_table.constant_column_size(col_idx); + return this->_public_table->constant_column_size(col_idx); } virtual std::uint32_t constants_amount() const { @@ -599,9 +599,9 @@ namespace nil { /// @brief Max size of witness columns. std::uint32_t max_witnesses_size() const { std::uint32_t size = 0; - std::size_t ammount = this->_private_table.witnesses_amount(); + std::size_t ammount = this->_private_table->witnesses_amount(); for (std::uint32_t i = 0; i < ammount; i++) { - size = std::max(size, this->_private_table.witness_column_size(i)); + size = std::max(size, this->_private_table->witness_column_size(i)); } return size; } @@ -609,9 +609,9 @@ namespace nil { /// @brief Max size of public input columns. std::uint32_t max_public_inputs_size() const { std::uint32_t size = 0; - std::size_t ammount = this->_public_table.public_inputs_amount(); + std::size_t ammount = this->_public_table->public_inputs_amount(); for (std::uint32_t i = 0; i < ammount; i++) { - size = std::max(size, this->_public_table.public_input_column_size(i)); + size = std::max(size, this->_public_table->public_input_column_size(i)); } return size; } @@ -619,9 +619,9 @@ namespace nil { /// @brief Max size of constant columns. std::uint32_t max_constants_size() const { std::uint32_t size = 0; - std::size_t ammount = this->_public_table.constants_amount(); + std::size_t ammount = this->_public_table->constants_amount(); for (std::uint32_t i = 0; i < ammount; i++) { - size = std::max(size, this->_public_table.constant_column_size(i)); + size = std::max(size, this->_public_table->constant_column_size(i)); } return size; } @@ -629,9 +629,9 @@ namespace nil { /// @brief Max size of selector columns. std::uint32_t max_selectors_size() const { std::uint32_t size = 0; - std::size_t ammount = this->_public_table.selectors_amount(); + std::size_t ammount = this->_public_table->selectors_amount(); for (std::uint32_t i = 0; i < ammount; i++) { - size = std::max(size, this->_public_table.selector_column_size(i)); + size = std::max(size, this->_public_table->selector_column_size(i)); } return size; } @@ -642,11 +642,12 @@ namespace nil { {max_witnesses_size(), max_public_inputs_size(), max_constants_size(), max_selectors_size()}); } + // todo delete this impl as soon as old zkevm is removed virtual void export_table(std::ostream &os, bool wide_export = false) const { - std::size_t witnesses_size = this->_private_table.witnesses_amount(), - public_size = this->_public_table.public_inputs_amount(), - constants_size = this->_public_table.constants_amount(), - selectors_size = this->_public_table.selectors_amount(); + std::size_t witnesses_size = this->_private_table->witnesses_amount(), + public_size = this->_public_table->public_inputs_amount(), + constants_size = this->_public_table->constants_amount(), + selectors_size = this->_public_table->selectors_amount(); std::uint32_t size = this->max_size(); ranges rows; @@ -680,10 +681,10 @@ namespace nil { ranges selectors, ranges rows, bool wide_export = false) const { // wide_export is for e.g. potentiall fuzzer: does fixed width elements std::ios_base::fmtflags os_flags(os.flags()); - std::size_t total_witnesses_size = this->_private_table.witnesses_amount(), - total_public_size = this->_public_table.public_inputs_amount(), - total_constants_size = this->_public_table.constants_amount(), - total_selectors_size = this->_public_table.selectors_amount(); + std::size_t total_witnesses_size = this->_private_table->witnesses_amount(), + total_public_size = this->_public_table->public_inputs_amount(), + total_constants_size = this->_public_table->constants_amount(), + total_selectors_size = this->_public_table->selectors_amount(); std::uint32_t total_size = this->max_size(); os << std::dec; @@ -702,8 +703,8 @@ namespace nil { for (auto [lower_witness, upper_witness] : witnesses) { for (std::uint32_t j = lower_witness; j <= upper_witness; j++) { os << std::setw(width) - << (i < this->_private_table.witness_column_size(j) ? - this->_private_table.witness(j)[i] : + << (i < this->_private_table->witness_column_size(j) ? + this->_private_table->witness(j)[i] : 0) .data << " "; @@ -713,8 +714,8 @@ namespace nil { for (auto [lower_public_input, upper_public_input] : public_inputs) { for (std::uint32_t j = lower_public_input; j <= upper_public_input; j++) { os << std::setw(width) - << (i < this->_public_table.public_input_column_size(j) ? - this->_public_table.public_input(j)[i] : + << (i < this->_public_table->public_input_column_size(j) ? + this->_public_table->public_input(j)[i] : 0) .data << " "; @@ -724,8 +725,8 @@ namespace nil { for (auto [lower_constant, upper_constant] : constants) { for (std::uint32_t j = lower_constant; j <= upper_constant; j++) { os << std::setw(width) - << (i < this->_public_table.constant_column_size(j) ? - this->_public_table.constant(j)[i] : + << (i < this->_public_table->constant_column_size(j) ? + this->_public_table->constant(j)[i] : 0) .data << " "; @@ -735,8 +736,8 @@ namespace nil { for (auto [lower_selector, upper_selector] : selectors) { // Selectors only need a single bit, so we do not renew the size here for (std::uint32_t j = lower_selector; j <= upper_selector; j++) { - os << (i < this->_public_table.selector_column_size(j) ? - this->_public_table.selector(j)[i] : + os << (i < this->_public_table->selector_column_size(j) ? + this->_public_table->selector(j)[i] : 0) .data << " "; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment_proxy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment_proxy.hpp index 0f26a6519f..7f96b284c7 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment_proxy.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/assignment_proxy.hpp @@ -92,6 +92,11 @@ namespace nil { return used_selector_rows; } + void make_all_rows_used() { + for (std::uint32_t i = 0; i < rows_amount(); ++i) { + used_rows.insert(i); + } + } std::uint32_t rows_amount() const override { return assignment_ptr->rows_amount(); } diff --git a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit.hpp b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit.hpp index 35ff302e00..3739d8b742 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit.hpp @@ -165,16 +165,14 @@ namespace nil { // Sometimes we want to connect new constraints to existing selector // Use only with deep understanding - virtual std::size_t add_gate(std::size_t selector_id, const std::vector &args) { + virtual void add_gate(std::size_t selector_id, const std::vector &args) { this->_gates.push_back({selector_id, args}); - return selector_id; } // Sometimes existing gate is already on existing selector // and we are sure that lookup and usual part are always together - virtual std::size_t add_lookup_gate(std::size_t selector_id, const std::vector &args) { + virtual void add_lookup_gate(std::size_t selector_id, const std::vector &args) { this->_lookup_gates.push_back({selector_id, args}); - return selector_id; } virtual const typename ArithmetizationType::lookup_table_type &lookup_table(std::size_t table_id) const { diff --git a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit_proxy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit_proxy.hpp index 5373578b18..df62c6ad6c 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit_proxy.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/blueprint/plonk/circuit_proxy.hpp @@ -73,7 +73,20 @@ namespace nil { circuit_proxy(std::shared_ptr> circuit, std::uint32_t _id) : circuit_ptr(circuit), - id(_id) {} + id(_id) { + for (std::uint32_t i = 0; i < circuit->num_gates(); ++i) + used_gates.insert(i); +std::cout << "In constructor of circuit_proxy adding " << circuit->num_gates() << " gates" << std::endl; + for (std::uint32_t i = 0; i < circuit->num_lookup_gates(); ++i) + used_lookup_gates.insert(i); +std::cout << "In constructor of circuit_proxy adding " << circuit->num_lookup_gates() << " lookup gates" << std::endl; + for (std::uint32_t i = 0; i < circuit->lookup_tables().size(); ++i) + used_lookup_tables.insert(i); +std::cout << "In constructor of circuit_proxy adding " << circuit->lookup_tables().size() << " lookup tables" << std::endl; + for (std::uint32_t i = 0; i < circuit->copy_constraints().size(); ++i) + used_copy_constraints.insert(i); +std::cout << "In constructor of circuit_proxy adding " << circuit->copy_constraints().size() << " copy constraints" << std::endl; + } circuit_proxy() = delete; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/complete_addition.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/complete_addition.hpp index 9fbeaf5f26..c6e50b3fd3 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/complete_addition.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/complete_addition.hpp @@ -604,7 +604,7 @@ namespace nil { typename Ed25519Type::base_field_type::integral_type d = typename Ed25519Type::base_field_type::integral_type( - 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3_cppui_modular256); + 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3_big_uint256); assignment.constant(component.C(0), row + 4) = d & mask; assignment.constant(component.C(0), row + 5) = (d >> 66) & mask; assignment.constant(component.C(0), row + 6) = (d >> 132) & mask; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/ec_point.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/ec_point.hpp index 7e882268ce..f8cf361ff9 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/ec_point.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/edwards/plonk/non_native/ec_point.hpp @@ -116,10 +116,10 @@ namespace nil { typename Ed25519Type::scalar_field_type::integral_type base = 1; typename Ed25519Type::scalar_field_type::integral_type mask = (base << 66) - 1; - typename Ed25519Type::base_field_type::integral_type a_coef_val = typename Ed25519Type::base_field_type::integral_type(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec_cppui_modular255); + typename Ed25519Type::base_field_type::integral_type a_coef_val = typename Ed25519Type::base_field_type::integral_type(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec_big_uint255); std::array a_coef = {a_coef_val & mask, (a_coef_val >>66) & mask, (a_coef_val >>132) & mask, (a_coef_val >>198) & mask}; - typename Ed25519Type::base_field_type::integral_type d_coef_val = typename Ed25519Type::base_field_type::integral_type(0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3_cppui_modular255); + typename Ed25519Type::base_field_type::integral_type d_coef_val = typename Ed25519Type::base_field_type::integral_type(0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3_big_uint255); std::array d_coef = {d_coef_val & mask, (d_coef_val >>66) & mask, (d_coef_val >>132) & mask, (d_coef_val >>198) & mask}; for (int i = 0; i < 4; i++) { diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/endo_scalar.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/endo_scalar.hpp index 3599481438..cdc290a8c9 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/endo_scalar.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/endo_scalar.hpp @@ -65,9 +65,9 @@ namespace nil { using scalar_field_type = typename curve_type::scalar_field_type; using base_field_type = typename curve_type::base_field_type; constexpr static const typename scalar_field_type::value_type endo_r = - 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular255; + 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_big_uint255; constexpr static const typename base_field_type::value_type endo_q = - 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_cppui_modular255; + 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_big_uint255; }; template<> @@ -76,9 +76,9 @@ namespace nil { using scalar_field_type = typename curve_type::scalar_field_type; using base_field_type = typename curve_type::base_field_type; constexpr static const typename scalar_field_type::value_type endo_r = - 0x397E65A7D7C1AD71AEE24B27E308F0A61259527EC1D4752E619D1840AF55F1B1_cppui_modular255; + 0x397E65A7D7C1AD71AEE24B27E308F0A61259527EC1D4752E619D1840AF55F1B1_big_uint255; constexpr static const typename base_field_type::value_type endo_q = - 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_cppui_modular255; + 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_big_uint255; }; template @@ -214,11 +214,11 @@ namespace nil { typename BlueprintFieldType::integral_type(scalar.data); std::vector bits_msb(component.scalar_size); { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; assert(component.scalar_size <= BlueprintFieldType::modulus_bits); std::array bits_msb_all = - nil::marshalling::pack(integral_scalar, status); + nil::crypto3::marshalling::pack(integral_scalar, status); THROW_IF_ERROR_STATUS(status, "plonk_endo_scalar::generate_assignments"); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/fixed_base_scalar_mul_9_wires.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/fixed_base_scalar_mul_9_wires.hpp index 6c4a1a7946..f670c7f8f0 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/fixed_base_scalar_mul_9_wires.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/fixed_base_scalar_mul_9_wires.hpp @@ -249,7 +249,7 @@ namespace nil { std::size_t component_start_row) { std::array b = - nil::marshalling::pack(params.s); + nil::crypto3::marshalling::pack(params.s); private_assignment.witness(W1)[j] = b[0]; private_assignment.witness(W2)[j] = b[1]; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_endo_scalar_mul_15_wires.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_endo_scalar_mul_15_wires.hpp index 5c747bd05e..bb87c186e6 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_endo_scalar_mul_15_wires.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_endo_scalar_mul_15_wires.hpp @@ -174,9 +174,9 @@ namespace nil { std::array bits = {false}; { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bits_all = - nil::marshalling::pack(integral_b, status); + nil::crypto3::marshalling::pack(integral_b, status); THROW_IF_ERROR_STATUS(status, "curve_element_variable_base_endo_scalar_mul::generate_assignments"); std::copy(bits_all.end() - 128, bits_all.end(), bits.begin()); } diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_scalar_mul.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_scalar_mul.hpp index fb3a397473..f7663c34f6 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_scalar_mul.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/curves/pasta/plonk/variable_base_scalar_mul.hpp @@ -85,18 +85,18 @@ namespace nil { struct variable_base_scalar_mul_shifted_consts { using FieldType = nil::crypto3::algebra::fields::pallas_base_field; - constexpr static const typename FieldType::value_type shifted_minus_one = 0x224698fc0994a8dd8c46eb2100000000_cppui_modular255; - constexpr static const typename FieldType::value_type shifted_zero = 0x200000000000000000000000000000003369e57a0e5efd4c526a60b180000001_cppui_modular255; - constexpr static const typename FieldType::value_type shifted_one = 0x224698fc0994a8dd8c46eb2100000001_cppui_modular255; + constexpr static const typename FieldType::value_type shifted_minus_one = 0x224698fc0994a8dd8c46eb2100000000_big_uint255; + constexpr static const typename FieldType::value_type shifted_zero = 0x200000000000000000000000000000003369e57a0e5efd4c526a60b180000001_big_uint255; + constexpr static const typename FieldType::value_type shifted_one = 0x224698fc0994a8dd8c46eb2100000001_big_uint255; }; template<> struct variable_base_scalar_mul_shifted_consts { using FieldType = nil::crypto3::algebra::fields::vesta_base_field; - constexpr static const typename FieldType::value_type shifted_minus_one = 0x448d31f81299f237325a61da00000001_cppui_modular255; - constexpr static const typename FieldType::value_type shifted_zero = 0x448d31f81299f237325a61da00000002_cppui_modular255; - constexpr static const typename FieldType::value_type shifted_one = 0x448d31f81299f237325a61da00000003_cppui_modular255; + constexpr static const typename FieldType::value_type shifted_minus_one = 0x448d31f81299f237325a61da00000001_big_uint255; + constexpr static const typename FieldType::value_type shifted_zero = 0x448d31f81299f237325a61da00000002_big_uint255; + constexpr static const typename FieldType::value_type shifted_one = 0x448d31f81299f237325a61da00000003_big_uint255; }; //////////////////////////////// @@ -156,8 +156,8 @@ namespace nil { constexpr static const typename BlueprintFieldType::value_type shifted_zero = variable_base_scalar_mul_shifted_consts::shifted_zero; constexpr static const typename BlueprintFieldType::value_type shifted_one = variable_base_scalar_mul_shifted_consts::shifted_one; - constexpr static const typename BlueprintFieldType::value_type t_q = 0x224698fc0994a8dd8c46eb2100000001_cppui_modular255; // q = 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001_cppui_modular255 = 2**254 + t_q - constexpr static const typename BlueprintFieldType::value_type t_p = 0x224698fc094cf91b992d30ed00000001_cppui_modular255; // p = 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_cppui_modular255 = 2**254 + t_p (q > p) + constexpr static const typename BlueprintFieldType::value_type t_q = 0x224698fc0994a8dd8c46eb2100000001_big_uint255; // q = 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001_big_uint255 = 2**254 + t_q + constexpr static const typename BlueprintFieldType::value_type t_p = 0x224698fc094cf91b992d30ed00000001_big_uint255; // p = 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_big_uint255 = 2**254 + t_p (q > p) constexpr static const typename BlueprintFieldType::value_type two = 2; struct input_type { @@ -245,9 +245,9 @@ namespace nil { typename CurveType::scalar_field_type::integral_type integral_b = typename CurveType::scalar_field_type::integral_type(b.data); const std::size_t scalar_size = 255; - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bits = - nil::marshalling::pack(integral_b, status); + nil::crypto3::marshalling::pack(integral_b, status); THROW_IF_ERROR_STATUS(status, "curve_element_variable_base_scalar_mul::generate_assignments"); typename BlueprintFieldType::value_type z_n2; @@ -267,7 +267,7 @@ namespace nil { typename CurveType::scalar_field_type::integral_type(aux.data); const std::size_t base_size = 255; std::array aux_bits = - nil::marshalling::pack(integral_aux, status); + nil::crypto3::marshalling::pack(integral_aux, status); THROW_IF_ERROR_STATUS(status, "curve_element_variable_base_scalar_mul::generate_assignments"); typename BlueprintFieldType::value_type n = 0; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/exponentiation.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/exponentiation.hpp index 35584b4997..2b90222e28 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/exponentiation.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/exponentiation.hpp @@ -212,7 +212,7 @@ namespace nil { std::vector bits(component.padded_exponent_size, false); { std::vector bbb; - auto data = exponent.data; + auto data = exponent.data.base(); while (data != 0u) { bbb.push_back((data - (data >> 1u << 1u)) != 0u); data = data >> 1u; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp index 7bff2448b4..66e3a93b25 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/bit_decomposition.hpp @@ -190,9 +190,9 @@ namespace nil { }; std::vector bits(bits_amount); { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bytes_all = - nil::marshalling::pack(input, status); + nil::crypto3::marshalling::pack(input, status); THROW_IF_ERROR_STATUS(status, "bit_decomposition::calculate"); std::copy(bytes_all.end() - bits_amount, bytes_all.end(), bits.begin()); } @@ -221,9 +221,9 @@ namespace nil { std::vector input_bits(component.bits_amount); { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bytes_all = - nil::marshalling::pack( + nil::crypto3::marshalling::pack( var_value(assignment, instance_input.input), status); THROW_IF_ERROR_STATUS(status, "bit_decomposition::generate_assignments"); std::copy(bytes_all.end() - component.bits_amount, bytes_all.end(), input_bits.begin()); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp index dd6af53221..da28dc68e2 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_checked.hpp @@ -494,9 +494,9 @@ namespace nil { bits[i].resize(component.bits_amount + component.padding_bits); std::fill(bits[i].begin(), bits[i].end(), false); - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bytes_all = - nil::marshalling::pack(integrals[i], status); + nil::crypto3::marshalling::pack(integrals[i], status); THROW_IF_ERROR_STATUS(status, "comparison_checked::generate_assignments"); std::copy(bytes_all.end() - component.bits_amount, bytes_all.end(), bits[i].begin() + component.padding_bits); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp index e4c9d32371..63be0da4e9 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/comparison_flag.hpp @@ -311,9 +311,9 @@ namespace nil { std::fill(bits[i].begin(), bits[i].end(), false); bits[i].resize(arg_bits_amount + padding_bits); - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bytes_all = - nil::marshalling::pack(integrals[i], status); + nil::crypto3::marshalling::pack(integrals[i], status); THROW_IF_ERROR_STATUS(status, "comparison_flag::calculate"); std::copy(bytes_all.end() - arg_bits_amount, bytes_all.end(), @@ -468,9 +468,9 @@ namespace nil { std::fill(bits[i].begin(), bits[i].end(), false); bits[i].resize(component.bits_amount + component.padding_bits); - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bytes_all = - nil::marshalling::pack(integrals[i], status); + nil::crypto3::marshalling::pack(integrals[i], status); THROW_IF_ERROR_STATUS(status, "comparison_flag::generate_assignments"); std::copy(bytes_all.end() - component.bits_amount, bytes_all.end(), bits[i].begin() + component.padding_bits); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/reduction.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/reduction.hpp index 0f06591487..4762affb88 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/reduction.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/non_native/reduction.hpp @@ -162,14 +162,14 @@ namespace nil { typename ArithmetizationType::field_type::integral_type( var_value(assignment, instance_input.k[7]).data)}; - auto L = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_cppui_modular512; - auto k = 0x00_cppui_modular512; - auto shft = 0x01_cppui_modular512; + auto L = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_big_uint512; + auto k = 0x00_big_uint512; + auto shft = 0x01_big_uint512; for (std::size_t i = 0; i < 8; i++) { assignment.witness(component.W(i), row + 3) = data[i]; k = k + data[i] * (shft % L); - shft *= 0x10000000000000000_cppui_modular512; + shft *= 0x10000000000000000_big_uint512; } auto r = k % L; @@ -256,23 +256,23 @@ namespace nil { using var = typename plonk_reduction::var; - auto L = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_cppui_modular512; + auto L = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_big_uint512; auto constraint_1 = - var(component.W(0), +1) * 0x01_cppui_modular512 + var(component.W(1), +1) * 0x10000000000000000_cppui_modular512 + - var(component.W(2), +1) * 0x100000000000000000000000000000000_cppui_modular512 + - var(component.W(3), +1) * 0x1000000000000000000000000000000000000000000000000_cppui_modular512 + + var(component.W(0), +1) * 0x01_big_uint512 + var(component.W(1), +1) * 0x10000000000000000_big_uint512 + + var(component.W(2), +1) * 0x100000000000000000000000000000000_big_uint512 + + var(component.W(3), +1) * 0x1000000000000000000000000000000000000000000000000_big_uint512 + var(component.W(4), +1) * - 0xffffffffffffffffffffffffffffffec6ef5bf4737dcf70d6ec31748d98951d_cppui_modular512 + + 0xffffffffffffffffffffffffffffffec6ef5bf4737dcf70d6ec31748d98951d_big_uint512 + var(component.W(5), +1) * - 0xffffffffffffffeb2106215d086329a93b8c838d39a5e065812631a5cf5d3ed_cppui_modular512 + + 0xffffffffffffffeb2106215d086329a93b8c838d39a5e065812631a5cf5d3ed_big_uint512 + var(component.W(6), +1) * - 0x2106215d086329a7ed9ce5a30a2c131b64a7f435e4fdd9539822129a02a6271_cppui_modular512 + + 0x2106215d086329a7ed9ce5a30a2c131b64a7f435e4fdd9539822129a02a6271_big_uint512 + var(component.W(7), +1) * - 0xed9ce5a30a2c131b399411b7c309a3de24babbe38d1d7a979daf520a00acb65_cppui_modular512 - + 0xed9ce5a30a2c131b399411b7c309a3de24babbe38d1d7a979daf520a00acb65_big_uint512 - var(component.W(4), -1) - - (var(component.W(0), 0) * 0x800000000000_cppui_modular512 + var(component.W(1), 0) * 0x8000000_cppui_modular512 + - var(component.W(2), 0) * 0x80_cppui_modular512 + var(component.W(3), 0)) * + (var(component.W(0), 0) * 0x800000000000_big_uint512 + var(component.W(1), 0) * 0x8000000_big_uint512 + + var(component.W(2), 0) * 0x80_big_uint512 + var(component.W(3), 0)) * L; auto s_r = var(component.W(0), -1) + var(component.W(1), -1) + var(component.W(2), -1) + @@ -283,18 +283,18 @@ namespace nil { auto constraint_2 = var(component.W(4), 0) - - (var(component.W(3), 0) + var(component.W(2), 0) * 0x2000_cppui_modular255 + - var(component.W(1), 0) * 0x200000000_cppui_modular255 + - var(component.W(0), 0) * 0x20000000000000_cppui_modular255 + - var(component.W(8), -1) * 0x2000000000000000000_cppui_modular255 + - var(component.W(7), -1) * 0x200000000000000000000000_cppui_modular255 + - var(component.W(6), -1) * 0x20000000000000000000000000000_cppui_modular255 + - var(component.W(5), -1) * 0x2000000000000000000000000000000000_cppui_modular255 + - var(component.W(4), -1) * 0x200000000000000000000000000000000000000_cppui_modular255 + - var(component.W(3), -1) * 0x20000000000000000000000000000000000000000000_cppui_modular255 + - var(component.W(2), -1) * 0x2000000000000000000000000000000000000000000000000_cppui_modular255 + - var(component.W(1), -1) * 0x200000000000000000000000000000000000000000000000000000_cppui_modular255 + - var(component.W(0), -1) * 0x20000000000000000000000000000000000000000000000000000000000_cppui_modular255); + (var(component.W(3), 0) + var(component.W(2), 0) * 0x2000_big_uint255 + + var(component.W(1), 0) * 0x200000000_big_uint255 + + var(component.W(0), 0) * 0x20000000000000_big_uint255 + + var(component.W(8), -1) * 0x2000000000000000000_big_uint255 + + var(component.W(7), -1) * 0x200000000000000000000000_big_uint255 + + var(component.W(6), -1) * 0x20000000000000000000000000000_big_uint255 + + var(component.W(5), -1) * 0x2000000000000000000000000000000000_big_uint255 + + var(component.W(4), -1) * 0x200000000000000000000000000000000000000_big_uint255 + + var(component.W(3), -1) * 0x20000000000000000000000000000000000000000000_big_uint255 + + var(component.W(2), -1) * 0x2000000000000000000000000000000000000000000000000_big_uint255 + + var(component.W(1), -1) * 0x200000000000000000000000000000000000000000000000000000_big_uint255 + + var(component.W(0), -1) * 0x20000000000000000000000000000000000000000000000000000000000_big_uint255); auto constraint_3 = (s_r) * ((s_r)*var(component.W(5), 0) - 1); @@ -311,8 +311,8 @@ namespace nil { var(component.W(5), +1) * (m[2] & ((one << 73) - 1)) + var(component.W(6), +1) * (m[3] & ((one << 73) - 1)) + var(component.W(7), +1) * (m[4] & ((one << 73) - 1)) + - (var(component.W(0), 0) * 0x800000000000_cppui_modular512 + var(component.W(1), 0) * 0x8000000_cppui_modular512 + - var(component.W(2), 0) * 0x80_cppui_modular512 + var(component.W(3), 0)) * + (var(component.W(0), 0) * 0x800000000000_big_uint512 + var(component.W(1), 0) * 0x8000000_big_uint512 + + var(component.W(2), 0) * 0x80_big_uint512 + var(component.W(3), 0)) * ((one << 73) - (crypto3::algebra::curves::ed25519::scalar_field_type::extended_integral_type(L) % (one << 73))) - (var(component.W(3), -1) + var(component.W(2), -1) * (one << 13) + var(component.W(1), -1) * (one << 33) + var(component.W(0), -1) * (one << 53)) - diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp index c7367b7928..aa4b4aeeb7 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/algebra/fields/plonk/range_check.hpp @@ -264,9 +264,9 @@ namespace nil { std::vector bits(component.bits_amount + component.padding_bits); std::fill(bits.begin(), bits.end(), false); { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array bytes_all = - nil::marshalling::pack(x_integral, status); + nil::crypto3::marshalling::pack(x_integral, status); THROW_IF_ERROR_STATUS(status, "range_check::generate_assignments"); std::copy(bytes_all.end() - component.bits_amount, bytes_all.end(), bits.begin() + component.padding_bits); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_component.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_component.hpp new file mode 100644 index 0000000000..3afa1583db --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_component.hpp @@ -0,0 +1,265 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_COMPONENT_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_COMPONENT_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + // Easiest configuration with single keccak_table component and single keccak_dynamic + template + class keccak_component; + + template + class keccak_component> + : public plonk_component + { + public: + using component_type = plonk_component; + using var = typename component_type::var; + using manifest_type = plonk_component_manifest; + + using table_component_type = plonk_keccak_table; + using dynamic_component_type = keccak_dynamic_component; + + table_component_type table_component; + dynamic_component_type dynamic_component; + std::size_t max_blocks; + std::size_t limit_permutation_columns; + + class gate_manifest_type : public component_gate_manifest { + public: + std::uint32_t gates_amount() const override { + return 41; + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_blocks, std::size_t limit_permutation_columns) { + gate_manifest manifest = gate_manifest(gate_manifest_type()); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param(15)), + false + ); + return manifest; + } + + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_blocks, std::size_t limit_permutation_column) { + std::cout << "Whole component rows amount = " << max_blocks + dynamic_component_type::get_rows_amount(witness_amount, max_blocks, limit_permutation_column) << std::endl; + return max_blocks + dynamic_component_type::get_rows_amount(witness_amount, max_blocks, limit_permutation_column); + } + + std::map component_lookup_tables() { + std::map lookup_tables; + lookup_tables["keccak_pack_table/extended"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/extended_swap"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_135"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_16bit"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/sparse_16bit"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_sign_bit_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize3_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize4_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize6_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_chi_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_sparse"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_table"] = 1; // DYNAMIC_TABLE + lookup_tables["sparsed_keccak_table"] = 1; // DYNAMIC_TABLE + return lookup_tables; + } + + constexpr static const std::size_t gates_amount = 0; + constexpr static const std::size_t lookup_gates_amount = 2; + std::size_t rows_amount = get_rows_amount(this->witness_amount(), max_blocks, limit_permutation_columns); + + struct input_type { + var rlc_challenge; + std::vector, + std::pair + >> input; + + std::vector> all_vars() { + std::vector> res; + res.push_back(rlc_challenge); + return res; + } + }; + + struct result_type { + result_type(const keccak_component &component, std::size_t start_row_index) { + } + + std::vector> all_vars() { + std::vector> result; + + return result; + } + }; + + template + explicit keccak_component(ContainerType witness, std::size_t _max_blocks) : + component_type(witness, {}, {}, get_manifest()), max_blocks(_max_blocks) + {}; + + template + keccak_component(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, + std::size_t _max_blocks, + std::size_t _limit_permuted_columns + ) : component_type(witness, constant, public_input, get_manifest()), max_blocks(_max_blocks), + limit_permutation_columns(_limit_permuted_columns), + table_component(witness, constant, public_input, _max_blocks), + dynamic_component(witness, constant, public_input, _max_blocks, _limit_permuted_columns) + {}; + + keccak_component( + std::initializer_list witnesses, + std::initializer_list + constants, + std::initializer_list + public_inputs, + std::size_t _max_blocks, + std::size_t _limit_permuted_columns + ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_blocks(_max_blocks), + limit_permutation_columns(_limit_permuted_columns), + table_component(witnesses, constants, public_inputs, max_blocks), + dynamic_component(witnesses, constants, public_inputs, max_blocks, _limit_permuted_columns) + {}; + }; + + template + using plonk_keccak_component = + keccak_component>; + + template + typename plonk_keccak_component::result_type generate_assignments( + const plonk_keccak_component &component, + assignment> + &assignment, + const typename plonk_keccak_component::input_type + &instance_input, + const std::uint32_t start_row_index + ) { + using component_type = plonk_keccak_component; + using value_type = typename BlueprintFieldType::value_type; + + typename component_type::table_component_type::input_type table_input; + table_input.input = instance_input.input; + table_input.rlc_challenge = instance_input.rlc_challenge; + generate_assignments(component.table_component, assignment, table_input, start_row_index); + + typename component_type::dynamic_component_type::input_type dynamic_input; + dynamic_input.input = instance_input.input; + dynamic_input.rlc_challenge = instance_input.rlc_challenge; + generate_assignments(component.dynamic_component, assignment, dynamic_input, start_row_index + component.table_component.rows_amount); + return typename component_type::result_type(component, start_row_index); + } + + template + typename plonk_keccak_component::result_type generate_circuit( + const plonk_keccak_component &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_keccak_component::input_type + &instance_input, + const std::size_t start_row_index + ) { + using component_type = plonk_keccak_component; + using var = typename component_type::var; + + typename component_type::table_component_type::input_type table_input; + table_input.input = instance_input.input; + table_input.rlc_challenge = instance_input.rlc_challenge; + generate_circuit(component.table_component, bp, assignment, table_input, start_row_index); + + typename component_type::dynamic_component_type::input_type dynamic_input; + dynamic_input.input = instance_input.input; + dynamic_input.rlc_challenge = instance_input.rlc_challenge; + generate_circuit(component.dynamic_component, bp, assignment, dynamic_input, start_row_index + component.table_component.rows_amount); + + std::size_t selector_id = bp.get_dynamic_lookup_table_selector(); + typename component_type::dynamic_component_type::keccak_map m(component.dynamic_component); + + bp.register_dynamic_table("sparsed_keccak_table"); + crypto3::zk::snark::plonk_lookup_table sparsed_table; + sparsed_table.tag_index = selector_id; + sparsed_table.columns_number = 4;// + sparsed_table.lookup_options = {{ + m.h.is_last, + m.h.RLC, + m.h.hash_hi, + m.h.hash_lo + }}; + bp.define_dynamic_table("sparsed_keccak_table", sparsed_table); + + using lookup_constraint_type = typename crypto3::zk::snark::plonk_lookup_constraint; + auto lookup_tables_indices = bp.get_reserved_indices(); + + lookup_constraint_type check = {lookup_tables_indices.at("keccak_table"),{m.h.is_last, m.h.RLC, m.h.hash_hi, m.h.hash_lo}}; + bp.add_lookup_gate(selector_id, {check}); + for( std::size_t i = 0; i < component.max_blocks; i++){ + assignment.enable_selector( + selector_id, + start_row_index + component.table_component.rows_amount + i * component.dynamic_component.block_rows_amount + ); + } + + typename component_type::table_component_type::keccak_table_map t(component.table_component); + lookup_constraint_type tcheck = {lookup_tables_indices.at("sparsed_keccak_table"),{t.is_last, t.RLC, t.hash_hi, t.hash_lo}}; + std::size_t tselector_id = bp.add_lookup_gate({tcheck}); + for( std::size_t i = 0; i < component.max_blocks; i++){ + assignment.enable_selector( + tselector_id, + start_row_index + i + ); + } + + return typename component_type::result_type(component, start_row_index); + } + } + } +} +#endif diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_dynamic.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_dynamic.hpp new file mode 100644 index 0000000000..4119101f86 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_dynamic.hpp @@ -0,0 +1,1171 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_STATIC_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_STATIC_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + template + class keccak_dynamic; + + template + class keccak_dynamic> + : public plonk_component { + public: + using component_type = plonk_component; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + using var = typename component_type::var; + + using round_component_type = + keccak_round>; + + using manifest_type = nil::blueprint::plonk_component_manifest; + class gate_manifest_type : public component_gate_manifest { + public: + static const constexpr std::size_t clamp = 15; //What is it? + std::size_t witness_amount; + std::size_t max_blocks; + std::size_t limit_permutation_column; + + gate_manifest_type(std::size_t witness_amount_, std::size_t max_blocks_, + std::size_t limit_permutation_column_) : + witness_amount(std::min(witness_amount_, clamp)), + max_blocks(max_blocks_), + limit_permutation_column(limit_permutation_column_) { + } + + std::uint32_t gates_amount() const override { + return get_gates_amount(witness_amount, max_blocks, limit_permutation_column); + } + }; + + static gate_manifest get_gate_manifest( + std::size_t witness_amount, + std::size_t max_blocks, + std::size_t limit_permutation_column + ) { + gate_manifest manifest = gate_manifest(gate_manifest_type( + witness_amount, max_blocks, limit_permutation_column)); + + //manifest.merge_with( + // round_component_type::get_gate_manifest(witness_amount, true, true, limit_permutation_column)); + // Why we don't use it? + // manifest.merge_with(round_component_type::get_gate_manifest( + // witness_amount, lookup_column_amount, true, false, limit_permutation_column)); + // manifest.merge_with(round_component_type::get_gate_manifest( + // witness_amount, lookup_column_amount, false, false, limit_permutation_column)); + + return manifest; + } + + static manifest_type get_manifest(std::size_t max_blocks, std::size_t lpc = 7) { + static manifest_type manifest = + manifest_type(std::shared_ptr(new manifest_range_param(15, 15)), false) + .merge_with(round_component_type::get_manifest(true, true, lpc)); + return manifest; + } + + const std::size_t lookup_rows = 65536; + const std::size_t witnesses = this->witness_amount(); + + const std::size_t max_blocks; + const std::size_t limit_permutation_column; + const std::size_t bytes_per_block = 136; // 17*8 + + round_component_type round_tf; + round_component_type round_ff; + + const std::size_t header_rows_amount = get_header_rows_amount(this->witness_amount()); + const std::size_t state_rows_amount = get_state_rows_amount(this->witness_amount()); + const std::size_t chunks_rows_amount = get_chunks_rows_amount(this->witness_amount()); + const std::size_t rounds_rows_amount = get_rounds_rows_amount(this->witness_amount(), this->limit_permutation_column); + const std::size_t unsparser_rows_amount = get_unsparser_rows_amount(this->witness_amount()); + const std::size_t block_rows_amount = get_block_rows_amount(this->witness_amount(), this->limit_permutation_column); + + const std::size_t rows_amount = get_rows_amount(this->witness_amount(), max_blocks, limit_permutation_column); + const std::size_t gates_amount = get_gates_amount(this->witness_amount(), max_blocks, limit_permutation_column); + + const std::size_t round_constant[24] = {1, + 0x8082, + 0x800000000000808a, + 0x8000000080008000, + 0x808b, + 0x80000001, + 0x8000000080008081, + 0x8000000000008009, + 0x8a, + 0x88, + 0x80008009, + 0x8000000a, + 0x8000808b, + 0x800000000000008b, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x800a, + 0x800000008000000a, + 0x8000000080008081, + 0x8000000000008080, + 0x80000001, + 0x8000000080008008}; + + struct input_type { + var rlc_challenge; + std::vector, + std::pair + >> input; + + std::vector> all_vars() { + std::vector> res; + res.push_back(rlc_challenge); + return res; + } + }; + + struct result_type { + result_type() { + } + std::vector> all_vars() { + return {}; + } + }; + + struct header_map{ + var hash_hi; + var hash_lo; + var RLC; + var is_first; + var is_last; + var L; + var l; + var hash_cur_hi; + var hash_cur_lo; + var rlc_before; + var rlc_after; + + var hash_hi_prev; + var hash_lo_prev; + var RLC_prev; + var L_prev; + var l_prev; + var is_first_prev; + var is_last_prev; + var hash_cur_hi_prev; + var hash_cur_lo_prev; + var rlc_before_prev; + var rlc_after_prev; + }; + + struct state_map{ + var is_first; + var s0; + var s1; + var s2; + var s3; + var s4; + var S0; + var S1; + var S2; + var S3; + var S4; + var rng; + var XOR; + var ch; + var out; + + var is_first_prev; + var XOR_prev; + var ch_prev; + + var rng_next; + var XOR_next; + }; + + struct chunks_map{ + var b0; + var b1; + var b2; + var b3; + var sp0; + var sp1; + var chunk; + var l; + var l_before; + var rlc; + var rlc_before; + var r2; + var r4; + var first_in_block; + // First row is length before -- controlled by copy constraints -- other rows 0 + + var sp0_prev; + var sp1_prev; + var l_prev; + var l_before_prev; + var diff_prev; + var rlc_prev; + var rlc_before_prev; + }; + + struct unsparser_map{ + var SP; // sparsed 64 bit round output + var sp0; + var sp1; + var sp2; + var sp3; // 16-bit chunks for SP + var ch0; + var ch1; + var ch2; + var ch3; // unpacked 16-bit chunks + var hash_chunk; // 64 bit final chunk -- used only in last block but we compute it for all blocks + + var ch0_prev; + var ch1_prev; + var ch2_prev; + var ch3_prev; + }; + + struct keccak_map{ + header_map h; + state_map s; + chunks_map c; + unsparser_map u; + var r; // rlc_challenge + var r_prev; + + keccak_map(const keccak_dynamic &component){ + std::size_t witness_amount = component.witness_amount(); + assert(witness_amount == 15); + r = var(component.W(14), 0); + r_prev = var(component.W(14), -1); + + h.L = var(component.W(0), 0); + h.RLC = var(component.W(1), 0); + h.hash_hi = var(component.W(2), 0); + h.hash_lo = var(component.W(3), 0); + h.rlc_before = var(component.W(4), 0); + h.rlc_after = var(component.W(5), 0); + h.l = var(component.W(6), 0); + h.hash_cur_hi = var(component.W(7), 0); + h.hash_cur_lo = var(component.W(8), 0); + h.is_last = var(component.W(9), 0); + h.is_first = var(component.W(10), 0); + + h.L_prev = var(component.W(0), -1); + h.RLC_prev = var(component.W(1), -1); + h.hash_hi_prev = var(component.W(2), -1); + h.hash_lo_prev = var(component.W(3), -1); + h.rlc_before_prev = var(component.W(4), -1); + h.l_prev = var(component.W(6), -1); + h.hash_cur_hi_prev = var(component.W(7), -1); + h.hash_cur_lo_prev = var(component.W(8), -1); + h.is_last_prev = var(component.W(9), -1); + h.is_first_prev = var(component.W(10), -1); + + s.s0 = var(component.W(0), 0); + s.s1 = var(component.W(1), 0); + s.s2 = var(component.W(2), 0); + s.s3 = var(component.W(3), 0); + s.s4 = var(component.W(4), 0); + s.S0 = var(component.W(5), 0); + s.S1 = var(component.W(6), 0); + s.S2 = var(component.W(7), 0); + s.S3 = var(component.W(8), 0); + s.S4 = var(component.W(9), 0); + // Connected with header by polynomial constraints + // Use copy constraints to remove this dependency + s.is_first = var(component.W(10), 0); + s.rng = var(component.W(11), 0); + s.XOR = var(component.W(12), 0); + s.ch = var(component.W(13), 0); + s.out = var(component.W(14), 0); + + s.is_first_prev = var(component.W(10), -1); + s.XOR_prev = var(component.W(12), -1); + s.ch_prev = var(component.W(13), -1); + + s.rng_next = var(component.W(11), 1); + s.XOR_next = var(component.W(12), 1); + + c.b0 = var(component.W(0), 0); + c.b1 = var(component.W(1), 0); + c.b2 = var(component.W(2), 0); + c.b3 = var(component.W(3), 0); + c.sp0 = var(component.W(4), 0); + c.sp1 = var(component.W(5), 0); + c.chunk = var(component.W(6), 0); + c.l = var(component.W(7), 0); + c.l_before = var(component.W(8), 0); + c.rlc = var(component.W(9), 0); + c.rlc_before = var(component.W(10),0); + c.r2 = var(component.W(11),0); + c.r4 = var(component.W(12),0); + c.first_in_block = var(component.W(13),0); + + c.sp0_prev = var(component.W(4), -1); + c.sp1_prev = var(component.W(5), -1); + c.l_prev = var(component.W(7), -1); + c.l_before_prev = var(component.W(8), -1); + c.rlc_prev = var(component.W(9), -1); + c.rlc_before_prev = var(component.W(10), -1); + + u.SP = var(component.W(0), 0); + u.sp0 = var(component.W(1), 0); + u.sp1 = var(component.W(2), 0); + u.sp2 = var(component.W(3), 0); + u.sp3 = var(component.W(4), 0); + u.ch0 = var(component.W(5), 0); + u.ch1 = var(component.W(6), 0); + u.ch2 = var(component.W(7), 0); + u.ch3 = var(component.W(8), 0); + u.hash_chunk = var(component.W(9), 0); + + u.ch0_prev = var(component.W(5), -1); + u.ch1_prev = var(component.W(6), -1); + u.ch2_prev = var(component.W(7), -1); + u.ch3_prev = var(component.W(8), -1); + } + }; + + static std::size_t get_header_rows_amount(std::size_t witness_amount){ + return 1; + } + + static std::size_t get_state_rows_amount(std::size_t witness_amount){ + return 5; + } + + static std::size_t get_chunks_rows_amount(std::size_t witness_amount){ + return 34; + } + + static std::size_t get_rounds_rows_amount(std::size_t witness_amount, std::size_t limit_permutation_column){ + return + round_component_type::get_rows_amount( witness_amount, true, false, limit_permutation_column ) + + 23 * round_component_type::get_rows_amount( witness_amount, false, false, limit_permutation_column); + } + + static std::size_t get_unsparser_rows_amount(std::size_t witness_amount){ + return 4; + } + + static std::size_t get_footer_rows_amount(std::size_t witness_amount){ + return 1; + } + + static std::size_t get_block_rows_amount(std::size_t witness_amount, std::size_t limit_permutation_column){ + return + get_header_rows_amount (witness_amount) + + get_state_rows_amount (witness_amount) + + get_chunks_rows_amount (witness_amount) + + get_rounds_rows_amount (witness_amount, limit_permutation_column) + + get_unsparser_rows_amount (witness_amount) + + get_footer_rows_amount (witness_amount); + } + + static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_blocks, std::size_t limit_permutation_column) { + return get_block_rows_amount(witness_amount, limit_permutation_column) * max_blocks; + } + + static std::size_t get_gates_amount(std::size_t witness_amount, std::size_t max_blocks, + std::size_t limit_permutation_column) { + return 39; // + round_component_type::get_gates_amount(witness_amount, ); + } + + std::map component_lookup_tables() { + std::map lookup_tables; + lookup_tables["keccak_pack_table/extended"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/extended_swap"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_135"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_16bit"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/sparse_16bit"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_sign_bit_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize3_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize4_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize6_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_chi_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_sparse"] = 0; // REQUIRED_TABLE + return lookup_tables; + } + + template + keccak_dynamic(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, std::size_t max_blocks_, + std::size_t lpc_ = 7) : + component_type(witness, constant, public_input, + get_manifest(max_blocks_, lpc_)), + max_blocks(max_blocks_), + limit_permutation_column(lpc_), + round_tf(witness, constant, public_input, true, false, lpc_), + round_ff(witness, constant, public_input, false, false, lpc_) + { + std::cout << "Keccak dynamic component" + << " witnesses = " << witness.size() + << " rows amount = " << rows_amount + << " gates amount = " << gates_amount + << " block rows amount = " << block_rows_amount << std::endl; + }; + + keccak_dynamic(std::initializer_list witnesses, + std::initializer_list constants, + std::initializer_list + public_inputs, + std::size_t max_blocks_, std::size_t lpc_ = 7) : + component_type(witnesses, constants, public_inputs), + max_blocks(max_blocks_), + limit_permutation_column(lpc_), + round_tf(witnesses, constants, public_inputs, true, false, lpc_), + round_ff(witnesses, constants, public_inputs, false, false, lpc_) + { + std::cout << "Keccak dynamic component" + << " witnesses = " << witnesses.size() + << " rows amount = " << rows_amount + << " gates amount = " << gates_amount + << " block rows amount = " << block_rows_amount << std::endl; + }; + }; + + template + using keccak_dynamic_component = keccak_dynamic>; + + template + std::vector generate_gates( + const keccak_dynamic_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_dynamic_component::input_type &instance_input, + const typename lookup_library::left_reserved_type lookup_tables_indices) { + std::cout << "Keccak component::generate gates" << std::endl; + + using component_type = keccak_dynamic_component; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = typename crypto3::zk::snark::plonk_lookup_constraint; + using integral_type = typename BlueprintFieldType::integral_type; + using value_type = typename BlueprintFieldType::value_type; + + typename component_type::keccak_map m(component); + + std::vector selector_indices; + std::vector header_constraints; + std::vector header_lookup_constraints; + // Is_first and is_last definition + header_constraints.push_back(m.h.is_first * (m.h.is_first - 1)); // HF1 + header_constraints.push_back(m.h.is_last * (m.h.is_last - 1)); // HF2 + header_constraints.push_back(m.h.is_first * (m.h.L - m.h.l)); // HF3 + header_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check_135"),{m.h.is_last * m.h.l}}); // HF4 + + // Hash computation correctness + header_constraints.push_back(m.h.is_last * (m.h.hash_hi - m.h.hash_cur_hi)); // HF5 + header_constraints.push_back(m.h.is_last * (m.h.hash_lo - m.h.hash_cur_lo)); // HF6 + + // RLC computation correctness + header_constraints.push_back(m.h.is_first * (m.h.rlc_before - m.h.L)); // HF7 + header_constraints.push_back(m.h.is_last * (m.h.rlc_after - m.h.RLC)); // HF8 + + // Transition between blocks + header_constraints.push_back(( 1 - m.h.is_first ) * (m.h.L - m.h.L_prev)); // BT4 + header_constraints.push_back(( 1 - m.h.is_first ) * (m.h.RLC - m.h.RLC_prev)); // BT5 + header_constraints.push_back(( 1 - m.h.is_first ) * (m.h.hash_hi - m.h.hash_hi_prev)); // BT6 + header_constraints.push_back(( 1 - m.h.is_first ) * (m.h.hash_lo - m.h.hash_lo_prev)); // BT7 + header_constraints.push_back(( 1 - m.h.is_first ) * (m.h.rlc_before_prev - m.h.rlc_before)); // BT8 + header_constraints.push_back(( 1 - m.h.is_first ) * (1 - m.h.is_last) * (m.h.l_prev - m.h.l - 136)); // BT9 + + header_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check_16bit"),{m.h.L}}); + header_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check_16bit"),{m.h.l}}); + selector_indices.push_back(bp.add_gate(header_constraints)); + bp.add_lookup_gate(selector_indices.back(), header_lookup_constraints); + + std::vector first_header_constraints; + first_header_constraints.push_back(1 - m.h.is_first); // BT1 + selector_indices.push_back(bp.add_gate(first_header_constraints)); + + std::vector non_first_header_constraints; + non_first_header_constraints.push_back(m.h.is_first * (1 - m.h.is_last_prev)); //BT2 + selector_indices.push_back(bp.add_gate(non_first_header_constraints)); + + // State constraints. + // m.s.s -- previous block output defined by copy_constraints. + // m.s.S -- zerofied for first block and copied for other blocks. + std::vector state_constraints; + std::vector state_lookup_constraints; + state_constraints.push_back(m.s.is_first_prev - m.s.is_first); // ST1 + state_constraints.push_back(m.s.S0 - (1 - m.s.is_first) * m.s.s0); // ST3 + state_constraints.push_back(m.s.S1 - (1 - m.s.is_first) * m.s.s1); // ST4 + state_constraints.push_back(m.s.S2 - (1 - m.s.is_first) * m.s.s2); // ST5 + state_constraints.push_back(m.s.S3 - (1 - m.s.is_first) * m.s.s3); // ST6 + state_constraints.push_back(m.s.S4 - (1 - m.s.is_first) * m.s.s4); // ST7 + state_constraints.push_back(m.s.out + - m.s.XOR_prev * (integral_type(1) << (48 * 3)) + - m.s.ch_prev * (integral_type(1) << (48 * 2)) + - m.s.XOR * (integral_type(1) << 48) + - m.s.ch + ); // ST9 + state_lookup_constraints.push_back( + {lookup_tables_indices.at("keccak_pack_table/sparse_16bit"),{m.s.rng}} + ); // ST8 + selector_indices.push_back(bp.add_gate(state_constraints)); + bp.add_lookup_gate(selector_indices.back(), state_lookup_constraints); + + std::vector xor_constraints; + const integral_type sparse_x80 = component.round_tf.sparse_x80 >> 144; + const integral_type sparse_x7f = component.round_tf.sparse_x7f >> 144; + xor_constraints.push_back((m.s.rng_next - sparse_x80 - m.s.rng) * (m.s.rng_next - sparse_x7f + m.s.rng )); // XOR1 + //xor_constraints.push_back((m.s.ch * (m.s.ch - 1))); -- not necessary, controlled by copy constraints + xor_constraints.push_back((m.s.rng_next - sparse_x7f + m.s.rng ) * (m.s.XOR - m.s.rng_next + sparse_x80)); // XOR2 + xor_constraints.push_back((m.s.rng_next - sparse_x80 - m.s.rng ) * (m.s.XOR - m.s.rng_next - sparse_x80)); // XOR3 + // XOR_next - is_last * XOR - (1-is_last) * rng_next + xor_constraints.push_back((m.s.XOR_next - m.s.ch * m.s.XOR - (1 - m.s.ch) * m.s.rng_next)); // XOR4 + selector_indices.push_back(bp.add_gate(xor_constraints)); + + value_type chunk_factor = value_type(integral_type(1) << 48); + std::vector chunks_constraints; + std::vector chunks_lookup_constraints; + chunks_constraints.push_back( + m.c.chunk - m.c.sp1 * chunk_factor * chunk_factor * chunk_factor - + m.c.sp0 * chunk_factor * chunk_factor - m.c.sp1_prev * chunk_factor - m.c.sp0_prev + ); // CH7 + + auto diff = m.c.l_before - m.c.l; + auto diff_prev = m.c.l_before_prev - m.c.l_prev; + + //chunks_constraints.push_back(m.c.first_in_block * (1 - m.c.first_in_block)); // Not necessary, controlled by copy constraints. + chunks_constraints.push_back((1 - m.c.first_in_block) * (m.c.l_before - m.c.l_prev)); // LC3 + chunks_constraints.push_back(diff * (diff - 1) * (diff - 2) * (diff - 3) * (diff - 4)); // LC4 + chunks_constraints.push_back((1 - m.c.first_in_block) * diff * (diff_prev - 4)); // LC5 + + chunks_constraints.push_back(diff * (diff - 1) * (diff-2) * (diff-4) * (m.c.b3 - 1)); // PC1 + chunks_constraints.push_back(diff * (diff - 1) * (diff-3) * (diff-4) * (m.c.b2 - 1)); // PC2 + chunks_constraints.push_back(diff * (diff - 1) * (diff-3) * (diff-4) * m.c.b3); // PC3 + chunks_constraints.push_back(diff * (diff - 2) * (diff-3) * (diff-4) * (m.c.b1 - 1)); // PC4 + chunks_constraints.push_back(diff * (diff - 2) * (diff-3) * (diff-4) * m.c.b2); // PC5 + chunks_constraints.push_back(diff * (diff - 2) * (diff-3) * (diff-4) * m.c.b3); // PC6 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - diff) * (diff_prev - diff - 1) * (diff_prev - diff - 2) * (diff_prev - diff - 3) * (m.c.b0 - 1)); //PC7 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - diff) * (diff_prev - diff - 1) * (diff_prev - diff - 2) * (diff_prev - diff - 3) * m.c.b1); //PC8 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - diff) * (diff_prev - diff - 1) * (diff_prev - diff - 2) * (diff_prev - diff - 3) * m.c.b2); //PC9 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - diff) * (diff_prev - diff - 1) * (diff_prev - diff - 2) * (diff_prev - diff - 3) * m.c.b3); //PC10 + chunks_constraints.push_back(m.c.first_in_block * (diff - 1) * (diff - 2) * (diff-3) * (diff - 4) * (m.c.b0 - 1)); //PC11 + chunks_constraints.push_back(m.c.first_in_block * (diff - 1) * (diff - 2) * (diff-3) * (diff - 4) * m.c.b1); //PC12 + chunks_constraints.push_back(m.c.first_in_block * (diff - 1) * (diff - 2) * (diff-3) * (diff - 4) * m.c.b2); //PC13 + chunks_constraints.push_back(m.c.first_in_block * (diff - 1) * (diff - 2) * (diff-3) * (diff - 4) * m.c.b3); //PC14 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - 4) * (diff - 1) * (diff - 2) * (diff - 3) * (diff - 4) * m.c.b0); //PC15 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - 4) * (diff - 1) * (diff - 2) * (diff - 3) * (diff - 4) * m.c.b1); //PC16 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - 4) * (diff - 1) * (diff - 2) * (diff - 3) * (diff - 4) * m.c.b2); //PC17 + chunks_constraints.push_back((1 - m.c.first_in_block) * (diff_prev - 4) * (diff - 1) * (diff - 2) * (diff - 3) * (diff - 4) * m.c.b3); //PC18 + + chunks_constraints.push_back(m.c.r2 - m.r * m.r); //RLC4 + chunks_constraints.push_back(m.c.r4 - m.c.r2 * m.c.r2); //RLC5 + chunks_constraints.push_back((1 - m.c.first_in_block) * (m.c.rlc_before - m.c.rlc_prev)); //RLC6 + //RLC7 + chunks_constraints.push_back( + diff * (diff - 1) * (diff - 2) * (diff - 3) * + (m.c.rlc - m.c.r4 * m.c.rlc_before - m.c.r2 * m.r * m.c.b0 - m.c.r2 * m.c.b1 - m.r * m.c.b2 - m.c.b3) + ); + //RLC8 + chunks_constraints.push_back( + diff * (diff - 1) * (diff - 2) * (diff - 4) * + (m.c.rlc - m.c.r2 * m.r * m.c.rlc_before - m.c.r2 * m.c.b0 - m.r * m.c.b1 - m.c.b2) + ); + //RLC9 + chunks_constraints.push_back( + diff * (diff - 1) * (diff - 3) * (diff - 4) * + (m.c.rlc - m.c.r2 * m.c.rlc_before - m.r * m.c.b0 - m.c.b1) + ); + //RLC10 + chunks_constraints.push_back( + diff * (diff - 2) * (diff - 3) * (diff - 4) * + (m.c.rlc - m.r * m.c.rlc_before - m.c.b0) + ); + //RLC11 + chunks_constraints.push_back( + (diff - 1) * (diff - 2) * (diff - 3) * (diff - 4) * + (m.c.rlc - m.c.rlc_before) + ); + + chunks_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"),{m.c.b0}}); // CH1 + chunks_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"),{m.c.b1}}); // CH2 + chunks_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"),{m.c.b2}}); // CH3 + chunks_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"),{m.c.b3}}); // CH4 + chunks_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/extended"), {m.c.b1 * 256 + m.c.b0, m.c.sp0}}); // CH5 + chunks_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/extended"), {m.c.b3 * 256 + m.c.b2, m.c.sp1}}); // CH6 + + selector_indices.push_back(bp.add_gate(chunks_constraints)); + bp.add_lookup_gate(selector_indices.back(), chunks_lookup_constraints); + + std::vector unsparser_constraints; + std::vector unsparser_lookup_constraints; + integral_type sparsed_factor( integral_type(1) << 48 ); + integral_type ufactor( integral_type(1) << 16); + //UN2 + unsparser_constraints.push_back(m.u.SP - m.u.sp0 * (sparsed_factor << 96) - m.u.sp1 * (sparsed_factor << 48) - m.u.sp2 * sparsed_factor - m.u.sp3); + //UN7 + unsparser_constraints.push_back( m.u.hash_chunk - + m.u.ch3_prev * (ufactor << (16 * 6)) - + m.u.ch2_prev * (ufactor << (16 * 5)) - + m.u.ch1_prev * (ufactor << (16 * 4)) - + m.u.ch0_prev * (ufactor << (16 * 3)) - + m.u.ch3 * (ufactor << (16 * 2)) - + m.u.ch2 * (ufactor << (16)) - + m.u.ch1 * ufactor - + m.u.ch0); + selector_indices.push_back(bp.add_gate(unsparser_constraints)); + unsparser_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/extended_swap"),{m.u.ch0, m.u.sp0}}); //UN3 + unsparser_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/extended_swap"),{m.u.ch1, m.u.sp1}}); //UN4 + unsparser_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/extended_swap"),{m.u.ch2, m.u.sp2}}); //UN5 + unsparser_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/extended_swap"),{m.u.ch3, m.u.sp3}}); //UN6 + bp.add_lookup_gate(selector_indices.back(), unsparser_lookup_constraints); + + return selector_indices; + } + + template + void generate_copy_constraints( + const keccak_dynamic_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_dynamic_component::input_type &instance_input, + const std::uint32_t start_row_index + ) { + using component_type = keccak_dynamic_component; + using round_type = typename component_type::round_component_type; + using var = typename component_type::var; + + typename component_type::keccak_map m (component); + + std::size_t header_row = start_row_index; + std::size_t footer_row = header_row + component.block_rows_amount - 1; + for( std::size_t i = 0; i < component.max_blocks; i++ ){ + std::size_t state_row = header_row + component.header_rows_amount; + std::size_t chunks_row = state_row + component.state_rows_amount; + std::size_t unsparser_row = footer_row - component.unsparser_rows_amount; + + bp.add_copy_constraint( { instance_input.rlc_challenge, var(m.r.index, header_row, false) } ); // HF9 + + // BT3 + bp.add_copy_constraint( { var(m.r.index, header_row, false), var(m.r.index, footer_row, false) } ); + bp.add_copy_constraint( { var(m.h.hash_hi.index, header_row, false), var(m.h.hash_hi.index, footer_row, false) } ); + bp.add_copy_constraint( { var(m.h.hash_lo.index, header_row, false), var(m.h.hash_lo.index, footer_row, false) } ); + bp.add_copy_constraint( { var(m.h.L.index, header_row, false), var(m.h.L.index, footer_row, false) } ); + bp.add_copy_constraint( { var(m.h.l.index, header_row, false), var(m.h.l.index, footer_row, false) } ); + bp.add_copy_constraint( { var(m.h.RLC.index, header_row, false), var(m.h.RLC.index, footer_row, false) } ); + bp.add_copy_constraint( { var(m.h.is_first.index, header_row, false), var(m.h.is_first.index, footer_row, false) } ); + bp.add_copy_constraint( { var(m.h.is_last.index, header_row, false), var(m.h.is_last.index, footer_row, false) } ); + + bp.add_copy_constraint( {var(m.s.S1.index, state_row + 3, false), var(m.s.out.index, state_row + 4, false)} ); //ST11 + bp.add_copy_constraint( {var(m.h.is_last.index, header_row, false), var(m.s.ch.index, state_row, false)} ); //ST8 + + // ST12 + bp.add_copy_constraint( {var(m.s.rng.index, state_row + 2, false), var(m.s.ch.index, state_row + 1, false)} ); + bp.add_copy_constraint( {var(m.s.rng.index, state_row + 3, false), var(m.s.XOR.index, state_row + 2, false)} ); + bp.add_copy_constraint( {var(m.s.rng.index, state_row + 4, false), var(m.s.ch.index, state_row + 2, false)} ); + + // ST10 + bp.add_copy_constraint( {var(m.s.rng.index, state_row + 1, false), var(m.s.XOR.index, state_row + 3, false)} ); + bp.add_copy_constraint( {var(m.s.rng.index, state_row + 2, false), var(m.s.ch.index, state_row + 3, false)} ); + bp.add_copy_constraint( {var(m.s.rng.index, state_row + 3, false), var(m.s.XOR.index, state_row + 4, false)} ); + bp.add_copy_constraint( {var(m.s.rng.index, state_row + 4, false), var(m.s.ch.index, state_row + 4, false)} ); + + for( std::size_t j = 0; j < component.chunks_rows_amount; j++ ){ + // LC1 + if(j == 0) + bp.add_copy_constraint({var(m.c.first_in_block.index, chunks_row + j, false), var(component.C(0), start_row_index + 1, false, var::column_type::constant)}); + else + bp.add_copy_constraint({var(m.c.first_in_block.index, chunks_row + j, false), var(component.C(0), start_row_index, false, var::column_type::constant)}); + bp.add_copy_constraint({ instance_input.rlc_challenge, var(m.r.index, chunks_row + j, false) } ); // RLC3 + } + bp.add_copy_constraint( {var(m.h.l.index, header_row, false), var(m.c.l_before.index, chunks_row, false)} ); // LC2 + + bp.add_copy_constraint( {var(m.h.rlc_before.index, header_row, false), var(m.c.rlc_before.index, chunks_row, false)} ); // RLC1 + bp.add_copy_constraint( {var(m.h.rlc_after.index, header_row, false), var(m.c.rlc.index, chunks_row + component.chunks_rows_amount - 1, false)} ); // RLC2 + + bp.add_copy_constraint( {var(m.h.hash_cur_hi.index, header_row, false), var(m.u.hash_chunk.index, unsparser_row + 1, false)}); //UN8 + bp.add_copy_constraint( {var(m.h.hash_cur_lo.index, header_row, false), var(m.u.hash_chunk.index, unsparser_row + 3, false)}); //UN8 + + header_row += component.block_rows_amount; + footer_row += component.block_rows_amount; + } + } + + template + typename keccak_dynamic_component::result_type generate_circuit( + const keccak_dynamic_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_dynamic_component::input_type &instance_input, + const std::uint32_t start_row_index) { +// BOOST_ASSERT(instance_input.message.size() == component.num_blocks); + + using component_type = keccak_dynamic_component; + using round_type = typename component_type::round_component_type; + using var = typename component_type::var; + + generate_assignments_constant(component, bp, assignment, instance_input, start_row_index); + std::size_t row = start_row_index; + + auto selector_indices = + generate_gates(component, bp, assignment, instance_input, bp.get_reserved_indices()); + std::size_t header_selector = selector_indices[0]; + std::size_t first_header_selector = selector_indices[1]; + std::size_t non_first_header_selector = selector_indices[2]; + std::size_t state_selector = selector_indices[3]; + std::size_t xor_selector = selector_indices[4]; + std::size_t chunks_selector = selector_indices[5]; + std::size_t unsparser_selector = selector_indices[6]; + + typename component_type::keccak_map m(component); + + typename round_type::result_type round_result; + for( std::size_t block = 0; block < component.max_blocks; block++ ){ + std::size_t header_row = start_row_index + block * component.block_rows_amount; + assignment.enable_selector(header_selector, header_row); + if( block != 0 ) + assignment.enable_selector(non_first_header_selector, header_row); + else + assignment.enable_selector(first_header_selector, header_row); + + std::size_t state_row = header_row + component.header_rows_amount; + for( std::size_t j = 0; j < component.state_rows_amount; j++ ){ + assignment.enable_selector(state_selector, state_row + j); + if( block != 0){ + // ST2 + bp.add_copy_constraint( { round_result.inner_state[j * 5], var(m.s.s0.index, state_row + j, false) } ); + bp.add_copy_constraint( { round_result.inner_state[j * 5 + 1], var(m.s.s1.index, state_row + j, false) } ); + bp.add_copy_constraint( { round_result.inner_state[j * 5 + 2], var(m.s.s2.index, state_row + j, false) } ); + bp.add_copy_constraint( { round_result.inner_state[j * 5 + 3], var(m.s.s3.index, state_row + j, false) } ); + bp.add_copy_constraint( { round_result.inner_state[j * 5 + 4], var(m.s.s4.index, state_row + j, false) } ); + } + } + assignment.enable_selector(xor_selector, state_row); + + std::size_t chunks_row = state_row + component.state_rows_amount; + for( std::size_t j = 0; j < component.chunks_rows_amount; j++ ) + assignment.enable_selector(chunks_selector, chunks_row + j); + + std::size_t footer_row = header_row + component.block_rows_amount - 1; + std::size_t unsparser_row = footer_row - component.unsparser_rows_amount; + for( std::size_t j = 0; j < component.unsparser_rows_amount; j++ ) + assignment.enable_selector(unsparser_selector, unsparser_row + j); + + std::array inner_state; + for (std::size_t i = 0; i < 5; i++) { + inner_state[5 * i ] = var(m.s.S0.index, state_row + i, false); + inner_state[5 * i + 1] = var(m.s.S1.index, state_row + i, false); + inner_state[5 * i + 2] = var(m.s.S2.index, state_row + i, false); + inner_state[5 * i + 3] = var(m.s.S3.index, state_row + i, false); + inner_state[5 * i + 4] = var(m.s.S4.index, state_row + i, false); + } + inner_state[16] = var(m.s.out.index, state_row + 2, false); + + std::size_t offset = 0; + std::array pmc; + for (std::size_t i = 0; i < 17; i++ ){ + pmc[i] = var(m.c.chunk.index, chunks_row + 2 * i + 1, false); + } + + std::size_t rounds_row = chunks_row + component.chunks_rows_amount; + for (std::size_t j = 0; j < 24; ++j) { + typename round_type::input_type round_input = { + inner_state, pmc, + var(component.C(0), start_row_index + j + 2, false, var::column_type::constant) + }; + + if (j == 0) { + round_result = generate_circuit(component.round_tf, bp, assignment, round_input, rounds_row); + inner_state = round_result.inner_state; + rounds_row += component.round_tf.rows_amount; + } else { + round_result = generate_circuit(component.round_ff, bp, assignment, round_input, rounds_row); + inner_state = round_result.inner_state; + rounds_row += component.round_ff.rows_amount; + } + } + //UN1 + bp.add_copy_constraint( {round_result.inner_state[0], var(m.u.SP.index, unsparser_row, false)}); + bp.add_copy_constraint( {round_result.inner_state[1], var(m.u.SP.index, unsparser_row + 1, false)}); + bp.add_copy_constraint( {round_result.inner_state[2], var(m.u.SP.index, unsparser_row + 2, false)}); + bp.add_copy_constraint( {round_result.inner_state[3], var(m.u.SP.index, unsparser_row + 3, false)}); + } + generate_copy_constraints(component, bp, assignment, instance_input, start_row_index); + + return typename component_type::result_type(); + } + + template + typename keccak_dynamic_component::result_type generate_assignments( + const keccak_dynamic_component &component, + assignment> &assignment, + const typename keccak_dynamic_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + std::size_t cur_row = start_row_index; + + using component_type = keccak_dynamic_component; + using round_type = typename component_type::round_component_type; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + using var = typename component_type::var; + + value_type theta = var_value(assignment, instance_input.rlc_challenge); + std::cout << "RLC challenge = " << theta << std::endl; + + typename component_type::keccak_map m(component); + assignment.witness(0, start_row_index + component.rows_amount-1) = value_type(0); + + std::size_t block_counter = 0; + std::size_t header_row = start_row_index; + std::size_t footer_row = header_row + component.block_rows_amount - 1; + std::size_t input_idx = 0; + std::size_t l; + std::size_t l_before; + std::size_t first_in_block; + value_type rlc; + value_type rlc_before; + value_type RLC; + // Valid blocks + + std::array state; + while( block_counter < component.max_blocks ) { + std::cout << std::endl << std::endl << "New message" << std::endl; + std::vector msg; + std::pair hash; + if( input_idx < instance_input.input.size() ){ + msg = std::get<0>(instance_input.input[input_idx]); + hash = std::get<1>(instance_input.input[input_idx]); + input_idx++; + } else { + msg = {}; + hash = keccak_component_hash(msg); + } + auto padded_msg = msg; + padded_msg.push_back(1); + while( padded_msg.size() % 136 != 0 ){ + padded_msg.push_back(0); + } +/* std::cout << "Padded message: "; + for(std::size_t i = 0; i < 136; i++){ + std::cout << std::hex << std::setw(2) << std::setfill('0') << std::size_t(padded_msg[i]) << " "; + } + std::cout << std::endl;*/ + RLC = calculateRLC(msg, theta); + std::cout << "RLC = " << std::hex << RLC << std::dec << std::endl; + for( std::size_t block = 0; block < padded_msg.size()/136; block++){ + l = msg.size() - block * 136; + bool is_first = (block == 0? 1: 0); + bool is_last = ((block == padded_msg.size()/136 - 1 )? 1: 0); + std::cout << "Is_last = " << is_last << std::endl; + if (is_first) rlc = msg.size(); + + assignment.witness(m.h.is_first.index, header_row) = is_first; + assignment.witness(m.h.is_last.index, header_row) = is_last; + assignment.witness(m.h.L.index, header_row) = msg.size(); + assignment.witness(m.h.l.index, header_row) = msg.size() - block * 136; + assignment.witness(m.h.hash_hi.index, header_row) = hash.first; + assignment.witness(m.h.hash_lo.index, header_row) = hash.second; + assignment.witness(m.h.RLC.index, header_row) = RLC; + assignment.witness(m.r.index, header_row) = theta; + assignment.witness(m.h.rlc_before.index, header_row) = rlc; + + assignment.witness(m.h.is_first.index, footer_row) = (block == 0? 1: 0); + assignment.witness(m.h.is_last.index, footer_row) = ((block == padded_msg.size()/136 - 1 )? 1: 0); + assignment.witness(m.h.L.index, footer_row) = msg.size(); + assignment.witness(m.h.l.index, footer_row) = msg.size() - block * 136; + assignment.witness(m.h.hash_hi.index, footer_row) = hash.first; + assignment.witness(m.h.hash_lo.index, footer_row) = hash.second; + assignment.witness(m.h.RLC.index, footer_row) = RLC; + assignment.witness(m.r.index, footer_row) = theta; + + std::size_t state_row = header_row + component.header_rows_amount; + for( std::size_t i = 0; i < component.state_rows_amount; i++ ){ + assignment.witness(m.s.s0.index, state_row + i ) = state[5 * i]; + assignment.witness(m.s.s1.index, state_row + i ) = state[5 * i + 1]; + assignment.witness(m.s.s2.index, state_row + i ) = state[5 * i + 2]; + assignment.witness(m.s.s3.index, state_row + i ) = state[5 * i + 3]; + assignment.witness(m.s.s4.index, state_row + i ) = state[5 * i + 4]; + + assignment.witness(m.s.is_first.index, state_row + i) = is_first; + assignment.witness(m.s.S0.index, state_row + i) = is_first ? 0 : state[5 * i]; + assignment.witness(m.s.S1.index, state_row + i) = is_first ? 0 : state[5 * i + 1]; + assignment.witness(m.s.S2.index, state_row + i) = is_first ? 0 : state[5 * i + 2]; + assignment.witness(m.s.S3.index, state_row + i) = is_first ? 0 : state[5 * i + 3]; + assignment.witness(m.s.S4.index, state_row + i) = is_first ? 0 : state[5 * i + 4]; + } + const integral_type sparse_x80 = component.round_tf.sparse_x80 >> 144; + const integral_type sparse_x7f = component.round_tf.sparse_x7f >> 144; + auto s16 = var_value(assignment, var(m.s.S1.index, state_row + 3, false)); + auto s16_chunks = sparsed_64bits_to_4_chunks(s16); + value_type mod = integral_type(s16_chunks[0].data) >= sparse_x80 ? s16_chunks[0] - sparse_x80 : sparse_x7f - s16_chunks[0]; + value_type XOR = integral_type(s16_chunks[0].data) >= sparse_x80 ? s16_chunks[0] - sparse_x80 : s16_chunks[0] + sparse_x80; +/* std::cout < " + << s16_chunks[0] << ", " + << s16_chunks[1] << ", " + << s16_chunks[2] << ", " + << s16_chunks[3] << std::dec << std::endl; + std::cout << std::hex << "mod = " << mod << std::dec << std::endl; + std::cout << std::hex << "XOR = " << XOR << std::dec << std::endl; + std::cout << std::hex << "sparse_x80 = " << sparse_x80 << std::dec << std::endl; + std::cout << std::hex << "sparse_x7f = " << sparse_x7f << std::dec << std::endl; + std::cout << "State row = " << state_row << std::endl;*/ + + assignment.witness(m.s.rng.index, state_row) = mod; + assignment.witness(m.s.rng.index, state_row + 1) = s16_chunks[0]; + assignment.witness(m.s.rng.index, state_row + 2) = s16_chunks[1]; + assignment.witness(m.s.rng.index, state_row + 3) = s16_chunks[2]; + assignment.witness(m.s.rng.index, state_row + 4) = s16_chunks[3]; + + assignment.witness(m.s.XOR.index, state_row) = XOR; + assignment.witness(m.s.XOR.index, state_row + 1) = is_last? XOR : s16_chunks[0]; + assignment.witness(m.s.XOR.index, state_row + 2) = s16_chunks[2]; + assignment.witness(m.s.XOR.index, state_row + 3) = s16_chunks[0]; + assignment.witness(m.s.XOR.index, state_row + 4) = s16_chunks[2]; + + assignment.witness(m.s.ch.index, state_row) = is_last; + assignment.witness(m.s.ch.index, state_row + 1) = s16_chunks[1]; + assignment.witness(m.s.ch.index, state_row + 2) = s16_chunks[3]; + assignment.witness(m.s.ch.index, state_row + 3) = s16_chunks[1]; + assignment.witness(m.s.ch.index, state_row + 4) = s16_chunks[3]; + + for( std::size_t i = 0; i < component.state_rows_amount; i++ ){ + assignment.witness(m.s.out.index, state_row+ i) = + var_value(assignment, var(m.s.XOR.index, state_row + i - 1, false)) * (integral_type(1) << (48 * 3)) + + var_value(assignment, var(m.s.ch.index, state_row + i - 1, false)) * (integral_type(1) << (48 * 2)) + + var_value(assignment, var(m.s.XOR.index, state_row + i, false)) * (integral_type(1) << 48) + + var_value(assignment, var(m.s.ch.index, state_row + i, false)) ; +// std::cout << "state.out " << i << " = " << var_value(assignment, var(m.s.out.index, state_row + i, false)) << std::endl; + } +/* + std::cout << "First expression part " << std::hex << (var_value(assignment, var(m.s.rng.index, state_row + 1, false)) - 5026338869833) + var_value(assignment, var(m.s.rng.index, state_row, false)) << std::endl; + std::cout << "Second expression part " << ((var_value(assignment, var(m.s.rng.index, state_row + 1, false)) + 35184372088832) - var_value(assignment, var(m.s.rng.index, state_row, false))) << std::endl; + std::cout << "chunk = " << var_value(assignment, var(m.s.rng.index, state_row + 1, false)) << std::endl; + std::cout << "mod = " << var_value(assignment, var(m.s.rng.index, state_row, false)) << std::dec << std::endl; +*/ +/* std::cout << "Sparse_x80 = " << std::hex + << component.round_tf.sparse_x80 << "=>" + << unpack(component.round_tf.sparse_x80) + << std::dec << std::endl; +*/ + std::size_t chunks_row = state_row + component.state_rows_amount; + for( std::size_t i = 0; i < component.chunks_rows_amount; i++ ){ + first_in_block = (i == 0) ? 1 : 0; + l_before = l; + rlc_before = rlc; + if( l > 4 ) l -= 4; else l = 0; + + std::size_t msg_idx = 136 * block + 4 * i; + assignment.witness(m.r.index, chunks_row + i) = theta; + assignment.witness(m.c.b0.index, chunks_row + i) = padded_msg[msg_idx]; + assignment.witness(m.c.b1.index, chunks_row + i) = padded_msg[msg_idx + 1]; + assignment.witness(m.c.b2.index, chunks_row + i) = padded_msg[msg_idx + 2]; + assignment.witness(m.c.b3.index, chunks_row + i) = padded_msg[msg_idx + 3]; + auto sp0 = pack(integral_type(padded_msg[msg_idx + 1]) * 256 + integral_type(padded_msg[msg_idx ])); + auto sp1 = pack(integral_type(padded_msg[msg_idx + 3]) * 256 + integral_type(padded_msg[msg_idx + 2])); + value_type sp0_prev = var_value(assignment, var(m.c.sp0.index, chunks_row +i - 1, false)); + value_type sp1_prev = var_value(assignment, var(m.c.sp1.index, chunks_row +i - 1, false)); + assignment.witness(m.c.sp0.index, chunks_row +i) = sp0; + assignment.witness(m.c.sp1.index, chunks_row +i) = sp1; + + value_type chunk_factor = value_type(integral_type(1) << 48 ); + value_type chunk = sp1 * chunk_factor + sp0; + chunk = chunk * chunk_factor + sp1_prev; + chunk = chunk * chunk_factor + sp0_prev; + + + assignment.witness(m.c.chunk.index, chunks_row + i) = chunk; +// if( i%2 == 1 ) +// std::cout << "Block " << block_counter << ", chunk " << i/2 << ": " << std::hex +// << sp0_prev << ", " << sp1_prev << ", " << sp0 << ", " << sp1 << " =>" << chunk +// << std::dec << std::endl; + assignment.witness(m.c.first_in_block.index, chunks_row + i) = first_in_block; + assignment.witness(m.c.l.index, chunks_row + i) = l; + assignment.witness(m.c.l_before.index, chunks_row + i) = l_before; + assignment.witness(m.c.rlc_before.index, chunks_row + i) = rlc_before; + assignment.witness(m.c.r2.index, chunks_row + i) = theta * theta; + assignment.witness(m.c.r4.index, chunks_row + i) = theta * theta * theta * theta; + if (l_before - l == 4) + rlc = rlc_before * theta * theta * theta * theta + + msg[msg_idx] * theta * theta * theta + + msg[msg_idx + 1] * theta * theta + + msg[msg_idx + 2] * theta + msg[msg_idx + 3]; + else if (l_before - l == 3) + rlc = rlc_before * theta * theta * theta + + msg[msg_idx] * theta * theta + + msg[msg_idx + 1] * theta + + msg[msg_idx + 2]; + else if (l_before - l == 2) + rlc = rlc_before * theta * theta + + msg[msg_idx] * theta + + msg[msg_idx + 1]; + else if (l_before - l == 1) + rlc = rlc_before * theta + msg[msg_idx]; + else + rlc = rlc_before; + assignment.witness(m.c.rlc.index, chunks_row + i) = rlc; + std::cout << std::hex + << std::size_t(padded_msg[msg_idx]) << ", " << std::size_t(padded_msg[msg_idx + 1]) << ", " + << std::size_t(padded_msg[msg_idx + 2]) << ", " << std::size_t(padded_msg[msg_idx + 3]) + << std::dec << " l="<< l << " l_before=" << l_before + << std::hex << " rlc="<< rlc << " rlc_before=" << rlc_before << std::dec + << " first_in_block = " << first_in_block << std::endl; + } + assignment.witness(m.h.rlc_after.index, header_row) = rlc; + assignment.witness(m.h.rlc_before.index, footer_row) = rlc; + + std::array inner_state; + for (std::size_t i = 0; i < 5; i++) { + inner_state[5 * i ] = var(m.s.S0.index, state_row + i, false); + inner_state[5 * i + 1] = var(m.s.S1.index, state_row + i, false); + inner_state[5 * i + 2] = var(m.s.S2.index, state_row + i, false); + inner_state[5 * i + 3] = var(m.s.S3.index, state_row + i, false); + inner_state[5 * i + 4] = var(m.s.S4.index, state_row + i, false); + } + inner_state[16] = var(m.s.out.index, state_row + 2, false); + + std::size_t offset = 0; + std::array pmc; + for (std::size_t i = 0; i < 17; i++ ){ + pmc[i] = var(m.c.chunk.index, chunks_row + 2 * i + 1, false); + } + + std::size_t rounds_row = chunks_row + component.chunks_rows_amount; + for (std::size_t j = 0; j < 24; ++j) { + typename round_type::input_type round_input = { + inner_state, pmc, + var(component.C(0), start_row_index + j + 2, false, var::column_type::constant) + }; + + if (j == 0) { + typename round_type::result_type round_result = + generate_assignments(component.round_tf, assignment, round_input, rounds_row); + inner_state = round_result.inner_state; + rounds_row += component.round_tf.rows_amount; + } else { + typename round_type::result_type round_result = + generate_assignments(component.round_ff, assignment, round_input, rounds_row); + inner_state = round_result.inner_state; + rounds_row += component.round_ff.rows_amount; + } + } + for( std::size_t i = 0; i < 25; i++ ){ + state[i] = var_value(assignment, inner_state[i]); + } + + std::cout << "Sparse hash chunks : " << std::endl; + std::array result; + for( std::size_t i = 0; i < 4; i++ ){ + value_type sparse_value = var_value(assignment, inner_state[i]); + result[i] = sparse_value; + //std::cout << "\t" << std::hex << sparse_value << std::dec << std::endl; + value_type regular = unpack(sparse_value); + std::cout << "\t" << std::hex << regular << std::dec << " "; + } + std::cout << std::endl; + + assert(rounds_row == footer_row - component.unsparser_rows_amount); + std::size_t unsparser_row = footer_row - component.unsparser_rows_amount; + integral_type chunk_factor = integral_type(1) << 16; + for( std::size_t i = 0; i < component.unsparser_rows_amount; i++ ){ + auto chunks = sparsed_64bits_to_4_chunks(result[i]); + assignment.witness( m.u.SP.index, unsparser_row + i ) = result[i]; + assignment.witness( m.u.sp0.index, unsparser_row + i) = chunks[0]; + assignment.witness( m.u.sp1.index, unsparser_row + i) = chunks[1]; + assignment.witness( m.u.sp2.index, unsparser_row + i) = chunks[2]; + assignment.witness( m.u.sp3.index, unsparser_row + i) = chunks[3]; + assignment.witness( m.u.ch0.index, unsparser_row + i) = swap_bytes(unpack(chunks[0])); + assignment.witness( m.u.ch1.index, unsparser_row + i) = swap_bytes(unpack(chunks[1])); + assignment.witness( m.u.ch2.index, unsparser_row + i) = swap_bytes(unpack(chunks[2])); + assignment.witness( m.u.ch3.index, unsparser_row + i) = swap_bytes(unpack(chunks[3])); + assignment.witness( m.u.hash_chunk.index, unsparser_row + i) = + var_value(assignment, var(m.u.ch3.index, unsparser_row + i - 1, false)) * (chunk_factor << (16 * 6)) + + var_value(assignment, var(m.u.ch2.index, unsparser_row + i - 1, false)) * (chunk_factor << (16 * 5)) + + var_value(assignment, var(m.u.ch1.index, unsparser_row + i - 1, false)) * (chunk_factor << (16 * 4)) + + var_value(assignment, var(m.u.ch0.index, unsparser_row + i - 1, false)) * (chunk_factor << (16 * 3)) + + var_value(assignment, var(m.u.ch3.index, unsparser_row + i, false)) * (chunk_factor << (16 * 2)) + + var_value(assignment, var(m.u.ch2.index, unsparser_row + i, false)) * (chunk_factor << (16)) + + var_value(assignment, var(m.u.ch1.index, unsparser_row + i, false)) * chunk_factor + + var_value(assignment, var(m.u.ch0.index, unsparser_row + i, false)); + } + assignment.witness(m.h.hash_cur_hi.index, header_row) = var_value(assignment, var(m.u.hash_chunk.index, unsparser_row + 1, false)); + assignment.witness(m.h.hash_cur_lo.index, header_row) = var_value(assignment, var(m.u.hash_chunk.index, unsparser_row + 3, false)); + + if( is_last ){ + std::cout << "Previous hash: " << std::hex + << var_value(assignment, var(m.h.hash_hi.index, header_row, false)) << " " + << var_value(assignment, var(m.h.hash_lo.index, header_row, false)) << " " << std::endl; + std::cout << "Current hash: " << std::hex + << var_value(assignment, var(m.h.hash_cur_hi.index, header_row, false)) << " " + << var_value(assignment, var(m.h.hash_cur_lo.index, header_row, false)) << " " << std::endl; + std::cout << "Final hash: " << std::hex + << var_value(assignment, var(m.u.hash_chunk.index, unsparser_row + 1, false)) << " " + << var_value(assignment, var(m.u.hash_chunk.index, unsparser_row + 3, false)) << std::dec << std::endl; + } + + block_counter++; + header_row += component.block_rows_amount; + footer_row += component.block_rows_amount; + } + } + return typename component_type::result_type(); + } + + template + void generate_assignments_constant( + const keccak_dynamic_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_dynamic_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + assignment.constant(component.C(0), start_row_index) = 0; + assignment.constant(component.C(0), start_row_index + 1) = 1; + std::size_t row = start_row_index + 2; + for (std::size_t i = 0; i < 24; ++i) { + assignment.constant(component.C(0), row + i) = pack( + typename BlueprintFieldType::value_type(component.round_constant[i]) + ); + } + } + } // namespace components + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_ROUND_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_padding.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_padding.hpp new file mode 100644 index 0000000000..bf4673ca80 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_padding.hpp @@ -0,0 +1,1305 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_PADDING_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_PADDING_HPP + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +namespace nil { + namespace blueprint { + namespace components { + template + class keccak_padding; + + template + class keccak_padding> + : public plonk_component { + + using component_type = plonk_component; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + public: + using var = typename component_type::var; + using manifest_type = nil::blueprint::plonk_component_manifest; + + class gate_manifest_type : public component_gate_manifest { + public: + std::size_t witness_amount; + std::size_t num_blocks; + std::size_t num_bits; + bool range_check_input; + std::size_t limit_permutation_column; + static constexpr const std::size_t clamp = 15; + + gate_manifest_type(std::size_t witness_amount_, std::size_t num_blocks_, std::size_t num_bits_, + bool range_check_input_, std::size_t limit_permutation_column_ = 7) : + witness_amount(std::min(witness_amount_, clamp)), + num_blocks(num_blocks_), num_bits(num_bits_), range_check_input(range_check_input_), + limit_permutation_column(limit_permutation_column_) {}; + + std::uint32_t gates_amount() const override { + return keccak_padding::get_gates_amount(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column = 7) { + gate_manifest manifest = + gate_manifest(gate_manifest_type(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column)); + return manifest; + } + + static manifest_type get_manifest( + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column = 7 + ) { + static manifest_type manifest = + manifest_type(std::shared_ptr( + new nil::blueprint::manifest_single_value_param(9)), + true); + return manifest; + } + + static const std::size_t lookup_rows = 65536; + static const std::size_t num_chunks = 8; + + const std::size_t num_blocks; + const std::size_t num_bits; + const bool range_check_input; + const std::size_t limit_permutation_column = 7; + + const std::size_t shift = calculate_shift(num_blocks, num_bits); + const std::size_t num_padding_zeros = calculate_num_padding_zeros(num_blocks, shift); + + const integral_type padding_delimiter = integral_type(1) << 56; + + const std::size_t num_cells = calculate_num_cells(num_blocks, num_bits, range_check_input); + const std::size_t buff = calculate_buff(this->witness_amount(), range_check_input); + + const std::vector full_configuration = + configure_all(this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + const std::map> gates_configuration_map = + configure_map(this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + const std::vector> gates_configuration = + configure_gates(this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + + const std::vector> output_gates_configuration = + configure_output_gates(this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + const std::vector> inner_range_check_gates_configuration = + configure_inner_range_check_gates(this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + + std::vector gates_rows = calculate_gates_rows(this->witness_amount()); + + const std::size_t rows_amount = + get_rows_amount(this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + const std::size_t gates_amount = get_gates_amount(this->witness_amount(), num_blocks, num_bits, range_check_input); + + struct input_type { + // initial message = message[0] * 2^(64 * (num_blocks - 1)) + ... + message[num_blocks - 2] * 2^64 + + // message[num_blocks - 1] all message[i] are 64-bit for i > 0 message[0] is <= 64-bit + std::vector message; + + std::vector> all_vars() { + std::vector> res; + res.reserve(message.size()); + res.insert(res.end(), message.begin(), message.end()); + return res; + } + }; + + struct result_type { + std::vector padded_message; + + result_type(const keccak_padding &component, std::size_t start_row_index) { + auto size = component.full_configuration.size() - 1 - component.num_blocks * (component.shift != 0); + padded_message.resize(size + component.num_padding_zeros); + std::cout << "Padding component result size = " << padded_message.size() << " : "; + for (std::size_t i = 0; i < padded_message.size() - 17; ++i) { + auto config = component.full_configuration[i]; + padded_message[i] = var(component.W(config.copy_to.back().column), + config.copy_to.back().row + start_row_index, false); + std::cout << padded_message[i] << " "; + } + auto output_config = component.full_configuration[component.num_blocks]; + for (std::size_t i = 0; i < 17; ++i) { + padded_message[padded_message.size() - 17 + i] = var(component.W(output_config.copy_to[i].column), + output_config.copy_to[i].row + start_row_index, false); + std::cout << padded_message[padded_message.size() - 17 + i] << " "; + } + std::cout << std::endl; + } + + std::vector> all_vars() { + std::vector> res; + res.reserve(padded_message.size()); + res.insert(res.end(), padded_message.begin(), padded_message.end()); + return res; + } + }; + + static std::size_t calculate_shift(std::size_t num_blocks, std::size_t num_bits) { + // assert(num_blocks * 64 >= num_bits); + return num_blocks * 64 - num_bits; + } + static std::size_t calculate_num_padding_zeros(std::size_t num_blocks, std::size_t shift) { + if (num_blocks % 17 == 0){ + if(shift == 0 ){ + return 17; + } + return 0; + } + return 17 - num_blocks % 17; + } + static std::size_t calculate_num_cells(std::size_t num_blocks, std::size_t num_bits, bool range_check_input) { + if (calculate_shift(num_blocks, num_bits) == 0 && range_check_input) { + return 1 + 8; // chunk, chunk range_check + } + std::size_t res = 1 // relay + + 1 // chunk = first * 2^k + second + + 2 // first, second + + 1 // sum = relay * 2^(64-k) + first + + 8; // sum range_check + if (range_check_input) { + res += 8; // chunk range_check + } + return res; + } + static std::size_t calculate_buff(std::size_t witness_amount, bool range_check_input) { + if (!range_check_input) { + return 2; + } + if (witness_amount == 15) { + return 4; + } + return 0; + } + + static configuration configure_inner_no_padding(std::size_t witness_amount, std::size_t num_blocks, std::size_t num_bits, + bool range_check_input, std::size_t limit_permutation_column, std::size_t row, std::size_t column, + std::size_t num_cells, std::size_t buff) { + + if (column > 0) { + row += 1; + column = 0; + } + + std::pair first_coordinate = {row, column}; + + std::size_t last_row = row, + last_column = column; + + // chunk + std::vector> copy_to; + if (column > limit_permutation_column) { + copy_to.push_back({last_row + 1, 0}); + } else { + copy_to.push_back({last_row + (last_column / witness_amount), + (last_column++) % witness_amount}); + } + if (!range_check_input) { + return configuration(first_coordinate, {last_row, last_column}, copy_to, {}, {}, copy_to[0]); + } + + std::vector>> constraints; + // chunk range_check + constraints.push_back({copy_to[0]}); + for (int i = 0; i < 8; ++i) { + constraints[0].push_back({last_row + (last_column / witness_amount), + (last_column++) % witness_amount}); + } + + last_row += last_column / witness_amount; + last_column %= witness_amount; + + auto cur_config = configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, {}, copy_to[0]); + + return configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, {}, copy_to[0]); + } + static configuration configure_inner_with_padding(std::size_t witness_amount, std::size_t num_blocks, std::size_t num_bits, + bool range_check_input, std::size_t row, std::size_t column, + std::size_t num_cells, std::size_t buff) { + + std::pair first_coordinate = {row, column}; + + std::size_t last_row = row, + last_column = column; + + // relay, chunk, sum; second + std::vector> copy_to; + std::pair cell_copy_from; + if (column > 3) { + for (int i = 0; i < 3; ++i) { + copy_to.push_back({last_row + 1, i}); + } + cell_copy_from = {last_row + 1, 3}; + } else { + for (int i = 0; i < 3; ++i) { + copy_to.push_back({last_row + (last_column / witness_amount), + (last_column++) % witness_amount}); + } + cell_copy_from = {last_row + (last_column / witness_amount), + (last_column++) % witness_amount}; + } + + + std::vector> cells; + if (column > 3) { + for (int i = column; i < witness_amount; ++i) { + cells.push_back({row, i}); + } + std::size_t cells_left = num_cells - witness_amount + column; + std::size_t cur_row = row + 1, + cur_column = 4; + while (cur_column < cells_left) { + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } else { + std::size_t cur_row = row, + cur_column = column + 4; + while (cur_column - column < num_cells) { + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } + std::size_t cell_index = 0; + + std::vector>> constraints; + std::vector>> lookups(1 + range_check_input); + // chunk, first, second + constraints.push_back({copy_to[1]}); + constraints[0].push_back(cells[cell_index++]); + constraints[0].push_back(cell_copy_from); + // sum, relay, first + constraints.push_back({copy_to[2]}); + constraints[1].push_back(copy_to[0]); + constraints[1].push_back(constraints[0][1]); + // sum range_check + constraints.push_back({constraints[1][0]}); + for (int i = 0; i < 8; ++i) { + constraints[2].push_back(cells[cell_index++]); + lookups[0].push_back(constraints.back().back()); + } + // chunk range_check + if (range_check_input) { + constraints.push_back({constraints[0][0]}); + for (int i = 0; i < 8; ++i) { + constraints[3].push_back(cells[cell_index++]); + lookups[1].push_back(constraints.back().back()); + } + } + + if (cell_copy_from.first > cells.back().first) { + cells.back() = cell_copy_from; + } + + last_column = cells.back().second + 1 + buff; + last_row = cells.back().first + (last_column >= witness_amount); + last_column %= witness_amount; + + auto cur_config = configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, lookups, cell_copy_from); + + return configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, lookups, cell_copy_from); + } + static configuration configure_inner(std::size_t witness_amount, std::size_t num_blocks, std::size_t num_bits, + bool range_check_input, std::size_t limit_permutation_column, + std::size_t row, std::size_t column, + std::size_t num_cells, std::size_t buff) { + if (calculate_shift(num_blocks, num_bits) == 0) { + return configure_inner_no_padding(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column, row, column, num_cells, buff); + } + return configure_inner_with_padding(witness_amount, num_blocks, num_bits, range_check_input, row, column, num_cells, buff); + } + + static configuration configure_output(std::size_t witness_amount, std::size_t num_blocks, std::size_t num_bits, + bool range_check_input, std::size_t limit_permutation_column, + std::size_t row, std::size_t column) { + + if (column > 0) { + row += 1; + column = 0; + } + std::pair first_coordinate = {row, column}; + + std::size_t last_row = row, + last_column = column; + std::size_t shift = calculate_shift(num_blocks, num_bits); + + // relay, chunk, sum; second + std::vector> copy_to; + std::pair cell_copy_from; + + std::vector> selectors; + std::pair almost_sum; //((34-sum)*sum-1) + std::pair delta; + std::vector> values; + + for (std::size_t i = 0; i < 17; i++) { + values.push_back({last_row + (last_column / witness_amount), + (last_column++) % witness_amount}); + copy_to.push_back(values.back()); + + } + delta = {last_row + (last_column / witness_amount), (last_column++) % witness_amount}; + for (std::size_t i = 0; i < 17; i++) { + selectors.push_back({last_row + (last_column / witness_amount), + (last_column++) % witness_amount}); + + } + almost_sum = {last_row + (last_column / witness_amount), (last_column++) % witness_amount}; + + std::vector>> constraints; + std::vector>> lookups(1); + + //s_i(s_i - 2)(w_i*delta - 1)=0 && (s_i - 1)(s_i - 2)w_i=0 + for (std::size_t i = 0; i < 17; i++) { + constraints.push_back({selectors[i], values[i], delta}); + } + + lookups[0].push_back(almost_sum); + + last_row = almost_sum.first; + last_column = almost_sum.second; + if (last_column != 0) { + last_row += 1; + last_column = 0; + } + + return configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, lookups, cell_copy_from); + } + + static configuration configure_inner_range_checks(std::size_t witness_amount, std::size_t limit_permutation_column, + std::size_t row, std::size_t column) { + // regular constraints: + // copy_first * 2^k - first = 0 + // first = first_chunk0 + first_chunk1 * 2^chunk_size + ... + first_chunkk * 2^(k*chunk_size) + // copy_second * 2^(64-k) - second = 0 + // second = second_chunk0 + second_chunk1 * 2^chunk_size + ... + second_chunkk * 2^(k*chunk_size) + + std::pair first_coordinate = {row, column}; + + std::size_t last_row = row, last_column = column; + std::size_t num_chunks = 8; + std::size_t num_cells = 2 * (2 + 8); + std::size_t buff = (10 * witness_amount - num_cells) % witness_amount; + + std::vector> copy_to; + std::pair cell_copy_from; + std::vector>> constraints; + + std::vector> cells; + std::size_t cur_row = row, cur_column = 0; + while (cur_column < num_cells) { + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + std::size_t cell_index = 0; + + std::vector>> lookups(1); + + constraints.push_back({cells[cell_index++]}); + constraints[0].push_back(cells[cell_index++]); + + constraints.push_back({constraints[0].back()}); + for (std::size_t j = 0; j < num_chunks; ++j) { + constraints[1].push_back(cells[cell_index++]); + lookups[0].push_back(constraints[1].back()); + } + + constraints.push_back({cells[cell_index++]}); + constraints[2].push_back(cells[cell_index++]); + + constraints.push_back({constraints[2].back()}); + for (std::size_t j = 0; j < num_chunks; ++j) { + constraints[3].push_back(cells[cell_index++]); + lookups[0].push_back(constraints[3].back()); + } + for (int i = 0; i < 2; ++i) { + copy_to.push_back(constraints[2 * i][0]); + } + + last_column = cells.back().second + 1 + buff; + last_row = cells.back().first + (last_column / witness_amount); + last_column %= witness_amount; + + return configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, lookups, + cell_copy_from); + } + + static std::vector configure_all(std::size_t witness_amount, std::size_t num_blocks, std::size_t num_bits, + bool range_check_input, std::size_t limit_permutation_column) { + + std::vector result; + // result.push_back(configure_shift(witness_amount, 0, 0)); + std::size_t row = 0, + column = 0; + + if (calculate_shift(num_blocks, num_bits) == 0 && !range_check_input) { + for (std::size_t i = 0; i < num_blocks; ++i) { + configuration conf; + conf.copy_from = {row, column}; + conf.copy_to.push_back({row, column}); + column += 1; + if (column == limit_permutation_column) { + column = 0; + row += 1; + } + conf.last_coordinate = {row, column}; + result.push_back(conf); + } + result.push_back(configure_output(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column, row, column)); + return result; + } + + std::size_t num_cells = calculate_num_cells(num_blocks, num_bits, range_check_input); + std::size_t buff = calculate_buff(witness_amount, range_check_input); + for (std::size_t i = 0; i < num_blocks; ++i) { + auto conf = configure_inner(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column, row, column, num_cells, buff); + result.push_back(conf); + row = conf.last_coordinate.row; + column = conf.last_coordinate.column; + } + result.push_back(configure_output(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column, row, column)); + + if (calculate_shift(num_blocks, num_bits) == 0) { + return result; + } + + row = result.back().last_coordinate.row; + column = result.back().last_coordinate.column; + for (std::size_t i = 0; i < num_blocks; ++i) { + auto conf = configure_inner_range_checks(witness_amount, limit_permutation_column, row, column); + result.push_back(conf); + row = conf.last_coordinate.row; + column = conf.last_coordinate.column; + } + + return result; + } + static std::map> configure_map(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + + auto shift = calculate_shift(num_blocks, num_bits); + if (shift == 0 && !range_check_input) { + return {}; + } + + auto config = configure_all(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + std::size_t row = 0, + column = 0; + + std::map> config_map; + + for (std::size_t i = 0; i < num_blocks; ++i) { + row = config[i].first_coordinate.row; + column = config[i].first_coordinate.column; + if (config_map.find(column) != config_map.end()) { + config_map[column].push_back(row ); + } else { + config_map[column] = {row }; + } + } + + return config_map; + } + + static std::vector> configure_output_gates(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + std::vector> result; + + configuration cur_config = configure_output(witness_amount, num_blocks, num_bits, + range_check_input, limit_permutation_column, + 0, 0); + std::vector> pairs; + for (auto constr : cur_config.constraints) { + std::size_t min = constr[0].row; + std::size_t max = constr.back().row; + for (std::size_t j = 0; j < constr.size(); ++j) { + min = std::min(min, constr[j].row); + max = std::max(max, constr[j].row); + } + BOOST_ASSERT(max <= 2 + min); + pairs.push_back({min, max}); + } + std::vector cur_result; + std::size_t cur_row = 0; + std::size_t cur_constr = 0; + while (cur_constr < pairs.size()) { + configuration c; + while (cur_constr < pairs.size() && pairs[cur_constr].second <= cur_row + 2 && + pairs[cur_constr].first >= cur_row) { + c.constraints.push_back(cur_config.constraints[cur_constr]); + c.first_coordinate = {cur_row, 0}; + ++cur_constr; + } + if (cur_constr < pairs.size()) { + cur_row = pairs[cur_constr].first; + } + cur_result.push_back(c); + } + cur_result.back().lookups = cur_config.lookups; + result.push_back(cur_result); + + return result; + } + + static std::vector> configure_inner_range_check_gates(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + std::vector> result; + + configuration cur_config = configure_inner_range_checks(witness_amount, limit_permutation_column, 0, 0); + std::vector> pairs; + for (auto constr : cur_config.constraints) { + std::size_t min = constr[0].row; + std::size_t max = constr.back().row; + for (std::size_t j = 0; j < constr.size(); ++j) { + min = std::min(min, constr[j].row); + max = std::max(max, constr[j].row); + } + BOOST_ASSERT(max <= 2 + min); + pairs.push_back({min, max}); + } + std::vector cur_result; + std::size_t cur_row = 0; + std::size_t cur_constr = 0; + while (cur_constr < pairs.size()) { + configuration c; + while (cur_constr < pairs.size() && pairs[cur_constr].second <= cur_row + 2 && + pairs[cur_constr].first >= cur_row) { + c.constraints.push_back(cur_config.constraints[cur_constr]); + c.first_coordinate = {cur_row, 0}; + ++cur_constr; + } + if (cur_constr < pairs.size()) { + cur_row = pairs[cur_constr].first; + } + cur_result.push_back(c); + } + cur_result.back().lookups = cur_config.lookups; + result.push_back(cur_result); + + return result; + } + + static std::vector> configure_gates(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + + if (calculate_shift(num_blocks, num_bits) == 0 && !range_check_input) { + return {}; + } + + std::vector> result; + auto gates_configuration_map = configure_map(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + std::size_t num_cells = calculate_num_cells(num_blocks, num_bits, range_check_input); + std::size_t buff = calculate_buff(witness_amount, range_check_input); + + for (auto config: gates_configuration_map) { + configuration cur_config = configure_inner(witness_amount, num_blocks, num_bits, + range_check_input, limit_permutation_column, + 0, config.first, num_cells, buff); + std::vector> pairs; + for (auto constr : cur_config.constraints) { + std::size_t min = constr[0].row; + std::size_t max = constr.back().row; + for (std::size_t j = 0; j < constr.size(); ++j) { + min = std::min(min, constr[j].row); + max = std::max(max, constr[j].row); + } + BOOST_ASSERT(max <= 2 + min); + pairs.push_back({min, max}); + } + std::vector cur_result; + std::size_t cur_row = 0; + std::size_t cur_constr = 0; + while (cur_constr < pairs.size()) { + configuration c; + while (cur_constr < pairs.size() && pairs[cur_constr].second <= cur_row + 2 && + pairs[cur_constr].first >= cur_row) { + c.constraints.push_back(cur_config.constraints[cur_constr]); + c.first_coordinate = {cur_row, 0}; + ++cur_constr; + } + if (cur_constr < pairs.size()) { + cur_row = pairs[cur_constr].first; + } + cur_result.push_back(c); + } + result.push_back(cur_result); + } + + return result; + } + + std::vector calculate_gates_rows(std::size_t witness_amount) { + std::vector res; + std::size_t incr = 3; + std::size_t block_per_gate = 5; + std::size_t first_block = 0; + if (witness_amount == 15) { + res.push_back(0); + incr = 2; + block_per_gate = 6; + first_block = 2; + } + std::size_t cur_row = 1; + for (std::size_t i = first_block; i < num_blocks; i += block_per_gate) { + res.push_back(cur_row); + cur_row += incr; + } + + auto config = configure_all(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + auto output = configure_output_gates(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + auto row = config.back().last_coordinate.row; + if (config.back().last_coordinate.column == 0) row--; + if (output.size() == 2) { + res.push_back(row - 2); + } + res.push_back(row - 1); + return res; + } + + static std::size_t get_gates_amount(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column = 7) { + auto map = configure_map(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + auto res = map.size() * 2 + range_check_input; + auto output = configure_output_gates(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + res += output[0].size() + 1; + auto shift = calculate_shift(num_blocks, num_bits); + if (shift != 0) res += 2; + return res; + } + + static std::size_t get_rows_amount(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + auto confs = configure_all(witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + auto res = confs.back().last_coordinate.row + 1 * (confs.back().last_coordinate.column != 0); + if (res < 2) res = 2; + return res; + } + + std::map component_lookup_tables(){ + std::map lookup_tables; + lookup_tables["keccak_pack_table/range_check"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/64bit"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_sign_bit_table/full"] = 0; // REQUIRED_TABLE + return lookup_tables; + } + + template + keccak_padding(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, std::size_t num_blocks_, std::size_t num_bits_, + bool range_check_input_ = true, std::size_t limit_permutation_column_ = 7) : + component_type(witness, constant, public_input, + get_manifest(num_blocks_, num_bits_, range_check_input_, limit_permutation_column_)), + num_blocks(num_blocks_), num_bits(num_bits_), range_check_input(range_check_input_), + limit_permutation_column(limit_permutation_column_) {}; + + keccak_padding( + std::initializer_list witnesses, + std::initializer_list constants, + std::initializer_list + public_inputs, + std::size_t num_blocks_, std::size_t num_bits_, bool range_check_input_ = true, std::size_t limit_permutation_column_ = 7) : + component_type(witnesses, constants, public_inputs, + get_manifest(num_blocks_, num_bits_, range_check_input_, limit_permutation_column_)), + num_blocks(num_blocks_), num_bits(num_bits_), range_check_input(range_check_input_), + limit_permutation_column(limit_permutation_column_) {}; + + using lookup_table_definition = + typename nil::crypto3::zk::snark::lookup_table_definition; + }; + + template + using padding_component = + keccak_padding>; + + template + std::vector generate_gates( + const padding_component &component, + circuit> &bp, + assignment> + &assignment, + const typename padding_component::input_type + &instance_input, + const typename lookup_library::left_reserved_type lookup_tables_indices) { + + using component_type = padding_component; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = typename crypto3::zk::snark::plonk_lookup_constraint; + using integral_type = typename BlueprintFieldType::integral_type; + + std::vector selector_indexes; + auto gates_configuration = component.gates_configuration; + std::size_t gate_index = 0; + std::size_t lookup_gate_index = 0; + + std::vector cur_constraints; + std::vector cur_lookup_constraints; + + cur_constraints.clear(); + cur_lookup_constraints.clear(); + + if (component.shift == 0) { + if (component.range_check_input) { + auto conf = gates_configuration[0][0]; + for (std::size_t i = 1; i < 8; ++i) { + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(component.W(conf.constraints[0][i].column), static_cast(conf.constraints[0][i].row))}}); + } + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_sign_bit_table/full"), + {var(component.W(conf.constraints[0][8].column), static_cast(conf.constraints[0][8].row))}}); + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + lookup_gate_index++; + cur_lookup_constraints.clear(); + for (auto confs : gates_configuration) { + auto conf = confs[0]; + constraint_type constraint = var(conf.constraints[0][0].column, static_cast(conf.constraints[0][0].row)); + for (std::size_t i = 1; i < 9; ++i) { + constraint -= var(component.W(conf.constraints[0][i].column), static_cast(conf.constraints[0][i].row)) + * (integral_type(1) << ((i-1) * 8)); + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(component.W(conf.constraints[0][i].column), static_cast(conf.constraints[0][i].row))}}); + } + selector_indexes.push_back(bp.add_gate(constraint)); + gate_index++; + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + lookup_gate_index++; + cur_lookup_constraints.clear(); + } + } + } else { + if (component.range_check_input) { + auto conf = gates_configuration[0][0]; + for (std::size_t i = 1; i < 8; ++i) { + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(component.W(conf.constraints[2][i].column), static_cast(conf.constraints[2][i].row))}}); + } + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_sign_bit_table/full"), + {var(component.W(conf.constraints[2][8].column), static_cast(conf.constraints[2][8].row))}}); + // chunk, range_check + for (std::size_t i = 1; i < 9; ++i) { + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(component.W(conf.constraints[3][i].column), static_cast(conf.constraints[3][i].row))}}); + } + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + lookup_gate_index++; + cur_lookup_constraints.clear(); + } + for (auto confs : gates_configuration) { + auto conf = confs[0]; + // chunk, first, second + cur_constraints.push_back(constraint_type( + var(component.W(conf.constraints[0][0].column), static_cast(conf.constraints[0][0].row)) - + var(component.W(conf.constraints[0][1].column), static_cast(conf.constraints[0][1].row)) * + (integral_type(1) << (64 - component.shift)) - + var(component.W(conf.constraints[0][2].column), static_cast(conf.constraints[0][2].row)))); + // sum, relay, first + cur_constraints.push_back( + var(component.W(conf.constraints[1][0].column), static_cast(conf.constraints[1][0].row)) - + var(component.W(conf.constraints[1][1].column), static_cast(conf.constraints[1][1].row)) * + (integral_type(1) << component.shift) - + var(component.W(conf.constraints[1][2].column), static_cast(conf.constraints[1][2].row))); + // sum, range_check + constraint_type constraint = var(conf.constraints[2][0].column, static_cast(conf.constraints[2][0].row)); + for (std::size_t i = 1; i < 9; ++i) { + constraint -= var(component.W(conf.constraints[2][i].column), static_cast(conf.constraints[2][i].row)) + * (integral_type(1) << ((i-1) * 8)); + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(component.W(conf.constraints[2][i].column), static_cast(conf.constraints[2][i].row))}}); + } + cur_constraints.push_back(constraint); + if (component.range_check_input) { + // chunk, range_check + constraint = var(component.W(conf.constraints[3][0].column), static_cast(conf.constraints[3][0].row)); + for (std::size_t i = 1; i < 9; ++i) { + constraint -= var(component.W(conf.constraints[3][i].column), static_cast(conf.constraints[3][i].row)) + * (integral_type(1) << ((i-1) * 8)); + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(component.W(conf.constraints[3][i].column), static_cast(conf.constraints[3][i].row))}}); + } + cur_constraints.push_back(constraint); + } + + selector_indexes.push_back(bp.add_gate(cur_constraints)); + gate_index++; + cur_constraints.clear(); + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + lookup_gate_index++; + cur_lookup_constraints.clear(); + } + } + + auto output_gates = component.output_gates_configuration[0]; + std::size_t idx[2] = {0, 0}; + std::size_t shifts[2] = {1, 1}; + if (output_gates.size() > 1) { + idx[1] = 1; + shifts[1] = 2; + } + // (s_i - 1)(s_i - 2)w_i=0 && s_i(s_i - 2)(w_i*delta - 1)=0 + for (auto constr : output_gates[idx[0]].constraints) { + cur_constraints.push_back((var(constr[0].column, static_cast(constr[0].row) - shifts[0]) - 1) * + (var(constr[0].column, static_cast(constr[0].row) - shifts[0]) - 2) * + var(constr[1].column, static_cast(constr[1].row) - shifts[0])); + cur_constraints.push_back(var(constr[0].column, static_cast(constr[0].row) - shifts[0]) * + (var(constr[0].column, static_cast(constr[0].row) - shifts[0]) - 2) * + (var(constr[1].column, static_cast(constr[1].row) - shifts[0]) * var(constr[2].column, static_cast(constr[2].row) - shifts[0]) - 1)); + } + if (output_gates.size() > 1) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + gate_index++; + cur_constraints.clear(); + } + for (auto constr : output_gates[idx[1]].constraints) { + cur_constraints.push_back((var(constr[0].column, static_cast(constr[0].row) - shifts[1]) - 1) * + (var(constr[0].column, static_cast(constr[0].row) - shifts[1]) - 2) * + var(constr[1].column, static_cast(constr[1].row) - shifts[1])); + cur_constraints.push_back(var(constr[0].column, static_cast(constr[0].row) - shifts[1]) * + (var(constr[0].column, static_cast(constr[0].row) - shifts[1]) - 2) * + (var(constr[1].column, static_cast(constr[1].row) - shifts[1]) * var(constr[2].column, static_cast(constr[2].row) - shifts[1]) - 1)); + } + std::vector s_i; + for (std::size_t i = 0; i < 2; ++i) { + for (auto constr : output_gates[idx[i]].constraints) { + s_i.push_back(var(constr[0].column, static_cast(constr[0].row) - shifts[1])); + } + } + // s_i(s_i - 1)(s_i - 2)=0 + for (std::size_t i = 0; i < 17; ++i) { + cur_constraints.push_back(s_i[i] * (s_i[i] - 1) * (s_i[i] - 2)); + } + // s_i(s_i - 2)s_i+1=0 && (s_i+1 - s_i + 1)(s_i+1 - s_i)=0 + for (std::size_t i = 0; i < 16; ++i) { + cur_constraints.push_back(s_i[i] * (s_i[i] - 2) * s_i[i+1]); + cur_constraints.push_back((s_i[i+1] - s_i[i] + 1) * (s_i[i+1] - s_i[i])); + } + // sum + constraint_type sum = s_i[0]; + for (std::size_t i = 1; i < 17; ++i) { + sum += s_i[i]; + } + cur_constraints.push_back((34 - sum) * sum - 1 - var(output_gates[idx[1]].lookups[0][0].column, static_cast(output_gates[idx[1]].lookups[0][0].row) - shifts[1])); + + selector_indexes.push_back(bp.add_gate(cur_constraints)); + gate_index++; + cur_constraints.clear(); + + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(output_gates[idx[1]].lookups[0][0].column, static_cast(output_gates[idx[1]].lookups[0][0].row) - shifts[1])}}); + + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + lookup_gate_index++; + cur_lookup_constraints.clear(); + + if (component.shift != 0) { + auto conf = component.inner_range_check_gates_configuration[0][0]; + int row_shift = 0; + if (conf.last_coordinate.row - conf.first_coordinate.row == 2) row_shift = 1; + + cur_constraints.push_back(var(conf.constraints[0][0].column, static_cast(conf.constraints[0][0].row) - row_shift) * + (integral_type(1) << (64 - component.shift)) - + var(conf.constraints[0][1].column, static_cast(conf.constraints[0][1].row) - row_shift)); + cur_constraints.push_back(var(conf.constraints[2][0].column, static_cast(conf.constraints[2][0].row) - row_shift) * + (integral_type(1) << component.shift) - + var(conf.constraints[2][1].column, static_cast(conf.constraints[2][1].row) - row_shift)); + for (std::size_t j = 0; j < 2; ++j) { + constraint_type constraint = var(conf.constraints[2 * j + 1][0].column, static_cast(conf.constraints[2 * j + 1][0].row) - row_shift); + for (std::size_t i = 1; i < 9; ++i) { + constraint -= var(conf.constraints[2 * j + 1][i].column, static_cast(conf.constraints[2 * j + 1][i].row) - row_shift) + * (integral_type(1) << ((i-1) * 8)); + cur_lookup_constraints.push_back({lookup_tables_indices.at("keccak_pack_table/range_check"), + {var(conf.constraints[2 * j + 1][i].column, static_cast(conf.constraints[2 * j + 1][i].row) - row_shift)}}); + } + cur_constraints.push_back(constraint); + } + + selector_indexes.push_back(bp.add_gate(cur_constraints)); + gate_index++; + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + lookup_gate_index++; + } + + BOOST_ASSERT(gate_index + lookup_gate_index == component.gates_amount); + return selector_indexes; + } + + template + void generate_copy_constraints( + const padding_component &component, + circuit> &bp, + assignment> + &assignment, + const typename padding_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + using component_type = padding_component; + using var = typename component_type::var; + + const std::size_t strow = start_row_index; + std::size_t config_index = 0; + std::size_t input_index = 0; + std::vector> first_second_chunks; + std::array fs_chunk; + + std::size_t conf_index_for_input = 0; + if (component.shift != 0) { + bp.add_copy_constraint({instance_input.message[input_index++], var(component.W(0), strow, false)}); + conf_index_for_input = 1; + } + + while (config_index < component.num_blocks - 1) { + auto config = component.full_configuration[config_index]; + bp.add_copy_constraint({instance_input.message[input_index++], + var(component.W(config.copy_to[conf_index_for_input].column), + config.copy_to[conf_index_for_input].row + strow, false)}); + if (component.shift != 0) { + auto next_config = component.full_configuration[config_index + 1]; + bp.add_copy_constraint({var(component.W(config.copy_from.column), + config.copy_from.row + strow, false), + var(component.W(next_config.copy_to[0].column), + next_config.copy_to[0].row + strow, false)}); + first_second_chunks.push_back({var(component.W(config.constraints[0][1].column), + config.constraints[0][1].row + strow, false), + var(component.W(config.constraints[0][2].column), + config.constraints[0][2].row + strow, false)}); + } + config_index++; + } + if (component.shift != 0) { + auto config = component.full_configuration[config_index++]; + bp.add_copy_constraint({var(component.C(0), start_row_index + 1, false, var::column_type::constant), + var(component.W(config.copy_to[conf_index_for_input].column), + config.copy_to[conf_index_for_input].row + strow, false)}); + first_second_chunks.push_back({var(component.W(config.constraints[0][1].column), + config.constraints[0][1].row + strow, false), + var(component.W(config.constraints[0][2].column), + config.constraints[0][2].row + strow, false)}); + } else { + auto config = component.full_configuration[config_index++]; + bp.add_copy_constraint({instance_input.message[input_index++], + var(component.W(config.copy_to[conf_index_for_input].column), + config.copy_to[conf_index_for_input].row + strow, false)}); + } + + auto config = component.full_configuration[config_index]; + std::size_t idx = 0; + std::size_t prev_offset = (component.shift != 0) * 2; + for (int i = 17 - component.num_padding_zeros; i > 0; --i) { + auto prev_config = component.full_configuration[config_index - i]; + bp.add_copy_constraint({var(component.W(config.copy_to[idx].column), config.copy_to[idx++].row + strow, false), + var(component.W(prev_config.copy_to[prev_offset].column), prev_config.copy_to[prev_offset].row + strow, false)}); + } + config_index++; + + if (component.shift == 0) { + bp.add_copy_constraint({var(component.C(0), start_row_index + 1, false, var::column_type::constant), + var(component.W(config.copy_to[idx].column), config.copy_to[idx++].row + strow, false)}); + } + for (int i = 0; i < component.num_padding_zeros - (component.shift == 0); ++i) { + bp.add_copy_constraint({var(component.W(config.copy_to[idx].column), config.copy_to[idx++].row + strow, false), + var(component.C(0), start_row_index, false, var::column_type::constant)}); + } + + if (component.shift != 0) { + for (int i = 0; i < component.num_blocks; ++i) { + config = component.full_configuration[config_index++]; + bp.add_copy_constraint({first_second_chunks[i][0], var(component.W(config.constraints[0][0].column), config.constraints[0][0].row + strow, false)}); + bp.add_copy_constraint({first_second_chunks[i][1], var(component.W(config.constraints[2][0].column), config.constraints[2][0].row + strow, false)}); + } + } + } + + template + typename padding_component::result_type generate_circuit( + const padding_component &component, + circuit> &bp, + assignment> + &assignment, + const typename padding_component::input_type &instance_input, + const std::uint32_t start_row_index) { + std::cout << "Keccak padding generate_circuit rows_amount = " << component.rows_amount << " gates_amount = " << component.gates_amount << std::endl; + + using component_type = padding_component; + + auto selector_indexes = generate_gates(component, bp, assignment, instance_input, bp.get_reserved_indices()); + + auto gc_map = component.gates_configuration_map; + std::size_t sel_ind = 0; + auto gc_iter = gc_map.begin(); + + if (gc_iter != gc_map.end()) { + if (component.range_check_input) { + assignment.enable_selector(selector_indexes[sel_ind], gc_iter->second[0] + start_row_index); + sel_ind++; + assignment.enable_selector(selector_indexes[sel_ind], gc_iter->second[0] + start_row_index); + } else { + assignment.enable_selector(selector_indexes[sel_ind], gc_iter->second[0] + start_row_index); + assignment.enable_selector(selector_indexes[sel_ind + 1], gc_iter->second[0] + start_row_index); + } + for (std::size_t i = 1; i < gc_iter->second.size(); ++i) { + assignment.enable_selector(selector_indexes[sel_ind], gc_iter->second[i] + start_row_index); + assignment.enable_selector(selector_indexes[sel_ind + 1], gc_iter->second[i] + start_row_index); + } + sel_ind += 2; + gc_iter++; + + for (; gc_iter != gc_map.end(); ++gc_iter) { + for (auto gate_row : gc_iter->second) { + assignment.enable_selector(selector_indexes[sel_ind], gate_row + start_row_index); + assignment.enable_selector(selector_indexes[sel_ind + 1], gate_row + start_row_index); + } + sel_ind += 2; + } + } + auto output = component.full_configuration[component.num_blocks]; + auto output_gates = component.output_gates_configuration[0]; + assignment.enable_selector(selector_indexes[sel_ind++], output.first_coordinate.row + 1 + start_row_index); + if (output_gates.size() > 1) { + assignment.enable_selector(selector_indexes[sel_ind++], output.first_coordinate.row + 2 + start_row_index); + } + + if (component.shift != 0) { + int row_shift = 0; + auto conf = component.full_configuration[component.num_blocks + 1]; + if (conf.last_coordinate.row - conf.first_coordinate.row == 2) row_shift = 1; + for (std::size_t i = 1; i < component.num_blocks + 1; ++i) { + conf = component.full_configuration[component.num_blocks + i]; + assignment.enable_selector(selector_indexes[sel_ind], conf.first_coordinate.row + start_row_index + row_shift); + } + } + + generate_copy_constraints(component, bp, assignment, instance_input, start_row_index); + generate_assignments_constant(component, bp, assignment, instance_input, start_row_index); + + return typename component_type::result_type(component, start_row_index); + } + + template + typename padding_component::result_type generate_assignments( + const padding_component &component, + assignment> + &assignment, + const typename padding_component::input_type &instance_input, + const std::uint32_t start_row_index) { + std::cout << "Keccak padding component generate assignments" << std::endl; + + const std::size_t strow = start_row_index; + + using component_type = padding_component; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + using var = typename component_type::var; + + BOOST_ASSERT(component.num_blocks == instance_input.message.size()); + + std::size_t config_index = 0; + // range_check shift + integral_type mask_range_check = (integral_type(1) << 8) - 1; + std::vector output_values; + std::vector> non_shifted_chunk_parts; + std::vector> shifted_chunk_parts; + + if (component.shift != 0) { + integral_type relay_chunk = integral_type(var_value(assignment, instance_input.message[0]).data); + for (std::size_t index = 1; index < component.num_blocks + 1; ++index) { + value_type chunk = value_type(component.padding_delimiter); + if (index < component.num_blocks) { + chunk = var_value(assignment, instance_input.message[index]); + } + integral_type integral_chunk = integral_type(chunk.data); + integral_type mask = (integral_type(1) << (64 - component.shift)) - 1; + std::array chunk_parts = {integral_chunk >> (64 - component.shift), + integral_chunk & mask}; + non_shifted_chunk_parts.push_back(chunk_parts); + shifted_chunk_parts.push_back({chunk_parts[0] << (64 - component.shift), chunk_parts[1] << component.shift}); + integral_type sum = (relay_chunk << component.shift) + chunk_parts[0]; + output_values.push_back(value_type(sum)); + + std::vector sum_range_check; + integral_type sum_to_check = sum; + for (std::size_t i = 0; i < 7; ++i) { + sum_range_check.push_back(sum_to_check & mask_range_check); + sum_to_check >>= 8; + } + sum_range_check.push_back(sum_to_check); + + auto cur_config = component.full_configuration[config_index]; + // chunk, first, second + assignment.witness(component.W(cur_config.constraints[0][0].column), cur_config.constraints[0][0].row + strow) = chunk; + for (int j = 1; j < 3; ++j) { + assignment.witness(component.W(cur_config.constraints[0][j].column), cur_config.constraints[0][j].row + strow) = value_type(chunk_parts[j - 1]); + } + // sum, relay, first + assignment.witness(component.W(cur_config.constraints[1][0].column), cur_config.constraints[1][0].row + strow) = value_type(sum); + assignment.witness(component.W(cur_config.constraints[1][1].column), cur_config.constraints[1][1].row + strow) = value_type(relay_chunk); + assignment.witness(component.W(cur_config.constraints[1][2].column), cur_config.constraints[1][2].row + strow) = value_type(chunk_parts[0]); + // sum range_check + for (int j = 1; j < 9; ++j) { + assignment.witness(component.W(cur_config.constraints[2][j].column), cur_config.constraints[2][j].row + strow) = value_type(sum_range_check[j - 1]); + } + if (component.range_check_input) { + std::vector chunk_range_check; + integral_type chunk_to_check = integral_chunk; + for (std::size_t i = 0; i < 7; ++i) { + chunk_range_check.push_back(chunk_to_check & mask_range_check); + chunk_to_check >>= 8; + } + chunk_range_check.push_back(chunk_to_check); + // chunk range_check + for (int j = 1; j < 9; ++j) { + assignment.witness(component.W(cur_config.constraints[3][j].column), cur_config.constraints[3][j].row + strow) = value_type(chunk_range_check[j - 1]); + } + } + + relay_chunk = chunk_parts[1]; + config_index++; + } + } else { + for (std::size_t index = 0; index < component.num_blocks; ++index) { + auto cur_config = component.full_configuration[index]; + + if (component.range_check_input) { + integral_type chunk_to_check = integral_type(var_value(assignment, instance_input.message[index]).data); + integral_type mask_range_check = (integral_type(1) << 8) - 1; + std::vector chunk_range_check; + for (std::size_t i = 0; i < 8; ++i) { + chunk_range_check.push_back(chunk_to_check & mask_range_check); + chunk_to_check >>= 8; + } + // chunk range_check + for (int j = 1; j < 9; ++j) { + assignment.witness(component.W(cur_config.constraints[0][j].column), cur_config.constraints[0][j].row + strow) = value_type(chunk_range_check[j - 1]); + } + } + + assignment.witness(component.W(cur_config.copy_to[0].column), + cur_config.copy_to[0].row + strow) = + var_value(assignment, instance_input.message[index]); + output_values.push_back(var_value(assignment, instance_input.message[index])); + config_index++; + } + output_values.push_back(value_type(component.padding_delimiter)); + } + + // output + auto cur_config = component.full_configuration[config_index++]; + std::size_t idx = 0; + value_type last_nonzero = value_type(1); + value_type sum_s = value_type(0); + for (std::size_t i = output_values.size() - ((output_values.size() - 1) % 17 + 1); i < output_values.size(); ++i) { + last_nonzero = output_values[i]; + assignment.witness(component.W(cur_config.copy_to[idx].column), cur_config.copy_to[idx].row + strow) = last_nonzero; + value_type s = (i == output_values.size() - 1) ? value_type(1) : value_type(2); + assignment.witness(component.W(cur_config.constraints[idx][0].column), cur_config.constraints[idx++][0].row + strow) = s; + sum_s += s; + } + assignment.witness(component.W(cur_config.constraints[idx - 1][2].column), cur_config.constraints[idx - 1][2].row + strow) = value_type(1) / last_nonzero; + for (int i = 0; i < component.num_padding_zeros - (component.shift == 0); ++i) { + assignment.witness(component.W(cur_config.copy_to[idx].column), cur_config.copy_to[idx].row + strow) = value_type(0); + assignment.witness(component.W(cur_config.constraints[idx][0].column), cur_config.constraints[idx++][0].row + strow) = value_type(0); + } + assignment.witness(component.W(cur_config.lookups[0][0].column), cur_config.lookups[0][0].row + strow) = sum_s * (value_type(34) - sum_s) - value_type(1); + + if (component.shift != 0) { + // additional range_check + integral_type mask_range_check = (integral_type(1) << 8) - 1; + for (std::size_t i = 0; i < shifted_chunk_parts.size(); ++i) { + cur_config = component.full_configuration[config_index++]; + for (std::size_t j = 0; j < 2; ++j) { + assignment.witness(component.W(cur_config.constraints[2 * j][0].column), cur_config.constraints[2 * j][0].row + strow) = value_type(non_shifted_chunk_parts[i][j]); + assignment.witness(component.W(cur_config.constraints[2 * j][1].column), cur_config.constraints[2 * j][1].row + strow) = value_type(shifted_chunk_parts[i][j]); + + integral_type chunk_to_check = shifted_chunk_parts[i][j]; + std::vector chunk_range_check; + for (std::size_t i = 0; i < 8; ++i) { + chunk_range_check.push_back(chunk_to_check & mask_range_check); + chunk_to_check >>= 8; + } + // chunk range_check + for (int k = 1; k < 9; ++k) { + assignment.witness(component.W(cur_config.constraints[2 * j + 1][k].column), cur_config.constraints[2 * j + 1][k].row + strow) = value_type(chunk_range_check[k - 1]); + } + } + } + } + + return typename component_type::result_type(component, start_row_index); + } + + template + void generate_assignments_constant( + const padding_component &component, + circuit> &bp, + assignment> + &assignment, + const typename padding_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + using value_type = typename BlueprintFieldType::value_type; + + assignment.constant(component.C(0), start_row_index) = 0; + assignment.constant(component.C(0), start_row_index + 1) = value_type(component.padding_delimiter); + } + + } // namespace components + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_PADDING_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_round.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_round.hpp new file mode 100644 index 0000000000..3f91bfa359 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_round.hpp @@ -0,0 +1,2384 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// 2024 Valeh Farzaliyev +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_ROUND_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_ROUND_HPP + +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + template + class keccak_round; + + template + class keccak_round> + : public plonk_component { + + using component_type = plonk_component; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + using lookup_table_definition = + typename nil::crypto3::zk::snark::lookup_table_definition; + + // xor2 - base=3, xor3 - base=4, xor5 - base=6, chi - base=2, rotate - base=0 + int bases[5] = {3, 4, 6, 2, 0}; + + static std::size_t calculate_chunk_size(std::size_t num_rows, std::size_t base = 0) { + if (base == 0) + return 8; + std::size_t chunk_size = 0; + std::size_t power = base; + while (power < num_rows) { + ++chunk_size; + power *= base; + } + return chunk_size * 3; + } + static std::size_t calculate_num_chunks(std::size_t num_rows, std::size_t base = 0) { + if (base == 0) + return 8; + std::size_t chunk_size = calculate_chunk_size(num_rows, base); + std::size_t res = 192 / chunk_size + bool(192 % chunk_size); + return res; + } + static std::size_t calculate_num_cells(std::size_t num_rows, std::size_t base = 0) { + if (base == 0) + return 24; + std::size_t res = base == 3 ? 2 + 2 : base == 4 ? 3 + 2 : base == 6 ? 5 + 2 : 5; + res += 2 * calculate_num_chunks(num_rows, base); + return res; + } + static std::size_t calculate_buff(std::size_t witness_amount, std::size_t num_rows, + std::size_t base = 0) { + std::size_t buff = 0; + std::size_t cells = calculate_num_cells(num_rows, base); + if (base == 0) { + return 3 * witness_amount - cells; + } + if (base == 6) { + return witness_amount * ((cells - 1) / witness_amount + 1) - cells; + } + if (witness_amount % 9 == 0) { + while (cells % 3 != 0) { + cells++; + buff++; + } + } else if (witness_amount % 15 == 0) { + while (cells % 5 != 0) { + cells++; + buff++; + } + } + // if (base == 0 && buff < 2 * WitnessesAmount) { + // buff = 2 * WitnessesAmount - rotate_cells; + // } + return buff; + } + static std::size_t calculate_last_round_call_row(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + if (!last_round_call) { + return 0; + } + std::size_t res = 0; + auto gates_configuration_map = + configure_map(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + for (auto g : gates_configuration_map) { + if (g.first.first == 3) { + res = g.second[0]; + } + } + return res; + } + + public: + using manifest_type = nil::blueprint::plonk_component_manifest; + + class gate_manifest_type : public component_gate_manifest { + public: + std::size_t witness_amount; + bool xor_with_mes; + bool last_round_call; + std::size_t limit_permutation_column; + + static constexpr const std::size_t clamp = 15; + + gate_manifest_type(std::size_t witness_amount_, + bool xor_with_mes_, + bool last_round_call_, + std::size_t limit_permutation_column_) : + witness_amount(std::min(witness_amount_, clamp)), + xor_with_mes(xor_with_mes_), last_round_call(last_round_call_), + limit_permutation_column(limit_permutation_column_) { + } + + std::uint32_t gates_amount() const override { + return keccak_round::get_gates_amount(witness_amount, xor_with_mes, last_round_call, + limit_permutation_column); + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + gate_manifest manifest = gate_manifest( + gate_manifest_type(witness_amount, xor_with_mes, last_round_call, limit_permutation_column)); + return manifest; + } + + static manifest_type get_manifest( + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column, + std::size_t lpc_ = 7 + ) { + static manifest_type manifest = + manifest_type(std::shared_ptr(new manifest_range_param(9, 15)), false); + return manifest; + } + + using var = typename component_type::var; + + static const std::size_t lookup_rows = 65536; + // const std::size_t lookup_columns; + + // need to xor inner state with message only on the first round + const bool xor_with_mes; + // need to xor last message chunk with 0x80 or 1 only on the last round + const bool last_round_call; + // num columns for the permutation argument + const std::size_t limit_permutation_column; + + const typename BlueprintFieldType::integral_type big_rot_const = + calculate_sparse((integral_type(1) << 64) - 1); + const std::array, 29> all_rot_consts = + calculate_rot_consts(); + + const std::size_t normalize3_chunk_size = calculate_chunk_size(lookup_rows, 3); + const std::size_t normalize4_chunk_size = calculate_chunk_size(lookup_rows, 4); + const std::size_t normalize6_chunk_size = calculate_chunk_size(lookup_rows, 6); + const std::size_t chi_chunk_size = calculate_chunk_size(lookup_rows, 5); + const std::size_t rotate_chunk_size = 24; + + const std::size_t normalize3_num_chunks = calculate_num_chunks(lookup_rows, 3); + const std::size_t normalize4_num_chunks = calculate_num_chunks(lookup_rows, 4); + const std::size_t normalize6_num_chunks = calculate_num_chunks(lookup_rows, 6); + const std::size_t chi_num_chunks = calculate_num_chunks(lookup_rows, 5); + const std::size_t rotate_num_chunks = 8; + + const std::size_t xor2_cells = calculate_num_cells(lookup_rows, 3); + const std::size_t xor3_cells = calculate_num_cells(lookup_rows, 4); + const std::size_t xor5_cells = calculate_num_cells(lookup_rows, 6); + const std::size_t chi_cells = calculate_num_cells(lookup_rows, 5); + const std::size_t rotate_cells = 24; + + const std::size_t xor2_buff = calculate_buff(this->witness_amount(), lookup_rows, 3); + const std::size_t xor3_buff = calculate_buff(this->witness_amount(), lookup_rows, 4); + const std::size_t xor5_buff = calculate_buff(this->witness_amount(), lookup_rows, 6); + const std::size_t chi_buff = calculate_buff(this->witness_amount(), lookup_rows, 5); + const std::size_t rotate_buff = calculate_buff(this->witness_amount(), lookup_rows); + + const std::size_t rows_amount = + get_rows_amount(this->witness_amount(), xor_with_mes, last_round_call, limit_permutation_column); + + // full configuration is precalculated, then used in other functions + const std::size_t full_configuration_size = 17 * xor_with_mes + 85 + 29; + std::vector full_configuration = + configure_all(this->witness_amount(), xor_with_mes, last_round_call, limit_permutation_column); + // number represents relative selector index for each constraint + std::map, std::vector> gates_configuration_map = + configure_map(this->witness_amount(), xor_with_mes, last_round_call, limit_permutation_column); + std::vector> gates_configuration = + configure_gates(this->witness_amount(), xor_with_mes, last_round_call, limit_permutation_column); + std::vector> lookup_gates_configuration = configure_lookup_gates( + this->witness_amount(), xor_with_mes, last_round_call, limit_permutation_column); + + const std::size_t last_round_call_row = calculate_last_round_call_row( + this->witness_amount(), xor_with_mes, last_round_call, limit_permutation_column); + const std::size_t gates_amount = + get_gates_amount(this->witness_amount(), xor_with_mes, last_round_call, limit_permutation_column); + + const value_type sparse_3 = 0x6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB6DB_big_uint256; + + const integral_type sparse_x80 = calculate_sparse(integral_type(0x8000000000000000)); + const integral_type sparse_x7f = calculate_sparse(integral_type(0x8000000000000000 - 1)); + + constexpr static const std::array rho_offsets = { + 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 2, 14, 27, 41, 56, 8, 25, 43, 62, 18, 39, 61, 20, 44}; + + struct input_type { + std::array inner_state; + std::array padded_message_chunk; + var round_constant; + + std::vector> all_vars() { + std::vector> result; + result.insert(result.end(), inner_state.begin(), inner_state.end()); + result.insert(result.end(), padded_message_chunk.begin(), padded_message_chunk.end()); + result.push_back(round_constant); + return result; + } + }; + + struct result_type { + std::array inner_state; + + result_type() { + } + + result_type(const keccak_round &component, std::size_t start_row_index) { + std::size_t num_config = component.full_configuration.size() - 30; + inner_state[0] = + var(component.W(component.full_configuration[num_config].copy_from.column), + component.full_configuration[num_config].copy_from.row + start_row_index, false); + for (int i = 1; i < 25; ++i) { + inner_state[25 - i] = var( + component.W(component.full_configuration[num_config - i].copy_from.column), + component.full_configuration[num_config - i].copy_from.row + start_row_index, false); + } + } + + std::vector> all_vars() { + std::vector> result; + result.insert(result.end(), inner_state.begin(), inner_state.end()); + return result; + } + }; + + typename BlueprintFieldType::integral_type + calculate_sparse(const typename BlueprintFieldType::integral_type &value) const { + typename BlueprintFieldType::integral_type result = 0; + typename BlueprintFieldType::integral_type power = 1; + typename BlueprintFieldType::integral_type val = value; + while (val > 0) { + result += (val & 1) * power; + power <<= 3; + val >>= 1; + } + return result; + } + std::array, 29> calculate_rot_consts() const { + std::array, 29> result; + for (int i = 0; i < 5; ++i) { + result[i][0] = calculate_sparse((integral_type(1) << 1) - 1); + result[i][1] = calculate_sparse((integral_type(1) << 63) - 1); + } + for (int i = 1; i < 25; ++i) { + result[i + 4][0] = calculate_sparse((integral_type(1) << rho_offsets[i]) - 1); + result[i + 4][1] = calculate_sparse((integral_type(1) << (64 - rho_offsets[i])) - 1); + } + return result; + } + + integral_type normalize(const integral_type &integral_value) const { + integral_type result = 0; + integral_type value = integral_value; + integral_type power = 1; + while (value > 0) { + result += (value & 1) * power; + power <<= 3; + value >>= 3; + } + return result; + } + + integral_type chi(const integral_type &integral_value) const { + integral_type result = 0; + integral_type value = integral_value; + integral_type power = 1; + integral_type mask = 7; + int table[5] = {0, 1, 1, 0, 0}; + while (value > 0) { + int bit = table[int(value & mask)]; + result += bit * power; + power <<= 3; + value >>= 3; + } + return result; + } + + static configuration configure_inner(std::size_t witness_amount, std::size_t limit_permutation_column, + std::size_t row, std::size_t column, std::size_t num_args, + std::size_t num_chunks, std::size_t num_cells, + std::size_t buff = 0) { + + std::pair first_coordinate = {row, column}; + + std::size_t last_row = row, last_column = column; + + std::vector> copy_to; + + if (num_args + column > limit_permutation_column) { + for (int i = 0; i < num_args; ++i) { + copy_to.push_back({last_row + 1, i}); + } + } else { + for (int i = 0; i < num_args; ++i) { + copy_to.push_back( + {last_row + (last_column / witness_amount), (last_column++) % witness_amount}); + } + } + + std::pair cell_copy_from; + std::size_t final_row = (column + num_cells - 1) / witness_amount + row; + if (final_row == copy_to[0].first) { + cell_copy_from = {final_row, copy_to.back().second + 1}; + } else { + cell_copy_from = {final_row, 0}; + } + + std::vector> cells; + if (num_args + column > limit_permutation_column) { + for (int i = column; i < witness_amount; ++i) { + cells.push_back({row, i}); + } + std::size_t cells_left = num_cells - witness_amount + column; + std::size_t cur_row = row + 1, cur_column = num_args; + while (cur_column < cells_left) { + if (cur_column % witness_amount == cell_copy_from.second && + (cur_row + (cur_column / witness_amount) == cell_copy_from.first)) { + cur_column++; + continue; + } + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } else { + std::size_t cur_row = row, cur_column = column + num_args; + while (cur_column - column < num_cells) { + if (cur_column % witness_amount == cell_copy_from.second && + (cur_row + (cur_column / witness_amount) == cell_copy_from.first)) { + cur_column++; + continue; + } + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } + std::size_t cell_index = 0; + + std::vector>> constraints; + constraints.push_back({cells[cell_index++]}); + for (int i = 0; i < num_args; ++i) { + constraints[0].push_back(copy_to[i]); + } + + constraints.push_back({constraints[0][0]}); + constraints.push_back({cell_copy_from}); + std::vector>> lookups(num_chunks); + for (std::size_t i = 1; i < 3; ++i) { + for (std::size_t j = 0; j < num_chunks; ++j) { + constraints[i].push_back(cells[cell_index++]); + lookups[j].push_back(constraints[i].back()); + } + } + + if (cell_copy_from.first > cells.back().first) { + cells.back() = cell_copy_from; + } + + last_column = cells.back().second + 1 + buff; + last_row = cells.back().first + (last_column >= witness_amount); + last_column %= witness_amount; + + return configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, lookups, + cell_copy_from); + } + + static configuration configure_xor(std::size_t witness_amount, std::size_t limit_permutation_column, + std::size_t row, std::size_t column, int num_args) { + // regular constraints: + // sum = arg1 + arg2 + ... + argn + // sum = sum_chunk0 + sum_chunk1 * 2^chunk_size + ... + sum_chunkk * 2^(k*chunk_size) + // norm_sum = norm_sum_chunk0 + norm_sum_chunk1 * 2^chunk_size + ... + norm_sum_chunkk * + // 2^(k*chunk_size) + + std::size_t num_chunks = calculate_num_chunks(lookup_rows, num_args + 1); + std::size_t num_cells = calculate_num_cells(lookup_rows, num_args + 1); + std::size_t buff = calculate_buff(witness_amount, lookup_rows, num_args + 1); + + return configure_inner(witness_amount, limit_permutation_column, row, column, num_args, num_chunks, + num_cells, buff); + } + + static configuration configure_chi(std::size_t witness_amount, std::size_t limit_permutation_column, + std::size_t row, std::size_t column) { + // regular constraints: + // sum = sparse_3 - 2 * a + b - c; + // sum = sum_chunk0 + sum_chunk1 * 2^chunk_size + ... + sum_chunkk * 2^(k*chunk_size) + // chi_sum = chi_sum_chunk0 + chi_sum_chunk1 * 2^chunk_size + ... + chi_sum_chunkk * + // 2^(k*chunk_size) + + std::size_t num_args = 3; + std::size_t num_chunks = calculate_num_chunks(lookup_rows, 5); + std::size_t num_cells = calculate_num_cells(lookup_rows, 5); + std::size_t buff = calculate_buff(witness_amount, lookup_rows, 5); + + return configure_inner(witness_amount, limit_permutation_column, row, column, num_args, num_chunks, + num_cells, buff); + } + + static configuration configure_rot(std::size_t witness_amount, std::size_t limit_permutation_column, + std::size_t row, std::size_t column) { + // regular constraints: + // a = small_part * (1 << (192 - 3 * r)) + big_part; + // a_rot = big_part * (1 << (3 * r)) + small_part; + // bound_small = small_part - sparse((1 << r) - 1) + sparse((1 << 64) - 1); + // bound_small = small_chunk0 + small_chunk1 * 2^chunk_size + ... + small_chunkk * 2^(k*chunk_size) + // bound_big = big_part - sparse((1 << (64 - r)) - 1) + sparse((1 << 64) - 1); + // bound_big = big_chunk0 + big_chunk1 * 2^chunk_size + ... + big_chunkk * 2^(k*chunk_size) + // 1 << 192 = (1 << (192 - 3 * r)) * (1 << (3 * r)) + + std::pair first_coordinate = {row, column}; + + std::size_t last_row = row, last_column = column; + std::size_t num_chunks = 8; + std::size_t num_cells = 24; + + std::vector> copy_to; + std::pair cell_copy_from; + std::vector>> constraints; + + if (2 + column > limit_permutation_column) { + copy_to.push_back({last_row + 1, 0}); + cell_copy_from = {last_row + 1, 1}; + } else { + copy_to.push_back( + {last_row + (last_column / witness_amount), (last_column++) % witness_amount}); + cell_copy_from = {last_row + (last_column / witness_amount), (last_column++) % witness_amount}; + } + + std::vector> cells; + if (2 + column > limit_permutation_column) { + for (int i = column; i < witness_amount; ++i) { + cells.push_back({row, i}); + } + std::size_t cells_left = num_cells - witness_amount + column; + std::size_t cur_row = row + 1, cur_column = 2; + while (cur_column < cells_left) { + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } else { + std::size_t cur_row = row, cur_column = column + 2; + while (cur_column - column < num_cells) { + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } + std::size_t cell_index = 0; + auto rot_const = cells[cell_index++]; + auto minus_rot_const = cells[cell_index++]; + + constraints.push_back({copy_to[0]}); + constraints[0].push_back(cells[cell_index++]); + constraints[0].push_back(cells[cell_index++]); + + constraints.push_back({cell_copy_from}); + constraints[1].push_back(constraints[0][2]); + constraints[1].push_back(constraints[0][1]); + + std::vector>> lookups( + 2, std::vector>()); + + constraints.push_back({cells[cell_index++]}); + constraints[2].push_back(constraints[0][1]); + constraints.push_back({constraints[2][0]}); + for (std::size_t j = 0; j < num_chunks; ++j) { + constraints[3].push_back(cells[cell_index++]); + lookups[0].push_back(constraints[3].back()); + lookups[1].push_back(constraints[3].back()); + } + + constraints.push_back({cells[cell_index++]}); + constraints[4].push_back(constraints[0][2]); + constraints.push_back({constraints[4][0]}); + for (std::size_t j = 0; j < num_chunks; ++j) { + constraints[5].push_back(cells[cell_index++]); + lookups[0].push_back(constraints[5].back()); + lookups[1].push_back(constraints[5].back()); + } + constraints.push_back({rot_const, minus_rot_const}); + + constraints[0].push_back(constraints[6][1]); + constraints[1].push_back(constraints[6][0]); + constraints[2].push_back(constraints[6][0]); + constraints[4].push_back(constraints[6][1]); + + last_column = cells.back().second + 1 + calculate_buff(witness_amount, num_chunks); + last_row = cells.back().first + (last_column / witness_amount); + last_column %= witness_amount; + + return configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, lookups, + cell_copy_from); + } + + + static configuration configure_additional_rot(std::size_t witness_amount, std::size_t limit_permutation_column, + std::size_t row, std::size_t column) { + // regular constraints: + // small_part = small_part_chunk0 + small_part_chunk1 * 2^chunk_size + ... + small_part_chunkk * 2^(k*chunk_size) + // big_part = big_part_chunk0 + big_part_chunk1 * 2^chunk_size + ... + big_part_chunkk * 2^(k*chunk_size) + + std::pair first_coordinate = {row, column}; + + std::size_t last_row = row, last_column = column; + std::size_t num_chunks = calculate_num_chunks(lookup_rows); + std::size_t num_cells = 2 * (1 + 8); + std::size_t buff = (10 * witness_amount - num_cells) % witness_amount; + + std::vector> copy_to; + std::pair cell_copy_from; + std::vector>> constraints; + + if (2 + column > limit_permutation_column) { + copy_to.push_back({last_row + 1, 0}); + cell_copy_from = {last_row + 1, 1}; + } else { + copy_to.push_back( + {last_row + (last_column / witness_amount), (last_column++) % witness_amount}); + cell_copy_from = {last_row + (last_column / witness_amount), (last_column++) % witness_amount}; + } + + std::vector> cells; + std::size_t cur_row = row, cur_column = 0; + while (cur_column < num_cells) { + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + std::size_t cell_index = 0; + + std::vector>> lookups( + 2, std::vector>()); + + constraints.push_back({cells[cell_index++]}); + for (std::size_t j = 0; j < num_chunks; ++j) { + constraints[0].push_back(cells[cell_index++]); + lookups[0].push_back(constraints[0].back()); + lookups[1].push_back(constraints[0].back()); + } + constraints.push_back({cells[cell_index++]}); + for (std::size_t j = 0; j < num_chunks; ++j) { + constraints[1].push_back(cells[cell_index++]); + lookups[0].push_back(constraints[1].back()); + lookups[1].push_back(constraints[1].back()); + } + for (int i = 0; i < 2; ++i) { + copy_to.push_back(constraints[i][0]); + } + + last_column = cells.back().second + 1 + buff; + last_row = cells.back().first + (last_column / witness_amount); + last_column %= witness_amount; + + return configuration(first_coordinate, {last_row, last_column}, copy_to, constraints, lookups, + cell_copy_from); + } + + static std::vector configure_all(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + std::size_t full_configuration_size = 17 * xor_with_mes + 85 + 29; + auto result = std::vector(full_configuration_size); + std::size_t row = 0, column = 0; + std::size_t cur_config = 0; + + // inner_state ^ chunk + if (xor_with_mes) { + for (int i = 0; i < 17 - last_round_call; ++i) { + result[i] = configure_xor(witness_amount, limit_permutation_column, row, column, 2); + row = result[i].last_coordinate.row; + column = result[i].last_coordinate.column; + cur_config++; + } + // xor with last message chunk + if (last_round_call) { + result[cur_config] = + configure_xor(witness_amount, limit_permutation_column, row, column, 3); + row = result[cur_config].last_coordinate.row; + column = result[cur_config].last_coordinate.column; + cur_config++; + } + } + // theta + for (int i = 0; i < 5; ++i) { + result[cur_config] = configure_xor(witness_amount, limit_permutation_column, row, column, 5); + row = result[cur_config].last_coordinate.row; + column = result[cur_config].last_coordinate.column; + cur_config++; + } + for (int i = 0; i < 5; ++i) { + result[cur_config] = configure_rot(witness_amount, limit_permutation_column, row, column); + row = result[cur_config].last_coordinate.row; + column = result[cur_config].last_coordinate.column; + cur_config++; + } + for (int i = 0; i < 25; ++i) { + result[cur_config] = configure_xor(witness_amount, limit_permutation_column, row, column, 3); + row = result[cur_config].last_coordinate.row; + column = result[cur_config].last_coordinate.column; + cur_config++; + } + // rho/phi + for (int i = 0; i < 24; ++i) { + result[cur_config] = configure_rot(witness_amount, limit_permutation_column, row, column); + row = result[cur_config].last_coordinate.row; + column = result[cur_config].last_coordinate.column; + cur_config++; + } + // chi + for (int i = 0; i < 25; ++i) { + result[cur_config] = configure_chi(witness_amount, limit_permutation_column, row, column); + row = result[cur_config].last_coordinate.row; + column = result[cur_config].last_coordinate.column; + cur_config++; + } + // iota + result[cur_config] = configure_xor(witness_amount, limit_permutation_column, row, column, 2); + row = result[cur_config].last_coordinate.row; + column = result[cur_config++].last_coordinate.column; + if (column != 0) { + row++; + column = 0; + } + + // rot range checks 24+5 + for (int i = 0; i < 29; ++i) { + result[cur_config] = configure_additional_rot(witness_amount, limit_permutation_column, row, column); + row = result[cur_config].last_coordinate.row; + column = result[cur_config].last_coordinate.column; + cur_config++; + } + + // for (int i = 0; i < result.size(); ++i) { + // std::cout << "\n config: " << result[i].name << std::endl; + // std::cout << result[i].first_coordinate.row << " " << result[i].first_coordinate.column << " + // " << result[i].last_coordinate.row << " " << result[i].last_coordinate.column << std::endl; + // std::cout << result[i].copy_from.row << " " << result[i].copy_from.column << std::endl; + // for (int j = 0; j < result[i].copy_to.size(); ++j) { + // std::cout << result[i].copy_to[j].row << " " << result[i].copy_to[j].column << std::endl; + // } + // for (int j = 0; j < result[i].constraints.size(); ++j) { + // for (int k = 0; k < result[i].constraints[j].size(); ++k) { + // std::cout << result[i].constraints[j][k].row << " " << + // result[i].constraints[j][k].column << ", "; + // } + // std::cout << std::endl; + // } + // std::cout << "lookups: " << result[i].lookups.size() << std::endl; + // for (int j = 0; j < result[i].lookups.size(); ++j) { + // for (int k = 0; k < result[i].lookups[j].size(); ++k) { + // std::cout << result[i].lookups[j][k].row << " " << result[i].lookups[j][k].column << + // ", "; + // } + // std::cout << std::endl; + // } + // } + + return result; + } + + static std::map, std::vector> + configure_map(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + auto config = + configure_all(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + std::size_t row = 0, column = 0; + std::size_t cur_config = 0; + + std::map, std::vector> config_map; + + // inner_state ^ chunk + if (xor_with_mes) { + for (int i = 0; i < 17 - last_round_call; ++i) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {2, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + // xor with last message chunk + if (last_round_call) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {3, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + } + // theta + for (int i = 0; i < 5; ++i) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {5, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + for (int i = 0; i < 5; ++i) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {7, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + for (int i = 0; i < 25; ++i) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {3, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + // rho/phi + for (int i = 0; i < 24; ++i) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {7, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + // chi + for (int i = 0; i < 25; ++i) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {0, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + // iota + row = config[cur_config].first_coordinate.row; + column = config[cur_config++].first_coordinate.column; + std::pair zero_config = {2, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + // additional rot range checks + for (int i = 0; i < 29; ++i) { + row = config[cur_config].first_coordinate.row; + column = config[cur_config].first_coordinate.column; + std::pair zero_config = {10, column}; + if (config_map.find(zero_config) != config_map.end()) { + config_map[zero_config].push_back(row); + } else { + config_map[zero_config] = {row}; + } + cur_config++; + } + + return config_map; + } + + static std::vector> configure_gates(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + + std::vector> result; + auto gates_configuration_map = + configure_map(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + + for (auto config : gates_configuration_map) { + configuration cur_config; + switch (config.first.first) { + case 2: + cur_config = + configure_xor(witness_amount, limit_permutation_column, 0, config.first.second, 2); + break; + case 3: + cur_config = + configure_xor(witness_amount, limit_permutation_column, 0, config.first.second, 3); + break; + case 5: + cur_config = + configure_xor(witness_amount, limit_permutation_column, 0, config.first.second, 5); + break; + case 7: + cur_config = + configure_rot(witness_amount, limit_permutation_column, 0, config.first.second); + break; + case 0: + cur_config = + configure_chi(witness_amount, limit_permutation_column, 0, config.first.second); + break; + case 10: + cur_config = + configure_additional_rot(witness_amount, limit_permutation_column, 0, config.first.second); + break; + } + + // std::cout << "\nconfig:\n"; + // std::cout << config.first.first << "\n"; + // std::cout << cur_config.first_coordinate.row << " " << cur_config.first_coordinate.column << + // " " << cur_config.last_coordinate.row << " " << cur_config.last_coordinate.column << + // std::endl; std::cout << cur_config.copy_from.row << " " << cur_config.copy_from.column << + // std::endl; for (int j = 0; j < cur_config.copy_to.size(); ++j) { + // std::cout << cur_config.copy_to[j].row << " " << cur_config.copy_to[j].column << + // std::endl; + // } + // for (int j = 0; j < cur_config.constraints.size(); ++j) { + // for (int k = 0; k < cur_config.constraints[j].size(); ++k) { + // std::cout << cur_config.constraints[j][k].row << " " << + // cur_config.constraints[j][k].column << ", "; + // } + // std::cout << std::endl; + // } + + std::vector> pairs; + for (auto constr : cur_config.constraints) { + std::size_t min = constr[0].row; + std::size_t max = constr.back().row; + for (std::size_t j = 0; j < constr.size(); ++j) { + min = std::min(min, constr[j].row); + max = std::max(max, constr[j].row); + } + BOOST_ASSERT(max <= 2 + min); + pairs.push_back({min, max}); + } + std::vector cur_result; + std::size_t cur_row = 0; + std::size_t cur_constr = 0; + while (cur_constr < pairs.size()) { + configuration c; + while (cur_constr < pairs.size() && pairs[cur_constr].second <= cur_row + 2 && + pairs[cur_constr].first >= cur_row) { + c.constraints.push_back(cur_config.constraints[cur_constr]); + c.first_coordinate = {cur_row, 0}; + ++cur_constr; + } + if (cur_constr < pairs.size()) { + cur_row = pairs[cur_constr].first; + } + cur_result.push_back(c); + } + result.push_back(cur_result); + } + + return result; + } + + static std::vector> + configure_lookup_gates(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + auto full_configuration = + configure_all(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + std::vector> result; + auto gates_configuration_map = + configure_map(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + + for (auto config : gates_configuration_map) { + configuration cur_config; + switch (config.first.first) { + case 2: + cur_config = + configure_xor(witness_amount, limit_permutation_column, 0, config.first.second, 2); + break; + case 3: + cur_config = + configure_xor(witness_amount, limit_permutation_column, 0, config.first.second, 3); + break; + case 5: + cur_config = + configure_xor(witness_amount, limit_permutation_column, 0, config.first.second, 5); + break; + case 7: + cur_config = + configure_rot(witness_amount, limit_permutation_column, 0, config.first.second); + break; + case 0: + cur_config = + configure_chi(witness_amount, limit_permutation_column, 0, config.first.second); + break; + case 10: + cur_config = + configure_additional_rot(witness_amount, limit_permutation_column, 0, config.first.second); + break; + } + + std::vector> pairs; + for (auto constr : cur_config.lookups) { + std::size_t min = constr[0].row; + std::size_t max = constr.back().row; + for (std::size_t j = 0; j < constr.size(); ++j) { + min = std::min(min, constr[j].row); + max = std::max(max, constr[j].row); + } + BOOST_ASSERT(max <= 2 + min); + pairs.push_back({min, max}); + } + + std::vector cur_result; + std::size_t cur_row = 0; + std::size_t cur_constr = 0; + bool found; + while (cur_constr < pairs.size()) { + configuration c; + found = false; + while (cur_constr < pairs.size() && pairs[cur_constr].second <= cur_row + 2 && + pairs[cur_constr].first >= cur_row) { + c.lookups.push_back(cur_config.lookups[cur_constr]); + c.first_coordinate = {cur_row, 0}; + ++cur_constr; + found = true; + } + if (cur_constr < pairs.size()) { + cur_row = pairs[cur_constr].first; + } + if (found) { + cur_result.push_back(c); + } + } + result.push_back(cur_result); + } + // std::size_t cur_row = 0; + // std::size_t cur_constr = 0; + // while (cur_row < rows_amount) { + // while (cur_constr < pairs.size() && pairs[cur_constr].second <= cur_row + 2 && + // pairs[cur_constr].first >= cur_row) { + // result.push_back(cur_row + 1); + // ++cur_constr; + // } + // if (cur_constr == pairs.size()) { + // break; + // } + // cur_row = pairs[cur_constr].first; + // } + return result; + } + static std::size_t get_gates_amount(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + std::size_t res = 0; + auto gates_configuration = + configure_gates(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + for (std::size_t i = 0; i < gates_configuration.size(); ++i) { + res += gates_configuration[i].size(); + } + auto lookup_gates_configuration = + configure_lookup_gates(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + for (std::size_t i = 0; i < lookup_gates_configuration.size(); ++i) { + res += lookup_gates_configuration[i].size(); + } + return res; + } + + static std::size_t get_rows_amount(std::size_t witness_amount, + bool xor_with_mes, + bool last_round_call, + std::size_t limit_permutation_column) { + std::size_t xor2_cells = calculate_num_cells(lookup_rows, 3); + std::size_t xor3_cells = calculate_num_cells(lookup_rows, 4); + std::size_t xor5_cells = calculate_num_cells(lookup_rows, 6); + std::size_t chi_cells = calculate_num_cells(lookup_rows, 5); + std::size_t rotate_cells = calculate_num_cells(lookup_rows); + std::size_t additional_rotate_cells = 2 * (1 + 8); + std::size_t xor2_buff = calculate_buff(witness_amount, lookup_rows, 3); + std::size_t xor3_buff = calculate_buff(witness_amount, lookup_rows, 4); + std::size_t xor5_buff = calculate_buff(witness_amount, lookup_rows, 6); + std::size_t chi_buff = calculate_buff(witness_amount, lookup_rows, 5); + std::size_t rotate_buff = calculate_buff(witness_amount, lookup_rows); + std::size_t additional_rotate_buff = (10 * witness_amount - additional_rotate_cells) % witness_amount; + + std::size_t num_cells = + (xor3_cells + xor3_buff) * last_round_call * xor_with_mes + // xor with last message chunk + ((17 - last_round_call) * (xor2_cells + xor2_buff)) * xor_with_mes + // inner_state ^ chunk + 5 * (xor5_cells + xor5_buff) + // theta + 5 * (rotate_cells + rotate_buff) + // theta + 25 * (xor3_cells + xor3_buff) + // theta + 24 * (rotate_cells + rotate_buff) + // rho/phi + 25 * (chi_cells + chi_buff) + // chi + xor2_cells + xor2_buff + // iota + 29 * (additional_rotate_cells + additional_rotate_buff); // additional rotate + // return num_cells / witness_amount + bool(num_cells % witness_amount); + auto config = configure_all(witness_amount, xor_with_mes, last_round_call, limit_permutation_column); + return config.back().last_coordinate.row + (config.back().last_coordinate.column > 0); + } + + std::map component_lookup_tables() { + std::map lookup_tables; + lookup_tables["keccak_normalize3_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize4_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize6_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_chi_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_sparse"] = 0; // REQUIRED_TABLE + return lookup_tables; + } + + template + keccak_round(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, bool xor_with_mes_ = false, + bool last_round_call_ = false, std::size_t lpc_ = 7) : + component_type(witness, constant, public_input, + get_manifest(xor_with_mes_, last_round_call_, lpc_)), + xor_with_mes(xor_with_mes_), last_round_call(last_round_call_), limit_permutation_column(lpc_) + { + // check_params(); + std::cout + << "Keccak round witness amount = " << witness.size() + << " xor_with_mes = " << xor_with_mes_ + << " last_round_call = " << last_round_call_ + << " limit_permutation_column = " << lpc_ + << std::endl; + std::cout << "Keccak round rows amount = " << rows_amount << " gates amount = " << get_gate_manifest( + witness.size(), xor_with_mes, last_round_call, limit_permutation_column + ).get_gates_amount() << std::endl; + }; + + keccak_round(std::initializer_list + witnesses, + std::initializer_list + constants, + std::initializer_list + public_inputs, + bool xor_with_mes_ = false, + bool last_round_call_ = false, + std::size_t lpc_ = 7) : + component_type(witnesses, constants, public_inputs, + get_manifest(xor_with_mes_, last_round_call_, lpc_)), + xor_with_mes(xor_with_mes_), last_round_call(last_round_call_), limit_permutation_column(lpc_) + { + // check_params(); + std::cout + << "Keccak round witness amount amount = " << witnesses.size() + << " xor_with_mes = " << xor_with_mes_ + << " last_round_call = " << last_round_call_ + << " limit_permutation_column = " << lpc_ + << std::endl; + std::cout << "Keccak round rows amount amount = " << rows_amount << std::endl; + std::cout << "Keccak round gates amount = " << get_gate_manifest( + witnesses.size(), xor_with_mes, last_round_call, limit_permutation_column + ).get_gates_amount() << std::endl; + }; + }; + + template + using keccak_round_component = + keccak_round>; + + template + std::vector generate_gates( + const keccak_round_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_round_component::input_type &instance_input, + const typename lookup_library::left_reserved_type lookup_tables_indices) { + using component_type = keccak_round_component; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = typename crypto3::zk::snark::plonk_lookup_constraint; + using integral_type = typename BlueprintFieldType::integral_type; + + auto gate_map = component.gates_configuration_map; + auto gate_config = component.gates_configuration; + auto lookup_gate_config = component.lookup_gates_configuration; + + std::vector selector_indexes; + std::vector constraints; + std::vector lookup_constraints; + + // general gates + std::size_t index = 0; + for (auto gm : gate_map) { + std::vector cur_config_vec = gate_config[index]; + std::size_t i = 0, j = 0, cur_len = 0; + std::vector cur_constraints; + std::vector cur_lookup_config_vec = lookup_gate_config[index]; + std::vector cur_lookup_constraints; + std::string cur_lookup_table_name; + switch (gm.first.first) { + case 2: { + cur_constraints.push_back( + constraint_type(var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][2].column, + cur_config_vec[i].constraints[j][2].row - + cur_config_vec[i].first_coordinate.row - 1) - + var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1))); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_1 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.normalize3_num_chunks; ++k) { + constraint_1 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.normalize3_chunk_size)); + } + cur_constraints.push_back(constraint_1); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_2 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.normalize3_num_chunks; ++k) { + constraint_2 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.normalize3_chunk_size)); + } + cur_constraints.push_back(constraint_2); + selector_indexes.push_back(bp.add_gate(cur_constraints)); + + cur_lookup_table_name = "keccak_normalize3_table/full"; + break; + } + case 3: { + cur_constraints.push_back(var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][2].column, + cur_config_vec[i].constraints[j][2].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][3].column, + cur_config_vec[i].constraints[j][3].row - + cur_config_vec[i].first_coordinate.row - 1) - + var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1)); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_1 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.normalize4_num_chunks; ++k) { + constraint_1 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.normalize4_chunk_size)); + } + cur_constraints.push_back(constraint_1); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_2 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.normalize4_num_chunks; ++k) { + constraint_2 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.normalize4_chunk_size)); + } + cur_constraints.push_back(constraint_2); + selector_indexes.push_back(bp.add_gate(cur_constraints)); + + cur_lookup_table_name = "keccak_normalize4_table/full"; + break; + } + case 5: { + cur_constraints.push_back(var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][2].column, + cur_config_vec[i].constraints[j][2].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][3].column, + cur_config_vec[i].constraints[j][3].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][4].column, + cur_config_vec[i].constraints[j][4].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][5].column, + cur_config_vec[i].constraints[j][5].row - + cur_config_vec[i].first_coordinate.row - 1) - + var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1)); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_1 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.normalize6_num_chunks; ++k) { + constraint_1 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.normalize6_chunk_size)); + } + cur_constraints.push_back(constraint_1); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_2 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.normalize6_num_chunks; ++k) { + constraint_2 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.normalize6_chunk_size)); + } + cur_constraints.push_back(constraint_2); + selector_indexes.push_back(bp.add_gate(cur_constraints)); + + cur_lookup_table_name = "keccak_normalize6_table/full"; + break; + } + case 7: { + std::size_t true_first_row = cur_config_vec[i].first_coordinate.row; + + cur_constraints.push_back(var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - + cur_config_vec[i].first_coordinate.row - 1) * + var(cur_config_vec[i].constraints[j][3].column, + cur_config_vec[i].constraints[j][3].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[j][2].column, + cur_config_vec[i].constraints[j][2].row - + cur_config_vec[i].first_coordinate.row - 1) - + var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1)); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + cur_constraints.push_back(var(cur_config_vec[i].constraints[1][1].column, + cur_config_vec[i].constraints[1][1].row - + cur_config_vec[i].first_coordinate.row - 1) * + var(cur_config_vec[i].constraints[j][3].column, + cur_config_vec[i].constraints[j][3].row - + cur_config_vec[i].first_coordinate.row - 1) + + var(cur_config_vec[i].constraints[1][2].column, + cur_config_vec[i].constraints[1][2].row - + cur_config_vec[i].first_coordinate.row - 1) - + var(cur_config_vec[i].constraints[1][0].column, + cur_config_vec[i].constraints[1][0].row - + cur_config_vec[i].first_coordinate.row - 1)); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + cur_constraints.push_back( + var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - cur_config_vec[i].first_coordinate.row - + 1) - + var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - cur_config_vec[i].first_coordinate.row - + 1) + + var(component.C(0), true_first_row + 1 - cur_config_vec[i].first_coordinate.row - 1, + true, var::column_type::constant) - + component.big_rot_const); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_1 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.rotate_num_chunks; ++k) { + constraint_1 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.rotate_chunk_size)); + } + cur_constraints.push_back(constraint_1); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + cur_constraints.push_back( + var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - cur_config_vec[i].first_coordinate.row - + 1) - + var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - cur_config_vec[i].first_coordinate.row - + 1) + + var(component.C(0), true_first_row + 2 - cur_config_vec[i].first_coordinate.row - 1, + true, var::column_type::constant) - + component.big_rot_const); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_2 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.rotate_num_chunks; ++k) { + constraint_2 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.rotate_chunk_size)); + } + cur_constraints.push_back(constraint_2); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + cur_constraints.push_back(var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1) * + var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - + cur_config_vec[i].first_coordinate.row - 1) - + (integral_type(1) << 192)); + + selector_indexes.push_back(bp.add_gate(cur_constraints)); + + cur_lookup_table_name = "keccak_pack_table/range_check_sparse"; + break; + } + case 10: { + std::size_t true_first_row = cur_config_vec[i].first_coordinate.row; + + constraint_type constraint_1 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.rotate_num_chunks; ++k) { + constraint_1 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.rotate_chunk_size)); + } + cur_constraints.push_back(constraint_1); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_2 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.rotate_num_chunks; ++k) { + constraint_2 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.rotate_chunk_size)); + } + cur_constraints.push_back(constraint_2); + + selector_indexes.push_back(bp.add_gate(cur_constraints)); + //std::cout << selector_indexes.back() << std::endl; + + cur_lookup_table_name = "keccak_pack_table/range_check_sparse"; + break; + } + case 0: { + cur_constraints.push_back(component.sparse_3 - + var(cur_config_vec[i].constraints[j][1].column, + cur_config_vec[i].constraints[j][1].row - + cur_config_vec[i].first_coordinate.row - 1) * + 2 + + var(cur_config_vec[i].constraints[j][2].column, + cur_config_vec[i].constraints[j][2].row - + cur_config_vec[i].first_coordinate.row - 1) - + var(cur_config_vec[i].constraints[j][3].column, + cur_config_vec[i].constraints[j][3].row - + cur_config_vec[i].first_coordinate.row - 1) - + var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1)); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_1 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.chi_num_chunks; ++k) { + constraint_1 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.chi_chunk_size)); + } + cur_constraints.push_back(constraint_1); + + j++; + cur_len = cur_config_vec[i].constraints.size(); + if (j >= cur_len) { + selector_indexes.push_back(bp.add_gate(cur_constraints)); + cur_constraints.clear(); + } + i += j / cur_len; + j %= cur_len; + + constraint_type constraint_2 = var(cur_config_vec[i].constraints[j][0].column, + cur_config_vec[i].constraints[j][0].row - + cur_config_vec[i].first_coordinate.row - 1); + for (std::size_t k = 0; k < component.chi_num_chunks; ++k) { + constraint_2 -= var(cur_config_vec[i].constraints[j][k + 1].column, + cur_config_vec[i].constraints[j][k + 1].row - + cur_config_vec[i].first_coordinate.row - 1) * + (integral_type(1) << (k * component.chi_chunk_size)); + } + cur_constraints.push_back(constraint_2); + selector_indexes.push_back(bp.add_gate(cur_constraints)); + + cur_lookup_table_name = "keccak_chi_table/full"; + break; + } + } + if (gm.first.first >= 7) { + for (std::size_t i = 0; i < cur_lookup_config_vec.size(); ++i) { + for (std::size_t j = 0; j < cur_lookup_config_vec[i].lookups.size(); ++j) { + lookup_constraint_type lookup_constraint = { + lookup_tables_indices.at(cur_lookup_table_name), + {var(component.W(cur_lookup_config_vec[i].lookups[j][0].column), + static_cast(cur_lookup_config_vec[i].lookups[j][0].row) - + static_cast(cur_lookup_config_vec[i].first_coordinate.row) - 1)}}; + cur_lookup_constraints.push_back(lookup_constraint); + } + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + cur_lookup_constraints.clear(); + } + ++index; + continue; + } + + for (std::size_t i = 0; i < cur_lookup_config_vec.size(); ++i) { + for (std::size_t j = 0; j < cur_lookup_config_vec[i].lookups.size(); ++j) { + lookup_constraint_type lookup_constraint = { + lookup_tables_indices.at(cur_lookup_table_name), + {var(component.W(cur_lookup_config_vec[i].lookups[j][0].column), + static_cast(cur_lookup_config_vec[i].lookups[j][0].row) - + static_cast(cur_lookup_config_vec[i].first_coordinate.row) - 1), + var(component.W(cur_lookup_config_vec[i].lookups[j][1].column), + static_cast(cur_lookup_config_vec[i].lookups[j][1].row) - + static_cast(cur_lookup_config_vec[i].first_coordinate.row) - 1)}}; + cur_lookup_constraints.push_back(lookup_constraint); + } + selector_indexes.push_back(bp.add_lookup_gate(cur_lookup_constraints)); + cur_lookup_constraints.clear(); + } + index++; + } + return selector_indexes; + } + + template + void generate_copy_constraints( + const keccak_round_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_round_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + using component_type = keccak_round_component; + using var = typename component_type::var; + + std::size_t config_index = 0; + std::size_t prev_index = 0; + auto config = component.full_configuration; + std::vector additional_rot_vars; + + if (component.xor_with_mes) { + // inner_state ^ chunk + for (int i = 0; i < 17 - component.last_round_call; ++i) { + bp.add_copy_constraint( + {instance_input.inner_state[i], + var(component.W(config[i].copy_to[0].column), + static_cast(config[i].copy_to[0].row + start_row_index), false)}); + bp.add_copy_constraint( + {instance_input.padded_message_chunk[i], + var(component.W(config[i].copy_to[1].column), + static_cast(config[i].copy_to[1].row + start_row_index), false)}); + } + config_index += 16; + if (component.last_round_call) { + bp.add_copy_constraint( + {instance_input.inner_state[config_index], + var(component.W(config[config_index].copy_to[0].column), + static_cast(config[config_index].copy_to[0].row + start_row_index), false)}); + bp.add_copy_constraint( + {instance_input.padded_message_chunk[config_index], + var(component.W(config[config_index].copy_to[1].column), + static_cast(config[config_index].copy_to[1].row + start_row_index), false)}); + bp.add_copy_constraint( + {var(component.C(0), component.last_round_call_row + start_row_index, false, + var::column_type::constant), + var(component.W(config[config_index].copy_to[2].column), + static_cast(config[config_index].copy_to[2].row + start_row_index), false)}); + } + config_index += 1; + + // theta + for (int i = 0; i < 17; ++i) { + bp.add_copy_constraint( + {{component.W(config[prev_index + i].copy_from.column), + static_cast(config[prev_index + i].copy_from.row + start_row_index), false}, + {component.W(config[config_index + i % 5].copy_to[i / 5].column), + static_cast(config[config_index + i % 5].copy_to[i / 5].row + start_row_index), + false}}); + } + for (int i = 17; i < 25; ++i) { + bp.add_copy_constraint( + {instance_input.inner_state[i], + {component.W(config[config_index + i % 5].copy_to[i / 5].column), + static_cast(config[config_index + i % 5].copy_to[i / 5].row + start_row_index), + false}}); + } + config_index += 5; + prev_index += 17; + } else { + for (int i = 0; i < 25; ++i) { + bp.add_copy_constraint( + {instance_input.inner_state[i], + {component.W(config[config_index + i % 5].copy_to[i / 5].column), + static_cast(config[config_index + i % 5].copy_to[i / 5].row + start_row_index), + false}}); + } + config_index += 5; + } + for (int i = 0; i < 5; ++i) { + bp.add_copy_constraint( + {{component.W(config[prev_index + i].copy_from.column), + static_cast(config[prev_index + i].copy_from.row + start_row_index), false}, + {component.W(config[config_index + i].copy_to[0].column), + static_cast(config[config_index + i].copy_to[0].row + start_row_index), false}}); + bp.add_copy_constraint( + {{component.W(config[config_index + i].constraints[6][0].column), + static_cast(config[config_index + i].constraints[6][0].row + start_row_index), false}, + var(component.C(0), + static_cast(config[config_index + i].first_coordinate.row + start_row_index), false, + var::column_type::constant)}); + additional_rot_vars.push_back( + var(component.W(config[config_index + i].constraints[0][1].column), + static_cast(config[config_index + i].constraints[0][1].row + start_row_index), false)); + additional_rot_vars.push_back( + var(component.W(config[config_index + i].constraints[0][2].column), + static_cast(config[config_index + i].constraints[0][2].row + start_row_index), false)); + } + config_index += 5; + prev_index += 5; + + for (int i = 0; i < 25; ++i) { + std::size_t x = i % 5; + bp.add_copy_constraint( + {{component.W(config[prev_index - 5 + i % 5].copy_to[i / 5].column), + static_cast(config[prev_index - 5 + i % 5].copy_to[i / 5].row + start_row_index), false}, + {component.W(config[config_index + i].copy_to[0].column), + static_cast(config[config_index + i].copy_to[0].row + start_row_index), false}}); + bp.add_copy_constraint( + {{component.W(config[prev_index + (x + 1) % 5].copy_from.column), + static_cast(config[prev_index + (x + 1) % 5].copy_from.row + start_row_index), false}, + {component.W(config[config_index + i].copy_to[1].column), + static_cast(config[config_index + i].copy_to[1].row + start_row_index), false}}); + bp.add_copy_constraint( + {{component.W(config[prev_index + (x + 4) % 5].copy_to[0].column), + static_cast(config[prev_index + (x + 4) % 5].copy_to[0].row + start_row_index), false}, + {component.W(config[config_index + i].copy_to[2].column), + static_cast(config[config_index + i].copy_to[2].row + start_row_index), false}}); + } + config_index += 25; + prev_index += 5; + + // rho/phi + std::size_t perm_rho[24] = {1, 10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, + 4, 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6}; + for (int i = 0; i < 24; ++i) { + bp.add_copy_constraint( + {{component.W(config[prev_index + perm_rho[i]].copy_from.column), + static_cast(config[prev_index + perm_rho[i]].copy_from.row + start_row_index), false}, + {component.W(config[config_index + i].copy_to[0].column), + static_cast(config[config_index + i].copy_to[0].row + start_row_index), false}}); + bp.add_copy_constraint( + {{component.W(config[config_index + i].constraints[6][0].column), + static_cast(config[config_index + i].constraints[6][0].row + start_row_index), false}, + var(component.C(0), + static_cast(config[config_index + i].first_coordinate.row + start_row_index), false, + var::column_type::constant)}); + additional_rot_vars.push_back( + var(component.W(config[config_index + i].constraints[0][1].column), + static_cast(config[config_index + i].constraints[0][1].row + start_row_index), false)); + additional_rot_vars.push_back( + var(component.W(config[config_index + i].constraints[0][2].column), + static_cast(config[config_index + i].constraints[0][2].row + start_row_index), false)); + } + + // chi + std::size_t perm_chi[24] = {23, 17, 5, 11, 6, 22, 1, 8, 21, 0, 2, 16, + 15, 19, 12, 7, 3, 4, 14, 18, 9, 20, 13, 10}; + std::vector B = {{component.W(config[prev_index].copy_from.column), + static_cast(config[prev_index].copy_from.row + start_row_index), false}}; + for (auto i : perm_chi) { + B.push_back({component.W(config[config_index + i].copy_from.column), + static_cast(config[config_index + i].copy_from.row + start_row_index), false}); + } + config_index += 24; + prev_index += 25; + for (int i = 0; i < 25; ++i) { + int x = i % 5; + int y = i / 5; + bp.add_copy_constraint( + {B[x + 5 * y], + {component.W(config[config_index + i].copy_to[0].column), + static_cast(config[config_index + i].copy_to[0].row + start_row_index), false}}); + bp.add_copy_constraint( + {B[(x + 1) % 5 + 5 * y], + {component.W(config[config_index + i].copy_to[1].column), + static_cast(config[config_index + i].copy_to[1].row + start_row_index), false}}); + bp.add_copy_constraint( + {B[(x + 2) % 5 + 5 * y], + {component.W(config[config_index + i].copy_to[2].column), + static_cast(config[config_index + i].copy_to[2].row + start_row_index), false}}); + } + config_index += 25; + prev_index += 24; + + // iota + bp.add_copy_constraint( + {{component.W(config[prev_index].copy_from.column), + static_cast(config[prev_index].copy_from.row + start_row_index), false}, + {component.W(config[config_index].copy_to[0].column), + static_cast(config[config_index].copy_to[0].row + start_row_index), false}}); + bp.add_copy_constraint( + {instance_input.round_constant, + {component.W(config[config_index].copy_to[1].column), + static_cast(config[config_index].copy_to[1].row + start_row_index), false}}); + config_index += 1; + + // additional rot constraints + for (std::size_t i = 0; i < 29; ++i) { + bp.add_copy_constraint( + {additional_rot_vars[2 * i], + {component.W(config[config_index + i].constraints[0][0].column), + static_cast(config[config_index + i].constraints[0][0].row + start_row_index), false}}); + bp.add_copy_constraint( + {additional_rot_vars[2 * i + 1], + {component.W(config[config_index + i].constraints[1][0].column), + static_cast(config[config_index + i].constraints[1][0].row + start_row_index), false}}); + } + } + + template + void generate_assignments_constant( + const keccak_round_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_round_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + using component_type = keccak_round_component; + using integral_type = typename BlueprintFieldType::integral_type; + + std::size_t row = start_row_index; + if (component.last_round_call) { + assignment.constant(component.C(0), row + component.last_round_call_row) = + component.sparse_x80; // sparse 0x80 + } + + auto gate_map = component.gates_configuration_map; + std::vector rotate_rows; + for (auto g : gate_map) { + if (g.first.first == 7) { + rotate_rows.insert(rotate_rows.end(), g.second.begin(), g.second.end()); + } + } + std::sort(rotate_rows.begin(), rotate_rows.end()); + for (std::size_t i = 0; i < 5; i++) { + assignment.constant(component.C(0), row + rotate_rows[i]) = integral_type(1) << 3; + assignment.constant(component.C(0), row + rotate_rows[i] + 1) = component.all_rot_consts[i][0]; + assignment.constant(component.C(0), row + rotate_rows[i] + 2) = component.all_rot_consts[i][1]; + } + for (std::size_t i = 5; i < 29; i++) { + assignment.constant(component.C(0), row + rotate_rows[i]) = + integral_type(1) << (3 * component_type::rho_offsets[i - 4]); + assignment.constant(component.C(0), row + rotate_rows[i] + 1) = component.all_rot_consts[i][0]; + assignment.constant(component.C(0), row + rotate_rows[i] + 2) = component.all_rot_consts[i][1]; + } + } + + template + typename keccak_round_component::result_type generate_circuit( + const keccak_round_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_round_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + using component_type = keccak_round_component; + generate_assignments_constant(component, bp, assignment, instance_input, start_row_index); + auto selector_indexes = + generate_gates(component, bp, assignment, instance_input, bp.get_reserved_indices()); + std::size_t ind = 0; + std::size_t index = 0; + + for (auto g : component.gates_configuration_map) { + for (std::size_t i = 0; i < component.gates_configuration[ind].size(); ++i) { + for (auto j : g.second) { + assignment.enable_selector( + selector_indexes[index], + start_row_index + j + component.gates_configuration[ind][i].first_coordinate.row + 1); + } + index++; + } + for (std::size_t i = 0; i < component.lookup_gates_configuration[ind].size(); ++i) { + for (auto j : g.second) { + assignment.enable_selector( + selector_indexes[index], + start_row_index + j + + component.lookup_gates_configuration[ind][i].first_coordinate.row + 1); + } + index++; + } + ind++; + } + + generate_copy_constraints(component, bp, assignment, instance_input, start_row_index); + return typename component_type::result_type(component, start_row_index); + } + + template + typename keccak_round_component::result_type generate_assignments( + const keccak_round_component &component, + assignment> &assignment, + const typename keccak_round_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + using component_type = keccak_round_component; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + const std::size_t strow = start_row_index; + + int config_index = 0; + + // inner_state ^ chunk + std::array A_1; + if (component.xor_with_mes) { + for (int index = 0; index < 17 - component.last_round_call; ++index) { + value_type state = var_value(assignment, instance_input.inner_state[index]); + value_type message = var_value(assignment, instance_input.padded_message_chunk[index]); + value_type sum = state + message; + integral_type integral_sum = integral_type(sum.data); + auto chunk_size = component.normalize3_chunk_size; + auto num_chunks = component.normalize3_num_chunks; + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= chunk_size; + integral_normalized_chunks.push_back(component.normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= chunk_size; + } + A_1[index] = value_type(integral_normalized_sum); + + auto cur_config = component.full_configuration[index]; + assignment.witness(component.W(cur_config.copy_to[0].column), + cur_config.copy_to[0].row + strow) = state; + assignment.witness(component.W(cur_config.copy_to[1].column), + cur_config.copy_to[1].row + strow) = message; + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + strow) = sum; + assignment.witness(component.W(cur_config.constraints[2][0].column), + cur_config.constraints[2][0].row + strow) = + value_type(integral_normalized_sum); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + strow) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[2][j].column), + cur_config.constraints[2][j].row + strow) = + value_type(integral_normalized_chunks[j - 1]); + } + } + // last round call + if (component.last_round_call) { + value_type state = var_value(assignment, instance_input.inner_state[16]); + value_type message = var_value(assignment, instance_input.padded_message_chunk[16]); + value_type sum = state + message + value_type(component.sparse_x80); + integral_type integral_sum = integral_type(sum.data); + auto chunk_size = component.normalize4_chunk_size; + auto num_chunks = component.normalize4_num_chunks; + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= chunk_size; + integral_normalized_chunks.push_back(component.normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= chunk_size; + } + A_1[16] = value_type(integral_normalized_sum); + + auto cur_config = component.full_configuration[16]; + assignment.witness(component.W(cur_config.copy_to[0].column), + cur_config.copy_to[0].row + strow) = state; + assignment.witness(component.W(cur_config.copy_to[1].column), + cur_config.copy_to[1].row + strow) = message; + assignment.witness(component.W(cur_config.copy_to[2].column), + cur_config.copy_to[2].row + strow) = value_type(component.sparse_x80); + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + strow) = sum; + assignment.witness(component.W(cur_config.constraints[2][0].column), + cur_config.constraints[2][0].row + strow) = + value_type(integral_normalized_sum); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + strow) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[2][j].column), + cur_config.constraints[2][j].row + strow) = + value_type(integral_normalized_chunks[j - 1]); + } + } + for (int i = 17; i < 25; ++i) { + A_1[i] = var_value(assignment, instance_input.inner_state[i]); + } + config_index += 17; + } else { + for (int i = 0; i < 25; ++i) { + A_1[i] = var_value(assignment, instance_input.inner_state[i]); + } + } + // std::cout << "A_1:\n"; + // for (int i = 0; i < 25; ++i) { + // std::cout << A_1[i].data << " "; + // } + // std::cout << "\n"; + + // theta + std::array C; + for (int index = 0; index < 5; ++index) { + value_type sum = 0; + for (int j = 0; j < 5; ++j) { + sum += A_1[index + 5 * j]; + } + integral_type integral_sum = integral_type(sum.data); + auto chunk_size = component.normalize6_chunk_size; + auto num_chunks = component.normalize6_num_chunks; + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= chunk_size; + integral_normalized_chunks.push_back(component.normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= chunk_size; + } + C[index] = value_type(integral_normalized_sum); + + auto cur_config = component.full_configuration[index + config_index]; + assignment.witness(component.W(cur_config.copy_to[0].column), cur_config.copy_to[0].row + strow) = + A_1[index]; + assignment.witness(component.W(cur_config.copy_to[1].column), cur_config.copy_to[1].row + strow) = + A_1[index + 5]; + assignment.witness(component.W(cur_config.copy_to[2].column), cur_config.copy_to[2].row + strow) = + A_1[index + 10]; + assignment.witness(component.W(cur_config.copy_to[3].column), cur_config.copy_to[3].row + strow) = + A_1[index + 15]; + assignment.witness(component.W(cur_config.copy_to[4].column), cur_config.copy_to[4].row + strow) = + A_1[index + 20]; + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + strow) = sum; + assignment.witness(component.W(cur_config.constraints[2][0].column), + cur_config.constraints[2][0].row + strow) = value_type(integral_normalized_sum); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + strow) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[2][j].column), + cur_config.constraints[2][j].row + strow) = + value_type(integral_normalized_chunks[j - 1]); + } + } + config_index += 5; + // std::cout << "C:\n"; + // for (int i = 0; i < 5; ++i) { + // std::cout << C[i].data << " "; + // } + // std::cout << "\n"; + + std::vector additional_rot_chunks; + + // ROT + std::array C_rot; + integral_type for_bound_smaller = component.calculate_sparse((integral_type(1) << 64) - 1) - + component.calculate_sparse((integral_type(1) << 1) - 1); + integral_type for_bound_bigger = component.calculate_sparse((integral_type(1) << 64) - 1) - + component.calculate_sparse((integral_type(1) << 63) - 1); + // std::cout << "for_bound_smaller: " << for_bound_smaller << ", for_bound_bigger: " << for_bound_bigger + // << '\n'; std::cout << component.calculate_sparse((integral_type(1) << 64) - 1) << "\n" << + // component.calculate_sparse((integral_type(1) << 63) - 1) << "\n" << + // component.calculate_sparse((integral_type(1) << 1) - 1) << "\n"; + for (int index = 0; index < 5; ++index) { + integral_type integral_C = integral_type(C[index].data); + integral_type smaller_part = integral_C >> 189; + integral_type bigger_part = integral_C & ((integral_type(1) << 189) - 1); + integral_type integral_C_rot = (bigger_part << 3) + smaller_part; + C_rot[index] = value_type(integral_C_rot); + additional_rot_chunks.push_back(smaller_part); + additional_rot_chunks.push_back(bigger_part); + // integral_type bound_smaller = smaller_part - (integral_type(1) << 3) + (integral_type(1) << 192); + // integral_type bound_bigger = bigger_part - (integral_type(1) << 189) + (integral_type(1) << 192); + integral_type bound_smaller = smaller_part + for_bound_smaller; + integral_type bound_bigger = bigger_part + for_bound_bigger; + auto copy_bound_smaller = bound_smaller; + auto copy_bound_bigger = bound_bigger; + auto chunk_size = component.rotate_chunk_size; + auto num_chunks = component.rotate_num_chunks; + std::vector integral_small_chunks; + std::vector integral_big_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_small_chunks.push_back(bound_smaller & mask); + bound_smaller >>= chunk_size; + integral_big_chunks.push_back(bound_bigger & mask); + bound_bigger >>= chunk_size; + } + // auto check = integral_big_chunks[0]; + // auto power = integral_type(1); + // for (std::size_t j = 1; j < num_chunks; ++j) { + // power <<= chunk_size; + // check += integral_big_chunks[j] * power; + // } + // std::cout << "check: " << check << ' ' << copy_bound_bigger << '\n'; + + auto cur_config = component.full_configuration[index + config_index]; + assignment.witness(component.W(cur_config.copy_to[0].column), cur_config.copy_to[0].row + strow) = + C[index]; + assignment.witness(component.W(cur_config.copy_from.column), cur_config.copy_from.row + strow) = + C_rot[index]; + assignment.witness(component.W(cur_config.constraints[0][1].column), + cur_config.constraints[0][1].row + strow) = value_type(smaller_part); + assignment.witness(component.W(cur_config.constraints[0][2].column), + cur_config.constraints[0][2].row + strow) = value_type(bigger_part); + assignment.witness(component.W(cur_config.constraints[3][0].column), + cur_config.constraints[3][0].row + strow) = value_type(copy_bound_smaller); + assignment.witness(component.W(cur_config.constraints[5][0].column), + cur_config.constraints[5][0].row + strow) = value_type(copy_bound_bigger); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[3][j].column), + cur_config.constraints[3][j].row + strow) = + value_type(integral_small_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[5][j].column), + cur_config.constraints[5][j].row + strow) = + value_type(integral_big_chunks[j - 1]); + } + assignment.witness(component.W(cur_config.constraints[6][0].column), + cur_config.constraints[6][0].row + strow) = value_type(integral_type(1) << 3); + assignment.witness(component.W(cur_config.constraints[6][1].column), + cur_config.constraints[6][1].row + strow) = value_type(integral_type(1) << 189); + } + config_index += 5; + // std::cout << "C_rot:\n"; + // for (int i = 0; i < 5; ++i) { + // std::cout << C_rot[i].data << " "; + // } + // std::cout << "\n"; + + std::array A_2; + for (int index = 0; index < 25; ++index) { + int x = index % 5; + value_type sum = A_1[index] + C_rot[(x + 1) % 5] + C[(x + 4) % 5]; + integral_type integral_sum = integral_type(sum.data); + auto chunk_size = component.normalize4_chunk_size; + auto num_chunks = component.normalize4_num_chunks; + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= chunk_size; + integral_normalized_chunks.push_back(component.normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= chunk_size; + } + A_2[index] = value_type(integral_normalized_sum); + + auto cur_config = component.full_configuration[index + config_index]; + assignment.witness(component.W(cur_config.copy_to[0].column), cur_config.copy_to[0].row + strow) = + A_1[index]; + assignment.witness(component.W(cur_config.copy_to[1].column), cur_config.copy_to[1].row + strow) = + C_rot[(x + 1) % 5]; + assignment.witness(component.W(cur_config.copy_to[2].column), cur_config.copy_to[2].row + strow) = + C[(x + 4) % 5]; + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + strow) = sum; + assignment.witness(component.W(cur_config.constraints[2][0].column), + cur_config.constraints[2][0].row + strow) = A_2[index]; + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + strow) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[2][j].column), + cur_config.constraints[2][j].row + strow) = + value_type(integral_normalized_chunks[j - 1]); + } + } + config_index += 25; + // std::cout << "A_2:\n"; + // for (int i = 0; i < 25; ++i) { + // std::cout << A_2[i].data << " "; + // } + // std::cout << "\n"; + + // rho/phi + value_type B[25]; + std::size_t perm[25] = {1, 10, 7, 11, 17, 18, 3, 5, 16, 8, 21, 24, 4, + 15, 23, 19, 13, 12, 2, 20, 14, 22, 9, 6, 1}; + B[0] = A_2[0]; + for (int index = 1; index < 25; ++index) { + int r = 3 * component.rho_offsets[index]; + int minus_r = 192 - r; + integral_type integral_A = integral_type(A_2[perm[index - 1]].data); + integral_type smaller_part = integral_A >> minus_r; + integral_type bigger_part = integral_A & ((integral_type(1) << minus_r) - 1); + integral_type integral_A_rot = (bigger_part << r) + smaller_part; + B[perm[index]] = value_type(integral_A_rot); + additional_rot_chunks.push_back(smaller_part); + additional_rot_chunks.push_back(bigger_part); + // integral_type bound_smaller = smaller_part - (integral_type(1) << r) + (integral_type(1) << 192); + // integral_type bound_bigger = bigger_part - (integral_type(1) << minus_r) + (integral_type(1) << + // 192); + integral_type bound_smaller = + smaller_part + component.calculate_sparse((integral_type(1) << 64) - 1) - + component.calculate_sparse((integral_type(1) << component.rho_offsets[index]) - 1); + integral_type bound_bigger = + bigger_part + component.calculate_sparse((integral_type(1) << 64) - 1) - + component.calculate_sparse((integral_type(1) << (64 - component.rho_offsets[index])) - 1); + auto copy_bound_smaller = bound_smaller; + auto copy_bound_bigger = bound_bigger; + auto chunk_size = component.rotate_chunk_size; + auto num_chunks = component.rotate_num_chunks; + std::vector integral_small_chunks; + std::vector integral_big_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_small_chunks.push_back(bound_smaller & mask); + bound_smaller >>= chunk_size; + integral_big_chunks.push_back(bound_bigger & mask); + bound_bigger >>= chunk_size; + } + + auto cur_config = component.full_configuration[index - 1 + config_index]; + assignment.witness(component.W(cur_config.copy_to[0].column), cur_config.copy_to[0].row + strow) = + A_2[perm[index - 1]]; + assignment.witness(component.W(cur_config.copy_from.column), cur_config.copy_from.row + strow) = + value_type(integral_A_rot); + assignment.witness(component.W(cur_config.constraints[0][1].column), + cur_config.constraints[0][1].row + strow) = value_type(smaller_part); + assignment.witness(component.W(cur_config.constraints[0][2].column), + cur_config.constraints[0][2].row + strow) = value_type(bigger_part); + assignment.witness(component.W(cur_config.constraints[3][0].column), + cur_config.constraints[3][0].row + strow) = value_type(copy_bound_smaller); + assignment.witness(component.W(cur_config.constraints[5][0].column), + cur_config.constraints[5][0].row + strow) = value_type(copy_bound_bigger); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[3][j].column), + cur_config.constraints[3][j].row + strow) = + value_type(integral_small_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[5][j].column), + cur_config.constraints[5][j].row + strow) = + value_type(integral_big_chunks[j - 1]); + } + assignment.witness(component.W(cur_config.constraints[6][0].column), + cur_config.constraints[6][0].row + strow) = value_type(integral_type(1) << r); + assignment.witness(component.W(cur_config.constraints[6][1].column), + cur_config.constraints[6][1].row + strow) = + value_type(integral_type(1) << minus_r); + } + config_index += 24; + + // chi + std::array A_3; + for (int index = 0; index < 25; ++index) { + int x = index % 5; + int y = index / 5; + value_type sum = + component.sparse_3 - 2 * B[x + 5 * y] + B[(x + 1) % 5 + 5 * y] - B[(x + 2) % 5 + 5 * y]; + integral_type integral_sum = integral_type(sum.data); + auto chunk_size = component.chi_chunk_size; + auto num_chunks = component.chi_num_chunks; + std::vector integral_chunks; + std::vector integral_chi_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + integral_type power = 1; + integral_type integral_chi_sum = 0; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= chunk_size; + integral_chi_chunks.push_back(component.chi(integral_chunks.back())); + integral_chi_sum += integral_chi_chunks.back() * power; + power <<= chunk_size; + } + A_3[index] = value_type(integral_chi_sum); + + auto cur_config = component.full_configuration[index + config_index]; + assignment.witness(component.W(cur_config.copy_to[0].column), cur_config.copy_to[0].row + strow) = + B[x + 5 * y]; + assignment.witness(component.W(cur_config.copy_to[1].column), cur_config.copy_to[1].row + strow) = + B[(x + 1) % 5 + 5 * y]; + assignment.witness(component.W(cur_config.copy_to[2].column), cur_config.copy_to[2].row + strow) = + B[(x + 2) % 5 + 5 * y]; + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + strow) = sum; + assignment.witness(component.W(cur_config.constraints[2][0].column), + cur_config.constraints[2][0].row + strow) = value_type(integral_chi_sum); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + strow) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[2][j].column), + cur_config.constraints[2][j].row + strow) = + value_type(integral_chi_chunks[j - 1]); + } + } + config_index += 25; + + // iota + value_type A_4; + { + value_type round_constant = var_value(assignment, instance_input.round_constant); + value_type sum = A_3[0] + round_constant; + integral_type integral_sum = integral_type(sum.data); + auto chunk_size = component.normalize3_chunk_size; + auto num_chunks = component.normalize3_num_chunks; + std::vector integral_chunks; + std::vector integral_normalized_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + integral_type power = 1; + integral_type integral_normalized_sum = 0; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(integral_sum & mask); + integral_sum >>= chunk_size; + integral_normalized_chunks.push_back(component.normalize(integral_chunks.back())); + integral_normalized_sum += integral_normalized_chunks.back() * power; + power <<= chunk_size; + } + A_4 = value_type(integral_normalized_sum); + + auto cur_config = component.full_configuration[config_index++]; + assignment.witness(component.W(cur_config.copy_to[0].column), cur_config.copy_to[0].row + strow) = + A_3[0]; + assignment.witness(component.W(cur_config.copy_to[1].column), cur_config.copy_to[1].row + strow) = + round_constant; + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + strow) = sum; + assignment.witness(component.W(cur_config.constraints[2][0].column), + cur_config.constraints[2][0].row + strow) = value_type(integral_normalized_sum); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + strow) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[2][j].column), + cur_config.constraints[2][j].row + strow) = + value_type(integral_normalized_chunks[j - 1]); + } + + } + // std::cout << "result:\n" << A_4.data << " "; + // for (int i = 1; i < 25; ++i) { + // std::cout << A_3[i].data << " "; + // } + // std::cout << "\n"; + + for (std::size_t i = 0; i < 29; ++i) { + auto chunk_size = component.rotate_chunk_size; + auto num_chunks = component.rotate_num_chunks; + auto copy_bound_smaller = additional_rot_chunks[2 * i]; + auto copy_bound_bigger = additional_rot_chunks[2 * i + 1]; + std::vector integral_small_chunks; + std::vector integral_big_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_small_chunks.push_back(copy_bound_smaller & mask); + copy_bound_smaller >>= chunk_size; + integral_big_chunks.push_back(copy_bound_bigger & mask); + copy_bound_bigger >>= chunk_size; + } + + auto cur_config = component.full_configuration[config_index++]; + assignment.witness(component.W(cur_config.constraints[0][0].column), + cur_config.constraints[0][0].row + strow) = value_type(additional_rot_chunks[2 * i]); + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + strow) = value_type(additional_rot_chunks[2 * i + 1]); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[0][j].column), + cur_config.constraints[0][j].row + strow) = + value_type(integral_small_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + strow) = + value_type(integral_big_chunks[j - 1]); + } + // std::cout << "last conf: " << cur_config.constraints[0][num_chunks].column << ' ' << cur_config.constraints[0][num_chunks].row << '\n'; + } + + return typename component_type::result_type(component, start_row_index); + } + + } // namespace components + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_ROUND_HPP diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_static.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_static.hpp new file mode 100644 index 0000000000..7ebc7151dc --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_static.hpp @@ -0,0 +1,1032 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// 2024 Valeh Farzaliyev +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_STATIC_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_STATIC_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + template + class keccak_static; + + template + class keccak_static> + : public plonk_component { + + using component_type = plonk_component; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + public: + using var = typename component_type::var; + + using round_component_type = + keccak_round>; + + using padding_component_type = + keccak_padding>; + + using manifest_type = nil::blueprint::plonk_component_manifest; + class gate_manifest_type : public component_gate_manifest { + public: + static const constexpr std::size_t clamp = 15; + std::size_t witness_amount; + std::size_t num_blocks; + std::size_t num_bits; + bool range_check_input; + std::size_t limit_permutation_column; + + gate_manifest_type(std::size_t witness_amount_, std::size_t num_blocks_, std::size_t num_bits_, + bool range_check_input_, std::size_t limit_permutation_column_) : + witness_amount(std::min(witness_amount_, clamp)), + num_blocks(num_blocks_), num_bits(num_bits_), range_check_input(range_check_input_), + limit_permutation_column(limit_permutation_column_) { + } + + std::uint32_t gates_amount() const override { + return get_gates_amount(witness_amount, num_blocks, num_bits, range_check_input, + limit_permutation_column); + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + gate_manifest manifest = gate_manifest(gate_manifest_type( + witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column)); + + manifest.merge_with(padding_component_type::get_gate_manifest(witness_amount, num_blocks, num_bits, + range_check_input)); + manifest.merge_with( + round_component_type::get_gate_manifest(witness_amount, true, true, limit_permutation_column)); + // manifest.merge_with(round_component_type::get_gate_manifest( + // witness_amount, lookup_column_amount, true, false, limit_permutation_column)); + // manifest.merge_with(round_component_type::get_gate_manifest( + // witness_amount, lookup_column_amount, false, false, limit_permutation_column)); + + return manifest; + } + + static manifest_type get_manifest(std::size_t num_blocks, std::size_t num_bits, bool range_check_input, + std::size_t lpc = 7) { + static manifest_type manifest = + manifest_type(std::shared_ptr(new manifest_range_param(9, 15)), false) + .merge_with( + padding_component_type::get_manifest(num_blocks, num_bits, range_check_input, lpc)) + .merge_with( + round_component_type::get_manifest(num_blocks, num_bits, range_check_input, lpc)); + return manifest; + } + + const std::size_t lookup_rows = 65536; + const std::size_t witnesses = this->witness_amount(); + + const std::size_t num_blocks; + const std::size_t num_bits; + const bool range_check_input; + const std::size_t limit_permutation_column = 7; + + const std::size_t num_round_calls = calculate_num_round_calls(num_blocks, num_bits); + const std::size_t num_configs = 4 + calculate_padded_length(num_blocks, num_bits); + + const std::size_t pack_chunk_size = 8; + const std::size_t pack_num_chunks = 8; + const std::size_t unpack_chunk_size = 24; + const std::size_t unpack_num_chunks = 8; + const std::size_t pack_cells = 2 * (pack_num_chunks + 1); + const std::size_t pack_buff = (this->witness_amount() == 15) * 2; + + padding_component_type padding; + round_component_type round_tt; + round_component_type round_tf; + round_component_type round_ff; + + std::vector full_configuration = + configure_all(this->witness_amount(), num_configs, num_round_calls, limit_permutation_column); + const std::map> gates_configuration_map = configure_map( + this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + const std::vector> gates_configuration = configure_gates( + this->witness_amount(), num_blocks, num_bits, range_check_input, limit_permutation_column); + + const std::size_t rows_amount = get_rows_amount(this->witness_amount(), num_blocks, num_bits, + range_check_input, limit_permutation_column); + const std::size_t gates_amount = get_gates_amount(this->witness_amount(), num_blocks, num_bits, + range_check_input, limit_permutation_column); + + const std::size_t round_constant[24] = {1, + 0x8082, + 0x800000000000808a, + 0x8000000080008000, + 0x808b, + 0x80000001, + 0x8000000080008081, + 0x8000000000008009, + 0x8a, + 0x88, + 0x80008009, + 0x8000000a, + 0x8000808b, + 0x800000000000008b, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x800a, + 0x800000008000000a, + 0x8000000080008081, + 0x8000000000008080, + 0x80000001, + 0x8000000080008008}; + + struct input_type { + std::vector message; + + std::vector> all_vars() { + std::vector> res; + res.reserve(message.size()); + res.insert(res.end(), message.begin(), message.end()); + return res; + } + }; + + struct result_type { + std::array final_inner_state; + + result_type(const keccak_static &component, std::size_t start_row_index) { + auto offset = + component.full_configuration[component.num_configs - 1].last_coordinate.row + + (component.full_configuration[component.num_configs - 1].last_coordinate.column > 0); + std::cout << "Keccak component result :" << std::endl; + for (std::size_t i = 0; i < 4; ++i) { + final_inner_state[i] = + var(component.W( + component.full_configuration[component.num_configs - 4 + i].copy_from.column), + start_row_index + component.rows_amount - offset + + component.full_configuration[component.num_configs - 4 + i].copy_from.row, + false); + std::cout << final_inner_state[i] << " "; + } + std::cout << std::endl; + } + std::vector> all_vars() { + return {final_inner_state[0], final_inner_state[1], final_inner_state[2], final_inner_state[3]}; + } + }; + + static std::size_t calculate_padded_length(std::size_t num_blocks, std::size_t num_bits){ + std::size_t shift = padding_component_type::calculate_shift(num_blocks, num_bits); + return num_blocks + padding_component_type::calculate_num_padding_zeros(num_blocks, shift); + } + + static std::size_t calculate_num_round_calls(std::size_t num_blocks, std::size_t num_bits) { + return (calculate_padded_length(num_blocks, num_bits)) / 17; + } + + static configuration configure_pack_unpack(std::size_t witness_amount, std::size_t row, + std::size_t column, std::size_t pack_cells, + std::size_t pack_num_chunks, std::size_t pack_buff, + std::size_t limit_permutation_column) { + // regular constraints: + // input = input0 + input1 * 2^chunk_size + ... + inputk * 2^(k*chunk_size) + // output = output0 + output1 * 2^chunk_size + ... + outputk * 2^(k*chunk_size) + + std::size_t last_row = row, last_column = column; + std::pair first_coordinate = {row, column}; + + std::vector> copy_from; + std::vector>> constraints; + + if (1 + column > limit_permutation_column) { + copy_from.push_back({last_row + 1, 0}); + } else { + copy_from.push_back( + {last_row + (last_column / witness_amount), (last_column++) % witness_amount}); + } + + std::pair cell_copy_to; + std::size_t final_row = (column + pack_cells - 1) / witness_amount + row; + if (final_row == copy_from[0].first) { + cell_copy_to = {final_row, copy_from.back().second + 1}; + } else { + cell_copy_to = {final_row, 0}; + } + + std::vector> cells; + if (1 + column > limit_permutation_column) { + for (int i = column; i < witness_amount; ++i) { + cells.push_back({row, i}); + } + std::size_t cells_left = pack_cells - witness_amount + column; + std::size_t cur_row = row + 1, cur_column = 1; + while (cur_column < cells_left) { + if (cur_column % witness_amount == cell_copy_to.second && + (cur_row + (cur_column / witness_amount) == cell_copy_to.first)) { + cur_column++; + continue; + } + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } else { + std::size_t cur_row = row, cur_column = column + 1; + while (cur_column - column < pack_cells) { + if (cur_column % witness_amount == cell_copy_to.second && + (cur_row + (cur_column / witness_amount) == cell_copy_to.first)) { + cur_column++; + continue; + } + cells.push_back({cur_row + (cur_column / witness_amount), (cur_column++) % witness_amount}); + } + } + std::size_t cell_index = 0; + + std::vector>> lookups( + pack_num_chunks, std::vector>()); + + constraints.push_back({copy_from[0]}); + constraints.push_back({cell_copy_to}); + for (std::size_t i = 0; i < 2; ++i) { + for (std::size_t j = 0; j < pack_num_chunks; ++j) { + constraints[i].push_back(cells[cell_index++]); + lookups[j].push_back(constraints[i].back()); + } + } + + last_column = cells.back().second + 1 + pack_buff; + last_row = cells.back().first + (last_column / witness_amount); + last_column %= witness_amount; + + return configuration(first_coordinate, {last_row, last_column}, copy_from, constraints, lookups, + cell_copy_to); + } + + static std::vector configure_all(std::size_t witness_amount, + const std::size_t num_configs, + const std::size_t num_round_calls, + std::size_t limit_permutation_column) { + std::vector result; + std::size_t pack_num_chunks = 8; + std::size_t pack_cells = 2 * (pack_num_chunks + 1); + std::size_t pack_buff = (witness_amount == 15) * 2; + + std::size_t row = 0, column = 0; + + for (std::size_t index = 0; index < num_round_calls * 17; ++index) { + // to sparse representation + result.push_back(configure_pack_unpack(witness_amount, row, column, pack_cells, pack_num_chunks, + pack_buff, limit_permutation_column)); + row = result[index].last_coordinate.row; + column = result[index].last_coordinate.column; + } + if (column > 0) { + column = 0; + row++; + } + + row = 0; + // from sparse representation + for (std::size_t i = 0; i < 4; ++i) { + result.push_back(configure_pack_unpack(witness_amount, row, column, pack_cells, pack_num_chunks, + pack_buff, limit_permutation_column)); + row = result.back().last_coordinate.row; + column = result.back().last_coordinate.column; + } + + // std::cout << "num_cofigs: " << result.size() << "\n"; + // for (std::size_t i = 0; i < result.size(); ++i) { + // auto cur_config = result[i]; + // std::cout << "config: " << i << "\n"; + // std::cout << cur_config.first_coordinate.row << " " << cur_config.first_coordinate.column << + // " " << cur_config.last_coordinate.row << " " << cur_config.last_coordinate.column << + // std::endl; std::cout << cur_config.copy_from.row << " " << cur_config.copy_from.column << + // std::endl; for (int j = 0; j < cur_config.copy_to.size(); ++j) { + // std::cout << cur_config.copy_to[j].row << " " << cur_config.copy_to[j].column << + // std::endl; + // } + // for (int j = 0; j < cur_config.constraints.size(); ++j) { + // for (int k = 0; k < cur_config.constraints[j].size(); ++k) { + // std::cout << cur_config.constraints[j][k].row << " " << + // cur_config.constraints[j][k].column << ", "; + // } + // std::cout << std::endl; + // } + // } + + return result; + } + + static std::map> + configure_map(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + + std::size_t num_configs = 4 + calculate_padded_length(num_blocks, num_bits); + std::size_t num_round_calls = calculate_num_round_calls(num_blocks, num_bits); + auto config = configure_all(witness_amount, num_configs, num_round_calls, limit_permutation_column); + std::size_t row = 0, column = 0; + std::map> config_map; + + for (std::size_t i = 0; i < config.size() - 4; ++i) { + row = config[i].first_coordinate.row; + column = config[i].first_coordinate.column; + if (config_map.find(column) != config_map.end()) { + config_map[column].push_back(row); + } else { + config_map[column] = {row}; + } + } + + for (std::size_t i = config.size() - 4; i < config.size(); ++i) { + row = config[i].first_coordinate.row; + column = config[i].first_coordinate.column + 10 * witness_amount; + if (config_map.find(column) != config_map.end()) { + config_map[column].push_back(row); + } else { + config_map[column] = {row}; + } + } + + // std::cout << "MAP\n"; + // for (auto c : config_map) { + // std::cout << c.first << ": "; + // for (auto r : c.second) { + // std::cout << r << " "; + // } + // std::cout << std::endl; + // } + + return config_map; + } + + static std::vector> configure_gates(std::size_t witness_amount, + std::size_t num_blocks, + std::size_t num_bits, + bool range_check_input, + std::size_t limit_permutation_column) { + std::vector> result; + auto gates_configuration_map = configure_map(witness_amount, num_blocks, num_bits, + range_check_input, limit_permutation_column); + std::size_t pack_num_chunks = 8; + std::size_t num_cells = 2 * (pack_num_chunks + 1); + std::size_t buff = (witness_amount == 15) * 2; + + for (auto config : gates_configuration_map) { + if (config.first >= 10 * witness_amount) + continue; + configuration cur_config = + configure_pack_unpack(witness_amount, 0, config.first, num_cells, pack_num_chunks, buff, + limit_permutation_column); + std::vector> pairs; + for (auto constr : cur_config.constraints) { + std::size_t min = constr[0].row; + std::size_t max = constr.back().row; + for (std::size_t j = 0; j < constr.size(); ++j) { + min = std::min(min, constr[j].row); + max = std::max(max, constr[j].row); + } + BOOST_ASSERT(max - min <= 2); + pairs.push_back({min, max}); + } + std::vector cur_result; + std::size_t cur_row = 0; + std::size_t cur_constr = 0; + while (cur_constr < pairs.size()) { + configuration c; + while (cur_constr < pairs.size() && pairs[cur_constr].second <= cur_row + 2 && + pairs[cur_constr].first >= cur_row) { + c.constraints.push_back(cur_config.constraints[cur_constr]); + c.first_coordinate = {cur_row, 0}; + ++cur_constr; + } + if (cur_constr < pairs.size()) { + cur_row = pairs[cur_constr].first; + } + cur_result.push_back(c); + } + result.push_back(cur_result); + } + + // for (std::size_t i = 0; i < result.size(); ++i) { + // std::cout << "config " << i << ":\n"; + // for (auto cur_config : result[i]) { + // std::cout << "gate:\n"; + // for (int j = 0; j < cur_config.constraints.size(); ++j) { + // for (int k = 0; k < cur_config.constraints[j].size(); ++k) { + // std::cout << cur_config.constraints[j][k].row << " " << + // cur_config.constraints[j][k].column << ", "; + // } + // std::cout << std::endl; + // } + // } + // } + + return result; + } + + static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t num_blocks, + std::size_t num_bits, bool range_check_input, + std::size_t limit_permutation_column) { + std::size_t num_round_calls = calculate_num_round_calls(num_blocks, num_bits); + std::size_t res = padding_component_type::get_rows_amount( + witness_amount, num_blocks, num_bits, range_check_input, limit_permutation_column); + + auto round_tt_rows = + round_component_type::get_rows_amount(witness_amount, true, true, limit_permutation_column); + auto round_tf_rows = + round_component_type::get_rows_amount(witness_amount, true, false, limit_permutation_column); + auto round_ff_rows = + round_component_type::get_rows_amount(witness_amount, false, false, limit_permutation_column); + + for (std::size_t i = 0; i < num_round_calls; i++) { + if (i == num_round_calls - 1) { + res += round_tt_rows; + } else { + res += round_tf_rows; + } + for (std::size_t j = 1; j < 24; ++j) { + res += round_ff_rows; + } + } + + auto config = configure_all(witness_amount, num_blocks, num_round_calls, limit_permutation_column); + auto index = config.size() - 1; + res += config[index].last_coordinate.row + (config[index].last_coordinate.column > 0); + res += config[index - 4].last_coordinate.row + (config[index - 4].last_coordinate.column > 0); + return res; + } + static std::size_t get_gates_amount(std::size_t witness_amount, std::size_t num_blocks, + std::size_t num_bits, bool range_check_input, + std::size_t limit_permutation_column) { + std::size_t res = 0; + auto config = configure_map(witness_amount, num_blocks, num_bits, range_check_input, + limit_permutation_column); + for (auto c : config) { + res += 2; + } + return res; + } + + std::map component_lookup_tables() { + std::map lookup_tables; + lookup_tables["keccak_pack_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_sign_bit_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize3_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize4_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_normalize6_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_chi_table/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_pack_table/range_check_sparse"] = 0; // REQUIRED_TABLE + return lookup_tables; + } + + template + keccak_static(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, std::size_t num_blocks_, std::size_t num_bits_, + bool range_check_input_, std::size_t lpc_ = 7) : + component_type(witness, constant, public_input, + get_manifest(num_blocks_, num_bits_, range_check_input_, lpc_)), + num_blocks(num_blocks_), num_bits(num_bits_), range_check_input(range_check_input_), + limit_permutation_column(lpc_), num_round_calls(calculate_num_round_calls(num_blocks_, num_bits_)), + padding(witness, constant, public_input, num_blocks_, num_bits_, range_check_input_, lpc_), + round_tt(witness, constant, public_input, true, true, lpc_), + round_tf(witness, constant, public_input, true, false, lpc_), + round_ff(witness, constant, public_input, false, false, lpc_) {}; + + keccak_static(std::initializer_list witnesses, + std::initializer_list constants, + std::initializer_list + public_inputs, + std::size_t num_blocks_, std::size_t num_bits_, bool range_check_input_, std::size_t lpc_ = 7) : + component_type(witnesses, constants, public_inputs), + num_blocks(num_blocks_), num_bits(num_bits_), range_check_input(range_check_input_), + limit_permutation_column(lpc_), + padding(witnesses, constants, public_inputs, num_blocks_, num_bits_, range_check_input_, lpc_), + num_round_calls(calculate_num_round_calls(num_blocks_, num_bits_)), + round_tt(witnesses, constants, public_inputs, true, true, lpc_), + round_tf(witnesses, constants, public_inputs, true, false, lpc_), + round_ff(witnesses, constants, public_inputs, false, false, lpc_) {}; + }; + + template + using keccak_static_component = keccak_static>; + + template + std::vector generate_gates( + const keccak_static_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_static_component::input_type &instance_input, + const typename lookup_library::left_reserved_type lookup_tables_indices) { + std::cout << "Keccak component::generate gates" << std::endl; + std::cout << "Input : "; + for( std::size_t i = 0; i < instance_input.message.size(); i++){ + std::cout << instance_input.message[i] << " "; + } + std::cout << std::endl; + + using component_type = keccak_static_component; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = typename crypto3::zk::snark::plonk_lookup_constraint; + using integral_type = typename BlueprintFieldType::integral_type; + + std::vector selector_indexes; + auto gates_configuration = component.gates_configuration; + + for (auto config : gates_configuration) { + std::vector lookup_constraints_0; + std::vector lookup_constraints_1; + auto conf = config[0]; + + // pack gate + constraint_type constraint_0 = + var(conf.constraints[0][0].column, static_cast(conf.constraints[0][0].row)); + constraint_type constraint_1 = + var(conf.constraints[1][0].column, static_cast(conf.constraints[1][0].row)); + + constraint_type constraint_2 = + var(conf.constraints[1][0].column, static_cast(conf.constraints[1][0].row)); + constraint_type constraint_3 = + var(conf.constraints[0][0].column, static_cast(conf.constraints[0][0].row)); + for (std::size_t i = 1; i < 9; ++i) { + constraint_0 -= + var(conf.constraints[0][i].column, static_cast(conf.constraints[0][i].row)) * + (integral_type(1) << ((i - 1) * 8)); + constraint_1 -= + var(conf.constraints[1][i].column, static_cast(conf.constraints[1][i].row)) * + (integral_type(1) << ((8 - i) * 24)); + constraint_2 -= + var(conf.constraints[1][i].column, static_cast(conf.constraints[1][i].row)) * + (integral_type(1) << ((i - 1) * 8)); + constraint_3 -= + var(conf.constraints[0][i].column, static_cast(conf.constraints[0][i].row)) * + (integral_type(1) << ((i - 1) * 24)); + lookup_constraints_0.push_back({lookup_tables_indices.at("keccak_pack_table/full"), + {var(component.W(conf.constraints[0][i].column), + static_cast(conf.constraints[0][i].row)), + var(component.W(conf.constraints[1][i].column), + static_cast(conf.constraints[1][i].row))}}); + lookup_constraints_1.push_back({lookup_tables_indices.at("keccak_pack_table/full"), + {var(component.W(conf.constraints[1][i].column), + static_cast(conf.constraints[1][i].row)), + var(component.W(conf.constraints[0][i].column), + static_cast(conf.constraints[0][i].row))}}); + } + selector_indexes.push_back(bp.add_gate({constraint_0, constraint_1})); + selector_indexes.push_back(bp.add_gate({constraint_2, constraint_3})); + selector_indexes.push_back(bp.add_lookup_gate(lookup_constraints_0)); + selector_indexes.push_back(bp.add_lookup_gate(lookup_constraints_1)); + } + + return selector_indexes; + } + + template + void generate_copy_constraints( + const keccak_static_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_static_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + using component_type = keccak_static_component; + using padding_type = typename component_type::padding_component_type; + using round_type = typename component_type::round_component_type; + using var = typename component_type::var; + std::uint32_t cur_row = start_row_index; + + std::size_t config_index = 0; + auto config = component.full_configuration; + + auto padded_message = + typename padding_type::result_type(component.padding, start_row_index).padded_message; + cur_row += component.padding.rows_amount; + + for (std::size_t i = 0; i < padded_message.size(); i++) { + bp.add_copy_constraint( + {padded_message[i], + var(component.W(config[config_index].copy_to[0].column), + static_cast(config[config_index].copy_to[0].row + cur_row), false)}); + config_index++; + } + cur_row += config[config_index - 1].last_coordinate.row + + (config[config_index - 1].last_coordinate.column > 0); + + std::array inner_state; + + // auto gate_map_tf = component.round_tf.gates_configuration_map; + // std::vector rotate_rows_tf; + // for (auto g : gate_map_tf) { + // if (g.first.first == 7) { + // rotate_rows_tf.insert(rotate_rows_tf.end(), g.second.begin(), g.second.end()); + // } + // } + // std::sort(rotate_rows_tf.begin(), rotate_rows_tf.end()); + + // auto gate_map_ff = component.round_ff.gates_configuration_map; + // std::vector rotate_rows_ff; + // for (auto g : gate_map_ff) { + // if (g.first.first == 7) { + // rotate_rows_ff.insert(rotate_rows_ff.end(), g.second.begin(), g.second.end()); + // } + // } + // std::sort(rotate_rows_ff.begin(), rotate_rows_ff.end()); + + for (int i = 0; i < component.num_round_calls; i++) { + for (int j = 0; j < 24; j++) { + // if (i + j != 0) { + // std::cout << "prev: " << prev_row << " vs curr" << cur_row << std::endl; + // for (int k = 0; k < 5; k++) { + // auto ind1 = (j == 1) ? rotate_rows_tf[k] : rotate_rows_ff[k]; + // auto ind2 = rotate_rows_ff[k]; + // std::cout << ind1 << " , " << ind2 << std::endl; + // std::cout + // << var_value(assignment, var(component.C(0), prev_row + ind1, false)).data << + // " vs " + // << var_value(assignment, var(component.C(0), cur_row + ind2, false)).data << + // std::endl; + // bp.add_copy_constraint({var(component.C(0), prev_row + ind1, false), + // var(component.C(0), cur_row + ind2, false)}); + // } + // prev_row = cur_row; + // } + if (i == component.num_round_calls - 1 && j == 0) { + cur_row += component.round_tt.rows_amount; + } else if (j == 0) { + cur_row += component.round_tf.rows_amount; + } else { + inner_state = typename round_type::result_type(component.round_ff, cur_row).inner_state; + cur_row += component.round_ff.rows_amount; + } + } + } + + for (std::size_t i = 0; i < 4; i++) { + bp.add_copy_constraint( + {inner_state[i], var(component.W(config[config_index].copy_to[0].column), + static_cast(config[config_index].copy_to[0].row + cur_row), false)}); + config_index++; + } + + cur_row += config[config_index - 1].last_coordinate.row + + (config[config_index - 1].last_coordinate.column > 0); + + BOOST_ASSERT(cur_row == start_row_index + component.rows_amount); + } + + template + typename keccak_static_component::result_type generate_circuit( + const keccak_static_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_static_component::input_type &instance_input, + const std::uint32_t start_row_index) { + std::cout << "Keccak component generate_circuit rows_amount = " << component.rows_amount << " gates_amount = " << component.gates_amount << " start_row_index = " << start_row_index << std::endl; + + BOOST_ASSERT(instance_input.message.size() == component.num_blocks); + + using component_type = keccak_static_component; + using padding_type = typename component_type::padding_component_type; + using round_type = typename component_type::round_component_type; + using var = typename component_type::var; + + generate_assignments_constant(component, bp, assignment, instance_input, start_row_index); + std::size_t row = start_row_index; + + typename padding_type::input_type padding_input = {instance_input.message}; + typename padding_type::result_type padding_result = + generate_circuit(component.padding, bp, assignment, padding_input, row); + std::cout << "Padding component rows_amount = " << component.padding.rows_amount << std::endl; + row += component.padding.rows_amount; + + auto selector_indexes = + generate_gates(component, bp, assignment, instance_input, bp.get_reserved_indices()); + auto config_map = component.gates_configuration_map; + std::size_t sel_ind = 0; + for (auto config : config_map) { + if (config.first < component.witnesses) { + for (auto gate_row : config.second) { + // std::cout << "enabling: " << selector_indexes[sel_ind] << " " + // << selector_indexes[sel_ind + 1] << " at " << gate_row + row << std::endl; + assignment.enable_selector(selector_indexes[sel_ind], gate_row + row); + assignment.enable_selector(selector_indexes[sel_ind + 2], gate_row + row); + } + //std::cout << std::endl; + sel_ind += 1; + } + } + + std::size_t config_index = 0; + std::vector sparse_padded_message_coords(padding_result.padded_message.size()); + for (std::size_t index = 0; index < padding_result.padded_message.size(); index++) { + auto cur_config = component.full_configuration[config_index]; + sparse_padded_message_coords[index] = var(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + row, false); + config_index++; + } + + row += component.full_configuration[config_index - 1].last_coordinate.row + + (component.full_configuration[config_index - 1].last_coordinate.column > 0); + + // round circuits + std::array inner_state; + for (std::uint32_t i = 0; i < 25; i++) { + inner_state[i] = var(component.C(0), start_row_index, false, var::column_type::constant); + } + std::array pmc; + std::size_t offset = 0; + for (std::size_t i = 0; i < component.num_round_calls; ++i) { + std::copy(sparse_padded_message_coords.begin() + offset, + sparse_padded_message_coords.begin() + offset + 17, + pmc.begin()); + + for (std::size_t j = 0; j < 24; ++j) { + std::cout << i<< ". " << j << ". " << std::endl; + typename round_type::input_type round_input = { + inner_state, pmc, + var(component.C(0), start_row_index + j + 2, false, var::column_type::constant)}; +/* std::cout << "Inner state: "; + for (std::size_t i = 0; i < inner_state.size(); i ++ ) std::cout << inner_state[i] << " "; + std::cout << std::endl; + std::cout << "Padded message coords:"; + for (std::size_t i = 0; i < pmc.size(); i ++ ) std::cout << pmc[i] << " "; + std::cout << std::endl << "\t";*/ + if (i == component.num_round_calls - 1 && j == 0) { + std::cout << "tt "; + typename round_type::result_type round_result = + generate_circuit(component.round_tt, bp, assignment, round_input, row); + inner_state = round_result.inner_state; + row += component.round_tt.rows_amount; + std::cout << component.round_tt.rows_amount << " : "; + } else if (j == 0) { + std::cout << "tf "; + typename round_type::result_type round_result = + generate_circuit(component.round_tf, bp, assignment, round_input, row); + inner_state = round_result.inner_state; + row += component.round_tf.rows_amount; + std::cout << component.round_tf.rows_amount << " : "; + } else { + std::cout << "ff "; + typename round_type::result_type round_result = + generate_circuit(component.round_ff, bp, assignment, round_input, row); + inner_state = round_result.inner_state; + row += component.round_ff.rows_amount; + std::cout << component.round_ff.rows_amount << " : "; + } +// std::cout << "Result state: "; +// for (std::size_t i = 0; i < inner_state.size(); i ++ ) std::cout << inner_state[i] << " "; +// std::cout << std::endl; + } + offset += 17; + } + + // sel_ind = 0; + for (auto config : config_map) { + if (config.first >= 10 * component.witnesses) { + for (auto gate_row : config.second) { + // std::cout << "enabling2: " << selector_indexes[sel_ind] << " " + // << selector_indexes[sel_ind + 2] << " at " << gate_row + row << std::endl; + assignment.enable_selector(selector_indexes[sel_ind], gate_row + row); + assignment.enable_selector(selector_indexes[sel_ind + 2], gate_row + row); + } + //std::cout << std::endl; + sel_ind += 1; + } + } + + generate_copy_constraints(component, bp, assignment, instance_input, start_row_index); + + typename component_type::result_type result (component, start_row_index); + return result; + } + + template + typename keccak_static_component::result_type generate_assignments( + const keccak_static_component &component, + assignment> &assignment, + const typename keccak_static_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + BOOST_ASSERT(instance_input.message.size() == component.num_blocks); + + std::size_t cur_row = start_row_index; + + using component_type = keccak_static_component; + using round_type = typename component_type::round_component_type; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + using var = typename component_type::var; + + std::vector padded_message = + generate_assignments(component.padding, assignment, {instance_input.message}, cur_row) + .padded_message; + std::cout << "Padded message: "; + for(std::size_t i = 0; i < padded_message.size(); i++ ){ + std::cout << std::hex << var_value(assignment, padded_message[i]) << std::dec << " "; + } + std::cout << std::endl; + cur_row += component.padding.rows_amount; + + // to sparse + std::size_t config_index = 0; + std::vector sparse_padded_message(padded_message.size()); + std::vector sparse_padded_message_coords(padded_message.size()); + for (std::size_t index = 0; index < padded_message.size(); ++index) { + value_type regular_value = var_value(assignment, padded_message[index]); + integral_type regular = integral_type(regular_value.data); + // std::cout << "pad elem: " << regular << std::endl; + auto sparse = integral_type(0); + auto chunk_size = component.pack_chunk_size; + auto num_chunks = component.pack_num_chunks; + std::vector integral_chunks; + std::vector integral_sparse_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + integral_type power = 1; + + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(regular & mask); + regular >>= chunk_size; + auto packed = pack(value_type(integral_chunks.back())); + integral_sparse_chunks.push_back(integral_type(packed.data)); +// std::cout << "chunks: " << std::hex << integral_chunks.back() << " " << integral_sparse_chunks.back() << std::dec +// << std::endl; + } + for (std::size_t j = 0; j < num_chunks; ++j) { + sparse = sparse + power * integral_sparse_chunks[num_chunks - j - 1]; + power <<= (3 * chunk_size); + } + std::cout << "sparse: " << std::hex << sparse << std::dec << std::endl; + sparse_padded_message[index] = value_type(sparse); + + auto cur_config = component.full_configuration[config_index]; + assignment.witness(component.W(cur_config.constraints[0][0].column), + cur_config.constraints[0][0].row + cur_row) = regular_value; + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + cur_row) = value_type(sparse); + // std::cout << cur_config.constraints[1][0].column << ' ' << cur_config.constraints[1][0].row + + // cur_row << std::endl; + sparse_padded_message_coords[index] = var(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + cur_row, false); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[0][j].column), + cur_config.constraints[0][j].row + cur_row) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + cur_row) = + value_type(integral_sparse_chunks[j - 1]); + } + config_index++; + } + + cur_row += component.full_configuration[config_index - 1].last_coordinate.row + + (component.full_configuration[config_index - 1].last_coordinate.column > 0); + + std::array inner_state; + for (std::uint32_t i = 0; i < 25; i++) { + inner_state[i] = var(component.C(0), start_row_index, false, var::column_type::constant); + } + + std::size_t offset = 0; + std::array pmc; + for (std::size_t i = 0; i < component.num_round_calls; ++i) { + std::copy(sparse_padded_message_coords.begin() + offset, + sparse_padded_message_coords.begin() + offset + 17, pmc.begin()); + + //for (auto &el : pmc) { + // std::cout << component.unpack(integral_type(var_value(assignment, el).data)) << ","; + //} + //std::cout << std::endl; + + for (std::size_t j = 0; j < 24; ++j) { + typename round_type::input_type round_input = { + inner_state, pmc, + var(component.C(0), start_row_index + j + 2, false, var::column_type::constant)}; + if (i == component.num_round_calls - 1 && j == 0) { + typename round_type::result_type round_result = + generate_assignments(component.round_tt, assignment, round_input, cur_row); + inner_state = round_result.inner_state; + cur_row += component.round_tt.rows_amount; + } else if (j == 0) { + typename round_type::result_type round_result = + generate_assignments(component.round_tf, assignment, round_input, cur_row); + inner_state = round_result.inner_state; + cur_row += component.round_tf.rows_amount; + } else { + typename round_type::result_type round_result = + generate_assignments(component.round_ff, assignment, round_input, cur_row); + inner_state = round_result.inner_state; + cur_row += component.round_ff.rows_amount; + } + } + offset += 17; + } + + // from sparse + for (std::size_t index = 0; index < 4; ++index) { + value_type sparse_value = var_value(assignment, inner_state[index]); + std::cout << "Sparse round output variable = " << inner_state[index] << " = " << std::hex << sparse_value << std::dec << std::endl; + integral_type sparse = integral_type(sparse_value.data); + integral_type regular(unpack(sparse).data); + // std::cout << "from sparse: " << sparse << " to regular " << regular << std::endl; + auto chunk_size = component.pack_chunk_size * 3; + auto num_chunks = component.pack_num_chunks; + std::vector integral_sparse_chunks; + std::vector integral_chunks; + integral_type mask = (integral_type(1) << chunk_size) - 1; + for (std::size_t j = 0; j < num_chunks; ++j) { + integral_chunks.push_back(sparse & mask); + sparse >>= chunk_size; + auto unpacked = unpack(integral_chunks.back()); + integral_sparse_chunks.push_back(integral_type(unpacked.data)); + } + + sparse_padded_message[index] = value_type(regular); + + auto cur_config = component.full_configuration[config_index]; + assignment.witness(component.W(cur_config.constraints[0][0].column), + cur_config.constraints[0][0].row + cur_row) = sparse_value; + assignment.witness(component.W(cur_config.constraints[1][0].column), + cur_config.constraints[1][0].row + cur_row) = value_type(regular); + for (std::size_t j = 1; j < num_chunks + 1; ++j) { + assignment.witness(component.W(cur_config.constraints[0][j].column), + cur_config.constraints[0][j].row + cur_row) = + value_type(integral_chunks[j - 1]); + assignment.witness(component.W(cur_config.constraints[1][j].column), + cur_config.constraints[1][j].row + cur_row) = + value_type(integral_sparse_chunks[j - 1]); + } + config_index++; + } + + cur_row += component.full_configuration[config_index - 1].last_coordinate.row + + (component.full_configuration[config_index - 1].last_coordinate.column > 0); + + BOOST_ASSERT(cur_row == start_row_index + component.rows_amount); + + typename component_type::result_type result(component, start_row_index); + std::cout << "Keccak component result = " + << std::hex << var_value(assignment, result.final_inner_state[0]) << std::dec << " " + << std::hex << var_value(assignment, result.final_inner_state[1]) << std::dec << " " + << std::hex << var_value(assignment, result.final_inner_state[2]) << std::dec << " " + << std::hex << var_value(assignment, result.final_inner_state[3]) << std::dec << std::endl; + return result; + } + + template + void generate_assignments_constant( + const keccak_static_component &component, + circuit> &bp, + assignment> &assignment, + const typename keccak_static_component::input_type &instance_input, + const std::uint32_t start_row_index) { + + std::size_t row = start_row_index + 2; + for (std::size_t i = 0; i < 24; ++i) { + assignment.constant(component.C(0), row + i) = pack(component.round_constant[i]); + } + } + + } // namespace components + } // namespace blueprint +} // namespace nil + +#endif // CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_ROUND_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_table.hpp new file mode 100644 index 0000000000..a154b3d813 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/keccak_table.hpp @@ -0,0 +1,283 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_TABLE_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_TABLE_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + template + std::pair keccak_component_hash(const std::vector &buffer){ + using value_type = typename BlueprintFieldType::value_type; + nil::crypto3::hashes::keccak_1600<256>::digest_type d = nil::crypto3::hash>(buffer); + nil::crypto3::algebra::fields::field<256>::integral_type n(d); + std::pair hash_value; + + hash_value.first = (n & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000_big_uint257) >> 128; + hash_value.second = n & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint257; + return hash_value; + } + + template + class keccak_table; + + template + class keccak_table> + : public plonk_component + { + public: + using component_type = plonk_component; + using var = typename component_type::var; + using manifest_type = plonk_component_manifest; + using value_type = typename BlueprintFieldType::value_type; + + std::size_t max_blocks; + + struct keccak_table_map { + var is_last; + var hash_hi; + var hash_lo; + var RLC; + + keccak_table_map(const std::vector witnesses){ + is_last = var(witnesses[0], 0); + RLC = var(witnesses[1], 0); + hash_hi = var(witnesses[2], 0); + hash_lo = var(witnesses[3], 0); + } + + keccak_table_map(const keccak_table &component){ + is_last = var(component.W(0), 0); + RLC = var(component.W(1), 0); + hash_hi = var(component.W(2), 0); + hash_lo = var(component.W(3), 0); + } + + std::vector witnesses(){ + return { + std::uint32_t(is_last.index), + std::uint32_t(RLC.index), + std::uint32_t(hash_hi.index), + std::uint32_t(hash_lo.index) + }; + } + + std::size_t witness_amount() const { + return 4; + } + }; + + class gate_manifest_type : public component_gate_manifest { + public: + std::uint32_t gates_amount() const override { + return 0; + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_blocks) { + gate_manifest manifest = gate_manifest(gate_manifest_type()); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param(4)), + false + ); + return manifest; + } + + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_blocks) { + return max_blocks; + } + + constexpr static const std::size_t gates_amount = 0; + constexpr static const std::size_t lookup_gates_amount = 0; + std::size_t rows_amount = max_blocks; + + struct input_type { + using data_item = std::pair< + std::vector, + std::pair + >; + using data_type = std::vector; + + var rlc_challenge; + + input_type(){} + + input_type(var _rlc_challenge):rlc_challenge(_rlc_challenge){} + + std::vector> all_vars() { + std::vector> res; + res.push_back(rlc_challenge); + return res; + } + + void fill_data(const data_type& _input){ + input = _input; + } + + void new_buffer(const data_item &_pair){ + input.push_back(_pair); + } + + void new_buffer(const std::vector buffer){ + input.push_back({buffer, keccak_component_hash(buffer)}); + } + + data_type input; + }; + + struct result_type { + result_type(const keccak_table &component, std::size_t start_row_index) { + } + + std::vector> all_vars() { + std::vector> result; + return result; + } + }; + + template + explicit keccak_table(ContainerType witness, std::size_t _max_blocks) : + component_type(witness, {}, {}, get_manifest()), max_blocks(_max_blocks) + {}; + + template + keccak_table(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, + std::size_t _max_blocks + ) : component_type(witness, constant, public_input, get_manifest()), max_blocks(_max_blocks) {}; + + keccak_table( + std::initializer_list witnesses, + std::initializer_list + constants, + std::initializer_list + public_inputs, + std::size_t _max_blocks + ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_blocks(_max_blocks){}; + }; + + template + using plonk_keccak_table = + keccak_table>; + + template + typename plonk_keccak_table::result_type generate_assignments( + const plonk_keccak_table &component, + assignment> + &assignment, + const typename plonk_keccak_table::input_type + &instance_input, + const std::uint32_t start_row_index + ) { + using component_type = plonk_keccak_table; + using value_type = typename BlueprintFieldType::value_type; + + value_type theta = var_value(assignment, instance_input.rlc_challenge); + std::size_t input_idx = 0; + std::size_t block_counter = 0; + std::vector msg; + std::pair hash; + typename component_type::keccak_table_map t(component); + while( block_counter < component.max_blocks ) { + if( input_idx < instance_input.input.size() ){ + msg = std::get<0>(instance_input.input[input_idx]); + hash = std::get<1>(instance_input.input[input_idx]); + input_idx++; + } else { + msg = {}; + hash = keccak_component_hash(msg); + } + value_type RLC = calculateRLC(msg, theta); + for( std::size_t block = 0; block < std::ceil(float(msg.size() + 1)/136); block++){ + if( block != std::ceil(float(msg.size() + 1)/136) - 1){ + assignment.witness(t.is_last.index, start_row_index + block_counter) = 0; + } else { + assignment.witness(t.is_last.index, start_row_index + block_counter) = 1; + } + assignment.witness(t.RLC.index, start_row_index + block_counter) = RLC; + assignment.witness(t.hash_hi.index, start_row_index + block_counter) = hash.first; + assignment.witness(t.hash_lo.index, start_row_index + block_counter) = hash.second; + block_counter++; + } + } + return typename component_type::result_type(component, start_row_index); + } + + template + typename plonk_keccak_table::result_type generate_circuit( + const plonk_keccak_table &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_keccak_table::input_type + &instance_input, + const std::size_t start_row_index + ) { + using component_type = plonk_keccak_table; + using var = typename component_type::var; + + bp.register_dynamic_table("keccak_table"); + std::size_t selector_index = bp.get_dynamic_lookup_table_selector(); + assignment.enable_selector(selector_index, start_row_index, start_row_index + component.rows_amount - 1); + + crypto3::zk::snark::plonk_lookup_table keccak_table; + typename component_type::keccak_table_map t(component); + + keccak_table.tag_index = selector_index; + keccak_table.columns_number = 4;// + keccak_table.lookup_options = {{ + t.is_last, + t.RLC, + t.hash_hi, + t.hash_lo + }}; + bp.define_dynamic_table("keccak_table", keccak_table); + + return typename component_type::result_type(component, start_row_index); + } + } + } +} +#endif \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/util.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/util.hpp new file mode 100644 index 0000000000..52982c78e7 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/keccak/util.hpp @@ -0,0 +1,97 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_PACK_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_KECCAK_PACK_HPP + +template +typename BlueprintFieldType::value_type pack(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); +} + +template +typename BlueprintFieldType::value_type unpack(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + while (value_integral >= 1) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 3; + power = power << 1; + } + return value_type(result_integral); +} + +template +typename BlueprintFieldType::value_type calculateRLC( + std::vector data, + typename BlueprintFieldType::value_type factor +){ + typename BlueprintFieldType::value_type RLC = data.size(); + for( std::size_t i = 0; i < data.size(); i++ ){ + RLC *= factor; + RLC += typename BlueprintFieldType::value_type(data[i]); + } + return RLC; +} + +template +std::array sparsed_64bits_to_4_chunks(typename BlueprintFieldType::value_type num){ + using integral_type = typename BlueprintFieldType::integral_type; + using value_type = typename BlueprintFieldType::value_type; + integral_type n(num.data); + integral_type mask = (integral_type(1) << 48) - 1; + + std::array result; + result[3] = value_type(n & mask); n >>= 48; + result[2] = value_type(n & mask); n >>= 48; + result[1] = value_type(n & mask); n >>= 48; + result[0] = value_type(n & mask); + + return result; +} + +// For 16-bit numbers placed into field element +template +typename BlueprintFieldType::value_type swap_bytes( typename BlueprintFieldType::value_type i ){ + typename BlueprintFieldType::integral_type n(i.data); + assert( n < 65536 ); + + return ((n & 0xFF) << 8) + ((n & 0xFF00) >> 8); +} +#endif diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/pedersen.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/pedersen.hpp deleted file mode 100644 index 06c89d001b..0000000000 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/pedersen.hpp +++ /dev/null @@ -1,500 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2021 Ilias Khairullin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_HASHES_PEDERSEN_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_HASHES_PEDERSEN_HPP - -#include -#include -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace blueprint { - namespace components { - /** - * Windowed hash function using elliptic curves point multiplication - * - * For a given input of scalars, create an equivalent set of base points within a namespace. - */ - template, - typename HashParams = hashes::find_group_hash_default_params> - struct pedersen_to_point : public component { - using curve_type = Curve; - using commitment_component = fixed_base_mul_zcash; - using field_type = typename commitment_component::field_type; - using element_component = typename commitment_component::twisted_edwards_element_component; - - using result_type = element_component; - - // hash_type is corresponding to the component hash policy - // void means there is no implementation of the corresponding hash algorithm - using hash_type = void; - - commitment_component m_commitment; - result_type result; - - static std::vector get_base_points(std::size_t n) { - using group_hash_type = hashes::find_group_hash; - assert(n > 0); - std::vector basepoints; - for (std::uint32_t i = 0; i < n; ++i) { - basepoints.emplace_back(hash({ - i, - })); - } - return basepoints; - } - - /// Auto allocation of the result. - /// Take in_bits as blueprint_variable_vector. - pedersen_to_point(blueprint &bp, - const detail::blueprint_variable_vector &in_bits) : - component(bp), - m_commitment(bp, get_base_points(commitment_component::basepoints_required(in_bits.size())), - in_bits), - result(m_commitment.result) { - } - - /// Auto allocation of the result. - /// Take in_bits as block_variable. - pedersen_to_point(blueprint &bp, const block_variable &in_block) : - pedersen_to_point(bp, in_block.bits) { - } - - /// Auto allocation of the result. - /// Take in_bits as digest_variable. - pedersen_to_point(blueprint &bp, const digest_variable &in_digest) : - pedersen_to_point(bp, in_digest.bits) { - } - - /// Auto allocation of the result. - /// Take in_bits as container of block_variable. - template< - typename Blocks, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen_to_point(blueprint &bp, const Blocks &in_blocks) : - pedersen_to_point(bp, [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_block : in_blocks) { - in_bits.insert(std::end(in_bits), std::cbegin(in_block.bits), std::cend(in_block.bits)); - } - return in_bits; - }()) { - } - - /// Auto allocation of the result. - /// Take in_bits as container of digest_variable. - template< - typename Digests, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen_to_point(blueprint &bp, const Digests &in_digests) : - pedersen_to_point(bp, [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_digest : in_digests) { - in_bits.insert(std::end(in_bits), std::cbegin(in_digest.bits), - std::cend(in_digest.bits)); - } - return in_bits; - }()) { - } - - /// Manual allocation of the result - /// Take in_bits as blueprint_variable_vector. - pedersen_to_point(blueprint &bp, - const detail::blueprint_variable_vector &in_bits, - const result_type &in_result) : - component(bp), - m_commitment(bp, get_base_points(commitment_component::basepoints_required(in_bits.size())), - in_bits, in_result), - result(m_commitment.result) { - } - - /// Manual allocation of the result - /// Take in_bits as block_variable. - pedersen_to_point(blueprint &bp, const block_variable &in_block, - const result_type &in_result) : - pedersen_to_point(bp, in_block.bits, in_result) { - } - - /// Manual allocation of the result - /// Take in_bits as digest_variable. - pedersen_to_point(blueprint &bp, const digest_variable &in_digest, - const result_type &in_result) : - pedersen_to_point(bp, in_digest.bits, in_result) { - } - - /// Manual allocation of the result - /// Take in_bits as container of block_variable. - template< - typename Blocks, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen_to_point(blueprint &bp, const Blocks &in_blocks, - const result_type &in_result) : - pedersen_to_point( - bp, - [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_block : in_blocks) { - in_bits.insert(std::end(in_bits), std::cbegin(in_block.bits), - std::cend(in_block.bits)); - } - return in_bits; - }(), - in_result) { - } - - /// Manual allocation of the result - /// Take in_bits as container of digest_variable. - template< - typename Digests, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen_to_point(blueprint &bp, const Digests &in_digests, - const result_type &in_result) : - pedersen_to_point( - bp, - [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_digest : in_digests) { - in_bits.insert(std::end(in_bits), std::cbegin(in_digest.bits), - std::cend(in_digest.bits)); - } - return in_bits; - }(), - in_result) { - } - - // TODO: ignored for now, enforce bitness checking constrains - void generate_gates(bool ensure_output_bitness = false) { - this->m_commitment.generate_gates(); - } - - void generate_assignments() { - this->m_commitment.generate_assignments(); - } - }; - - template, - typename HashParams = hashes::find_group_hash_default_params> - struct pedersen : public component { - using curve_type = Curve; - using hash_component = pedersen_to_point; - using field_type = typename hash_component::field_type; - using element_component = typename hash_component::element_component; - using to_bits_component = typename element_component::to_bits_component; - - using result_type = digest_variable; - - // hash_type is corresponding to the component hash policy - using hash_type = nil::crypto3::hashes::pedersen; - // TODO: retrieve digest_bits from hash_type - static constexpr std::size_t digest_bits = field_type::value_bits; - - hash_component hasher; - to_bits_component to_bits_converter; - result_type result; - - /// Auto allocation of the result. - /// Take in_bits as blueprint_variable_vector. - pedersen(blueprint &bp, const detail::blueprint_variable_vector &in_bits) : - component(bp), hasher(bp, in_bits), to_bits_converter(bp, hasher.result), - result(bp, digest_bits, to_bits_converter.result, 0) { - assert(this->result.digest_size == digest_bits); - } - - /// Auto allocation of the result. - /// Take in_bits as block_variable. - pedersen(blueprint &bp, const block_variable &in_block) : - pedersen(bp, in_block.bits) { - } - - /// Auto allocation of the result. - /// Take in_bits as digest_variable. - pedersen(blueprint &bp, const digest_variable &in_digest) : - pedersen(bp, in_digest.bits) { - } - - /// Auto allocation of the result. - /// Take in_bits as container of block_variable. - template< - typename Blocks, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen(blueprint &bp, const Blocks &in_blocks) : - pedersen(bp, [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_block : in_blocks) { - in_bits.insert(std::end(in_bits), std::cbegin(in_block.bits), std::cend(in_block.bits)); - } - return in_bits; - }()) { - } - - /// Auto allocation of the result. - /// Take in_bits as container of digest_variable. - template< - typename Digests, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen(blueprint &bp, const Digests &in_digests) : - pedersen(bp, [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_digest : in_digests) { - in_bits.insert(std::end(in_bits), std::cbegin(in_digest.bits), - std::cend(in_digest.bits)); - } - return in_bits; - }()) { - } - - /// Manual allocation of the result. - /// Take in_bits as blueprint_variable_vector. - pedersen(blueprint &bp, const detail::blueprint_variable_vector &in_bits, - const result_type &in_result) : - component(bp), - hasher(bp, in_bits), to_bits_converter(bp, hasher.result, in_result.bits), result(in_result) { - assert(this->result.digest_size == digest_bits); - } - - /// Manual allocation of the result. - /// Take in_bits as block_variable. - pedersen(blueprint &bp, const block_variable &in_block, - const result_type &in_result) : - pedersen(bp, in_block.bits, in_result) { - } - - /// Manual allocation of the result. - /// Take in_bits as digest_variable. - pedersen(blueprint &bp, const digest_variable &in_digest, - const result_type &in_result) : - pedersen(bp, in_digest.bits, in_result) { - } - - /// Manual allocation of the result. - /// Take in_bits as container of block_variable. - template< - typename Blocks, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen(blueprint &bp, const Blocks &in_blocks, const result_type &in_result) : - pedersen( - bp, - [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_block : in_blocks) { - in_bits.insert(std::end(in_bits), std::cbegin(in_block.bits), - std::cend(in_block.bits)); - } - return in_bits; - }(), - in_result) { - } - - /// Manual allocation of the result. - /// Take in_bits as container of digest_variable. - template< - typename Digests, - typename std::enable_if< - std::is_same, - typename std::iterator_traits::value_type>::value, - bool>::type = true> - pedersen(blueprint &bp, const Digests &in_digests, const result_type &in_result) : - pedersen( - bp, - [&]() { - detail::blueprint_variable_vector in_bits; - for (const auto &in_digest : in_digests) { - in_bits.insert(std::end(in_bits), std::cbegin(in_digest.bits), - std::cend(in_digest.bits)); - } - return in_bits; - }(), - in_result) { - } - - // TODO: ignored for now, enforce bitness checking constrains - void generate_gates(bool ensure_output_bitness = false) { - this->hasher.generate_gates(ensure_output_bitness); - this->to_bits_converter.generate_gates(); - this->result.generate_gates(); - } - - void generate_assignments() { - this->hasher.generate_assignments(); - // to_bits_converter generate witness also for result - this->to_bits_converter.generate_assignments(); - } - - static std::size_t get_digest_len() { - return digest_bits; - } - }; - - /// @brief See https://zips.z.cash/protocol/protocol.pdf#concretewindowedcommit - template, - typename HashParams = hashes::find_group_hash_default_params> - struct pedersen_commitment_to_point : public component { - using hash_component = pedersen_to_point; - using element_component = typename hash_component::element_component; - using addition_component = typename element_component::addition_component; - - using field_type = typename hash_component::field_type; - using result_type = typename hash_component::result_type; - - public: - result_type result; - - private: - hash_component hasher; - element_component random_point; - addition_component adder; - - /// Auto allocation of the result - /// Take in_bits as blueprint_variable_vector. - pedersen_commitment_to_point(blueprint &bp, - const detail::blueprint_variable_vector &in_bits) : - component(bp), - // public field - result(bp), - // private fields - hasher(bp, in_bits), random_point(bp), adder(bp, hasher.result, random_point, result) { - } - - /// Manual allocation of the result - /// Take in_bits as blueprint_variable_vector. - pedersen_commitment_to_point(blueprint &bp, - const detail::blueprint_variable_vector &in_bits, - const result_type &result) : - component(bp), - // public field - result(result), - // private fields - hasher(bp, in_bits), random_point(bp), adder(bp, hasher.result, random_point, result) { - } - - void generate_gates(bool ensure_output_bitness = false) { - hasher.generate_gates(ensure_output_bitness); - adder.generate_gates(); - } - - void generate_assignments(const typename field_type::value_type &r) { - using group_hash_type = hashes::find_group_hash; - - hasher.generate_assignments(); - random_point.generate_assignments(r * hash(std::vector { - 'r', - })); - adder.generate_assignments(); - } - }; - - template, - typename HashParams = hashes::find_group_hash_default_params> - struct pedersen_commitment : public component { - using commitment_component = - pedersen_commitment_to_point; - using element_component = typename commitment_component::element_component; - using to_bits_component = typename element_component::to_bits_component; - - using field_type = typename commitment_component::field_type; - using result_type = digest_variable; - - private: - commitment_component commiter; - to_bits_component to_bits_converter; - - public: - result_type result; - - /// Auto allocation of the result - /// Take in_bits as blueprint_variable_vector. - pedersen_commitment(blueprint &bp, - const detail::blueprint_variable_vector &in_bits) : - component(bp), - // private fields - commiter(bp, in_bits), to_bits_converter(bp, commiter.result), - // public field - result(bp, field_type::value_bits, to_bits_converter.result, 0) { - } - - /// Manual allocation of the result - /// Take in_bits as blueprint_variable_vector. - pedersen_commitment(blueprint &bp, - const detail::blueprint_variable_vector &in_bits, - const result_type &result) : - component(bp), - // private fields - commiter(bp, in_bits), to_bits_converter(bp, commiter.result, result.bits), - // public field - result(result) { - } - - void generate_gates(bool ensure_output_bitness = false) { - commiter.generate_gates(ensure_output_bitness); - to_bits_converter.generate_gates(); - } - - void generate_assignments(const typename field_type::value_type &r) { - commiter.generate_assignments(r); - // to_bits_converter generate witness also for result - to_bits_converter.generate_assignments(); - result.generate_gates(); - } - }; - } // namespace components - } // namespace blueprint - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_HASHES_PEDERSEN_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/poseidon/plonk/poseidon_constants.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/poseidon/plonk/poseidon_constants.hpp index b3efcc39ae..a1c9e41c12 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/poseidon/plonk/poseidon_constants.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/poseidon/plonk/poseidon_constants.hpp @@ -49,185 +49,185 @@ namespace nil { constexpr static const std::array, state_size> mds = {{ - {{0x1a9bd250757e29ef4959b9bef59b4e60e20a56307d6491e7b7ea1fac679c7903_cppui_modular253, - 0x384aa09faf3a48737e2d64f6a030aa242e6d5d455ae4a13696b48a7320c506cd_cppui_modular253, - 0x3d2b7b0209bc3080064d5ce4a7a03653f8346506bfa6d076061217be9e6cfed5_cppui_modular253}}, - {{0x9ee57c70bc351220b107983afcfabbea79868a4a8a5913e24b7aaf3b4bf3a42_cppui_modular253, - 0x20989996bc29a96d17684d3ad4c859813115267f35225d7e1e9a5b5436a2458f_cppui_modular253, - 0x14e39adb2e171ae232116419ee7f26d9191edde8a5632298347cdb74c3b2e69d_cppui_modular253}}, - {{0x174544357b687f65a9590c1df621818b5452d5d441597a94357f112316ef67cb_cppui_modular253, - 0x3ca9263dc1a19d17cfbf15b0166bb25f95dffc53212db207fcee35f02c2c4137_cppui_modular253, - 0x3cf1fbef75d4ab63b7a812f80b7b0373b2dc21d269ba7c4c4d6581d50aae114c_cppui_modular253}}, + {{0x1a9bd250757e29ef4959b9bef59b4e60e20a56307d6491e7b7ea1fac679c7903_big_uint255, + 0x384aa09faf3a48737e2d64f6a030aa242e6d5d455ae4a13696b48a7320c506cd_big_uint255, + 0x3d2b7b0209bc3080064d5ce4a7a03653f8346506bfa6d076061217be9e6cfed5_big_uint255}}, + {{0x9ee57c70bc351220b107983afcfabbea79868a4a8a5913e24b7aaf3b4bf3a42_big_uint255, + 0x20989996bc29a96d17684d3ad4c859813115267f35225d7e1e9a5b5436a2458f_big_uint255, + 0x14e39adb2e171ae232116419ee7f26d9191edde8a5632298347cdb74c3b2e69d_big_uint255}}, + {{0x174544357b687f65a9590c1df621818b5452d5d441597a94357f112316ef67cb_big_uint255, + 0x3ca9263dc1a19d17cfbf15b0166bb25f95dffc53212db207fcee35f02c2c4137_big_uint255, + 0x3cf1fbef75d4ab63b7a812f80b7b0373b2dc21d269ba7c4c4d6581d50aae114c_big_uint255}}, }}; constexpr static const std::array, rounds_amount> round_constant = {{ - {{0x2ec559cd1a1f2f6889fc8ae5f07757f202b364429677c8ff6603fd6d93659b47_cppui_modular253, - 0x2553b08c788551bfe064d91c17eb1edb8662283229757711b2b30895f0aa3bad_cppui_modular253, - 0x25a706fb0f35b260b6f28d61e082d36a8f161be1f4d9416371a7b65f2bfafe4e_cppui_modular253}}, - {{0x37c0281fda664cc2448d0e7dd77aaa04752250817a945abeea8cfaaf3ee39ba0_cppui_modular253, - 0x140488321291998b8582eaceeb3fa9ca3980eb64a453573c5aaa2910405936b6_cppui_modular253, - 0x3a73fe35b1bdd66b809aad5eab47b5c83b0146fd7fc632dfb49cd91ae1169378_cppui_modular253}}, - {{0x21b7c2b35fd7710b06245711f26c0635d3e21de4db10dd3a7369f59f468d7be6_cppui_modular253, - 0x1803a068d25fef2ef652c8a4847aa18a29d1885e7bf77fd6a34d66536d09cad7_cppui_modular253, - 0x291de61c5e6268213772cf7e03c80c2e833eb77c58c46548d158a70fbbd9724b_cppui_modular253}}, - {{0x230043a0dc2dfab63607cbe1b9c482fdd937fdefecc6905aa5012e89babead13_cppui_modular253, - 0x218af77a05c502d3fa3144efcf47a0f2a0292498c10c6e2368565674e78764f4_cppui_modular253, - 0x223e2d94c177d27e071d55729d13a9b216955c7102cc9a95ea40058efb506117_cppui_modular253}}, - {{0x2a18257c15ad9b6fe8b7c5ad2129394e902c3c3802e738f24ce2f585ae5f6a38_cppui_modular253, - 0xa6f7ba75f216403d2e4940469d199474a65aa5ef814e36400bddef06158dcf8_cppui_modular253, - 0x169be41c6227956efef5b4cdde65d00d5e04fe766178bdc731615c6e5b93e31e_cppui_modular253}}, - {{0x2e28f50a9a55d2e91774083072734544417e290a1cfebc01801b94d0728fe663_cppui_modular253, - 0xfdedf8da8654a22831040cfc74432464b173ee68628fd90498480b9902f2819_cppui_modular253, - 0x46a3ed9863d2d739dd8bc9e90a746fda1197162d0a0bec3db1f2f6042cf04e2_cppui_modular253}}, - {{0x219e08b460c305b428670bacab86ac1e9458075778d35c3619ae7ba1f9b2ed76_cppui_modular253, - 0x38bb36a12ebcec4d4e8728eb43e3f12a6e33b1ffa1463379018d4e12424e62ca_cppui_modular253, - 0x1e9aa3fe25d116ccfbd6a8fccdae0aa9bc164a03ab7e951704ee9a715fbedee6_cppui_modular253}}, - {{0x30f33ed70da4c2bfb844ff1a7558b817d1ec300da86a1694f2db45047d5f18b_cppui_modular253, - 0x282b04137350495ab417cf2c47389bf681c39f6c22d9e370b7af75cbcbe4bb1_cppui_modular253, - 0x9b1528dea2eb5bd96905b88ff05fdf3e0f220fe1d93d1b54953ac98fec825f0_cppui_modular253}}, - {{0x30083dbbb5eab39311c7a8bfd5e55567fa864b3468b5f9200e529cda03d9ef71_cppui_modular253, - 0x17eace73cf67c6112239cbf51dec0e714ee4e5a91dbc9209dc17bbea5bcd094_cppui_modular253, - 0x37af1de8f5475ba165b90f8d568683d54e215df97e9287943370cf4118428097_cppui_modular253}}, - {{0x16ff7592836a45340ec6f2b0f122736d03f0bcb84012f922a4baa73ea0e66f51_cppui_modular253, - 0x1a5985d4b359d03de60b2edabb1853f476915febc0e40f83a2d1d0084efc3fd9_cppui_modular253, - 0x255a9d4beb9b5ea18ab9782b1abb267fc5b773b98ab655fd4d469698e1e1f975_cppui_modular253}}, - {{0x34a8d9f45200a9ac28021712be81e905967bac580a0b9ee57bc4231f5ecb936a_cppui_modular253, - 0x979556cb3edcbe4f33edd2094f1443b4b4ec6c457b0425b8463e788b9a2dcda_cppui_modular253, - 0x2a4d028c09ad39c30666b78b45cfadd5279f6239379c689a727f626679272654_cppui_modular253}}, - {{0xc31b68f6850b3bd71fe4e89984e2c87415523fb54f24ec8ae71430370154b33_cppui_modular253, - 0x1a27ca0b953d3dba6b8e01cf07d76c611a211d139f2dff5ac023ed2454f2ed90_cppui_modular253, - 0x109ae97c25d60242b86d7169196d2212f268b952dfd95a3937916b9905303180_cppui_modular253}}, - {{0x3698c932f2a16f7bb9abac089ec2de79c9965881708878683caf53caa83ad9c4_cppui_modular253, - 0x3c7e25e0ac8fba3dc1360f8a9a9fa0be0e031c8c76a93497b7cac7ed32ade6c0_cppui_modular253, - 0x2fc5023c5e4aed5aa7dfca0f5492f1b6efab3099360ec960237512f48c858a79_cppui_modular253}}, - {{0x2c124735f3f924546fb4fdfa2a018e03f53063d3a2e87fd285ba8d647eda6765_cppui_modular253, - 0x12c875c9b79591acf9033f8b6c1e357126c44b23f3486fbee0d98340a3382251_cppui_modular253, - 0x3cda935e895857d39a7db8476aeda5a5131cb165a353073fd3e473fd8855528d_cppui_modular253}}, - {{0x218eb756fa5f1df9f1eb922ef80b0852588779a7368e3d010def1512815d8759_cppui_modular253, - 0x23bcf1032957015ef171fbb4329bca0c57d59885522f25f4b082a3cf301cfbc6_cppui_modular253, - 0x17474c3b6a9bc1057df64b9e4d62badbc7f3867b3dd757c71c1f656205d7bceb_cppui_modular253}}, - {{0x19826c0ee22972deb41745d3bd412c2ae3d4c18535f4b60c9e870edffa3d550_cppui_modular253, - 0x30bcb17dfd622c46f3275f698319b68d8816bed0368ded435ed61992bc43efa9_cppui_modular253, - 0x3bd816c214c66410229cfbd1f4a3a42e6a0f82f3c0d49b09bc7b4c042ff2c94b_cppui_modular253}}, - {{0x8943ec01d9fb9f43c840757738979b146c3b6d1982280e92a52e8d045633ea1_cppui_modular253, - 0x2670bf8c01822e31c70976269d89ed58bc79ad2f9d1e3145df890bf898b57e47_cppui_modular253, - 0xdd53b41599ae78dbd3e689b65ebcca493effa94ed765eeec75a0d3bb20407f9_cppui_modular253}}, - {{0x68177d293585e0b8c8e76a8a565c8689a1d88e6a9afa79220bb0a2253f203c3_cppui_modular253, - 0x35216f471043866edc324ad8d8cf0cc792fe7a10bf874b1eeac67b451d6b2cf5_cppui_modular253, - 0x1fd6efb2536bfe11ec3736e7f7448c01eb2a5a9041bbf84631cc83ee0464f6af_cppui_modular253}}, - {{0x2c982c7352102289fc1b48dafcd9e3cc364d5a4324575e4721daf0af10033c67_cppui_modular253, - 0x352f7e8c7662d86db9c722d4d07778858771b832af5bb5dc3b13cf94851c1b45_cppui_modular253, - 0x18e3c0c1caa5e3ed66ee1ab6f55a5c8063d8c9b034ae47db43435147149e37d5_cppui_modular253}}, - {{0x3124b12deb37dcbb3d96c1a08d507523e30e03e0919559bf2daaab238422eade_cppui_modular253, - 0x143bf0def31437eb21095200d2d406e6e5727833683d9740b9bfc1713215dc9a_cppui_modular253, - 0x1ebee92143f32b4f9d9a90ad62b8483c977480767b53c71f6bde934a8ef38f17_cppui_modular253}}, - {{0xff6c794ad1afaa494088d5f8ee6c47bf9e83013478628cf9f41f2e81383ebeb_cppui_modular253, - 0x3d0a10ac3ee707c62e8bdf2cdb49ac2cf4096cf41a7f214fdd1f8f9a24804f17_cppui_modular253, - 0x1d61014cd3ef0d87d037c56bdfa370a73352b95d472ead1937bed06a31801c91_cppui_modular253}}, - {{0x123e185b2ec7f072507ac1e4e743589bb25c8fdb468e329e7de169875f90c525_cppui_modular253, - 0x30b780c0c1cb0609623732824c75017da9799bdc7e08b527bae7f409ebdbecf2_cppui_modular253, - 0x1dfb3801b7ae4e209f68195612965c6e37a2ed5cf1eeee3d46edf655d6f5afef_cppui_modular253}}, - {{0x2fdee42805b2774064e963c741552556019a9611928dda728b78311e1f049528_cppui_modular253, - 0x31b2b65c431212ed36fdda5358d90cd9cb51c9f493bff71cdc75654547e4a22b_cppui_modular253, - 0x1e3ca033d8413b688db7a543e62ac2e69644c0614801379cfe62fa220319e0ef_cppui_modular253}}, - {{0xc8ef1168425028c52a32d93f9313153e52e9cf15e5ec2b4ca09d01730dad432_cppui_modular253, - 0x378c73373a36a5ed94a34f75e5de7a7a6187ea301380ecfb6f1a22cf8552638e_cppui_modular253, - 0x3218aeec20048a564015e8f221657fbe489ba404d7f5f15b829c7a75a85c2f44_cppui_modular253}}, - {{0x3312ef7cbbad31430f20f30931b070379c77119c1825c6560cd2c82cf767794e_cppui_modular253, - 0x356449a71383674c607fa31ded8c0c0d2d20fb45c36698d258cecd982dba478c_cppui_modular253, - 0xcc88d1c91481d5321174e55b49b2485682c87fac2adb332167a20bcb57db359_cppui_modular253}}, - {{0x1defccbd33740803ad284bc48ab959f349b94e18d773c6c0c58a4b9390cc300f_cppui_modular253, - 0x2d263cc2e9af126d768d9e1d2bf2cbf32063be831cb1548ffd716bc3ee7034fe_cppui_modular253, - 0x111e314db6fb1a28e241028ce3d347c52558a33b6b11285a97fffa1b479e969d_cppui_modular253}}, - {{0x27409401e92001d434cba2868e9e371703199c2372d23ef329e537b513f453e_cppui_modular253, - 0x24a852bdf9cb2a8fedd5e85a59867d4916b8a57bdd5f84e1047d410770ffffa0_cppui_modular253, - 0x205d1b0ee359f621845ac64ff7e383a3eb81e03d2a2966557746d21b47329d6e_cppui_modular253}}, - {{0x25c327e2cc93ec6f0f23b5e41c931bfbbe4c12da7d55a2b1c91c79db982df903_cppui_modular253, - 0x39df3e22d22b09b4265da50ef175909ce79e8f0b9599dff01cf80e70884982b9_cppui_modular253, - 0x9b08d58853d8ac908c5b14e5eb8611b45f40faaa59cb8dff98fb30efcdfaa01_cppui_modular253}}, - {{0x1ece62374d79e717db4a68f9cddaaf52f8884f397375c0f3c5c1dbaa9c57a0a6_cppui_modular253, - 0x3bd089b727a0ee08e263fa5e35b618db87d7bcce03441475e3fd49639b9fa1c1_cppui_modular253, - 0x3fedea75f37ad9cfc94c95141bfb4719ee9b32b874b93dcfc0cc12f51a7b2aff_cppui_modular253}}, - {{0x36dfa18a9ba1b194228494a8acaf0668cb43aca9d4e0a251b20ec3424d0e65cd_cppui_modular253, - 0x119e98db3f49cd7fcb3b0632567d9ccaa5498b0d411a1437f57c658f41931d0c_cppui_modular253, - 0x1100b21c306475d816b3efcd75c3ae135c54ad3cc56ca22abd9b7f45e6d02c19_cppui_modular253}}, - {{0x15791f9bbea213937208c82794eb667f157f003c65b64aa9800f4bbee4ea5119_cppui_modular253, - 0x1adbeb5e9c4d515ecfd250ebee56a2a816eb3e3dc8d5d440c1ab4285b350be64_cppui_modular253, - 0x1fbf4738844a9a249aec253e8e4260e4ab09e26bea29ab0020bf0e813ceecbc3_cppui_modular253}}, - {{0x3418a929556ec51a086459bb9e63a821d407388cce83949b9af3e3b0434eaf0e_cppui_modular253, - 0x9406b5c3af0290f997405d0c51be69544afb240d48eeab1736cda0432e8ff9e_cppui_modular253, - 0x23ece5d70b38ccc9d43cd923e5e3e2f62d1d873c9141ef01f89b6de1336f5bc7_cppui_modular253}}, - {{0x1852d574e46d370a0b1e64f6c41eeb8d40cf96c524a62965661f2ef87e67234d_cppui_modular253, - 0xa657027cce8d4f238ea896dde273b7537b508674a366c66b3789d9828b0ce90_cppui_modular253, - 0x3482f98a46ec358108fbbb68fd94f8f2baa73c723baf21922a850e45511f5a2d_cppui_modular253}}, - {{0x3f62f164f8c905b335a6cbf76131d2430237e17ad6abc76d2a6329c1ec5463ee_cppui_modular253, - 0x7e397f503f9c1cea028465b2950ea444b15c5eab567d5a69ea2925685694df0_cppui_modular253, - 0x405f1fc711872373d6eb50a09fbfb05b2703ae0a0b4edb86aedb216db17a876_cppui_modular253}}, - {{0xbe0848eb3e09c7027110ad842c502441c97afa14a844406fcfec754a25658c1_cppui_modular253, - 0x26b78788fd98ac020bac92d0e7792bb5ffed06b697d847f61d984f905d9ba870_cppui_modular253, - 0x38fd5318d39055c82fef9bdd33315a541c0ec4363e6cc0687005871355dfa573_cppui_modular253}}, - {{0x380bd03b840c48c8ba3830e7cace72f91a5002218c617294e8c8bc687d5216de_cppui_modular253, - 0x2c6e57ddc1d7c81a0299ed49c3d74759416bc8426f30e2af5622895c531b4e1c_cppui_modular253, - 0x11d3a81b262fc76ef506ee6d88e5991d0de8cb9dd162d97c58b175e3bc4584f3_cppui_modular253}}, - {{0x9b6b283ebaf45fbb1e448969ace9be62adf67ddf58614925741deb6a1ba7def_cppui_modular253, - 0x15d5095164c885763fa83cdf776d436382821a17bc5563a5b6f6dfcdac504ade_cppui_modular253, - 0x3427fdbfca3cea23063eb138c5055c6cad9c4252b23d12c12293308eff7d9124_cppui_modular253}}, - {{0x272f12e731077b74317ef2543c33b86194db1da5f6a7e1eee0656672c81685fe_cppui_modular253, - 0x5323f85deb8c07c193c37a73d76f6114967913a2bdce11995f183e769f42967_cppui_modular253, - 0x3d5ce415ecae4ba42b417ea3a501b44694f46efddff2fcca952b097f3852d3d8_cppui_modular253}}, - {{0xe8ec18c7b52c514d42047f1f0b2a90cb8c0c7391cf9479cd7fd5bfe1d3db8f2_cppui_modular253, - 0x1591c865ea7065d54304519f8bb268bddbeaf3afae54edcd01a833ed0a9ef1a_cppui_modular253, - 0x3eddbeeee5eca5deee4bf1789c435e1241e0d71186d8f0f62d74729dfc3119fb_cppui_modular253}}, - {{0x23691c7009b9283b268766e8d491716d3c1993e6ecf458def8f762af3e355707_cppui_modular253, - 0x26cdab2c837ebeac5bea4be1d6f0488034907374d81a61a34f1c4db397d4c09b_cppui_modular253, - 0x2d2206730664d58be0676dad1fee0e990c264a7410a2cdb6b55653c1df72ef56_cppui_modular253}}, - {{0x2bb74bb185372334a4ef5f6d18e2ece54086e62b04985dd794b7117b0be9217f_cppui_modular253, - 0x366250fe928c45d8d5aa35f0a142754907ff3c598410199b589b28cd851b2204_cppui_modular253, - 0x1868f8118482c6b4a5a61a81c8aaca128953179c20f73a44022d9976bdc34af1_cppui_modular253}}, - {{0xb7901c670e1d75d726eb88d000950b3c963f0f7a6ca24994bdc07ae2f78b4d3_cppui_modular253, - 0x32c4bd8ab70e1f25af77af57dd340c8e6c8a101dfc5e8dd03314566db90b870_cppui_modular253, - 0x1ce36db31fe6ea3cd9308db9aa43a8af5c41a8f0a6509bfe00f0e7b486c0ab8a_cppui_modular253}}, - {{0x26596ea9e1915e53da3479e9d13c3c920505e2449e325810ff6ca855fe4b7c6e_cppui_modular253, - 0x30f296a269868a7fca8f5b1e269c0116304df31729559a270e713509d3a6d5dc_cppui_modular253, - 0x2588961eff7897d87eb6ac72350ef9f52640647cbd23136919a994dfd1979d5_cppui_modular253}}, - {{0x16a49e69721e80690d41e06229e9bc2dbaf9a2abf4b89388db2485595409d62b_cppui_modular253, - 0x3d7aca02c051fcad8073cfd67210cd423a31888afc4a444d9d3adf3d6c5da7bf_cppui_modular253, - 0x299bd48a740b7790075268312ab8072c72421de5a6437fa5e25431ef951847b4_cppui_modular253}}, - {{0x11a69b867d9ea22ec1b2f28e96617129e36eefaea9e8126bdc6a42b99072902b_cppui_modular253, - 0x25bc1af391f3c1f2284a95da92b5883d1b3a40794b2358b2e7a70fca22da64ce_cppui_modular253, - 0x361ab3843f4d8ddadede39d82bb1a8109f89b6d9aa117b8f365de43895de0baa_cppui_modular253}}, - {{0x38ef3ab5b61c117a3465a017a9c8ba4c227659b41fdf145206d5c960f49dd45b_cppui_modular253, - 0x3992f83f26143dbdbd335604a1a14daf238ae43c249783f694feaf560aaae20f_cppui_modular253, - 0x350287977eb71c81b10ecd039aad99cfa9ed84a04301cb30869e1dc7fa1dc638_cppui_modular253}}, - {{0x3afb5bc126020586dcccba32dd054cd9a3f3b834ca9678d6802c48b1da97d6ed_cppui_modular253, - 0x172b7c2d8e7e4b06d183a2575b790749d0970c54966407fa8f59072c729de671_cppui_modular253, - 0x2eb53fe3a278688a70494569e54a0f0d269935aec6c897bef4d368c1f67d57e4_cppui_modular253}}, - {{0x375ae56b8d9310d553ed77d406dedc3f0393e5a321b71caee6a5bb7078b5035_cppui_modular253, - 0x1d49a0d53bc2993cbf1fb5d1da9bb76fe46a7031d5e5d43fadbf54bc17c1ef38_cppui_modular253, - 0x132d17b87cab6d707ddfa1f01df1724ad37957e989c44f1ff71426367f953160_cppui_modular253}}, - {{0x62da5280948d8c6c4acc7e6a1aa421f0f9ec179a44146750060be4be6755f85_cppui_modular253, - 0xa4b4d5cde54a974ea4e57ee4132d2ab2510c300f21930d6bbbf211d1add80f9_cppui_modular253, - 0x3356f1fbeac493ccab752b70bbed821ce49965c19284d7aacd78fbf3ff864e91_cppui_modular253}}, - {{0x42721e8a9cc32557851feb0e0190c5dfbf4cb1b8f47d37e7e653ec6ff8a4059_cppui_modular253, - 0x53d9b2633fff31ca4fc5724ce6b4422318128cdf01897d321e86f47cdf748b1_cppui_modular253, - 0x267d96caeafde5dbd3db1f0668b09ccd532a22f0205494716a786219fb4c801c_cppui_modular253}}, - {{0x39316997737610193c3f9ffcfd4e23d38aac12cd7b95b8d256d774101650a6ca_cppui_modular253, - 0x191e377462986563fdabf9b23529f7c84c6b200b9101b3a5096bca5f377981fb_cppui_modular253, - 0x20f89af9722f79c860d2059a0ec209cf3a7925ad0798cab655eca62fe73ff3d9_cppui_modular253}}, - {{0x1ca568aeddb2ef391a7c78ecf104d32d785b9ca145d97e35879df3534a7d1e0b_cppui_modular253, - 0x25de9ba0a37472c3b4c0b9c3bc25cbbf78d91881b6f94ee70e4abf090211251c_cppui_modular253, - 0x3393debd38d311881c7583bee07e605ef0e55c62f0508ccc2d26518cd568e1ef_cppui_modular253}}, - {{0x38df2fd18a8d7563806aa9d994a611f642d5c397388d1dd3e78bc7a4515c5b1_cppui_modular253, - 0x5c6503ff1ee548f2435ad9148d7fb94c9222b0908f445537a6667047f6d501c_cppui_modular253, - 0x104c88d6d0682d82d3d664826dc9565db101a220aa8f90572eb798468a82a2ab_cppui_modular253}}, - {{0x2caad6108c09ee6aee7851b4a2d2d3b7c3ca3c56a80003c8471f90bfa4ac628b_cppui_modular253, - 0xa57dbd4c327826c8a97bc7285f94bcddb966177346f1792c4bd7088aa0353f3_cppui_modular253, - 0x3c15552f9124318b8433d01bb53ba04ba1cc9eb91d83b918e32fea39fbe908fa_cppui_modular253}}, - {{0xe10c10cbbe1717a9441c6299c4fc087c222208bd4fa8f3be66d2075f623b513_cppui_modular253, - 0x1e8b254cbff2c92a83dff1728c81dd22a9570f590e497cb2d640042cb879a930_cppui_modular253, - 0x1812dbcd70c440610057bbfdd0cc4d31d1faf5786419b53841c4adc43f2b2352_cppui_modular253}}, + {{0x2ec559cd1a1f2f6889fc8ae5f07757f202b364429677c8ff6603fd6d93659b47_big_uint255, + 0x2553b08c788551bfe064d91c17eb1edb8662283229757711b2b30895f0aa3bad_big_uint255, + 0x25a706fb0f35b260b6f28d61e082d36a8f161be1f4d9416371a7b65f2bfafe4e_big_uint255}}, + {{0x37c0281fda664cc2448d0e7dd77aaa04752250817a945abeea8cfaaf3ee39ba0_big_uint255, + 0x140488321291998b8582eaceeb3fa9ca3980eb64a453573c5aaa2910405936b6_big_uint255, + 0x3a73fe35b1bdd66b809aad5eab47b5c83b0146fd7fc632dfb49cd91ae1169378_big_uint255}}, + {{0x21b7c2b35fd7710b06245711f26c0635d3e21de4db10dd3a7369f59f468d7be6_big_uint255, + 0x1803a068d25fef2ef652c8a4847aa18a29d1885e7bf77fd6a34d66536d09cad7_big_uint255, + 0x291de61c5e6268213772cf7e03c80c2e833eb77c58c46548d158a70fbbd9724b_big_uint255}}, + {{0x230043a0dc2dfab63607cbe1b9c482fdd937fdefecc6905aa5012e89babead13_big_uint255, + 0x218af77a05c502d3fa3144efcf47a0f2a0292498c10c6e2368565674e78764f4_big_uint255, + 0x223e2d94c177d27e071d55729d13a9b216955c7102cc9a95ea40058efb506117_big_uint255}}, + {{0x2a18257c15ad9b6fe8b7c5ad2129394e902c3c3802e738f24ce2f585ae5f6a38_big_uint255, + 0xa6f7ba75f216403d2e4940469d199474a65aa5ef814e36400bddef06158dcf8_big_uint255, + 0x169be41c6227956efef5b4cdde65d00d5e04fe766178bdc731615c6e5b93e31e_big_uint255}}, + {{0x2e28f50a9a55d2e91774083072734544417e290a1cfebc01801b94d0728fe663_big_uint255, + 0xfdedf8da8654a22831040cfc74432464b173ee68628fd90498480b9902f2819_big_uint255, + 0x46a3ed9863d2d739dd8bc9e90a746fda1197162d0a0bec3db1f2f6042cf04e2_big_uint255}}, + {{0x219e08b460c305b428670bacab86ac1e9458075778d35c3619ae7ba1f9b2ed76_big_uint255, + 0x38bb36a12ebcec4d4e8728eb43e3f12a6e33b1ffa1463379018d4e12424e62ca_big_uint255, + 0x1e9aa3fe25d116ccfbd6a8fccdae0aa9bc164a03ab7e951704ee9a715fbedee6_big_uint255}}, + {{0x30f33ed70da4c2bfb844ff1a7558b817d1ec300da86a1694f2db45047d5f18b_big_uint255, + 0x282b04137350495ab417cf2c47389bf681c39f6c22d9e370b7af75cbcbe4bb1_big_uint255, + 0x9b1528dea2eb5bd96905b88ff05fdf3e0f220fe1d93d1b54953ac98fec825f0_big_uint255}}, + {{0x30083dbbb5eab39311c7a8bfd5e55567fa864b3468b5f9200e529cda03d9ef71_big_uint255, + 0x17eace73cf67c6112239cbf51dec0e714ee4e5a91dbc9209dc17bbea5bcd094_big_uint255, + 0x37af1de8f5475ba165b90f8d568683d54e215df97e9287943370cf4118428097_big_uint255}}, + {{0x16ff7592836a45340ec6f2b0f122736d03f0bcb84012f922a4baa73ea0e66f51_big_uint255, + 0x1a5985d4b359d03de60b2edabb1853f476915febc0e40f83a2d1d0084efc3fd9_big_uint255, + 0x255a9d4beb9b5ea18ab9782b1abb267fc5b773b98ab655fd4d469698e1e1f975_big_uint255}}, + {{0x34a8d9f45200a9ac28021712be81e905967bac580a0b9ee57bc4231f5ecb936a_big_uint255, + 0x979556cb3edcbe4f33edd2094f1443b4b4ec6c457b0425b8463e788b9a2dcda_big_uint255, + 0x2a4d028c09ad39c30666b78b45cfadd5279f6239379c689a727f626679272654_big_uint255}}, + {{0xc31b68f6850b3bd71fe4e89984e2c87415523fb54f24ec8ae71430370154b33_big_uint255, + 0x1a27ca0b953d3dba6b8e01cf07d76c611a211d139f2dff5ac023ed2454f2ed90_big_uint255, + 0x109ae97c25d60242b86d7169196d2212f268b952dfd95a3937916b9905303180_big_uint255}}, + {{0x3698c932f2a16f7bb9abac089ec2de79c9965881708878683caf53caa83ad9c4_big_uint255, + 0x3c7e25e0ac8fba3dc1360f8a9a9fa0be0e031c8c76a93497b7cac7ed32ade6c0_big_uint255, + 0x2fc5023c5e4aed5aa7dfca0f5492f1b6efab3099360ec960237512f48c858a79_big_uint255}}, + {{0x2c124735f3f924546fb4fdfa2a018e03f53063d3a2e87fd285ba8d647eda6765_big_uint255, + 0x12c875c9b79591acf9033f8b6c1e357126c44b23f3486fbee0d98340a3382251_big_uint255, + 0x3cda935e895857d39a7db8476aeda5a5131cb165a353073fd3e473fd8855528d_big_uint255}}, + {{0x218eb756fa5f1df9f1eb922ef80b0852588779a7368e3d010def1512815d8759_big_uint255, + 0x23bcf1032957015ef171fbb4329bca0c57d59885522f25f4b082a3cf301cfbc6_big_uint255, + 0x17474c3b6a9bc1057df64b9e4d62badbc7f3867b3dd757c71c1f656205d7bceb_big_uint255}}, + {{0x19826c0ee22972deb41745d3bd412c2ae3d4c18535f4b60c9e870edffa3d550_big_uint255, + 0x30bcb17dfd622c46f3275f698319b68d8816bed0368ded435ed61992bc43efa9_big_uint255, + 0x3bd816c214c66410229cfbd1f4a3a42e6a0f82f3c0d49b09bc7b4c042ff2c94b_big_uint255}}, + {{0x8943ec01d9fb9f43c840757738979b146c3b6d1982280e92a52e8d045633ea1_big_uint255, + 0x2670bf8c01822e31c70976269d89ed58bc79ad2f9d1e3145df890bf898b57e47_big_uint255, + 0xdd53b41599ae78dbd3e689b65ebcca493effa94ed765eeec75a0d3bb20407f9_big_uint255}}, + {{0x68177d293585e0b8c8e76a8a565c8689a1d88e6a9afa79220bb0a2253f203c3_big_uint255, + 0x35216f471043866edc324ad8d8cf0cc792fe7a10bf874b1eeac67b451d6b2cf5_big_uint255, + 0x1fd6efb2536bfe11ec3736e7f7448c01eb2a5a9041bbf84631cc83ee0464f6af_big_uint255}}, + {{0x2c982c7352102289fc1b48dafcd9e3cc364d5a4324575e4721daf0af10033c67_big_uint255, + 0x352f7e8c7662d86db9c722d4d07778858771b832af5bb5dc3b13cf94851c1b45_big_uint255, + 0x18e3c0c1caa5e3ed66ee1ab6f55a5c8063d8c9b034ae47db43435147149e37d5_big_uint255}}, + {{0x3124b12deb37dcbb3d96c1a08d507523e30e03e0919559bf2daaab238422eade_big_uint255, + 0x143bf0def31437eb21095200d2d406e6e5727833683d9740b9bfc1713215dc9a_big_uint255, + 0x1ebee92143f32b4f9d9a90ad62b8483c977480767b53c71f6bde934a8ef38f17_big_uint255}}, + {{0xff6c794ad1afaa494088d5f8ee6c47bf9e83013478628cf9f41f2e81383ebeb_big_uint255, + 0x3d0a10ac3ee707c62e8bdf2cdb49ac2cf4096cf41a7f214fdd1f8f9a24804f17_big_uint255, + 0x1d61014cd3ef0d87d037c56bdfa370a73352b95d472ead1937bed06a31801c91_big_uint255}}, + {{0x123e185b2ec7f072507ac1e4e743589bb25c8fdb468e329e7de169875f90c525_big_uint255, + 0x30b780c0c1cb0609623732824c75017da9799bdc7e08b527bae7f409ebdbecf2_big_uint255, + 0x1dfb3801b7ae4e209f68195612965c6e37a2ed5cf1eeee3d46edf655d6f5afef_big_uint255}}, + {{0x2fdee42805b2774064e963c741552556019a9611928dda728b78311e1f049528_big_uint255, + 0x31b2b65c431212ed36fdda5358d90cd9cb51c9f493bff71cdc75654547e4a22b_big_uint255, + 0x1e3ca033d8413b688db7a543e62ac2e69644c0614801379cfe62fa220319e0ef_big_uint255}}, + {{0xc8ef1168425028c52a32d93f9313153e52e9cf15e5ec2b4ca09d01730dad432_big_uint255, + 0x378c73373a36a5ed94a34f75e5de7a7a6187ea301380ecfb6f1a22cf8552638e_big_uint255, + 0x3218aeec20048a564015e8f221657fbe489ba404d7f5f15b829c7a75a85c2f44_big_uint255}}, + {{0x3312ef7cbbad31430f20f30931b070379c77119c1825c6560cd2c82cf767794e_big_uint255, + 0x356449a71383674c607fa31ded8c0c0d2d20fb45c36698d258cecd982dba478c_big_uint255, + 0xcc88d1c91481d5321174e55b49b2485682c87fac2adb332167a20bcb57db359_big_uint255}}, + {{0x1defccbd33740803ad284bc48ab959f349b94e18d773c6c0c58a4b9390cc300f_big_uint255, + 0x2d263cc2e9af126d768d9e1d2bf2cbf32063be831cb1548ffd716bc3ee7034fe_big_uint255, + 0x111e314db6fb1a28e241028ce3d347c52558a33b6b11285a97fffa1b479e969d_big_uint255}}, + {{0x27409401e92001d434cba2868e9e371703199c2372d23ef329e537b513f453e_big_uint255, + 0x24a852bdf9cb2a8fedd5e85a59867d4916b8a57bdd5f84e1047d410770ffffa0_big_uint255, + 0x205d1b0ee359f621845ac64ff7e383a3eb81e03d2a2966557746d21b47329d6e_big_uint255}}, + {{0x25c327e2cc93ec6f0f23b5e41c931bfbbe4c12da7d55a2b1c91c79db982df903_big_uint255, + 0x39df3e22d22b09b4265da50ef175909ce79e8f0b9599dff01cf80e70884982b9_big_uint255, + 0x9b08d58853d8ac908c5b14e5eb8611b45f40faaa59cb8dff98fb30efcdfaa01_big_uint255}}, + {{0x1ece62374d79e717db4a68f9cddaaf52f8884f397375c0f3c5c1dbaa9c57a0a6_big_uint255, + 0x3bd089b727a0ee08e263fa5e35b618db87d7bcce03441475e3fd49639b9fa1c1_big_uint255, + 0x3fedea75f37ad9cfc94c95141bfb4719ee9b32b874b93dcfc0cc12f51a7b2aff_big_uint255}}, + {{0x36dfa18a9ba1b194228494a8acaf0668cb43aca9d4e0a251b20ec3424d0e65cd_big_uint255, + 0x119e98db3f49cd7fcb3b0632567d9ccaa5498b0d411a1437f57c658f41931d0c_big_uint255, + 0x1100b21c306475d816b3efcd75c3ae135c54ad3cc56ca22abd9b7f45e6d02c19_big_uint255}}, + {{0x15791f9bbea213937208c82794eb667f157f003c65b64aa9800f4bbee4ea5119_big_uint255, + 0x1adbeb5e9c4d515ecfd250ebee56a2a816eb3e3dc8d5d440c1ab4285b350be64_big_uint255, + 0x1fbf4738844a9a249aec253e8e4260e4ab09e26bea29ab0020bf0e813ceecbc3_big_uint255}}, + {{0x3418a929556ec51a086459bb9e63a821d407388cce83949b9af3e3b0434eaf0e_big_uint255, + 0x9406b5c3af0290f997405d0c51be69544afb240d48eeab1736cda0432e8ff9e_big_uint255, + 0x23ece5d70b38ccc9d43cd923e5e3e2f62d1d873c9141ef01f89b6de1336f5bc7_big_uint255}}, + {{0x1852d574e46d370a0b1e64f6c41eeb8d40cf96c524a62965661f2ef87e67234d_big_uint255, + 0xa657027cce8d4f238ea896dde273b7537b508674a366c66b3789d9828b0ce90_big_uint255, + 0x3482f98a46ec358108fbbb68fd94f8f2baa73c723baf21922a850e45511f5a2d_big_uint255}}, + {{0x3f62f164f8c905b335a6cbf76131d2430237e17ad6abc76d2a6329c1ec5463ee_big_uint255, + 0x7e397f503f9c1cea028465b2950ea444b15c5eab567d5a69ea2925685694df0_big_uint255, + 0x405f1fc711872373d6eb50a09fbfb05b2703ae0a0b4edb86aedb216db17a876_big_uint255}}, + {{0xbe0848eb3e09c7027110ad842c502441c97afa14a844406fcfec754a25658c1_big_uint255, + 0x26b78788fd98ac020bac92d0e7792bb5ffed06b697d847f61d984f905d9ba870_big_uint255, + 0x38fd5318d39055c82fef9bdd33315a541c0ec4363e6cc0687005871355dfa573_big_uint255}}, + {{0x380bd03b840c48c8ba3830e7cace72f91a5002218c617294e8c8bc687d5216de_big_uint255, + 0x2c6e57ddc1d7c81a0299ed49c3d74759416bc8426f30e2af5622895c531b4e1c_big_uint255, + 0x11d3a81b262fc76ef506ee6d88e5991d0de8cb9dd162d97c58b175e3bc4584f3_big_uint255}}, + {{0x9b6b283ebaf45fbb1e448969ace9be62adf67ddf58614925741deb6a1ba7def_big_uint255, + 0x15d5095164c885763fa83cdf776d436382821a17bc5563a5b6f6dfcdac504ade_big_uint255, + 0x3427fdbfca3cea23063eb138c5055c6cad9c4252b23d12c12293308eff7d9124_big_uint255}}, + {{0x272f12e731077b74317ef2543c33b86194db1da5f6a7e1eee0656672c81685fe_big_uint255, + 0x5323f85deb8c07c193c37a73d76f6114967913a2bdce11995f183e769f42967_big_uint255, + 0x3d5ce415ecae4ba42b417ea3a501b44694f46efddff2fcca952b097f3852d3d8_big_uint255}}, + {{0xe8ec18c7b52c514d42047f1f0b2a90cb8c0c7391cf9479cd7fd5bfe1d3db8f2_big_uint255, + 0x1591c865ea7065d54304519f8bb268bddbeaf3afae54edcd01a833ed0a9ef1a_big_uint255, + 0x3eddbeeee5eca5deee4bf1789c435e1241e0d71186d8f0f62d74729dfc3119fb_big_uint255}}, + {{0x23691c7009b9283b268766e8d491716d3c1993e6ecf458def8f762af3e355707_big_uint255, + 0x26cdab2c837ebeac5bea4be1d6f0488034907374d81a61a34f1c4db397d4c09b_big_uint255, + 0x2d2206730664d58be0676dad1fee0e990c264a7410a2cdb6b55653c1df72ef56_big_uint255}}, + {{0x2bb74bb185372334a4ef5f6d18e2ece54086e62b04985dd794b7117b0be9217f_big_uint255, + 0x366250fe928c45d8d5aa35f0a142754907ff3c598410199b589b28cd851b2204_big_uint255, + 0x1868f8118482c6b4a5a61a81c8aaca128953179c20f73a44022d9976bdc34af1_big_uint255}}, + {{0xb7901c670e1d75d726eb88d000950b3c963f0f7a6ca24994bdc07ae2f78b4d3_big_uint255, + 0x32c4bd8ab70e1f25af77af57dd340c8e6c8a101dfc5e8dd03314566db90b870_big_uint255, + 0x1ce36db31fe6ea3cd9308db9aa43a8af5c41a8f0a6509bfe00f0e7b486c0ab8a_big_uint255}}, + {{0x26596ea9e1915e53da3479e9d13c3c920505e2449e325810ff6ca855fe4b7c6e_big_uint255, + 0x30f296a269868a7fca8f5b1e269c0116304df31729559a270e713509d3a6d5dc_big_uint255, + 0x2588961eff7897d87eb6ac72350ef9f52640647cbd23136919a994dfd1979d5_big_uint255}}, + {{0x16a49e69721e80690d41e06229e9bc2dbaf9a2abf4b89388db2485595409d62b_big_uint255, + 0x3d7aca02c051fcad8073cfd67210cd423a31888afc4a444d9d3adf3d6c5da7bf_big_uint255, + 0x299bd48a740b7790075268312ab8072c72421de5a6437fa5e25431ef951847b4_big_uint255}}, + {{0x11a69b867d9ea22ec1b2f28e96617129e36eefaea9e8126bdc6a42b99072902b_big_uint255, + 0x25bc1af391f3c1f2284a95da92b5883d1b3a40794b2358b2e7a70fca22da64ce_big_uint255, + 0x361ab3843f4d8ddadede39d82bb1a8109f89b6d9aa117b8f365de43895de0baa_big_uint255}}, + {{0x38ef3ab5b61c117a3465a017a9c8ba4c227659b41fdf145206d5c960f49dd45b_big_uint255, + 0x3992f83f26143dbdbd335604a1a14daf238ae43c249783f694feaf560aaae20f_big_uint255, + 0x350287977eb71c81b10ecd039aad99cfa9ed84a04301cb30869e1dc7fa1dc638_big_uint255}}, + {{0x3afb5bc126020586dcccba32dd054cd9a3f3b834ca9678d6802c48b1da97d6ed_big_uint255, + 0x172b7c2d8e7e4b06d183a2575b790749d0970c54966407fa8f59072c729de671_big_uint255, + 0x2eb53fe3a278688a70494569e54a0f0d269935aec6c897bef4d368c1f67d57e4_big_uint255}}, + {{0x375ae56b8d9310d553ed77d406dedc3f0393e5a321b71caee6a5bb7078b5035_big_uint255, + 0x1d49a0d53bc2993cbf1fb5d1da9bb76fe46a7031d5e5d43fadbf54bc17c1ef38_big_uint255, + 0x132d17b87cab6d707ddfa1f01df1724ad37957e989c44f1ff71426367f953160_big_uint255}}, + {{0x62da5280948d8c6c4acc7e6a1aa421f0f9ec179a44146750060be4be6755f85_big_uint255, + 0xa4b4d5cde54a974ea4e57ee4132d2ab2510c300f21930d6bbbf211d1add80f9_big_uint255, + 0x3356f1fbeac493ccab752b70bbed821ce49965c19284d7aacd78fbf3ff864e91_big_uint255}}, + {{0x42721e8a9cc32557851feb0e0190c5dfbf4cb1b8f47d37e7e653ec6ff8a4059_big_uint255, + 0x53d9b2633fff31ca4fc5724ce6b4422318128cdf01897d321e86f47cdf748b1_big_uint255, + 0x267d96caeafde5dbd3db1f0668b09ccd532a22f0205494716a786219fb4c801c_big_uint255}}, + {{0x39316997737610193c3f9ffcfd4e23d38aac12cd7b95b8d256d774101650a6ca_big_uint255, + 0x191e377462986563fdabf9b23529f7c84c6b200b9101b3a5096bca5f377981fb_big_uint255, + 0x20f89af9722f79c860d2059a0ec209cf3a7925ad0798cab655eca62fe73ff3d9_big_uint255}}, + {{0x1ca568aeddb2ef391a7c78ecf104d32d785b9ca145d97e35879df3534a7d1e0b_big_uint255, + 0x25de9ba0a37472c3b4c0b9c3bc25cbbf78d91881b6f94ee70e4abf090211251c_big_uint255, + 0x3393debd38d311881c7583bee07e605ef0e55c62f0508ccc2d26518cd568e1ef_big_uint255}}, + {{0x38df2fd18a8d7563806aa9d994a611f642d5c397388d1dd3e78bc7a4515c5b1_big_uint255, + 0x5c6503ff1ee548f2435ad9148d7fb94c9222b0908f445537a6667047f6d501c_big_uint255, + 0x104c88d6d0682d82d3d664826dc9565db101a220aa8f90572eb798468a82a2ab_big_uint255}}, + {{0x2caad6108c09ee6aee7851b4a2d2d3b7c3ca3c56a80003c8471f90bfa4ac628b_big_uint255, + 0xa57dbd4c327826c8a97bc7285f94bcddb966177346f1792c4bd7088aa0353f3_big_uint255, + 0x3c15552f9124318b8433d01bb53ba04ba1cc9eb91d83b918e32fea39fbe908fa_big_uint255}}, + {{0xe10c10cbbe1717a9441c6299c4fc087c222208bd4fa8f3be66d2075f623b513_big_uint255, + 0x1e8b254cbff2c92a83dff1728c81dd22a9570f590e497cb2d640042cb879a930_big_uint255, + 0x1812dbcd70c440610057bbfdd0cc4d31d1faf5786419b53841c4adc43f2b2352_big_uint255}}, }}; }; @@ -241,19 +241,19 @@ namespace nil { state_size> mds = {{ {{ - 0x3e28f7dd17f47a7e304a54d377dd7aeead6b92027d60baf300246cf023dd594e_cppui_modular255, - 0x30db06abb696fccb92b28ac214f4893d3fd84b3d4a9018754975e24477c32600_cppui_modular255, - 0x174110bc1b058c6016ff5e8152ab3ffb6e2e6c4d01e66aba302659c51b7f563a_cppui_modular255, + 0x3e28f7dd17f47a7e304a54d377dd7aeead6b92027d60baf300246cf023dd594e_big_uint255, + 0x30db06abb696fccb92b28ac214f4893d3fd84b3d4a9018754975e24477c32600_big_uint255, + 0x174110bc1b058c6016ff5e8152ab3ffb6e2e6c4d01e66aba302659c51b7f563a_big_uint255, }}, {{ - 0x12d36fa83503146980c05a1d48bcd50d2e9d4390e353a158a0fe387e2b4aeb0c_cppui_modular255, - 0x2ab17c8eb369bea76e9f0c385e8bafc71536bedc8e06d06fd65c1670e94d9c55_cppui_modular255, - 0xcc915328165c13986af127e108b9e5d9a60c5dc92e3e7636b8c3da5b4a8537_cppui_modular255, + 0x12d36fa83503146980c05a1d48bcd50d2e9d4390e353a158a0fe387e2b4aeb0c_big_uint255, + 0x2ab17c8eb369bea76e9f0c385e8bafc71536bedc8e06d06fd65c1670e94d9c55_big_uint255, + 0xcc915328165c13986af127e108b9e5d9a60c5dc92e3e7636b8c3da5b4a8537_big_uint255, }}, {{ - 0x4d9a6d270696688eb4346153b380c613a3dcaf0fb5a1e8380409ae0a143d31b_cppui_modular255, - 0x2a805eee3317c8bae1f7d15abe4d27fee5fabcf9a3334d18b1932a33774c324_cppui_modular255, - 0x19b092e9c6dffd1eb1b6df2dbc00bb2283b9a787273dcbad9b8d89cd502b7bbd_cppui_modular255, + 0x4d9a6d270696688eb4346153b380c613a3dcaf0fb5a1e8380409ae0a143d31b_big_uint255, + 0x2a805eee3317c8bae1f7d15abe4d27fee5fabcf9a3334d18b1932a33774c324_big_uint255, + 0x19b092e9c6dffd1eb1b6df2dbc00bb2283b9a787273dcbad9b8d89cd502b7bbd_big_uint255, }}, }}; @@ -261,279 +261,279 @@ namespace nil { rounds_amount> round_constant = {{ {{ - 0x590ef2a14ba3cef7e8f93a6dde4d481057d5d0547f6f09341b6b8be19c00ee6_cppui_modular255, - 0x77faa77ed78ff8b695859df34db5157f6b491567f5f382a8fce538f0e5ffe6f_cppui_modular255, - 0x3e54b7c94955c8994ed16ec9950d59aca4c9b6e419ef4935682528c2eba2de50_cppui_modular255, + 0x590ef2a14ba3cef7e8f93a6dde4d481057d5d0547f6f09341b6b8be19c00ee6_big_uint255, + 0x77faa77ed78ff8b695859df34db5157f6b491567f5f382a8fce538f0e5ffe6f_big_uint255, + 0x3e54b7c94955c8994ed16ec9950d59aca4c9b6e419ef4935682528c2eba2de50_big_uint255, }}, {{ - 0x37d991dc8d4de3912355745c7d78f8b04516b14d30e29324bb5dd075ca0f0c1d_cppui_modular255, - 0xc0614dd1cff6c6817aff09d82ef828e80caed4da023823088fd021020f81f0e_cppui_modular255, - 0x3335e335a3fed44842359528b3e88e1824a173da819d7ee6905e82eed054243_cppui_modular255, + 0x37d991dc8d4de3912355745c7d78f8b04516b14d30e29324bb5dd075ca0f0c1d_big_uint255, + 0xc0614dd1cff6c6817aff09d82ef828e80caed4da023823088fd021020f81f0e_big_uint255, + 0x3335e335a3fed44842359528b3e88e1824a173da819d7ee6905e82eed054243_big_uint255, }}, {{ - 0xb2202aa54d42f4f07693766723b9624c9fca4d33a2b9ee40f1c809a15a48a1d_cppui_modular255, - 0x290253e0e1d2c72b32a5b272137a0892b5934b0b8f26b4fc25ea00d63a70e9df_cppui_modular255, - 0x3e99873e73025d7c8b71fd209d13dba7a1021013f0815ea33a42ae94b63d00f3_cppui_modular255, + 0xb2202aa54d42f4f07693766723b9624c9fca4d33a2b9ee40f1c809a15a48a1d_big_uint255, + 0x290253e0e1d2c72b32a5b272137a0892b5934b0b8f26b4fc25ea00d63a70e9df_big_uint255, + 0x3e99873e73025d7c8b71fd209d13dba7a1021013f0815ea33a42ae94b63d00f3_big_uint255, }}, {{ - 0x164682f55ec314f639f5f8062a4ddf11ed80d5822591a22ff54f340d90165d85_cppui_modular255, - 0x309ba21093c9d04c81bd5273ad1064e1bd9067312d3269dddadf74c2eb1d3e01_cppui_modular255, - 0x159e72bb030cb8994b2eac1d4ee7d0f06b0b092e7611d460605b3d8c60a274d9_cppui_modular255, + 0x164682f55ec314f639f5f8062a4ddf11ed80d5822591a22ff54f340d90165d85_big_uint255, + 0x309ba21093c9d04c81bd5273ad1064e1bd9067312d3269dddadf74c2eb1d3e01_big_uint255, + 0x159e72bb030cb8994b2eac1d4ee7d0f06b0b092e7611d460605b3d8c60a274d9_big_uint255, }}, {{ - 0xd743dbfc6f3c833ce2ef4956bead3c118fd3198652038781903ac929218fdd6_cppui_modular255, - 0x18cb5a9230eb74045ede834ac6dd129bd2a0462dca1d96d167b9be0e1e96a688_cppui_modular255, - 0x2d82f85fc222b215902d61c85c968b39759d6c2e9aa0e11fd08881bfae311e66_cppui_modular255, + 0xd743dbfc6f3c833ce2ef4956bead3c118fd3198652038781903ac929218fdd6_big_uint255, + 0x18cb5a9230eb74045ede834ac6dd129bd2a0462dca1d96d167b9be0e1e96a688_big_uint255, + 0x2d82f85fc222b215902d61c85c968b39759d6c2e9aa0e11fd08881bfae311e66_big_uint255, }}, {{ - 0x2920828be5972cb8ff8023386a90a837bbfcca99be240137f7d211ecb72521e6_cppui_modular255, - 0x3101774e1c3d72d010efb29c16c476e988bdb47321af3f82e05cc9c6b0360853_cppui_modular255, - 0x327b4e6353c099e41a8ffab9103996b9d29d07da0f1a191aa6fb55c0720c6f54_cppui_modular255, + 0x2920828be5972cb8ff8023386a90a837bbfcca99be240137f7d211ecb72521e6_big_uint255, + 0x3101774e1c3d72d010efb29c16c476e988bdb47321af3f82e05cc9c6b0360853_big_uint255, + 0x327b4e6353c099e41a8ffab9103996b9d29d07da0f1a191aa6fb55c0720c6f54_big_uint255, }}, {{ - 0x71c29018dd48d5c557379ea9d4afd80b92788ed509ced6bac47a65ba8b475c_cppui_modular255, - 0x25efdeef6c5ad56834b24cfe03d57360b4335ec902c78ee9348ebaceab726038_cppui_modular255, - 0x109ffe5cd918fcd7da7fdb40d32ac406f453874fda431c35c9e35601bcf708e9_cppui_modular255, + 0x71c29018dd48d5c557379ea9d4afd80b92788ed509ced6bac47a65ba8b475c_big_uint255, + 0x25efdeef6c5ad56834b24cfe03d57360b4335ec902c78ee9348ebaceab726038_big_uint255, + 0x109ffe5cd918fcd7da7fdb40d32ac406f453874fda431c35c9e35601bcf708e9_big_uint255, }}, {{ - 0x1f4de5d78b4378e0eca49ed94999d8bc91489fadfd896c8affbaa6e2654d18bf_cppui_modular255, - 0x173185e1eaad0664ba1c01b8e417a4422c22a43d622c5df98c11481e205e499e_cppui_modular255, - 0x161a0e8b31a6fd42727dc0a37ae4f715683af35873bd37e78e10abcb0e21fabd_cppui_modular255, + 0x1f4de5d78b4378e0eca49ed94999d8bc91489fadfd896c8affbaa6e2654d18bf_big_uint255, + 0x173185e1eaad0664ba1c01b8e417a4422c22a43d622c5df98c11481e205e499e_big_uint255, + 0x161a0e8b31a6fd42727dc0a37ae4f715683af35873bd37e78e10abcb0e21fabd_big_uint255, }}, {{ - 0x3decab3f42934acc644cc227315ecd6bcee79e5d92dc686823f60e6a3c40a7cd_cppui_modular255, - 0x29d7541d2a4fcdf9c7f144ce1e957a5e5c6d5d064618416817d0ad39708b2807_cppui_modular255, - 0x1d0525558685977d321fe86c05f462ae2e569e6d202bd5c62b0815320454114a_cppui_modular255, + 0x3decab3f42934acc644cc227315ecd6bcee79e5d92dc686823f60e6a3c40a7cd_big_uint255, + 0x29d7541d2a4fcdf9c7f144ce1e957a5e5c6d5d064618416817d0ad39708b2807_big_uint255, + 0x1d0525558685977d321fe86c05f462ae2e569e6d202bd5c62b0815320454114a_big_uint255, }}, {{ - 0x27d1aec0ccc80f71d09d2a9c0b76ee5fe9a87516f0e691a9f5fba360cb79f32_cppui_modular255, - 0x1c28ed68159e54df8296e654b0c1b5872de41557b7b02adc256dcc1600229ba8_cppui_modular255, - 0x15c9cbe29bf4e7d8bae22dd2213c86724e9944ea4b9e34b6681beb1b0972215e_cppui_modular255, + 0x27d1aec0ccc80f71d09d2a9c0b76ee5fe9a87516f0e691a9f5fba360cb79f32_big_uint255, + 0x1c28ed68159e54df8296e654b0c1b5872de41557b7b02adc256dcc1600229ba8_big_uint255, + 0x15c9cbe29bf4e7d8bae22dd2213c86724e9944ea4b9e34b6681beb1b0972215e_big_uint255, }}, {{ - 0xd479e19db4686f5cb1ef9a8331a1ab680c5d3770e9a9a8a7a6ac58f8006c38a_cppui_modular255, - 0x3494f6ecf12d5c3d758c5380652154e26f7f3c888d362ea512da8dc265fc32b0_cppui_modular255, - 0x37ed9343bcc46adb4300f3d8cb88c311383061710836351ded0a146de837966_cppui_modular255, + 0xd479e19db4686f5cb1ef9a8331a1ab680c5d3770e9a9a8a7a6ac58f8006c38a_big_uint255, + 0x3494f6ecf12d5c3d758c5380652154e26f7f3c888d362ea512da8dc265fc32b0_big_uint255, + 0x37ed9343bcc46adb4300f3d8cb88c311383061710836351ded0a146de837966_big_uint255, }}, {{ - 0x35548be14e1cbcbd7d2c0e8c4a95e5fc2893daba34197ef41c350ae7072cde4e_cppui_modular255, - 0x34e58327efe8d41b81b66b6c3fad424b2ff9008392909bb90eb10f08462b998b_cppui_modular255, - 0xf55c1223abf50500c4ac4103f679dcfea4eebb368cf64ef3a63ee27146846f_cppui_modular255, + 0x35548be14e1cbcbd7d2c0e8c4a95e5fc2893daba34197ef41c350ae7072cde4e_big_uint255, + 0x34e58327efe8d41b81b66b6c3fad424b2ff9008392909bb90eb10f08462b998b_big_uint255, + 0xf55c1223abf50500c4ac4103f679dcfea4eebb368cf64ef3a63ee27146846f_big_uint255, }}, {{ - 0x11dd4ab1734f7069498cc390a41b7de375d8968cec91b5c74cef9812e8ee7ce7_cppui_modular255, - 0x1e344f255d7c5e537439e75f9c4ea64dd1fda1b0988e5c83626055859369b43c_cppui_modular255, - 0x147db9afad2d2f7c4249357587faba99a6a38da16fe9ba74ef2f3fc5a0878f44_cppui_modular255, + 0x11dd4ab1734f7069498cc390a41b7de375d8968cec91b5c74cef9812e8ee7ce7_big_uint255, + 0x1e344f255d7c5e537439e75f9c4ea64dd1fda1b0988e5c83626055859369b43c_big_uint255, + 0x147db9afad2d2f7c4249357587faba99a6a38da16fe9ba74ef2f3fc5a0878f44_big_uint255, }}, {{ - 0x31774ce29d00f566bd499f181517df231be7205c05e7527d71a1c89cb0e841a7_cppui_modular255, - 0x32bdf60a6685665871f654169996f508be8710c99f3fa6f44a7bc4d2c25fbfd8_cppui_modular255, - 0x2f567f84ec13720611900c4b9e8303f04c8cc5c57daa4d95d9ee009514205e65_cppui_modular255, + 0x31774ce29d00f566bd499f181517df231be7205c05e7527d71a1c89cb0e841a7_big_uint255, + 0x32bdf60a6685665871f654169996f508be8710c99f3fa6f44a7bc4d2c25fbfd8_big_uint255, + 0x2f567f84ec13720611900c4b9e8303f04c8cc5c57daa4d95d9ee009514205e65_big_uint255, }}, {{ - 0x2dbd279621e591da57f54459f4160dde2f5c78e478d20f2f4763832e013bc07f_cppui_modular255, - 0x1275fb5ba53b7d2b5322e63f09a48026d684369c8e12241a808085a78ab3a369_cppui_modular255, - 0x1dd0beba925fe1df13f732b03287cad943569d62ec9059afc2c8120655e97d78_cppui_modular255, + 0x2dbd279621e591da57f54459f4160dde2f5c78e478d20f2f4763832e013bc07f_big_uint255, + 0x1275fb5ba53b7d2b5322e63f09a48026d684369c8e12241a808085a78ab3a369_big_uint255, + 0x1dd0beba925fe1df13f732b03287cad943569d62ec9059afc2c8120655e97d78_big_uint255, }}, {{ - 0xa37d78e392a5c8441f98e9dbd51a9151e78fb877885ecb885b0834c50cfea4d_cppui_modular255, - 0x1ebb7e2592122cd16d27e13410b2b48d520d8e99d38c1d86af0ac13565dfeb88_cppui_modular255, - 0x24a6454b0a69c59916d64f532b56226f8d49969432b7d0efc675f599c3bdb64f_cppui_modular255, + 0xa37d78e392a5c8441f98e9dbd51a9151e78fb877885ecb885b0834c50cfea4d_big_uint255, + 0x1ebb7e2592122cd16d27e13410b2b48d520d8e99d38c1d86af0ac13565dfeb88_big_uint255, + 0x24a6454b0a69c59916d64f532b56226f8d49969432b7d0efc675f599c3bdb64f_big_uint255, }}, {{ - 0x269668b3e7835df2f85b82e9ef8647c43205e799135ce669256bf55f07448209_cppui_modular255, - 0x15c87375d4514bbdddbfd84e51f246446f1b16bb58bd4bd9fa2ff57e6aa66057_cppui_modular255, - 0x11ce62bbe1242334c260a67817be908a9422d9b9c6ee96c00772fcc8fc501db6_cppui_modular255, + 0x269668b3e7835df2f85b82e9ef8647c43205e799135ce669256bf55f07448209_big_uint255, + 0x15c87375d4514bbdddbfd84e51f246446f1b16bb58bd4bd9fa2ff57e6aa66057_big_uint255, + 0x11ce62bbe1242334c260a67817be908a9422d9b9c6ee96c00772fcc8fc501db6_big_uint255, }}, {{ - 0x20348b7d6b381bfd3ac923d60b965086d281d8a654ad5f3210d277789641fe98_cppui_modular255, - 0x1398d090fd1144d1e84798e3a0efa942abfe650947e4a3cfa409ff14b541fae9_cppui_modular255, - 0x2461a1a2d6e3a0b2e5185ae6c844fe2a3b2d85dfb1cf891efc79ae80dd776bed_cppui_modular255, + 0x20348b7d6b381bfd3ac923d60b965086d281d8a654ad5f3210d277789641fe98_big_uint255, + 0x1398d090fd1144d1e84798e3a0efa942abfe650947e4a3cfa409ff14b541fae9_big_uint255, + 0x2461a1a2d6e3a0b2e5185ae6c844fe2a3b2d85dfb1cf891efc79ae80dd776bed_big_uint255, }}, {{ - 0x3e1f1de94c4af008188ba5eaef1da9ab9792ce54eda56bb5a519a65cd808885b_cppui_modular255, - 0x1dee6ead07fbc0fe883f4d397994d75ba3c4f90720e74ae2da13066bc3a7dc3b_cppui_modular255, - 0x287d06396bcb63555cb2ff408ea075cf402b10a3c608043d0cf2e3685ec6e2ad_cppui_modular255, + 0x3e1f1de94c4af008188ba5eaef1da9ab9792ce54eda56bb5a519a65cd808885b_big_uint255, + 0x1dee6ead07fbc0fe883f4d397994d75ba3c4f90720e74ae2da13066bc3a7dc3b_big_uint255, + 0x287d06396bcb63555cb2ff408ea075cf402b10a3c608043d0cf2e3685ec6e2ad_big_uint255, }}, {{ - 0x36d84c953d584607478da6183dc4da71bdbf737d45fb57d5a53badc123ae071c_cppui_modular255, - 0x24c8fd13d2687a9f90c61da26823d4934b350cfa488d528482399e106a70ac74_cppui_modular255, - 0x52e052a6a493457c9476ccc4fd9924e5c7247b98e58a3cfa688c0f8314bea68_cppui_modular255, + 0x36d84c953d584607478da6183dc4da71bdbf737d45fb57d5a53badc123ae071c_big_uint255, + 0x24c8fd13d2687a9f90c61da26823d4934b350cfa488d528482399e106a70ac74_big_uint255, + 0x52e052a6a493457c9476ccc4fd9924e5c7247b98e58a3cfa688c0f8314bea68_big_uint255, }}, {{ - 0x2fd32bae8a40ab498f6ba290733bb82504de1be782c1cdf039e2fbc843a01e52_cppui_modular255, - 0x4e8e7d3413c8c8ccfe154dc51f31c7682627c71fa4b50daab27f2a4d2623ea6_cppui_modular255, - 0x20c16d0097cebeb385508b606487baaf3bad515ba8a0b977f15cb50239418e38_cppui_modular255, + 0x2fd32bae8a40ab498f6ba290733bb82504de1be782c1cdf039e2fbc843a01e52_big_uint255, + 0x4e8e7d3413c8c8ccfe154dc51f31c7682627c71fa4b50daab27f2a4d2623ea6_big_uint255, + 0x20c16d0097cebeb385508b606487baaf3bad515ba8a0b977f15cb50239418e38_big_uint255, }}, {{ - 0x34f1df6035aac75204368125b0c4cec107e2f9eb0005517d26d6113e1f366271_cppui_modular255, - 0x375973b59ed7b4bdb33642d20e6364f37a942f9018f6bca5abc10705481425e0_cppui_modular255, - 0x269e8c978803e51d43439b7c18c4260e819e09e7d8c8d38706463bbb811c698c_cppui_modular255, + 0x34f1df6035aac75204368125b0c4cec107e2f9eb0005517d26d6113e1f366271_big_uint255, + 0x375973b59ed7b4bdb33642d20e6364f37a942f9018f6bca5abc10705481425e0_big_uint255, + 0x269e8c978803e51d43439b7c18c4260e819e09e7d8c8d38706463bbb811c698c_big_uint255, }}, {{ - 0x21be1913f874f3edb88a1f60cd157fcb76ff20b4eb139aae205b5a2764098782_cppui_modular255, - 0x37a0a8ba83db884f721c25027d188c7ab7c7840b7860675b33e1c93e4023927f_cppui_modular255, - 0x56d0e67fde779b7be5f308a3ce119e23e0503e6dabdbbd5189bb44dc6a6f0a4_cppui_modular255, + 0x21be1913f874f3edb88a1f60cd157fcb76ff20b4eb139aae205b5a2764098782_big_uint255, + 0x37a0a8ba83db884f721c25027d188c7ab7c7840b7860675b33e1c93e4023927f_big_uint255, + 0x56d0e67fde779b7be5f308a3ce119e23e0503e6dabdbbd5189bb44dc6a6f0a4_big_uint255, }}, {{ - 0x144723436a329da5644cce96fee4952b066092c36bd12838b4ffd4283cfe82c4_cppui_modular255, - 0xec0b5f14ba50aa2b022d06fbb920a2aafb465b8c7f81fc119371a4cbb6acff7_cppui_modular255, - 0x685de18d9a346a35c44a2a4ac7283d6fe2e4a9dc058bd537700bc2495271721_cppui_modular255, + 0x144723436a329da5644cce96fee4952b066092c36bd12838b4ffd4283cfe82c4_big_uint255, + 0xec0b5f14ba50aa2b022d06fbb920a2aafb465b8c7f81fc119371a4cbb6acff7_big_uint255, + 0x685de18d9a346a35c44a2a4ac7283d6fe2e4a9dc058bd537700bc2495271721_big_uint255, }}, {{ - 0x178dcb74b546adea41afd5d93ef564cb3adb0ef5200201daea0faa5026bb8cbc_cppui_modular255, - 0x1c1dcb1ef6cf5f036ae0030bf78f1643c439843959dd74fa28ea3663735cc923_cppui_modular255, - 0xcfae6c99994c5f702cba3b32a4e38f3764207bfe7cd9bf577633b41843ea138_cppui_modular255, + 0x178dcb74b546adea41afd5d93ef564cb3adb0ef5200201daea0faa5026bb8cbc_big_uint255, + 0x1c1dcb1ef6cf5f036ae0030bf78f1643c439843959dd74fa28ea3663735cc923_big_uint255, + 0xcfae6c99994c5f702cba3b32a4e38f3764207bfe7cd9bf577633b41843ea138_big_uint255, }}, {{ - 0x2838a02558716d2b49c06fb34c49cd820ec71e861caa935f4a303e42030ae3df_cppui_modular255, - 0x2c1944f3ec2852ed6b50fbc4abbc8f284797b36a23b321d2763ef48b1a5a0212_cppui_modular255, - 0x30a218acd109f04657954e82f9faccc477731f4a954cf8ac12d15ebd450e9dcb_cppui_modular255, + 0x2838a02558716d2b49c06fb34c49cd820ec71e861caa935f4a303e42030ae3df_big_uint255, + 0x2c1944f3ec2852ed6b50fbc4abbc8f284797b36a23b321d2763ef48b1a5a0212_big_uint255, + 0x30a218acd109f04657954e82f9faccc477731f4a954cf8ac12d15ebd450e9dcb_big_uint255, }}, {{ - 0x2488defa4553fa5bd5afbb5fd28a1e99c585c5f541c6242e702215b2212c1d23_cppui_modular255, - 0x3d0c9d7282245c776daa1655697fa879e470a26fcbb3bea62fa8ff32a4f04e50_cppui_modular255, - 0x33aac46524f32f3556ed16a0912ef27482c2afcacbfb99ced98394b6c0e3765f_cppui_modular255, + 0x2488defa4553fa5bd5afbb5fd28a1e99c585c5f541c6242e702215b2212c1d23_big_uint255, + 0x3d0c9d7282245c776daa1655697fa879e470a26fcbb3bea62fa8ff32a4f04e50_big_uint255, + 0x33aac46524f32f3556ed16a0912ef27482c2afcacbfb99ced98394b6c0e3765f_big_uint255, }}, {{ - 0x1858a5f543ab0a70cb3957e0884b146b42cc3863fba4e034145ab09cc77d428d_cppui_modular255, - 0x2d9d6fae68eff2e79396617207e28dba3d793b1e3739d30e9e9b10644e9f99cd_cppui_modular255, - 0x1747fab074b37cc1ca7dbf7d6dc136740f5d26e30319b3577fc8987f1247caae_cppui_modular255, + 0x1858a5f543ab0a70cb3957e0884b146b42cc3863fba4e034145ab09cc77d428d_big_uint255, + 0x2d9d6fae68eff2e79396617207e28dba3d793b1e3739d30e9e9b10644e9f99cd_big_uint255, + 0x1747fab074b37cc1ca7dbf7d6dc136740f5d26e30319b3577fc8987f1247caae_big_uint255, }}, {{ - 0x38f905db5128f24e498e36a84df5a58ed3c0b0ed8f39336eb792cb634f86b87_cppui_modular255, - 0xfffe42ce4a87a0b3a9ebe7eedf16c0cdb29c959b6e594faa69c0727c6e825f_cppui_modular255, - 0x314c3090cd0a465da95afd515c0771703e4ee2a8eabe8fa405daf8bd49bce458_cppui_modular255, + 0x38f905db5128f24e498e36a84df5a58ed3c0b0ed8f39336eb792cb634f86b87_big_uint255, + 0xfffe42ce4a87a0b3a9ebe7eedf16c0cdb29c959b6e594faa69c0727c6e825f_big_uint255, + 0x314c3090cd0a465da95afd515c0771703e4ee2a8eabe8fa405daf8bd49bce458_big_uint255, }}, {{ - 0x3e5fb71d9071c658c39fe64392e90bac65bdaf8f723b6790cce7dd7440ce06aa_cppui_modular255, - 0x3e9fe7b8fd0aaa379fa7be0dbd64309607cc5b00474ef6670370e631902e98cd_cppui_modular255, - 0x33ee4f76ff95bd735ec602ee6f4d1664caec27a7c435ead3b4c8df6cb51f010e_cppui_modular255, + 0x3e5fb71d9071c658c39fe64392e90bac65bdaf8f723b6790cce7dd7440ce06aa_big_uint255, + 0x3e9fe7b8fd0aaa379fa7be0dbd64309607cc5b00474ef6670370e631902e98cd_big_uint255, + 0x33ee4f76ff95bd735ec602ee6f4d1664caec27a7c435ead3b4c8df6cb51f010e_big_uint255, }}, {{ - 0x1670c2080f2965bed3f49db0b63aef5f562b347235645b921c0132b01cc82130_cppui_modular255, - 0x210565224e2ee64dd479be3a969dc30c65933352ba9b2271a0942bf1bf485743_cppui_modular255, - 0x9a7c6dd48dfbf50b13055b30fe85f934be9518b8af074b88f9de4b1df689616_cppui_modular255, + 0x1670c2080f2965bed3f49db0b63aef5f562b347235645b921c0132b01cc82130_big_uint255, + 0x210565224e2ee64dd479be3a969dc30c65933352ba9b2271a0942bf1bf485743_big_uint255, + 0x9a7c6dd48dfbf50b13055b30fe85f934be9518b8af074b88f9de4b1df689616_big_uint255, }}, {{ - 0x1f9116811eaadf677e6cb50fb59ce0fab11fa9f0ddf1432403610e1932a7aa1c_cppui_modular255, - 0x19b51a48c225daf9b34611ccc5ba077ebbc0a19cfc9bbbd78ade11cfa655075f_cppui_modular255, - 0x3286d29eb60c3d6204eb534d13f40d1af6364f0fe1622a12ba5fa069886f31fe_cppui_modular255, + 0x1f9116811eaadf677e6cb50fb59ce0fab11fa9f0ddf1432403610e1932a7aa1c_big_uint255, + 0x19b51a48c225daf9b34611ccc5ba077ebbc0a19cfc9bbbd78ade11cfa655075f_big_uint255, + 0x3286d29eb60c3d6204eb534d13f40d1af6364f0fe1622a12ba5fa069886f31fe_big_uint255, }}, {{ - 0x9bd403d05db137ea793f10b6dd087a74a78c9b01bcd6f9daf39af2ef57d346e_cppui_modular255, - 0x3a71654023e43363e60889eac50eb1f17c044606886771eaaf851bb2d00b3aeb_cppui_modular255, - 0x3415b94f62c59466f102442b4bae7d6bb348987154cce16bd187525a6fb5b443_cppui_modular255, + 0x9bd403d05db137ea793f10b6dd087a74a78c9b01bcd6f9daf39af2ef57d346e_big_uint255, + 0x3a71654023e43363e60889eac50eb1f17c044606886771eaaf851bb2d00b3aeb_big_uint255, + 0x3415b94f62c59466f102442b4bae7d6bb348987154cce16bd187525a6fb5b443_big_uint255, }}, {{ - 0x3ca35f0fc660092b81f15dd6f0b3d17a16a053480ef2f935fce806dd0d9a3466_cppui_modular255, - 0x26e1360af7fdc62e9be08651c2c5900ed5aefcb0d84b3aa88e354c6658a07863_cppui_modular255, - 0x30d05884174d7a1de9d34c89224d17f3b9dbdfb0793b54c0d2aaaeedcc357bd6_cppui_modular255, + 0x3ca35f0fc660092b81f15dd6f0b3d17a16a053480ef2f935fce806dd0d9a3466_big_uint255, + 0x26e1360af7fdc62e9be08651c2c5900ed5aefcb0d84b3aa88e354c6658a07863_big_uint255, + 0x30d05884174d7a1de9d34c89224d17f3b9dbdfb0793b54c0d2aaaeedcc357bd6_big_uint255, }}, {{ - 0x2c7f66f8b0580236f025dd626520049a09e1bfff0e5fd9f69cbc70daf0ac56c4_cppui_modular255, - 0xc5cb9a350d2dc463dd05dbd696e122c6917b76654180c323937dee44c6beb93_cppui_modular255, - 0x14d4d799d43d91b4d09d9c2bfdc13a64b48d18750503324361f9bf7267ec9b92_cppui_modular255, + 0x2c7f66f8b0580236f025dd626520049a09e1bfff0e5fd9f69cbc70daf0ac56c4_big_uint255, + 0xc5cb9a350d2dc463dd05dbd696e122c6917b76654180c323937dee44c6beb93_big_uint255, + 0x14d4d799d43d91b4d09d9c2bfdc13a64b48d18750503324361f9bf7267ec9b92_big_uint255, }}, {{ - 0x60c56a884cd6a1d3514f2895816b84e7160df5106e8d031710769be1ac5c04c_cppui_modular255, - 0x23e15f37c21266c86ead998a46e42f6e97fbd5d1c384f51d8b54d051a80d753d_cppui_modular255, - 0x25eb2911034ab6bef4a969653f5cc33e6914b8b6411f064ec01bcf157fea4e55_cppui_modular255, + 0x60c56a884cd6a1d3514f2895816b84e7160df5106e8d031710769be1ac5c04c_big_uint255, + 0x23e15f37c21266c86ead998a46e42f6e97fbd5d1c384f51d8b54d051a80d753d_big_uint255, + 0x25eb2911034ab6bef4a969653f5cc33e6914b8b6411f064ec01bcf157fea4e55_big_uint255, }}, {{ - 0x1e95c04c5057abd1b43a2fbc942b2391d0e0daef873838b3494e6d5fb067a117_cppui_modular255, - 0x1547602fc83558aa1327221fd220fa22bcb1f6ec42edb7cc05eff508c65883cb_cppui_modular255, - 0x16b669eac31e72a9e739fb03fd7ea3882fc5791b157143929ae12fc2fefe8b3d_cppui_modular255, + 0x1e95c04c5057abd1b43a2fbc942b2391d0e0daef873838b3494e6d5fb067a117_big_uint255, + 0x1547602fc83558aa1327221fd220fa22bcb1f6ec42edb7cc05eff508c65883cb_big_uint255, + 0x16b669eac31e72a9e739fb03fd7ea3882fc5791b157143929ae12fc2fefe8b3d_big_uint255, }}, {{ - 0x7034f4e251a65c4423479dc9d5287a341c108e0b56e29a391f9a07a0ca822f1_cppui_modular255, - 0x3fdf9d5731ba040dc568e61b8571ea95ead2e89f0a9856b2d12a7e87e43f5683_cppui_modular255, - 0x33f2cdf6960139a0fb4a3a8127992e2abbd42847728425228a35ee72bd5b01c7_cppui_modular255, + 0x7034f4e251a65c4423479dc9d5287a341c108e0b56e29a391f9a07a0ca822f1_big_uint255, + 0x3fdf9d5731ba040dc568e61b8571ea95ead2e89f0a9856b2d12a7e87e43f5683_big_uint255, + 0x33f2cdf6960139a0fb4a3a8127992e2abbd42847728425228a35ee72bd5b01c7_big_uint255, }}, {{ - 0x35616d55033d8fc092398f6c58bfc6eaaf2ec9dd500122516f489dbc631457b_cppui_modular255, - 0x1eca80189643df1473e98da93fe58a9576def0d192d4153faebcd1b210c1603f_cppui_modular255, - 0x26223ca4af2d8d878ca5530c3e67ff1c95b50b9c5b8295e19150bc31ef90ba98_cppui_modular255, + 0x35616d55033d8fc092398f6c58bfc6eaaf2ec9dd500122516f489dbc631457b_big_uint255, + 0x1eca80189643df1473e98da93fe58a9576def0d192d4153faebcd1b210c1603f_big_uint255, + 0x26223ca4af2d8d878ca5530c3e67ff1c95b50b9c5b8295e19150bc31ef90ba98_big_uint255, }}, {{ - 0x19180fa5facb64ee9b4827ccd766622adf12fe80ab17c7395075368e10a2a361_cppui_modular255, - 0x169f165855e097501f25d6b3aae815ce6e8a1c289850936d956657f0ed99446_cppui_modular255, - 0x363a8f891de5974f06bae043bc6a26b4518d217af6590e9318e325fb215cda00_cppui_modular255, + 0x19180fa5facb64ee9b4827ccd766622adf12fe80ab17c7395075368e10a2a361_big_uint255, + 0x169f165855e097501f25d6b3aae815ce6e8a1c289850936d956657f0ed99446_big_uint255, + 0x363a8f891de5974f06bae043bc6a26b4518d217af6590e9318e325fb215cda00_big_uint255, }}, {{ - 0x122aaa7c330ddcb57180749e659600a4dfac5dda7b9b68ab0f8b2ee6de350ced_cppui_modular255, - 0xed203defca13ebdf6af805a9f5dbdfef90007df2ad32fb1c83165e837ab5e3f_cppui_modular255, - 0x11cce94bbc7a96e9708e99d3666c0a275329ac4bff42634a5f989ddcfc28fd68_cppui_modular255, + 0x122aaa7c330ddcb57180749e659600a4dfac5dda7b9b68ab0f8b2ee6de350ced_big_uint255, + 0xed203defca13ebdf6af805a9f5dbdfef90007df2ad32fb1c83165e837ab5e3f_big_uint255, + 0x11cce94bbc7a96e9708e99d3666c0a275329ac4bff42634a5f989ddcfc28fd68_big_uint255, }}, {{ - 0x1705663587a03cb11485ac9d01fd10cb1138be1820d26a14e4ab7b1c0fdec8d2_cppui_modular255, - 0x12ad28a60485a2d911639051971f43dd15a0dfd2f8a0de756f0c847fed63ed7d_cppui_modular255, - 0xa9e61cc35eba9374eea117753aaaa93d6b29f550c2c54bce0a6078e05db9475_cppui_modular255, + 0x1705663587a03cb11485ac9d01fd10cb1138be1820d26a14e4ab7b1c0fdec8d2_big_uint255, + 0x12ad28a60485a2d911639051971f43dd15a0dfd2f8a0de756f0c847fed63ed7d_big_uint255, + 0xa9e61cc35eba9374eea117753aaaa93d6b29f550c2c54bce0a6078e05db9475_big_uint255, }}, {{ - 0x72c3d62cf006a95dc8b2a53f878bb26fcaf3c28d709a91634f3a09f525054ad_cppui_modular255, - 0x1ce8f168b446f7e797b91677fc46a975d2caa63dc359132c7c9729f5be24a7c_cppui_modular255, - 0xe846a7211efda3d8115b5bf76aab7eac2b6099026fc7504fb81ac4a77c5560d_cppui_modular255, + 0x72c3d62cf006a95dc8b2a53f878bb26fcaf3c28d709a91634f3a09f525054ad_big_uint255, + 0x1ce8f168b446f7e797b91677fc46a975d2caa63dc359132c7c9729f5be24a7c_big_uint255, + 0xe846a7211efda3d8115b5bf76aab7eac2b6099026fc7504fb81ac4a77c5560d_big_uint255, }}, {{ - 0xabb8fd9d6fa3772022fa88800c12bdcbb1234473022cd141213d452255a0f55_cppui_modular255, - 0x1c5d9938bc35a4832e8375dc307dba7a116d2a566e406ab31e8b03a36ec807cf_cppui_modular255, - 0x35bea7ac6f40e0f50f08d325be9f051fd75ada8c03461f4d15b2c5e1a3d72431_cppui_modular255, + 0xabb8fd9d6fa3772022fa88800c12bdcbb1234473022cd141213d452255a0f55_big_uint255, + 0x1c5d9938bc35a4832e8375dc307dba7a116d2a566e406ab31e8b03a36ec807cf_big_uint255, + 0x35bea7ac6f40e0f50f08d325be9f051fd75ada8c03461f4d15b2c5e1a3d72431_big_uint255, }}, {{ - 0x419357c205a7e1e028c0f49cbdeab85b82f4db78f1afb1b5568ec1bd2e48cb0_cppui_modular255, - 0x1933e424c788e7466a159f1fe015ac7210f47044d9df6872cdfa227ae4d2190a_cppui_modular255, - 0xde27ccdda95abb3d98db76d6f7f152a08d37ba81758beaf2eddbc58d13e560f_cppui_modular255, + 0x419357c205a7e1e028c0f49cbdeab85b82f4db78f1afb1b5568ec1bd2e48cb0_big_uint255, + 0x1933e424c788e7466a159f1fe015ac7210f47044d9df6872cdfa227ae4d2190a_big_uint255, + 0xde27ccdda95abb3d98db76d6f7f152a08d37ba81758beaf2eddbc58d13e560f_big_uint255, }}, {{ - 0x35a312d5d6cbf00d55f097febaf9bd5eac5f2881ebf0afa377e2ba7cdcf2f51_cppui_modular255, - 0xce6f415449ca515e4da9177527c9242adcc988de5e1846d07cdd5284f39f9d0_cppui_modular255, - 0x38fd71543da5c4c0447dc22aa2c1e3744cb84eb1ff17040640b50f5ddf8c8e61_cppui_modular255, + 0x35a312d5d6cbf00d55f097febaf9bd5eac5f2881ebf0afa377e2ba7cdcf2f51_big_uint255, + 0xce6f415449ca515e4da9177527c9242adcc988de5e1846d07cdd5284f39f9d0_big_uint255, + 0x38fd71543da5c4c0447dc22aa2c1e3744cb84eb1ff17040640b50f5ddf8c8e61_big_uint255, }}, {{ - 0x158de859aad53c6a17de455ab067a09ad6cba22f4101d19e77d8a2975c0dc965_cppui_modular255, - 0x2c300588eeae8cbc3814bd1d7646f472ef6b44a60c710bf6100937504e532c8b_cppui_modular255, - 0xb198cf742a029409ac02397b91e2704fa94ecf147909fa8d71ece5087e2cfc3_cppui_modular255, + 0x158de859aad53c6a17de455ab067a09ad6cba22f4101d19e77d8a2975c0dc965_big_uint255, + 0x2c300588eeae8cbc3814bd1d7646f472ef6b44a60c710bf6100937504e532c8b_big_uint255, + 0xb198cf742a029409ac02397b91e2704fa94ecf147909fa8d71ece5087e2cfc3_big_uint255, }}, {{ - 0x100b375c21d357d5679d8e6d9eb7bff8edd4575535bf651ba0b1bd83cfb54598_cppui_modular255, - 0x15a474d44590e2b23b8bb1e79f5613f1659e7ae2bce10def0ce1a101eb3e3ce5_cppui_modular255, - 0x2aa20e6642a989e1e6f9814c24f022991c23a7e40af505d4b931079025b7ed4d_cppui_modular255, + 0x100b375c21d357d5679d8e6d9eb7bff8edd4575535bf651ba0b1bd83cfb54598_big_uint255, + 0x15a474d44590e2b23b8bb1e79f5613f1659e7ae2bce10def0ce1a101eb3e3ce5_big_uint255, + 0x2aa20e6642a989e1e6f9814c24f022991c23a7e40af505d4b931079025b7ed4d_big_uint255, }}, {{ - 0x196597f2d65c5692706795bf46eb7be96b31647c23441213642ccceedc01ebc4_cppui_modular255, - 0x248291aa516daa0a6cd191c1c651a82f7d1b5f087dcb7cee91a27c488483e2bd_cppui_modular255, - 0x36c02b98ad2722b774aeb131b31bfd087c6a7f2d0a3faa40bd9899e5f270877f_cppui_modular255, + 0x196597f2d65c5692706795bf46eb7be96b31647c23441213642ccceedc01ebc4_big_uint255, + 0x248291aa516daa0a6cd191c1c651a82f7d1b5f087dcb7cee91a27c488483e2bd_big_uint255, + 0x36c02b98ad2722b774aeb131b31bfd087c6a7f2d0a3faa40bd9899e5f270877f_big_uint255, }}, {{ - 0x1240e06949a1ad92bd8ae90772b5d8505174182c87a23227aa74b7630dba4195_cppui_modular255, - 0x3b83f7e36f30939a78ec63cb2554aa0669a1bfc1b8b8714c6b8a3958beb6a163_cppui_modular255, - 0x1668b0582ce04f7f5b1e35e1b7cc3e05be23cc2c9e0be9436559193f2a8d102e_cppui_modular255, + 0x1240e06949a1ad92bd8ae90772b5d8505174182c87a23227aa74b7630dba4195_big_uint255, + 0x3b83f7e36f30939a78ec63cb2554aa0669a1bfc1b8b8714c6b8a3958beb6a163_big_uint255, + 0x1668b0582ce04f7f5b1e35e1b7cc3e05be23cc2c9e0be9436559193f2a8d102e_big_uint255, }}, {{ - 0x26d6a708e9464c85e9c7605e87fb96036fd1fe87379ac43ad560885582e4026d_cppui_modular255, - 0x594fccf1863993b43ad0a13c5fc7a53f59f7d622e7b206d425907243a69e62d_cppui_modular255, - 0x78e4c588b6ddd0fe7ed53a9f25b6ac3c2eac1c63faecc7e916f4d4599051940_cppui_modular255, + 0x26d6a708e9464c85e9c7605e87fb96036fd1fe87379ac43ad560885582e4026d_big_uint255, + 0x594fccf1863993b43ad0a13c5fc7a53f59f7d622e7b206d425907243a69e62d_big_uint255, + 0x78e4c588b6ddd0fe7ed53a9f25b6ac3c2eac1c63faecc7e916f4d4599051940_big_uint255, }}, {{ - 0xf44ea3e14c3e4849ee7a525fe77170b8658a6753680e269c9fd1d12932af69d_cppui_modular255, - 0x2e8567bc9e8e369bdf7748d6c7f677837c601455d4651a2f102b94ff1f951379_cppui_modular255, - 0x37c35b056171982cc7d74e6081fcac2f764f1fe30ee985db306a22b097d51bae_cppui_modular255, + 0xf44ea3e14c3e4849ee7a525fe77170b8658a6753680e269c9fd1d12932af69d_big_uint255, + 0x2e8567bc9e8e369bdf7748d6c7f677837c601455d4651a2f102b94ff1f951379_big_uint255, + 0x37c35b056171982cc7d74e6081fcac2f764f1fe30ee985db306a22b097d51bae_big_uint255, }}, {{ - 0x29dbcffd5b55d671c85ca42037ac5e64d2ef42d2704af47a20877e3a5e5f1d9d_cppui_modular255, - 0x201098422e054c1ddcc465411d002d2bc5a824e1c7f4f2ded9443c37bd04a520_cppui_modular255, - 0x7de32ed4c5143430ef43aef100f948ef859ab3793aa52640156f5e7d92cdc84_cppui_modular255, + 0x29dbcffd5b55d671c85ca42037ac5e64d2ef42d2704af47a20877e3a5e5f1d9d_big_uint255, + 0x201098422e054c1ddcc465411d002d2bc5a824e1c7f4f2ded9443c37bd04a520_big_uint255, + 0x7de32ed4c5143430ef43aef100f948ef859ab3793aa52640156f5e7d92cdc84_big_uint255, }}, {{ - 0x34e95adcc0c5c34fd38ab9246a04cc1029f678ba53c0f6fd27f8805094e36199_cppui_modular255, - 0x1d5faf157126c599232982356ca0ea7b81d875c01d842b5cd1998a5c470fa623_cppui_modular255, - 0x160a80176bd281e3fa9b82e44063cc7bf86eb81397e51e41fe4745e27c57e1d2_cppui_modular255, + 0x34e95adcc0c5c34fd38ab9246a04cc1029f678ba53c0f6fd27f8805094e36199_big_uint255, + 0x1d5faf157126c599232982356ca0ea7b81d875c01d842b5cd1998a5c470fa623_big_uint255, + 0x160a80176bd281e3fa9b82e44063cc7bf86eb81397e51e41fe4745e27c57e1d2_big_uint255, }}, {{ - 0x17ecc7f5deb148c542a22d02b098439724910a3bbd4903428c8fc680f31b2406_cppui_modular255, - 0x20a6aae17f822bc7035da3b8931896c82152346f2a43ab4e0029dbf0101b3d_cppui_modular255, - 0x9ea0ec10c0e77b9385a58ccd5ecc3c88b5bed58af72a6d87bb446e14fa7c8d6_cppui_modular255, + 0x17ecc7f5deb148c542a22d02b098439724910a3bbd4903428c8fc680f31b2406_big_uint255, + 0x20a6aae17f822bc7035da3b8931896c82152346f2a43ab4e0029dbf0101b3d_big_uint255, + 0x9ea0ec10c0e77b9385a58ccd5ecc3c88b5bed58af72a6d87bb446e14fa7c8d6_big_uint255, }}, }}; }; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/decomposition.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/decomposition.hpp index d2e0636db4..b244d38388 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/decomposition.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/decomposition.hpp @@ -255,13 +255,13 @@ namespace nil { using var = typename plonk_native_decomposition::var; auto constraint_1 = - var(component.W(8), -1) - (var(component.W(3), 0) + var(component.W(2), 0) * 0x100000000_cppui_modular255 + - var(component.W(1), 0) * 0x10000000000000000_cppui_modular255 + - var(component.W(0), 0) * 0x1000000000000000000000000_cppui_modular255); + var(component.W(8), -1) - (var(component.W(3), 0) + var(component.W(2), 0) * 0x100000000_big_uint255 + + var(component.W(1), 0) * 0x10000000000000000_big_uint255 + + var(component.W(0), 0) * 0x1000000000000000000000000_big_uint255); auto constraint_2 = - var(component.W(8), 1) - (var(component.W(7), 0) + var(component.W(6), 0) * 0x100000000_cppui_modular255 + - var(component.W(5), 0) * 0x10000000000000000_cppui_modular255 + - var(component.W(4), 0) * 0x1000000000000000000000000_cppui_modular255); + var(component.W(8), 1) - (var(component.W(7), 0) + var(component.W(6), 0) * 0x100000000_big_uint255 + + var(component.W(5), 0) * 0x10000000000000000_big_uint255 + + var(component.W(4), 0) * 0x1000000000000000000000000_big_uint255); auto constraint_3 = var(component.W(3), 0) - (var(component.W(0), -1) + var(component.W(1), -1) * (65536)); auto constraint_4 = var(component.W(2), 0) - diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/sha_table_generators.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/sha_table_generators.hpp index 8c398a0c85..608672165f 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/sha_table_generators.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/sha_table_generators.hpp @@ -34,8 +34,6 @@ #include -#include - #include #include #include @@ -66,8 +64,8 @@ namespace nil { SumHash> &input, std::ostream &stream) { using value_type = typename BlueprintFieldType::value_type; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using marshalling_value_type = crypto3::marshalling::types::field_element; stream << input.size() << std::endl; for (const auto &[preimage, image] : input) { @@ -118,7 +116,7 @@ namespace nil { std::vector value(table_size); for (std::size_t j = 0; j < table_size; j++) { - value[table_size - j - 1] = boost::multiprecision::bit_test(i, j); + value[table_size - j - 1] = i.bit_test(j); } // s0 const std::array, 2> a_chunks = @@ -258,7 +256,7 @@ namespace nil { std::vector value(table_size); for (std::size_t j = 0; j < table_size; j++) { - value[table_size - j - 1] = boost::multiprecision::bit_test(i, j); + value[table_size - j - 1] = i.bit_test(j); } std::array, 2> e_chunks = diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/split_functions.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/split_functions.hpp index 3d9f83c3e9..920f23bd10 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/split_functions.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/detail/split_functions.hpp @@ -36,6 +36,8 @@ #include #include +#include + namespace nil { namespace blueprint { namespace components { @@ -99,7 +101,7 @@ namespace nil { res[1][i] = 0; for (int j = sizes[i] - 1; j > -1; j--) { const integral_type k_pow = cached_pow(base, k); - divide_qr(tmp, k_pow, r, tmp); + nil::crypto3::multiprecision::divide_qr(tmp, k_pow, r, tmp); res[0][i] = res[0][i] * 2 + (r&1); res[1][i] = res[1][i] * sparse_base + r; k--; @@ -130,7 +132,7 @@ namespace nil { res[1][i] = 0; for (int j = sizes[i] - 1; j > -1; j--) { const integral_type k_pow = cached_pow(base, k); - divide_qr(tmp, k_pow, r, tmp); + nil::crypto3::multiprecision::divide_qr(tmp, k_pow, r, tmp); res[0][i] = res[0][i] * 2 + r_values[std::size_t(r)]; res[1][i] = res[1][i] * sparse_base + r; k--; @@ -161,7 +163,7 @@ namespace nil { res[1][i] = 0; for (int j = sizes[i] - 1; j > -1; j--) { const integral_type k_pow = cached_pow(base, k); - divide_qr(tmp, k_pow, r, tmp); + nil::crypto3::multiprecision::divide_qr(tmp, k_pow, r, tmp); res[0][i] = res[0][i] * 2 + r_values[std::size_t(r)]; res[1][i] = res[1][i] * sparse_base + r; k--; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha256_process.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha256_process.hpp index e7862fe91f..b9da22b9b3 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha256_process.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha256_process.hpp @@ -205,17 +205,16 @@ namespace nil { typename BlueprintFieldType::value_type g = input_state[6]; typename BlueprintFieldType::value_type h = input_state[7]; - nil::marshalling::status_type status; std::array sparse_values {}; for (std::size_t i = 0; i < 4; i++) { typename BlueprintFieldType::integral_type integral_input_state_sparse = typename BlueprintFieldType::integral_type(input_state[i].data); std::vector input_state_sparse(32); { + nil::crypto3::marshalling::status_type status; std::vector input_state_sparse_all = - nil::marshalling::pack(integral_input_state_sparse, + nil::crypto3::marshalling::pack(integral_input_state_sparse, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::calculate"); std::copy(input_state_sparse_all.end() - 32, input_state_sparse_all.end(), input_state_sparse.begin()); } @@ -231,10 +230,10 @@ namespace nil { typename BlueprintFieldType::integral_type(input_state[i].data); std::vector input_state_sparse(32); { + nil::crypto3::marshalling::status_type status; std::vector input_state_sparse_all = - nil::marshalling::pack(integral_input_state_sparse, + nil::crypto3::marshalling::pack(integral_input_state_sparse, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::calculate"); std::copy(input_state_sparse_all.end() - 32, input_state_sparse_all.end(), input_state_sparse.begin()); } @@ -255,9 +254,9 @@ namespace nil { typename BlueprintFieldType::integral_type(message_scheduling_words[(i - row) / 5 + 1].data); std::vector a(32); { + nil::crypto3::marshalling::status_type status; std::vector a_all = - nil::marshalling::pack(integral_a, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::calculate"); + nil::crypto3::marshalling::pack(integral_a, status); std::copy(a_all.end() - 32, a_all.end(), a.begin()); } @@ -277,9 +276,9 @@ namespace nil { typename BlueprintFieldType::integral_type(message_scheduling_words[(i - row) / 5 + 14].data); std::vector b(32); { + nil::crypto3::marshalling::status_type status; std::vector b_all = - nil::marshalling::pack(integral_b, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::calculate"); + nil::crypto3::marshalling::pack(integral_b, status); std::copy(b_all.end() - 32, b_all.end(), b.begin()); } @@ -314,9 +313,9 @@ namespace nil { typename BlueprintFieldType::integral_type(e.data); std::vector e_bits(32); { + nil::crypto3::marshalling::status_type status; std::vector e_bits_all = - nil::marshalling::pack(integral_e, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::calculate"); + nil::crypto3::marshalling::pack(integral_e, status); std::copy(e_bits_all.end() - 32, e_bits_all.end(), e_bits.begin()); } @@ -371,9 +370,9 @@ namespace nil { typename BlueprintFieldType::integral_type(a.data); std::vector a_bits(32); { + nil::crypto3::marshalling::status_type status; std::vector a_bits_all = - nil::marshalling::pack(integral_a, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::calculate"); + nil::crypto3::marshalling::pack(integral_a, status); std::copy(a_bits_all.end() - 32, a_bits_all.end(), a_bits.begin()); } @@ -1387,7 +1386,6 @@ namespace nil { typename BlueprintFieldType::value_type g = input_state[6]; typename BlueprintFieldType::value_type h = input_state[7]; - nil::marshalling::status_type status; std::array sparse_values {}; for (std::size_t i = 0; i < 4; i++) { assignment.witness(component.W(i), row) = input_state[i]; @@ -1395,10 +1393,10 @@ namespace nil { typename BlueprintFieldType::integral_type(input_state[i].data); std::vector input_state_sparse(32); { + nil::crypto3::marshalling::status_type status; std::vector input_state_sparse_all = - nil::marshalling::pack(integral_input_state_sparse, + nil::crypto3::marshalling::pack(integral_input_state_sparse, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::generate_assignments"); std::copy(input_state_sparse_all.end() - 32, input_state_sparse_all.end(), input_state_sparse.begin()); } @@ -1417,10 +1415,10 @@ namespace nil { typename BlueprintFieldType::integral_type(input_state[i].data); std::vector input_state_sparse(32); { + nil::crypto3::marshalling::status_type status; std::vector input_state_sparse_all = - nil::marshalling::pack(integral_input_state_sparse, + nil::crypto3::marshalling::pack(integral_input_state_sparse, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::generate_assignments"); std::copy(input_state_sparse_all.end() - 32, input_state_sparse_all.end(), input_state_sparse.begin()); } @@ -1446,9 +1444,9 @@ namespace nil { assignment.witness(component.W(0), i) = message_scheduling_words[(i - row) / 5 + 1]; std::vector a(32); { + nil::crypto3::marshalling::status_type status; std::vector a_all = - nil::marshalling::pack(integral_a, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::generate_assignments"); + nil::crypto3::marshalling::pack(integral_a, status); std::copy(a_all.end() - 32, a_all.end(), a.begin()); } @@ -1488,9 +1486,9 @@ namespace nil { typename BlueprintFieldType::integral_type(message_scheduling_words[(i - row) / 5 + 14].data); std::vector b(32); { + nil::crypto3::marshalling::status_type status; std::vector b_all = - nil::marshalling::pack(integral_b, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::generate_assignments"); + nil::crypto3::marshalling::pack(integral_b, status); std::copy(b_all.end() - 32, b_all.end(), b.begin()); } @@ -1557,9 +1555,9 @@ namespace nil { typename BlueprintFieldType::integral_type(e.data); std::vector e_bits(32); { + nil::crypto3::marshalling::status_type status; std::vector e_bits_all = - nil::marshalling::pack(integral_e, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::generate_assignments"); + nil::crypto3::marshalling::pack(integral_e, status); std::copy(e_bits_all.end() - 32, e_bits_all.end(), e_bits.begin()); } @@ -1657,9 +1655,9 @@ namespace nil { typename BlueprintFieldType::integral_type(a.data); std::vector a_bits(32); { + nil::crypto3::marshalling::status_type status; std::vector a_bits_all = - nil::marshalling::pack(integral_a, status); - THROW_IF_ERROR_STATUS(status, "sha256_process::generate_assignments"); + nil::crypto3::marshalling::pack(integral_a, status); std::copy(a_bits_all.end() - 32, a_bits_all.end(), a_bits.begin()); } diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha512_process.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha512_process.hpp index c7efc8fca0..72754474d9 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha512_process.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/hashes/sha2/plonk/sha512_process.hpp @@ -89,26 +89,26 @@ namespace nil { constexpr static const std::array round_constant = { - 0x428a2f98d728ae22_cppui_modular64, 0x7137449123ef65cd_cppui_modular64, 0xb5c0fbcfec4d3b2f_cppui_modular64, 0xe9b5dba58189dbbc_cppui_modular64, - 0x3956c25bf348b538_cppui_modular64, 0x59f111f1b605d019_cppui_modular64, 0x923f82a4af194f9b_cppui_modular64, 0xab1c5ed5da6d8118_cppui_modular64, - 0xd807aa98a3030242_cppui_modular64, 0x12835b0145706fbe_cppui_modular64, 0x243185be4ee4b28c_cppui_modular64, 0x550c7dc3d5ffb4e2_cppui_modular64, - 0x72be5d74f27b896f_cppui_modular64, 0x80deb1fe3b1696b1_cppui_modular64, 0x9bdc06a725c71235_cppui_modular64, 0xc19bf174cf692694_cppui_modular64, - 0xe49b69c19ef14ad2_cppui_modular64, 0xefbe4786384f25e3_cppui_modular64, 0x0fc19dc68b8cd5b5_cppui_modular64, 0x240ca1cc77ac9c65_cppui_modular64, - 0x2de92c6f592b0275_cppui_modular64, 0x4a7484aa6ea6e483_cppui_modular64, 0x5cb0a9dcbd41fbd4_cppui_modular64, 0x76f988da831153b5_cppui_modular64, - 0x983e5152ee66dfab_cppui_modular64, 0xa831c66d2db43210_cppui_modular64, 0xb00327c898fb213f_cppui_modular64, 0xbf597fc7beef0ee4_cppui_modular64, - 0xc6e00bf33da88fc2_cppui_modular64, 0xd5a79147930aa725_cppui_modular64, 0x06ca6351e003826f_cppui_modular64, 0x142929670a0e6e70_cppui_modular64, - 0x27b70a8546d22ffc_cppui_modular64, 0x2e1b21385c26c926_cppui_modular64, 0x4d2c6dfc5ac42aed_cppui_modular64, 0x53380d139d95b3df_cppui_modular64, - 0x650a73548baf63de_cppui_modular64, 0x766a0abb3c77b2a8_cppui_modular64, 0x81c2c92e47edaee6_cppui_modular64, 0x92722c851482353b_cppui_modular64, - 0xa2bfe8a14cf10364_cppui_modular64, 0xa81a664bbc423001_cppui_modular64, 0xc24b8b70d0f89791_cppui_modular64, 0xc76c51a30654be30_cppui_modular64, - 0xd192e819d6ef5218_cppui_modular64, 0xd69906245565a910_cppui_modular64, 0xf40e35855771202a_cppui_modular64, 0x106aa07032bbd1b8_cppui_modular64, - 0x19a4c116b8d2d0c8_cppui_modular64, 0x1e376c085141ab53_cppui_modular64, 0x2748774cdf8eeb99_cppui_modular64, 0x34b0bcb5e19b48a8_cppui_modular64, - 0x391c0cb3c5c95a63_cppui_modular64, 0x4ed8aa4ae3418acb_cppui_modular64, 0x5b9cca4f7763e373_cppui_modular64, 0x682e6ff3d6b2b8a3_cppui_modular64, - 0x748f82ee5defb2fc_cppui_modular64, 0x78a5636f43172f60_cppui_modular64, 0x84c87814a1f0ab72_cppui_modular64, 0x8cc702081a6439ec_cppui_modular64, - 0x90befffa23631e28_cppui_modular64, 0xa4506cebde82bde9_cppui_modular64, 0xbef9a3f7b2c67915_cppui_modular64, 0xc67178f2e372532b_cppui_modular64, - 0xca273eceea26619c_cppui_modular64, 0xd186b8c721c0c207_cppui_modular64, 0xeada7dd6cde0eb1e_cppui_modular64, 0xf57d4f7fee6ed178_cppui_modular64, - 0x06f067aa72176fba_cppui_modular64, 0x0a637dc5a2c898a6_cppui_modular64, 0x113f9804bef90dae_cppui_modular64, 0x1b710b35131c471b_cppui_modular64, - 0x28db77f523047d84_cppui_modular64, 0x32caab7b40c72493_cppui_modular64, 0x3c9ebe0a15c9bebc_cppui_modular64, 0x431d67c49c100d4c_cppui_modular64, - 0x4cc5d4becb3e42b6_cppui_modular64, 0x597f299cfc657e2a_cppui_modular64, 0x5fcb6fab3ad6faec_cppui_modular64, 0x6c44198c4a475817_cppui_modular64}; + 0x428a2f98d728ae22_big_uint64, 0x7137449123ef65cd_big_uint64, 0xb5c0fbcfec4d3b2f_big_uint64, 0xe9b5dba58189dbbc_big_uint64, + 0x3956c25bf348b538_big_uint64, 0x59f111f1b605d019_big_uint64, 0x923f82a4af194f9b_big_uint64, 0xab1c5ed5da6d8118_big_uint64, + 0xd807aa98a3030242_big_uint64, 0x12835b0145706fbe_big_uint64, 0x243185be4ee4b28c_big_uint64, 0x550c7dc3d5ffb4e2_big_uint64, + 0x72be5d74f27b896f_big_uint64, 0x80deb1fe3b1696b1_big_uint64, 0x9bdc06a725c71235_big_uint64, 0xc19bf174cf692694_big_uint64, + 0xe49b69c19ef14ad2_big_uint64, 0xefbe4786384f25e3_big_uint64, 0x0fc19dc68b8cd5b5_big_uint64, 0x240ca1cc77ac9c65_big_uint64, + 0x2de92c6f592b0275_big_uint64, 0x4a7484aa6ea6e483_big_uint64, 0x5cb0a9dcbd41fbd4_big_uint64, 0x76f988da831153b5_big_uint64, + 0x983e5152ee66dfab_big_uint64, 0xa831c66d2db43210_big_uint64, 0xb00327c898fb213f_big_uint64, 0xbf597fc7beef0ee4_big_uint64, + 0xc6e00bf33da88fc2_big_uint64, 0xd5a79147930aa725_big_uint64, 0x06ca6351e003826f_big_uint64, 0x142929670a0e6e70_big_uint64, + 0x27b70a8546d22ffc_big_uint64, 0x2e1b21385c26c926_big_uint64, 0x4d2c6dfc5ac42aed_big_uint64, 0x53380d139d95b3df_big_uint64, + 0x650a73548baf63de_big_uint64, 0x766a0abb3c77b2a8_big_uint64, 0x81c2c92e47edaee6_big_uint64, 0x92722c851482353b_big_uint64, + 0xa2bfe8a14cf10364_big_uint64, 0xa81a664bbc423001_big_uint64, 0xc24b8b70d0f89791_big_uint64, 0xc76c51a30654be30_big_uint64, + 0xd192e819d6ef5218_big_uint64, 0xd69906245565a910_big_uint64, 0xf40e35855771202a_big_uint64, 0x106aa07032bbd1b8_big_uint64, + 0x19a4c116b8d2d0c8_big_uint64, 0x1e376c085141ab53_big_uint64, 0x2748774cdf8eeb99_big_uint64, 0x34b0bcb5e19b48a8_big_uint64, + 0x391c0cb3c5c95a63_big_uint64, 0x4ed8aa4ae3418acb_big_uint64, 0x5b9cca4f7763e373_big_uint64, 0x682e6ff3d6b2b8a3_big_uint64, + 0x748f82ee5defb2fc_big_uint64, 0x78a5636f43172f60_big_uint64, 0x84c87814a1f0ab72_big_uint64, 0x8cc702081a6439ec_big_uint64, + 0x90befffa23631e28_big_uint64, 0xa4506cebde82bde9_big_uint64, 0xbef9a3f7b2c67915_big_uint64, 0xc67178f2e372532b_big_uint64, + 0xca273eceea26619c_big_uint64, 0xd186b8c721c0c207_big_uint64, 0xeada7dd6cde0eb1e_big_uint64, 0xf57d4f7fee6ed178_big_uint64, + 0x06f067aa72176fba_big_uint64, 0x0a637dc5a2c898a6_big_uint64, 0x113f9804bef90dae_big_uint64, 0x1b710b35131c471b_big_uint64, + 0x28db77f523047d84_big_uint64, 0x32caab7b40c72493_big_uint64, 0x3c9ebe0a15c9bebc_big_uint64, 0x431d67c49c100d4c_big_uint64, + 0x4cc5d4becb3e42b6_big_uint64, 0x597f299cfc657e2a_big_uint64, 0x5fcb6fab3ad6faec_big_uint64, 0x6c44198c4a475817_big_uint64}; const std::size_t rows_amount = get_rows_amount(this->witness_amount()); constexpr static const std::size_t gates_amount = 10; @@ -456,17 +456,14 @@ namespace nil { typename BlueprintFieldType::value_type h = input_state[7]; std::array sparse_values {}; - nil::marshalling::status_type status; - for (std::size_t i = 0; i < 4; i++) { assignment.witness(component.W(i), row) = input_state[i]; typename BlueprintFieldType::integral_type integral_input_state_sparse = typename BlueprintFieldType::integral_type(input_state[i].data); std::vector input_state_sparse(64); { - std::array input_state_sparse_all = nil::marshalling::pack(integral_input_state_sparse, status); - THROW_IF_ERROR_STATUS(status, "plonk_sha512_process::generate_assignments"); - + nil::crypto3::marshalling::status_type status; + std::array input_state_sparse_all = nil::crypto3::marshalling::pack(integral_input_state_sparse, status); std::copy(input_state_sparse_all.end() - 64, input_state_sparse_all.end(), input_state_sparse.begin()); } @@ -483,8 +480,8 @@ namespace nil { typename BlueprintFieldType::integral_type(input_state[i].data); std::vector input_state_sparse(64); { - std::array input_state_sparse_all = nil::marshalling::pack(integral_input_state_sparse, status); - THROW_IF_ERROR_STATUS(status, "plonk_sha512_process::generate_assignments"); + nil::crypto3::marshalling::status_type status; + std::array input_state_sparse_all = nil::crypto3::marshalling::pack(integral_input_state_sparse, status); std::copy(input_state_sparse_all.end() - 64, input_state_sparse_all.end(), input_state_sparse.begin()); } @@ -509,8 +506,8 @@ namespace nil { assignment.witness(component.W(0), i) = message_scheduling_words[(i - row) / 6 + 1]; std::vector a(64); { - std::array a_all = nil::marshalling::pack(integral_a, status); - THROW_IF_ERROR_STATUS(status, "plonk_sha512_process::generate_assignments"); + nil::crypto3::marshalling::status_type status; + std::array a_all = nil::crypto3::marshalling::pack(integral_a, status); std::copy(a_all.end() - 64, a_all.end(), a.begin()); } @@ -563,8 +560,8 @@ namespace nil { message_scheduling_words[(i - row) / 6 + 14].data); std::vector b(64); { - std::array b_all = nil::marshalling::pack(integral_b, status); - THROW_IF_ERROR_STATUS(status, "plonk_sha512_process::generate_assignments"); + nil::crypto3::marshalling::status_type status; + std::array b_all = nil::crypto3::marshalling::pack(integral_b, status); std::copy(b_all.end() - 64, b_all.end(), b.begin()); } @@ -630,8 +627,8 @@ namespace nil { typename BlueprintFieldType::integral_type(e.data); std::vector e_bits(64); { - std::array e_bits_all = nil::marshalling::pack(integral_e, status); - THROW_IF_ERROR_STATUS(status, "plonk_sha512_process::generate_assignments"); + nil::crypto3::marshalling::status_type status; + std::array e_bits_all = nil::crypto3::marshalling::pack(integral_e, status); std::copy(e_bits_all.end() - 64, e_bits_all.end(), e_bits.begin()); } @@ -733,8 +730,8 @@ namespace nil { typename BlueprintFieldType::integral_type(a.data); std::vector a_bits(64); { - std::array a_bits_all = nil::marshalling::pack(integral_a, status); - THROW_IF_ERROR_STATUS(status, "plonk_sha512_process::generate_assignments"); + nil::crypto3::marshalling::status_type status; + std::array a_bits_all = nil::crypto3::marshalling::pack(integral_a, status); std::copy(a_bits_all.end() - 64, a_bits_all.end(), a_bits.begin()); } diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/mock/mocked_components.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/mock/mocked_components.hpp index ad305010a4..1142bd37a6 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/mock/mocked_components.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/mock/mocked_components.hpp @@ -132,8 +132,7 @@ namespace nil { using var = crypto3::zk::snark::plonk_variable; using non_native_policy_type = nil::blueprint::detail::basic_non_native_policy_field_type>>; + nil::crypto3::multiprecision::big_uint<256>>; typename non_native_policy_type::non_native_var_type value; pair_var_type(var first, var second) : value({first, second}) {} @@ -153,8 +152,7 @@ namespace nil { using var = crypto3::zk::snark::plonk_variable; using non_native_policy_type = nil::blueprint::detail::basic_non_native_policy_field_type>>; + nil::crypto3::multiprecision::big_uint<256>>; typename non_native_policy_type::non_native_var_type a, b; two_pair_var_type(var a_first, var a_second, var b_first, var b_second) @@ -277,8 +275,8 @@ namespace nil { const input_type &instance_input) const override { \ \ /*TODO(martun): on the next line we are converting 255-bit number to 8/32/64 bit numbers, probably losing some bits*/\ - uint_type a = static_cast(var_value(assignment, instance_input.a).data.backend().base_data()), \ - b = static_cast(var_value(assignment, instance_input.b).data.backend().base_data()); \ + uint_type a = static_cast(var_value(assignment, instance_input.a).data.base()), \ + b = static_cast(var_value(assignment, instance_input.b).data.base()); \ return {value_type(OP(a, b))}; \ } \ \ @@ -332,7 +330,7 @@ namespace nil { /*On the following line we need to convert from signed to unsigned boost::cpp_int, then to our cpp_int_modular, then change the size, then to value_type.*/\ return {value_type(result.sign() >= 0 ? 0 : 1), \ value_type(typename BlueprintFieldType::integral_type(typename modular_uint_type::backend_type( \ - uint_type(boost::multiprecision::abs(result)).backend())))}; \ + uint_type(boost::multiprecision::abs(result)))))}; \ } \ \ result_type result_builder(const std::size_t start_row_index) const override { \ @@ -527,8 +525,8 @@ namespace nil { int_type result = OP(a, b); \ int_type result_top = (top_mask & result) >> 128; \ int_type result_bottom = bottom_mask & result; \ - modular_uint_type result_top_modular = typename modular_uint_type::backend_type(uint_type(result_top).backend()); \ - modular_uint_type result_bottom_modular = typename modular_uint_type::backend_type(uint_type(result_bottom).backend()); \ + modular_uint_type result_top_modular = typename modular_uint_type::backend_type(uint_type(result_top)); \ + modular_uint_type result_bottom_modular = typename modular_uint_type::backend_type(uint_type(result_bottom)); \ return {value_type(result.sign() >= 0 ? 0 : 1), \ value_type(result_top_modular), value_type(result_bottom_modular)}; \ } \ @@ -603,8 +601,7 @@ namespace nil { detail::signed_pair_var_type, detail::signed_pair_var_type>; - typedef boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<256>> int_type; + typedef nil::crypto3::multiprecision::big_uint<256> int_type; BOILERPLATING(signed_abs_component_big) diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/batch_verify_scalar_field.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/batch_verify_scalar_field.hpp index b956a30ee4..e437ad17b5 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/batch_verify_scalar_field.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/batch_verify_scalar_field.hpp @@ -454,7 +454,7 @@ namespace nil { std::size_t row = start_row_index; typename BlueprintFieldType::value_type endo_factor = - 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular255; + 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_big_uint255; std::size_t endo_num_bits = 128; var zero = var(0, start_row_index, false, var::column_type::constant); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/compare.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/compare.hpp index e2ab6aaded..345131e3c8 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/compare.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/compare.hpp @@ -371,8 +371,8 @@ namespace nil { std::size_t row = component_start_row; typename BlueprintFieldType::value_type base = 2; assignment.constant(0)[row] = - 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001_cppui_modular255 - - 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_cppui_modular255; + 0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001_big_uint255 - + 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_big_uint255; row++; assignment.constant(0)[row] = base.pow(87); row++; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/constraints/rpn_expression.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/constraints/rpn_expression.hpp index 9b1360a52b..152ab03734 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/constraints/rpn_expression.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/constraints/rpn_expression.hpp @@ -305,7 +305,7 @@ namespace nil { std::size_t value_end_pos = token_str.find(";", value_start_pos); std::string value_str = token_str.substr(value_start_pos, value_end_pos - value_start_pos); - token.value.first = multiprecision::cpp_int("0x" + value_str); + token.value.first = "0x" + value_str; } else if (token_str.find("Cell") != std::string::npos) { token.type = token_type::cell; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/limbs.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/limbs.hpp index a0a0c57ceb..d01b7a3cbf 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/limbs.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/limbs.hpp @@ -381,7 +381,7 @@ namespace nil { std::size_t row = start_row_index; typename BlueprintFieldType::value_type value = var_value(assignment, instance_input.param); - auto value_data = value.data; + auto value_data = value.data.base(); auto shifted_data = value_data >> 64 << 64; assignment.witness(component.W(0), row) = value_data; assignment.witness(component.W(1), row) = value_data - shifted_data; @@ -394,8 +394,7 @@ namespace nil { value_data = value_data >> 64; assignment.witness(component.W(4), row) = value_data; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * BlueprintFieldType::policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * BlueprintFieldType::policy_type::modulus_bits>; extended_integral_type modulus_p = BlueprintFieldType::modulus; extended_integral_type one = 1; @@ -479,8 +478,7 @@ namespace nil { using var = typename plonk_to_limbs::var; - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * BlueprintFieldType::policy_type::modulus_bits>>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<2 * BlueprintFieldType::policy_type::modulus_bits>; typename BlueprintFieldType::value_type scalar = 2; extended_integral_type modulus_p = BlueprintFieldType::modulus; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/to_group.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/to_group.hpp index 32657610d9..013c3e1ed0 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/to_group.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/detail/to_group.hpp @@ -591,25 +591,25 @@ namespace nil { if (std::is_same::value) { - u_val = 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular255; - fu_val = 0x0000000000000000000000000000000000000000000000000000000000000006_cppui_modular255; + u_val = 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint255; + fu_val = 0x0000000000000000000000000000000000000000000000000000000000000006_big_uint255; inv_three_u_squared_val = - 0x2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC18465FD5B88A612661E209E00000001_cppui_modular255; + 0x2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC18465FD5B88A612661E209E00000001_big_uint255; sqrt_neg_three_u_squared_val = - 0x25999506959B74E25955ABB8AF5563603A3F17A46F5A62923B5ABD7BFBFC9573_cppui_modular255; + 0x25999506959B74E25955ABB8AF5563603A3F17A46F5A62923B5ABD7BFBFC9573_big_uint255; sqrt_neg_three_u_squared_minus_u_over_2_val = - 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular255; - b_val = 0x0000000000000000000000000000000000000000000000000000000000000005_cppui_modular255; + 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_big_uint255; + b_val = 0x0000000000000000000000000000000000000000000000000000000000000005_big_uint255; } else { // vesta - u_val = 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular255; - fu_val = 0x0000000000000000000000000000000000000000000000000000000000000006_cppui_modular255; + u_val = 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint255; + fu_val = 0x0000000000000000000000000000000000000000000000000000000000000006_big_uint255; inv_three_u_squared_val = - 0x2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC18465FD5BB87093B2D9F21600000001_cppui_modular255; + 0x2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC18465FD5BB87093B2D9F21600000001_big_uint255; sqrt_neg_three_u_squared_val = - 0x0D0334B0507CA51CA23B69B039EE1EB41FDA8CFA8F80675E5553A5C0A1541C9F_cppui_modular255; + 0x0D0334B0507CA51CA23B69B039EE1EB41FDA8CFA8F80675E5553A5C0A1541C9F_big_uint255; sqrt_neg_three_u_squared_minus_u_over_2_val = - 0x06819A58283E528E511DB4D81CF70F5A0FED467D47C033AF2AA9D2E050AA0E4F_cppui_modular255; - b_val = 0x0000000000000000000000000000000000000000000000000000000000000005_cppui_modular255; + 0x06819A58283E528E511DB4D81CF70F5A0FED467D47C033AF2AA9D2E050AA0E4F_big_uint255; + b_val = 0x0000000000000000000000000000000000000000000000000000000000000005_big_uint255; } // var u; assignment.constant(0)[row] = u_val; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/oracles_scalar.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/oracles_scalar.hpp index f1ed3a9890..6b3489e3b1 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/oracles_scalar.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/kimchi/oracles_scalar.hpp @@ -480,7 +480,7 @@ namespace nil { std::size_t row = start_row_index; typename BlueprintFieldType::value_type endo_factor = - 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular255; + 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_big_uint255; std::size_t num_bits = 128; var fq_digest = params.fq_output.fq_digest; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/verifier/final_polynomial_check.hpp b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/verifier/final_polynomial_check.hpp index d26dc956eb..8f12075af4 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/verifier/final_polynomial_check.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/components/systems/snark/plonk/verifier/final_polynomial_check.hpp @@ -101,7 +101,7 @@ namespace nil { ) { std::size_t rows_amount = 0; std::size_t poly_chunks = std::ceil(float(power) / 8); - std::size_t points_per_row; + std::size_t points_per_row = 0; if( power < 8){ points_per_row = (witness_amount - power - 1) / 3; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/configuration.hpp b/crypto3/libs/blueprint/include/nil/blueprint/configuration.hpp new file mode 100644 index 0000000000..53a35fac6d --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/configuration.hpp @@ -0,0 +1,110 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +namespace nil { + namespace blueprint { + struct configuration { + struct coordinates { + std::size_t row; + std::size_t column; + + coordinates() = default; + coordinates(std::size_t row_, std::size_t column_) : row(row_), column(column_) {}; + coordinates(std::pair pair) : row(pair.first), column(pair.second) {}; + + bool operator==(const coordinates &other) const { + return row == other.row && column == other.column; + } + + bool operator<(const coordinates &other) const { + return row < other.row || (row == other.row && column < other.column); + } + }; + + // In constraints we use such notation: constr[0] - result, + // constr[1]... - arguments for lookup, linear elements for regular constraints in correct order. + coordinates first_coordinate; + coordinates last_coordinate; + std::vector copy_to; + std::vector> constraints; + std::vector> lookups; + coordinates copy_from; + std::string name; + + configuration() = default; + configuration( + std::pair + first_coordinate_, + std::pair + last_coordinate_, + std::vector> + copy_to_, + std::vector>> + constraints_, + std::vector>> + lookups_, + std::pair + copy_from_ + ) { + first_coordinate = coordinates(first_coordinate_); + last_coordinate = coordinates(last_coordinate_); + for (std::size_t i = 0; i < copy_to_.size(); ++i) { + copy_to.push_back(coordinates(copy_to_[i])); + } + for (std::size_t i = 0; i < constraints_.size(); ++i) { + std::vector constr; + for (std::size_t j = 0; j < constraints_[i].size(); ++j) { + constr.push_back(coordinates(constraints_[i][j])); + } + constraints.push_back(constr); + } + for (std::size_t i = 0; i < lookups_.size(); ++i) { + std::vector lookup; + for (std::size_t j = 0; j < lookups_[i].size(); ++j) { + lookup.push_back(coordinates(lookups_[i][j])); + } + lookups.push_back(lookup); + } + copy_from = coordinates(copy_from_); + }; + + bool operator==(const configuration &other) const { + return first_coordinate == other.first_coordinate && last_coordinate == other.last_coordinate && + copy_to == other.copy_to && constraints == other.constraints && + lookups == other.lookups && copy_from == other.copy_from; + } + + bool operator<(const configuration &other) const { + return first_coordinate < other.first_coordinate || + (first_coordinate == other.first_coordinate && last_coordinate < other.last_coordinate); + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/lookup_library.hpp b/crypto3/libs/blueprint/include/nil/blueprint/lookup_library.hpp index 755b340087..8575ca24ed 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/lookup_library.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/lookup_library.hpp @@ -154,6 +154,52 @@ namespace nil { virtual std::size_t get_rows_number(){ return 4; } }; + class keccak_pack_table_type : public lookup_table_definition{ + typename BlueprintFieldType::value_type to_sparse(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); + } + public: + keccak_pack_table_type(): lookup_table_definition("keccak_pack_table"){ + this->subtables["full"] = {{0,1}, 0, 255}; + this->subtables["range_check"] = {{0}, 0, 255}; + this->subtables["range_check_sparse"] = {{1}, 0, 255}; + this->subtables["range_check_135"] = {{0}, 0, 135}; + this->subtables["extended"] = {{0,1}, 0, 65535}; + this->subtables["range_check_16bit"] = {{0}, 0, 65535}; + this->subtables["sparse_16bit"] = {{1}, 0, 65535}; + this->subtables["extended_swap"] = {{2,1}, 0, 65535}; + } + virtual void generate(){ + this->_table.resize(3); + + for (typename BlueprintFieldType::integral_type i = 0; + i < typename BlueprintFieldType::integral_type(65536); + i++ + ) { + this->_table[0].push_back(i); + this->_table[1].push_back(to_sparse(i)); + this->_table[2].push_back(typename BlueprintFieldType::value_type(( + ((i & typename BlueprintFieldType::integral_type(0xFF)) << 8) + + ((i & typename BlueprintFieldType::integral_type(0xFF00)) >> 8) + ))); + } + } + virtual std::size_t get_columns_number(){ return 3; } + virtual std::size_t get_rows_number(){ return 256; } + }; + protected: + class binary_and_table_type : public lookup_table_definition{ public: binary_and_table_type(): lookup_table_definition("binary_and_table"){ @@ -187,7 +233,7 @@ namespace nil { ) { std::vector value(14); for (std::size_t j = 0; j < 14; j++) { - value[14 - j - 1] = boost::multiprecision::bit_test(i, j); + value[14 - j - 1] = i.bit_test(j); } std::array, 2> value_chunks = components::detail::split_and_sparse(value, value_sizes, 4); @@ -235,7 +281,7 @@ namespace nil { i++) { std::vector value(14); for (std::size_t j = 0; j < 14; j++) { - value[14 - j - 1] = boost::multiprecision::bit_test(i, j); + value[14 - j - 1] = i.bit_test(j); } std::array, 2> value_chunks = components::detail::split_and_sparse(value, value_sizes, 7); @@ -315,10 +361,159 @@ namespace nil { virtual std::size_t get_rows_number(){return 5764801;} }; + class sparse_values_base8_table : public lookup_table_definition{ + typename BlueprintFieldType::value_type to_sparse(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); + } + public: + sparse_values_base8_table(): lookup_table_definition("keccak_pack_table"){ + this->subtables["full"] = {{0,1}, 0, 255}; + this->subtables["range_check"] = {{0}, 0, 255}; + this->subtables["range_check_sparse"] = {{1}, 0, 255}; + this->subtables["64bit"] = {{0}, 128, 255}; + } + virtual void generate(){ + this->_table.resize(2); + + for (typename BlueprintFieldType::integral_type i = 0; + i < typename BlueprintFieldType::integral_type(256); + i++ + ) { + this->_table[0].push_back(i); + this->_table[1].push_back(to_sparse(i)); + } + } + virtual std::size_t get_columns_number(){ return 2; } + virtual std::size_t get_rows_number(){ return 256; } + }; + + class sparse_values_base8_sign_bit_table : public lookup_table_definition{ + // "keccak_pack_table/64bit" doesn't work, so we need to use this temporary table + typename BlueprintFieldType::value_type to_sparse(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); + } + public: + sparse_values_base8_sign_bit_table(): lookup_table_definition("keccak_sign_bit_table"){ + this->subtables["full"] = {{0}, 0, 128}; + } + virtual void generate(){ + this->_table.resize(2); + this->_table[0].push_back(0); + this->_table[1].push_back(0); + for (typename BlueprintFieldType::integral_type i = 128; + i < typename BlueprintFieldType::integral_type(256); + i++ + ) { + this->_table[0].push_back(i); + this->_table[1].push_back(to_sparse(i)); + } + } + virtual std::size_t get_columns_number(){ return 1; } + virtual std::size_t get_rows_number(){ return 129; } + }; + + class normalize_base8_table_type : public lookup_table_definition{ + std::size_t base; + virtual std::array to_base(std::size_t base, typename BlueprintFieldType::integral_type num) { + typename BlueprintFieldType::integral_type result = 0; + typename BlueprintFieldType::integral_type normalized_result = 0; + typename BlueprintFieldType::integral_type power = 1; + while (num > 0) { + result = result + (num % base)*power; + normalized_result = normalized_result + ((num % base) & 1)*power; + num /= base; + power <<= 3; + } + return {result, normalized_result}; + } + public: + normalize_base8_table_type(std::size_t base_) + : lookup_table_definition("keccak_normalize" + std::to_string(base_) + "_table"), base(base_) { + + this->subtables["full"] = {{0,1}, 0, 65535}; + } + + virtual void generate(){ + this->_table.resize(2); + std::vector value_sizes = {8}; + + for (typename BlueprintFieldType::integral_type i = 0; + i < typename BlueprintFieldType::integral_type(65536); + i++ + ) { + std::array value = to_base(base, i); + this->_table[0].push_back(value[0]); + this->_table[1].push_back(value[1]); + } + } + virtual std::size_t get_columns_number(){ return 2; } + virtual std::size_t get_rows_number(){ return 65536; } + }; + + class chi_table_type : public lookup_table_definition{ + virtual std::array to_base_chi(typename BlueprintFieldType::integral_type num) { + std::size_t base = 5; + typename BlueprintFieldType::integral_type table[5] = {0, 1, 1, 0, 0}; + typename BlueprintFieldType::integral_type result = 0; + typename BlueprintFieldType::integral_type chi_result = 0; + typename BlueprintFieldType::integral_type power = 1; + while (num > 0) { + result = result + (num % base) * power; + chi_result = chi_result + table[int(num % base)] * power; + num /= base; + power <<= 3; + } + return {result, chi_result}; + } + public: + chi_table_type(): lookup_table_definition("keccak_chi_table") { + this->subtables["full"] = {{0,1}, 0, 65535}; + } + virtual void generate(){ + this->_table.resize(2); + std::vector value_sizes = {8}; + + for (typename BlueprintFieldType::integral_type i = 0; + i < typename BlueprintFieldType::integral_type(65536); + i++ + ) { + std::array value = to_base_chi(i); + this->_table[0].push_back(value[0]); + this->_table[1].push_back(value[1]); + } + } + virtual std::size_t get_columns_number(){ return 2; } + virtual std::size_t get_rows_number(){ return 65536; } + }; + class chunk_16_bits_table: public lookup_table_definition{ public: chunk_16_bits_table(): lookup_table_definition("chunk_16_bits"){ this->subtables["full"] = {{0}, 0, 65535}; + this->subtables["8bits"] = {{0}, 0, 255}; + this->subtables["10bits"] = {{0}, 0, 1023}; }; virtual void generate(){ this->_table.resize(1); @@ -330,6 +525,30 @@ namespace nil { virtual std::size_t get_columns_number(){return 1;} virtual std::size_t get_rows_number(){return 65536;} }; + + class byte_and_xor_table_type : public lookup_table_definition{ + public: + byte_and_xor_table_type(): lookup_table_definition("byte_and_xor_table"){ + this->subtables["full"] = {{0,1,2,3}, 0, 65535}; + this->subtables["and"] = {{0,1,2}, 0, 65535}; + this->subtables["xor"] = {{0,1,3}, 0, 65535}; + this->subtables["word"] = {{0,1}, 0, 65535}; + } + virtual void generate(){ + this->_table.resize(4); + for(std::size_t x = 0; x < 256; x++) { + for(std::size_t y = 0; y < 256; y++) { + this->_table[0].push_back(x); + this->_table[1].push_back(y); + this->_table[2].push_back(x & y); + this->_table[3].push_back(x ^ y); + } + } + } + virtual std::size_t get_columns_number(){ return 4; } + virtual std::size_t get_rows_number(){ return 65536; } + }; + public: using bimap_type = boost::bimap, boost::bimaps::set_of>; using left_reserved_type = typename bimap_type::left_map; @@ -347,8 +566,16 @@ namespace nil { tables["sha256_reverse_sparse_base7"] = std::shared_ptr(new reverse_sparse_sigmas_base7_table()); tables["sha256_maj"] = std::shared_ptr(new maj_function_table()); tables["sha256_ch"] = std::shared_ptr(new ch_function_table()); + tables["keccak_pack_table"] = std::shared_ptr(new keccak_pack_table_type()); +// tables["keccak_pack_table"] = std::shared_ptr(new sparse_values_base8_table()); + tables["keccak_sign_bit_table"] = std::shared_ptr(new sparse_values_base8_sign_bit_table()); + tables["keccak_normalize3_table"] = std::shared_ptr(new normalize_base8_table_type(3)); + tables["keccak_normalize4_table"] = std::shared_ptr(new normalize_base8_table_type(4)); + tables["keccak_normalize6_table"] = std::shared_ptr(new normalize_base8_table_type(6)); + tables["keccak_chi_table"] = std::shared_ptr(new chi_table_type()); tables["byte_range_table"] = std::shared_ptr(new byte_range_table_type()); tables["zkevm_opcodes"] = std::shared_ptr(new zkevm_opcode_table()); + tables["byte_and_xor_table"] = std::shared_ptr(new byte_and_xor_table_type()); } void register_lookup_table(std::shared_ptr table){ @@ -447,4 +674,4 @@ namespace nil { }; } // namespace blueprint } // namespace nil -#endif // CRYPTO3_LOOKUP_TABLE_HPP +#endif // CRYPTO3_LOOKUP_TABLE_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/utils/satisfiability_check.hpp b/crypto3/libs/blueprint/include/nil/blueprint/utils/satisfiability_check.hpp index 2f8799e84e..f501a9e6f6 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/utils/satisfiability_check.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/utils/satisfiability_check.hpp @@ -26,7 +26,6 @@ #ifndef CRYPTO3_BLUEPRINT_UTILS_PLONK_SATISFIABILITY_CHECK_HPP #define CRYPTO3_BLUEPRINT_UTILS_PLONK_SATISFIABILITY_CHECK_HPP -#include #include #include #include @@ -43,7 +42,7 @@ namespace nil { template bool is_satisfied( const circuit> &bp, - const assignment> &assignments) { + const crypto3::zk::snark::plonk_assignment_table &assignments) { std::set used_gates; for (std::uint32_t i = 0; i < bp.gates().size(); i++) { used_gates.insert(i); @@ -60,7 +59,7 @@ namespace nil { } std::set selector_rows; - for (std::uint32_t i = 0; i < assignments.allocated_rows(); i++) { + for (std::uint32_t i = 0; i < assignments.rows_amount(); i++) { selector_rows.insert(i); } @@ -71,10 +70,13 @@ namespace nil { std::set> load_dynamic_lookup( const circuit> &bp, - const assignment> &assignments, + const crypto3::zk::snark::plonk_assignment_table &assignments, std::size_t table_id ){ std::set> result; + if( table_id > bp.lookup_tables().size() ) + std::cout << table_id << " >= " << bp.lookup_tables().size() << std::endl; + BOOST_ASSERT(table_id <= bp.lookup_tables().size()); auto &table = bp.lookup_tables()[table_id-1]; crypto3::zk::snark::plonk_column selector = @@ -100,7 +102,7 @@ namespace nil { template bool is_satisfied( const circuit> &bp, - const assignment> &assignments, + const crypto3::zk::snark::plonk_assignment_table &assignments, const std::set &used_gates, const std::set &used_lookup_gates, const std::set &used_copy_constraints, @@ -114,13 +116,28 @@ namespace nil { std::map>> used_dynamic_tables; + std::cout << "Satisfiability check. Check" << std::endl; for (const auto& i : used_gates) { + std::cout << "\tCheck gate " << i << std::endl; crypto3::zk::snark::plonk_column selector = assignments.crypto3::zk::snark:: template plonk_assignment_table::selector( gates[i].selector_index); + //for (std::size_t j = 0; j < gates[i].constraints.size(); j++) { + // std::cout << gates[i].constraints[j] << std::endl; + //} for (const auto& selector_row : selector_rows) { + const std::size_t step = selector_rows.size() > 100 ? selector_rows.size()/100: selector_rows.size(); + if( selector_row % step == 0 ) { + std::cout << "."; + std::cout.flush(); + } + // std::cout << "selector row " << selector_row << ": "; + // for( std::size_t j = 0; j < assignments.witnesses_amount(); j++){ + // std::cout << assignments.witness(j)[selector_row] << " "; + // } + // std::cout << std::endl; if (selector_row < selector.size() && !selector[selector_row].is_zero()) { for (std::size_t j = 0; j < gates[i].constraints.size(); j++) { @@ -128,27 +145,49 @@ namespace nil { gates[i].constraints[j].evaluate(selector_row, assignments); if (!constraint_result.is_zero()) { + std::cout<< std::endl; + std::cout << std::endl; std::cout << "Constraint " << j << " from gate " << i << " on row " << selector_row << " is not satisfied." << std::endl; + std::cout << std::endl; std::cout << "Constraint result: " << constraint_result << std::endl; + std::cout << "Constraint: " << gates[i].constraints[j] << std::endl; std::cout << "Offending gate:" << std::endl; + std::cout<< "Offended constraint result" << std::endl; + for( std::size_t ind = 0; ind < selector_rows.size(); ind++){ + if( selector[ind].is_zero() ) + std::cout << "0 "; + else + std::cout << gates[i].constraints[j].evaluate(ind, assignments) << " "; + } + + std::size_t k = 0; for (const auto &constraint : gates[i].constraints) { - std::cout << constraint << std::endl; + k ++; + std::cout << k << ": " << constraint << std::endl; } return false; } } } } + std::cout << std::endl; } + std::cout << "Gates checked. Check lookups" << std::endl; for (const auto& i : used_lookup_gates) { + std::cout << "\tLookup gate " << i << std::endl; crypto3::zk::snark::plonk_column selector = assignments.crypto3::zk::snark:: template plonk_assignment_table::selector( lookup_gates[i].tag_index); for (const auto& selector_row : selector_rows) { + const std::size_t step = selector_rows.size() > 100 ? selector_rows.size()/100: selector_rows.size(); + if( selector_row % step == 0 ) { + std::cout << "."; + std::cout.flush(); + } if (selector_row < selector.size() && !selector[selector_row].is_zero()) { for (std::size_t j = 0; j < lookup_gates[i].constraints.size(); j++) { std::vector input_values; @@ -165,20 +204,29 @@ namespace nil { used_dynamic_tables[table_name] = load_dynamic_lookup(bp, assignments, lookup_gates[i].constraints[j].table_id); } if( used_dynamic_tables[table_name].find(input_values) == used_dynamic_tables[table_name].end() ) { - for (std::size_t k = 0; k < input_values.size(); k++) { - std::cout << input_values[k] << " "; - } std::cout << std::endl; std::cout << "Constraint " << j << " from lookup gate " << i << " from table " << table_name << " on row " << selector_row << " is not satisfied." << std::endl; - std::cout << "Offending Lookup Gate: " << std::endl; + std::cout << "Input: "; + for (std::size_t k = 0; k < input_values.size(); k++) { + std::cout << std::hex << input_values[k] << std::dec << " "; + } + std::cout << std::endl; + std::cout << "Offending Dynamic Lookup Gate: " << std::endl; for (const auto &constraint : lookup_gates[i].constraints) { - std::cout << "Table id: " << constraint.table_id << std::endl; + std::cout << "Table id: " << constraint.table_id << " table name = " << table_name << std::endl; for (auto &lookup_input : constraint.lookup_input) { std::cout << lookup_input << std::endl; } } + std::cout << "Possible values: " << std::endl; + for( auto &value : used_dynamic_tables[table_name]){ + for (std::size_t k = 0; k < value.size(); k++) { + std::cout << std::hex << value[k] << std::dec << " "; + } + std::cout << std::endl; + } return false; } continue; @@ -211,9 +259,10 @@ namespace nil { } } if (!found) { + std::cout << std::endl; std::cout << "Input values:"; for (std::size_t k = 0; k < input_values.size(); k++) { - std::cout << input_values[k] << " "; + std::cout << std::hex << input_values[k] << std::dec << " "; } std::cout << std::endl; std::cout << "Constraint " << j << " from lookup gate " << i << " from table " @@ -221,21 +270,24 @@ namespace nil { << std::endl; std::cout << "Offending Lookup Gate: " << std::endl; for (const auto &constraint : lookup_gates[i].constraints) { - std::cout << "Table id: " << constraint.table_id << std::endl; + std::cout << "Table id: " << constraint.table_id << " table name = " << table_name << std::endl; for (auto &lookup_input : constraint.lookup_input) { - std::cout << lookup_input << std::endl; + std::cout << std::hex << lookup_input << std::dec << std::endl; } } return false; } } catch (std::out_of_range &e) { std::cout << "Lookup table " << table_name << " not found." << std::endl; - std::cout << "Table_id = " << lookup_gates[i].constraints[j].table_id << " table_name " << table_name << std::endl; + std::cout << "Table id = " << lookup_gates[i].constraints[j].table_id << " table_name " << table_name << std::endl; return false; + } catch (...){ + std::cout << "Other exception" << std::endl; } } } } + std::cout << std::endl; } for (const auto& i : used_copy_constraints) { diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/bytecode.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/bytecode.hpp index 2d09e6842e..e82805b723 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/bytecode.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/bytecode.hpp @@ -32,227 +32,79 @@ #include #include +#include +#include + #include #include +#include +#include + namespace nil { namespace blueprint { namespace components { - // Component for bytecode table template - class zkevm_bytecode_table; + class zkevm_bytecode; template - class zkevm_bytecode_table, BlueprintFieldType> + class zkevm_bytecode, BlueprintFieldType> : public plonk_component { public: - // Named witness columns - static constexpr std::size_t TAG = 0; - static constexpr std::size_t INDEX = 1; - static constexpr std::size_t VALUE = 2; - static constexpr std::size_t IS_OPCODE = 3; - static constexpr std::size_t HASH_HI = 4; - static constexpr std::size_t HASH_LO = 5; - + using bytecode_table_component_type = plonk_zkevm_bytecode_table; + using keccak_table_component_type = plonk_keccak_table; using component_type = plonk_component; - using var = typename component_type::var; + using state_var = state_variable; using manifest_type = plonk_component_manifest; - - std::size_t max_bytecode_size; - - class gate_manifest_type : public component_gate_manifest { - public: - std::uint32_t gates_amount() const override { - return zkevm_bytecode_table::gates_amount + zkevm_bytecode_table::lookup_gates_amount; - } - }; - - static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_bytecode_size) { - gate_manifest manifest = gate_manifest(gate_manifest_type()); - return manifest; - } - - static manifest_type get_manifest() { - static manifest_type manifest = manifest_type( - std::shared_ptr(new manifest_single_value_param(6)), - false - ); - return manifest; - } - - constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_bytecode_size) { - return max_bytecode_size; - } - - constexpr static const std::size_t gates_amount = 0; - constexpr static const std::size_t lookup_gates_amount = 0; - std::size_t rows_amount = max_bytecode_size; - - struct input_type { - std::vector> bytecodes; // EVM contracts bytecodes - std::vector> bytecode_hashes; // hi, lo parts for keccak. It'll be only one value if we'll use poseidon - std::size_t full_size; - - input_type( - const std::vector> &_bytecodes, - const std::vector> &_bytecode_hashes - ) : bytecodes(_bytecodes), bytecode_hashes(_bytecode_hashes), full_size(0) { - BOOST_ASSERT(_bytecodes.size() == _bytecode_hashes.size()); - for( std::size_t i = 0; i < bytecodes.size(); i++ ){ - full_size += bytecodes[i].size(); - } - } - - std::vector> all_vars() { - std::vector> result; - for( std::size_t i = 0; i < bytecodes.size(); i++ ){ - for( std::size_t j = 0; j < bytecodes[i].size(); j++ ){ - result.push_back(bytecodes[i][j]); - } - } - return result; - } - }; - - struct result_type { - result_type(const zkevm_bytecode_table &component, std::size_t start_row_index) { - } - - std::vector> all_vars() { - std::vector> result; - return result; - } - }; - - template - explicit zkevm_bytecode_table(ContainerType witness, std::size_t _max_bytecode_size) : - component_type(witness, {}, {}, get_manifest()), max_bytecode_size(_max_bytecode_size) - {}; - - template - zkevm_bytecode_table(WitnessContainerType witness, ConstantContainerType constant, - PublicInputContainerType public_input, - std::size_t _max_bytecode_size - ) : component_type(witness, constant, public_input, get_manifest()), max_bytecode_size(_max_bytecode_size) {}; - - zkevm_bytecode_table( - std::initializer_list witnesses, - std::initializer_list - constants, - std::initializer_list - public_inputs, - std::size_t _max_bytecode_size - ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_bytecode_size(_max_bytecode_size){}; - }; - - template - using plonk_zkevm_bytecode_table = - zkevm_bytecode_table, BlueprintFieldType>; - - template - typename plonk_zkevm_bytecode_table::result_type generate_assignments( - const plonk_zkevm_bytecode_table &component, - assignment> - &assignment, - const typename plonk_zkevm_bytecode_table::input_type - &instance_input, - const std::uint32_t start_row_index) { - using component_type = plonk_zkevm_bytecode_table; using value_type = typename BlueprintFieldType::value_type; - std::size_t cur = 0; - for(std::size_t i = 0; i < instance_input.bytecodes.size(); i++){ - value_type hash_hi = var_value(assignment, instance_input.bytecode_hashes[i].first); - value_type hash_lo = var_value(assignment, instance_input.bytecode_hashes[i].second); - value_type push_size = 0; - for(std::size_t j = 0; j < instance_input.bytecodes[i].size(); j++, cur++){ - auto byte = var_value(assignment, instance_input.bytecodes[i][j]); - assignment.witness(component.W(component_type::VALUE), start_row_index + cur) = byte; - assignment.witness(component.W(component_type::HASH_HI), start_row_index + cur) = hash_hi; - assignment.witness(component.W(component_type::HASH_LO), start_row_index + cur) = hash_lo; - if( j == 0){ - // HEADER - assignment.witness(component.W(component_type::TAG), start_row_index + cur) = 0; - assignment.witness(component.W(component_type::INDEX), start_row_index + cur) = 0; - assignment.witness(component.W(component_type::IS_OPCODE), start_row_index + cur) = 0; - push_size = 0; - } else { - - // BYTE - assignment.witness(component.W(component_type::TAG), start_row_index + cur) = 1; - assignment.witness(component.W(component_type::INDEX), start_row_index + cur) = j-1; - if(push_size == 0){ - assignment.witness(component.W(component_type::IS_OPCODE), start_row_index + cur) = 1; - if(byte > 0x5f && byte < 0x80) push_size = byte - 0x5f; - } else { - assignment.witness(component.W(component_type::IS_OPCODE), start_row_index + cur) = 0; - push_size--; - } - } - } - } - - return typename component_type::result_type(component, start_row_index); - } - - template - typename plonk_zkevm_bytecode_table::result_type generate_circuit( - const plonk_zkevm_bytecode_table &component, - circuit> &bp, - assignment> - &assignment, - const typename plonk_zkevm_bytecode_table::input_type - &instance_input, - const std::size_t start_row_index - ) { - using component_type = plonk_zkevm_bytecode_table; - using var = typename component_type::var; - - bp.register_dynamic_table("zkevm_bytecode"); - std::size_t selector_index = bp.get_dynamic_lookup_table_selector(); - assignment.enable_selector(selector_index, start_row_index, start_row_index + component.rows_amount - 1); - - crypto3::zk::snark::plonk_lookup_table bytecode_table; - bytecode_table.tag_index = selector_index; - bytecode_table.columns_number = 6;// tag, index, value, length, hash_hi, hash_lo - bytecode_table.lookup_options = {{ - var(component.W(component_type::TAG), 0, true), - var(component.W(component_type::INDEX), 0, true), - var(component.W(component_type::VALUE), 0, true), - var(component.W(component_type::IS_OPCODE), 0, true), - var(component.W(component_type::HASH_HI), 0, true), - var(component.W(component_type::HASH_LO), 0, true) - }}; - bp.define_dynamic_table("zkevm_bytecode", bytecode_table); - - return typename component_type::result_type(component, start_row_index); - } - - template - class zkevm_bytecode; - - template - class zkevm_bytecode, BlueprintFieldType> - : public plonk_component - { - public: - using bytecode_table_component_type = plonk_zkevm_bytecode_table; - // Named witness columns - static constexpr std::size_t PUSH_SIZE = 6; + /*static constexpr std::size_t PUSH_SIZE = 6; static constexpr std::size_t VALUE_RLC = 7; static constexpr std::size_t LENGTH_LEFT = 8; - static constexpr std::size_t RLC_CHALLENGE = 9; - - using component_type = plonk_component; - - using var = typename component_type::var; - using manifest_type = plonk_component_manifest; + static constexpr std::size_t RLC_CHALLENGE = 9;*/ + + struct bytecode_map{ + bytecode_map(std::vector witnesses): + tag(witnesses[0]), + index(witnesses[1]), + value(witnesses[2]), + is_opcode(witnesses[3]), + hash_hi(witnesses[4]), + hash_lo(witnesses[5]), + push_size(witnesses[6]), + value_rlc(witnesses[7]), + length_left(witnesses[8]), + rlc_challenge(witnesses[9]), + keccak_map(witnesses) { } + + const std::vector bytecode_table_witnesses() const{ + return { + std::uint32_t(tag.index), + std::uint32_t(index.index), + std::uint32_t(value.index), + std::uint32_t(is_opcode.index), + std::uint32_t(hash_hi.index), + std::uint32_t(hash_lo.index) + }; + } + typename keccak_table_component_type::keccak_table_map keccak_map; + state_var tag; + state_var index; + state_var value; + state_var is_opcode; + state_var hash_hi; + state_var hash_lo; + state_var push_size; + state_var value_rlc; + state_var length_left; + state_var rlc_challenge; + }; std::size_t max_bytecode_size; + std::size_t max_keccak_blocks; class gate_manifest_type : public component_gate_manifest { public: @@ -261,57 +113,53 @@ namespace nil { } }; - static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_bytecode_size) { + static gate_manifest get_gate_manifest(std::size_t witness_amount) { gate_manifest manifest = gate_manifest(gate_manifest_type()); return manifest; } static manifest_type get_manifest() { static manifest_type manifest = manifest_type( - std::shared_ptr(new manifest_single_value_param(11)), + std::shared_ptr(new manifest_single_value_param(10)), false ); return manifest; } - constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_bytecode_size) { - return max_bytecode_size; + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_bytecode_size, std::size_t max_keccak_blocks) { + return max_bytecode_size + max_keccak_blocks + 1; } constexpr static const std::size_t gates_amount = 1; constexpr static const std::size_t lookup_gates_amount = 1; std::size_t rows_amount = max_bytecode_size; - struct input_type { - std::vector> bytecodes; // EVM contracts bytecodes - std::vector> bytecode_hashes; // hi, lo parts for keccak. It'll be only one value if we'll use poseidon + class input_type:public bytecode_input_type { + using keccak_input_type = typename keccak_table_component_type::input_type; + public: var rlc_challenge; - std::size_t full_size; - - input_type( - const std::vector> &_bytecodes, - const std::vector> &_bytecode_hashes, - const var& _rlc_challenge - ) : bytecodes(_bytecodes), bytecode_hashes(_bytecode_hashes), rlc_challenge(_rlc_challenge), full_size(0) { - BOOST_ASSERT(_bytecodes.size() == _bytecode_hashes.size()); - for( std::size_t i = 0; i < bytecodes.size(); i++ ){ - full_size += bytecodes[i].size(); - } - } + input_type(var _rlc_challenge ) :rlc_challenge(_rlc_challenge) {} std::vector> all_vars() { - std::vector> result; - for( std::size_t i = 0; i < bytecodes.size(); i++ ){ - for( std::size_t j = 0; j < bytecodes[i].size(); j++ ){ - result.push_back(bytecodes[i][j]); - } - } - return result; + return {rlc_challenge}; + } + + const keccak_input_type& get_keccak_input() const{ + BOOST_ASSERT(keccak_input != nullptr); + return *keccak_input; + } + + void fill_dynamic_table_inputs(const keccak_input_type&_keccak_input){ + BOOST_ASSERT(keccak_input == nullptr); + keccak_input = std::make_shared(); + *keccak_input = _keccak_input; } + private: + std::shared_ptr keccak_input; }; struct result_type { - result_type(const zkevm_bytecode &component, std::size_t start_row_index) { + result_type() { } std::vector> all_vars() { @@ -320,34 +168,31 @@ namespace nil { } }; - template - explicit zkevm_bytecode(ContainerType witness, std::size_t _max_bytecode_size) : - component_type(witness, {}, {}, get_manifest()), max_bytecode_size(_max_bytecode_size) - {}; - - template - zkevm_bytecode(WitnessContainerType witness, ConstantContainerType constant, - PublicInputContainerType public_input, - std::size_t _max_bytecode_size - ) : component_type(witness, constant, public_input, get_manifest()), max_bytecode_size(_max_bytecode_size) {}; - - zkevm_bytecode( - std::initializer_list witnesses, - std::initializer_list - constants, - std::initializer_list - public_inputs, - std::size_t _max_bytecode_size - ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_bytecode_size(_max_bytecode_size){}; - - - std::map component_lookup_tables(){ + std::map component_lookup_tables() const{ std::map lookup_tables; lookup_tables["byte_range_table/full"] = 0; // REQUIRED_TABLE lookup_tables["zkevm_opcodes/full"] = 0; // REQUIRED_TABLE + lookup_tables["keccak_table"] = 1; // Dynamic table; return lookup_tables; } + + zkevm_bytecode( + typename component_type::witness_container_type witnesses, + typename component_type::constant_container_type constants, + typename component_type::public_input_container_type public_inputs, + std::size_t _max_bytecode_size, + std::size_t _max_keccak_blocks + ) : component_type(witnesses, constants, public_inputs, get_manifest()), + max_bytecode_size(_max_bytecode_size), + max_keccak_blocks(_max_keccak_blocks), + m(witnesses), + bytecode_table(m.bytecode_table_witnesses(), constants, public_inputs, _max_bytecode_size), + keccak_table(m.keccak_map.witnesses(), constants, public_inputs, _max_keccak_blocks) + {}; + + bytecode_map m; + bytecode_table_component_type bytecode_table; + keccak_table_component_type keccak_table; }; template @@ -355,7 +200,7 @@ namespace nil { zkevm_bytecode, BlueprintFieldType>; template - typename plonk_zkevm_bytecode::result_type generate_assignments( + typename plonk_zkevm_bytecode::result_type generate_basic_assignments( const plonk_zkevm_bytecode &component, assignment> &assignment, @@ -367,48 +212,78 @@ namespace nil { using bytecode_table_component_type = typename component_type::bytecode_table_component_type; using value_type = typename BlueprintFieldType::value_type; - bytecode_table_component_type bytecode_table( - {component.W(0),component.W(1), component.W(2), component.W(3), component.W(4), component.W(5)}, {}, {}, - component.max_bytecode_size - ); - typename bytecode_table_component_type::input_type table_input( - instance_input.bytecodes, - instance_input.bytecode_hashes - ); + const typename component_type::bytecode_map &m = component.m; + const bytecode_table_component_type &bytecode_table = component.bytecode_table; + + typename bytecode_table_component_type::input_type table_input; + table_input.fill_bytecodes(instance_input.get_bytecodes()); generate_assignments(bytecode_table, assignment, table_input, start_row_index); value_type rlc_challenge = var_value(assignment, instance_input.rlc_challenge); - std::size_t cur = 0; - for(std::size_t i = 0; i < instance_input.bytecodes.size(); i++){ + std::size_t cur = start_row_index; + const auto &bytecodes = instance_input.get_bytecodes(); + for(std::size_t i = 0; i < bytecodes.size(); i++){ value_type push_size = 0; - for(std::size_t j = 0; j < instance_input.bytecodes[i].size(); j++, cur++){ - auto byte = var_value(assignment, instance_input.bytecodes[i][j]); - assignment.witness(component.W(component_type::RLC_CHALLENGE), start_row_index + cur) = rlc_challenge; + auto buffer = bytecodes[i].first; + value_type length_left = buffer.size(); + for(std::size_t j = 0; j < bytecodes[i].first.size(); j++, cur++){ + auto byte = buffer[j]; + assignment.witness(m.rlc_challenge.index, cur) = rlc_challenge; if( j == 0){ // HEADER - assignment.witness(component.W(component_type::PUSH_SIZE), start_row_index + cur) = 0; - assignment.witness(component.W(component_type::LENGTH_LEFT), start_row_index + cur ) = var_value(assignment, instance_input.bytecodes[i][j]); - assignment.witness(component.W(component_type::VALUE_RLC), start_row_index + cur) = 0; + assignment.witness(m.push_size.index, cur) = 0; + assignment.witness(m.length_left.index, cur ) = length_left; + assignment.witness(m.value_rlc.index, cur) = length_left; push_size = 0; + length_left--; + cur++; + } + // BYTE + assignment.witness(m.rlc_challenge.index, cur) = rlc_challenge; + assignment.witness(m.length_left.index, cur) = length_left; + if(push_size == 0){ + if(byte > 0x5f && byte < 0x80) push_size = byte - 0x5f; } else { - // BYTE - assignment.witness(component.W(component_type::LENGTH_LEFT), start_row_index + cur ) = assignment.witness(component.W(component_type::LENGTH_LEFT), start_row_index + cur - 1) - 1; - if(push_size == 0){ - if(byte > 0x5f && byte < 0x80) push_size = byte - 0x5f; - } else { - push_size--; - } - assignment.witness(component.W(component_type::PUSH_SIZE), start_row_index + cur) = push_size; - assignment.witness(component.W(component_type::VALUE_RLC), start_row_index + cur) = assignment.witness(component.W(component_type::VALUE_RLC), start_row_index + cur - 1) * rlc_challenge + assignment.witness(bytecode_table.W(bytecode_table_component_type::VALUE), start_row_index + cur); + push_size--; } + assignment.witness(m.push_size.index, cur) = push_size; + assignment.witness(m.value_rlc.index, cur) = assignment.witness(m.value_rlc.index, cur - 1) * rlc_challenge + byte; + length_left--; } } - return typename component_type::result_type(component, start_row_index); + return typename component_type::result_type(); } + template + void generate_dynamic_tables_assignments( + const plonk_zkevm_bytecode &component, + assignment> &assignment, + const typename plonk_zkevm_bytecode::input_type &instance_input, + const std::uint32_t start_row_index + ) { + generate_assignments( + component.keccak_table, + assignment, + instance_input.get_keccak_input(), + start_row_index + component.bytecode_table.rows_amount + 1 + ); + } + + template + typename plonk_zkevm_bytecode::result_type generate_assignments( + const plonk_zkevm_bytecode &component, + assignment> &assignment, + const typename plonk_zkevm_bytecode::input_type &instance_input, + const std::uint32_t start_row_index + ) { + auto result_type = generate_basic_assignments(component, assignment, instance_input, start_row_index); + generate_dynamic_tables_assignments(component, assignment, instance_input, start_row_index); + return result_type; + } + template std::size_t generate_gates( const plonk_zkevm_bytecode &component, @@ -421,111 +296,76 @@ namespace nil { std::size_t start_row_index ) { using component_type = plonk_zkevm_bytecode; - using var = typename component_type::var; - using constraint_type = crypto3::zk::snark::plonk_constraint; + using bytecode_table_component_type = typename component_type::bytecode_table_component_type; + using keccak_table_component_type = typename component_type::keccak_table_component_type; + using value_type = typename BlueprintFieldType::value_type; using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; - using bytecode_table_component_type = plonk_zkevm_bytecode_table; + using constraint_type = crypto3::zk::snark::plonk_constraint; - bytecode_table_component_type bytecode_table( - {component.W(0),component.W(1), component.W(2), component.W(3), component.W(4), component.W(5)}, {}, {}, - component.max_bytecode_size - ); - typename bytecode_table_component_type::input_type table_input( - instance_input.bytecodes, - instance_input.bytecode_hashes - ); + const typename component_type::bytecode_map &m = component.m; + const bytecode_table_component_type &bytecode_table = component.bytecode_table; + + bp.add_copy_constraint({instance_input.rlc_challenge, m.rlc_challenge.abs(start_row_index)}); + typename bytecode_table_component_type::input_type table_input; generate_circuit(bytecode_table, bp, assignment, table_input, start_row_index); - // Named witness columns - std::size_t TAG = bytecode_table.W(bytecode_table_component_type::TAG); - std::size_t INDEX = bytecode_table.W(bytecode_table_component_type::INDEX); - std::size_t VALUE = bytecode_table.W(bytecode_table_component_type::VALUE); - std::size_t IS_OPCODE = bytecode_table.W(bytecode_table_component_type::IS_OPCODE); - std::size_t HASH_HI = bytecode_table.W(bytecode_table_component_type::HASH_HI); - std::size_t HASH_LO = bytecode_table.W(bytecode_table_component_type::HASH_LO); - std::size_t PUSH_SIZE = component.W(component_type::PUSH_SIZE); - std::size_t LENGTH_LEFT = component.W(component_type::LENGTH_LEFT); - std::size_t VALUE_RLC = component.W(component_type::VALUE_RLC); - std::size_t RLC_CHALLENGE = component.W(component_type::RLC_CHALLENGE); - - var tag = var(TAG, 0, true); - var tag_prev = var(TAG, -1, true); - var tag_next = var(TAG, 1, true); - var index = var(INDEX, 0, true); - var index_next = var(INDEX, 1, true); - var value = var(VALUE, 0, true); - var length_left = var(LENGTH_LEFT, 0, true); - var length_left_next = var(LENGTH_LEFT, 1, true); - var is_opcode = var(IS_OPCODE, 0, true); - var is_opcode_next = var(IS_OPCODE, 1, true); - var push_size = var(PUSH_SIZE, 0, true); - var push_size_next = var(PUSH_SIZE, 1, true); - var hash_hi = var(HASH_HI, 0, true); - var hash_hi_next = var(HASH_HI, 1, true); - var hash_lo = var(HASH_LO, 0, true); - var hash_lo_next = var(HASH_LO, 1, true); - var value_rlc = var(VALUE_RLC, 0, true); - var value_rlc_prev = var(VALUE_RLC, -1, true); - var rlc_challenge = var(RLC_CHALLENGE, 0, true); - var rlc_challenge_prev = var(RLC_CHALLENGE, -1, true); + typename keccak_table_component_type::input_type keccak_input(instance_input.rlc_challenge); + generate_circuit(component.keccak_table, bp, assignment, keccak_input, start_row_index + component.bytecode_table.rows_amount + 1); std::vector constraints; - constraints.push_back(tag * (tag - 1)); // 0. TAG is zeroes or ones -- maybe there will be third value for non-used rows - constraints.push_back((tag - 1) * (index )); // 1. INDEX for HEADER and unused bytes is zero - constraints.push_back((tag - 1) * (index_next)); // 2. INDEX for first contract byte is zero - constraints.push_back(tag * tag_next * (index_next - index - 1)); // 3. INDEX is incremented for any bytes - constraints.push_back((tag - 1) * (length_left - value)); // 4. In contract header length_left == contract length - constraints.push_back(tag_next * (length_left - length_left_next - 1)); // 5. In contract bytes each row decrement length_left - constraints.push_back(tag * (tag_next - 1) * length_left); // 6. Length_left is zero for last byte in the contract - constraints.push_back(is_opcode * (is_opcode - 1)); // 7. is_opcode is zeroes or ones - constraints.push_back((tag - 1) * is_opcode); // 8. is_opcode on HEADER are zeroes - constraints.push_back((tag - 1) * tag_next * (is_opcode_next - 1)); // 9. Fist is_opcode on BYTE after HEADER is 1 - constraints.push_back(is_opcode_next * push_size); // 11. before opcode push_size is always zero - constraints.push_back(tag_next * (is_opcode_next - 1) * (push_size - push_size_next - 1)); // 10. PUSH_SIZE decreases for non-opcodes - constraints.push_back(tag_next * (hash_hi - hash_hi_next)); //12. for all bytes hash is similar to previous - constraints.push_back(tag_next * (hash_lo - hash_lo_next)); //13. for all bytes hash is similar to previous - constraints.push_back((tag - 1) * value_rlc); // 14. value_rlc for HEADERS == 0; - constraints.push_back(tag * (value_rlc - value_rlc_prev * rlc_challenge - value)); // 15. for all bytes RLC is correct - constraints.push_back(tag * (rlc_challenge - rlc_challenge_prev)); //16. for each BYTEs rlc_challenge are similar - constraints.push_back((tag-1) * tag_prev * tag_next * (rlc_challenge - rlc_challenge_prev)); //17. rlc doesn't change during contract + constraints.push_back(m.tag() * (m.tag() - 1)); // 0. TAG is zeroes or ones -- maybe there will be third value for non-used rows + constraints.push_back((m.tag() - 1) * (m.index())); // 1. INDEX for HEADER and unused bytes is zero + constraints.push_back((m.tag() - 1) * (m.index.next())); // 2. INDEX for first contract byte is zero + constraints.push_back(m.tag() * m.tag.next() * (m.index.next() - m.index() - 1)); // 3. INDEX is incremented for all bytes + constraints.push_back((m.tag() - 1) * (m.length_left() - m.value())); // 4. In contract header length_left == contract length + constraints.push_back(m.tag.next() * (m.length_left() - m.length_left.next() - 1)); // 5. In contract bytes each row decrement length_left + constraints.push_back(m.tag() * (m.tag.next() - 1) * m.length_left()); // 6. Length_left is zero for last byte in the contract + constraints.push_back(m.is_opcode() * (m.is_opcode() - 1)); // 7. is_opcode is zeroes or ones + constraints.push_back((m.tag() - 1) * m.is_opcode()); // 8. is_opcode on HEADER are zeroes + constraints.push_back((m.tag() - 1) * m.tag.next() * (m.is_opcode.next() - 1)); // 9. Fist is_opcode on BYTE after HEADER is 1 + constraints.push_back(m.is_opcode.next() * m.push_size()); // 11. before opcode push_size is always zero + constraints.push_back(m.tag.next() * (m.is_opcode.next() - 1) * (m.push_size() - m.push_size.next() - 1)); // 10. PUSH_SIZE decreases for non-opcodes + constraints.push_back(m.tag.next() * (m.hash_hi() - m.hash_hi.next())); //12. for all bytes hash is similar to previous + constraints.push_back(m.tag.next() * (m.hash_lo() - m.hash_lo.next())); //13. for all bytes hash is similar to previous + constraints.push_back((m.tag() - 1) * (m.value_rlc() - m.length_left())); // 14. value_rlc for HEADERS == 0; + constraints.push_back(m.tag() * (m.value_rlc() - m.value_rlc.prev() * m.rlc_challenge() - m.value())); // 15. for all bytes RLC is correct + constraints.push_back(m.tag() * (m.rlc_challenge() - m.rlc_challenge.prev())); //16. for each BYTEs rlc_challenge are similar + constraints.push_back((m.tag() - 1) * m.tag.prev() * m.tag.next() * (m.rlc_challenge() - m.rlc_challenge.prev())); //17. rlc doesn't change during contract std::vector lookup_constraints; - lookup_constraint_type bytecode_range_check = {lookup_tables_indices.at("byte_range_table/full"), {tag * value}}; + lookup_constraint_type bytecode_range_check = {lookup_tables_indices.at("byte_range_table/full"), {m.tag() * m.value()}}; lookup_constraint_type opcode_constraint = { lookup_tables_indices.at("zkevm_opcodes/full"), - {value * is_opcode, push_size * is_opcode , is_opcode} + {m.value() * m.is_opcode(), m.push_size() * m.is_opcode() , m.is_opcode()} }; + std::size_t selector_id = bp.get_dynamic_table_definition("zkevm_bytecode")->lookup_table.tag_index; -// lookup_constraint_type hash_table_constraint = { -// lookup_tables_indices.at("zkevm_dynamic/hash_table"), -// {tag * (1 - tag_next) * value_rlc, tag * (1 - tag_next) * value_rlc * index + 1, tag * (1 - tag_next ) * hash_hi, tag * (1 - tag_next) * hash_lo} -// } + // TODO: review after lookup argument update + // It may be jsut constant for the fixed curve + auto zerohash = keccak_component_hash({}); + + lookup_constraint_type hash_table_constraint = { + lookup_tables_indices.at("keccak_table"), + { + m.tag() + 1 - m.tag(), // TODO: update math::expression constructor with constant parameter + m.tag() * (1 - m.tag.next()) * m.value_rlc(), + m.tag() * (1 - m.tag.next()) * m.hash_hi() + (1 - m.tag() * (1 - m.tag.next())) * zerohash.first, + m.tag() * (1 - m.tag.next()) * m.hash_lo() + (1 - m.tag() * (1 - m.tag.next())) * zerohash.second + } + }; lookup_constraints.push_back(bytecode_range_check); lookup_constraints.push_back(opcode_constraint); + lookup_constraints.push_back(hash_table_constraint); - std::size_t selector_id = bp.get_dynamic_table_definition("zkevm_bytecode")->lookup_table.tag_index; bp.add_gate(selector_id, constraints); bp.add_lookup_gate(selector_id, lookup_constraints); return selector_id; } - template - void generate_copy_constraints( - const plonk_zkevm_bytecode &component, - circuit> &bp, - assignment> - &assignment, - const typename plonk_zkevm_bytecode::input_type - &instance_input, - const std::size_t start_row_index - ) { - // TODO: add copy constraints - } - template typename plonk_zkevm_bytecode::result_type generate_circuit( const plonk_zkevm_bytecode &component, @@ -539,233 +379,17 @@ namespace nil { using component_type = plonk_zkevm_bytecode; using var = typename component_type::var; + auto lookup_tables = component.component_lookup_tables(); + for(auto &[k,v]:lookup_tables){ + if( v == 1 ) + bp.reserve_dynamic_table(k); + else + bp.reserve_table(k); + } // Selector id is already enabled by subcomponent generate_gates(component, bp, assignment, instance_input, bp.get_reserved_indices(), start_row_index); - generate_copy_constraints(component, bp, assignment, instance_input, start_row_index); - - return typename component_type::result_type(component, start_row_index); - } - - template - class bytecode_table_tester; - - template - class bytecode_table_tester, BlueprintFieldType> - : public plonk_component - { - public: - // Named witness columns -- same with bytecode_table - static constexpr std::size_t TAG = 0; - static constexpr std::size_t INDEX = 1; - static constexpr std::size_t VALUE = 2; - static constexpr std::size_t IS_OPCODE = 3; - static constexpr std::size_t HASH_HI = 4; - static constexpr std::size_t HASH_LO = 5; - - using component_type = plonk_component; - - using var = typename component_type::var; - using manifest_type = plonk_component_manifest; - - std::size_t max_bytecode_size; - - class gate_manifest_type : public component_gate_manifest { - public: - std::uint32_t gates_amount() const override { - return bytecode_table_tester::gates_amount + bytecode_table_tester::lookup_gates_amount; - } - }; - - static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_bytecode_size) { - gate_manifest manifest = gate_manifest(gate_manifest_type()); - return manifest; - } - - static manifest_type get_manifest() { - static manifest_type manifest = manifest_type( - std::shared_ptr(new manifest_single_value_param(12)), - false - ); - return manifest; - } - - constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_bytecode_size) { - return max_bytecode_size + 2; - } - - constexpr static const std::size_t gates_amount = 0; - constexpr static const std::size_t lookup_gates_amount = 2; - std::size_t rows_amount = max_bytecode_size + 2; - - struct input_type { - std::vector> bytecodes; // EVM contracts bytecodes - std::vector> bytecode_hashes; // hi, lo parts for keccak. It'll be only one value if we'll use poseidon - std::size_t full_size; - - input_type( - const std::vector> &_bytecodes, - const std::vector> &_bytecode_hashes - ) : bytecodes(_bytecodes), bytecode_hashes(_bytecode_hashes), full_size(0) { - BOOST_ASSERT(_bytecodes.size() == _bytecode_hashes.size()); - for( std::size_t i = 0; i < bytecodes.size(); i++ ){ - full_size += bytecodes[i].size(); - } - } - - std::vector> all_vars() { - std::vector> result; - for( std::size_t i = 0; i < bytecodes.size(); i++ ){ - for( std::size_t j = 0; j < bytecodes[i].size(); j++ ){ - result.push_back(bytecodes[i][j]); - } - } - return result; - } - }; - - struct result_type { - result_type(const bytecode_table_tester &component, std::size_t start_row_index) { - } - - std::vector> all_vars() { - std::vector> result; - return result; - } - }; - - template - explicit bytecode_table_tester(ContainerType witness, std::size_t _max_bytecode_size) : - component_type(witness, {}, {}, get_manifest()), max_bytecode_size(_max_bytecode_size) - {}; - - template - bytecode_table_tester(WitnessContainerType witness, ConstantContainerType constant, - PublicInputContainerType public_input, - std::size_t _max_bytecode_size - ) : component_type(witness, constant, public_input, get_manifest()), max_bytecode_size(_max_bytecode_size) {}; - - bytecode_table_tester( - std::initializer_list witnesses, - std::initializer_list - constants, - std::initializer_list - public_inputs, - std::size_t _max_bytecode_size - ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_bytecode_size(_max_bytecode_size){}; - - std::map component_lookup_tables(){ - std::map lookup_tables; - lookup_tables["zkevm_bytecode"] = 1; // DYNAMIC_TABLE - return lookup_tables; - } - }; - - template - using plonk_bytecode_table_tester = - bytecode_table_tester, BlueprintFieldType>; - - template - typename plonk_bytecode_table_tester::result_type generate_assignments( - const plonk_bytecode_table_tester &component, - assignment> - &assignment, - const typename plonk_bytecode_table_tester::input_type - &instance_input, - const std::uint32_t start_row_index) { - - using bytecode_table_component_type = plonk_zkevm_bytecode_table; - using component_type = plonk_bytecode_table_tester; - using value_type = typename BlueprintFieldType::value_type; - bytecode_table_component_type bytecode_table( - {component.W(6),component.W(7), component.W(8), component.W(9), component.W(10), component.W(11)}, {}, {}, - component.max_bytecode_size - ); - typename bytecode_table_component_type::input_type table_input( - instance_input.bytecodes, - instance_input.bytecode_hashes - ); - - // Row above - generate_assignments(bytecode_table, assignment, table_input, start_row_index + 1); - assignment.witness(bytecode_table.W(bytecode_table_component_type::TAG), start_row_index) = assignment.witness(bytecode_table.W(bytecode_table_component_type::TAG), start_row_index + 5); - assignment.witness(bytecode_table.W(bytecode_table_component_type::INDEX), start_row_index) = assignment.witness(bytecode_table.W(bytecode_table_component_type::INDEX), start_row_index + 5); - assignment.witness(bytecode_table.W(bytecode_table_component_type::VALUE), start_row_index) = assignment.witness(bytecode_table.W(bytecode_table_component_type::VALUE), start_row_index + 5); - assignment.witness(bytecode_table.W(bytecode_table_component_type::IS_OPCODE), start_row_index) = assignment.witness(bytecode_table.W(bytecode_table_component_type::IS_OPCODE), start_row_index + 5); - assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_HI), start_row_index) = assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_HI), start_row_index + 5); - assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_LO), start_row_index) = assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_LO), start_row_index + 5); - - // Row below - assignment.witness(bytecode_table.W(bytecode_table_component_type::TAG), start_row_index + component.max_bytecode_size + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::TAG), start_row_index + 10); - assignment.witness(bytecode_table.W(bytecode_table_component_type::INDEX), start_row_index + component.max_bytecode_size + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::INDEX), start_row_index + 10); - assignment.witness(bytecode_table.W(bytecode_table_component_type::VALUE), start_row_index + component.max_bytecode_size + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::VALUE), start_row_index + 10); - assignment.witness(bytecode_table.W(bytecode_table_component_type::IS_OPCODE), start_row_index + component.max_bytecode_size + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::IS_OPCODE), start_row_index + 10); - assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_HI), start_row_index + component.max_bytecode_size + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_HI), start_row_index + 10); - assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_LO), start_row_index + component.max_bytecode_size + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_LO), start_row_index + 10); - - // Row aside - assignment.witness(component.W(component_type::TAG), start_row_index + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::TAG), start_row_index + 15); - assignment.witness(component.W(component_type::INDEX), start_row_index + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::INDEX), start_row_index + 15); - assignment.witness(component.W(component_type::VALUE), start_row_index + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::VALUE), start_row_index + 15); - assignment.witness(component.W(component_type::IS_OPCODE), start_row_index + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::IS_OPCODE), start_row_index + 15); - assignment.witness(component.W(component_type::HASH_HI), start_row_index + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_HI), start_row_index + 15); - assignment.witness(component.W(component_type::HASH_LO), start_row_index + 1) = assignment.witness(bytecode_table.W(bytecode_table_component_type::HASH_LO), start_row_index + 15); - - return typename component_type::result_type(component, start_row_index); - } - - template - typename plonk_bytecode_table_tester::result_type generate_circuit( - const plonk_bytecode_table_tester &component, - circuit> &bp, - assignment> - &assignment, - const typename plonk_bytecode_table_tester::input_type - &instance_input, - const std::size_t start_row_index - ) { - using bytecode_table_component_type = plonk_zkevm_bytecode_table; - using component_type = plonk_bytecode_table_tester; - using value_type = typename BlueprintFieldType::value_type; - using var = typename component_type::var; - using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; - - bytecode_table_component_type bytecode_table( - {component.W(6),component.W(7), component.W(8), component.W(9), component.W(10), component.W(11)}, {}, {}, - component.max_bytecode_size - ); - typename bytecode_table_component_type::input_type table_input( - instance_input.bytecodes, - instance_input.bytecode_hashes - ); - generate_circuit(bytecode_table, bp, assignment, table_input, start_row_index + 1); - - var tag = var(component.W(component_type::TAG), 0, true); - var index = var(component.W(component_type::INDEX), 0, true); - var value = var(component.W(component_type::VALUE), 0, true); - var is_opcode = var(component.W(component_type::IS_OPCODE), 0, true); - var hash_hi = var(component.W(component_type::HASH_HI), 0, true); - var hash_lo = var(component.W(component_type::HASH_LO), 0, true); - - var tag2 = var(bytecode_table.W(bytecode_table_component_type::TAG), 0, true); - var index2 = var(bytecode_table.W(bytecode_table_component_type::INDEX), 0, true); - var value2 = var(bytecode_table.W(bytecode_table_component_type::VALUE), 0, true); - var is_opcode2 = var(bytecode_table.W(bytecode_table_component_type::IS_OPCODE), 0, true); - var hash_hi2 = var(bytecode_table.W(bytecode_table_component_type::HASH_HI), 0, true); - var hash_lo2 = var(bytecode_table.W(bytecode_table_component_type::HASH_LO), 0, true); - - auto &lookup_tables_indices = bp.get_reserved_indices(); - lookup_constraint_type constraint_above = {lookup_tables_indices.at("zkevm_bytecode"), {tag2, index2, value2, is_opcode2, hash_hi2, hash_lo2}}; - std::size_t selector_above = bp.add_lookup_gate({constraint_above}); - assignment.enable_selector(selector_above, start_row_index, start_row_index); - assignment.enable_selector(selector_above, start_row_index + component.max_bytecode_size + 1, start_row_index + component.max_bytecode_size + 1); - - lookup_constraint_type constraint_aside = {lookup_tables_indices.at("zkevm_bytecode"), {tag, index, value, is_opcode, hash_hi, hash_lo}}; - std::size_t selector_aside = bp.add_lookup_gate({constraint_aside}); - assignment.enable_selector(selector_above, start_row_index+1, start_row_index+1); - - return typename component_type::result_type(component, start_row_index); + return typename component_type::result_type(); } } // namespace components } // namespace blueprint diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/bytecode_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/bytecode_table.hpp new file mode 100644 index 0000000000..62a6949d61 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/bytecode_table.hpp @@ -0,0 +1,260 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + +namespace nil { + namespace blueprint { + namespace components { + class bytecode_input_type { + public: + typedef std::vector, zkevm_word_type>> data_type; + + bytecode_input_type() {} + + void fill_bytecodes(const data_type &_bytecodes ){ + BOOST_ASSERT(bytecodes.size() == 0); + bytecodes = _bytecodes; + } + + const data_type &get_bytecodes() const{ + return bytecodes; + } + + // For real usage. Bytecodes order doesn't matter + std::size_t new_bytecode(std::pair, zkevm_word_type> hashed_pair){ + bytecodes.push_back(hashed_pair); + return bytecodes.size() - 1; + } + + // TODO two versions -- with keccak and poseidon. + // Keccak is more universal because we have poseidon implementation only for pallas curve + std::size_t new_bytecode(std::vector code = {}){ + zkevm_word_type hash = zkevm_keccak_hash(code); + bytecodes.push_back({code, hash}); + return bytecodes.size() - 1; + } + + // For small tests where we define opcode sequences manually + void push_byte(std::size_t code_id, std::uint8_t b){ + BOOST_ASSERT(code_id < bytecodes.size()); + bytecodes[code_id].first.push_back(b); + bytecodes[code_id].second = zkevm_keccak_hash(bytecodes[code_id].first); + } + private: + // TODO: prevent copying + data_type bytecodes; // EVM contracts bytecodes + }; + + // Component for bytecode table + template + class zkevm_bytecode_table; + + template + class zkevm_bytecode_table, BlueprintFieldType> + : public plonk_component + { + public: + using component_type = plonk_component; + using var = typename component_type::var; + using state_var = state_variable; + using manifest_type = plonk_component_manifest; + using value_type = typename BlueprintFieldType::value_type; + + struct bytecode_table_map{ + bytecode_table_map(std::vector witnesses): + tag(witnesses[0]), index(witnesses[1]), value(witnesses[2]), + is_opcode(witnesses[3]), hash_hi(witnesses[4]), hash_lo(witnesses[5] + ) {} + + state_var tag; + state_var index; + state_var value; + state_var is_opcode; + state_var hash_hi; + state_var hash_lo; + }; + + std::size_t max_bytecode_size; + std::size_t max_keccak_blocks; + static const std::size_t witness_amount = 6; // It is the only supported value + + class gate_manifest_type : public component_gate_manifest { + public: + std::uint32_t gates_amount() const override { + return 0; + } + }; + + static gate_manifest get_gate_manifest() { + gate_manifest manifest = gate_manifest(gate_manifest_type()); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param(zkevm_bytecode_table::witness_amount)), + false + ); + return manifest; + } + + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_bytecode_size) { + return max_bytecode_size; + } + + std::size_t rows_amount = max_bytecode_size; + + class input_type:public bytecode_input_type{ + public: + input_type(): bytecode_input_type() {} + std::vector> all_vars() { + std::vector> result; + return result; + } + }; + + struct result_type { + result_type() { + } + + std::vector> all_vars() { + std::vector> result; + return result; + } + }; + + zkevm_bytecode_table( + const typename component_type::witness_container_type &witnesses, + const typename component_type::constant_container_type &constants, + const typename component_type::public_input_container_type &public_inputs, + std::size_t _max_bytecode_size + ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_bytecode_size(_max_bytecode_size), + m(witnesses){}; + + bytecode_table_map m; + }; + + template + using plonk_zkevm_bytecode_table = + zkevm_bytecode_table, BlueprintFieldType>; + + template + typename plonk_zkevm_bytecode_table::result_type generate_assignments( + const plonk_zkevm_bytecode_table &component, + assignment> + &assignment, + const typename plonk_zkevm_bytecode_table::input_type + &instance_input, + const std::uint32_t start_row_index + ) { + using component_type = plonk_zkevm_bytecode_table; + using value_type = typename BlueprintFieldType::value_type; + + auto bytecodes = instance_input.get_bytecodes(); + const auto &m = component.m; + + std::size_t cur = start_row_index; + for(std::size_t i = 0; i < bytecodes.size(); i++){ + value_type hash_hi = w_hi(bytecodes[i].second); + value_type hash_lo = w_lo(bytecodes[i].second); + value_type push_size = 0; + const auto &buffer = bytecodes[i].first; + for(std::size_t j = 0; j < buffer.size(); j++, cur++){ + std::uint8_t byte = buffer[j]; + assignment.witness(m.hash_hi.index, cur) = hash_hi; + assignment.witness(m.hash_lo.index, cur) = hash_lo; + if( j == 0){ + // HEADER + assignment.witness(m.value.index, cur) = buffer.size(); + assignment.witness(m.tag.index, cur) = 0; + assignment.witness(m.index.index, cur) = 0; + assignment.witness(m.is_opcode.index, cur) = 0; + push_size = 0; + cur++; + } + // BYTE + assignment.witness(m.value.index, cur) = byte; + assignment.witness(m.hash_hi.index, cur) = hash_hi; + assignment.witness(m.hash_lo.index, cur) = hash_lo; + assignment.witness(m.tag.index, cur) = 1; + assignment.witness(m.index.index, cur) = j; + if(push_size == 0){ + assignment.witness(m.is_opcode.index, cur) = 1; + if(byte > 0x5f && byte < 0x80) push_size = byte - 0x5f; + } else { + assignment.witness(m.is_opcode.index, cur) = 0; + push_size--; + } + } + } + return typename component_type::result_type(); + } + + template + typename plonk_zkevm_bytecode_table::result_type generate_circuit( + const plonk_zkevm_bytecode_table &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_zkevm_bytecode_table::input_type + &instance_input, + const std::size_t start_row_index + ) { + using component_type = plonk_zkevm_bytecode_table; + + bp.register_dynamic_table("zkevm_bytecode"); + const auto &m = component.m; + + std::size_t selector_index = bp.get_dynamic_lookup_table_selector(); + assignment.enable_selector(selector_index, start_row_index, start_row_index + component.rows_amount - 1); + + crypto3::zk::snark::plonk_lookup_table bytecode_table; + bytecode_table.tag_index = selector_index; + bytecode_table.columns_number = 6;// tag, index, value, length, hash_hi, hash_lo + bytecode_table.lookup_options = {{ + m.tag(), m.index(), m.value(), m.is_opcode(), m.hash_hi(), m.hash_lo() + }}; + bp.define_dynamic_table("zkevm_bytecode", bytecode_table); + return typename component_type::result_type(); + } + } // namespace components + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/copy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/copy.hpp new file mode 100644 index 0000000000..b85e792054 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/copy.hpp @@ -0,0 +1,388 @@ + +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + template + class zkevm_copy; + + template + class zkevm_copy, BlueprintFieldType> + : public plonk_component + { + public: + // Named witness columns + // Named witness columns indices + constexpr static std::size_t IS_FIRST = 0; + constexpr static std::size_t ID_LO = 1; + constexpr static std::size_t ID_HI = 2; + constexpr static std::size_t ADDR = 3; + constexpr static std::size_t SRC_ADDR_END = 4; + constexpr static std::size_t BYTE_LEFT = 5; + constexpr static std::size_t RLC_ACC = 6; // For keccak. Not sure it is necessary + constexpr static std::size_t RW_COUNTER = 7; + constexpr static std::size_t RWC_INC_LEFT = 8; + constexpr static std::size_t TAG = 9; + + // Advice columns + // Selectors for row types. Just for lookup constraint degree decreasing + constexpr static std::size_t IS_MEMORY = 10; + constexpr static std::size_t IS_BYTECODE = 11; + constexpr static std::size_t IS_TX_CALLDATA = 12; + constexpr static std::size_t IS_TX_LOG = 13; + constexpr static std::size_t IS_KECCAK = 14; + constexpr static std::size_t IS_PADDING = 15; + + constexpr static std::size_t IS_LAST = 16; + constexpr static std::size_t Q_STEP = 17; // Maybe throw it to static selectors + constexpr static std::size_t RW_DIFF = 18; + constexpr static std::size_t VALUE = 19; // Byte value + + using component_type = plonk_component; + + using var = typename component_type::var; + using manifest_type = plonk_component_manifest; + + std::size_t max_copy_size; // TODO: Estimate default value. It should have reasonable default value + + class gate_manifest_type : public component_gate_manifest { + public: + std::uint32_t gates_amount() const override { + return zkevm_copy::gates_amount + zkevm_copy::lookup_gates_amount; + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_copy_size= 3000) { + gate_manifest manifest = gate_manifest(gate_manifest_type()); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param(11)), + false + ); + return manifest; + } + + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_copy_size= 3000) { + return max_copy_size; + } + + constexpr static const std::size_t gates_amount = 1; + constexpr static const std::size_t lookup_gates_amount = 0; // Change when dynamic lookups will be implemented + std::size_t rows_amount = get_rows_amount(max_copy_size); + + struct input_type { + const std::vector ©_events; + + input_type( + const std::vector &_copy_events + ) : copy_events(_copy_events) { + } + + std::vector> all_vars() { + std::vector> result; + return result; + } + }; + + struct result_type { + result_type(const zkevm_copy &component, std::size_t start_row_index) { + } + + std::vector> all_vars() { + std::vector> result; + return result; + } + }; + + template + explicit zkevm_copy(ContainerType witness, std::size_t _max_copy_size =1000) : + component_type(witness, {}, {}, get_manifest()), max_copy_size(_max_copy_size) + {}; + + template + zkevm_copy(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, + std::size_t _max_copy_size =1000 + ) : component_type(witness, constant, public_input, get_manifest()), max_copy_size(_max_copy_size) {}; + + zkevm_copy( + std::initializer_list witnesses, + std::initializer_list + constants, + std::initializer_list + public_inputs, + std::size_t _max_copy_size =1000 + ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_copy_size(_max_copy_size){}; + + + std::map component_lookup_tables(){ + std::map lookup_tables; + + return lookup_tables; + } + }; + + template + using plonk_zkevm_copy = + zkevm_copy, BlueprintFieldType>; + + template + typename plonk_zkevm_copy::result_type generate_assignments( + const plonk_zkevm_copy &component, + assignment> + &assignment, + const typename plonk_zkevm_copy::input_type + &instance_input, + const std::uint32_t start_row_index + ) { + using component_type = plonk_zkevm_copy; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + + std::cout << "Generate assignments" << std::endl; + std::cout << "Start row index: " << start_row_index << std::endl; + + std::size_t cur = start_row_index; + + for( std::size_t id = 0; id < instance_input.copy_events.size(); id++){ + auto ©_event = instance_input.copy_events[id]; + std::size_t rw_counter_src = 0; + std::size_t rw_counter_dst = 0; + std::size_t rw_diff_src = 0; + std::size_t rw_diff_dst = 0; + if( copy_event.source_type == MEMORY_COPY || copy_event.source_type == TX_LOG_COPY ){ + rw_diff_src = 1; + rw_counter_src = copy_event.initial_rw_counter; + if( copy_event.destination_type == MEMORY_COPY || copy_event.destination_type == TX_LOG_COPY ) { + rw_counter_dst = copy_event.initial_rw_counter + copy_event.length; + rw_diff_dst = 1; + } + } else if ( copy_event.destination_type == MEMORY_COPY || copy_event.destination_type == TX_LOG_COPY ){ + rw_counter_dst = copy_event.initial_rw_counter; + rw_diff_dst = 1; + } + for( std::size_t i = 0; i < copy_event.bytes.size(); i++, cur+=2 ){ + assignment.witness(component.W(component_type::IS_FIRST), cur) = ((i == 0) ? 1: 0 ); + assignment.witness(component.W(component_type::IS_FIRST), cur+1) = 0; + assignment.witness(component.W(component_type::IS_LAST), cur) = 0; + assignment.witness(component.W(component_type::IS_LAST), cur+1) = ((i == (copy_event.bytes.size() - 1)) ? 1: 0 ); + assignment.witness(component.W(component_type::Q_STEP), cur) = 0; + assignment.witness(component.W(component_type::Q_STEP), cur+1) = 1; + assignment.witness(component.W(component_type::TAG), cur) = copy_event.source_type; + assignment.witness(component.W(component_type::TAG), cur+1) = copy_event.destination_type; + assignment.witness(component.W(component_type::IS_MEMORY), cur) = (copy_event.source_type == MEMORY_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_MEMORY), cur+1) = (copy_event.destination_type == MEMORY_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_BYTECODE), cur) = (copy_event.source_type == BYTECODE_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_BYTECODE), cur+1) = (copy_event.destination_type == BYTECODE_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_TX_CALLDATA), cur) = (copy_event.source_type == TX_CALLDATA_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_TX_CALLDATA), cur+1) = (copy_event.destination_type == TX_CALLDATA_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_TX_LOG), cur) = (copy_event.source_type == TX_LOG_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_TX_LOG), cur+1) = (copy_event.destination_type == TX_LOG_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_KECCAK), cur) = (copy_event.source_type == KECCAK_COPY ? 1 : 0); + assignment.witness(component.W(component_type::IS_KECCAK), cur+1) = (copy_event.destination_type == KECCAK_COPY ? 1 : 0); + assignment.witness(component.W(component_type::VALUE), cur) = assignment.witness(component.W(component_type::VALUE), cur + 1) = copy_event.bytes[i]; +/* if(copy_event.source_type == MEMORY_COPY && copy_event.destination_type == MEMORY_COPY){ + std::cout << "MCOPY implementation" << std::endl; + exit(2); + } else if (copy_event.source_type == MEMORY_COPY) + assignment.witness(component.W(component_type::RW_COUNTER), cur) = copy_event.initial_rw_counter + i; + else if(copy_event.destination_type == MEMORY_COPY) + assignment.witness(component.W(component_type::RW_COUNTER), cur) = copy_event.initial_rw_counter + i;*/ + assignment.witness(component.W(component_type::BYTE_LEFT), cur) = assignment.witness(component.W(component_type::BYTE_LEFT), cur + 1) = copy_event.length - i; + assignment.witness(component.W(component_type::RW_DIFF), cur) = rw_diff_src; + assignment.witness(component.W(component_type::RW_DIFF), cur + 1) = rw_diff_dst; + assignment.witness(component.W(component_type::RW_COUNTER), cur) = rw_counter_src + i * rw_diff_src; + assignment.witness(component.W(component_type::RW_COUNTER), cur + 1) = rw_counter_dst + i * rw_diff_dst; + assignment.witness(component.W(component_type::ID_HI), cur) = w_hi(copy_event.source_id); + assignment.witness(component.W(component_type::ID_LO), cur) = w_lo(copy_event.source_id); + assignment.witness(component.W(component_type::ID_HI), cur + 1) = w_hi(copy_event.destination_id); + assignment.witness(component.W(component_type::ID_LO), cur + 1) = w_lo(copy_event.destination_id); + } + std::cout << std::endl; + } + + //padding + for (; cur < start_row_index + component.rows_amount; cur += 2 ){ + assignment.witness(component.W(component_type::Q_STEP), cur) = 0; + assignment.witness(component.W(component_type::Q_STEP), cur+1) = 1; + assignment.witness(component.W(component_type::TAG), cur) = PADDING_COPY; + assignment.witness(component.W(component_type::TAG), cur+1) = PADDING_COPY; + assignment.witness(component.W(component_type::IS_PADDING), cur) = 1; + assignment.witness(component.W(component_type::IS_PADDING), cur+1) = 1; + } + + return typename component_type::result_type(component, start_row_index); + } + + template + std::size_t generate_gates( + const plonk_zkevm_copy &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_zkevm_copy::input_type + &instance_input, + const typename lookup_library::left_reserved_type &lookup_tables_indices + ) { + using component_type = plonk_zkevm_copy; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + + std::vector constraints; + std::vector constraints2; + std::vector lookup_constraints; + + var is_first = var(component.W(component_type::IS_FIRST), 0, true); + var is_first_prev = var(component.W(component_type::IS_FIRST), -1, true); + var is_last = var(component.W(component_type::IS_LAST), 0, true); + var is_last_prev = var(component.W(component_type::IS_LAST), -1, true); + var is_last_next = var(component.W(component_type::IS_LAST), 1, true); + var q_step = var(component.W(component_type::Q_STEP), 0, true); + var q_step_prev = var(component.W(component_type::Q_STEP), -1, true); + var tag = var(component.W(component_type::TAG), 0, true); + var tag_prev = var(component.W(component_type::TAG), -1, true); + var tag_next = var(component.W(component_type::TAG), +1, true); + var value = var(component.W(component_type::VALUE), 0, true); + var value_prev = var(component.W(component_type::VALUE), -1, true); + var rw_counter = var(component.W(component_type::RW_COUNTER), 0, true); + var rw_counter_prev = var(component.W(component_type::RW_COUNTER), -1, true); + var rw_counter_next = var(component.W(component_type::RW_COUNTER), +1, true); + var byte_left = var(component.W(component_type::BYTE_LEFT), 0, true); + var byte_left_prev = var(component.W(component_type::BYTE_LEFT), -1, true); + var rw_diff = var(component.W(component_type::RW_DIFF), 0, true); + var rw_diff_prev = var(component.W(component_type::RW_DIFF), -1, true); + var id_hi = var(component.W(component_type::ID_HI), 0, true); + var id_lo = var(component.W(component_type::ID_LO), 0, true); + var id_hi_prev = var(component.W(component_type::ID_HI), -1, true); + var id_lo_prev = var(component.W(component_type::ID_LO), -1, true); + var id_hi_next = var(component.W(component_type::ID_HI), 1, true); + var id_lo_next = var(component.W(component_type::ID_LO), 1, true); + var is_memory = var(component.W(component_type::IS_MEMORY), 0, true); + var is_bytecode = var(component.W(component_type::IS_BYTECODE), 0, true); + var is_tx_calldata = var(component.W(component_type::IS_TX_CALLDATA), 0, true); + var is_tx_log = var(component.W(component_type::IS_TX_LOG), 0, true); + var is_keccak = var(component.W(component_type::IS_KECCAK), 0, true); + var is_padding = var(component.W(component_type::IS_PADDING), 0, true); + var is_padding_prev = var(component.W(component_type::IS_PADDING), -1, true); + + // is_first and is_last are dynamic selectors + constraints.push_back(is_first* (1 - is_first)); + constraints.push_back(is_last* (1 - is_last)); + + // q_step is 0 -- for "source" rows, 1 for "destination" rows + constraints.push_back(q_step* (1 - q_step)); + constraints.push_back(is_first * q_step); + constraints.push_back(is_last * (1 - q_step)); + constraints.push_back((tag - PADDING_COPY) * (1 - is_first) * (q_step + q_step_prev - 1)); + + constraints.push_back((tag - MEMORY_COPY) * (tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (tag - TX_LOG_COPY) * (tag - KECCAK_COPY) * (tag - PADDING_COPY)); + constraints.push_back((1 - is_memory) * (tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (tag - TX_LOG_COPY) * (tag - KECCAK_COPY) * (tag - PADDING_COPY)); + constraints.push_back((tag - MEMORY_COPY) * (1 - is_bytecode) * (tag - TX_CALLDATA_COPY) * (tag - TX_LOG_COPY) * (tag - KECCAK_COPY) * (tag - PADDING_COPY)); + constraints.push_back((tag - MEMORY_COPY) * (tag - BYTECODE_COPY) * (1 - is_tx_calldata) * (tag - TX_LOG_COPY) * (tag - KECCAK_COPY) * (tag - PADDING_COPY)); + constraints.push_back((tag - MEMORY_COPY) * (tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (1 - is_tx_log) * (tag - KECCAK_COPY) * (tag - PADDING_COPY)); + constraints.push_back((tag - MEMORY_COPY) * (tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (tag - TX_LOG_COPY) * (1 - is_keccak) * (tag - PADDING_COPY)); + constraints.push_back((tag - MEMORY_COPY) * (tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (tag - TX_LOG_COPY) * (tag - KECCAK_COPY) * (1 - is_padding)); + constraints.push_back((tag - MEMORY_COPY) * is_memory); + constraints.push_back((tag - BYTECODE_COPY) * is_bytecode); + constraints.push_back((tag - TX_CALLDATA_COPY) * is_tx_calldata); + constraints.push_back((tag - TX_LOG_COPY) * is_tx_log); + constraints.push_back((tag - KECCAK_COPY) * is_keccak); + constraints.push_back((tag - PADDING_COPY) * is_padding); + + constraints.push_back((tag - MEMORY_COPY) * (tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (tag - TX_LOG_COPY) * (tag - KECCAK_COPY) * is_first); + constraints.push_back((tag - MEMORY_COPY) * (tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (tag - TX_LOG_COPY) * (tag - KECCAK_COPY) * is_last); + constraints.push_back(q_step * (value - value_prev)); + constraints.push_back(q_step * (byte_left_prev - byte_left)); + constraints.push_back((1 - is_first) * (1 - q_step) * (tag - PADDING_COPY) * (byte_left_prev - byte_left - 1)); + constraints.push_back(is_last * (byte_left - 1)); + constraints.push_back((tag - MEMORY_COPY) * (tag - TX_LOG_COPY) * rw_diff); + constraints.push_back((tag - BYTECODE_COPY) * (tag - TX_CALLDATA_COPY) * (tag - KECCAK_COPY) * (tag - PADDING_COPY) * (1 - rw_diff)); + constraints.push_back((tag - PADDING_COPY) * (1 - is_first) * (1 - is_last) * (rw_counter_next - rw_counter_prev - rw_diff_prev)); + constraints.push_back((1 - is_first) * (1 - is_last) * (id_hi_next - id_hi_prev) * (1 - is_padding)); + constraints.push_back((1 - is_first) * (1 - is_last) * (id_lo_next - id_lo_prev) * (1 - is_padding)); + constraints.push_back(is_first * is_padding * (1 - is_padding_prev) * (1 - is_last_prev)); + + + std::size_t selector_id = bp.add_gate(constraints); + return selector_id; + } + + template + void generate_copy_constraints( + const plonk_zkevm_copy &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_zkevm_copy::input_type + &instance_input, + const std::size_t start_row_index + ) { + // TODO: add copy constraints + } + + template + typename plonk_zkevm_copy::result_type generate_circuit( + const plonk_zkevm_copy &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_zkevm_copy::input_type + &instance_input, + const std::size_t start_row_index + ) { + std::cout << "Generate circuit" << std::endl; + + using component_type = plonk_zkevm_copy; + + std::size_t selector = generate_gates(component, bp, assignment, instance_input, bp.get_reserved_indices()); + + assignment.enable_selector(selector, start_row_index, start_row_index + component.rows_amount - 1); + generate_copy_constraints(component, bp, assignment, instance_input, start_row_index); + + return typename component_type::result_type(component, start_row_index); + } + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/copy_event.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/copy_event.hpp new file mode 100644 index 0000000000..fba8f1a827 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/copy_event.hpp @@ -0,0 +1,742 @@ + +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + constexpr uint8_t MEMORY_COPY = 0; + constexpr uint8_t BYTECODE_COPY = 1; + constexpr uint8_t TX_CALLDATA_COPY = 2; + constexpr uint8_t TX_LOG_COPY = 3; + constexpr uint8_t KECCAK_COPY = 4; + constexpr uint8_t PADDING_COPY = 5; +// constexpr uint8_t RETURN_DATA_COPY = 6; + + struct copy_event{ + // {hash_hi, hash_lo} for keccak, + // {bytecode_hash_hi, bytecode_hash_lo} for bytecode, + // {0, transaction_id} for TX_CALLDATA_COPY, TX_LOG_COPY + // {0, call_id} for MEMORY + + zkevm_word_type source_id; + uint8_t source_type; + std::size_t src_addr; + + zkevm_word_type destination_id; + uint8_t destination_type; + std::size_t dst_addr; + + std::size_t length; + + std::size_t initial_rw_counter; // Optional for memory operations + std::vector bytes; + }; + + copy_event calldatacopy_event( + std::size_t transaction_id, + std::size_t call_id, + std::size_t src_addr, + std::size_t dst_addr, + std::size_t length, + std::size_t initial_rw_counter, + std::vector bytes + ){ + return copy_event({ + transaction_id, + TX_CALLDATA_COPY, + src_addr, + call_id, + MEMORY_COPY, + dst_addr, + length, + initial_rw_counter, + bytes + }); + } + + copy_event calldata_hash_event( + std::size_t transaction_id, + zkevm_word_type hash, + std::size_t src_addr, + std::size_t dst_addr, + std::size_t length, + std::vector bytes + ){ + return copy_event({ + transaction_id, + TX_CALLDATA_COPY, + src_addr, + hash, + KECCAK_COPY, + dst_addr, + length, + 0, + bytes + }); + } + + copy_event keccak_event( + std::size_t call_id, + zkevm_word_type hash, + std::size_t src_addr, + std::size_t dst_addr, + std::size_t length, + std::size_t initial_rw_counter, + std::vector bytes + ){ + return copy_event({ + call_id, + MEMORY_COPY, + src_addr, + hash, + KECCAK_COPY, + dst_addr, + length, + initial_rw_counter, + bytes + }); + } + + copy_event codecopy_event( + std::size_t call_id, + zkevm_word_type bytecode_hash, + std::size_t src_addr, + std::size_t dst_addr, + std::size_t length, + std::size_t initial_rw_counter, + std::vector bytes + ){ + return copy_event({ + bytecode_hash, + BYTECODE_COPY, + src_addr, + call_id, + MEMORY_COPY, + dst_addr, + length, + initial_rw_counter, + bytes + }); + } + + copy_event logx_event( + std::size_t call_id, + std::size_t transaction_id, + std::size_t src_addr, + std::size_t dst_addr, + std::size_t length, + std::size_t initial_rw_counter, + std::vector bytes + ){ + return copy_event({ + call_id, + MEMORY_COPY, + src_addr, + transaction_id, + TX_LOG_COPY, + dst_addr, + length, + initial_rw_counter, + bytes + }); + } + + copy_event mcopy_event( + std::size_t call_id, + std::size_t src_addr, + std::size_t dst_addr, + std::size_t length, + std::size_t initial_rw_counter, + std::vector bytes + ){ + return copy_event({ + call_id, + MEMORY_COPY, + src_addr, + call_id, + MEMORY_COPY, + dst_addr, + length, + initial_rw_counter, + bytes + }); + } + + // TODO: add constructors for + // CALLOP, RETURN, REVERT, RETURNDATACOPY + + // This function is just for testing. It'll be fully rewritten in evm-assigner. + std::size_t copy_events_from_trace( + std::vector &result, + boost::property_tree::ptree const &pt, + std::size_t rows_amount, + std::size_t call_id = 0, + std::size_t transaction_id = 0, + std::size_t initial_rw_counter = 0 + ){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + boost::property_tree::ptree ptrace = pt.get_child("result.structLogs"); + boost::property_tree::ptree pstack; + boost::property_tree::ptree pmemory; + + std::cout << "PT = " << ptrace.size() << std::endl; + + std::vector stack = zkevm_word_vector_from_ptree(ptrace.begin()->second.get_child("stack")); + std::vector memory = byte_vector_from_ptree(ptrace.begin()->second.get_child("memory")); + std::vector memory_next; + std::vector stack_next; + std::map storage = key_value_storage_from_ptree(ptrace.begin()->second.get_child("storage")); + std::map storage_next; + + std::size_t rw_counter = initial_rw_counter; + + for( auto it = ptrace.begin(); it!=ptrace.end(); it++ ){ + auto opcode = it->second.get_child("op").data(); + if(std::distance(it, ptrace.end()) == 1) { + stack_next = {}; + memory_next = {}; + storage_next = storage; + }else{ + stack_next = zkevm_word_vector_from_ptree(std::next(it)->second.get_child("stack")); + memory_next = byte_vector_from_ptree(std::next(it)->second.get_child("memory")); + storage_next = key_value_storage_from_ptree(it->second.get_child("storage")); + } + + if(opcode == "STOP") { + // 0x00 -- no RW operations + } else if(opcode == "ADD") { + // 0x01 + rw_counter += 3; + } else if(opcode == "MUL") { + // 0x02 + rw_counter += 3; + } else if(opcode == "SUB") { + // 0x03 + rw_counter += 3; + } else if(opcode == "DIV") { + // 0x04 + rw_counter += 3; + } else if(opcode == "SDIV") { + // 0x05 + rw_counter += 3; + } else if(opcode == "MOD") { + // 0x06 + rw_counter += 3; + } else if(opcode == "SMOD") { + // 0x07 + rw_counter += 3; + } else if(opcode == "ADDMOD") { + // 0x08 + rw_counter += 4; + } else if(opcode == "MULMOD") { + // 0x09 + rw_counter += 4; + } else if(opcode == "EXP") { + // 0x0a + rw_counter += 3; + } else if(opcode == "SIGEXTEND") { + // 0x0b + rw_counter += 2; + } else if(opcode == "LT") { + // 0x10 + rw_counter += 3; + } else if(opcode == "GT") { + // 0x11 + rw_counter += 3; + } else if(opcode == "SLT") { + // 0x12 + rw_counter += 3; + } else if(opcode == "SGT") { + // 0x13 + rw_counter += 3; + } else if(opcode == "EQ") { + // 0x14 + rw_counter += 3; + } else if(opcode == "ISZERO") { + // 0x15 + rw_counter += 2; + } else if(opcode == "AND") { + // 0x16 + rw_counter += 3; + } else if(opcode == "OR") { + // 0x17 + rw_counter += 3; + } else if(opcode == "XOR") { + // 0x18 + rw_counter += 3; + } else if(opcode == "NOT") { + // 0x19 + rw_counter += 3; + } else if(opcode == "BYTE") { + // 0x1a + rw_counter += 3; + } else if(opcode == "SHL") { + // 0x1b + rw_counter += 3; + } else if(opcode == "SHR") { + // 0x1c + rw_counter += 3; + } else if(opcode == "SAR") { + // 0x1d + rw_counter += 3; + } else if(opcode == "SHA3") { + // 0x20 + std::cout << "KECCAK copy event!!!" << std::endl; + exit(2); + rw_counter += 3; // TODO: add memory read operations + } else if(opcode == "ADDRESS") { + // 0x30 + rw_counter += 1; + } else if(opcode == "BALANCE") { + // 0x31 + rw_counter += 2; + } else if(opcode == "ORIGIN") { + // 0x32 + rw_counter += 1; + } else if(opcode == "CALLER") { + // 0x33 + rw_counter += 1; + } else if(opcode == "CALLVALUE") { + // 0x34 + rw_counter += 1; + } else if(opcode == "CALLDATALOAD") { + // 0x35 + rw_counter += 2; + } else if(opcode == "CALLDATASIZE") { + // 0x36 + rw_counter += 1; + } else if(opcode == "CALLDATACOPY") { + // 0x37 +// exit(2); + std::size_t dst = std::size_t(integral_type(stack[stack.size()- 1])); + std::size_t src = std::size_t(integral_type(stack[stack.size()- 2])); + std::size_t length = std::size_t(integral_type(stack[stack.size() - 3])); + std::cout << "CALLDATACOPY copy event length = " << length << " rw_counter = " << rw_counter << ": "; + std::vector bytes; + for( std::size_t i = 0; i < length; i++){ + bytes.push_back(memory_next[dst+i]); + std::cout << std::hex << std::setw(2) << std::setfill('0') << std::size_t(memory_next[std::size_t(integral_type(dst + i))]) << std::dec; + } + std::cout << std::endl; + result.push_back(calldatacopy_event(transaction_id, call_id, src, dst, length, rw_counter, bytes)); + rw_counter += 3+length; + // TODO: add length read operations to calldata + // TODO: add length write operations to memory + } else if(opcode == "CODESIZE") { + // 0x38 + rw_counter += 1; + } else if(opcode == "CODECOPY") { + // 0x39 + std::cout << "CODECOPY event calldata copy!" << std::endl; + exit(2); + std::size_t length = std::size_t(integral_type(stack[stack.size()-3])); + rw_counter += 3 + length; + // TODO: add length write operations to memory + // Consistency with bytecode table will be checked by bytecode circuit + } else if(opcode == "GASPRICE") { + // 0x3a + rw_counter += 1; + } else if(opcode == "EXTCODESIZE") { + // 0x3b + rw_counter += 1; + } else if(opcode == "EXTCODECOPY") { + // 0x3c + std::cout << "EXDCODECOPY event copy!" << std::endl; + exit(2); + std::size_t length = std::size_t(integral_type(stack[stack.size()-3])); + rw_counter += 4 + length; + // TODO: add length write operations to memory + // Consistency with bytecode table will be checked by bytecode circuit + } else if(opcode == "RETURNDATASIZE") { + // 0x3d + rw_counter += 1; + } else if(opcode == "RETURNDATACOPY") { + // 0x3e + std::cout << "RETURNDATACOPY event copy!" << std::endl; + exit(2); + std::size_t length = std::size_t(integral_type(stack[stack.size()-3])); + rw_counter += 3 + length; + // TODO: add length write operations to memory + // Where will consistency check be done? + } else if(opcode == "EXTCODEHASH") { + // 0x3f + rw_counter += 2; + } else if(opcode == "BLOCKHASH") { + // 0x40 + rw_counter += 1; + } else if(opcode == "COINBASE") { + // 0x41 + rw_counter += 1; + } else if(opcode == "TIMESTAMP") { + // 0x42 + rw_counter += 1; + } else if(opcode == "NUMBER") { + // 0x43 + rw_counter += 1; + } else if(opcode == "DIFFICULTY") { + // 0x44 + rw_counter += 1; + } else if(opcode == "GASLIMIT") { + // 0x45 + rw_counter += 1; + } else if(opcode == "CHAINID") { + // 0x46 + std::cout << "Test me, please!" << std::endl; + rw_counter += 1; + } else if(opcode == "SELFBALANCE") { + // 0x47 + rw_counter += 1; + } else if(opcode == "BASEFEE") { + // 0x48 + rw_counter += 2; + } else if(opcode == "BLOBHASH") { + // 0x49 + rw_counter += 1; + } else if(opcode == "BLOBBASEFEE") { + // 0x4a + rw_counter += 1; + } else if(opcode == "POP") { + // 0x50 + rw_counter += 2; + } else if(opcode == "MLOAD") { + // 0x51 + rw_counter += 34; + } else if(opcode == "MSTORE") { + // 0x52 + rw_counter += 34; + } else if(opcode == "MSTORE8") { + // 0x53 + rw_counter += 3; + } else if(opcode == "SLOAD") { + // 0x54 + rw_counter += 3; + } else if(opcode == "SSTORE") { + // 0x55 + rw_counter += 3; + } else if(opcode == "JUMP") { + // 0x56 + rw_counter += 1; + } else if(opcode == "JUMPI") { + // 0x57 + rw_counter += 2; + } else if(opcode == "PC") { + // 0x58 + rw_counter += 1; + } else if(opcode == "MSIZE") { + // 0x58 + rw_counter += 1; + } else if(opcode == "GAS") { + // 0x59 + rw_counter += 1; + } else if(opcode == "JUMPDEST") { + // 0x5a + } else if(opcode == "TLOAD") { + rw_counter += 2; + } else if(opcode == "TSTORE") { + rw_counter += 2; + } else if(opcode == "MCOPY") { + // 0x5d + std::cout << "MCOPY copy event" << std::endl; + exit(2); + rw_counter += 3; + } else if(opcode == "PUSH0") { + // 0x5f + rw_counter += 1; + } else if(opcode == "PUSH1") { + // 0x60 + rw_counter += 1; + } else if(opcode == "PUSH2") { + // 0x61 + rw_counter += 1; + } else if(opcode == "PUSH3") { + // 0x62 + rw_counter += 1; + } else if(opcode == "PUSH4") { + // 0x63 + rw_counter += 1; + } else if(opcode == "PUSH5") { + // 0x64 + rw_counter += 1; + } else if(opcode == "PUSH6") { + // 0x65 + rw_counter += 1; + } else if(opcode == "PUSH7") { + // 0x66 + rw_counter += 1; + } else if(opcode == "PUSH8") { + // 0x67 + rw_counter += 1; + } else if(opcode == "PUSH9") { + // 0x68 + rw_counter += 1; + } else if(opcode == "PUSH10") { + // 0x69 + rw_counter += 1; + } else if(opcode == "PUSH11") { + // 0x6a + rw_counter += 1; + } else if(opcode == "PUSH12") { + // 0x6b + rw_counter += 1; + } else if(opcode == "PUSH13") { + // 0x6c + rw_counter += 1; + } else if(opcode == "PUSH14") { + // 0x6d + rw_counter += 1; + } else if(opcode == "PUSH15") { + // 0x6e + rw_counter += 1; + } else if(opcode == "PUSH16") { + // 0x6f + rw_counter += 1; + } else if(opcode == "PUSH17") { + // 0x70 + rw_counter += 1; + } else if(opcode == "PUSH18") { + // 0x71 + rw_counter += 1; + } else if(opcode == "PUSH19") { + // 0x72 + rw_counter += 1; + } else if(opcode == "PUSH20") { + // 0x73 + rw_counter += 1; + } else if(opcode == "PUSH21") { + // 0x74 + rw_counter += 1; + } else if(opcode == "PUSH22") { + // 0x75 + rw_counter += 1; + } else if(opcode == "PUSH23") { + // 0x76 + rw_counter += 1; + } else if(opcode == "PUSH24") { + // 0x77 + rw_counter += 1; + } else if(opcode == "PUSH25") { + // 0x78 + rw_counter += 1; + } else if(opcode == "PUSH26") { + // 0x79 + rw_counter += 1; + } else if(opcode == "PUSH27") { + // 0x7a + rw_counter += 1; + } else if(opcode == "PUSH28") { + // 0x7b + rw_counter += 1; + } else if(opcode == "PUSH29") { + // 0x7c + rw_counter += 1; + } else if(opcode == "PUSH30") { + // 0x7d + rw_counter += 1; + } else if(opcode == "PUSH31") { + // 0x7e + rw_counter += 1; + } else if(opcode == "PUSH32") { + // 0x7f + rw_counter += 1; + } else if(opcode == "DUP1") { + // 0x80 + rw_counter += 2; + } else if(opcode == "DUP2") { + // 0x81 + rw_counter += 2; + } else if(opcode == "DUP3") { + // 0x82 + rw_counter += 2; + } else if(opcode == "DUP4") { + // 0x83 + rw_counter += 2; + } else if(opcode == "DUP5") { + // 0x84 + rw_counter += 2; + } else if(opcode == "DUP6") { + // 0x85 + rw_counter += 2; + } else if(opcode == "DUP7") { + // 0x86 + rw_counter += 2; + } else if(opcode == "DUP8") { + // 0x87 + rw_counter += 2; + } else if(opcode == "DUP9") { + // 0x88 + rw_counter += 2; + } else if(opcode == "DUP10") { + // 0x89 + rw_counter += 2; + } else if(opcode == "DUP11") { + // 0x8a + rw_counter += 2; + } else if(opcode == "DUP12") { + // 0x8b + rw_counter += 2; + } else if(opcode == "DUP13") { + // 0x8c + rw_counter += 2; + } else if(opcode == "DUP14") { + // 0x8d + rw_counter += 2; + } else if(opcode == "DUP15") { + // 0x8e + rw_counter += 2; + } else if(opcode == "DUP16") { + // 0x8f + rw_counter += 2; + } else if(opcode == "SWAP1") { + // 0x90 + rw_counter += 4; + } else if(opcode == "SWAP2") { + // 0x91 + rw_counter += 4; + } else if(opcode == "SWAP3") { + // 0x92 + rw_counter += 4; + } else if(opcode == "SWAP4") { + // 0x93 + rw_counter += 4; + } else if(opcode == "SWAP5") { + // 0x94 + rw_counter += 4; + } else if(opcode == "SWAP6") { + // 0x95 + rw_counter += 4; + } else if(opcode == "SWAP7") { + // 0x96 + rw_counter += 4; + } else if(opcode == "SWAP8") { + // 0x97 + rw_counter += 4; + } else if(opcode == "SWAP9") { + // 0x98 + rw_counter += 4; + } else if(opcode == "SWAP10") { + // 0x99 + rw_counter += 4; + } else if(opcode == "SWAP11") { + // 0x9a + rw_counter += 4; + } else if(opcode == "SWAP12") { + // 0x9b + rw_counter += 4; + } else if(opcode == "SWAP13") { + // 0x9c + rw_counter += 4; + } else if(opcode == "SWAP14") { + // 0x9d + rw_counter += 4; + } else if(opcode == "SWAP15") { + // 0x9e + rw_counter += 4; + } else if(opcode == "SWAP16") { + // 0x9f + rw_counter += 4; + } else if(opcode == "LOG0") { + // 0xa0 + std::cout << "LOG0 copy event" << std::endl; + exit(2); + rw_counter += 2; + } else if(opcode == "LOG1") { + // 0xa1 + std::cout << "LOG1 copy event" << std::endl; + exit(2); + rw_counter += 3; + } else if(opcode == "LOG2") { + // 0xa2 + std::cout << "LOG2 copy event" << std::endl; + exit(2); + rw_counter += 4; + } else if(opcode == "LOG3") { + // 0xa3 + std::cout << "LOG3 copy event" << std::endl; + exit(2); + rw_counter += 5; + } else if(opcode == "LOG4") { + // 0xa4 + std::cout << "LOG4 copy event" << std::endl; + exit(2); + rw_counter += 6; + } else if(opcode == "CREATE") { + // 0xf0 + std::cout << "CREATE copy event" << std::endl; + exit(2); + rw_counter += 4; + } else if(opcode == "CALL") { + // 0xf1 + rw_counter += 8; + } else if(opcode == "CALLCODE") { + // 0xf2 + rw_counter += 8; + } else if(opcode == "RETURN") { + // 0xf3 + std::cout << "RETURN copy event" << std::endl; +// exit(2); + rw_counter += 2; + } else if(opcode == "DELEGATECALL") { + // 0xf4 + rw_counter += 7; + } else if(opcode == "CREATE2") { + // 0xf5 + std::cout << "CREATE2 copy event" << std::endl; + exit(2); + rw_counter += 5; + } else if(opcode == "STATICCALL") { + // 0xfa + rw_counter += 7; + } else if(opcode == "REVERT") { + // 0xfd + rw_counter += 2; + } else if(opcode == "SELFDESTRUCT") { + // 0xff + rw_counter += 1; + } else { + std::cout << "Unknown opcode " << std::hex << opcode << std::dec << std::endl; + BOOST_ASSERT(false); + } + + storage = storage_next; + stack = stack_next; + memory = memory_next; + } + return rw_counter; + } + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/state_selector.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/index_selector.hpp similarity index 54% rename from crypto3/libs/blueprint/include/nil/blueprint/zkevm/state_selector.hpp rename to crypto3/libs/blueprint/include/nil/blueprint/zkevm/index_selector.hpp index 7a4462dcf6..a327fa9f83 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/state_selector.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/index_selector.hpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -29,18 +30,19 @@ #include #include #include +#include namespace nil { namespace blueprint { namespace components { // activates a witness column based on an input value - // is used to achive dynamic selector behavior + // is used to achieve dynamic selector behavior // actual implementation template - class state_selector; + class index_selector; template - class state_selector, + class index_selector, BlueprintFieldType> : public plonk_component { @@ -50,31 +52,31 @@ namespace nil { using var = typename component_type::var; using manifest_type = plonk_component_manifest; using constraint_type = crypto3::zk::snark::plonk_constraint; + using state_var = state_variable; std::size_t options_amount; class gate_manifest_type : public component_gate_manifest { private: - std::size_t witness_amount; std::size_t options_amount; public: - gate_manifest_type(std::size_t witness_amount_, std::size_t options_amount_) : - witness_amount(witness_amount_), options_amount(options_amount_) {}; + gate_manifest_type(std::size_t options_amount_) : + options_amount(options_amount_) {}; bool operator<(gate_manifest_type const& other) const { - return witness_amount < other.witness_amount || - (witness_amount == other.witness_amount && options_amount < other.options_amount); + return (options_amount < other.options_amount); } std::uint32_t gates_amount() const override { - return state_selector::gates_amount; + return index_selector::gates_amount; } }; - static gate_manifest get_gate_manifest(std::size_t witness_amount, - std::size_t options_amount) { - gate_manifest manifest = gate_manifest(gate_manifest_type(witness_amount, options_amount)); + static gate_manifest get_gate_manifest( + std::size_t options_amount + ) { + gate_manifest manifest = gate_manifest(gate_manifest_type(options_amount)); return manifest; } @@ -82,188 +84,165 @@ namespace nil { manifest_type manifest = manifest_type( // TODO: make the manifest depend on options_amount // this requires the manifest rework - std::shared_ptr(new manifest_single_value_param((options_amount + 1) / 2 + 2)), + std::shared_ptr(new manifest_single_value_param( + options_amount + )), false ); return manifest; } - constexpr static std::size_t get_rows_amount(std::size_t witness_amount, - std::size_t options_amount) { + constexpr static std::size_t get_rows_amount( + std::size_t options_amount + ) { return 1; } constexpr static const std::size_t gates_amount = 1; - const std::size_t rows_amount = get_rows_amount(this->witness_amount(), options_amount); - const std::string component_name = "state selector component"; + const std::size_t rows_amount = get_rows_amount(options_amount); + const std::string component_name = "index selector component"; struct input_type { - var item_index; + std::size_t index; std::vector> all_vars() { - return {item_index}; + return {}; } }; struct result_type { - result_type(const state_selector &component, std::size_t start_row_index) {} + result_type(const index_selector &component, std::size_t start_row_index) {} std::vector> all_vars() { return {}; } }; template - explicit state_selector(ContainerType witness, std::size_t options_amount_) : + explicit index_selector(ContainerType witness, std::size_t options_amount_) : component_type(witness, {}, {}, get_manifest(options_amount_)), - options_amount(options_amount_) { - - BOOST_ASSERT(this->witness_amount() == (this->options_amount + 1) / 2 + 2); + options_amount(options_amount_){ + BOOST_ASSERT(this->witness_amount() >= options_amount); }; template - state_selector(WitnessContainerType witness, ConstantContainerType constant, - PublicInputContainerType public_input, std::size_t options_amount_) : + index_selector( + WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, std::size_t options_amount_) : component_type(witness, constant, public_input, get_manifest(options_amount_)), - options_amount(options_amount_) { - - BOOST_ASSERT(this->witness_amount() == (this->options_amount + 1) / 2 + 2); + options_amount(options_amount_){ + BOOST_ASSERT(this->witness_amount() >= options_amount); }; - state_selector( + index_selector( std::initializer_list witnesses, std::initializer_list constants, std::initializer_list public_inputs, - std::size_t options_amount_) : + std::size_t options_amount_, bool is_compressed_ = false) : component_type(witnesses, constants, public_inputs, get_manifest(options_amount_)), - options_amount(options_amount_) { - - BOOST_ASSERT(this->witness_amount() == (this->options_amount + 1) / 2 + 2); + options_amount(options_amount_){ + BOOST_ASSERT(this->witness_amount() >= this->options_amount); }; - std::vector> generate_constraints() const { - using constraint_type = crypto3::zk::snark::plonk_constraint; + + // Here we only check that all variables are zeroes and ones, and their sum is 1 + std::vector generate_constraints() const { + std::cout << "Index selector generate_constraints options_amount = " << this->options_amount << std::endl; std::vector constraints; - constraint_type sum_to_one; - constraint_type idx_decompose; - std::size_t idx = 0; - for (std::size_t i = 1; i < this->witness_amount() - 1; i++) { - var curr_var = var(this->W(i), 0, true, var::column_type::witness); - sum_to_one += curr_var; - idx_decompose += idx * curr_var; - idx += 2; + std::size_t option_cells_amount = (this->options_amount + 1)/2, + option_WA = this->witness_amount() - 1; + for (std::size_t i = 0; i < options_amount; i++) { + var curr_var = var(this->W(i),0); constraints.push_back(curr_var * (curr_var - 1)); } - sum_to_one -= 1; - constraints.push_back(sum_to_one); - - var pairing_var = var(this->W(this->witness_amount() - 1), 0, true, var::column_type::witness); - idx_decompose += pairing_var; - idx_decompose -= var(this->W(0), 0, true, var::column_type::witness); - constraints.push_back(idx_decompose); - - constraints.push_back(pairing_var * (pairing_var - 1)); - if (options_amount % 2 != 0) { - var last_pair = var(this->W(this->witness_amount() - 2), 0, true, var::column_type::witness); - constraints.push_back(last_pair * pairing_var); - } - return constraints; } - constraint_type option_constraint(std::size_t option) const { - BOOST_ASSERT(option < options_amount); - var option_var = var(this->W(option / 2 + 1), 0, true, var::column_type::witness), - parity_var = var(this->W(this->witness_amount() - 1), 0, true, var::column_type::witness); - if (option % 2 == 0) { - return option_var * (parity_var - 1); - } else { - return option_var * parity_var; + // Allows conveniently connect sum_constraints from different areas; + constraint_type sum_constraint(std::size_t rotation = 0){ + constraint_type sum_to_one; + for (std::size_t i = 0; i < options_amount; i++) { + var curr_var = var(this->W(i), rotation); + sum_to_one += curr_var; + } + return sum_to_one; + } + + constraint_type index_constraint(std::size_t rotation = 0){ + constraint_type compose_constraint; + for (std::size_t i = 0; i < options_amount; i++){ + var curr_var = var(this->W(i),rotation); + compose_constraint += i * curr_var; } + return compose_constraint; } - var option_variable(std::int32_t offset = 0) const { - return var(this->W(0), offset, true, var::column_type::witness); + state_var index(std::size_t i){ + return state_var(this->W(i)); } }; template - using plonk_state_selector = - state_selector, + using plonk_index_selector = + index_selector, BlueprintFieldType>; template - typename plonk_state_selector::result_type generate_assignments( - const plonk_state_selector &component, + typename plonk_index_selector::result_type generate_assignments( + const plonk_index_selector &component, assignment> &assignment, - const typename plonk_state_selector::input_type + const typename plonk_index_selector::input_type &instance_input, const std::uint32_t start_row_index) { - using component_type = plonk_state_selector; + using component_type = plonk_index_selector; using value_type = typename BlueprintFieldType::value_type; using integral_type = typename BlueprintFieldType::integral_type; - value_type index = var_value(assignment, instance_input.item_index); + std::size_t index = instance_input.index; + //if( index >= component.options_amount ) std::cout << index << ">=" << component.options_amount << std::endl; BOOST_ASSERT(index < component.options_amount); // calculating this is somehow very unintuitive - const std::size_t pair_index = std::size_t(integral_type(index.data >> 1)); - const integral_type parity = integral_type(index.data & value_type(1).data); - assignment.witness(component.W(0), start_row_index) = index; - for (std::size_t i = 1; i < component.witness_amount() - 1; i++) { + std::size_t option_WA = component.witness_amount() - 1; + + const integral_type parity = index & 1; // index%2 + + for (std::size_t i = 1; i < component.witness_amount() - 1; i++) { // zerofy all assignment.witness(component.W(i), start_row_index) = 0; } - assignment.witness(component.W(pair_index + 1), start_row_index) = 1; - assignment.witness(component.W(component.witness_amount() - 1), start_row_index) = value_type(parity); + assignment.witness(component.W(index), start_row_index) = 1; return typename component_type::result_type(component, start_row_index); } template std::size_t generate_gates( - const plonk_state_selector &component, + const plonk_index_selector &component, circuit> &bp, assignment> &assignment, - const typename plonk_state_selector::input_type + const typename plonk_index_selector::input_type &instance_input) { return bp.add_gate(component.generate_constraints()); } template - void generate_copy_constraints( - const plonk_state_selector &component, - circuit> &bp, - assignment> - &assignment, - const typename plonk_state_selector::input_type - &instance_input, - const std::size_t start_row_index) { - - using component_type = plonk_state_selector; - using var = typename component_type::var; - - bp.add_copy_constraint( - {instance_input.item_index, - var(component.W(0), start_row_index, false, var::column_type::witness)}); - } - - template - typename plonk_state_selector::result_type generate_circuit( - const plonk_state_selector &component, + typename plonk_index_selector::result_type generate_circuit( + const plonk_index_selector &component, circuit> &bp, assignment> &assignment, - const typename plonk_state_selector::input_type + const typename plonk_index_selector::input_type &instance_input, const std::size_t start_row_index) { - using component_type = plonk_state_selector; + using component_type = plonk_index_selector; + using state_var = state_variable; std::size_t selector_index = generate_gates(component, bp, assignment, instance_input); assignment.enable_selector(selector_index, start_row_index, start_row_index); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/memory.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/memory.hpp new file mode 100644 index 0000000000..e9b368eec6 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/memory.hpp @@ -0,0 +1,1299 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, ffree of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include + +namespace nil { + namespace blueprint { + constexpr std::uint8_t START_OP = 0; + constexpr std::uint8_t STACK_OP = 1; + constexpr std::uint8_t MEMORY_OP = 2; + constexpr std::uint8_t STORAGE_OP = 3; + constexpr std::uint8_t TRANSIENT_STORAGE_OP = 4; + constexpr std::uint8_t CALL_CONTEXT_OP = 5; + constexpr std::uint8_t ACCOUNT_OP = 6; + constexpr std::uint8_t TX_REFUND_OP = 7; + constexpr std::uint8_t TX_ACCESS_LIST_ACCOUNT_OP = 8; + constexpr std::uint8_t TX_ACCESS_LIST_ACCOUNT_STORAGE_OP = 9; + constexpr std::uint8_t TX_LOG_OP = 10; + constexpr std::uint8_t TX_RECEIPT_OP = 11; + constexpr std::uint8_t PADDING_OP = 12; + constexpr std::uint8_t rw_options_amount = 13; + + struct rw_operation{ + std::uint8_t op; // described above + std::size_t id; // call_id for stack, memory + zkevm_word_type address; // 10 bit for stack, 160 bit for + std::uint8_t field; // Not used for stack, memory, storage + zkevm_word_type storage_key; // 256-bit, not used for stack, memory + std::size_t rw_id; // 32-bit + bool is_write; // 1 if it's write operation + zkevm_word_type value; // It's full 256 words for storage and stack, but it's only byte for memory. + zkevm_word_type value_prev; + // zkevm_word_type root_before + // zkevm_word_type root_after + + bool operator< (const rw_operation &other) const { + if( op != other.op ) return op < other.op; + if( address != other.address ) return address < other.address; + if( field != other.field ) return field < other.field; + if( storage_key != other.storage_key ) return storage_key < other.storage_key; + if( rw_id != other.rw_id) return rw_id < other.rw_id; + return false; + } + }; + + // For testing purposes + std::ostream& operator<<(std::ostream& os, const rw_operation& obj){ + if(obj.op == START_OP ) os << "START : "; + if(obj.op == STACK_OP ) os << "STACK : "; + if(obj.op == MEMORY_OP ) os << "MEMORY : "; + if(obj.op == STORAGE_OP ) os << "STORAGE : "; + if(obj.op == TRANSIENT_STORAGE_OP ) os << "TRANSIENT_STORAGE : "; + if(obj.op == CALL_CONTEXT_OP ) os << "CALL_CONTEXT_OP : "; + if(obj.op == ACCOUNT_OP ) os << "ACCOUNT_OP : "; + if(obj.op == TX_REFUND_OP ) os << "TX_REFUND_OP : "; + if(obj.op == TX_ACCESS_LIST_ACCOUNT_OP ) os << "TX_ACCESS_LIST_ACCOUNT_OP : "; + if(obj.op == TX_ACCESS_LIST_ACCOUNT_STORAGE_OP ) os << "TX_ACCESS_LIST_ACCOUNT_STORAGE_OP : "; + if(obj.op == TX_LOG_OP ) os << "TX_LOG_OP : "; + if(obj.op == TX_RECEIPT_OP ) os << "TX_RECEIPT_OP : "; + if(obj.op == PADDING_OP ) os << "PADDING_OP : "; + os << obj.rw_id << ", addr =" << std::hex << obj.address << std::dec; + if(obj.op == STORAGE_OP || obj.op == TRANSIENT_STORAGE_OP) + os << " storage_key = " << obj.storage_key; + if(obj.is_write) os << " W "; else os << " R "; + os << "[" << std::hex << obj.value_prev << std::dec <<"] => "; + os << "[" << std::hex << obj.value << std::dec <<"]"; + return os; + } + + rw_operation start_operation(){ + return rw_operation({START_OP, 0, 0, 0, 0, 0, 0, 0}); + } + + rw_operation stack_operation(std::size_t id, uint16_t address, std::size_t rw_id, bool is_write, zkevm_word_type value){ + BOOST_ASSERT(id < ( 1 << 28)); // Maximum calls amount(?) + BOOST_ASSERT(address < 1024); + return rw_operation({STACK_OP, id, address, 0, 0, rw_id, is_write, value, 0}); + } + + rw_operation memory_operation(std::size_t id, zkevm_word_type address, std::size_t rw_id, bool is_write, zkevm_word_type value){ + BOOST_ASSERT(id < ( 1 << 28)); // Maximum calls amount(?) + return rw_operation({MEMORY_OP, id, address, 0, 0, rw_id, is_write, value, 0}); + } + + rw_operation storage_operation( + std::size_t id, + zkevm_word_type address, + zkevm_word_type storage_key, + std::size_t rw_id, + bool is_write, + zkevm_word_type value, + zkevm_word_type value_prev + ){ + return rw_operation({STORAGE_OP, id, address, 0, storage_key, rw_id, is_write, value, value_prev}); + } + + rw_operation padding_operation(){ + return rw_operation({PADDING_OP, 0, 0, 0, 0, 0, 0, 0}); + } + + template + class rw_trace{ + public: + using val = typename BlueprintFieldType::value_type; + protected: + std::vector rw_ops; + std::size_t call_id; + + void append_opcode( + std::string opcode, + const std::vector &stack, // Stack state before operation + const std::vector &stack_next, // stack state after operation. We need it for correct PUSH and correct SLOAD + const std::vector &memory , // Memory state before operation in bytes format + const std::vector &memory_next , // Memory state before operation in bytes format + const std::map &storage,// Storage state before operation + const std::map &storage_next// Storage state before operation + ){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + // Opcode is not presented in RW lookup table. We just take it from json + // // std::cout << opcode << std::endl; + if(opcode == "STOP") { + // 0x00 -- no RW operations + } else if(opcode == "ADD") { + // 0x01 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "MUL") { + // 0x02 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SUB") { + // 0x03 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DIV") { + // 0x04 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SDIV") { + // 0x05 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "MOD") { + // 0x06 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SMOD") { + // 0x07 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "ADDMOD") { + // 0x08 + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "MULMOD") { + // 0x09 + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "EXP") { + // 0x0a + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SIGEXTEND") { + // 0x0b + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "LT") { + // 0x10 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "GT") { + // 0x11 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SLT") { + // 0x12 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SGT") { + // 0x13 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "EQ") { + // 0x14 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "ISZERO") { + // 0x15 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "AND") { + // 0x16 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "OR") { + // 0x17 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "XOR") { + // 0x18 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "NOT") { + // 0x19 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "BYTE") { + // 0x1a + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SHL") { + // 0x1b + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SHR") { + // 0x1c + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SAR") { + // 0x1d + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SHA3") { + // 0x20 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + auto length = stack[stack.size()-2]; + // TODO: add Length memory READ operations + auto offset = stack[stack.size()-1]; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "ADDRESS") { + // 0x30 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "BALANCE") { + // 0x31 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add read operations from account + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "ORIGIN") { + // 0x32 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CALLER") { + // 0x33 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CALLVALUE") { + // 0x34 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CALLDATALOAD") { + // 0x35 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add 32 read operations to calldata + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CALLDATASIZE") { + // 0x36 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CALLDATACOPY") { + // 0x37 + // std::cout << "Test me, please!" << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + std::size_t length = std::size_t(integral_type(stack[stack.size()-3])); + std::size_t dest = std::size_t(integral_type(stack[stack.size()-1])); + // std::cout << "Length = " << length << std::endl; + // std::cout << "Memory_size " << memory.size() << "=>" << memory_next.size() << std::endl; + for( std::size_t i = 0; i < length; i++){ + rw_ops.push_back(memory_operation(call_id, dest+i, rw_ops.size(), true, memory_next[dest+i])); + // std::cout << "\t" << rw_ops[rw_ops.size() - 1] << std::endl; + } + // TODO: add length read operations to calldata + // TODO: add length write operations to memory + } else if(opcode == "CODESIZE") { + // 0x38 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CODECOPY") { + // 0x39 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add length write operations to memory + // Consistency with bytecode table will be checked by bytecode circuit + } else if(opcode == "GASPRICE") { + // 0x3a + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "EXTCODESIZE") { + // 0x3b + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "EXTCODECOPY") { + // 0x3c + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add length write operations to memory + // Consistency with bytecode table will be checked by bytecode circuit + } else if(opcode == "RETURNDATASIZE") { + // 0x3d + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "RETURNDATACOPY") { + // 0x3e + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add length write operations to memory + // Where will consistency check be done? + } else if(opcode == "EXTCODEHASH") { + // 0x3f + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "BLOCKHASH") { + // 0x40 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "COINBASE") { + // 0x41 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "TIMESTAMP") { + // 0x42 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "NUMBER") { + // 0x43 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DIFFICULTY") { + // 0x44 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "GASLIMIT") { + // 0x45 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CHAINID") { + // 0x46 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SELFBALANCE") { + // 0x47 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "BASEFEE") { + // 0x48 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "BLOBHASH") { + // 0x49 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "BLOBBASEFEE") { + // 0x4a + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "POP") { + // 0x50 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "MLOAD") { + // 0x51 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + zkevm_word_type addr = stack[stack.size() - 1]; + BOOST_ASSERT_MSG(addr < std::numeric_limits::max(), "Cannot process so large memory address"); + // std::cout << "\t\t Address = 0x" << std::hex << addr << std::dec << " memory size " << memory.size() << std::endl; + for( std::size_t i = 0; i < 32; i++){ + rw_ops.push_back(memory_operation(call_id, addr+i, rw_ops.size(), false, addr+i < memory.size() ? memory[std::size_t(integral_type(addr+i))]: 0)); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "MSTORE") { + // 0x52 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + zkevm_word_type addr = stack[stack.size() - 1]; + BOOST_ASSERT_MSG(addr < std::numeric_limits::max(), "Cannot process so large memory address"); + // std::cout << "\t\t Address = 0x" << std::hex << addr << std::dec << " memory size " << memory.size() << std::endl; + auto bytes = w_to_8(stack[stack.size() - 2]); + for( std::size_t i = 0; i < 32; i++){ + rw_ops.push_back(memory_operation(call_id, addr + i, rw_ops.size(), true, bytes[i])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } + } else if(opcode == "MSTORE8") { + // 0x53 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + zkevm_word_type addr = stack[stack.size() - 1]; + BOOST_ASSERT_MSG(addr < std::numeric_limits::max(), "Cannot process so large memory address"); + // std::cout << "\t\t Address = 0x" << std::hex << addr << std::dec << " memory size " << memory.size() << std::endl; + auto bytes = w_to_8(stack[stack.size() - 2]); + rw_ops.push_back(memory_operation(call_id, addr, rw_ops.size(), true, bytes[31])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SLOAD") { + // 0x54 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(storage_operation( + call_id, + 0, + stack[stack.size()-1], + rw_ops.size(), + false, + storage_next.at(stack[stack.size()-1]), + storage_next.at(stack[stack.size()-1]) + )); // Second parameter should be transaction_id) + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SSTORE") { + // 0x55 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + + rw_ops.push_back(storage_operation( + call_id, + 0, + stack[stack.size()-1], + rw_ops.size(), + true, + stack[stack.size()-2], + // TODO: Remove this zero value in value_before by real previous storage value. + // Overwise lookup in MPT table won't be correct + (storage.find(stack[stack.size()-1]) == storage.end())? 0: storage.at(stack[stack.size()-1])) + ); // Second parameter should be transaction_id + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "JUMP") { + // 0x56 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "JUMPI") { + // 0x57 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PC") { + // 0x58 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "MSIZE") { + // 0x58 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "GAS") { + // 0x59 + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "JUMPDEST") { + // 0x5a + } else if(opcode == "TLOAD") { + // 0x5b + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add trasient storage operations + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "TSTORE") { + // 0x5c + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add trasient storage write operations + } else if(opcode == "MCOPY") { + // 0x5d + // std::cout << "Test me, please!" << std::endl; + exit(2); + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + // TODO: add length read operations to memory + // TODO: add length write operations to memory + // Consistensy will be checked by copy circuit + } else if(opcode == "PUSH0") { + // 0x5f + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH1") { + // 0x60 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH2") { + // 0x61 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH3") { + // 0x62 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH4") { + // 0x63 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH5") { + // 0x64 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH6") { + // 0x65 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH7") { + // 0x66 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH8") { + // 0x67 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH9") { + // 0x68 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH10") { + // 0x69 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH11") { + // 0x6a + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH12") { + // 0x6b + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH13") { + // 0x6c + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH14") { + // 0x6d + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH15") { + // 0x6e + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH16") { + // 0x6f + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH17") { + // 0x70 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH18") { + // 0x71 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH19") { + // 0x72 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH20") { + // 0x73 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH21") { + // 0x74 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH22") { + // 0x75 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH23") { + // 0x76 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH24") { + // 0x77 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH25") { + // 0x78 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH26") { + // 0x79 + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH27") { + // 0x7a + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH28") { + // 0x7b + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH29") { + // 0x7c + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH30") { + // 0x7d + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH31") { + // 0x7e + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "PUSH32") { + // 0x7f + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP1") { + // 0x80 + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP2") { + // 0x81 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP3") { + // 0x82 + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP4") { + // 0x83 + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP5") { + // 0x84 + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP6") { + // 0x85 + rw_ops.push_back(stack_operation(call_id, stack.size()-6, rw_ops.size(), false, stack[stack.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP7") { + // 0x86 + rw_ops.push_back(stack_operation(call_id, stack.size()-7, rw_ops.size(), false, stack[stack.size()-7])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP8") { + // 0x87 + rw_ops.push_back(stack_operation(call_id, stack.size()-8, rw_ops.size(), false, stack[stack.size()-8])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP9") { + // 0x88 + rw_ops.push_back(stack_operation(call_id, stack.size()-9, rw_ops.size(), false, stack[stack.size()-9])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP10") { + // 0x89 + rw_ops.push_back(stack_operation(call_id, stack.size()-10, rw_ops.size(), false, stack[stack.size()-10])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP11") { + // 0x8a + rw_ops.push_back(stack_operation(call_id, stack.size()-11, rw_ops.size(), false, stack[stack.size()-11])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP12") { + // 0x8b + rw_ops.push_back(stack_operation(call_id, stack.size()-12, rw_ops.size(), false, stack[stack.size()-12])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP13") { + // 0x8c + rw_ops.push_back(stack_operation(call_id, stack.size()-13, rw_ops.size(), false, stack[stack.size()-13])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP14") { + // 0x8d + rw_ops.push_back(stack_operation(call_id, stack.size()-14, rw_ops.size(), false, stack[stack.size()-14])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP15") { + // 0x8e + rw_ops.push_back(stack_operation(call_id, stack.size()-15, rw_ops.size(), false, stack[stack.size()-15])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DUP16") { + // 0x8f + rw_ops.push_back(stack_operation(call_id, stack.size()-16, rw_ops.size(), false, stack[stack.size()-16])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP1") { + // 0x90 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-2, rw_ops.size(), true, stack_next[stack_next.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP2") { + // 0x91 + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-3, rw_ops.size(), true, stack_next[stack_next.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP3") { + // 0x92 + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-4, rw_ops.size(), true, stack_next[stack_next.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP4") { + // 0x93 + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-5, rw_ops.size(), true, stack_next[stack_next.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP5") { + // 0x94 + rw_ops.push_back(stack_operation(call_id, stack.size()-6, rw_ops.size(), false, stack[stack.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-6, rw_ops.size(), true, stack_next[stack_next.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP6") { + // 0x95 + rw_ops.push_back(stack_operation(call_id, stack.size()-7, rw_ops.size(), false, stack[stack.size()-7])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-7, rw_ops.size(), true, stack_next[stack_next.size()-7])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP7") { + // 0x96 + rw_ops.push_back(stack_operation(call_id, stack.size()-8, rw_ops.size(), false, stack[stack.size()-8])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-8, rw_ops.size(), true, stack_next[stack_next.size()-8])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP8") { + // 0x97 + rw_ops.push_back(stack_operation(call_id, stack.size()-9, rw_ops.size(), false, stack[stack.size()-9])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-9, rw_ops.size(), true, stack_next[stack_next.size()-9])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP9") { + // 0x98 + rw_ops.push_back(stack_operation(call_id, stack.size()-10, rw_ops.size(), false, stack[stack.size()-10])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-10, rw_ops.size(), true, stack_next[stack_next.size()-10])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP10") { + // 0x99 + rw_ops.push_back(stack_operation(call_id, stack.size()-11, rw_ops.size(), false, stack[stack.size()-11])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-11, rw_ops.size(), true, stack_next[stack_next.size()-11])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP11") { + // 0x9a + rw_ops.push_back(stack_operation(call_id, stack.size()-12, rw_ops.size(), false, stack[stack.size()-12])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-12, rw_ops.size(), true, stack_next[stack_next.size()-12])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP12") { + // 0x9b + rw_ops.push_back(stack_operation(call_id, stack.size()-13, rw_ops.size(), false, stack[stack.size()-13])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-13, rw_ops.size(), true, stack_next[stack_next.size()-13])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP13") { + // 0x9c + rw_ops.push_back(stack_operation(call_id, stack.size()-14, rw_ops.size(), false, stack[stack.size()-14])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-14, rw_ops.size(), true, stack_next[stack_next.size()-14])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP14") { + // 0x9d + rw_ops.push_back(stack_operation(call_id, stack.size()-15, rw_ops.size(), false, stack[stack.size()-15])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-15, rw_ops.size(), true, stack_next[stack_next.size()-15])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP15") { + // 0x9e + rw_ops.push_back(stack_operation(call_id, stack.size()-16, rw_ops.size(), false, stack[stack.size()-16])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-16, rw_ops.size(), true, stack_next[stack_next.size()-16])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SWAP16") { + // 0x9f + rw_ops.push_back(stack_operation(call_id, stack.size()-17, rw_ops.size(), false, stack[stack.size()-17])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-17, rw_ops.size(), true, stack_next[stack_next.size()-17])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "LOG0") { + // 0xa0 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "LOG1") { + // 0xa1 + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "LOG2") { + // 0xa2 + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "LOG3") { + // 0xa3 + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "LOG4") { + // 0xa4 + rw_ops.push_back(stack_operation(call_id, stack.size()-6, rw_ops.size(), false, stack[stack.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CREATE") { + // 0xf0 + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CALL") { + // 0xf1 + rw_ops.push_back(stack_operation(call_id, stack.size()-7, rw_ops.size(), false, stack[stack.size()-7])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-6, rw_ops.size(), false, stack[stack.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CALLCODE") { + // 0xf2 + rw_ops.push_back(stack_operation(call_id, stack.size()-7, rw_ops.size(), false, stack[stack.size()-7])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-6, rw_ops.size(), false, stack[stack.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "RETURN") { + // 0xf3 + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "DELEGATECALL") { + // 0xf4 + rw_ops.push_back(stack_operation(call_id, stack.size()-6, rw_ops.size(), false, stack[stack.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "CREATE2") { + // 0xf5 + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "STATICCALL") { + // 0xfa + rw_ops.push_back(stack_operation(call_id, stack.size()-6, rw_ops.size(), false, stack[stack.size()-6])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-5, rw_ops.size(), false, stack[stack.size()-5])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-4, rw_ops.size(), false, stack[stack.size()-4])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-3, rw_ops.size(), false, stack[stack.size()-3])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack_next.size()-1, rw_ops.size(), true, stack_next[stack_next.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "REVERT") { + // 0xfd + rw_ops.push_back(stack_operation(call_id, stack.size()-2, rw_ops.size(), false, stack[stack.size()-2])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else if(opcode == "SELFDESTRUCT") { + // 0xff + rw_ops.push_back(stack_operation(call_id, stack.size()-1, rw_ops.size(), false, stack[stack.size()-1])); + // std::cout << "\t" << rw_ops[rw_ops.size()-1] << std::endl; + } else { + // std::cout << "Unknown opcode " << std::hex << opcode << std::dec << std::endl; + BOOST_ASSERT(false); + } + } + public: + rw_trace(boost::property_tree::ptree const &pt, std::size_t rows_amount, std::size_t _call_id = 0){ + call_id = _call_id; + + boost::property_tree::ptree ptrace = pt.get_child("result.structLogs"); + // std::cout << "PT = " << ptrace.size() << std::endl; + + std::vector stack = zkevm_word_vector_from_ptree(ptrace.begin()->second.get_child("stack")); + std::vector memory = byte_vector_from_ptree(ptrace.begin()->second.get_child("memory")); + std::vector memory_next; + std::vector stack_next; + std::map storage = key_value_storage_from_ptree(ptrace.begin()->second.get_child("storage")); + std::map storage_next; + + rw_ops.push_back(start_operation()); + for( auto it = ptrace.begin(); it!=ptrace.end(); it++ ){ + if(std::distance(it, ptrace.end()) == 1) + append_opcode(it->second.get_child("op").data(), stack, {}, memory, {}, storage, storage); + else{ + stack_next = zkevm_word_vector_from_ptree(std::next(it)->second.get_child("stack")); + memory_next = byte_vector_from_ptree(std::next(it)->second.get_child("memory")); + storage_next = key_value_storage_from_ptree(it->second.get_child("storage")); + append_opcode(it->second.get_child("op").data(), stack, stack_next, memory, memory_next, storage, storage_next); + } + storage = storage_next; + stack = stack_next; + memory = memory_next; + } + std::sort(rw_ops.begin(), rw_ops.end(), [](rw_operation a, rw_operation b){ + return a < b; + }); + + std::cout << "rw_ops size before padding = " << rw_ops.size() << std::endl; + while( rw_ops.size() < rows_amount ) rw_ops.push_back(padding_operation()); + } + const std::vector &get_rw_ops() const{ + return rw_ops; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/add_sub.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/add_sub.hpp index cbf2bfe91f..efdb03c358 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/add_sub.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/add_sub.hpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -32,6 +33,8 @@ namespace nil { namespace blueprint { + template + class zkevm_operation; template class zkevm_add_sub_operation : public zkevm_operation { @@ -39,12 +42,17 @@ namespace nil { using op_type = zkevm_operation; using gate_class = typename op_type::gate_class; using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; using assignment_type = typename op_type::assignment_type; using value_type = typename BlueprintFieldType::value_type; using var = typename op_type::var; - zkevm_add_sub_operation(bool _is_add) : is_add(_is_add) {} + zkevm_add_sub_operation(bool _is_add) : is_add(_is_add) { + this->stack_input = 2; + this->stack_output = 1; + } bool is_add; @@ -53,14 +61,22 @@ namespace nil { constexpr static const value_type two_32 = 4294967296; constexpr static const value_type two_48 = 281474976710656; - std::map> generate_gates(zkevm_circuit_type &zkevm_circuit) override { - std::vector constraints; + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + constexpr const std::size_t chunk_amount = 16; const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { return zkevm_operation::var_gen(witness_cols, i, offset); }; - constraint_type position = zkevm_circuit.get_opcode_row_constraint(1, this->rows_amount()); + + std::size_t position = 1; + auto constraint_gen = [&constraints, &position] (var a_0, var a_1, var a_2, var b_0, var b_1, var b_2, @@ -68,24 +84,21 @@ namespace nil { var last_carry, var result_carry, bool first_constraint = false) { if (first_constraint) { // no last carry for first constraint - constraints.push_back( - position * ( + constraints.push_back({position, ( (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48)); + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48)}); } else { - constraints.push_back( - position * ( + constraints.push_back({ position, ( last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48)); + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48)}); } - constraints.push_back(position * result_carry * (result_carry - 1)); + constraints.push_back({position, result_carry * (result_carry - 1)}); }; auto last_constraint_gen = [&constraints, &position] (var a_0, var b_0, var r_0, var last_carry, var result_carry) { - constraints.push_back( - position * (last_carry + a_0 + b_0 - r_0 - result_carry * two_16)); - constraints.push_back(position * result_carry * (result_carry - 1)); + constraints.push_back({position, (last_carry + a_0 + b_0 - r_0 - result_carry * two_16)}); + constraints.push_back({position, result_carry * (result_carry - 1)}); }; std::vector a_chunks; std::vector b_chunks; @@ -113,14 +126,13 @@ namespace nil { last_constraint_gen(a_chunks[3 * (carry_amount - 1)], b_chunks[3 * (carry_amount - 1)], r_chunks[3 * (carry_amount - 1)], r_carry[carry_amount - 2], r_carry[carry_amount - 1]); - return {{gate_class::MIDDLE_OP, constraints}}; + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; } - void generate_assignments(zkevm_circuit_type &zkevm_circuit, zkevm_machine_interface &machine) override { - zkevm_stack &stack = machine.stack; + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { using word_type = typename zkevm_stack::word_type; - word_type a = stack.pop(); - word_type b = stack.pop(); + word_type a = machine.stack_top(); + word_type b = machine.stack_top(1); word_type result = is_add ? a + b : a - b; // TODO: after memory logic would become more complicated here if (!is_add) { @@ -129,9 +141,9 @@ namespace nil { const std::vector a_chunks = zkevm_word_to_field_element(a); const std::vector b_chunks = zkevm_word_to_field_element(b); const std::vector r_chunks = zkevm_word_to_field_element(result); - const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); - assignment_type &assignment = zkevm_circuit.get_assignment(); - const std::size_t curr_row = zkevm_circuit.get_current_row(); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); // TODO: replace with memory access, which would also do range checks! for (std::size_t i = 0; i < a_chunks.size(); i++) { assignment.witness(witness_cols[i], curr_row) = a_chunks[i]; @@ -152,13 +164,6 @@ namespace nil { } carry = (carry + a_chunks[3 * (carry_amount - 1)] + b_chunks[3 * (carry_amount - 1)]) >= two_16; assignment.witness(witness_cols[a_chunks.size() + carry_amount - 1], curr_row + 2) = carry; - // reset the machine state; hope that we won't have to do this manually - stack.push(b); - if (is_add) { - stack.push(a); - } else { - stack.push(result); - } } std::size_t rows_amount() override { diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/addmod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/addmod.hpp new file mode 100644 index 0000000000..ddfe071a73 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/addmod.hpp @@ -0,0 +1,448 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_addmod_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + zkevm_addmod_operation(){ + this->stack_input = 3; + this->stack_output = 1; + this->gas_cost = 8; + } + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) + - a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct( + const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + + // The central relation is a + b = s = Nr + q, q < N. + // For N = 0 we should have q = 0, so we use a special q_out value to correct that. + // + // Table layout: Internal row #: + // +--------------------------------+--------------------------------+---+ + // | a | b | | 4 + // +--------------------------------+--------+--+--------+-----------+---+ + // | s | c1 |c2| ts | | | 3 + // +--------------------------------+--+--------+---+----+---+--+----+---+ + // | N |c3| | t |rO| |1/N| 2 + // +--------------------------------+--+------------+--------+--+----+---+ + // | r | q | | 1 + // +--------------------------------+--------------------------------+---+ + // | v | q_out | | 0 + // +--------------------------------+--------------------------------+---+ + + auto carry_on_addition_constraint = [](var a_0, var a_1, var a_2, + var b_0, var b_1, var b_2, + var r_0, var r_1, var r_2, + var last_carry, var result_carry, bool first_constraint = false) { + constraint_type res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } + return res; + }; + auto last_carry_on_addition_constraint = [](var a_0, var b_0, var r_0, var last_carry, var result_carry) { + constraint_type res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + + std::size_t position_0 = 4; + std::vector a_chunks; + std::vector b_chunks; + std::vector s_chunks_0; + std::vector ts; + + for(std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, 0)); + b_chunks.push_back(var_gen(chunk_amount + i, 0)); + s_chunks_0.push_back(var_gen(i, +1)); + } + for (std::size_t i = 0; i < carry_amount; i++) { + ts.push_back(var_gen(chunk_amount + 5 + i, +1)); + } + constraints.push_back({position_0, carry_on_addition_constraint(a_chunks[0], a_chunks[1], a_chunks[2], + b_chunks[0], b_chunks[1], b_chunks[2], + s_chunks_0[0], s_chunks_0[1], s_chunks_0[2], + ts[0],ts[0],true)}); + constraints.push_back({position_0, ts[0] * (1 - ts[0])}); // ts[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_0, carry_on_addition_constraint( + a_chunks[3*i], a_chunks[3*i + 1], a_chunks[3*i + 2], + b_chunks[3*i], b_chunks[3*i + 1], b_chunks[3*i + 2], + s_chunks_0[3*i], s_chunks_0[3*i + 1], s_chunks_0[3*i + 2], + ts[i-1],ts[i])}); + constraints.push_back({position_0, ts[i] * (1 - ts[i])}); // ts[i] is 0 or 1 + } + constraints.push_back({position_0, last_carry_on_addition_constraint( + a_chunks[3*(carry_amount-1)], + b_chunks[3*(carry_amount-1)], + s_chunks_0[3*(carry_amount-1)], + ts[carry_amount - 2], ts[carry_amount - 1])}); + constraints.push_back({position_0, ts[carry_amount - 1] * (1 - ts[carry_amount - 1])}); // ts[carry_amount - 1] is 0 or 1 + + std::size_t position_1 = 2; + std::vector s_chunks; + std::vector N_chunks_1; + // we have two different constraints at two different positions + // first we prove division or zero + std::vector r_chunks_1; + std::vector q_chunks_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + s_chunks.push_back(var_gen(i, -1)); + N_chunks_1.push_back(var_gen(i, 0)); + r_chunks_1.push_back(var_gen(i, +1)); + q_chunks_1.push_back(var_gen(i + chunk_amount, +1)); + } + std::vector c_1_chunks; + for (std::size_t i = chunk_amount; i < chunk_amount + 4; i++) { + c_1_chunks.push_back(var_gen(i, -1)); + } + var c_2 = var_gen(chunk_amount + 4, -1); + var c_3 = var_gen(chunk_amount, 0); + var N_sum_inverse_1 = var_gen(2*chunk_amount, 0); + + std::vector s_64_chunks = { + chunk_sum_64(s_chunks, 0), + chunk_sum_64(s_chunks, 1), + chunk_sum_64(s_chunks, 2), + chunk_sum_64(s_chunks, 3) + }; + std::vector N_64_chunks_1 = { + chunk_sum_64(N_chunks_1, 0), + chunk_sum_64(N_chunks_1, 1), + chunk_sum_64(N_chunks_1, 2), + chunk_sum_64(N_chunks_1, 3) + }; + std::vector r_64_chunks_1 = { + chunk_sum_64(r_chunks_1, 0), + chunk_sum_64(r_chunks_1, 1), + chunk_sum_64(r_chunks_1, 2), + chunk_sum_64(r_chunks_1, 3) + }; + std::vector q_64_chunks_1 = { + chunk_sum_64(q_chunks_1, 0), + chunk_sum_64(q_chunks_1, 1), + chunk_sum_64(q_chunks_1, 2), + chunk_sum_64(q_chunks_1, 3) + }; + constraint_type c_1_64 = chunk_sum_64(c_1_chunks, 0); + // inverse or zero for N_sum_inverse + constraint_type N_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + N_sum_1 += N_chunks_1[i]; + } + constraints.push_back({position_1, N_sum_inverse_1 * (N_sum_inverse_1 * N_sum_1 - 1)}); + constraints.push_back({position_1, N_sum_1 * (N_sum_inverse_1 * N_sum_1 - 1)}); + // prove that the multiplication + addition is correct + constraint_type first_carryless = first_carryless_construct( + s_64_chunks, N_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (first_carryless - c_1_64 * two128 - c_2 * two192)}); + + constraint_type second_carryless = second_carryless_construct( + s_64_chunks, N_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (second_carryless + c_1_64 + c_2 * two_64 - c_3 * two128)}); + + // add constraints for c_2/c_3: 0/1 + constraints.push_back({position_1, c_2 * (c_2 - 1)}); + constraints.push_back({position_1, c_3 * (c_3 - 1)}); + + var s_overflow_var = var_gen(chunk_amount + 5 + carry_amount - 1, -1); + var r_overflow_var = var_gen(chunk_amount + 6 + carry_amount, 0); + constraints.push_back({position_1, r_overflow_var * (1 - r_overflow_var)}); + + constraint_type third_carryless = third_carryless_construct(N_64_chunks_1, r_64_chunks_1); + constraints.push_back({position_1, (third_carryless + r_overflow_var*N_64_chunks_1[0] + c_3 + - s_overflow_var * N_sum_1 * N_sum_inverse_1)}); + // ^^^ we substract s_overflow_var only when N != 0, if N = 0 it is cancelled with the unstored overflow of q + constraints.push_back({position_1, N_64_chunks_1[3] * r_64_chunks_1[3]}); // forth_carryless + + // prove that (q < N) or (N = 0) + // note that in the latter case we have q = a to satisfy a = Nr + q + std::size_t position_2 = 1; + std::vector N_chunks_2; + std::vector q_chunks_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + N_chunks_2.push_back(var_gen(i, -1)); + } + var N_sum_inverse_2 = var_gen(2*chunk_amount, -1); + for (std::size_t i = chunk_amount; i < 2 * chunk_amount; i++) { + q_chunks_2.push_back(var_gen(i, 0)); + } + std::vector v_chunks_2; + std::vector t; + for (std::size_t i = 0; i < chunk_amount; i++) { + v_chunks_2.push_back(var_gen(i, +1)); + } + for (std::size_t i = chunk_amount + 6; i < chunk_amount + 6 + carry_amount; i++) { + t.push_back(var_gen(i, -1)); + } + constraint_type N_sum_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + N_sum_2 += N_chunks_2[i]; + } + constraint_type N_nonzero = N_sum_inverse_2 * N_sum_2; + + // q < N <=> N + v = q + 2^T, i.e. the last carry is 1. + // We use t to store the addition carries and enforce the above constraint + // if N != 0 + constraints.push_back({position_2, carry_on_addition_constraint(N_chunks_2[0], N_chunks_2[1], N_chunks_2[2], + v_chunks_2[0], v_chunks_2[1], v_chunks_2[2], + q_chunks_2[0], q_chunks_2[1], q_chunks_2[2], + t[0],t[0],true)}); + constraints.push_back({position_2, t[0] * (1 - t[0])}); // t[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_2, carry_on_addition_constraint( + N_chunks_2[3*i], N_chunks_2[3*i + 1], N_chunks_2[3*i + 2], + v_chunks_2[3*i], v_chunks_2[3*i + 1], v_chunks_2[3*i + 2], + q_chunks_2[3*i], q_chunks_2[3*i + 1], q_chunks_2[3*i + 2], + t[i-1],t[i])}); + constraints.push_back({position_2, t[i] * (1 - t[i])}); // t[i] is 0 or 1 + } + constraints.push_back({position_2, last_carry_on_addition_constraint( + N_chunks_2[3*(carry_amount-1)], + v_chunks_2[3*(carry_amount-1)], + q_chunks_2[3*(carry_amount-1)], + t[carry_amount - 2], t[carry_amount - 1])}); + // t[carry_amount-1] is 0 or 1, but should be 1 if N_nonzero = 1 + constraints.push_back({position_2, (N_nonzero + (1 - N_nonzero)* t[carry_amount-1]) * (1 - t[carry_amount-1])}); + + std::vector q_out_chunks; + for (std::size_t i = chunk_amount; i < 2 * chunk_amount; i++) { + q_out_chunks.push_back(var_gen(i, +1)); + } + for (std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_2, (N_nonzero*(q_chunks_2[i] - q_out_chunks[i]) + (1-N_nonzero)*q_out_chunks[i])}); + } + + return { {gate_class::MIDDLE_OP, {constraints, {} }} }; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + word_type a = machine.stack_top(); + word_type b = machine.stack_top(1); + word_type N = machine.stack_top(2); + + integral_type s_integral = integral_type(a) + integral_type(b); + int is_overflow = (s_integral >= zkevm_modulus); + word_type s = word_type(s_integral); + + integral_type r_integral = N != 0u ? s_integral / integral_type(N) : 0u; + bool r_overflow = (r_integral >= zkevm_modulus); + word_type r = r_integral; + + // word_type q = N != 0u ? s % N : s; + word_type q = word_type(s_integral - r_integral*integral_type(N)); + word_type q_out = N != 0u ? q : 0; // according to EVM spec s % 0 = 0 + + bool t_last = integral_type(q) < integral_type(N); + word_type v = word_type(integral_type(q) + integral_type(t_last)*zkevm_modulus - integral_type(N)); + + word_type result = q_out; + + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector s_chunks = zkevm_word_to_field_element(s); + const std::vector N_chunks = zkevm_word_to_field_element(N); + const std::vector r_chunks = zkevm_word_to_field_element(r); + const std::vector q_chunks = zkevm_word_to_field_element(q); + const std::vector v_chunks = zkevm_word_to_field_element(v); + const std::vector q_out_chunks = zkevm_word_to_field_element(q_out); + + const std::size_t chunk_amount = s_chunks.size(); + // note that we don't assign 64-chunks for s/N, as we can build them from 16-chunks with constraints + // under the same logic we only assign the 16-bit chunks for carries + std::vector s_64_chunks, N_64_chunks, r_64_chunks, q_64_chunks; + for (std::size_t i = 0; i < 4; i++) { + s_64_chunks.push_back(chunk_sum_64(s_chunks, i)); + N_64_chunks.push_back(chunk_sum_64(N_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + // caluclate first row carries + auto first_row_carries = + first_carryless_construct(s_64_chunks, N_64_chunks, r_64_chunks, q_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + value_type c_2 = static_cast(first_row_carries >> 64); + std::vector c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + auto second_row_carries = + (second_carryless_construct(s_64_chunks, N_64_chunks, r_64_chunks, q_64_chunks) + + c_1 + c_2 * two_64).data.base() >> 128; + value_type c_3 = static_cast(second_row_carries); + std::vector c_3_chunks = chunk_64_to_16(c_3); + value_type N_sum = std::accumulate(N_chunks.begin(), N_chunks.end(), value_type(0)); + + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = a_chunks[i]; + assignment.witness(witness_cols[chunk_amount + i], curr_row) = b_chunks[i]; + assignment.witness(witness_cols[i], curr_row + 1) = s_chunks[i]; + } + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 1) = c_1_chunks[i]; + } + assignment.witness(witness_cols[4 + chunk_amount], curr_row + 1) = c_2; + // s = a + b carries + bool carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + a_chunks[3 * i ] + b_chunks[3 * i ] + + (a_chunks[3 * i + 1] + b_chunks[3 * i + 1]) * two_16 + + (a_chunks[3 * i + 2] + b_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 5 + i], curr_row + 1) = carry; + } + carry = (carry + a_chunks[3 * (carry_amount - 1)] + b_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[chunk_amount + 5 + carry_amount - 1], curr_row + 1) = carry; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = N_chunks[i]; + } + assignment.witness(witness_cols[chunk_amount], curr_row + 2) = c_3; + assignment.witness(witness_cols[2*chunk_amount], curr_row + 2) = N_sum == 0 ? 0 : N_sum.inversed(); + + carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + N_chunks[3 * i ] + v_chunks[3 * i ] + + (N_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (N_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 6 + i], curr_row + 2) = carry; + } + carry = (carry + N_chunks[3 * (carry_amount - 1)] + v_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[chunk_amount + 6 + carry_amount - 1], curr_row + 2) = carry; + + assignment.witness(witness_cols[chunk_amount + 6 + carry_amount], curr_row + 2) = r_overflow; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 3) = r_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 3) = q_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 4) = v_chunks[i]; + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 4) = q_out_chunks[i]; + } + } + + std::size_t rows_amount() override { + return 5; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/bitwise.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/bitwise.hpp new file mode 100644 index 0000000000..198d4bfa2f --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/bitwise.hpp @@ -0,0 +1,145 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + enum bitwise_type { B_AND, B_OR, B_XOR }; + + template + class zkevm_bitwise_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_bitwise_operation(bitwise_type _bit_operation) : bit_operation(_bit_operation) { + this->stack_input = 2; + this->stack_output = 1; + } + + bitwise_type bit_operation; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + std::vector> lookup_constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + const std::size_t byte_and_table_index = zkevm_circuit.get_reserved_indices().at("byte_and_xor_table/and"); + const std::size_t byte_xor_table_index = zkevm_circuit.get_reserved_indices().at("byte_and_xor_table/xor"); + + // Table layout + // +-----+------+ + // | bytes of a | 2 + // +------------+ + // | bytes of b | 1 + // +------------+ + // | bytes of r | 0 + // +------------+ + + std::size_t position = 1; + for(std::size_t i = 0; i < 2*chunk_amount; i++) { + var a_byte = var_gen(i, -1), + b_byte = var_gen(i, 0), + r_byte = var_gen(i, +1); + switch(bit_operation) { + case B_AND: + lookup_constraints.push_back({position, {byte_and_table_index, {a_byte, b_byte, r_byte }}}); + break; + case B_XOR: + lookup_constraints.push_back({position, {byte_xor_table_index, {a_byte, b_byte, r_byte }}}); + break; + case B_OR: + lookup_constraints.push_back({position, {byte_and_table_index, {(255-a_byte),(255-b_byte),(255-r_byte) }}}); + break; + } + } + return { {gate_class::MIDDLE_OP, {constraints, lookup_constraints}} }; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = typename BlueprintFieldType::integral_type; + + word_type a = machine.stack_top(); + word_type b = machine.stack_top(1); + + word_type result; + switch(bit_operation) { + case B_AND: result = a.base() & b.base(); break; + case B_OR: result = a.base() | b.base(); break; + case B_XOR: result = a.base() ^ b.base(); break; + } + + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector r_chunks = zkevm_word_to_field_element(result); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + + size_t chunk_amount = a_chunks.size(); + + // TODO: replace with memory access + for(std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[2*i], curr_row) = integral_type(a_chunks[i].data) % 256; + assignment.witness(witness_cols[2*i+1], curr_row) = integral_type(a_chunks[i].data) / 256; + assignment.witness(witness_cols[2*i], curr_row + 1) = integral_type(b_chunks[i].data) % 256; + assignment.witness(witness_cols[2*i+1], curr_row + 1) = integral_type(b_chunks[i].data) / 256; + assignment.witness(witness_cols[2*i], curr_row + 2) = integral_type(r_chunks[i].data) % 256; + assignment.witness(witness_cols[2*i+1], curr_row + 2) = integral_type(r_chunks[i].data) / 256; + } + } + + std::size_t rows_amount() override { + return 3; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/byte.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/byte.hpp new file mode 100644 index 0000000000..052de4cc0e --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/byte.hpp @@ -0,0 +1,190 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_byte_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_byte_operation(){ + this->stack_input = 2; + this->stack_output = 1; + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + std::vector> lookup_constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + const std::size_t range_check_table_index = zkevm_circuit.get_reserved_indices().at("chunk_16_bits/full"); + + // Table layout + // i is the offset from the MOST SIGNIFICANT BYTE + // i0p = p + 2n + // +-------------------+-+---+-+-+--+--+--+-+-+--------------+ + // | i | |i0p|p|n|xn|x'|x"|r|I| | 1 + // +-------------------+-+---+-+-+--+--+--+-+-+--------------+ + // | x | | (j-n)^{-1} | 0 + // +-------------------+--------------------+----------------+ + + std::size_t position = 0; + + std::vector i_chunks; + std::vector x_chunks; + std::vector indic; + for (std::size_t i = 0; i < chunk_amount; i++) { + i_chunks.push_back(var_gen(i, -1)); + x_chunks.push_back(var_gen(i, 0)); + indic.push_back(var_gen(2*chunk_amount + i, 0)); + } + var I_var = var_gen(2*chunk_amount, -1), + i0p_var = var_gen(chunk_amount + 1, -1), + p_var = var_gen(chunk_amount + 2, -1), + n_var = var_gen(chunk_amount + 3, -1), + xn_var = var_gen(chunk_amount + 4, -1), + xp_var = var_gen(chunk_amount + 5, -1), + xpp_var = var_gen(chunk_amount + 6, -1), + r_var = var_gen(chunk_amount + 7, -1); + + constraint_type i_sum; + for(std::size_t j = 1; j < chunk_amount; j++) { + i_sum += i_chunks[j]; + } + constraints.push_back({position, i_sum * (1 - I_var * i_sum)}); + + constraints.push_back({position, (i0p_var - i_chunks[0]*(1 - i_sum*I_var) - 32*i_sum*I_var)}); + + constraints.push_back({position, p_var * (1 - p_var)}); + constraints.push_back({position, (i0p_var - p_var - 2*n_var)}); + // lookup constraint to assure n_var < 32768 + lookup_constraints.push_back({position, {range_check_table_index, {2 * n_var}}}); + + constraint_type x_sum; + for(std::size_t j = 0; j < chunk_amount; j++) { + x_sum += x_chunks[chunk_amount-1 - j] * (1 - (j - n_var)*indic[j]); + } + constraints.push_back({position, (xn_var - x_sum)}); + constraints.push_back({position, (xn_var - xp_var*256 - xpp_var)}); + // lookup constraints for to assure xp_var, xpp_var < 256 + lookup_constraints.push_back({position, {range_check_table_index, {256 * xp_var}}}); + lookup_constraints.push_back({position, {range_check_table_index, {256 * xpp_var}}}); + + constraints.push_back({position, (r_var - (1-p_var)*xp_var - p_var*xpp_var)}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position, ((j - n_var)*(1 - (j - n_var)*indic[j]))}); + } + + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + word_type i = machine.stack_top(); + word_type x = machine.stack_top(1); + int shift = (integral_type(i) < 32) ? int(integral_type(i)) : 32; + word_type result = word_type((integral_type(x) << ((8*shift) + 1)) >> (31*8 + 1)); + // +1 because integral type is 257 bits long + + unsigned int i0 = static_cast(integral_type(i) % 65536), + i0p = (integral_type(i) > 65535) ? 32 : i0; + int parity = i0p % 2, + n = (i0p - parity) / 2; + unsigned int xn = static_cast((integral_type(x) << (16*n + 1)) >> (16*15 + 1)), + // +1 because integral_type is 257 bits long + xpp = xn % 256, + xp = (xn - xpp) / 256; + + const std::vector i_chunks = zkevm_word_to_field_element(i); + const std::vector x_chunks = zkevm_word_to_field_element(x); + + size_t chunk_amount = i_chunks.size(); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + + // TODO: replace with memory access, which would also do range checks! + for(std::size_t j = 0; j < chunk_amount; j++) { + assignment.witness(witness_cols[j], curr_row) = i_chunks[j]; + assignment.witness(witness_cols[j], curr_row + 1) = x_chunks[j]; + + value_type cur_j = j, + val_n = n, + indic = (cur_j == val_n) ? 0 : (cur_j-val_n).inversed(); + assignment.witness(witness_cols[2*chunk_amount + j], curr_row + 1) = indic; + } + value_type sum_i = 0; + for(std::size_t j = 1; j < chunk_amount; j++) { + sum_i += i_chunks[j]; + } + assignment.witness(witness_cols[2*chunk_amount], curr_row) = sum_i.is_zero() ? 0 : sum_i.inversed(); + assignment.witness(witness_cols[chunk_amount + 1], curr_row) = i0p; + + assignment.witness(witness_cols[chunk_amount + 2], curr_row) = parity; + assignment.witness(witness_cols[chunk_amount + 3], curr_row) = n; + + assignment.witness(witness_cols[chunk_amount + 4], curr_row) = xn; // n is the offset from MSW + assignment.witness(witness_cols[chunk_amount + 5], curr_row) = xp; + assignment.witness(witness_cols[chunk_amount + 6], curr_row) = xpp; + assignment.witness(witness_cols[chunk_amount + 7], curr_row) = static_cast(integral_type(result)); + } + + std::size_t rows_amount() override { + return 2; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/calldataload.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/calldataload.hpp new file mode 100644 index 0000000000..a9bd04ec22 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/calldataload.hpp @@ -0,0 +1,81 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_calldataload_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_calldataload_operation() { + this->stack_input = 1; + this->stack_output = 1; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for CALLDATALOAD" << std::endl; + } + + std::size_t rows_amount() override { + return 3; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/calldatasize.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/calldatasize.hpp new file mode 100644 index 0000000000..b4fafa1ffd --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/calldatasize.hpp @@ -0,0 +1,82 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_calldatasize_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_calldatasize_operation() { + this->stack_input = 0; + this->stack_output = 1; + this->gas_cost = 2; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for CALLDATASIZE" << std::endl; + } + + std::size_t rows_amount() override { + return 3; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/callvalue.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/callvalue.hpp new file mode 100644 index 0000000000..c3d3f9eae6 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/callvalue.hpp @@ -0,0 +1,82 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_callvalue_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_callvalue_operation() { + this->stack_input = 0; + this->stack_output = 1; + this->gas_cost = 2; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for CALLVALUE" << std::endl; + } + + std::size_t rows_amount() override { + return 1; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/cmp.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/cmp.hpp new file mode 100644 index 0000000000..30688dd154 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/cmp.hpp @@ -0,0 +1,281 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + enum cmp_type { C_LT, C_EQ, C_GT, C_SLT, C_SGT }; + + template + class zkevm_cmp_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_cmp_operation(cmp_type _cmp_operation) : cmp_operation(_cmp_operation) { + this->stack_input = 2; + this->stack_output = 1; + } + + cmp_type cmp_operation; + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + + // Table layout + // +----------------+--------------------------------+----------------+ + // | a | | | + // +----------------+--------------------------------+----------------+ + // | b |EQ:res; SGT,SLT: ax,a-,cx,c-,res|1/B| (EQ only) | + // +----------------+--------------------------------+----------------+ + // | c |carry| | | + // +----------------+--------------------------------+----------------+ + + std::size_t position = 1; + auto constraint_gen = [&constraints, &position] + (var a_0, var a_1, var a_2, + var b_0, var b_1, var b_2, + var r_0, var r_1, var r_2, + var last_carry, var result_carry, bool first_constraint = false) { + if (first_constraint) { + // no last carry for first constraint + constraints.push_back({ position, ( + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48)}); + + } else { + constraints.push_back({ position, ( + last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48)}); + } + constraints.push_back({position, result_carry * (result_carry - 1)}); + }; + auto last_constraint_gen = [&constraints, &position] + (var a_0, var b_0, var r_0, var last_carry, var result_carry) { + constraints.push_back({ position, (last_carry + a_0 + b_0 - r_0 - result_carry * two_16)}); + constraints.push_back({ position, result_carry * (result_carry - 1)}); + }; + std::vector a_chunks; + std::vector b_chunks; + std::vector r_chunks; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + b_chunks.push_back(var_gen(i, 0)); + r_chunks.push_back(var_gen(i, +1)); + } + std::vector r_carry; + for (std::size_t i = 0; i < carry_amount; i++) { + r_carry.push_back(var_gen(i + chunk_amount, +1)); + } + + // special first constraint + constraint_gen(a_chunks[0], a_chunks[1], a_chunks[2], + b_chunks[0], b_chunks[1], b_chunks[2], + r_chunks[0], r_chunks[1], r_chunks[2], + r_carry[0], r_carry[0], true); + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraint_gen(a_chunks[3 * i], a_chunks[3 * i + 1], a_chunks[3 * i + 2], + b_chunks[3 * i], b_chunks[3 * i + 1], b_chunks[3 * i + 2], + r_chunks[3 * i], r_chunks[3 * i + 1], r_chunks[3 * i + 2], + r_carry[i - 1], r_carry[i]); + } + last_constraint_gen(a_chunks[3 * (carry_amount - 1)], b_chunks[3 * (carry_amount - 1)], + r_chunks[3 * (carry_amount - 1)], + r_carry[carry_amount - 2], r_carry[carry_amount - 1]); + if (cmp_operation == C_EQ) { + // additional constraints for checking if b = 0 + constraint_type b_chunk_sum = b_chunks[0]; + for(std::size_t i = 1; i < chunk_amount; i++) { + b_chunk_sum += b_chunks[i]; + } + var b_chunk_sum_inverse = var_gen(2*chunk_amount, 0), + result = var_gen(chunk_amount + 1,0); + + constraints.push_back({position, (b_chunk_sum * b_chunk_sum_inverse + result - 1)}); + constraints.push_back({position, b_chunk_sum * result}); + } else if ((cmp_operation == C_SLT) || (cmp_operation == C_SGT)) { + // additional constraints for computing and accounting for the signs of a and r + var c = r_carry[carry_amount-1], + a_top = a_chunks[chunk_amount-1], + a_aux = var_gen(chunk_amount,0), + a_neg = var_gen(chunk_amount+1,0), + r_top = r_chunks[chunk_amount-1], + r_aux = var_gen(chunk_amount+2,0), + r_neg = var_gen(chunk_amount+3,0), + result = var_gen(chunk_amount+4,0); + value_type two_15 = 32768; + // a_top + 2^15 = a_aux + 2^16 * a_neg + constraints.push_back({position, a_neg * (1 - a_neg)}); + constraints.push_back({position, (a_top + two_15 - two_16 * a_neg - a_aux)}); + // r_top + 2^15 = r_aux + 2^16 * r_neg + constraints.push_back({position, r_neg * (1 - r_neg)}); + constraints.push_back({position, (r_top + two_15 - two_16 * r_neg - r_aux)}); + + // result = (r_neg & !a_neg) | ((r_neg&a_neg | !r_neg & !a_neg )& c) = + // = (r_neg & !a_neg) | (c & !a_neg) | (c & r_neg) = + // = r_neg(1-a_neg) + c(1-a_neg) + c r_neg - 2*r_neg(1-a_neg)c + constraints.push_back({position, (r_neg*(1-a_neg) + c*(1-a_neg) + c*r_neg - 2*c*r_neg*(1-a_neg) - result)}); + } + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + auto is_negative = [](word_type x) { + return (integral_type(x) > zkevm_modulus/2 - 1); + }; + + word_type x = machine.stack_top(); + word_type y = machine.stack_top(1); + word_type r; + + if ((cmp_operation == C_LT) || (cmp_operation == C_SLT)) { + r = (integral_type(x) < integral_type(y)); + } else { + r = (integral_type(x) > integral_type(y)); + } + + word_type result; + if (cmp_operation == C_SLT) { + result = (is_negative(x) && !is_negative(y)) || ((is_negative(x) == is_negative(y)) && r); + } else if (cmp_operation == C_SGT) { + result = (!is_negative(x) && is_negative(y)) || ((is_negative(x) == is_negative(y)) && r); + } else if (cmp_operation == C_EQ) { + result = (x == y); + } else { + result = r; + } + + // comparison is done by evaluating r (the carry) in a valid relation a + b = c + r*2^T, T = 256 + // E.g., y + z = x + 2^T <=> x < y; y + z = x <=> x <= y + word_type a, b, c; + if ((cmp_operation == C_LT) || (cmp_operation == C_SLT)) { + a = y; + c = x; + } else { + a = x; + c = y; + } + b = word_type(integral_type(c) + integral_type(r)*zkevm_modulus - integral_type(a)); + + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector r_chunks = zkevm_word_to_field_element(c); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + std:size_t chunk_amount = 16; + + // TODO: replace with memory access, which would also do range checks! + // NB! we need range checks on b, since it's generated here! + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = a_chunks[i]; + } + + value_type b_sum = value_type::zero(); + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 1) = b_chunks[i]; + b_sum += b_chunks[i]; + } + if (cmp_operation == C_EQ) { + assignment.witness(witness_cols[2*chunk_amount], curr_row + 1) = + b_sum.is_zero() ? value_type::zero() : value_type::one() * b_sum.inversed(); + assignment.witness(witness_cols[chunk_amount + 1], curr_row + 1) = integral_type(result); + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = r_chunks[i]; + } + + if ((cmp_operation == C_SLT) || (cmp_operation == C_SGT)) { + integral_type two_15 = 32768, + biggest_a_chunk = integral_type(a) >> (256 - 16), + biggest_r_chunk = integral_type(c) >> (256 - 16); + + // find the sign bit by adding 2^16/2 to the biggest chunk. The carry-on bit is 1 iff the sign bit is 1 + assignment.witness(witness_cols[chunk_amount], curr_row + 1) = + (biggest_a_chunk > two_15 - 1) ? (biggest_a_chunk - two_15) : biggest_a_chunk + two_15; + assignment.witness(witness_cols[chunk_amount + 1], curr_row + 1) = (biggest_a_chunk > two_15 - 1); + + assignment.witness(witness_cols[chunk_amount + 2], curr_row + 1) = + (biggest_r_chunk > two_15 - 1) ? (biggest_r_chunk - two_15) : biggest_r_chunk + two_15; + assignment.witness(witness_cols[chunk_amount + 3], curr_row + 1) = (biggest_r_chunk > two_15 - 1); + + assignment.witness(witness_cols[chunk_amount + 4], curr_row + 1) = integral_type(result); + } + + // we might want to pack carries more efficiently? + bool carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + a_chunks[3 * i ] + b_chunks[3 * i ] + + (a_chunks[3 * i + 1] + b_chunks[3 * i + 1]) * two_16 + + (a_chunks[3 * i + 2] + b_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[i + chunk_amount], curr_row + 2) = carry; + } + carry = (carry + a_chunks[3 * (carry_amount - 1)] + b_chunks[3 * (carry_amount - 1)]) >= two_16; + BOOST_ASSERT(carry == r); + assignment.witness(witness_cols[chunk_amount + carry_amount - 1], curr_row + 2) = carry; + } + + std::size_t rows_amount() override { + return 3; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/div.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/div.hpp index d2c28be26b..fa1f1d0f31 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/div.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/div.hpp @@ -50,9 +50,9 @@ namespace nil { constexpr static const value_type two_16 = 65536; constexpr static const value_type two_32 = 4294967296; constexpr static const value_type two_48 = 281474976710656; - constexpr static const value_type two_64 = 0x10000000000000000_cppui_modular254; - constexpr static const value_type two128 = 0x100000000000000000000000000000000_cppui_modular254; - constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_cppui_modular254; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; template T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { @@ -216,11 +216,8 @@ namespace nil { zkevm_stack &stack = machine.stack; word_type a = stack.pop(); word_type b = stack.pop(); - using integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<257>>; - integral_type result_integral = b != 0u ? integral_type(a) / integral_type(b) : 0u; - word_type result = word_type::backend_type(result_integral.backend()); - word_type q = b != 0u ? a % b : a; + word_type result = b.base() != 0u ? a.base() / b.base() : 0u; + word_type q = b.base() != 0u ? a.base() % b.base() : a; const std::vector a_chunks = zkevm_word_to_field_element(a); const std::vector b_chunks = zkevm_word_to_field_element(b); @@ -241,15 +238,15 @@ namespace nil { const std::size_t curr_row = zkevm_circuit.get_current_row(); // caluclate first row carries auto first_row_carries = - first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks).data >> 128; - value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data); + first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); value_type c_2 = static_cast(first_row_carries >> 64); std::vector c_1_chunks = chunk_64_to_16(c_1); // no need for c_2 chunks as there is only a single chunk auto second_row_carries = (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks) - + c_1 + c_2 * two_64).data >> 128; - value_type c_3 = static_cast(second_row_carries & (two_64 - 1).data); + + c_1 + c_2 * two_64).data.base() >> 128; + value_type c_3 = static_cast(second_row_carries & (two_64 - 1).data.base()); value_type c_4 = static_cast(second_row_carries >> 64); std::vector c_3_chunks = chunk_64_to_16(c_3); value_type b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/div_mod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/div_mod.hpp new file mode 100644 index 0000000000..ed93e1bd68 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/div_mod.hpp @@ -0,0 +1,374 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_div_mod_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using assignment_type = typename op_type::assignment_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_div_mod_operation(bool _is_div) : is_div(_is_div) { + this->stack_input = 2; + this->stack_output = 1; + this->gas_cost = 5; + } + + bool is_div; + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) + - a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct( + const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + + /*constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + constraint_type position_1 = zkevm_circuit.get_opcode_row_constraint(2, this->rows_amount()); + std::vector a_chunks; + std::vector b_chunks_1; + // we have two different constraints at two different positions + // first we prove division or zero + std::vector r_chunks_1; + std::vector q_chunks_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + b_chunks_1.push_back(var_gen(i, 0)); + r_chunks_1.push_back(var_gen(i, +1)); + q_chunks_1.push_back(var_gen(i + chunk_amount, +1)); + } + std::vector c_1_chunks; + for (std::size_t i = chunk_amount; i < chunk_amount + 4; i++) { + c_1_chunks.push_back(var_gen(i, -1)); + } + var c_2 = var_gen(chunk_amount + 4, -1); + var b_sum_inverse_1 = var_gen(2*chunk_amount, 0); + + std::vector a_64_chunks = { + chunk_sum_64(a_chunks, 0), + chunk_sum_64(a_chunks, 1), + chunk_sum_64(a_chunks, 2), + chunk_sum_64(a_chunks, 3) + }; + std::vector b_64_chunks_1 = { + chunk_sum_64(b_chunks_1, 0), + chunk_sum_64(b_chunks_1, 1), + chunk_sum_64(b_chunks_1, 2), + chunk_sum_64(b_chunks_1, 3) + }; + std::vector r_64_chunks_1 = { + chunk_sum_64(r_chunks_1, 0), + chunk_sum_64(r_chunks_1, 1), + chunk_sum_64(r_chunks_1, 2), + chunk_sum_64(r_chunks_1, 3) + }; + std::vector q_64_chunks_1 = { + chunk_sum_64(q_chunks_1, 0), + chunk_sum_64(q_chunks_1, 1), + chunk_sum_64(q_chunks_1, 2), + chunk_sum_64(q_chunks_1, 3) + }; + constraint_type c_1_64 = chunk_sum_64(c_1_chunks, 0); + // inverse or zero for b_sum_inverse + constraint_type b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_sum_1 += b_chunks_1[i]; + } + constraints.push_back({position_1, b_sum_inverse_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + constraints.push_back({position_1, b_sum_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + // prove that the multiplication + addition is correct + constraint_type first_carryless = first_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (first_carryless - c_1_64 * two128 - c_2 * two192)}); + constraint_type second_carryless = second_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (second_carryless + c_1_64 + c_2 * two_64)}); + // add constraints: c_2 is 0/1 + constraints.push_back({position_1, c_2 * (c_2 - 1)}); + + constraint_type third_carryless = third_carryless_construct(b_64_chunks_1, r_64_chunks_1); + constraints.push_back({position_1, third_carryless}); + constraints.push_back({position_1, b_64_chunks_1[3] * r_64_chunks_1[3]}); // forth_carryless + + // force r = 0 if b = 0 + constraint_type b_zero = 1 - b_sum_inverse_1 * b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_1, b_zero * r_chunks_1[i]}); + } + + // prove that (q < b) or (b = r = 0) + // note that in the latter case we have q = a to satisfy a = br + q + std::size_t position_2 = 1; + std::vector b_chunks_2; + std::vector q_chunks_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_chunks_2.push_back(var_gen(i, -1)); + } + var b_sum_inverse_2 = var_gen(2*chunk_amount, -1); + for (std::size_t i = chunk_amount; i < 2 * chunk_amount; i++) { + q_chunks_2.push_back(var_gen(i, 0)); + } + std::vector v_chunks_2; + std::vector t; + for (std::size_t i = 0; i < chunk_amount; i++) { + v_chunks_2.push_back(var_gen(i, +1)); + } + for (std::size_t i = chunk_amount + 6; i < chunk_amount + 6 + carry_amount; i++) { + t.push_back(var_gen(i, -1)); + } + constraint_type b_sum_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_sum_2 += b_chunks_2[i]; + } + constraint_type b_nonzero = b_sum_inverse_2 * b_sum_2; + + // q < b <=> b + v = q + 2^T, i.e. the last carry is 1. + // We use t to store the addition carries and enforce the above constraint + // if b != 0 + auto carry_on_addition_constraint = [](var a_0, var a_1, var a_2, + var b_0, var b_1, var b_2, + var r_0, var r_1, var r_2, + var last_carry, var result_carry, bool first_constraint = false) { + constraint_type res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } + return res; + }; + auto last_carry_on_addition_constraint = [](var a_0, var b_0, var r_0, var last_carry, var result_carry) { + constraint_type res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + constraints.push_back({position_2, carry_on_addition_constraint(b_chunks_2[0], b_chunks_2[1], b_chunks_2[2], + v_chunks_2[0], v_chunks_2[1], v_chunks_2[2], + q_chunks_2[0], q_chunks_2[1], q_chunks_2[2], + t[0],t[0],true)}); + constraints.push_back({position_2, t[0] * (1 - t[0])}); // t[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_2, carry_on_addition_constraint( + b_chunks_2[3*i], b_chunks_2[3*i + 1], b_chunks_2[3*i + 2], + v_chunks_2[3*i], v_chunks_2[3*i + 1], v_chunks_2[3*i + 2], + q_chunks_2[3*i], q_chunks_2[3*i + 1], q_chunks_2[3*i + 2], + t[i-1],t[i])}); + constraints.push_back({position_2, t[i] * (1 - t[i])}); // t[i] is 0 or 1 + } + constraints.push_back({position_2, last_carry_on_addition_constraint( + b_chunks_2[3*(carry_amount-1)], + v_chunks_2[3*(carry_amount-1)], + q_chunks_2[3*(carry_amount-1)], + t[carry_amount - 2], t[carry_amount - 1])}); + // t[carry_amount-1] is 0 or 1, but should be 1 if b_nonzero = 1 + constraints.push_back({position_2, (b_nonzero + (1 - b_nonzero)* t[carry_amount-1]) * (1 - t[carry_amount-1])}); + + // for MOD only + if (!is_div) { + std::vector q_out_chunks; + for (std::size_t i = chunk_amount; i < 2 * chunk_amount; i++) { + q_out_chunks.push_back(var_gen(i, +1)); + } + for (std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_2, (b_nonzero*(q_chunks_2[i] - q_out_chunks[i]) + (1-b_nonzero)*q_out_chunks[i])}); + } + }*/ + + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + word_type a = machine.stack_top(); + word_type b = machine.stack_top(1); + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + integral_type r_integral = b != 0u ? integral_type(a) / integral_type(b) : 0u; + word_type r = r_integral; + word_type q = b != 0u ? integral_type(a) % integral_type(b) : a; + word_type q_out = b != 0u ? q : 0; // according to EVM spec a % 0 = 0 + + bool t_last = integral_type(q) < integral_type(b); + word_type v = word_type(integral_type(q) + integral_type(t_last)*zkevm_modulus - integral_type(b)); + + word_type result = is_div ? r : q_out; + + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector r_chunks = zkevm_word_to_field_element(r); + const std::vector q_chunks = zkevm_word_to_field_element(q); + const std::vector v_chunks = zkevm_word_to_field_element(v); + const std::vector q_out_chunks = zkevm_word_to_field_element(q_out); + + const std::size_t chunk_amount = a_chunks.size(); + // note that we don't assign 64-chunks for a/b, as we can build them from 16-chunks with constraints + // under the same logic we only assign the 16-bit chunks for carries + std::vector a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks; + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + // caluclate first row carries + auto first_row_carries = + first_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + value_type c_2 = static_cast(first_row_carries >> 64); + std::vector c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + + value_type b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = a_chunks[i]; + } + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row) = c_1_chunks[i]; + } + assignment.witness(witness_cols[4 + chunk_amount], curr_row) = c_2; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 1) = b_chunks[i]; + } + assignment.witness(witness_cols[2*chunk_amount], curr_row + 1) = b_sum == 0 ? 0 : b_sum.inversed(); + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = r_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 2) = q_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 3) = v_chunks[i]; + } + bool carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + b_chunks[3 * i ] + v_chunks[3 * i ] + + (b_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 6 + i], curr_row + 1) = carry; + } + carry = (carry + b_chunks[3 * (carry_amount - 1)] + v_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[chunk_amount + 6 + carry_amount - 1], curr_row + 1) = carry; + + // optional part, for MOD only + if (!is_div) { + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 3) = q_out_chunks[i]; + } + } + + // TODO: Just for testing purposes. May be removed or commented. + if( is_div) + BOOST_ASSERT(result == std::get<0>(eth_div(a,b))); + else + BOOST_ASSERT(result == std::get<1>(eth_div(a,b))); + } + + std::size_t rows_amount() override { + return 4; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/dupx.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/dupx.hpp new file mode 100644 index 0000000000..21f9737a43 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/dupx.hpp @@ -0,0 +1,77 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_dupx_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_dupx_operation(std::size_t _x) : byte_count(_x) { + BOOST_ASSERT(_x <= 16); // the maximum possible dup + this->stack_input = _x; + this->stack_output = _x+1; + } + + std::size_t byte_count; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override{ + std::cout << "Generate assignments for DUPx opcodes" << std::endl; + } + + std::size_t rows_amount() override { + return 1; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/err0.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/err0.hpp new file mode 100644 index 0000000000..e445d98d3b --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/err0.hpp @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + + template + class zkevm_err0_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_err0_operation(){ + this->gas_cost = 0; + } + + std::map>, + std::vector> + >> generate_gates(zkevm_circuit_type &zkevm_circuit) override { + const auto &state = zkevm_circuit.get_state(); + using circuit_integral_type = typename BlueprintFieldType::integral_type; + + std::vector> constraints; + std::vector> lookup_constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + + // Table layout Row # + // +-----+-----+------+------------------+------------------+ + // | d3 | g| b| All these cells are used by the | 1 + // +--+--+--+--+------+------------------+------------------+ + // |d1|si|d2|so| erroneous opcode virtual selector | 0 + // +--+--+--+--+------+------------------+------------------+ + // + // g = insufficient gas + // si = not enough values on stack for input + // so = stack output exceeds maximum size + // b = parity bit for virtual selector + // + // stack_read, stack_write, cost: defined by constraints based on virtual selector + // stack_size, gas: taken from state + // + // stack_input + d1 = stack_size + si*2^16 <=> si = [stack_input > stack_size] + // stack_size + stack_output + d2 = stack_input + 1024 + so*2^16 <=> so = [stack_size + stack_output > 1024 + stack_input] + // cost + d3 = gas + g*2^32 <=> g = [cost > gas] + // + // Ensure there is an error: (si-1)(so-1)(g-1) = 0 + + std::size_t position = 0; + var si_var = var_gen(0, -1), + so_var = var_gen(1, -1), + opcode_var = var_gen(2, -1), + d_var = var_gen(0), + b_var = var_gen(1), + real_opcode_var = var_gen(2); + + constraints.push_back({position, si_var * (1 - si_var)}); + constraints.push_back({position, so_var * (1 - so_var)}); + constraints.push_back({0, b_var * (1 - b_var)}); + constraints.push_back({0, si_var + so_var - 1}); + + var stack_size_var = zkevm_circuit.get_state().stack_size; + + constraint_type stack_input, + stack_output, + opcode, + real_opcode; + + for(auto [opcode_mnemo, i] : zkevm_circuit.get_opcodes_info().opcode_to_number_map) { + if (zkevm_circuit.get_opcodes_info().get_opcode_value(opcode_mnemo) < 256) { // only use true opcodes + std::size_t b = i % 2, + n = i / 2; + constraint_type opcode_selector = (b ? b_var : 1 - b_var) * var_gen(4 + (n % 44), -1 + (n/44)); + stack_input += zkevm_circuit.get_opcodes_info().get_opcode_stack_input(opcode_mnemo) * opcode_selector; + stack_output += zkevm_circuit.get_opcodes_info().get_opcode_stack_output(opcode_mnemo) * opcode_selector; + opcode += opcode_selector * i; + real_opcode += zkevm_circuit.get_opcodes_info().get_opcode_value(opcode_mnemo) * opcode_selector; + } + } + // stack_input + d1 = stack_size + si*2^16 + constraints.push_back({position, si_var * (d_var - (stack_input - stack_size_var))}); + constraints.push_back({position, so_var * (d_var - (stack_size_var + stack_output - stack_input - 1024))}); + constraints.push_back({position, opcode - opcode_var}); + constraints.push_back({position, real_opcode - real_opcode_var}); + + lookup_constraints.push_back({ position, {zkevm_circuit.get_bytecode_table_id(), { + real_opcode_var - real_opcode_var + 1, + state.pc(), + real_opcode_var, + real_opcode_var - real_opcode_var + 1, + state.bytecode_hash_hi(), + state.bytecode_hash_lo() + }}}); +/* + // stack_size + stack_output + d2 = stack_input + 1024 + so*2^16 + constraints.push_back({position, stack_size_var + stack_output + d2_var - stack_input - 1024 - so_var*65536}); + + // cost + d3 = gas + g*2^32 <=> g = [cost > gas] + constraints.push_back({position, cost + d30_var + 65536*d31_var - gas_var - g_var*(circuit_integral_type(1) << 32)}); + + constraints.push_back({position, (si_var - 1)*(so_var - 1)*(g_var - 1)});*/ + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine, + zkevm_word_type additional_input) { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + using circuit_integral_type = typename BlueprintFieldType::integral_type; + zkevm_opcode opcode_mnemo = machine.error_opcode(); + std::size_t opcode_num = zkevm_table.get_opcodes_info().get_opcode_number(opcode_mnemo); + std::size_t opcode_value = zkevm_table.get_opcodes_info().get_opcode_value(opcode_mnemo); + std::cout << "\topcode = " << opcode_to_string(opcode_mnemo) << std::endl; + + BOOST_ASSERT(opcode_num < 176); + // Do something with it. + // 176 is the maximum we can handle by using a "virtual selector" with 2 rows 44 columns and a dedicated parity cell + + std::size_t b = static_cast(opcode_num % 2), + n = static_cast(opcode_num / 2), + col = n % 44, + row = n / 44; + value_type stack_size = machine.stack_size(); + + std::size_t stack_input = zkevm_table.get_opcodes_info().get_opcode_stack_input(opcode_mnemo), + stack_output = zkevm_table.get_opcodes_info().get_opcode_stack_output(opcode_mnemo); + + value_type si = (stack_input > circuit_integral_type(stack_size.data)), + so = (circuit_integral_type(stack_size.data) + stack_output > 1024 + stack_input), + d = (si == 1)? stack_input - stack_size: stack_size + stack_output - stack_input - 1024; + std::cout << "\topcode = " << std::hex << opcode_num << std::dec << std::endl; + std::cout << "\tstack_input = " << stack_input << std::endl; + std::cout << "\tstack_size = " << circuit_integral_type(stack_size.data) << std::endl; + std::cout << "\tsi = " << si << std::endl; + std::cout << "\tso = " << so << std::endl; + std::cout << "\td = " << d << std::endl; + + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + + assignment.witness(witness_cols[0], curr_row) = si; + assignment.witness(witness_cols[1], curr_row) = so; + assignment.witness(witness_cols[2], curr_row) = zkevm_table.get_opcodes_info().get_opcode_number(opcode_mnemo); + assignment.witness(witness_cols[0], curr_row+1) = d; + assignment.witness(witness_cols[1], curr_row+1) = b; + assignment.witness(witness_cols[2], curr_row+1) = zkevm_table.get_opcodes_info().get_opcode_value(opcode_mnemo); + std::cout << "Error opcode is " << opcode_to_string(opcode_mnemo) << std::endl; + + for(std::size_t i = 0; i < 44; i++) { + for(std::size_t j = 0; j < 2; j++) { + assignment.witness(witness_cols[4 + i], curr_row + j) = (i == col) && (j == row); + } + } + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + generate_assignments(zkevm_table, machine, 0); // just to have a default + } + + std::size_t rows_amount() override { + return 2; + } + + constraint_type stack_size_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + constraint_type pc_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/err1.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/err1.hpp new file mode 100644 index 0000000000..8b9adb460b --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/err1.hpp @@ -0,0 +1,223 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + + template + class zkevm_err1_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + using state_var = state_variable; + + struct err1_map{ + std::array chunks; + state_var is_jump; + state_var is_jumpi; + state_var is_overflow; + state_var bytecode_length; + state_var is_new_byte_opcode; + state_var new_byte; + state_var dest_diff; + state_var cond_chunks_sum_inversed; + state_var new_byte_diff_inversed; + + err1_map(std::vector W, std::size_t range_checked_cols_amount = 32){ + for( std::size_t i = 0; i < 16; i++) chunks[i] = state_var(W[i]); + is_jump = state_var(W[16]); + is_jumpi = state_var(W[17]); + is_overflow = state_var(W[18]); + bytecode_length = state_var(W[19]); + is_new_byte_opcode = state_var(W[20]); + new_byte = state_var(W[21]); + dest_diff = state_var(W[22]); + cond_chunks_sum_inversed = state_var(W[range_checked_cols_amount]); + new_byte_diff_inversed = state_var(W[range_checked_cols_amount+1]); + } + }; + + zkevm_err1_operation(){ + this->gas_cost = 0; + } + + std::map>, + std::vector> + >> generate_gates(zkevm_circuit_type &zkevm_circuit) override { + using circuit_integral_type = typename BlueprintFieldType::integral_type; + + const auto &state = zkevm_circuit.get_state(); + auto witness_cols = zkevm_circuit.get_opcode_cols(); + std::size_t range_checked_cols_amount = zkevm_circuit.get_opcode_range_checked_cols_amount(); + err1_map m(witness_cols, range_checked_cols_amount); + + std::vector> constraints; + std::vector> lookup_constraints; + + std::size_t position = 1;//Top row + constraints.push_back({position, m.is_jump() * (m.is_jump() - 1)}); + constraints.push_back({position, m.is_jumpi() * (m.is_jumpi() - 1)}); + constraints.push_back({position, m.is_jumpi() + m.is_jump() - 1}); + constraints.push_back({position, m.is_overflow() * (m.is_overflow() - 1)}); + + constraint_type sum_cond_chunks; + for( std::size_t i = 0; i < 16; i++){ + sum_cond_chunks += m.chunks[i](); + } + constraints.push_back({position, m.is_jump() * sum_cond_chunks}); + constraints.push_back({position, m.is_jumpi() * (sum_cond_chunks * m.cond_chunks_sum_inversed() - 1)}); + + constraints.push_back({position, m.dest_diff() * m.is_overflow()}); +// constraints.push_back({position, m.chunks[15].next()}); + constraints.push_back({position, (m.bytecode_length() - m.chunks[0].next() - m.dest_diff()) * (1 - m.is_overflow())}); + + constraint_type zero_constraint; + constraint_type one_constraint = zero_constraint + 1; + + lookup_constraints.push_back({position,{ zkevm_circuit.get_bytecode_table_id(), { + one_constraint, + state.pc(), + m.is_jump() * (zkevm_circuit.get_opcodes_info().get_opcode_value(zkevm_opcode::JUMP)) + + m.is_jumpi() * (zkevm_circuit.get_opcodes_info().get_opcode_value(zkevm_opcode::JUMPI)), + one_constraint, + state.bytecode_hash_hi(), + state.bytecode_hash_lo() + }}}); + + lookup_constraints.push_back({position,{ zkevm_circuit.get_bytecode_table_id(), { + zero_constraint, + zero_constraint, + m.bytecode_length(), + zero_constraint, + state.bytecode_hash_hi(), + state.bytecode_hash_lo() + }}}); + + lookup_constraints.push_back({position,{ zkevm_circuit.get_bytecode_table_id(), { + (1 - m.is_overflow()), + (1 - m.is_overflow()) * m.chunks[0].next(), // Correct destination fits in one chunk. OVerwize is_overflow = true + (1 - m.is_overflow()) * m.new_byte(), + (1 - m.is_overflow()) * m.is_new_byte_opcode(), + (1 - m.is_overflow()) * state.bytecode_hash_hi(), + (1 - m.is_overflow()) * state.bytecode_hash_lo() + }}}); + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine, + zkevm_word_type additional_input) { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + using circuit_integral_type = typename BlueprintFieldType::integral_type; + + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + auto witness_cols = zkevm_table.get_opcode_cols(); + std::size_t range_checked_cols_amount = zkevm_table.get_opcode_range_checked_cols_amount(); + const std::size_t chunks_amount = 16; + + zkevm_opcode opcode_mnemo = machine.error_opcode(); + std::size_t opcode_num = zkevm_table.get_opcodes_info().get_opcode_number(opcode_mnemo); + std::size_t opcode_value = zkevm_table.get_opcodes_info().get_opcode_value(opcode_mnemo); + std::cout << "\topcode = " << opcode_to_string(opcode_mnemo) << std::endl; + + bool is_jump = (opcode_mnemo == zkevm_opcode::JUMP); + bool is_jumpi = (opcode_mnemo == zkevm_opcode::JUMPI); + zkevm_word_type dest = machine.stack_top(); + zkevm_word_type condition = is_jumpi?machine.stack_top(1):0; + std::cout << "\tdest = " << dest << std::endl; + + std::size_t bytecode_length = machine.bytecode_length(); + std::cout << "\tbytecode_length = " << bytecode_length << std::endl; + + bool is_overflow = (dest >= bytecode_length); + std::cout << "\tis_overflow = " << is_overflow << std::endl; + const std::vector dest_chunks = zkevm_word_to_field_element(dest); + const std::vector condition_chunks = zkevm_word_to_field_element(condition); + + err1_map m(witness_cols ,32); + + value_type c = 0; + for (std::size_t i = 0; i < chunks_amount; i++) { + assignment.witness(m.chunks[i].index, curr_row) = condition_chunks[i]; + assignment.witness(m.chunks[i].index, curr_row+1) = dest_chunks[i]; + c += condition_chunks[i]; + } + + std::size_t dest_16 = w_to_16(dest)[chunks_amount - 1]; + std::cout << "\tdest 16 = " << dest_16 << std::endl; + std::uint8_t new_byte = is_overflow? 0 : machine.bytecode_byte(dest_16); + bool is_byte_opcode = is_overflow? 0: machine.is_bytecode_byte_opcode(dest_16); + + assignment.witness(m.is_jump.index, curr_row) = is_jump; + assignment.witness(m.is_jumpi.index, curr_row) = is_jumpi; + assignment.witness(m.is_overflow.index, curr_row) = is_overflow; + assignment.witness(m.bytecode_length.index, curr_row) = machine.bytecode_length(); + assignment.witness(m.is_new_byte_opcode.index, curr_row) = is_byte_opcode; + assignment.witness(m.new_byte.index, curr_row) = new_byte; + assignment.witness(m.dest_diff.index, curr_row) = is_overflow? 0: machine.bytecode_length() - dest_16; + assignment.witness(m.cond_chunks_sum_inversed.index, curr_row) = (c == 0? c: c.inversed()); + assignment.witness(m.new_byte_diff_inversed.index, curr_row) = (value_type(new_byte) - 0x5f).inversed(); + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + generate_assignments(zkevm_table, machine, 0); // just to have a default + } + + std::size_t rows_amount() override { + return 2; + } + + constraint_type stack_size_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + constraint_type pc_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/iszero.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/iszero.hpp index a08c25d609..606307c108 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/iszero.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/iszero.hpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -32,6 +33,8 @@ namespace nil { namespace blueprint { + template + class zkevm_operation; template class zkevm_iszero_operation : public zkevm_operation { @@ -39,63 +42,67 @@ namespace nil { using op_type = zkevm_operation; using gate_class = typename op_type::gate_class; using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; using assignment_type = typename op_type::assignment_type; using value_type = typename BlueprintFieldType::value_type; using var = typename op_type::var; - zkevm_iszero_operation() = default; + zkevm_iszero_operation() { + this->stack_input = 1; + this->stack_output = 1; + }; + + std::map>, + std::vector> + >> generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; - std::map> generate_gates(zkevm_circuit_type &zkevm_circuit) override { - std::vector constraints; constexpr const std::size_t chunk_amount = 16; const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { return zkevm_operation::var_gen(witness_cols, i, offset); }; - constraint_type chunk_sum = var_gen(0); - std::size_t i = 1; - for (; i < chunk_amount; i++) { + + // Table layout Row # + // +------------------+-+----------------+---+--------------+ + // | a |r| |1/A| | 0 + // +------------------+-+----------------+---+--------------+ + + std::size_t position = 0; + + constraint_type chunk_sum; + + for (std::size_t i = 0; i < chunk_amount; i++) { chunk_sum += var_gen(i); } - var result = var_gen(i++); - for (; i < 2 * chunk_amount; i++) { - // force other chunks to be zero - constraints.emplace_back(var_gen(i)); - } - var chunk_sum_inverse = var_gen(i); - constraints.emplace_back(chunk_sum * chunk_sum_inverse + result - 1); - constraints.emplace_back(chunk_sum * result); - return {{gate_class::MIDDLE_OP, constraints}}; + var result = var_gen(chunk_amount); + var chunk_sum_inverse = var_gen(2*chunk_amount); + constraints.push_back({position, (chunk_sum * chunk_sum_inverse + result - 1)}); + constraints.push_back({position, (chunk_sum * result)}); + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; } - void generate_assignments(zkevm_circuit_type &zkevm_circuit, zkevm_machine_interface &machine) override { - zkevm_stack &stack = machine.stack; + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { using word_type = typename zkevm_stack::word_type; - word_type a = stack.pop(); + word_type a = machine.stack_top(); const std::vector chunks = zkevm_word_to_field_element(a); - const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); - assignment_type &assignment = zkevm_circuit.get_assignment(); - std::size_t i = 0; - const std::size_t curr_row = zkevm_circuit.get_current_row(); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + std::size_t chunk_amount = 16; + // TODO: replace with memory access - for (; i < chunks.size(); i++) { + for (std::size_t i = 0; i < chunk_amount; i++) { assignment.witness(witness_cols[i], curr_row) = chunks[i]; } - if (a == 0u) { - assignment.witness(witness_cols[i], curr_row) = 1; - } else { - assignment.witness(witness_cols[i], curr_row) = 0; - } - i++; - for (; i < 2 * chunks.size(); i++) { - assignment.witness(witness_cols[i], curr_row) = 0; - } + assignment.witness(witness_cols[chunk_amount], curr_row) = (a.base() == 0u); const value_type chunk_sum = std::accumulate(chunks.begin(), chunks.end(), value_type::zero()); - assignment.witness(witness_cols[i], curr_row) = + assignment.witness(witness_cols[2*chunk_amount], curr_row) = chunk_sum == 0 ? value_type::zero() : value_type::one() * chunk_sum.inversed(); - // reset the machine state; hope that we won't have to do this manually - stack.push(a); } std::size_t rows_amount() override { diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/jump.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/jump.hpp new file mode 100644 index 0000000000..7d5ff44544 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/jump.hpp @@ -0,0 +1,145 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_table; + + template + class zkevm_jump_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + using state_var = state_variable; + + zkevm_jump_operation() { + this->stack_input = 1; + this->stack_output = 0; + this->gas_cost = 8; + } + + std::map>, + std::vector> + >> generate_gates(zkevm_circuit_type &zkevm_circuit) override { + std::vector> lookup_constraints; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + var destination = zkevm_operation::var_gen(witness_cols, 0, 0); + const auto &state = zkevm_circuit.get_state(); + + std::size_t position = 0; + lookup_constraints.push_back({ position, {zkevm_circuit.get_bytecode_table_id(), { + destination - destination + 1, // Should be a constant + destination, + destination - destination + zkevm_circuit.get_opcodes_info().get_opcode_value(zkevm_opcode::JUMPDEST), // Should be a constant + destination - destination + 1, // Should be a constant + state.bytecode_hash_hi(), + state.bytecode_hash_lo() + }}}); + + // TODO: + // Lookup to RW stack + return {{gate_class::MIDDLE_OP, {{}, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments for JUMP" << std::endl; + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + auto witness_cols = zkevm_table.get_opcode_cols(); + + zkevm_word_type dest = machine.stack_top(); + std::cout << "JUMP assign destination = " << dest << std::endl; + assignment.witness(witness_cols[0], curr_row) = w_lo(dest); + } + + virtual constraint_type pc_transition(const zkevm_circuit_type &zkevm_circuit) override{ + auto witness_cols = zkevm_circuit.get_opcode_cols(); + const auto &state = zkevm_circuit.get_state(); + constraint_type c; + + c = state.pc.next() - var(witness_cols[0], -1); + return c; + } + + std::size_t rows_amount() override { + return 1; + } + }; + + template + class zkevm_jumpdest_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_jumpdest_operation() { + this->gas_cost = 1; + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // No gates. Just state transition + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + // No assignments. Just state transition + } + + std::size_t rows_amount() override { + return 1; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/jumpi.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/jumpi.hpp new file mode 100644 index 0000000000..e802224fde --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/jumpi.hpp @@ -0,0 +1,170 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_table; + + template + class zkevm_jumpi_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + using state_var = state_variable; + + zkevm_jumpi_operation() { + this->stack_input = 2; + this->stack_output = 0; + this->gas_cost = 10; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + // Table layout Row # + // +------------------+-+----------------+---+--------------+ + // | condition |r| |1/A| dest | | 0 + // +------------------+-+----------------+---+--------------+ + + struct jumpi_map{ + jumpi_map(std::vector W, std::size_t range_checked_cols_amount = 32){ + for(std::size_t i = 0; i < 16; i++){ + chunks[i] = var(W[i],0); // No rotations used, so, use just var instead of state_var + } + non_zero = state_var(W[17]); + dest = state_var(W[18]); + + // dest will be range checked by the bytecode table. + // but range_checks are free. So we place it to range check columns + s_inv = state_var(W[range_checked_cols_amount]); + } + std::array chunks; + state_var non_zero; + state_var s_inv; + state_var dest; + }; + + std::map>, + std::vector> + >> generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : add lookups + // 2 lookups to RW circuit + // Lookup to bytecode with JUMPDEST + + std::vector> constraints; + std::vector> lookup_constraints; + + const auto &state = zkevm_circuit.get_state(); + auto witness_cols = zkevm_circuit.get_opcode_cols(); + std::size_t range_checked_cols_amount = zkevm_circuit.get_opcode_range_checked_cols_amount(); + jumpi_map m(witness_cols, range_checked_cols_amount); + + // May be checked not all chunks but lower for example + // Should be checked for EVM + constraint_type sum_constraint; + for(std::size_t i = 0; i < m.chunks.size(); i++){ + sum_constraint += m.chunks[i]; + } + constraints.push_back({0, m.non_zero() * (1 - m.non_zero())}); + constraints.push_back({0, m.non_zero() - sum_constraint * m.s_inv()}); + + + lookup_constraints.push_back({ 0, {zkevm_circuit.get_bytecode_table_id(), { + m.non_zero(), + m.non_zero() * m.dest(), + m.non_zero() * (zkevm_circuit.get_opcodes_info().get_opcode_value(zkevm_opcode::JUMPDEST)), // Should be a constant + m.non_zero(), + m.non_zero() * state.bytecode_hash_hi(), + m.non_zero() * state.bytecode_hash_lo() + }}}); + + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + zkevm_word_type dest = machine.stack_top(); + zkevm_word_type condition = machine.stack_top(1); + const std::vector chunks = zkevm_word_to_field_element(condition); + + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + auto witness_cols = zkevm_table.get_opcode_cols(); + std::size_t range_checked_cols_amount = zkevm_table.get_opcode_range_checked_cols_amount(); + + jumpi_map m(witness_cols, range_checked_cols_amount); + + // TODO: replace with memory access, which would also do range checks! + value_type c = 0; + for (std::size_t i = 0; i < chunks.size(); i++) { + assignment.witness(m.chunks[i].index, curr_row) = chunks[i]; + c += chunks[i]; + } + assignment.witness(m.non_zero.index, curr_row) = (c != 0); + assignment.witness(m.s_inv.index, curr_row) = (c==0 ? 0 : c.inversed()); + assignment.witness(m.dest.index, curr_row) = w_lo(dest); + } + + virtual constraint_type pc_transition(const zkevm_circuit_type &zkevm_circuit) override{ + // pc_transition switched on opcode's last row. All meaningful data is placed on 0-th row. + // So, we'll have -1 rotation + auto witness_cols = zkevm_circuit.get_opcode_cols(); + std::size_t range_checked_cols_amount = zkevm_circuit.get_opcode_range_checked_cols_amount(); + const auto &state = zkevm_circuit.get_state(); + constraint_type c; + + jumpi_map m(witness_cols, range_checked_cols_amount); + c = state.pc.next() - m.non_zero.prev() * m.dest.prev() - (1 - m.non_zero.prev()) * (state.pc() + 1); + return c; + } + + std::size_t rows_amount() override { + return 1; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/memory.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/memory.hpp new file mode 100644 index 0000000000..20ee222407 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/memory.hpp @@ -0,0 +1,137 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_mstore_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_mstore_operation() { + this->stack_input = 2; + this->stack_output = 0; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for MSTORE" << std::endl; + } + + std::size_t rows_amount() override { + return 3; + } + + virtual constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) override { + std::cout << "Implement MLOAD dynamic gas transition" << std::endl; + constraint_type c; + return c; + } + }; + + + template + class zkevm_mload_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_mload_operation() { + this->stack_input = 1; + this->stack_output = 1; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for MLOAD" << std::endl; + } + + virtual constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) override { + std::cout << "Implement MLOAD dynamic gas transition" << std::endl; + constraint_type c; + return c; + } + + std::size_t rows_amount() override { + return 3; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/mul.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/mul.hpp index e0ff3d2b5c..d5d2354ada 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/mul.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/mul.hpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -32,6 +33,8 @@ namespace nil { namespace blueprint { + template + class zkevm_operation; template class zkevm_mul_operation : public zkevm_operation { @@ -39,19 +42,25 @@ namespace nil { using op_type = zkevm_operation; using gate_class = typename op_type::gate_class; using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; using assignment_type = typename op_type::assignment_type; using value_type = typename BlueprintFieldType::value_type; using var = typename op_type::var; - zkevm_mul_operation() {} + zkevm_mul_operation() { + this->stack_input = 2; + this->stack_output = 1; + this->gas_cost = 5; + } constexpr static const value_type two_16 = 65536; constexpr static const value_type two_32 = 4294967296; constexpr static const value_type two_48 = 281474976710656; - constexpr static const value_type two_64 = 0x10000000000000000_cppui_modular254; - constexpr static const value_type two128 = 0x100000000000000000000000000000000_cppui_modular254; - constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_cppui_modular254; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; template T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { @@ -83,14 +92,21 @@ namespace nil { a_64_chunks[2] * b_64_chunks[1] + a_64_chunks[3] * b_64_chunks[0] - r_64_chunks[3]); } - std::map> generate_gates(zkevm_circuit_type &zkevm_circuit) override { - std::vector constraints; + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + constexpr const std::size_t chunk_amount = 16; const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { return zkevm_operation::var_gen(witness_cols, i, offset); }; - constraint_type position = zkevm_circuit.get_opcode_row_constraint(1, this->rows_amount()); + + std::size_t position = 1; std::vector a_chunks; std::vector b_chunks; std::vector r_chunks; @@ -129,23 +145,21 @@ namespace nil { constraint_type c_3_64 = chunk_sum_64(c_3_chunks, 0); constraint_type first_carryless = first_carryless_consrtruct( a_64_chunks, b_64_chunks, r_64_chunks); - constraints.push_back(position * (first_carryless - c_1_64 * two128 - c_2 * two192)); + constraints.push_back({position, (first_carryless - c_1_64 * two128 - c_2 * two192)}); constraint_type second_carryless = second_carryless_construct( a_64_chunks, b_64_chunks, r_64_chunks); - constraints.push_back( - position * (second_carryless + c_1_64 + c_2 * two_64 - c_3_64 * two128 - c_4 * two192)); + constraints.push_back({position, (second_carryless + c_1_64 + c_2 * two_64 - c_3_64 * two128 - c_4 * two192)}); // add constraints for c_2/c_4: c_2 is 0/1, c_4 is 0/1/2/3 - constraints.push_back(position * c_2 * (c_2 - 1)); - constraints.push_back(position * c_4 * (c_4 - 1) * (c_4 - 2) * (c_4 - 3)); + constraints.push_back({position, c_2 * (c_2 - 1)}); + constraints.push_back({position, c_4 * (c_4 - 1) * (c_4 - 2) * (c_4 - 3)}); - return {{gate_class::MIDDLE_OP, constraints}}; + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; } - void generate_assignments(zkevm_circuit_type &zkevm_circuit, zkevm_machine_interface &machine) override { - zkevm_stack &stack = machine.stack; + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { using word_type = typename zkevm_stack::word_type; - word_type a = stack.pop(); - word_type b = stack.pop(); + word_type a = machine.stack_top(); + word_type b = machine.stack_top(1); word_type result = a * b; const std::vector a_chunks = zkevm_word_to_field_element(a); const std::vector b_chunks = zkevm_word_to_field_element(b); @@ -159,19 +173,19 @@ namespace nil { b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); } - const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); - assignment_type &assignment = zkevm_circuit.get_assignment(); - const std::size_t curr_row = zkevm_circuit.get_current_row(); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); // caluclate first row carries auto first_row_carries = - first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks).data >> 128; - value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data); + first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); value_type c_2 = static_cast(first_row_carries >> 64); std::vector c_1_chunks = chunk_64_to_16(c_1); // no need for c_2 chunks as there is only a single chunk auto second_row_carries = - (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks) + c_1 + c_2 * two_64).data >> 128; - value_type c_3 = static_cast(second_row_carries & (two_64 - 1).data); + (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks) + c_1 + c_2 * two_64).data.base() >> 128; + value_type c_3 = static_cast(second_row_carries & (two_64 - 1).data.base()); value_type c_4 = static_cast(second_row_carries >> 64); std::vector c_3_chunks = chunk_64_to_16(c_3); // TODO: replace with memory access, which would also do range checks! @@ -195,9 +209,6 @@ namespace nil { } assignment.witness(witness_cols[chunk_amount], curr_row + 2) = c_2; assignment.witness(witness_cols[1 + chunk_amount], curr_row + 2) = c_4; - // reset the machine state; hope that we won't have to do this manually - stack.push(b); - stack.push(a); } std::size_t rows_amount() override { diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/mulmod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/mulmod.hpp new file mode 100644 index 0000000000..82815b2826 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/mulmod.hpp @@ -0,0 +1,661 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_mulmod_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + zkevm_mulmod_operation(){ + this->stack_input = 3; + this->stack_output = 1; + this->gas_cost = 8; + } + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 8); // corrected to allow 512-bit numbers + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + // a = b*r, a and r have 8 64-bit chunks, b has 4 64-bit chunks + template + T first_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + r_64_chunks[0] * b_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + r_64_chunks[1] * b_64_chunks[0]) + - a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + r_64_chunks[2] * b_64_chunks[0]) + + two_64 * (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0]) + - a_64_chunks[2] - two_64 * a_64_chunks[3]; + } + + template + T third_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1] + r_64_chunks[4] * b_64_chunks[0]) + + two_64 * (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2] + r_64_chunks[4] * b_64_chunks[1] + + r_64_chunks[5] * b_64_chunks[0]) + - a_64_chunks[4] - two_64 * a_64_chunks[5]; + } + + template + T forth_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return (r_64_chunks[3] * b_64_chunks[3] + r_64_chunks[4] * b_64_chunks[2] + + r_64_chunks[5] * b_64_chunks[1] + r_64_chunks[6] * b_64_chunks[0]) + + two_64 * (r_64_chunks[4] * b_64_chunks[3] + r_64_chunks[5] * b_64_chunks[2] + + r_64_chunks[6] * b_64_chunks[1] + r_64_chunks[7] * b_64_chunks[0]) + - a_64_chunks[6] - two_64 * a_64_chunks[7]; + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + + // The central relation is a * b = s = Nr + q, q < N. + // For N = 0 we should have q = 0, so we set a = 0 in that case + // + // Table layout: Internal row #: | External #: + // +--------------------------------+--------------------------------+---+-------+ + // | input_a | v |1/N| t | 7 | 0 + // +--------------------------------+--------------------------------+---+-------+ + // | N | q | | 6 | 1 + // +--------------------------------+--------------------------------+-----------+ + // | a | b | | 5 | 2 + // +------+--+------+--+------+--+--+--------------------------------+-----------+ + // | c1 |c2| c3 |c4| c5 |c6| | q | | 4 | 3 + // +------+--+------+--+------+--+--+--------------------------------+------+----+ + // | s' | s" | tNr' |tNr"| 3 | 4 + // +--------------------------------+--------------------------------+------+----+ + // | (Nr)' | (Nr)" | | 2 | 5 + // +--------------------------------+--------------------------------+-----------+ + // | r' | r" | | 1 | 6 + // +--------------------------------+------+--+------+--+------+--+--+-----------+ + // | N | c1 |c2| c3 |c4| c5 |c6| | | 0 | 7 + // +--------------------------------+------+--+------+--+------+--+--+-----------+ + + // constraint generators for carry-on addition + auto carry_on_addition_constraint = [](constraint_type a_0, constraint_type a_1, constraint_type a_2, + constraint_type b_0, constraint_type b_1, constraint_type b_2, + constraint_type r_0, constraint_type r_1, constraint_type r_2, + constraint_type last_carry, constraint_type result_carry, bool first_constraint = false) { + if (first_constraint) { + // no last carry for first constraint + return (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + return last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } + }; + auto last_carry_on_addition_constraint = [](constraint_type a_0, constraint_type b_0, constraint_type r_0, + constraint_type last_carry, constraint_type result_carry) { + return (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + }; + // constant constraints for future use + constraint_type c_zero, + c_one = c_zero + 1; + + // choose a between input_a and 0 according to N = 0 + std::size_t position_0 = 6; + std::vector input_a_chunks; + std::vector N_chunks_0; + std::vector a_chunks_0; + var N_sum_inverse_0 = var_gen(2*chunk_amount, -1); + for(std::size_t i = 0; i < chunk_amount; i++) { + input_a_chunks.push_back(var_gen(i, -1)); + N_chunks_0.push_back(var_gen(i, 0)); + a_chunks_0.push_back(var_gen(i, +1)); + } + + constraint_type N_sum_0; + for (std::size_t i = 0; i < chunk_amount; i++) { + N_sum_0 += N_chunks_0[i]; + } + constraint_type N_nonzero_0 = N_sum_0 * N_sum_inverse_0; + + for(std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_0, (a_chunks_0[i] - N_nonzero_0 * input_a_chunks[i])}); // a = 0 if N = 0 + } + // end of choosing a + + // prove that (q < N) or (N = 0) + // note that in the latter case we have q = a = 0, so a*b = Nr + q is satisfied + std::size_t position_1 = 7; + std::vector N_chunks_1; + std::vector q_chunks_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + N_chunks_1.push_back(var_gen(i, +1)); + q_chunks_1.push_back(var_gen(chunk_amount + i, +1)); + } + constraint_type N_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + N_sum_1 += N_chunks_1[i]; + } + + std::vector v_chunks_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + v_chunks_1.push_back(var_gen(chunk_amount + i, 0)); + } + + var N_sum_inverse_1 = var_gen(2*chunk_amount, 0); + // inverse for N_sum_inverse unless N_sum = 0 + constraints.push_back({position_1, N_sum_1 * (N_sum_inverse_1 * N_sum_1 - 1)}); + constraint_type N_nonzero_1 = N_sum_inverse_1 * N_sum_1; + + std::vector t; + for (std::size_t i = 0; i < carry_amount; i++) { + t.push_back(var_gen(2*chunk_amount + 1 + i, 0)); + } + + // q < N <=> N + v = q + 2^T, i.e. the last carry is 1. + // We use t to store the addition carries and enforce the above constraint + // if N != 0 + constraints.push_back({position_1, carry_on_addition_constraint(N_chunks_1[0], N_chunks_1[1], N_chunks_1[2], + v_chunks_1[0], v_chunks_1[1], v_chunks_1[2], + q_chunks_1[0], q_chunks_1[1], q_chunks_1[2], + t[0],t[0],true)}); + constraints.push_back({position_1, t[0] * (1 - t[0])}); // t[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_1, carry_on_addition_constraint( + N_chunks_1[3*i], N_chunks_1[3*i + 1], N_chunks_1[3*i + 2], + v_chunks_1[3*i], v_chunks_1[3*i + 1], v_chunks_1[3*i + 2], + q_chunks_1[3*i], q_chunks_1[3*i + 1], q_chunks_1[3*i + 2], + t[i-1],t[i])}); + constraints.push_back({position_1, t[i] * (1 - t[i])}); // t[i] is 0 or 1 + } + constraints.push_back({position_1, last_carry_on_addition_constraint( + N_chunks_1[3*(carry_amount-1)], + v_chunks_1[3*(carry_amount-1)], + q_chunks_1[3*(carry_amount-1)], + t[carry_amount - 2], t[carry_amount - 1])}); + // t[carry_amount-1] is 0 or 1, but should be 1 if N_nonzero = 1 + constraints.push_back({position_1, (N_nonzero_1 + (1 - N_nonzero_1)* t[carry_amount-1]) * (1 - t[carry_amount-1])}); + // end of q < N constraints + + // s = a * b constraints + std::size_t position_2 = 4; + std::vector a_chunks; + std::vector b_chunks; + std::vector s_chunks_2; + + for(std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + b_chunks.push_back(var_gen(chunk_amount + i, -1)); + s_chunks_2.push_back(var_gen(i, +1)); + } + for(std::size_t i = 0; i < chunk_amount; i++) { + s_chunks_2.push_back(var_gen(chunk_amount + i, +1)); + } + + std::vector s_c_1_chunks; + std::vector s_c_3_chunks; + std::vector s_c_5_chunks; + for(std::size_t i = 0; i < 4; i++) { + s_c_1_chunks.push_back(var_gen(i, 0)); + s_c_3_chunks.push_back(var_gen(5 + i, 0)); + s_c_5_chunks.push_back(var_gen(10 + i, 0)); + } + + var s_c_2 = var_gen(4, 0); + var s_c_4 = var_gen(9, 0); + var s_c_6 = var_gen(14, 0); + + std::vector s_64_chunks; + std::vector a_64_chunks; + std::vector b_64_chunks; + + for(std::size_t i = 0; i < 8; i++) { + s_64_chunks.push_back(chunk_sum_64(s_chunks_2,i)); + if (i < 4) { + a_64_chunks.push_back(chunk_sum_64(a_chunks,i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks,i)); + } else { + a_64_chunks.push_back(c_zero); + } + } + + constraint_type s_c_1_64 = chunk_sum_64(s_c_1_chunks, 0); + constraint_type s_c_3_64 = chunk_sum_64(s_c_3_chunks, 0); + constraint_type s_c_5_64 = chunk_sum_64(s_c_5_chunks, 0); + // prove that multiplication a * b = s is correct + constraint_type s_first_carryless = first_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + constraints.push_back({position_2, (s_first_carryless - s_c_1_64 * two128 - s_c_2 * two192)}); + + constraint_type s_second_carryless = second_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + constraints.push_back({position_2, (s_second_carryless + s_c_1_64 + s_c_2 * two_64 - s_c_3_64 * two128 - s_c_4 * two192)}); + + // add constraints for s_c_2/s_c_4/s_c_6: s_c_2 is 0/1, s_c_4 is 0/1/2/3, s_c_6 is 0/1 + constraints.push_back({position_2, s_c_2 * (s_c_2 - 1)}); + constraints.push_back({position_2, s_c_4 * (s_c_4 - 1) * (s_c_4 - 2) * (s_c_4 - 3)}); + constraints.push_back({position_2, s_c_6 * (s_c_6 - 1)}); + + constraint_type s_third_carryless = third_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + constraints.push_back({position_2, (s_third_carryless + s_c_3_64 + s_c_4 * two_64 - s_c_5_64 * two128 - s_c_6 * two192)}); + + constraint_type s_forth_carryless = forth_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + constraints.push_back({position_2, (s_forth_carryless + s_c_5_64 + s_c_6 * two_64)}); + // end of s = a * b constraints + + // assure copies of q are equal + std::size_t position_3 = 5; + std::vector q_upper_copy; + std::vector q_lower_copy; + for(std::size_t i = 0; i < chunk_amount; i++) { + q_upper_copy.push_back(var_gen(chunk_amount + i, -1)); + q_lower_copy.push_back(var_gen(chunk_amount + i, +1)); + } + for(std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_3, (q_upper_copy[i] - q_lower_copy[i])}); + } + // end of copy constraints for q + + // s = Nr + q constraints + std::size_t position_4 = 3; + std::vector sp_chunks_4; + std::vector spp_chunks_4; + std::vector tNrp; + std::vector tNrpp; + std::vector q_chunks_4; + std::vector Nr_p_chunks_4; + std::vector Nr_pp_chunks_4; + + for(std::size_t i = 0; i < chunk_amount; i++) { + sp_chunks_4.push_back(var_gen(i, 0)); + spp_chunks_4.push_back(var_gen(chunk_amount + i, 0)); + q_chunks_4.push_back(var_gen(chunk_amount + i, -1)); + Nr_p_chunks_4.push_back(var_gen(i, +1)); + Nr_pp_chunks_4.push_back(var_gen(chunk_amount + i, +1)); + } + for(std::size_t i = 0; i < carry_amount - 1; i++) { + tNrp.push_back(var_gen(2*chunk_amount + i, 0)); + tNrpp.push_back(var_gen(2*chunk_amount + carry_amount + i, 0)); + } + tNrp.push_back(var_gen(2*chunk_amount + carry_amount - 1, 0)); // only the first part has the overflow carry + + constraints.push_back({position_4, carry_on_addition_constraint(Nr_p_chunks_4[0], Nr_p_chunks_4[1], Nr_p_chunks_4[2], + q_chunks_4[0], q_chunks_4[1], q_chunks_4[2], + sp_chunks_4[0], sp_chunks_4[1], sp_chunks_4[2], + tNrp[0],tNrp[0],true)}); + constraints.push_back({position_4, tNrp[0] * (1 - tNrp[0])}); // tNrp[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_4, carry_on_addition_constraint( + Nr_p_chunks_4[3*i], Nr_p_chunks_4[3*i + 1], Nr_p_chunks_4[3*i + 2], + q_chunks_4[3*i], q_chunks_4[3*i + 1], q_chunks_4[3*i + 2], + sp_chunks_4[3*i], sp_chunks_4[3*i + 1], sp_chunks_4[3*i + 2], + tNrp[i-1],tNrp[i])}); + constraints.push_back({position_4, tNrp[i] * (1 - tNrp[i])}); // tNrp[i] is 0 or 1 + } + constraints.push_back({position_4, last_carry_on_addition_constraint( + Nr_p_chunks_4[3*(carry_amount-1)], + q_chunks_4[3*(carry_amount-1)], + sp_chunks_4[3*(carry_amount-1)], + tNrp[carry_amount - 2], tNrp[carry_amount - 1])}); + constraints.push_back({position_4, tNrp[carry_amount - 1]*(1 - tNrp[carry_amount - 1])}); + // tNrp[carry_amount - 1] is 0 or 1 + + constraints.push_back({position_4, carry_on_addition_constraint(Nr_pp_chunks_4[0], Nr_pp_chunks_4[1], Nr_pp_chunks_4[2], + tNrp[carry_amount - 1], c_zero, c_zero, + spp_chunks_4[0], spp_chunks_4[1], spp_chunks_4[2], + tNrpp[0],tNrpp[0],true)}); + constraints.push_back({position_4, tNrpp[0] * (1 - tNrpp[0])}); // tNrpp[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_4, carry_on_addition_constraint( + Nr_pp_chunks_4[3*i], Nr_pp_chunks_4[3*i + 1], Nr_pp_chunks_4[3*i + 2], + c_zero, c_zero, c_zero, + spp_chunks_4[3*i], spp_chunks_4[3*i + 1], spp_chunks_4[3*i + 2], + tNrpp[i-1],tNrpp[i])}); + constraints.push_back({position_4, tNrpp[i] * (1 - tNrpp[i])}); // tNrpp[i] is 0 or 1 + } + constraints.push_back({position_4, last_carry_on_addition_constraint( + Nr_pp_chunks_4[3*(carry_amount-1)], + c_zero, + spp_chunks_4[3*(carry_amount-1)], + tNrpp[carry_amount - 2], c_zero)}); + // tNrpp[carry_amount - 1] is always 0, so instead we put c_zero + // end of s = Nr + q constraints + + // the section where we prove Nr = N * r + std::size_t position_5 = 1; + std::vector Nr_chunks_5; + std::vector r_chunks_5; + std::vector N_chunks_5; + for(std::size_t i = 0; i < 2*chunk_amount; i++) { + Nr_chunks_5.push_back(var_gen(i, -1)); + r_chunks_5.push_back(var_gen(i, 0)); + if (i < chunk_amount) { + N_chunks_5.push_back(var_gen(i, +1)); + } + } + + std::vector c_1_chunks; + std::vector c_3_chunks; + std::vector c_5_chunks; + for(std::size_t i = 0; i < 4; i++) { + c_1_chunks.push_back(var_gen(chunk_amount + i, +1)); + c_3_chunks.push_back(var_gen(chunk_amount + 5 + i, +1)); + c_5_chunks.push_back(var_gen(chunk_amount + 10 + i, +1)); + } + + var c_2 = var_gen(chunk_amount + 4, +1); + var c_4 = var_gen(chunk_amount + 9, +1); + var c_6 = var_gen(chunk_amount + 14, +1); + + std::vector Nr_64_chunks; + std::vector r_64_chunks; + std::vector N_64_chunks; + + for(std::size_t i = 0; i < 8; i++) { + Nr_64_chunks.push_back(chunk_sum_64(Nr_chunks_5,i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks_5,i)); + if (i < 4) { + N_64_chunks.push_back(chunk_sum_64(N_chunks_5,i)); + } + } + constraint_type c_1_64 = chunk_sum_64(c_1_chunks, 0); + constraint_type c_3_64 = chunk_sum_64(c_3_chunks, 0); + constraint_type c_5_64 = chunk_sum_64(c_5_chunks, 0); + // prove that multiplication N * r = Nr is correct + constraint_type first_carryless = first_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks); + constraints.push_back({position_5, (first_carryless - c_1_64 * two128 - c_2 * two192)}); + + constraint_type second_carryless = second_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks); + constraints.push_back({position_5, (second_carryless + c_1_64 + c_2 * two_64 - c_3_64 * two128 - c_4 * two192)}); + + // add constraints for c_2/c_4: c_2 is 0/1, c_4, c_6 is 0/1/2/3 + constraints.push_back({position_5, c_2 * (c_2 - 1)}); + constraints.push_back({position_5, c_4 * (c_4 - 1) * (c_4 - 2) * (c_4 - 3)}); + constraints.push_back({position_5, c_6 * (c_6 - 1) * (c_6 - 2) * (c_6 - 3)}); + + constraint_type third_carryless = third_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks); + constraints.push_back({position_5, (third_carryless + c_3_64 + c_4 * two_64 - c_5_64 * two128 - c_6 * two192)}); + + constraint_type forth_carryless = forth_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks); + constraints.push_back({position_5, (forth_carryless + c_5_64 + c_6 * two_64)}); + // end of Nr = N * r constraints + + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<512>; + + word_type input_a = machine.stack_top(); + word_type b = machine.stack_top(1); + word_type N = machine.stack_top(2); + + word_type a = N != 0u ? input_a : 0; + + extended_integral_type s_integral = extended_integral_type(integral_type(a)) * extended_integral_type(integral_type(b)); + + word_type sp = word_type(s_integral % extended_integral_type(zkevm_modulus)); + word_type spp = word_type(s_integral / extended_integral_type(zkevm_modulus)); + + extended_integral_type r_integral = N != 0u ? s_integral / extended_integral_type(integral_type(N)) : 0u; + word_type rp = word_type(r_integral % extended_integral_type(zkevm_modulus)); + word_type rpp = word_type(r_integral / extended_integral_type(zkevm_modulus)); + + word_type q = N != 0u ? word_type(s_integral % extended_integral_type(integral_type(N))) : 0u; + + extended_integral_type Nr_integral = s_integral - extended_integral_type(integral_type(q)); + word_type Nr_p = word_type(Nr_integral % extended_integral_type(zkevm_modulus)); + word_type Nr_pp = word_type(Nr_integral / extended_integral_type(zkevm_modulus)); + + bool t_last = integral_type(q) < integral_type(N); + word_type v = word_type(integral_type(q) + integral_type(t_last)*zkevm_modulus - integral_type(N)); + + word_type result = q; + + const std::vector v_chunks = zkevm_word_to_field_element(v); + const std::vector N_chunks = zkevm_word_to_field_element(N); + const std::vector q_chunks = zkevm_word_to_field_element(q); + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector input_a_chunks = zkevm_word_to_field_element(input_a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector sp_chunks = zkevm_word_to_field_element(sp); + const std::vector spp_chunks = zkevm_word_to_field_element(spp); + const std::vector rp_chunks = zkevm_word_to_field_element(rp); + const std::vector rpp_chunks = zkevm_word_to_field_element(rpp); + const std::vector Nr_p_chunks = zkevm_word_to_field_element(Nr_p); + const std::vector Nr_pp_chunks = zkevm_word_to_field_element(Nr_pp); + + const std::size_t chunk_amount = sp_chunks.size(); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + + // note that we don't assign 64-chunks for s/N, as we can build them from 16-chunks with constraints + // under the same logic we only assign the 16-bit chunks for carries + std::vector a_64_chunks, b_64_chunks, s_64_chunks, N_64_chunks, r_64_chunks, Nr_64_chunks; + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + s_64_chunks.push_back(chunk_sum_64(sp_chunks, i)); + N_64_chunks.push_back(chunk_sum_64(N_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(rp_chunks, i)); + Nr_64_chunks.push_back(chunk_sum_64(Nr_p_chunks, i)); + } + for (std::size_t i = 0; i < 4; i++) { // for 512-bit integers 64-bit chunks go on + a_64_chunks.push_back(0); // artificially extend a_64_chunks to a 512-bit number representation + s_64_chunks.push_back(chunk_sum_64(spp_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(rpp_chunks, i)); + Nr_64_chunks.push_back(chunk_sum_64(Nr_pp_chunks, i)); + } + + // computation of s = a*b product + auto s_first_row_carries = + first_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks).data.base() >> 128; + value_type s_c_1 = static_cast(s_first_row_carries & (two_64 - 1).data.base()); + value_type s_c_2 = static_cast(s_first_row_carries >> 64); + std::vector s_c_1_chunks = chunk_64_to_16(s_c_1); + // no need for c_2 chunks as there is only a single chunk + auto s_second_row_carries = + (second_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks) + + s_c_1 + s_c_2 * two_64).data.base() >> 128; + value_type s_c_3 = static_cast(s_second_row_carries & (two_64 - 1).data.base()); + value_type s_c_4 = static_cast(s_second_row_carries >> 64); + std::vector s_c_3_chunks = chunk_64_to_16(s_c_3); + auto s_third_row_carries = + (third_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks) + + s_c_3 + s_c_4 * two_64).data.base() >> 128; + value_type s_c_5 = static_cast(s_third_row_carries & (two_64 - 1).data.base()); + value_type s_c_6 = static_cast(s_third_row_carries >> 64); + std::vector s_c_5_chunks = chunk_64_to_16(s_c_5); + + // computation of N*r product + // caluclate first row carries + auto first_row_carries = + first_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + value_type c_2 = static_cast(first_row_carries >> 64); + std::vector c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + auto second_row_carries = + (second_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks) + + c_1 + c_2 * two_64).data.base() >> 128; + value_type c_3 = static_cast(second_row_carries & (two_64 - 1).data.base()); + value_type c_4 = static_cast(second_row_carries >> 64); + std::vector c_3_chunks = chunk_64_to_16(c_3); + auto third_row_carries = + (third_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks) + + c_3 + c_4 * two_64).data.base() >> 128; + value_type c_5 = static_cast(third_row_carries & (two_64 - 1).data.base()); + value_type c_6 = static_cast(third_row_carries >> 64); + std::vector c_5_chunks = chunk_64_to_16(c_5); + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[chunk_amount + i], curr_row) = v_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = input_a_chunks[i]; + } + value_type N_sum = std::accumulate(N_chunks.begin(), N_chunks.end(), value_type(0)); + assignment.witness(witness_cols[2*chunk_amount], curr_row) = N_sum == 0 ? 0 : N_sum.inversed(); + + bool carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + N_chunks[3 * i ] + v_chunks[3 * i ] + + (N_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (N_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[2*chunk_amount + 1 + i], curr_row) = carry; + } + carry = (carry + N_chunks[3 * (carry_amount - 1)] + v_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[2*chunk_amount + 1 + carry_amount - 1], curr_row) = carry; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 1) = N_chunks[i]; //TODO this has to be lookup-constrained with RW-table + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 1) = q_chunks[i]; + assignment.witness(witness_cols[i + chunk_amount], curr_row + 3) = q_chunks[i]; + } + + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = a_chunks[i]; + assignment.witness(witness_cols[chunk_amount + i], curr_row + 2) = b_chunks[i]; + assignment.witness(witness_cols[i], curr_row + 4) = sp_chunks[i]; + assignment.witness(witness_cols[chunk_amount + i], curr_row + 4) = spp_chunks[i]; + } + // s = a * b carries + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i], curr_row + 3) = s_c_1_chunks[i]; + assignment.witness(witness_cols[5 + i], curr_row + 3) = s_c_3_chunks[i]; + assignment.witness(witness_cols[10 + i], curr_row + 3) = s_c_5_chunks[i]; + } + assignment.witness(witness_cols[4], curr_row + 3) = s_c_2; + assignment.witness(witness_cols[9], curr_row + 3) = s_c_4; + assignment.witness(witness_cols[14], curr_row + 3) = s_c_6; + + // s = Nr + q carries + carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + Nr_p_chunks[3 * i ] + q_chunks[3 * i ] + + (Nr_p_chunks[3 * i + 1] + q_chunks[3 * i + 1]) * two_16 + + (Nr_p_chunks[3 * i + 2] + q_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[2*chunk_amount + i], curr_row + 4) = carry; + } + carry = (carry + Nr_p_chunks[3 * (carry_amount - 1)] + q_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[2*chunk_amount + carry_amount - 1], curr_row + 4) = carry; + bool Nrpp_add = carry; + carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + Nr_pp_chunks[3 * i ] + (i == 0)*Nrpp_add + + Nr_pp_chunks[3 * i + 1] * two_16 + + Nr_pp_chunks[3 * i + 2] * two_32 ) >= two_48; + assignment.witness(witness_cols[2*chunk_amount + carry_amount + i], curr_row + 4) = carry; + } + carry = (carry + Nr_pp_chunks[3 * (carry_amount - 1)]) >= two_16; + // ^^^^ normally should be zero, so we don't store it + BOOST_ASSERT(carry == 0); + // end of s = Nr + q carries + + for(std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 5) = Nr_p_chunks[i]; + assignment.witness(witness_cols[chunk_amount + i], curr_row + 5) = Nr_pp_chunks[i]; + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 6) = rp_chunks[i]; + assignment.witness(witness_cols[chunk_amount + i], curr_row + 6) = rpp_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 7) = N_chunks[i]; + } + + // N*r carries + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 7) = c_1_chunks[i]; + assignment.witness(witness_cols[5 + i + chunk_amount], curr_row + 7) = c_3_chunks[i]; + assignment.witness(witness_cols[10 + i + chunk_amount], curr_row + 7) = c_5_chunks[i]; + } + assignment.witness(witness_cols[4 + chunk_amount], curr_row + 7) = c_2; + assignment.witness(witness_cols[9 + chunk_amount], curr_row + 7) = c_4; + assignment.witness(witness_cols[14 + chunk_amount], curr_row + 7) = c_6; + } + + std::size_t rows_amount() override { + return 8; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/not.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/not.hpp new file mode 100644 index 0000000000..4d3ca8a780 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/not.hpp @@ -0,0 +1,159 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_not_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_not_operation() { + this->stack_input = 1; + this->stack_output = 1; + } + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type ffff = two_16 - 1; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + + std::size_t position = 0; + auto constraint_gen = [&constraints, &position] + (var a_0, var a_1, var a_2, + var b_0, var b_1, var b_2, + var last_carry, var result_carry, bool first_constraint = false) { + if (first_constraint) { + // no last carry for first constraint + constraints.push_back({ position, ( + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - ffff - ffff * two_16 - ffff * two_32 - result_carry * two_48)}); + } else { + constraints.push_back({ position, ( + last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - ffff - ffff * two_16 - ffff * two_32 - result_carry * two_48)}); + } + constraints.push_back({position, result_carry * (result_carry - 1)}); + }; + auto last_constraint_gen = [&constraints, &position] + (var a_0, var b_0, var last_carry, var result_carry) { + constraints.push_back({ position, (last_carry + a_0 + b_0 - ffff - result_carry * two_16)}); + constraints.push_back({ position, result_carry * (result_carry - 1)}); + }; + std::vector a_chunks; + std::vector b_chunks; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + b_chunks.push_back(var_gen(i, 0)); + } + std::vector r_carry; + for (std::size_t i = 0; i < carry_amount; i++) { + r_carry.push_back(var_gen(i + chunk_amount, -1)); + } + // special first constraint + constraint_gen(a_chunks[0], a_chunks[1], a_chunks[2], + b_chunks[0], b_chunks[1], b_chunks[2], + r_carry[0], r_carry[0], true); + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraint_gen(a_chunks[3 * i], a_chunks[3 * i + 1], a_chunks[3 * i + 2], + b_chunks[3 * i], b_chunks[3 * i + 1], b_chunks[3 * i + 2], + r_carry[i - 1], r_carry[i]); + } + last_constraint_gen(a_chunks[3 * (carry_amount - 1)], b_chunks[3 * (carry_amount - 1)], + r_carry[carry_amount - 2], r_carry[carry_amount - 1]); + + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + word_type a = machine.stack_top(); + word_type result = word_type((~integral_type(a)) % zkevm_modulus); + + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(result); + + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + // TODO: replace with memory access, which would also do range checks + for (std::size_t i = 0; i < a_chunks.size(); i++) { + assignment.witness(witness_cols[i], curr_row) = a_chunks[i]; + } + for (std::size_t i = 0; i < b_chunks.size(); i++) { + assignment.witness(witness_cols[i], curr_row + 1) = b_chunks[i]; + } + // we might want to pack carries more efficiently? + bool carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + a_chunks[3 * i ] + b_chunks[3 * i ] + + (a_chunks[3 * i + 1] + b_chunks[3 * i + 1]) * two_16 + + (a_chunks[3 * i + 2] + b_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[i + a_chunks.size()], curr_row + 1) = carry; + } + carry = (carry + a_chunks[3 * (carry_amount - 1)] + b_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[a_chunks.size() + carry_amount - 1], curr_row + 1) = carry; + } + + std::size_t rows_amount() override { + return 2; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/padding.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/padding.hpp new file mode 100644 index 0000000000..540e34208d --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/padding.hpp @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_padding_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_padding_operation() { + this->gas_cost = 0; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_circuit_type &zkevm_circuit) {} + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + } + + std::size_t rows_amount() override { + return 1; + } + + constraint_type pc_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/pop.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/pop.hpp new file mode 100644 index 0000000000..1e3fc98a83 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/pop.hpp @@ -0,0 +1,82 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_pop_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_pop_operation() { + this->stack_input = 1; + this->stack_output = 0; + this->gas_cost = 2; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for POP" << std::endl; + } + + std::size_t rows_amount() override { + return 1; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/pushx.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/pushx.hpp new file mode 100644 index 0000000000..2997486386 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/pushx.hpp @@ -0,0 +1,138 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_pushx_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_pushx_operation(std::size_t _x) : byte_count(_x) { + this->pc_gap = _x + 1; + this->stack_input = 0; + this->stack_output = 1; + if(_x == 0) this->gas_cost = 2; + BOOST_ASSERT(_x < 33); // the maximum push is 32 bytes + } + + std::size_t byte_count; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override + { + const auto& state = zkevm_circuit.get_state(); + std::vector> constraints; + std::vector> lookup_constraints; + + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + + // Table layout Row # + // +---------+--------+------------------+---------------------+ + // | bytes |b0 | b1 | b2 | ... | b31 | + // +---------+--------+------------------+---------------------+ + // | bytes |255 - b0| 255 - b1 | 255 - b2 | ... | 255 -b31 | + // +---------+--------+------------------+---------------------+ + + std::size_t position = 1; + + // this will need dynamic lookups into bytecode and memory circuits, but for now we just check + // Only bytes after byte_count may be non-zero + + for(std::size_t i = 0; i < 32 - byte_count; i++) { + constraints.push_back({position, var_gen(i)}); + constraints.push_back({position, var_gen(i) + var_gen(i, +1) - 255}); // Byte range check + } + + // For other bytes + for(std::size_t i = 32-byte_count; i < 32; i++) { + constraints.push_back({position, var_gen(i) + var_gen(i, +1) - 255}); // Byte range check + lookup_constraints.push_back({ position, {zkevm_circuit.get_bytecode_table_id(), { + var_gen(i) - var_gen(i) + 1, + state.pc() + i - (32 - byte_count) + 1, + var_gen(i), + var_gen(i) - var_gen(i), + state.bytecode_hash_hi(), + state.bytecode_hash_lo() + }}}); + } + + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments( + zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine, zkevm_word_type bytecode_input + ) { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + zkevm_word_type a = word_type(integral_type(bytecode_input) & + ((integral_type(1) << (8*byte_count)) - 1)); // use only byte_count lowest bytes + + const std::array bytes = w_to_8(a); + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + + for (std::size_t i = 0; i < 32; i++) { + assignment.witness(witness_cols[i], curr_row) = bytes[i]; + assignment.witness(witness_cols[i], curr_row + 1) = 255 - bytes[i]; // For range-checking + } + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + generate_assignments(zkevm_table, machine, 0); + } + + std::size_t rows_amount() override { + return 2; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/return.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/return.hpp new file mode 100644 index 0000000000..98df585720 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/return.hpp @@ -0,0 +1,96 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_return_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_return_operation() { + this->stack_input = 2; + this->gas_cost = 0; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for RETURN" << std::endl; + } + + constraint_type pc_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + + constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + + constraint_type stack_size_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + return c; + } + + std::size_t rows_amount() override { + return 1; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/sar.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/sar.hpp new file mode 100644 index 0000000000..61070dee06 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/sar.hpp @@ -0,0 +1,608 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_sar_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + zkevm_sar_operation(){ + this->stack_input = 2; + this->stack_output = 1; + } + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) + - a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct( + const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + std::vector> lookup_constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + const std::size_t range_check_table_index = zkevm_circuit.get_reserved_indices().at("chunk_16_bits/full"); + + // constraint generators for carry-on addition + auto carry_on_addition_constraint = [](constraint_type a_0, constraint_type a_1, constraint_type a_2, + constraint_type b_0, constraint_type b_1, constraint_type b_2, + constraint_type r_0, constraint_type r_1, constraint_type r_2, + constraint_type last_carry, constraint_type result_carry, bool first_constraint = false) { + if (first_constraint) { + // no last carry for first constraint + return (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + return last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } + }; + auto last_carry_on_addition_constraint = [](constraint_type a_0, constraint_type b_0, constraint_type r_0, + constraint_type last_carry, constraint_type result_carry) { + return (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + }; + + // The central relation is |a| = b|r| + q, q < b. + // For b = 0 we must assure |r| = 0. + // We choose r so that sgn(r) = sgn(a), except when r = 0. In that case, if a < 0, we take r = -1 + // + // Table layout: Internal row #: + // +--------------------------------+--+--+----+---+----+------------+---+------------+ + // | result |ax|a-| ta | | tr | |1/R| | 6 + // +--------------------------------+--+--+----+---+----+------------+---+------------+ + // | input_a | r | | 5 + // +--------------------------------+--------+--+--------------------+---+------------+ + // | a = |input_a| | c1 |c2| |1/B| | 4 + // +--------------------------------+--------+--+--------------------+---+------------+ + // | r | q | | 3 + // +--------------------------------+--------------------------------+--+--+----------+ + // | b | v |I1|I2| | 2 + // +--------------------------------+---+---+----+-----+-+--+-------++--+--+----------+ + // | input_b |b0'|b0"|b0"'| |z|tp| t || (j - b0')^{-1} | 1 + // +--------------------------------+---+---+----+-----+-+--+-------++----------------+ + // | | | (j - b0")^{-1} | 0 + // +--------------------------------+--------------------------------+----------------+ + + std::size_t position_0 = 4; + std::vector result_chunks; + std::vector input_a_chunks_0; + std::vector r_chunks_0; + std::vector a_chunks_0; + for(std::size_t i = 0; i < chunk_amount; i++) { + result_chunks.push_back(var_gen(i, -1)); + input_a_chunks_0.push_back(var_gen(i, 0)); + r_chunks_0.push_back(var_gen(chunk_amount + i, 0)); + a_chunks_0.push_back(var_gen(i, +1)); + } + + var input_a_top = input_a_chunks_0[chunk_amount - 1], + a_aux = var_gen(chunk_amount, -1), + a_neg = var_gen(chunk_amount + 1, -1); + value_type two_15 = 32768; + // a_top + 2^15 = a_aux + 2^16 * a_neg + constraints.push_back({position_0, a_neg * (1-a_neg)}); + constraints.push_back({position_0, (input_a_top + two_15 - two_16 * a_neg - a_aux)}); + + constraint_type c_zero, + c_one = c_zero + 1; + std::vector ta; + for(std::size_t i = 0; i < carry_amount - 1; i++) { + ta.push_back(var_gen(chunk_amount + 2 + i, -1)); + } + // constraints for input_a + |input_a| = 2^256 only for negative input_a, i.e. a_neg = 1 + constraints.push_back({position_0, a_neg * carry_on_addition_constraint( + input_a_chunks_0[0] + 0, input_a_chunks_0[1] + 0, input_a_chunks_0[2] + 0, + a_chunks_0[0] + 0, a_chunks_0[1] + 0, a_chunks_0[2] + 0, + c_zero, c_zero, c_zero, + ta[0] + 0,ta[0] + 0,true)}); + constraints.push_back({position_0, a_neg * ta[0] * (1 - ta[0])}); // ta[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_0, a_neg * carry_on_addition_constraint( + input_a_chunks_0[3*i] + 0, input_a_chunks_0[3*i + 1] + 0, input_a_chunks_0[3*i + 2] + 0, + a_chunks_0[3*i] + 0, a_chunks_0[3*i + 1] + 0, a_chunks_0[3*i + 2] + 0, + c_zero, c_zero, c_zero, + ta[i-1] + 0,ta[i] + 0)}); + constraints.push_back({position_0, a_neg * ta[i] * (1 - ta[i])}); // ta[i] is 0 or 1 + } + constraints.push_back({position_0, a_neg * last_carry_on_addition_constraint( + input_a_chunks_0[3*(carry_amount-1)] + 0, + a_chunks_0[3*(carry_amount-1)] + 0, + c_zero, ta[carry_amount - 2] + 0, c_one)}); + // ^^^ if ever input_a + |input_a| = 2^256 is used, the last carry should be 1 since it is actually an overflow + // if a_neg = 0, we should have input_a = a + for(std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_0, (1 - a_neg) * (input_a_chunks_0[i] - a_chunks_0[i])}); + } + + var r_sum_inv = var_gen(2*chunk_amount, -1); + constraint_type r_sum_0; + for(std::size_t i = 0; i < chunk_amount; i++) { + r_sum_0 += r_chunks_0[i]; + } + constraints.push_back({position_0, r_sum_0 * (1 - r_sum_0 * r_sum_inv)}); + + std::vector tr; + for(std::size_t i = 0; i < carry_amount - 1; i++) { + tr.push_back(var_gen(chunk_amount + 2 + carry_amount + i, -1)); + } + + // constraints for result + r = 2^256 only for negative input_a, i.e. a_neg = 1 and r != 0, i.e. r_sum_0 != 0 + constraints.push_back({position_0, a_neg * r_sum_0 * carry_on_addition_constraint( + result_chunks[0] + 0, result_chunks[1] + 0, result_chunks[2] + 0, + r_chunks_0[0] + 0, r_chunks_0[1] + 0, r_chunks_0[2] + 0, + c_zero, c_zero, c_zero, + tr[0] + 0,tr[0] + 0,true)}); + constraints.push_back({position_0, a_neg * r_sum_0 * tr[0] * (1 - tr[0])}); // tr[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_0, a_neg * r_sum_0 * carry_on_addition_constraint( + result_chunks[3*i] + 0, result_chunks[3*i + 1] + 0, result_chunks[3*i + 2] + 0, + r_chunks_0[3*i] + 0, r_chunks_0[3*i + 1] + 0, r_chunks_0[3*i + 2] + 0, + c_zero, c_zero, c_zero, + tr[i-1] + 0,tr[i] + 0)}); + constraints.push_back({position_0, a_neg * r_sum_0 * tr[i] * (1 - tr[i])}); // tr[i] is 0 or 1 + } + constraints.push_back({position_0, a_neg * r_sum_0 * last_carry_on_addition_constraint( + result_chunks[3*(carry_amount-1)] + 0, + r_chunks_0[3*(carry_amount-1)] + 0, + c_zero, tr[carry_amount - 2] + 0, c_one)}); + // ^^^ if ever result + r = 2^256 is used, the last carry should be 1 since it is actually an overflow + // if a_neg = 0, we should have result = r, if a_neg = 1 and r_sum_0 = 0 we should have result = 2^257 - 1, + // i.e. every chunk of result should be 2^16 - 1 + for(std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_0, ((1 - a_neg) * (result_chunks[i] - r_chunks_0[i]) + + a_neg *(1 - r_sum_0 * r_sum_inv)*(two_16 - 1 - result_chunks[i]))}); + } + + std::size_t position_05 = 3; + for(std::size_t i = 0; i < chunk_amount; i++) { + var rc = var_gen(i,+1), + rcc = var_gen(chunk_amount + i, -1); + constraints.push_back({position_05, (rc - rcc)}); + } + + std::size_t position_1 = 2; + std::vector a_chunks; + std::vector b_chunks_1; + // we have two different constraints at two different positions + // first we prove division or zero + std::vector r_chunks_1; + std::vector q_chunks_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + r_chunks_1.push_back(var_gen(i, 0)); + b_chunks_1.push_back(var_gen(i, +1)); + q_chunks_1.push_back(var_gen(i + chunk_amount, 0)); + } + + std::vector c_1_chunks; + for (std::size_t i = chunk_amount; i < chunk_amount + 4; i++) { + c_1_chunks.push_back(var_gen(i, -1)); + } + + var c_2 = var_gen(chunk_amount + 4, -1); + var b_sum_inverse_1 = var_gen(2*chunk_amount, -1); + + std::vector a_64_chunks = { + chunk_sum_64(a_chunks, 0), + chunk_sum_64(a_chunks, 1), + chunk_sum_64(a_chunks, 2), + chunk_sum_64(a_chunks, 3) + }; + std::vector b_64_chunks_1 = { + chunk_sum_64(b_chunks_1, 0), + chunk_sum_64(b_chunks_1, 1), + chunk_sum_64(b_chunks_1, 2), + chunk_sum_64(b_chunks_1, 3) + }; + std::vector r_64_chunks_1 = { + chunk_sum_64(r_chunks_1, 0), + chunk_sum_64(r_chunks_1, 1), + chunk_sum_64(r_chunks_1, 2), + chunk_sum_64(r_chunks_1, 3) + }; + std::vector q_64_chunks_1 = { + chunk_sum_64(q_chunks_1, 0), + chunk_sum_64(q_chunks_1, 1), + chunk_sum_64(q_chunks_1, 2), + chunk_sum_64(q_chunks_1, 3) + }; + constraint_type c_1_64 = chunk_sum_64(c_1_chunks, 0); + // inverse or zero for b_sum_inverse + constraint_type b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_sum_1 += b_chunks_1[i]; + } + constraints.push_back({position_1, b_sum_inverse_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + constraints.push_back({position_1, b_sum_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + // prove that the multiplication + addition is correct + constraint_type first_carryless = first_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (first_carryless - c_1_64 * two128 - c_2 * two192)}); + + constraint_type second_carryless = second_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (second_carryless + c_1_64 + c_2 * two_64)}); + // add constraints: c_2 is 0/1 + constraints.push_back({position_1, c_2 * (c_2 - 1)}); + + constraint_type third_carryless = third_carryless_construct(b_64_chunks_1, r_64_chunks_1); + constraints.push_back({position_1, third_carryless}); + constraints.push_back({position_1, b_64_chunks_1[3] * r_64_chunks_1[3]}); // forth_carryless + + // force r = 0 if b = 0 + constraint_type b_zero = 1 - b_sum_inverse_1 * b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_1, b_zero * r_chunks_1[i]}); + } + + // prove that (q < b) or (b = r = 0) + // note that in the latter case we have q = a to satisfy a = br + q + std::size_t position_2 = 1; + std::vector b_chunks_2; + std::vector q_chunks_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_chunks_2.push_back(var_gen(i, 0)); + } + for (std::size_t i = chunk_amount; i < 2 * chunk_amount; i++) { + q_chunks_2.push_back(var_gen(i, -1)); + } + std::vector v_chunks_2; + std::vector t; + for (std::size_t i = 0; i < chunk_amount; i++) { + v_chunks_2.push_back(var_gen(chunk_amount + i, 0)); + } + + for (std::size_t i = chunk_amount + 7; i < chunk_amount + 7 + carry_amount; i++) { + t.push_back(var_gen(i, +1)); + } + var z_var_2 = var_gen(chunk_amount + 5, +1); + + // q < b <=> b + v = q + 2^T, i.e. the last carry is 1. + // We use t to store the addition carries and enforce the above constraint + // if b != 0 + constraints.push_back({position_2, carry_on_addition_constraint(b_chunks_2[0], b_chunks_2[1], b_chunks_2[2], + v_chunks_2[0], v_chunks_2[1], v_chunks_2[2], + q_chunks_2[0], q_chunks_2[1], q_chunks_2[2], + t[0],t[0],true)}); + constraints.push_back({position_2, t[0] * (1 - t[0])}); // t[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_2, carry_on_addition_constraint( + b_chunks_2[3*i], b_chunks_2[3*i + 1], b_chunks_2[3*i + 2], + v_chunks_2[3*i], v_chunks_2[3*i + 1], v_chunks_2[3*i + 2], + q_chunks_2[3*i], q_chunks_2[3*i + 1], q_chunks_2[3*i + 2], + t[i-1],t[i])}); + constraints.push_back({position_2, t[i] * (1 - t[i])}); // t[i] is 0 or 1 + } + constraints.push_back({position_2, last_carry_on_addition_constraint( + b_chunks_2[3*(carry_amount-1)], + v_chunks_2[3*(carry_amount-1)], + q_chunks_2[3*(carry_amount-1)], + t[carry_amount - 2], t[carry_amount - 1])}); + // t[carry_amount-1] is 0 or 1, but should be 1 if z_var_2 = 1 + constraints.push_back({position_2, (z_var_2 + (1 - z_var_2)* t[carry_amount-1]) * (1 - t[carry_amount-1])}); + + std::size_t position_3 = 1; + std::vector input_b_chunks; + std::vector indic_1; + std::vector indic_2; + std::vector b_chunks_3; + for(std::size_t i = 0; i < chunk_amount; i++) { + b_chunks_3.push_back(var_gen(i, 0)); + input_b_chunks.push_back(var_gen(i, +1)); + indic_1.push_back(var_gen(2*chunk_amount + i, +1)); + indic_2.push_back(var_gen(2*chunk_amount + i, -1)); + } + var b0p_var = var_gen(chunk_amount, +1), + b0pp_var = var_gen(chunk_amount + 1, +1), + b0ppp_var = var_gen(chunk_amount + 2, +1), + I1_var = var_gen(2*chunk_amount, 0), + I2_var = var_gen(2*chunk_amount + 1, 0), + z_var = var_gen(chunk_amount + 5, +1), + tp_var = var_gen(chunk_amount + 6, +1); + + // lookup constrain b0p < 16, b0pp < 16, b0ppp < 256 + lookup_constraints.push_back({position_3, {range_check_table_index, {4096 * b0p_var}}}); + lookup_constraints.push_back({position_3, {range_check_table_index, {4096 * b0pp_var}}}); + lookup_constraints.push_back({position_3, {range_check_table_index, {256 * b0ppp_var}}}); + + constraints.push_back({position_3, (input_b_chunks[0] - b0p_var - 16*b0pp_var - 256*b0ppp_var)}); + constraints.push_back({position_3, b0ppp_var * (1 - b0ppp_var * I1_var)}); + + constraint_type sum_part_b; + for(std::size_t i = 1; i < chunk_amount; i++) { + sum_part_b += input_b_chunks[i]; + } + constraints.push_back({position_3, sum_part_b * (1 - sum_part_b * I2_var)}); + constraints.push_back({position_3, (z_var - (1 - b0ppp_var * I1_var) * (1 - sum_part_b * I2_var))}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position_3, (b0p_var - j)*(1 - (b0p_var - j) * indic_1[j])}); + constraints.push_back({position_3, (b0pp_var - j)*(1 - (b0pp_var - j) * indic_2[j])}); + } + + constraint_type two_powers; + unsigned int pow = 1; + for(std::size_t j = 0; j < chunk_amount; j++) { + two_powers += (1 - (b0p_var - j)*indic_1[j])*pow; + pow *= 2; + } + constraints.push_back({position_3, (tp_var - z_var * two_powers)}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position_3, (b_chunks_3[j] - tp_var * (1 - (b0pp_var - j)*indic_2[j]))}); + } + + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + word_type input_b = machine.stack_top(); + word_type input_a = machine.stack_top(1); + + auto is_negative = [](word_type x) { + return (integral_type(x) > zkevm_modulus/2 - 1); + }; + auto negate_word = [](word_type x) { + return word_type(zkevm_modulus - integral_type(x)); + }; + auto abs_word = [&is_negative, &negate_word](word_type x) { + return is_negative(x)? negate_word(x) : x; + }; + + word_type a = abs_word(input_a); + + int shift = (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + integral_type r_integral = integral_type(a) >> shift; + + word_type result = is_negative(input_a) ? ( + (r_integral == 0)? word_type(zkevm_modulus-1) : negate_word(word_type(r_integral)) + ) : word_type(r_integral); + + word_type b = word_type(integral_type(1) << shift); + + word_type r = r_integral; + word_type q = b != 0u ? a.base() % b.base() : a; + + bool t_last = integral_type(q) < integral_type(b); + word_type v = word_type(integral_type(q) + integral_type(t_last)*zkevm_modulus - integral_type(b)); + + const std::vector input_a_chunks = zkevm_word_to_field_element(input_a); + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector r_chunks = zkevm_word_to_field_element(r); + const std::vector result_chunks = zkevm_word_to_field_element(result); + const std::vector q_chunks = zkevm_word_to_field_element(q); + const std::vector v_chunks = zkevm_word_to_field_element(v); + const std::vector input_b_chunks = zkevm_word_to_field_element(input_b); + + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + const std::size_t chunk_amount = a_chunks.size(); + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = result_chunks[i]; + } + integral_type two_15 = 32768, + biggest_input_a_chunk = integral_type(input_a) >> (256-16); + assignment.witness(witness_cols[chunk_amount],curr_row) = + (biggest_input_a_chunk > two_15 - 1) ? (biggest_input_a_chunk - two_15) : biggest_input_a_chunk + two_15; // a_aux + assignment.witness(witness_cols[chunk_amount + 1],curr_row) = (biggest_input_a_chunk > two_15 - 1); // a_neg + + bool carry = 0; + // input_a + |input_a| = 2^256 carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + input_a_chunks[3 * i ] + a_chunks[3 * i ] + + (input_a_chunks[3 * i + 1] + a_chunks[3 * i + 1]) * two_16 + + (input_a_chunks[3 * i + 2] + a_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 2 + i], curr_row) = carry; + } + // The last carry, if input_a + |input_a| is ever needed, should be 1 anyway, so we don't store it + + value_type r_sum = std::accumulate(r_chunks.begin(), r_chunks.end(), value_type(0)); + assignment.witness(witness_cols[2*chunk_amount], curr_row) = r_sum.is_zero() ? 0 : r_sum.inversed(); + + carry = 0; + // result + r = 2^256 carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + result_chunks[3 * i ] + r_chunks[3 * i ] + + (result_chunks[3 * i + 1] + r_chunks[3 * i + 1]) * two_16 + + (result_chunks[3 * i + 2] + r_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 2 + carry_amount + i], curr_row) = carry; + } + // The last carry, if result + r is ever needed, should be 1 anyway, so we don't store it + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 1) = input_a_chunks[i]; + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[chunk_amount + i], curr_row + 1) = r_chunks[i]; + } + + // note that we don't assign 64-chunks for a/b, as we can build them from 16-chunks with constraints + // under the same logic we only assign the 16-bit chunks for carries + std::vector a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks; + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + // caluclate first row carries + auto first_row_carries = + first_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + value_type c_2 = static_cast(first_row_carries >> 64); + std::vector c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + + value_type b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = a_chunks[i]; + } + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 2) = c_1_chunks[i]; + } + assignment.witness(witness_cols[4 + chunk_amount], curr_row + 2) = c_2; + + assignment.witness(witness_cols[2*chunk_amount], curr_row + 2) = b_sum == 0 ? 0 : b_sum.inversed(); + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 3) = r_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 3) = q_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 4) = b_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 4) = v_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 5) = input_b_chunks[i]; + } + value_type b0p = integral_type(input_b) % 16, + b0pp = (integral_type(input_b) / 16) % 16, + b0ppp = (integral_type(input_b) % 65536) / 256, + I1 = b0ppp.is_zero() ? 0 : b0ppp.inversed(); + + value_type sum_part_b = 0; + for(std::size_t i = 1; i < chunk_amount; i++) { + sum_part_b += input_b_chunks[i]; + } + value_type I2 = sum_part_b.is_zero() ? 0 : sum_part_b.inversed(), + z = (1 - b0ppp * I1) * (1 - sum_part_b * I2), // z is zero if input_b >= 256, otherwise it is 1 + tp = z * (static_cast(1) << int(integral_type(input_b) % 16)); + + assignment.witness(witness_cols[chunk_amount], curr_row + 5) = b0p; + assignment.witness(witness_cols[chunk_amount + 1], curr_row + 5) = b0pp; + assignment.witness(witness_cols[chunk_amount + 2], curr_row + 5) = b0ppp; + assignment.witness(witness_cols[2*chunk_amount], curr_row + 4) = I1; + assignment.witness(witness_cols[2*chunk_amount + 1], curr_row + 4) = I2; + assignment.witness(witness_cols[chunk_amount + 5], curr_row + 5) = z; + assignment.witness(witness_cols[chunk_amount + 6], curr_row + 5) = tp; + + carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + b_chunks[3 * i ] + v_chunks[3 * i ] + + (b_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 7 + i], curr_row + 5) = carry; // the t's + } + carry = (carry + b_chunks[3 * (carry_amount - 1)] + v_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[chunk_amount + 7 + carry_amount - 1], curr_row + 5) = carry; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[2*chunk_amount + i], curr_row + 5) = (b0p - i).is_zero()? 0 : (b0p - i).inversed(); + assignment.witness(witness_cols[2*chunk_amount + i], curr_row + 3) = (b0pp - i).is_zero()? 0 : (b0pp - i).inversed(); + } + } + + std::size_t rows_amount() override { + return 6; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/sdiv_smod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/sdiv_smod.hpp new file mode 100644 index 0000000000..6ef21cc057 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/sdiv_smod.hpp @@ -0,0 +1,677 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_sdiv_smod_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_sdiv_smod_operation(bool _is_div) : is_div(_is_div) { + this->stack_input = 2; + this->stack_output = 1; + this->gas_cost = 5; + } + + bool is_div; + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) + - a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct( + const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + + // The central relation is a = br + q. We also require that sgn(q) = sgn(a) and + // that |q| < |b| if b != 0. + // For b = 0 we must assure r = 0. For the SMOD operation we should + // have q = 0 if b = 0, so we use a special q_out value. + // + // Table layout: Internal row #: + // +--------------------------------+--------------------------------+---------------------------+ + // | b_input | | (a = -2^255) & (b = -1) ? | 5 6 + // +--------------------------------+--------+--+--+--+--+-----------+---------------------------+ + // | a | c1 |c2|ax|bx|qx| | | 4 5 + // +--------------------------------+--------+--+--++-++-++--+-------+---+-----------------------+ + // | b | |a-|b-|q-| tb |1/B| | 3 4 + // +--------------------------------+---------------+--+--+--+-------+---+-----------------------+ + // | r | q | | 2 3 + // +--------------------------------+--+--+--+---------+----------+--+---------------------------+ + // | |b| |BI|b-|q-| tq | t | | | 1 2 + // +--------------------------------+--+--+--+---------+----------+--+---------------------------+ + // | SDIV: v, SMOD: q | |q| | | 0 1 + // +--------------------------------+--------------------------------+---------------------------+ + // | SMOD: v | SMOD: q_out | | 0 + // +--------------------------------+--------------------------------+---------------------------+ + + std::size_t position_0 = 4 + !is_div; // SMOD has extra row + std::vector b_input_chunks; + std::vector a_chunks_0; + std::vector b_chunks_0; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_input_chunks.push_back(var_gen(i,-1)); + a_chunks_0.push_back(var_gen(i, 0)); + b_chunks_0.push_back(var_gen(i, +1)); + } + + var a_inv = var_gen(2*chunk_amount, -1), + b1_inv = var_gen(2*chunk_amount + 1, -1), + b2_inv = var_gen(2*chunk_amount + 2, -1), + a_ind = var_gen(2*chunk_amount + 3, -1), + b1_ind = var_gen(2*chunk_amount + 4, -1), + b2_ind = var_gen(2*chunk_amount + 5, -1), + is_overflow = var_gen(2*chunk_amount + 6, -1); + + constraint_type a_sum_0; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_sum_0 += a_chunks_0[i]; + } + a_sum_0 -= 16*65535; + constraints.push_back({position_0, a_sum_0 * (1 - a_sum_0 * a_inv)}); + + constraint_type b_sum_0; + for(std::size_t i = 0; i < chunk_amount - 1; i++) { + b_sum_0 += b_input_chunks[i]; + } + constraints.push_back({position_0, b_sum_0 * (1 - b_sum_0 * b1_inv)}); + constraints.push_back({position_0, (b_input_chunks[chunk_amount - 1] - 32768) + * (1 - (b_input_chunks[chunk_amount - 1] - 32768)*b2_inv)}); + constraints.push_back({position_0, (a_ind - (1 - a_sum_0 * a_inv))}); + constraints.push_back({position_0, (b1_ind - (1 - b_sum_0 * b1_inv))}); + constraints.push_back({position_0, (b2_ind - (1 - (b_input_chunks[chunk_amount - 1] - 32768)*b2_inv))}); + constraints.push_back({position_0, (is_overflow - a_ind * b1_ind * b2_ind)}); + + // b = is_overflow ? 1 : b_input + constraints.push_back({position_0, (b_chunks_0[0] - is_overflow - (1-is_overflow)*b_input_chunks[0])}); + for(std::size_t i = 1; i < chunk_amount; i++) { + constraints.push_back({position_0, (b_chunks_0[i] - (1-is_overflow)*b_input_chunks[i])}); + } + + std::size_t position_1 = 3 + !is_div; // SMOD has extra row + std::vector a_chunks; + std::vector b_chunks_1; + // we have two different constraints at two different positions + // first we prove division or zero + std::vector r_chunks_1; + std::vector q_chunks_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + b_chunks_1.push_back(var_gen(i, 0)); + r_chunks_1.push_back(var_gen(i, +1)); + q_chunks_1.push_back(var_gen(i + chunk_amount, +1)); + } + + std::vector c_1_chunks; + for (std::size_t i = chunk_amount; i < chunk_amount + 4; i++) { + c_1_chunks.push_back(var_gen(i, -1)); + } + + var c_2 = var_gen(chunk_amount + 4, -1); + var b_sum_inverse_1 = var_gen(2*chunk_amount, 0); + + std::vector a_64_chunks = { + chunk_sum_64(a_chunks, 0), + chunk_sum_64(a_chunks, 1), + chunk_sum_64(a_chunks, 2), + chunk_sum_64(a_chunks, 3) + }; + std::vector b_64_chunks_1 = { + chunk_sum_64(b_chunks_1, 0), + chunk_sum_64(b_chunks_1, 1), + chunk_sum_64(b_chunks_1, 2), + chunk_sum_64(b_chunks_1, 3) + }; + std::vector r_64_chunks_1 = { + chunk_sum_64(r_chunks_1, 0), + chunk_sum_64(r_chunks_1, 1), + chunk_sum_64(r_chunks_1, 2), + chunk_sum_64(r_chunks_1, 3) + }; + std::vector q_64_chunks_1 = { + chunk_sum_64(q_chunks_1, 0), + chunk_sum_64(q_chunks_1, 1), + chunk_sum_64(q_chunks_1, 2), + chunk_sum_64(q_chunks_1, 3) + }; + constraint_type c_1_64 = chunk_sum_64(c_1_chunks, 0); + // inverse or zero for b_sum_inverse + constraint_type b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_sum_1 += b_chunks_1[i]; + } + constraints.push_back({position_1, b_sum_inverse_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + constraints.push_back({position_1, b_sum_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + // prove that the multiplication + addition is correct + constraint_type first_carryless = first_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (first_carryless - c_1_64 * two128 - c_2 * two192)}); + constraint_type second_carryless = second_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (second_carryless + c_1_64 + c_2 * two_64)}); + // add constraints: c_2 is 0/1 + constraints.push_back({position_1, c_2 * (c_2 - 1)}); + + constraint_type third_carryless = third_carryless_construct(b_64_chunks_1, r_64_chunks_1); + constraints.push_back({position_1, third_carryless}); + constraints.push_back({position_1, b_64_chunks_1[3] * r_64_chunks_1[3]}); // forth_carryless + + // force r = 0 if b = 0 + constraint_type b_zero = 1 - b_sum_inverse_1 * b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_1, b_zero * r_chunks_1[i]}); + } + + // signs of a,b and q + var a_top = a_chunks[chunk_amount - 1], + b_top = b_chunks_1[chunk_amount - 1], + q_top = q_chunks_1[chunk_amount - 1], + a_aux = var_gen(chunk_amount + 5, -1), + b_aux = var_gen(chunk_amount + 6, -1), + q_aux = var_gen(chunk_amount + 7, -1), + a_neg = var_gen(chunk_amount + 6, 0), + b_neg = var_gen(chunk_amount + 7, 0), + q_neg = var_gen(chunk_amount + 8, 0); + value_type two_15 = 32768; + // a_top + 2^15 = a_aux + 2^16 * a_neg + constraints.push_back({position_1, a_neg * (1 - a_neg)}); + constraints.push_back({position_1, (a_top + two_15 - two_16 * a_neg - a_aux)}); + // b_top + 2^15 = b_aux + 2^16 * b_neg + constraints.push_back({position_1, b_neg * (1 - b_neg)}); + constraints.push_back({position_1, (b_top + two_15 - two_16 * b_neg - b_aux)}); + // q_top + 2^15 = q_aux + 2^16 * q_neg + constraints.push_back({position_1, q_neg * (1 - q_neg)}); + constraints.push_back({position_1, (q_top + two_15 - two_16 * q_neg - q_aux)}); + + // q = 0 OR sgn(a) = sgn(q) TODO: Recheck for a = -2^255, b = -1 !!! + constraint_type q_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + q_sum_1 += q_chunks_1[i]; + } + constraints.push_back({position_1, q_sum_1 * (a_neg - q_neg)}); + + std::size_t position_2 = 2 + !is_div; // SMOD has extra row + // b_non_zero indicator + std::vector b_chunks_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_chunks_2.push_back(var_gen(i, -1)); + } + constraint_type b_sum_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_sum_2 += b_chunks_2[i]; + } + var b_sum_inverse_2 = var_gen(2*chunk_amount, -1), + b_non_zero_2 = var_gen(chunk_amount, +1); + constraints.push_back({position_2, (b_non_zero_2 - b_sum_2 * b_sum_inverse_2)}); + + // assure b_neg and q_neg are valid copies of the original + var b_neg_orig = var_gen(chunk_amount + 7, -1), + b_neg_2 = var_gen(chunk_amount + 1, +1), + q_neg_orig = var_gen(chunk_amount + 8, -1), + q_neg_2 = var_gen(chunk_amount + 2, +1); + constraints.push_back({position_2, (b_neg_orig - b_neg_2)}); + constraints.push_back({position_2, (q_neg_orig - q_neg_2)}); + + std::vector b_abs_chunks_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_abs_chunks_2.push_back(var_gen(i, +1)); + } + + // constraint generators for carry-on addition + auto carry_on_addition_constraint = [](constraint_type a_0, constraint_type a_1, constraint_type a_2, + constraint_type b_0, constraint_type b_1, constraint_type b_2, + constraint_type r_0, constraint_type r_1, constraint_type r_2, + constraint_type last_carry, constraint_type result_carry, bool first_constraint = false) { + if (first_constraint) { + // no last carry for first constraint + return (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + return last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } + }; + auto last_carry_on_addition_constraint = [](constraint_type a_0, constraint_type b_0, constraint_type r_0, + constraint_type last_carry, constraint_type result_carry) { + return (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + }; + // constant constraints for future use + constraint_type c_zero, + c_one = c_zero + 1; + + // carries for b + |b| = 2^256 + std::vector tb; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + tb.push_back(var_gen(chunk_amount + 9 + i, -1)); + } + // constraints for b + |b| = 2^256, only for negative b, i.e. b_neg_2 = 1 + constraints.push_back({position_2, b_neg_2 * carry_on_addition_constraint( + b_chunks_2[0], b_chunks_2[1], b_chunks_2[2], + b_abs_chunks_2[0], b_abs_chunks_2[1], b_abs_chunks_2[2], + c_zero, c_zero, c_zero, + tb[0],tb[0],true)}); + constraints.push_back({position_2, b_neg_2 * tb[0] * (1 - tb[0])}); // tb[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_2, b_neg_2 * carry_on_addition_constraint( + b_chunks_2[3*i], b_chunks_2[3*i + 1], b_chunks_2[3*i + 2], + b_abs_chunks_2[3*i], b_abs_chunks_2[3*i + 1], b_abs_chunks_2[3*i + 2], + c_zero, c_zero, c_zero, + tb[i-1],tb[i])}); + constraints.push_back({position_2, b_neg_2 * tb[i] * (1 - tb[i])}); // t[i] is 0 or 1 + } + constraints.push_back({position_2, b_neg_2 * last_carry_on_addition_constraint( + b_chunks_2[3*(carry_amount-1)], + b_abs_chunks_2[3*(carry_amount-1)], + c_zero, tb[carry_amount - 2], c_one)}); + // ^^^ if ever b + |b| = 2^256 is used, the last carry should be 1 since it is actually an overflow + // if b_neg_2 = 0, we should have b = |b| + for(std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_2, (1 - b_neg_2) * (b_chunks_2[i] - b_abs_chunks_2[i])}); + } + + std::size_t position_3 = 1 + !is_div; // SMOD has extra row + std::vector q_chunks_3; + std::vector q_abs_chunks_3; + var q_neg_3 = var_gen(chunk_amount + 2, 0); + for(std::size_t i = chunk_amount; i < 2*chunk_amount; i++) { + q_chunks_3.push_back(var_gen(i,-1)); + q_abs_chunks_3.push_back(var_gen(i,+1)); + } + + // carries for q + |q| = 2^256 + std::vector tq; + for (std::size_t i = chunk_amount + 3; i < chunk_amount + 3 + carry_amount - 1; i++) { + tq.push_back(var_gen(i, 0)); + } + constraints.push_back({position_3, q_neg_3 * carry_on_addition_constraint( + q_chunks_3[0], q_chunks_3[1], q_chunks_3[2], + q_abs_chunks_3[0], q_abs_chunks_3[1], q_abs_chunks_3[2], + c_zero, c_zero, c_zero, + tq[0],tq[0],true)}); + constraints.push_back({position_3, q_neg_3 * tq[0] * (1 - tq[0])}); // tq[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_3, q_neg_3 * carry_on_addition_constraint( + q_chunks_3[3*i], q_chunks_3[3*i + 1], q_chunks_3[3*i + 2], + q_abs_chunks_3[3*i], q_abs_chunks_3[3*i + 1], q_abs_chunks_3[3*i + 2], + c_zero, c_zero, c_zero, + tq[i-1],tq[i])}); + constraints.push_back({position_3, q_neg_3 * tq[i] * (1 - tq[i])}); // t[i] is 0 or 1 + } + constraints.push_back({position_3, q_neg_3 * last_carry_on_addition_constraint( + q_chunks_3[3*(carry_amount-1)], + q_abs_chunks_3[3*(carry_amount-1)], + c_zero, tq[carry_amount - 2], c_one)}); + // ^^^ if ever q + |q| = 2^256 is used, the last carry should be 1 since it is actually an overflow + // if q_neg_3 = 0, we should have q = |q| + for(std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_3, (1 - q_neg_3) * (q_chunks_3[i] - q_abs_chunks_3[i])}); + } + + if (!is_div) { // we need to make a copy of q + std::vector q_copy_3; + for(std::size_t i = 0; i < chunk_amount; i++) { + q_copy_3.push_back(var_gen(i,+1)); + constraints.push_back({position_3, (q_chunks_3[i] - q_copy_3[i])}); + } + } + std::size_t position_4 = 0 + !is_div; // SMOD has extra row + // prove that (|q| < |b|) or (b = r = 0) + // note that in the latter case we have q = a to satisfy a = br + q + std::vector b_abs_chunks_4; + std::vector q_abs_chunks_4; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_abs_chunks_4.push_back(var_gen(i, -1)); + q_abs_chunks_4.push_back(var_gen(chunk_amount + i, 0)); + } + var b_nonzero_4 = var_gen(chunk_amount, -1); + + std::vector v_chunks_4; + for (std::size_t i = 0; i < chunk_amount; i++) { + v_chunks_4.push_back(var_gen(i, is_div ? 0 : +1)); + } + + std::vector t; + for (std::size_t i = chunk_amount + 3 + carry_amount - 1; + i < chunk_amount + 3 + carry_amount - 1 + carry_amount; i++) { + t.push_back(var_gen(i, -1)); + } + // |q| < |b| <=> |b| + v = |q| + 2^T, i.e. the last carry is 1. + // We use t to store the addition carries and enforce the above constraint + // if b != 0 + constraints.push_back({position_4, carry_on_addition_constraint(b_abs_chunks_4[0], b_abs_chunks_4[1], b_abs_chunks_4[2], + v_chunks_4[0], v_chunks_4[1], v_chunks_4[2], + q_abs_chunks_4[0], q_abs_chunks_4[1], q_abs_chunks_4[2], + t[0],t[0],true)}); + constraints.push_back({position_4, t[0] * (1 - t[0])}); // t[0] is 0 or 1 + + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_4, carry_on_addition_constraint( + b_abs_chunks_4[3*i], b_abs_chunks_4[3*i + 1], b_abs_chunks_4[3*i + 2], + v_chunks_4[3*i], v_chunks_4[3*i + 1], v_chunks_4[3*i + 2], + q_abs_chunks_4[3*i], q_abs_chunks_4[3*i + 1], q_abs_chunks_4[3*i + 2], + t[i-1],t[i])}); + constraints.push_back({position_4, t[i] * (1 - t[i])}); // t[i] is 0 or 1 + } + + constraints.push_back({position_4, last_carry_on_addition_constraint( + b_abs_chunks_4[3*(carry_amount-1)], + v_chunks_4[3*(carry_amount-1)], + q_abs_chunks_4[3*(carry_amount-1)], + t[carry_amount - 2], t[carry_amount - 1])}); + // t[carry_amount-1] is 0 or 1, but should be 1 if b_nonzero = 1 + constraints.push_back({position_4, (b_nonzero_4 + (1 - b_nonzero_4)*t[carry_amount-1]) * (1 - t[carry_amount-1])}); + + // for SMOD only + if (!is_div) { + std::vector q_chunks_4; + std::vector q_out_chunks_4; + for (std::size_t i = 0; i < chunk_amount; i++) { + q_chunks_4.push_back(var_gen(i,0)); + } + for (std::size_t i = chunk_amount; i < 2 * chunk_amount; i++) { + q_out_chunks_4.push_back(var_gen(i, +1)); + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_4, + (b_nonzero_4*(q_chunks_4[i] - q_out_chunks_4[i]) + (1-b_nonzero_4)*q_out_chunks_4[i])}); + } + } + + return {{gate_class::MIDDLE_OP, {constraints, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + word_type a = machine.stack_top(); + word_type b_input = machine.stack_top(1); + + // According to Yellow paper, the result of -2^255 / -1 should be -2^255 (Yellow paper, page 30) + // To achive that we need to replace b = -1 by b = 1 in this special case. This also helps the SMOD operation + + word_type b = (integral_type(a) == zkevm_modulus - 1) && (integral_type(b_input) == zkevm_modulus/2) ? 1 : b_input; + + auto is_negative = [](word_type x) { + return (integral_type(x) > zkevm_modulus/2 - 1); + }; + auto negate_word = [](word_type x) { + return word_type(zkevm_modulus - integral_type(x)); + }; + auto abs_word = [&is_negative, &negate_word](word_type x) { + return is_negative(x)? negate_word(x) : x; + }; + + word_type a_abs = abs_word(a), + b_abs = abs_word(b); + + integral_type r_integral = (b != 0u)? integral_type(a_abs) / integral_type(b_abs) : 0u; + word_type r_abs = r_integral, + q_abs = b != 0u ? integral_type(a_abs) % integral_type(b_abs) : integral_type(a_abs), + r = (is_negative(a) == is_negative(b)) ? r_abs : negate_word(r_abs), + q = is_negative(a)? negate_word(q_abs) : q_abs; + + word_type q_out = b != 0u ? q : 0; // according to EVM spec a % 0 = 0 + bool t_last = integral_type(q_abs) < integral_type(b_abs); + word_type v = word_type(integral_type(q_abs) + integral_type(t_last)*zkevm_modulus - integral_type(b_abs)); + + word_type result = is_div ? r : q_out; + + const std::vector b_input_chunks = zkevm_word_to_field_element(b_input); + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector r_chunks = zkevm_word_to_field_element(r); + const std::vector q_chunks = zkevm_word_to_field_element(q); + const std::vector b_abs_chunks = zkevm_word_to_field_element(b_abs); + const std::vector q_abs_chunks = zkevm_word_to_field_element(q_abs); + const std::vector v_chunks = zkevm_word_to_field_element(v); + const std::vector q_out_chunks = zkevm_word_to_field_element(q_out); + + const std::size_t chunk_amount = a_chunks.size(); + // note that we don't assign 64-chunks for a/b, as we can build them from 16-chunks with constraints + // under the same logic we only assign the 16-bit chunks for carries + std::vector a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks; + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + // caluclate first row carries + auto first_row_carries = + first_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + value_type c_2 = static_cast(first_row_carries >> 64); + std::vector c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + + value_type b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + + for(std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = b_input_chunks[i]; + } + + value_type a_sum = std::accumulate(a_chunks.begin(), a_chunks.end(), value_type(0)), + b_input_sum = std::accumulate(b_input_chunks.begin(), b_input_chunks.end(), value_type(0)), + b_lower_sum = b_input_sum - b_input_chunks[chunk_amount - 1]; // all chunks except the last + + assignment.witness(witness_cols[2*chunk_amount], curr_row) = (a_sum == 16*65535) ? + 0 : (a_sum - 16*65535).inversed(); + assignment.witness(witness_cols[2*chunk_amount+1], curr_row) = (b_lower_sum == 0) ? 0 : b_lower_sum.inversed(); + assignment.witness(witness_cols[2*chunk_amount+2], curr_row) = (b_input_chunks[chunk_amount-1] == 32768) ? + 0 : (b_input_chunks[chunk_amount-1] - 32768).inversed(); + assignment.witness(witness_cols[2*chunk_amount+3], curr_row) = (a_sum == 16*65535); + assignment.witness(witness_cols[2*chunk_amount+4], curr_row) = (b_lower_sum == 0); + assignment.witness(witness_cols[2*chunk_amount+5], curr_row) = (b_input_chunks[chunk_amount-1] == 32768); + assignment.witness(witness_cols[2*chunk_amount+6], curr_row) = (a_sum == 16*65535) && (b_lower_sum == 0) && + (b_input_chunks[chunk_amount-1] == 32768); + + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 1) = a_chunks[i]; + } + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 1) = c_1_chunks[i]; + } + assignment.witness(witness_cols[4 + chunk_amount], curr_row + 1) = c_2; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = b_chunks[i]; + } + assignment.witness(witness_cols[2*chunk_amount], curr_row + 2) = b_sum == 0 ? 0 : b_sum.inversed(); + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 3) = r_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 3) = q_chunks[i]; + } + + // compute signs of a,b and q + // x + 2^15 = x_aux + 2^16*x_neg + integral_type two_15 = 32768, + biggest_a_chunk = integral_type(a) >> (256 - 16), + biggest_b_chunk = integral_type(b) >> (256 - 16), + biggest_q_chunk = integral_type(q) >> (256 - 16); + + assignment.witness(witness_cols[5 + chunk_amount], curr_row + 1) = + (biggest_a_chunk > two_15 - 1) ? (biggest_a_chunk - two_15) : biggest_a_chunk + two_15; // a_aux + assignment.witness(witness_cols[6 + chunk_amount], curr_row + 2) = (biggest_a_chunk > two_15 - 1); // a_neg + + assignment.witness(witness_cols[6 + chunk_amount], curr_row + 1) = + (biggest_b_chunk > two_15 - 1) ? (biggest_b_chunk - two_15) : biggest_b_chunk + two_15; // b_aux + assignment.witness(witness_cols[7 + chunk_amount], curr_row + 2) = (biggest_b_chunk > two_15 - 1); // b_neg + + assignment.witness(witness_cols[7 + chunk_amount], curr_row + 1) = + (biggest_q_chunk > two_15 - 1) ? (biggest_q_chunk - two_15) : biggest_q_chunk + two_15; // q_aux + assignment.witness(witness_cols[8 + chunk_amount], curr_row + 2) = (biggest_q_chunk > two_15 - 1); // q_neg + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 4) = b_abs_chunks[i]; + } + + assignment.witness(witness_cols[chunk_amount], curr_row + 4) = (b != 0u); // b_non_zero + assignment.witness(witness_cols[chunk_amount + 1], curr_row + 4) = (biggest_b_chunk > two_15 - 1); // b_neg + assignment.witness(witness_cols[chunk_amount + 2], curr_row + 4) = (biggest_q_chunk > two_15 - 1); // q_neg + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 5) = is_div ? v_chunks[i] : q_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 5) = q_abs_chunks[i]; + } + + bool carry = 0; + // b + |b| = 2^256 carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + b_chunks[3 * i ] + b_abs_chunks[3 * i ] + + (b_chunks[3 * i + 1] + b_abs_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + b_abs_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 9 + i], curr_row + 2) = carry; + } + // The last carry, if b + |b| is ever needed, should be 1 anyway, so we don't store it + + // q + |q| = 2^256 carries + carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + q_chunks[3 * i ] + q_abs_chunks[3 * i ] + + (q_chunks[3 * i + 1] + q_abs_chunks[3 * i + 1]) * two_16 + + (q_chunks[3 * i + 2] + q_abs_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 3 + i], curr_row + 4) = carry; + } + // The last carry, if q + |q| is ever needed, should be 1 anyway, so we don't store it + + // |b| + v carries + carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + b_abs_chunks[3 * i ] + v_chunks[3 * i ] + + (b_abs_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_abs_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 3 + carry_amount - 1 + i], curr_row + 4) = carry; + } + carry = (carry + b_abs_chunks[3 * (carry_amount - 1)] + v_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[chunk_amount + 3 + carry_amount - 1 + carry_amount - 1], curr_row + 4) = carry; + + // optional part, for MOD only + if (!is_div) { + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 6) = v_chunks[i]; + assignment.witness(witness_cols[i + chunk_amount], curr_row + 6) = q_out_chunks[i]; + } + } + + // Just for testing. May be removed or commented + if(is_div){ + BOOST_ASSERT(result == std::get<0>(eth_signed_div(a, b))); + } else { + BOOST_ASSERT(result == std::get<1>(eth_signed_div(a, b))); + } + } + + std::size_t rows_amount() override { + return 6 + !is_div; // SMOD has an extra row + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/shl.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/shl.hpp new file mode 100644 index 0000000000..347454f3a5 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/shl.hpp @@ -0,0 +1,320 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_shl_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_shl_operation() { + this->stack_input = 2; + this->stack_output = 1; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_consrtruct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks + ) const { + return + a_64_chunks[0] * b_64_chunks[0] + + two_64 * (a_64_chunks[0] * b_64_chunks[1] + a_64_chunks[1] * b_64_chunks[0]) + - r_64_chunks[0] - two_64 * r_64_chunks[1]; + } + + template + T second_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks + ) { + return + (a_64_chunks[0] * b_64_chunks[2] + a_64_chunks[1] * b_64_chunks[1] + + a_64_chunks[2] * b_64_chunks[0] - r_64_chunks[2]) + + two_64 * (a_64_chunks[0] * b_64_chunks[3] + a_64_chunks[1] * b_64_chunks[2] + + a_64_chunks[2] * b_64_chunks[1] + a_64_chunks[3] * b_64_chunks[0] - r_64_chunks[3]); + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + std::vector> lookup_constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + const std::size_t range_check_table_index = zkevm_circuit.get_reserved_indices().at("chunk_16_bits/full"); + + // Table layout + // (construct b = 1 << input_b, then do multiplication) + // +-------------+---+---+----+-----+-+--+--+--+----------+ + // | input_b |b0'|b0"|b0"'| |z|tp|I1|I2| | 3 + // +-------------+---+---+----+-----+-+--+--+--+----------+ + // | a | | (j - b0')^{-1} | 2 + // +-------------+-----------------------+----------------+ + // | b | | (j - b0")^{-1} | 1 + // +-------------+----+--+----+--+-------+----------------+ + // | r | c1 |c2| c3 |c4| | | 0 + // +-------------+----+--+----+--+-------+----------------+ + std::size_t position_0 = 2; + std::vector input_b_chunks; + std::vector indic_1; + std::vector indic_2; + std::vector b_chunks_0; + for(std::size_t i = 0; i < chunk_amount; i++) { + input_b_chunks.push_back(var_gen(i, -1)); + indic_1.push_back(var_gen(2*chunk_amount + i, 0)); + indic_2.push_back(var_gen(2*chunk_amount + i, +1)); + b_chunks_0.push_back(var_gen(i, +1)); + } + var b0p_var = var_gen(chunk_amount, -1), + b0pp_var = var_gen(chunk_amount + 1, -1), + b0ppp_var = var_gen(chunk_amount + 2, -1), + I1_var = var_gen(2*chunk_amount, -1), + I2_var = var_gen(2*chunk_amount + 1, -1), + z_var = var_gen(chunk_amount + 5, -1), + tp_var = var_gen(chunk_amount + 6, -1); + + // lookup constrain b0p < 16, b0pp < 16, b0ppp < 256 + lookup_constraints.push_back({position_0, {range_check_table_index, {4096 * b0p_var}}}); + lookup_constraints.push_back({position_0, {range_check_table_index, {4096 * b0pp_var}}}); + lookup_constraints.push_back({position_0, {range_check_table_index, {256 * b0ppp_var}}}); + constraints.push_back({position_0, (input_b_chunks[0] - b0p_var - 16*b0pp_var - 256*b0ppp_var)}); + constraints.push_back({position_0, b0ppp_var * (1 - b0ppp_var * I1_var)}); + + constraint_type sum_b; + for(std::size_t i = 1; i < chunk_amount; i++) { + sum_b += input_b_chunks[i]; + } + constraints.push_back({position_0, sum_b * (1 - sum_b * I2_var)}); + constraints.push_back({position_0, (z_var - (1 - b0ppp_var * I1_var) * (1 - sum_b * I2_var))}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position_0, (b0p_var - j)*(1 - (b0p_var - j) * indic_1[j])}); + constraints.push_back({position_0, (b0pp_var - j)*(1 - (b0pp_var - j) * indic_2[j])}); + } + + constraint_type two_powers; + unsigned int pow = 1; + for(std::size_t j = 0; j < chunk_amount; j++) { + two_powers += (1 - (b0p_var - j)*indic_1[j])*pow; + pow *= 2; + } + constraints.push_back({position_0, (tp_var - z_var * two_powers)}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position_0, (b_chunks_0[j] - tp_var * (1 - (b0pp_var - j)*indic_2[j]))}); + } + + std::size_t position = 1; + std::vector a_chunks; + std::vector b_chunks; + std::vector r_chunks; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + b_chunks.push_back(var_gen(i, 0)); + r_chunks.push_back(var_gen(i, +1)); + } + + std::vector c_1_chunks; + std::vector c_3_chunks; + for (std::size_t i = 0; i < 4; i++) { + c_1_chunks.push_back(var_gen(i + chunk_amount, +1)); + } + var c_2 = var_gen(chunk_amount + 4, +1); + for (std::size_t i = 0; i < 4; i++) { + c_3_chunks.push_back(var_gen(i + chunk_amount + 5, +1)); + } + var c_4 = var_gen(chunk_amount + 9, +1); + + std::vector a_64_chunks = { + chunk_sum_64(a_chunks, 0), + chunk_sum_64(a_chunks, 1), + chunk_sum_64(a_chunks, 2), + chunk_sum_64(a_chunks, 3) + }; + std::vector b_64_chunks = { + chunk_sum_64(b_chunks, 0), + chunk_sum_64(b_chunks, 1), + chunk_sum_64(b_chunks, 2), + chunk_sum_64(b_chunks, 3) + }; + std::vector r_64_chunks = { + chunk_sum_64(r_chunks, 0), + chunk_sum_64(r_chunks, 1), + chunk_sum_64(r_chunks, 2), + chunk_sum_64(r_chunks, 3) + }; + constraint_type c_1_64 = chunk_sum_64(c_1_chunks, 0); + constraint_type c_3_64 = chunk_sum_64(c_3_chunks, 0); + constraint_type first_carryless = first_carryless_consrtruct( + a_64_chunks, b_64_chunks, r_64_chunks); + constraints.push_back({position, (first_carryless - c_1_64 * two128 - c_2 * two192)}); + constraint_type second_carryless = second_carryless_construct( + a_64_chunks, b_64_chunks, r_64_chunks); + constraints.push_back({ position, (second_carryless + c_1_64 + c_2 * two_64 - c_3_64 * two128 - c_4 * two192)}); + // add constraints for c_2/c_4: c_2 is 0/1, c_4 is 0/1/2/3 + constraints.push_back({position, c_2 * (c_2 - 1)}); + constraints.push_back({position, c_4 * (c_4 - 1) * (c_4 - 2) * (c_4 - 3)}); + + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + word_type a = machine.stack_top(); + word_type input_b = machine.stack_top(1); + + int shift = (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + + word_type result = word_type(integral_type(a) << shift); + + word_type b = word_type(integral_type(1) << shift); + + const std::vector input_b_chunks = zkevm_word_to_field_element(input_b); + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector r_chunks = zkevm_word_to_field_element(result); + const std::size_t chunk_amount = a_chunks.size(); + + value_type b0p = integral_type(input_b) % 16, + b0pp = (integral_type(input_b) / 16) % 16, + b0ppp = (integral_type(input_b) % 65536) / 256, + I1 = b0ppp.is_zero() ? 0 : b0ppp.inversed(); + + value_type sum_b = 0; + for(std::size_t i = 1; i < chunk_amount; i++) { + sum_b += input_b_chunks[i]; + } + value_type I2 = sum_b.is_zero() ? 0 : sum_b.inversed(), + z = (1 - b0ppp * I1) * (1 - sum_b * I2), // z is zero if input_b >= 256, otherwise it is 1 + tp = z * (static_cast(1) << int(integral_type(input_b) % 16)); + + // note that we don't assign 64-chunks for a/b, as we can build them from 16-chunks with constraints + // under the same logic we only assign the 16-bit chunks for carries + std::vector a_64_chunks, b_64_chunks, r_64_chunks; + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + } + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + // caluclate first row carries + auto first_row_carries = + first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + value_type c_2 = static_cast(first_row_carries >> 64); + std::vector c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + auto second_row_carries = + (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks) + c_1 + c_2 * two_64).data.base() >> 128; + value_type c_3 = static_cast(second_row_carries & (two_64 - 1).data.base()); + value_type c_4 = static_cast(second_row_carries >> 64); + std::vector c_3_chunks = chunk_64_to_16(c_3); + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = input_b_chunks[i]; + } + assignment.witness(witness_cols[chunk_amount], curr_row) = b0p; + assignment.witness(witness_cols[chunk_amount + 1], curr_row) = b0pp; + assignment.witness(witness_cols[chunk_amount + 2], curr_row) = b0ppp; + assignment.witness(witness_cols[2*chunk_amount], curr_row) = I1; + assignment.witness(witness_cols[2*chunk_amount + 1], curr_row) = I2; + assignment.witness(witness_cols[chunk_amount + 5], curr_row) = z; + assignment.witness(witness_cols[chunk_amount + 6], curr_row) = tp; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 1) = a_chunks[i]; + assignment.witness(witness_cols[2*chunk_amount + i], curr_row + 1) = (b0p - i).is_zero()? 0 : (b0p - i).inversed(); + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = b_chunks[i]; + assignment.witness(witness_cols[2*chunk_amount + i], curr_row + 2) = (b0pp - i).is_zero()? 0 : (b0pp - i).inversed(); + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 3) = r_chunks[i]; + } + + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 3) = c_1_chunks[i]; + } + assignment.witness(witness_cols[chunk_amount + 4], curr_row + 3) = c_2; + + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount + 5], curr_row + 3) = c_3_chunks[i]; + } + assignment.witness(witness_cols[chunk_amount + 9], curr_row + 3) = c_4; + } + + std::size_t rows_amount() override { + return 4; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/shr.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/shr.hpp new file mode 100644 index 0000000000..217674b848 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/shr.hpp @@ -0,0 +1,449 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_shr_operation : public zkevm_operation { + public: + zkevm_shr_operation(){ + this->stack_input = 2; + this->stack_output = 1; + } + + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) + - a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct( + const std::vector &a_64_chunks, const std::vector &b_64_chunks, + const std::vector &r_64_chunks, const std::vector &q_64_chunks + ) const { + return + (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct( + const std::vector &b_64_chunks, const std::vector &r_64_chunks + ) const { + return + (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + std::vector> lookup_constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + const std::size_t range_check_table_index = zkevm_circuit.get_reserved_indices().at("chunk_16_bits/full"); + + // The central relation is a = br + q, q < b. + // For b = 0 we must assure r = 0. + // + // Table layout: Internal row #: + // +--------------------------------+--------+--+--------------------+---+------------+ + // | a | c1 |c2| |1/B| | 4 + // +--------------------------------+--------+--+--------------------+---+------------+ + // | r | q | | 3 + // +--------------------------------+--------------------------------+--+--+----------+ + // | b | v |I1|I2| | 2 + // +--------------------------------+---+---+----+-----+-+--+-------++--+--+----------+ + // | input_b |b0'|b0"|b0"'| |z|tp| t || (j - b0')^{-1} | 1 + // +--------------------------------+---+---+----+-----+-+--+-------++----------------+ + // | | | (j - b0")^{-1} | 0 + // +--------------------------------+--------------------------------+----------------+ + + + std::size_t position_1 = 2; + std::vector a_chunks; + std::vector b_chunks_1; + // we have two different constraints at two different positions + // first we prove division or zero + std::vector r_chunks_1; + std::vector q_chunks_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + a_chunks.push_back(var_gen(i, -1)); + r_chunks_1.push_back(var_gen(i, 0)); + b_chunks_1.push_back(var_gen(i, +1)); + q_chunks_1.push_back(var_gen(i + chunk_amount, 0)); + } + std::vector c_1_chunks; + for (std::size_t i = chunk_amount; i < chunk_amount + 4; i++) { + c_1_chunks.push_back(var_gen(i, -1)); + } + var c_2 = var_gen(chunk_amount + 4, -1); + var b_sum_inverse_1 = var_gen(2*chunk_amount, -1); + + std::vector a_64_chunks = { + chunk_sum_64(a_chunks, 0), + chunk_sum_64(a_chunks, 1), + chunk_sum_64(a_chunks, 2), + chunk_sum_64(a_chunks, 3) + }; + std::vector b_64_chunks_1 = { + chunk_sum_64(b_chunks_1, 0), + chunk_sum_64(b_chunks_1, 1), + chunk_sum_64(b_chunks_1, 2), + chunk_sum_64(b_chunks_1, 3) + }; + std::vector r_64_chunks_1 = { + chunk_sum_64(r_chunks_1, 0), + chunk_sum_64(r_chunks_1, 1), + chunk_sum_64(r_chunks_1, 2), + chunk_sum_64(r_chunks_1, 3) + }; + std::vector q_64_chunks_1 = { + chunk_sum_64(q_chunks_1, 0), + chunk_sum_64(q_chunks_1, 1), + chunk_sum_64(q_chunks_1, 2), + chunk_sum_64(q_chunks_1, 3) + }; + constraint_type c_1_64 = chunk_sum_64(c_1_chunks, 0); + // inverse or zero for b_sum_inverse + constraint_type b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_sum_1 += b_chunks_1[i]; + } + constraints.push_back({position_1, b_sum_inverse_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + constraints.push_back({position_1, b_sum_1 * (b_sum_inverse_1 * b_sum_1 - 1)}); + // prove that the multiplication + addition is correct + constraint_type first_carryless = first_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (first_carryless - c_1_64 * two128 - c_2 * two192)}); + + constraint_type second_carryless = second_carryless_construct( + a_64_chunks, b_64_chunks_1, r_64_chunks_1, q_64_chunks_1); + constraints.push_back({position_1, (second_carryless + c_1_64 + c_2 * two_64)}); + // add constraints: c_2 is 0/1 + constraints.push_back({position_1, c_2 * (c_2 - 1)}); + + constraint_type third_carryless = third_carryless_construct(b_64_chunks_1, r_64_chunks_1); + constraints.push_back({position_1, third_carryless}); + constraints.push_back({position_1, b_64_chunks_1[3] * r_64_chunks_1[3]}); // forth_carryless + + // force r = 0 if b = 0 + constraint_type b_zero = 1 - b_sum_inverse_1 * b_sum_1; + for (std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position_1, b_zero * r_chunks_1[i]}); + } + + // prove that (q < b) or (b = r = 0) + // note that in the latter case we have q = a to satisfy a = br + q + std::size_t position_2 = 1; + std::vector b_chunks_2; + std::vector q_chunks_2; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_chunks_2.push_back(var_gen(i, 0)); + } + for (std::size_t i = chunk_amount; i < 2 * chunk_amount; i++) { + q_chunks_2.push_back(var_gen(i, -1)); + } + std::vector v_chunks_2; + std::vector t; + for (std::size_t i = 0; i < chunk_amount; i++) { + v_chunks_2.push_back(var_gen(chunk_amount + i, 0)); + } + + for (std::size_t i = chunk_amount + 7; i < chunk_amount + 7 + carry_amount; i++) { + t.push_back(var_gen(i, +1)); + } + var z_var_2 = var_gen(chunk_amount + 5, +1); + + // q < b <=> b + v = q + 2^T, i.e. the last carry is 1. + // We use t to store the addition carries and enforce the above constraint + // if b != 0 + auto carry_on_addition_constraint = [](var a_0, var a_1, var a_2, + var b_0, var b_1, var b_2, + var r_0, var r_1, var r_2, + var last_carry, var result_carry, bool first_constraint = false) { + constraint_type res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 + - r_0 - r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } + return res; + }; + auto last_carry_on_addition_constraint = [](var a_0, var b_0, var r_0, var last_carry, var result_carry) { + constraint_type res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + constraints.push_back({position_2, carry_on_addition_constraint(b_chunks_2[0], b_chunks_2[1], b_chunks_2[2], + v_chunks_2[0], v_chunks_2[1], v_chunks_2[2], + q_chunks_2[0], q_chunks_2[1], q_chunks_2[2], + t[0],t[0],true)}); + constraints.push_back({position_2, t[0] * (1 - t[0])}); // t[0] is 0 or 1 + for (std::size_t i = 1; i < carry_amount - 1; i++) { + constraints.push_back({position_2, carry_on_addition_constraint( + b_chunks_2[3*i], b_chunks_2[3*i + 1], b_chunks_2[3*i + 2], + v_chunks_2[3*i], v_chunks_2[3*i + 1], v_chunks_2[3*i + 2], + q_chunks_2[3*i], q_chunks_2[3*i + 1], q_chunks_2[3*i + 2], + t[i-1],t[i])}); + constraints.push_back({position_2, t[i] * (1 - t[i])}); // t[i] is 0 or 1 + } + constraints.push_back({position_2, last_carry_on_addition_constraint( + b_chunks_2[3*(carry_amount-1)], + v_chunks_2[3*(carry_amount-1)], + q_chunks_2[3*(carry_amount-1)], + t[carry_amount - 2], t[carry_amount - 1])}); + // t[carry_amount-1] is 0 or 1, but should be 1 if z_var_2 = 1 + constraints.push_back({position_2, (z_var_2 + (1 - z_var_2)* t[carry_amount-1]) * (1 - t[carry_amount-1])}); + + std::size_t position_3 = 1; + std::vector input_b_chunks; + std::vector indic_1; + std::vector indic_2; + std::vector b_chunks_3; + for(std::size_t i = 0; i < chunk_amount; i++) { + b_chunks_3.push_back(var_gen(i, 0)); + input_b_chunks.push_back(var_gen(i, +1)); + indic_1.push_back(var_gen(2*chunk_amount + i, +1)); + indic_2.push_back(var_gen(2*chunk_amount + i, -1)); + } + + var b0p_var = var_gen(chunk_amount, +1), + b0pp_var = var_gen(chunk_amount + 1, +1), + b0ppp_var = var_gen(chunk_amount + 2, +1), + I1_var = var_gen(2*chunk_amount, 0), + I2_var = var_gen(2*chunk_amount + 1, 0), + z_var = var_gen(chunk_amount + 5, +1), + tp_var = var_gen(chunk_amount + 6, +1); + + // lookup constrain b0p < 16, b0pp < 16, b0ppp < 256 + lookup_constraints.push_back({position_3, {range_check_table_index, {4096 * b0p_var}}}); + lookup_constraints.push_back({position_3, {range_check_table_index, {4096 * b0pp_var}}}); + lookup_constraints.push_back({position_3, {range_check_table_index, {256 * b0ppp_var}}}); + constraints.push_back({position_3, (input_b_chunks[0] - b0p_var - 16*b0pp_var - 256*b0ppp_var)}); + constraints.push_back({position_3, b0ppp_var * (1 - b0ppp_var * I1_var)}); + + constraint_type sum_part_b; + for(std::size_t i = 1; i < chunk_amount; i++) { + sum_part_b += input_b_chunks[i]; + } + constraints.push_back({position_3, sum_part_b * (1 - sum_part_b * I2_var)}); + constraints.push_back({position_3, (z_var - (1 - b0ppp_var * I1_var) * (1 - sum_part_b * I2_var))}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position_3, (b0p_var - j)*(1 - (b0p_var - j) * indic_1[j])}); + constraints.push_back({position_3, (b0pp_var - j)*(1 - (b0pp_var - j) * indic_2[j])}); + } + + constraint_type two_powers; + unsigned int pow = 1; + for(std::size_t j = 0; j < chunk_amount; j++) { + two_powers += (1 - (b0p_var - j)*indic_1[j])*pow; + pow *= 2; + } + constraints.push_back({position_3, (tp_var - z_var * two_powers)}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position_3, (b_chunks_3[j] - tp_var * (1 - (b0pp_var - j)*indic_2[j]))}); + } + + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + word_type input_b = machine.stack_top(); + word_type a = machine.stack_top(1); + + int shift = (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + integral_type r_integral = integral_type(a) >> shift; + + word_type b = word_type(integral_type(1) << shift); + + word_type result = r_integral; + word_type q = b != 0u ? a.base() % b.base() : a; + + bool t_last = integral_type(q) < integral_type(b); + word_type v = word_type(integral_type(q) + integral_type(t_last)*zkevm_modulus - integral_type(b)); + + const std::vector a_chunks = zkevm_word_to_field_element(a); + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector r_chunks = zkevm_word_to_field_element(result); + const std::vector q_chunks = zkevm_word_to_field_element(q); + const std::vector v_chunks = zkevm_word_to_field_element(v); + const std::vector input_b_chunks = zkevm_word_to_field_element(input_b); + + const std::size_t chunk_amount = a_chunks.size(); + // note that we don't assign 64-chunks for a/b, as we can build them from 16-chunks with constraints + // under the same logic we only assign the 16-bit chunks for carries + std::vector a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks; + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + // caluclate first row carries + auto first_row_carries_non_shifted = + first_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks).data; + auto first_row_carries = + first_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks).data.base() >> 128; + value_type c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + value_type c_2 = static_cast(first_row_carries >> 64); + BOOST_ASSERT(first_row_carries_non_shifted - c_1 * two128 - c_2 * two192 == 0); + std::vector c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + + value_type b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row) = a_chunks[i]; + } + for (std::size_t i = 0; i < 4; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row) = c_1_chunks[i]; + } + assignment.witness(witness_cols[4 + chunk_amount], curr_row) = c_2; + + assignment.witness(witness_cols[2*chunk_amount], curr_row) = b_sum == 0 ? 0 : b_sum.inversed(); + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 1) = r_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 1) = q_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 2) = b_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i + chunk_amount], curr_row + 2) = v_chunks[i]; + } + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[i], curr_row + 3) = input_b_chunks[i]; + } + value_type b0p = integral_type(input_b) % 16, + b0pp = (integral_type(input_b) / 16) % 16, + b0ppp = (integral_type(input_b) % 65536) / 256, + I1 = b0ppp.is_zero() ? 0 : b0ppp.inversed(); + + value_type sum_part_b = 0; + for(std::size_t i = 1; i < chunk_amount; i++) { + sum_part_b += input_b_chunks[i]; + } + value_type I2 = sum_part_b.is_zero() ? 0 : sum_part_b.inversed(), + z = (1 - b0ppp * I1) * (1 - sum_part_b * I2), // z is zero if input_b >= 256, otherwise it is 1 + tp = z * (static_cast(1) << int(integral_type(input_b) % 16)); + + assignment.witness(witness_cols[chunk_amount], curr_row + 3) = b0p; + assignment.witness(witness_cols[chunk_amount + 1], curr_row + 3) = b0pp; + assignment.witness(witness_cols[chunk_amount + 2], curr_row + 3) = b0ppp; + assignment.witness(witness_cols[2*chunk_amount], curr_row + 2) = I1; + assignment.witness(witness_cols[2*chunk_amount + 1], curr_row + 2) = I2; + assignment.witness(witness_cols[chunk_amount + 5], curr_row + 3) = z; + assignment.witness(witness_cols[chunk_amount + 6], curr_row + 3) = tp; + + bool carry = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry = (carry + b_chunks[3 * i ] + v_chunks[3 * i ] + + (b_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32 ) >= two_48; + assignment.witness(witness_cols[chunk_amount + 7 + i], curr_row + 3) = carry; // the t's + } + carry = (carry + b_chunks[3 * (carry_amount - 1)] + v_chunks[3 * (carry_amount - 1)]) >= two_16; + assignment.witness(witness_cols[chunk_amount + 7 + carry_amount - 1], curr_row + 3) = carry; + + for (std::size_t i = 0; i < chunk_amount; i++) { + assignment.witness(witness_cols[2*chunk_amount + i], curr_row + 3) = (b0p - i).is_zero()? 0 : (b0p - i).inversed(); + assignment.witness(witness_cols[2*chunk_amount + i], curr_row + 1) = (b0pp - i).is_zero()? 0 : (b0pp - i).inversed(); + } + } + + std::size_t rows_amount() override { + return 4; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/signextend.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/signextend.hpp new file mode 100644 index 0000000000..5e8d55a5c5 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/signextend.hpp @@ -0,0 +1,224 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_signextend_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_signextend_operation(){ + this->stack_input = 2; + this->stack_output = 1; + this->gas_cost = 5; + } + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + std::vector> constraints; + std::vector> lookup_constraints; + + constexpr const std::size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_circuit.get_opcode_cols(); + auto var_gen = [&witness_cols](std::size_t i, int32_t offset = 0) { + return zkevm_operation::var_gen(witness_cols, i, offset); + }; + const std::size_t range_check_table_index = zkevm_circuit.get_reserved_indices().at("chunk_16_bits/full"); + + // Table layout + // b is the number of the most significant byte to include into x, starting from the least significant one + // b = p + 2n Row # + // +-----------------------+-+---+-+-+--+--+--+--+---+----+-+---------------+ + // | b | |b0p|p|n|xn|x'|x"|sb|sgn|saux|I| | 1 + // +-----------------------+-+---+-+-+--+--+--+--+---+----+-+---------------+ + // | x | r | (j-n)^{-1} | 0 + // +-----------------------+------------------------------+-----------------+ + + std::size_t position = 0; + + std::vector b_chunks; + std::vector x_chunks; + std::vector r_chunks; + std::vector indic; + for (std::size_t i = 0; i < chunk_amount; i++) { + b_chunks.push_back(var_gen(i, -1)); + x_chunks.push_back(var_gen(i, 0)); + r_chunks.push_back(var_gen(chunk_amount + i, 0)); + indic.push_back(var_gen(2*chunk_amount + i, 0)); + } + + var I_var = var_gen(2*chunk_amount, -1), + b0p_var = var_gen(chunk_amount + 1, -1), + p_var = var_gen(chunk_amount + 2, -1), + n_var = var_gen(chunk_amount + 3, -1), + xn_var = var_gen(chunk_amount + 4, -1), + xp_var = var_gen(chunk_amount + 5, -1), + xpp_var = var_gen(chunk_amount + 6, -1), + sb_var = var_gen(chunk_amount + 7, -1), + sgn_var = var_gen(chunk_amount + 8, -1), + saux_var= var_gen(chunk_amount + 9, -1); + + constraint_type b_sum; + for(std::size_t j = 1; j < chunk_amount; j++) { + b_sum += b_chunks[j]; + } + constraints.push_back({position, b_sum * (1 - I_var * b_sum)}); + + constraints.push_back({position, (b0p_var - b_chunks[0]*(1 - b_sum*I_var) - 32*b_sum*I_var)}); + + constraints.push_back({position, p_var * (1 - p_var)}); + constraints.push_back({position, (b0p_var - p_var - 2*n_var)}); + // lookup constraint for n_var < 32768 + lookup_constraints.push_back({position, {range_check_table_index, {2 * n_var}}}); + + constraint_type x_sum; + for(std::size_t j = 0; j < chunk_amount; j++) { + x_sum += x_chunks[j] * (1 - (j - n_var)*indic[j]); + } + constraints.push_back({position, (xn_var - x_sum)}); + constraints.push_back({position, (xn_var - xp_var*256 - xpp_var)}); + // lookup constraints for xp_var, xpp_var < 256 + lookup_constraints.push_back({position, {range_check_table_index, {256 * xp_var}}}); + lookup_constraints.push_back({position, {range_check_table_index, {256 * xpp_var}}}); + + constraints.push_back({position, (sb_var - (1-p_var)*xpp_var - p_var*xp_var)}); + + constraints.push_back({position, sgn_var * (1-sgn_var)}); + // lookup constraints for saux_var < 256 + lookup_constraints.push_back({position, {range_check_table_index, {256 * saux_var}}}); + constraints.push_back({position, (sb_var + 128 - saux_var - 256*sgn_var)}); + + for(std::size_t j = 0; j < chunk_amount; j++) { + constraints.push_back({position, ((j - n_var)*(1 - (j - n_var)*indic[j]))}); + } + + constraint_type is_transition[chunk_amount], + is_sign[chunk_amount]; // is_sign[i] = is_transition[0] + .... + is_transition[i-1] + + for(std::size_t i = 0; i < chunk_amount; i++) { + is_transition[i] = 1 - (i - n_var)*indic[i]; + for(std::size_t j = i + 1; j < chunk_amount; j++) { + is_sign[j] += is_transition[i]; + } + } + for(std::size_t i = 0; i < chunk_amount; i++) { + constraints.push_back({position, (r_chunks[i] - is_sign[i]*sgn_var*65535 + - is_transition[i]*((1-p_var)*(sb_var + 256*255*sgn_var) + p_var*xn_var) + - (1 - is_sign[i] - is_transition[i])*x_chunks[i])}); + } + + return {{gate_class::MIDDLE_OP, {constraints, lookup_constraints}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + using word_type = typename zkevm_stack::word_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + word_type b = machine.stack_top(); + word_type x = machine.stack_top(1); + int len = (integral_type(b) < 32) ? int(integral_type(b)) + 1 : 32; + integral_type sign = (integral_type(x) << (8*(32-len) + 1)) >> 256; + word_type result = word_type((((integral_type(1) << 8*(32-len)) - 1) << 8*len)*sign) + + word_type((integral_type(x) << (8*(32-len) + 1)) >> (8*(32-len) + 1)); + // +1 because integral type is 257 bits long + + unsigned int b0 = static_cast(integral_type(b) % 65536), + b0p = (integral_type(b) > 65535) ? 32 : b0; + int parity = b0p % 2, + n = (b0p - parity) / 2; + unsigned int xn = static_cast((integral_type(x) << (16*(n > 15 ? 16 : 15 - n) + 1)) >> (16*15 + 1)), + // +1 because integral_type is 257 bits long + xpp = xn % 256, + xp = (xn - xpp) / 256, + sb = (parity == 0) ? xpp : xp, + sgn = (sb > 128), + saux = sb + 128 - sgn*256; + + const std::vector b_chunks = zkevm_word_to_field_element(b); + const std::vector x_chunks = zkevm_word_to_field_element(x); + const std::vector r_chunks = zkevm_word_to_field_element(result); + + size_t chunk_amount = 16; + const std::vector &witness_cols = zkevm_table.get_opcode_cols(); + assignment_type &assignment = zkevm_table.get_assignment(); + const std::size_t curr_row = zkevm_table.get_current_row(); + + // TODO: replace with memory access, which would also do range checks! + for(std::size_t j = 0; j < chunk_amount; j++) { + assignment.witness(witness_cols[j], curr_row) = b_chunks[j]; + assignment.witness(witness_cols[j], curr_row + 1) = x_chunks[j]; + assignment.witness(witness_cols[chunk_amount + j], curr_row + 1) = r_chunks[j]; + + value_type cur_j = j, + val_n = n, + indic = (cur_j == val_n) ? 0 : (cur_j-val_n).inversed(); + assignment.witness(witness_cols[2*chunk_amount + j], curr_row + 1) = indic; + } + + value_type sum_b = 0; + for(std::size_t j = 1; j < chunk_amount; j++) { + sum_b += b_chunks[j]; + } + assignment.witness(witness_cols[2*chunk_amount], curr_row) = sum_b.is_zero() ? 0 : sum_b.inversed(); + assignment.witness(witness_cols[chunk_amount + 1], curr_row) = b0p; + assignment.witness(witness_cols[chunk_amount + 2], curr_row) = parity; + assignment.witness(witness_cols[chunk_amount + 3], curr_row) = n; + assignment.witness(witness_cols[chunk_amount + 4], curr_row) = xn; + assignment.witness(witness_cols[chunk_amount + 5], curr_row) = xp; + assignment.witness(witness_cols[chunk_amount + 6], curr_row) = xpp; + assignment.witness(witness_cols[chunk_amount + 7], curr_row) = sb; + assignment.witness(witness_cols[chunk_amount + 8], curr_row) = sgn; + assignment.witness(witness_cols[chunk_amount + 9], curr_row) = saux; + } + + std::size_t rows_amount() override { + return 2; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/storage.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/storage.hpp new file mode 100644 index 0000000000..80fb66f85a --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/storage.hpp @@ -0,0 +1,141 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_sstore_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_sstore_operation() { + this->stack_input = 2; + this->stack_output = 0; + this->gas_cost = 100; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for SSTORE" << std::endl; + } + + std::size_t rows_amount() override { + return 3; + } + + virtual constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + + std::cout << "Implement gas transition constraint for SSTORE" << std::endl; + return c; + } + }; + + + template + class zkevm_sload_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_sload_operation() { + this->stack_input = 1; + this->stack_output = 1; + this->gas_cost = 100; + } + + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + // TODO : generate gates + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override { + std::cout << "Generate assignments and gates for SLOAD" << std::endl; + } + + std::size_t rows_amount() override { + return 3; + } + + virtual constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) override { + constraint_type c; + + std::cout << "Implement gas transition constraint for SLOAD" << std::endl; + return c; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/swapx.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/swapx.hpp new file mode 100644 index 0000000000..f8456bde94 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/operations/swapx.hpp @@ -0,0 +1,77 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class zkevm_operation; + + template + class zkevm_swapx_operation : public zkevm_operation { + public: + using op_type = zkevm_operation; + using gate_class = typename op_type::gate_class; + using constraint_type = typename op_type::constraint_type; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using zkevm_circuit_type = typename op_type::zkevm_circuit_type; + using zkevm_table_type = typename op_type::zkevm_table_type; + using assignment_type = typename op_type::assignment_type; + using value_type = typename BlueprintFieldType::value_type; + using var = typename op_type::var; + + zkevm_swapx_operation(std::size_t _x) : byte_count(_x) { + BOOST_ASSERT(_x <= 16); // the maximum possible swap + this->stack_input = _x+1; + this->stack_output = _x+1; + } + + std::size_t byte_count; + + std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) override { + + return {{gate_class::MIDDLE_OP, {{}, {}}}}; + } + + void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) override{ + std::cout << "Generate assignments for SWAPx opcodes" << std::endl; + } + + std::size_t rows_amount() override { + return 1; + } + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/rw.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/rw.hpp new file mode 100644 index 0000000000..10d89862d8 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/rw.hpp @@ -0,0 +1,731 @@ + +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + template + class zkevm_rw; + + template + class zkevm_rw, BlueprintFieldType> + : public plonk_component + { + public: + // Named witness columns + // Named witness columns indices + static constexpr std::size_t OP = 0; + static constexpr std::size_t ID = 1; + static constexpr std::size_t ADDRESS = 2; + static constexpr std::size_t STORAGE_KEY_HI = 3; + static constexpr std::size_t STORAGE_KEY_LO = 4; + static constexpr std::size_t FIELD_TYPE = 5; // NOT USED FOR STACK, MEMORY and ACCOUNT STORAGE, but used by txComponent. + static constexpr std::size_t RW_ID = 6; + static constexpr std::size_t IS_WRITE = 7; + static constexpr std::size_t VALUE_HI = 8; + static constexpr std::size_t VALUE_LO = 9; + + // Advice columns + static constexpr std::size_t OP_SELECTORS_AMOUNT = 4; // index \in {0..31} + static constexpr std::array OP_SELECTORS = {10, 11, 12, 13}; + + static constexpr std::size_t INDICES_AMOUNT = 5; // index \in {0..31} + static constexpr std::array INDICES = {14, 15, 16, 17, 18}; + + static constexpr std::size_t IS_FIRST = 19; + + static constexpr std::size_t CHUNKS_AMOUNT = 30; + static constexpr std::array< std::size_t, CHUNKS_AMOUNT> CHUNKS = { + 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49 + }; + + static constexpr std::size_t DIFFERENCE = 50; + static constexpr std::size_t INV_DIFFERENCE = 51; + static constexpr std::size_t VALUE_BEFORE_HI = 52; // Check, where do we need it. + static constexpr std::size_t VALUE_BEFORE_LO = 53; // Check, where do we need it. + static constexpr std::size_t STATE_ROOT_HI = 54; // Check, where do we need it. + static constexpr std::size_t STATE_ROOT_LO = 55; // Check, where do we need it. + static constexpr std::size_t STATE_ROOT_BEFORE_HI = 56; // Check, where do we need it. + static constexpr std::size_t STATE_ROOT_BEFORE_LO = 57; // Check, where do we need it. + static constexpr std::size_t IS_LAST = 58; + + static constexpr std::size_t SORTED_COLUMNS_AMOUNT = 32; + + static constexpr std::size_t total_witness_amount = 60; + + using component_type = plonk_component; + + using var = typename component_type::var; + using manifest_type = plonk_component_manifest; + + std::size_t max_rw_size; // TODO: Estimate default value. It should have reasonable default value + + class gate_manifest_type : public component_gate_manifest { + public: + std::uint32_t gates_amount() const override { + return zkevm_rw::gates_amount + zkevm_rw::lookup_gates_amount; + } + }; + + static gate_manifest get_gate_manifest(std::size_t witness_amount, std::size_t max_rw_size= 10000) { + gate_manifest manifest = gate_manifest(gate_manifest_type()); + return manifest; + } + + static manifest_type get_manifest() { + static manifest_type manifest = manifest_type( + std::shared_ptr(new manifest_single_value_param(11)), + false + ); + return manifest; + } + + constexpr static std::size_t get_rows_amount(std::size_t witness_amount, std::size_t max_rw_size= 10000) { + return max_rw_size; + } + + constexpr static const std::size_t gates_amount = 2; + constexpr static const std::size_t lookup_gates_amount = 1; + std::size_t rows_amount = get_rows_amount(max_rw_size); + + struct input_type { + const rw_trace &rws; + + input_type( + const rw_trace &_rws + ) : rws(_rws) { + } + + std::vector> all_vars() { + std::vector> result; + return result; + } + }; + + struct result_type { + result_type(const zkevm_rw &component, std::size_t start_row_index) { + } + + std::vector> all_vars() { + std::vector> result; + return result; + } + }; + + template + explicit zkevm_rw(ContainerType witness, std::size_t _max_rw_size =5000) : + component_type(witness, {}, {}, get_manifest()), max_rw_size(_max_rw_size) + {}; + + template + zkevm_rw(WitnessContainerType witness, ConstantContainerType constant, + PublicInputContainerType public_input, + std::size_t _max_rw_size =5000 + ) : component_type(witness, constant, public_input, get_manifest()), max_rw_size(_max_rw_size) {}; + + zkevm_rw( + std::initializer_list witnesses, + std::initializer_list + constants, + std::initializer_list + public_inputs, + std::size_t _max_rw_size =5000 + ) : component_type(witnesses, constants, public_inputs, get_manifest()), max_rw_size(_max_rw_size){}; + + + std::map component_lookup_tables(){ + std::map lookup_tables; + lookup_tables["chunk_16_bits/full"] = 0; // REQUIRED_TABLE -- used for memory operations + lookup_tables["chunk_16_bits/8bits"] = 0; // REQUIRED_TABLE -- used for memory operations + lookup_tables["chunk_16_bits/10bits"] = 0; // REQUIRED_TABLE -- used for memory operations + + return lookup_tables; + } + }; + + template + std::vector sorting_columns(const ComponentType &component){ + std::vector sorting; + + sorting.resize(ComponentType::SORTED_COLUMNS_AMOUNT); + sorting[0] = component.W(ComponentType::OP); + // ID + sorting[1] = component.W(ComponentType::CHUNKS[0]); + sorting[2] = component.W(ComponentType::CHUNKS[1]); + // address + sorting[3] = component.W(ComponentType::CHUNKS[2]); + sorting[4] = component.W(ComponentType::CHUNKS[3]); + sorting[5] = component.W(ComponentType::CHUNKS[4]); + sorting[6] = component.W(ComponentType::CHUNKS[5]); + sorting[7] = component.W(ComponentType::CHUNKS[6]); + sorting[8] = component.W(ComponentType::CHUNKS[7]); + sorting[9] = component.W(ComponentType::CHUNKS[8]); + sorting[10] = component.W(ComponentType::CHUNKS[9]); + sorting[11] = component.W(ComponentType::CHUNKS[10]); + sorting[12] = component.W(ComponentType::CHUNKS[11]); + // field + sorting[13] = component.W(ComponentType::FIELD_TYPE); + // storage_key + sorting[14] = component.W(ComponentType::CHUNKS[12]); + sorting[15] = component.W(ComponentType::CHUNKS[13]); + sorting[16] = component.W(ComponentType::CHUNKS[14]); + sorting[17] = component.W(ComponentType::CHUNKS[15]); + sorting[18] = component.W(ComponentType::CHUNKS[16]); + sorting[19] = component.W(ComponentType::CHUNKS[17]); + sorting[20] = component.W(ComponentType::CHUNKS[18]); + sorting[21] = component.W(ComponentType::CHUNKS[19]); + sorting[22] = component.W(ComponentType::CHUNKS[20]); + sorting[23] = component.W(ComponentType::CHUNKS[21]); + sorting[24] = component.W(ComponentType::CHUNKS[22]); + sorting[25] = component.W(ComponentType::CHUNKS[23]); + sorting[26] = component.W(ComponentType::CHUNKS[24]); + sorting[27] = component.W(ComponentType::CHUNKS[25]); + sorting[28] = component.W(ComponentType::CHUNKS[26]); + sorting[29] = component.W(ComponentType::CHUNKS[27]); + // rw_id + sorting[30] = component.W(ComponentType::CHUNKS[28]); + sorting[31] = component.W(ComponentType::CHUNKS[29]); + + return sorting; + } + + template + using plonk_zkevm_rw = + zkevm_rw, BlueprintFieldType>; + + template + typename plonk_zkevm_rw::result_type generate_assignments( + const plonk_zkevm_rw &component, + assignment> + &assignment, + const typename plonk_zkevm_rw::input_type + &instance_input, + const std::uint32_t start_row_index) { + using component_type = plonk_zkevm_rw; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + std::cout << "Generate assignments" << std::endl; + std::cout << "Start row index: " << start_row_index << std::endl; + + auto sorting = sorting_columns(component); + auto rw_trace = instance_input.rws.get_rw_ops(); + for( std::size_t i = 0; i < rw_trace.size(); i++ ){ + if( rw_trace[i].op != PADDING_OP ) std::cout << i << "." << rw_trace[i] << " "; + // Lookup columns + assignment.witness(component.W(component_type::OP), start_row_index + i) = rw_trace[i].op; + assignment.witness(component.W(component_type::ID), start_row_index + i) = rw_trace[i].id; + assignment.witness(component.W(component_type::ADDRESS), start_row_index + i) = integral_type(rw_trace[i].address); + assignment.witness(component.W(component_type::STORAGE_KEY_HI), start_row_index + i) = w_hi(rw_trace[i].storage_key); + assignment.witness(component.W(component_type::STORAGE_KEY_LO), start_row_index + i) = w_lo(rw_trace[i].storage_key); + assignment.witness(component.W(component_type::RW_ID), start_row_index + i) = rw_trace[i].rw_id; + assignment.witness(component.W(component_type::IS_WRITE), start_row_index + i) = rw_trace[i].is_write; + assignment.witness(component.W(component_type::VALUE_HI), start_row_index + i) = w_hi(rw_trace[i].value); + assignment.witness(component.W(component_type::VALUE_LO), start_row_index + i) = w_lo(rw_trace[i].value); + + // Op selectors + typename BlueprintFieldType::integral_type mask = (1 << component_type::OP_SELECTORS_AMOUNT); + for( std::size_t j = 0; j < component_type::OP_SELECTORS_AMOUNT; j++){ + mask >>= 1; + assignment.witness(component.W(component_type::OP_SELECTORS[j]), start_row_index + i) = (((static_cast(rw_trace[i].op) & mask) == 0) ? 0 : 1); + } + + // Fill chunks. + // id + mask = 0xffff; + mask <<= 16; + assignment.witness(component.W(component_type::CHUNKS[0]), start_row_index + i) = (mask & integral_type(rw_trace[i].id)) >> 16; + mask >>= 16; + assignment.witness(component.W(component_type::CHUNKS[1]), start_row_index + i) = (mask & integral_type(rw_trace[i].id)); + + // address + mask = 0xffff; + mask <<= (16 * 9); + for( std::size_t j = 0; j < 10; j++){ + assignment.witness(component.W(component_type::CHUNKS[2+j]), start_row_index + i) = (((mask & integral_type(rw_trace[i].address)) >> (16 * (9-j)))); + mask >>= 16; + } + + // storage key + mask = 0xffff; + mask <<= (16 * 15); + for( std::size_t j = 0; j < 16; j++){ + assignment.witness(component.W(component_type::CHUNKS[12+j]), start_row_index + i) = (((mask & integral_type(rw_trace[i].storage_key)) >> (16 * (15-j)))); + mask >>= 16; + } + + // rw_key + mask = 0xffff; + mask <<= 16; + assignment.witness(component.W(component_type::CHUNKS[28]), start_row_index + i) = (mask & rw_trace[i].rw_id) >> 16; + mask >>= 16; + assignment.witness(component.W(component_type::CHUNKS[29]), start_row_index + i) = (mask & rw_trace[i].rw_id); + + // fill sorting indices and advices + if( i == 0 ) continue; + bool neq = true; + std::size_t diff_ind = 0; + for(; diff_ind < sorting.size(); diff_ind++){ + if( + assignment.witness(component.W(sorting[diff_ind]), start_row_index+i) != + assignment.witness(component.W(sorting[diff_ind]), start_row_index+i - 1) + ) break; + } + if( diff_ind < 30 ){ + assignment.witness(component.W(component_type::VALUE_BEFORE_HI), start_row_index + i) = w_hi(rw_trace[i].value_prev); + assignment.witness(component.W(component_type::VALUE_BEFORE_LO), start_row_index + i) = w_lo(rw_trace[i].value_prev); + } else { + assignment.witness(component.W(component_type::VALUE_BEFORE_HI), start_row_index + i) = assignment.witness(component.W(component_type::VALUE_BEFORE_HI), start_row_index + i - 1); + assignment.witness(component.W(component_type::VALUE_BEFORE_LO), start_row_index + i) = assignment.witness(component.W(component_type::VALUE_BEFORE_LO), start_row_index + i - 1); + } + + mask = (1 << component_type::INDICES_AMOUNT); + for(std::size_t j = 0; j < component_type::INDICES_AMOUNT; j++){ + mask >>= 1; + assignment.witness(component.W(component_type::INDICES[j]), start_row_index + i) = ((mask & diff_ind) == 0? 0: 1); + } + if( rw_trace[i].op != START_OP && diff_ind < 30){ + assignment.witness(component.W(component_type::IS_LAST), start_row_index + i - 1) = 1; + } + if( rw_trace[i].op != START_OP && rw_trace[i].op != PADDING_OP && diff_ind < 30){ + assignment.witness(component.W(component_type::IS_FIRST), start_row_index + i) = 1; + } + + assignment.witness(component.W(component_type::DIFFERENCE), start_row_index + i) = + assignment.witness(component.W(sorting[diff_ind]), start_row_index+i) - + assignment.witness(component.W(sorting[diff_ind]), start_row_index+i - 1); + if( rw_trace[i].op != PADDING_OP ) std::cout << "Diff index = " << diff_ind << + " is_first = " << assignment.witness(component.W(component_type::IS_FIRST), start_row_index + i) << + " is_last = " << assignment.witness(component.W(component_type::IS_LAST), start_row_index + i) << + std::endl; + + if( assignment.witness(component.W(component_type::DIFFERENCE), start_row_index + i) == 0) + assignment.witness(component.W(component_type::INV_DIFFERENCE), start_row_index + i) = 0; + else + assignment.witness(component.W(component_type::INV_DIFFERENCE), start_row_index + i) = BlueprintFieldType::value_type::one() / assignment.witness(component_type::DIFFERENCE, start_row_index+i); + } + + return typename component_type::result_type(component, start_row_index); + } + + template + std::array generate_gates( + const plonk_zkevm_rw &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_zkevm_rw::input_type + &instance_input, + const typename lookup_library::left_reserved_type &lookup_tables_indices + ) { + using component_type = plonk_zkevm_rw; + using var = typename component_type::var; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + + std::vector constraints; + std::vector lookup_constraints; + + var op = var(component.W(component_type::OP), 0, true); + var op_prev = var(component.W(component_type::OP), -1, true); + var op_next = var(component.W(component_type::OP), 1, true); + var is_write = var(component.W(component_type::IS_WRITE), 0, true); + var address = var(component.W(component_type::ADDRESS), 0, true); + var storage_key_hi = var(component.W(component_type::STORAGE_KEY_HI), 0, true); + var storage_key_lo = var(component.W(component_type::STORAGE_KEY_LO), 0, true); + var id = var(component.W(component_type::ID), 0, true); + var field = var(component.W(component_type::FIELD_TYPE), 0, true); + var address_prev = var(component.W(component_type::ADDRESS), -1, true); + var rw_id = var(component.W(component_type::RW_ID), 0, true); + var value_hi = var(component.W(component_type::VALUE_HI), 0, true); + var value_lo = var(component.W(component_type::VALUE_LO), 0, true); + var value_hi_prev = var(component.W(component_type::VALUE_HI), -1, true); + var value_lo_prev = var(component.W(component_type::VALUE_LO), -1, true); + var diff = var(component.W(component_type::DIFFERENCE), 0, true); + var inv_diff = var(component.W(component_type::INV_DIFFERENCE), 0, true); + var is_first = var(component.W(component_type::IS_FIRST), 0, true); + var is_first_prev = var(component.W(component_type::IS_FIRST), -1, true); + var is_last = var(component.W(component_type::IS_LAST), 0, true); + var value_before_hi = var(component.W(component_type::VALUE_BEFORE_HI), 0, true); + var value_before_lo = var(component.W(component_type::VALUE_BEFORE_LO), 0, true); + var value_before_hi_prev = var(component.W(component_type::VALUE_BEFORE_HI), -1, true); + var value_before_lo_prev = var(component.W(component_type::VALUE_BEFORE_LO), -1, true); + var state_root_hi = var(component.W(component_type::STATE_ROOT_HI), 0, true); + var state_root_lo = var(component.W(component_type::STATE_ROOT_LO), 0, true); + var state_root_before_hi = var(component.W(component_type::STATE_ROOT_HI), 0, true); + var state_root_before_lo = var(component.W(component_type::STATE_ROOT_LO), 0, true); + + // op bit decomposition + std::vector op_bits; + for(std::size_t i = 0; i < component_type::OP_SELECTORS_AMOUNT; i++){ + op_bits.push_back(var(component.W(component_type::OP_SELECTORS[i]),0, true)); + } + + auto op_bits_constraints = bit_tag_constraints(op_bits, rw_options_amount-1); // Here is maximum possible value + constraints.insert(constraints.end(), op_bits_constraints.begin(), op_bits_constraints.end()); + constraints.push_back(bit_tag_composition(op_bits, op)); + + // ordering bit decomposition + std::vector ind_bits; + std::vector ind_bits_next; + for(std::size_t i = 0; i < component_type::INDICES_AMOUNT; i++){ + ind_bits.push_back(var(component.W(component_type::INDICES[i]),0, true)); + ind_bits_next.push_back(var(component.W(component_type::INDICES[i]),1, true)); + } + + auto sorting_ids = sorting_columns(component); + auto ind_bits_constraints = bit_tag_constraints(ind_bits, sorting_ids.size() - 1); + constraints.insert(constraints.end(), ind_bits_constraints.begin(), ind_bits_constraints.end()); + + std::vector sorted; + for(std::size_t i = 0; i < sorting_ids.size(); i++){ + sorted.push_back(var(component.W(sorting_ids[i]),0, true)); + } + + std::vector chunks; + for(std::size_t i = 0; i < component_type::CHUNKS_AMOUNT; i++){ + chunks.push_back(var(component.W(component_type::CHUNKS[i]),0, true)); + } + + auto sorting_constraints = lexicographic_constraints( + sorted, ind_bits, + var(component.W(component_type::DIFFERENCE), 0, true) + ); + constraints.push_back(is_first * (is_first - 1)); + constraints.push_back(is_last * (is_last - 1)); + constraints.push_back((op - START_OP) * (op - PADDING_OP) * (1 - is_first) * (1 - ind_bits[0])); + constraints.push_back((op - START_OP) * (op - PADDING_OP) * (1 - is_first) * (1 - ind_bits[1])); + constraints.push_back((op - START_OP) * (op - PADDING_OP) * (1 - is_first) * (1 - ind_bits[2])); + constraints.push_back((op - START_OP) * (op - PADDING_OP) * (1 - is_first) * (1 - ind_bits[3])); + constraints.push_back((op - START_OP) * (op - PADDING_OP) * is_last * ind_bits_next[0] * ind_bits_next[1] * ind_bits_next[2] * ind_bits_next[3]); + + constraints.push_back(chunk16_composition({chunks[0], chunks[1]}, id)); + constraints.push_back(chunk16_composition({ + chunks[2], chunks[3], chunks[4], chunks[5], chunks[6], + chunks[7], chunks[8], chunks[9], chunks[10], chunks[11], + }, address)); + constraints.push_back(chunk16_composition({ + chunks[12], chunks[13], chunks[14], chunks[15], + chunks[16], chunks[17], chunks[18], chunks[19] + }, storage_key_hi)); + constraints.push_back(chunk16_composition({ + chunks[20], chunks[21], chunks[22], chunks[23], + chunks[24], chunks[25], chunks[26], chunks[27] + }, storage_key_lo)); + constraints.push_back(chunk16_composition({ + chunks[28], chunks[29] + }, rw_id)); + + // All chunks are 16 bits + for( std::size_t i = 0; i < component_type::CHUNKS_AMOUNT; i++){ + lookup_constraints.push_back({lookup_tables_indices.at("chunk_16_bits/full"), {chunks[i]}}); + } + // Define possible OP column values + + // Universal constraints for all rw operations + auto start_selector = bit_tag_selector(op_bits, START_OP); + auto stack_selector = bit_tag_selector(op_bits, STACK_OP); + auto memory_selector = bit_tag_selector(op_bits, MEMORY_OP); + auto storage_selector = bit_tag_selector(op_bits, STORAGE_OP); + auto transient_storage_selector = bit_tag_selector(op_bits, TRANSIENT_STORAGE_OP); + auto call_context_selector = bit_tag_selector(op_bits, CALL_CONTEXT_OP); + auto account_selector = bit_tag_selector(op_bits, ACCOUNT_OP); + auto tx_refund_selector = bit_tag_selector(op_bits, TX_REFUND_OP); + auto tx_access_list_account_selector = bit_tag_selector(op_bits, TX_ACCESS_LIST_ACCOUNT_OP); + auto tx_access_list_account_storage_selector = bit_tag_selector(op_bits, TX_ACCESS_LIST_ACCOUNT_STORAGE_OP); + auto tx_log_selector = bit_tag_selector(op_bits, TX_LOG_OP); + auto tx_receipt_selector = bit_tag_selector(op_bits, TX_RECEIPT_OP); + auto padding_selector = bit_tag_selector(op_bits, START_OP); + + constraints.push_back(is_write * (is_write - 1)); //2. is_write is either 0 or 1 + constraints.push_back((op - START_OP) * (op - PADDING_OP) * (is_first - 1) * (is_write - 1) * (value_hi - value_hi_prev)); // 4. for read operations value is equal to previous value + constraints.push_back((op - START_OP) * (op - PADDING_OP) * (is_first - 1) * (is_write - 1) * (value_lo - value_lo_prev)); // 4. for read operations value is equal to previous value + + // Specific constraints for START + constraints.push_back(start_selector * address); + constraints.push_back(start_selector * storage_key_hi); + constraints.push_back(start_selector * storage_key_lo); + constraints.push_back(start_selector * id); + constraints.push_back(start_selector * address); + constraints.push_back(start_selector * field); + constraints.push_back(start_selector * rw_id); + constraints.push_back(start_selector * value_before_hi); + constraints.push_back(start_selector * value_before_lo); + constraints.push_back(start_selector * state_root_hi); + constraints.push_back(start_selector * state_root_lo); + constraints.push_back(start_selector * state_root_before_hi); + constraints.push_back(start_selector * state_root_before_lo); + + // Specific constraints for STACK + constraints.push_back(stack_selector * field); + constraints.push_back(stack_selector * is_first * (1 - is_write)); // 4. First stack operation is obviously write + constraints.push_back(stack_selector * (address - address_prev) * (is_write - 1)); // 5. First operation is always write + constraints.push_back(stack_selector * (address - address_prev) * (address - address_prev - 1)); // 6. Stack pointer always grows and only by one + constraints.push_back(stack_selector * field); + constraints.push_back(stack_selector * storage_key_hi); + constraints.push_back(stack_selector * storage_key_lo); + constraints.push_back(stack_selector * value_before_hi); + constraints.push_back(stack_selector * value_before_lo); + constraints.push_back(stack_selector * (1 - is_first) * (state_root_hi - state_root_before_hi)); + constraints.push_back(stack_selector * (1 - is_first) * (state_root_lo - state_root_before_lo)); + lookup_constraints.push_back({lookup_tables_indices.at("chunk_16_bits/10bits"), {stack_selector * address}}); + + // Specific constraints for MEMORY + // address is 32 bit + constraints.push_back(memory_selector * field); + constraints.push_back(memory_selector * (is_first - 1) * (is_write - 1) * (value_lo - value_lo_prev)); // 4. for read operations value is equal to previous value + constraints.push_back(memory_selector * value_hi); + constraints.push_back(memory_selector * is_first * (is_write - 1) * value_lo); + constraints.push_back(memory_selector * field); + constraints.push_back(memory_selector * storage_key_hi); + constraints.push_back(memory_selector * storage_key_lo); + constraints.push_back(memory_selector * value_before_hi); + constraints.push_back(memory_selector * value_before_lo); + constraints.push_back(memory_selector * (1 - is_first) * (state_root_hi - state_root_before_hi)); + constraints.push_back(memory_selector * (1 - is_first) * (state_root_lo - state_root_before_lo)); + lookup_constraints.push_back({lookup_tables_indices.at("chunk_16_bits/8bits"), {memory_selector * value_lo}}); + + // Specific constraints for STORAGE + // lookup to MPT circuit + // field is 0 + constraints.push_back(storage_selector * field); + constraints.push_back(storage_selector * (1 - is_first) * (value_before_hi_prev - value_before_hi)); + constraints.push_back(storage_selector * (1 - is_first) * (value_before_lo_prev - value_before_lo)); + //lookup_constraints.push_back({"MPT table", { + // storage_selector * addr, + // storage_selector * field, + // storage_selector * storage_key_hi, + // storage_selector * storage_key_lo, + // storage_selector * value_before_hi, + // storage_selector * value_before_lo, + // storage_selector * value_hi, + // storage_selector * value_lo, + // storage_selector * state_root_hi, + // storage_selector * state_root_lo + //}}); + + // Specific constraints for TRANSIENT_STORAGE + // field is 0 + constraints.push_back(transient_storage_selector * field); + + // Specific constraints for CALL_CONTEXT + // address, storage_key, initial_value, value_prev are 0 + // state_root = state_root_prev + // range_check for field_flag + constraints.push_back(call_context_selector * address); + constraints.push_back(call_context_selector * storage_key_hi); + constraints.push_back(call_context_selector * storage_key_lo); + constraints.push_back(call_context_selector * (1 - is_first) * (state_root_hi - state_root_before_hi)); + constraints.push_back(call_context_selector * (1 - is_first) * (state_root_lo - state_root_before_lo)); + constraints.push_back(call_context_selector * value_before_hi); + constraints.push_back(call_context_selector * value_before_lo); + + // Specific constraints for ACCOUNT_OP + // id, storage_key 0 + // field_tag -- Range + // MPT lookup for last access + // value and value_prev consistency + constraints.push_back(account_selector * id); + constraints.push_back(account_selector * storage_key_hi); + constraints.push_back(account_selector * storage_key_lo); + constraints.push_back(account_selector * (1 - is_first) * (value_before_hi_prev - value_before_hi)); + constraints.push_back(account_selector * (1 - is_first) * (value_before_lo_prev - value_before_lo)); + //lookup_constraints.push_back({"MPT table", { + // storage_selector * is_last * addr, + // storage_selector * is_last * field, + // storage_selector * is_last * storage_key_hi, + // storage_selector * is_last * storage_key_lo, + // storage_selector * is_last * value_before_hi, + // storage_selector * is_last * value_before_lo, + // storage_selector * is_last * value_hi, + // storage_selector * is_last * value_lo, + // storage_selector * is_last * state_root_hi, + // storage_selector * is_last * state_root_lo, + // storage_selector * is_last * state_root_before_hi, + // storage_selector * is_last * state_root_before_lo + //}}); + + // Specific constraints for TX_REFUND_OP + // address, field_tag and storage_key are 0 + // state_root eqauls state_root_prev + // initial_value is 0 + // if first access is Read then value = 0 + constraints.push_back(tx_refund_selector * address); + constraints.push_back(tx_refund_selector * field); + constraints.push_back(tx_refund_selector * storage_key_hi); + constraints.push_back(tx_refund_selector * storage_key_lo); + constraints.push_back(tx_refund_selector * is_first * (1-is_write) * value_hi); + constraints.push_back(tx_refund_selector * is_first * (1-is_write) * value_lo); + constraints.push_back(tx_refund_selector * (state_root_hi - state_root_before_hi)); + constraints.push_back(tx_refund_selector * (state_root_lo - state_root_before_lo)); + + // Specific constraints for TX_ACCESS_LIST_ACCOUNT_OP + // field_tag and storage_key are 0 + // value is boolean + // initial_value is 0 + // state_root eqauls state_root_prev + // value column at previous rotation equals value_prev at current rotation + constraints.push_back(tx_access_list_account_selector * field); + constraints.push_back(tx_access_list_account_selector * storage_key_hi); + constraints.push_back(tx_access_list_account_selector * storage_key_lo); + constraints.push_back(tx_access_list_account_selector * value_hi); + constraints.push_back(tx_access_list_account_selector * value_lo * (1 - value_lo)); + constraints.push_back(tx_access_list_account_selector * (state_root_hi - state_root_before_hi)); + constraints.push_back(tx_access_list_account_selector * (state_root_lo - state_root_before_lo)); + constraints.push_back(tx_access_list_account_selector * (1 - is_first) * (value_hi_prev - value_before_hi)); + constraints.push_back(tx_access_list_account_selector * (1 - is_first) * (value_lo_prev - value_before_lo)); + + // Specific constraints for TX_ACCESS_LIST_ACCOUNT_STORAGE_OP + // field_tag is 0 + // value is boolean + // initial_value is 0 + // state_root eqauls state_root_prev + // value column at previous rotation equals value_prev at current rotation + constraints.push_back(tx_access_list_account_selector * field); + constraints.push_back(tx_access_list_account_selector * value_hi); + constraints.push_back(tx_access_list_account_selector * value_lo * (1 - value_lo)); + constraints.push_back(tx_access_list_account_selector * (state_root_hi - state_root_before_hi)); + constraints.push_back(tx_access_list_account_selector * (state_root_lo - state_root_before_lo)); + constraints.push_back(tx_access_list_account_selector * (1 - is_first) * (value_hi_prev - value_before_hi)); + constraints.push_back(tx_access_list_account_selector * (1 - is_first) * (value_lo_prev - value_before_lo)); + + // Specific constraints for TX_LOG_OP + // is_write is true + // initial_value is 0 + // state_root eqauls state_root_prev + // value_prev equals initial_value + // address 64 bits + constraints.push_back(tx_log_selector * (1 - is_write)); + constraints.push_back(tx_log_selector * (state_root_hi - state_root_before_hi)); + constraints.push_back(tx_log_selector * (state_root_lo - state_root_before_lo)); + constraints.push_back(tx_log_selector * value_before_hi); + constraints.push_back(tx_log_selector * value_before_lo); + + // Specific constraints for TX_RECEIPT_OP + // address and storage_key are 0 + // field_tag is boolean (according to EIP-658) + // tx_id increases by 1 and value increases as well if tx_id changes + // tx_id is 1 if it's the first row and tx_id is in 11 bits range + // state root is the same + // value_prev is 0 and initial_value is 0 + constraints.push_back(tx_receipt_selector * address); + constraints.push_back(tx_receipt_selector * storage_key_hi); + constraints.push_back(tx_receipt_selector * storage_key_lo); + + // Specific constraints for PADDING + constraints.push_back(padding_selector * address); + constraints.push_back(padding_selector * storage_key_hi); + constraints.push_back(padding_selector * storage_key_lo); + constraints.push_back(padding_selector * id); + constraints.push_back(padding_selector * address); + constraints.push_back(padding_selector * field); + constraints.push_back(padding_selector * rw_id); + constraints.push_back(padding_selector * state_root_hi); + constraints.push_back(padding_selector * state_root_lo); + constraints.push_back(padding_selector * state_root_before_hi); + constraints.push_back(padding_selector * state_root_before_lo); + constraints.push_back(padding_selector * value_hi); + constraints.push_back(padding_selector * value_lo); + constraints.push_back(padding_selector * value_before_hi); + constraints.push_back(padding_selector * value_before_lo); + + constraints.push_back((op-START_OP) * (op-PADDING_OP) * (diff * inv_diff - 1)); + lookup_constraints.push_back({lookup_tables_indices.at("chunk_16_bits/full"), {diff}}); + + //TODO: range check stack pointer with 1024 + + std::size_t selector_id = bp.add_gate(constraints); + bp.add_lookup_gate(selector_id, lookup_constraints); + + std::size_t not_first_selector_id = bp.add_gate(sorting_constraints); + std::array selectors = {selector_id, not_first_selector_id}; + + return selectors; + } + + template + void generate_copy_constraints( + const plonk_zkevm_rw &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_zkevm_rw::input_type + &instance_input, + const std::size_t start_row_index + ) { + // TODO: add copy constraints + } + + template + typename plonk_zkevm_rw::result_type generate_circuit( + const plonk_zkevm_rw &component, + circuit> &bp, + assignment> + &assignment, + const typename plonk_zkevm_rw::input_type + &instance_input, + const std::size_t start_row_index + ) { + std::cout << "Generate circuit" << std::endl; + + using component_type = plonk_zkevm_rw; + + std::array selectors = generate_gates(component, bp, assignment, instance_input, bp.get_reserved_indices()); + std::size_t selector = selectors[0]; + std::size_t not_first_selector = selectors[1]; + + assignment.enable_selector( + selector, start_row_index, start_row_index + component.rows_amount - 1); + assignment.enable_selector( + not_first_selector, start_row_index, start_row_index + component.rows_amount - 1 + ); + generate_copy_constraints(component, bp, assignment, instance_input, start_row_index); + + return typename component_type::result_type(component, start_row_index); + } + } // namespace components + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/stack.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/stack.hpp index e2af7d3229..91f24d1402 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/stack.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/stack.hpp @@ -36,33 +36,31 @@ namespace nil { using word_type = zkevm_word_type; void push(const word_type& word) { - stack.push(word); + stack.push_back(word); } word_type pop() { - word_type word = stack.top(); - stack.pop(); + word_type word = stack.back(); + stack.pop_back(); return word; } - word_type top() { - return stack.top(); + word_type top(std::size_t depth=0) const{ + return stack[stack.size() - 1 - depth]; } - void swap() { - word_type a = pop(); - word_type b = pop(); - push(a); - push(b); + std::size_t size() const { + return stack.size(); } - void dup() { - word_type a = pop(); - push(a); - push(a); + zkevm_stack(): stack({}){ + } + + zkevm_stack(std::vector _stack){ + stack = _stack; } private: - std::stack stack; + std::vector stack; }; } // namespace blueprint } // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/state.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/state.hpp index 8f02a5fcf9..f00196bc24 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/state.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/state.hpp @@ -1,5 +1,7 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova // // MIT License // @@ -34,222 +36,53 @@ namespace nil { namespace blueprint { - - // we use value_type as a default here in order to have easier time testing weird assignments like -1 - template - struct state_var { - using arithmetization_type = crypto3::zk::snark::plonk_constraint_system; - using assignment_type = nil::blueprint::assignment; + // It is really simplified state variable. We assume that each state position uses the whole column. + // In this case variable is defined only by witness column id. + // It's useful to have some convenient functions for rotations for circuit construction and absolute variables for assignment. + template + struct state_variable:public crypto3::zk::snark::plonk_variable{ using var = crypto3::zk::snark::plonk_variable; - using column_type = typename var::column_type; - - std::size_t selector; - column_type type; - T value; - - state_var(const std::size_t selector_, const column_type type_, const T& value_) - : selector(selector_), type(type_), value(value_) {} - - state_var() = default; - - void set_value(const T &new_value) { - value = new_value; + state_variable(std::uint32_t witness_id = 0, typename var::column_type t = var::column_type::witness): var(witness_id, 0, true, t){} + var operator() () const { + return var(this->index, 0, true, this->type); } - - void assign_value(assignment_type &assignment, std::size_t row) const { - switch (type) { - case column_type::witness: - assignment.witness(selector, row) = value; - break; - case column_type::constant: - assignment.constant(selector, row) = value; - break; - case column_type::selector: - assignment.selector(selector, row) = value; - break; - case column_type::public_input: - BOOST_ASSERT("We should not assign a state value to public input column"); - default: - BOOST_ASSERT("Unknown column type"); - } + var next() const { + return var(this->index, 1, true, this->type); } - - void set_and_assign_value(assignment_type &assignment, std::size_t row, const T &new_value) { - set_value(new_value); - assign_value(assignment, row); + var prev() const { + return var(this->index, -1, true, this->type); } - - var variable(int32_t offset = 0) const { - BOOST_ASSERT(offset == 0 || offset == -1 || offset == 1); - return var(selector, offset, true, type); + var abs(std::size_t row) const { + return var(this->index, row, false, this->type); } }; - - #define zkevm_STATE_LIST_FOR_TRANSITIONS(X) \ - X(pc) \ - X(stack_size) \ - X(memory_size) \ - X(curr_gas) \ - - // Every variable which should be tracked between rows + // This class just contains state variables zkEVM state and next state + // We'll write all state transition constraints directly in zkevm circuit. + // All variables are named. + // This data structure is filled only once by + // zkevm_circuit + // zkevm_table has it as a constant input. template - struct zkevm_state { - using state_var_type = state_var; - using arithmetization_type = crypto3::zk::snark::plonk_constraint_system; - using assignment_type = nil::blueprint::assignment; - // variables which have custom state transitions - #define X(name) state_var_type name; - zkevm_STATE_LIST_FOR_TRANSITIONS(X) - #undef X - // variables which have generic transition rules and are not handled via - // state transition mechanism - state_var_type step_selection; - state_var_type rows_until_next_op; - state_var_type rows_until_next_op_inv; - - void assign_state(assignment_type &assignment, std::size_t row) const { - #define X(name) name.assign_value(assignment, row); - zkevm_STATE_LIST_FOR_TRANSITIONS(X) - #undef X - step_selection.assign_value(assignment, row); - rows_until_next_op.assign_value(assignment, row); - rows_until_next_op_inv.assign_value(assignment, row); - } - }; - - struct transition_type { - enum type { - DEFAULT, - ANY, - SAME_VALUE, - DELTA, - NEW_VALUE, - }; - transition_type() - :t(DEFAULT), - value(0){} - - type t; - // either new value or delta; optional - // technically we could do arbirary field values here, but unlikely to be actually required - std::int64_t value; - }; - - std::ostream& operator<<(std::ostream &os, const transition_type &t) { - switch (t.t) { - case transition_type::DEFAULT: - os << "DEFAULT"; - break; - case transition_type::ANY: - os << "ANY"; - break; - case transition_type::SAME_VALUE: - os << "SAME_VALUE"; - break; - case transition_type::DELTA: - os << "DELTA(" << t.value << ")"; - break; - case transition_type::NEW_VALUE: - os << "NEW_VALUE(" << t.value << ")"; - break; - } - return os; - } - - struct zkevm_state_transition { - #define X(name) transition_type name; - zkevm_STATE_LIST_FOR_TRANSITIONS(X) - #undef X + struct zkevm_vars { + using var = crypto3::zk::snark::plonk_variable; + using state_var = state_variable; + public: + state_var pc; + state_var stack_size; + state_var memory_size; + state_var gas; + state_var opcode; // it's Id in the list of used opcodes + state_var real_opcode; // real_opcode is real opcode that will be looked up in bytecode table + state_var bytecode_hash_hi; // will be looked up in bytecode table + state_var bytecode_hash_lo; // will be lookup up in bytecode table + state_var tx_status; // error indicator may be set by error opcodes and for usual opcodes too + + state_var row_counter; // Decreasing row counter + state_var step_start; // 1 in first line of new opcode, 0 otherwise + state_var row_counter_inv; + state_var last_row_indicator; // Do we really need it? I don't think so. Last opcode should be RETURN, err or padding. + state_var opcode_parity; // opcode%2 + state_var is_even; // TODO: Do it constant column }; - - zkevm_state_transition generate_frozen_state_transition() { - zkevm_state_transition transition; - #define X(name) transition.name.t = transition_type::SAME_VALUE; - zkevm_STATE_LIST_FOR_TRANSITIONS(X) - #undef X - return transition; - } - - std::ostream& operator<<(std::ostream &os, const zkevm_state_transition &t) { - #define X(name) os << #name << ": " << t.name << std::endl; - zkevm_STATE_LIST_FOR_TRANSITIONS(X) - #undef X - return os; - } - - template - std::optional> handle_transition( - const state_var &var, - const transition_type &transition, - std::function( - const state_var&, const transition_type&)> default_handler - ) { - switch (transition.t) { - case transition_type::SAME_VALUE: - return var.variable(+1) - var.variable(); - case transition_type::DELTA: - return var.variable(+1) - var.variable() - transition.value; - case transition_type::NEW_VALUE: - return var.variable(+1) - transition.value; - case transition_type::DEFAULT: - return default_handler(var, transition); - case transition_type::ANY: - return std::nullopt; - } - } - - template - crypto3::zk::snark::plonk_constraint handle_pc_default( - const state_var &var, - const transition_type &transition - ) { - // same as DELTA(1) - return var.variable(+1) - var.variable() - 1; - } - - template - crypto3::zk::snark::plonk_constraint handle_stack_size_default( - const state_var &var, - const transition_type &transition - ) { - // same as SAME - return var.variable(+1) - var.variable(); - } - - template - crypto3::zk::snark::plonk_constraint handle_memory_size_default( - const state_var &var, - const transition_type &transition - ) { - // same as SAME - return var.variable(+1) - var.variable(); - } - - template - crypto3::zk::snark::plonk_constraint handle_curr_gas_default( - const state_var &var, - const transition_type &transition - ) { - // we shouldn't do this? maybe in error cases or testing? - // later should assert this out, currently SAME - return var.variable(+1) - var.variable(); - } - - template - std::vector> generate_transition_constraints( - const zkevm_state &state, - const zkevm_state_transition &transition - ) { - using constraint_type = crypto3::zk::snark::plonk_constraint; - std::vector result; - #define X(name) \ - if (auto constraint = handle_transition( \ - state.name, transition.name, handle_##name##_default)) { \ - result.push_back(*constraint); \ - } - zkevm_STATE_LIST_FOR_TRANSITIONS(X) - #undef X - return result; - } } // namespace blueprint } // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/bit_tags.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/bit_tags.hpp new file mode 100644 index 0000000000..561179fa27 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/bit_tags.hpp @@ -0,0 +1,122 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + // This is utils for compressing bit-selectors + // Assume that we have tag column with 0..N-1 options. + // They may be packed in ceil(log2(N)) selector columns. + + template + std::vector> + bit_tag_constraints( + const std::vector> &bit_columns, + typename BlueprintFieldType::integral_type N // Maximum value + ){ + using constraint_type = crypto3::zk::snark::plonk_constraint; + BOOST_ASSERT_MSG((1 << bit_columns.size()) > N, "Not enough columns for tag decomposition"); + + std::vector> result; + + // Result of decomposition should be less than N + typename BlueprintFieldType::integral_type mask = (1 << bit_columns.size()); + constraint_type prefix; + bool first = true; + for(std::size_t i = 0; i < bit_columns.size(); i++){ + mask >>= 1; + if( mask > N ){ + result.push_back(bit_columns[i]); // if N < mask, bit column from mask should be 0 + continue; + } + result.push_back(bit_columns[i] * (bit_columns[i] - 1)); // overwise bit colums are with 0 or 1-s + if( mask & N ){ + if( first ) { + first = false; + prefix = bit_columns[i]; + } else { + prefix *= bit_columns[i]; // if N-th bit is all comparing relations will be on put on this case + } + } else { + result.push_back(prefix * bit_columns[i]); // for prefix this column should be 0 + } + } + return result; + } + + template + crypto3::zk::snark::plonk_constraint + bit_tag_selector( + const std::vector> &bit_columns, + std::size_t k + ){ + crypto3::zk::snark::plonk_constraint result; + typename BlueprintFieldType::integral_type mask = (1 << bit_columns.size()); + bool first = true; + for( std::size_t i = 0; i < bit_columns.size(); i++ ){ + mask >>= 1; + if( first ){ + first = false; + result = (((mask & k) == 0)?(1 - bit_columns[i]) : bit_columns[i]); + } else + result*= (((mask & k) == 0)?(1 - bit_columns[i]) : bit_columns[i]); + } + + return result; + } + + template + crypto3::zk::snark::plonk_constraint + bit_tag_composition( + const std::vector> &bit_columns, + const crypto3::zk::snark::plonk_variable &k + ){ + crypto3::zk::snark::plonk_constraint result; + typename BlueprintFieldType::integral_type mask = (1 << bit_columns.size()); + + for( std::size_t i = 0; i < bit_columns.size(); i++ ){ + mask >>= 1; + result *= 2; + result += bit_columns[i]; + } + result -= k; + + return result; + } + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/chunks16.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/chunks16.hpp new file mode 100644 index 0000000000..e45216a758 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/chunks16.hpp @@ -0,0 +1,62 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace components { + // chunks are not range checked here. + template + crypto3::zk::snark::plonk_constraint + chunk16_composition( + const std::vector> &chunks, + const crypto3::zk::snark::plonk_variable &acc + ){ + std::cout << "Chunk 16 composition" << chunks.size() << std::endl; + crypto3::zk::snark::plonk_constraint constr; + constr = chunks[0]; + for( std::size_t i = 1; i < chunks.size(); i++){ + std::cout << i << std::endl; + constr *= (1 << 16); + constr += chunks[i]; + std::cout << "done" << std::endl; + } + constr -= acc; + return constr; + } + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/lexicographic.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/lexicographic.hpp new file mode 100644 index 0000000000..3d9c435dd5 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/lexicographic.hpp @@ -0,0 +1,73 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +namespace nil { + namespace blueprint { + namespace components { + // Chunks are not range checked here + template + std::vector> + lexicographic_constraints( + const std::vector> &chunk_columns, + const std::vector> &indices_columns, + const crypto3::zk::snark::plonk_variable &diff + ){ + using var = crypto3::zk::snark::plonk_variable; + using constraint_type = crypto3::zk::snark::plonk_constraint; + std::vector constraints; + + for(int i = 0; i < chunk_columns.size(); i++){ + constraint_type dyn_selector = bit_tag_selector(indices_columns, i); + std::cout << "Lexicographic constraints " << i << ": " << dyn_selector << std::endl; + for(int j = 0; j < i; j++){ + var chunk = chunk_columns[j]; + var chunk_prev (chunk_columns[j].index, -1, true); + constraints.push_back(dyn_selector * (chunk - chunk_prev)); + //std::cout << "\t" << dyn_selector * (chunk - chunk_prev) << std::endl; + } + var chunk = chunk_columns[i]; + var chunk_prev (chunk_columns[i].index, -1, true); + constraints.push_back(dyn_selector * (chunk - chunk_prev - diff)); + } + + return constraints; + } + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/ptree.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/ptree.hpp new file mode 100644 index 0000000000..83fa86bef3 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/util/ptree.hpp @@ -0,0 +1,66 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include + +namespace nil { + namespace blueprint { + std::vector zkevm_word_vector_from_ptree(const boost::property_tree::ptree &ptree){ + std::vector result; + for(auto it = ptree.begin(); it != ptree.end(); it++){ + result.push_back(zkevm_word_from_string(it->second.data())); + } + return result; + } + + std::map key_value_storage_from_ptree(const boost::property_tree::ptree &ptree){ + std::map result; +// std::cout << "Storage:" << std::endl; + for(auto it = ptree.begin(); it != ptree.end(); it++){ + result[zkevm_word_from_string(it->first.data())] = zkevm_word_from_string(it->second.data()); +// std::cout << "\t" << it->first.data() << "=>" << it->second.data() << std::endl; + } + return result; + } + + std::vector byte_vector_from_ptree(const boost::property_tree::ptree &ptree){ + std::vector result; +// std::cout << "MEMORY words " << ptree.size() << ":"; + for(auto it = ptree.begin(); it != ptree.end(); it++){ + for(std::size_t i = 0; i < it->second.data().size(); i+=2){ + std::uint8_t byte = char_to_hex(it->second.data()[i]) * 16 + char_to_hex(it->second.data()[i+1]); +// std::cout << std::hex << std::setw(2) << std::setfill('0') << std::size_t(byte) << " "; + result.push_back(byte); + } + } +// std::cout << std::endl; + return result; + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_circuit.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_circuit.hpp index 5aec15841b..6b88902588 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_circuit.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_circuit.hpp @@ -1,5 +1,7 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova // // MIT License // @@ -33,14 +35,45 @@ #include #include +#include + #include -#include +#include #include +#include #include #include #include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include namespace nil { namespace blueprint { @@ -48,7 +81,7 @@ namespace nil { // selectors are already tracked by circuit object by default // we implement only automatic extension of the amount of colunmns taken for convinience template - class selector_manager { + class columns_manager { public: using arithmetization_type = crypto3::zk::snark::plonk_constraint_system; using assignment_type = nil::blueprint::assignment; @@ -56,37 +89,34 @@ namespace nil { using constraint_type = crypto3::zk::snark::plonk_constraint; using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; - selector_manager(assignment_type &assignment_, circuit_type &circuit_) - : assignment(assignment_), circuit(circuit_), - witness_index(0), constant_index(0) {} + columns_manager(assignment_type &assignment_) + : assignment(assignment_), witness_index(0), constant_index(0), selector_index(0) {} - std::size_t allocate_witess_column() { + std::size_t allocate_witness_column() { if (witness_index >= assignment.witnesses_amount()) { - assignment.resize_witnesses(2 * witness_index); + assignment.resize_witnesses(witness_index + 1); } return witness_index++; } std::size_t allocate_constant_column() { if (constant_index >= assignment.constants_amount()) { - assignment.resize_constants(2 * constant_index); + assignment.resize_constants(constant_index + 1); } return constant_index++; } - template - std::size_t add_gate(const T &args) { - std::size_t selector = circuit.add_gate(args); - if (selector >= assignment.selectors_amount()) { - assignment.resize_selectors(selector + 1); + std::size_t allocate_selector_column(){ + if (selector_index >= assignment.selectors_amount()) { + assignment.resize_selectors(selector_index + 1); } - return selector; + return selector_index++; } private: assignment_type &assignment; - circuit_type &circuit; std::size_t witness_index; std::size_t constant_index; + std::size_t selector_index; }; template @@ -98,158 +128,217 @@ namespace nil { using arithmetization_type = crypto3::zk::snark::plonk_constraint_system; using assignment_type = nil::blueprint::assignment; using circuit_type = nil::blueprint::circuit; - using state_var_type = state_var; - using zkevm_state_type = zkevm_state; - using selector_manager_type = selector_manager; + using state_var = state_variable; + using zkevm_state_type = zkevm_vars; + using columns_manager_type = columns_manager; using zkevm_operation_type = zkevm_operation; using zkevm_opcode_gate_class = typename zkevm_operation::gate_class; - using state_selector_type = components::state_selector; + using index_selector_type = components::index_selector; using constraint_type = crypto3::zk::snark::plonk_constraint; using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; using value_type = typename BlueprintFieldType::value_type; using var = typename crypto3::zk::snark::plonk_variable; + using bytecode_table_component = typename components::plonk_zkevm_bytecode_table; + + zkevm_circuit(assignment_type &assignment_, circuit_type &circuit, std::size_t _max_rows = 249, std::size_t _max_bytecode_size = 100, std::size_t start_row_index_ = 1) + :assignment(assignment_), opcodes_info_instance(opcodes_info::instance()), + start_row_index(start_row_index_), max_rows(_max_rows % 2? _max_rows: _max_rows-1), max_bytecode_size(_max_bytecode_size), + lookup_tables_indices(circuit.get_reserved_indices()) + { + columns_manager_type col_manager(assignment); // Just helps us to deal with assignment table columns + + for (auto &lookup_table : zkevm_circuit_lookup_tables()) { + if( lookup_table.second == 0 ){ + std::cout << "Static table " << lookup_table.first << std::endl; + circuit.reserve_table(lookup_table.first); + }else{ + std::cout << "Dynamic table " << lookup_table.first << std::endl; + circuit.reserve_dynamic_table(lookup_table.first); + } + } + lookup_tables_indices = circuit.get_reserved_indices(); + + BOOST_ASSERT_MSG(start_row_index > 0, + "Start row index must be greater than zero, otherwise some gates would access non-existent rows."); + init_state(col_manager); + init_opcodes(circuit, col_manager); + + // 5(?) constant columns. I'm not sure we really need them: satisfiability check passes even without them + // We really need them to run lookup argument. Should be removed when we'll use logUp. + for(std::size_t i = 0; i < 6; i++) { + col_manager.allocate_constant_column(); + } + + col_manager.allocate_selector_column(); + col_manager.allocate_selector_column(); + assignment.resize_selectors(assignment.selectors_amount() + 9 + dynamic_tables_amount); // for lookup table packing + + allocate_dynamic_tables_columns(col_manager); + // Add for dynamic lookup tables for the constraint system + bytecode_table_component bytecode_table({ + bytecode_witnesses[0], bytecode_witnesses[1], bytecode_witnesses[2], + bytecode_witnesses[3], bytecode_witnesses[4], bytecode_witnesses[5] + }, {}, {}, max_bytecode_size); + typename bytecode_table_component::input_type input;// Add input variables + + col_manager.allocate_selector_column(); // Bytecode_table needs only one selector + generate_circuit(bytecode_table, circuit, assignment, input, 0); + + assignment.enable_selector(end_selector, start_row_index + max_rows - 1); + assignment.enable_selector(start_selector, start_row_index); + assignment.enable_selector(middle_selector, start_row_index, max_rows-1); + + // It is a public column, we shouldn't prove that it is correct; + for(std::size_t i = 0; i < max_rows; i++ ){ + assignment.constant(state.is_even().index, i + start_row_index) = 1 - i%2; + } + lookup_tables_indices = circuit.get_reserved_indices(); + } std::map zkevm_circuit_lookup_tables() const { std::map lookup_tables; lookup_tables["chunk_16_bits/full"] = 0; + lookup_tables["byte_and_xor_table/and"] = 0; + lookup_tables["byte_and_xor_table/xor"] = 0; + lookup_tables["zkevm_bytecode"] = 1; return lookup_tables; } - - zkevm_circuit(assignment_type &assignment_, circuit_type &circuit_, std::size_t start_row_index_ = 1) - :assignment(assignment_), circuit(circuit_), opcodes_info_instance(opcodes_info::instance()), - sel_manager(assignment_, circuit_), - curr_row(start_row_index_), start_row_index(start_row_index_) { - - BOOST_ASSERT_MSG(start_row_index > 0, - "Start row index must be greater than zero, otherwise some gates would access non-existent rows."); - for (auto &lookup_table : zkevm_circuit_lookup_tables()) { - circuit.reserve_table(lookup_table.first); + protected: + // May be reviewed somehow. Now I'll do the most straight way + // Each table has its separate columns and selectors. + // They definitely may be packed more effectively + void allocate_dynamic_tables_columns(columns_manager_type &col_manager){ + // Bytecode table + std::cout << "bytecode dynamic table witness amount = " << bytecode_table_component::witness_amount << std::endl; + for( std::size_t i = 0; i < bytecode_table_component::witness_amount; i++){ + bytecode_witnesses.push_back(col_manager.allocate_witness_column()); } - init_state(); - init_opcodes(); } - void assign_state() { - state.assign_state(assignment, curr_row); + // Constraint for all rows for given opcode + constraint_type opcode_selector_constraint(std::size_t opcode_num){ + std::size_t bit1 = (opcode_num % 4 == 3) || (opcode_num % 4 == 2); + state_var o4 = opcode_selector->index(opcode_num/4); + constraint_type o2_constraint = bit1 ? state.is_even() * o4.next() + state.is_even.prev() * o4() : state.is_even() * o4() + state.is_even.prev() * o4.prev(); + constraint_type opcode_parity = opcode_num%2 ? state.opcode_parity(): 1 - state.opcode_parity(); + return o2_constraint * opcode_parity;// Degree 3 } - void finalize_test() { - finalize(); - // this is done in order for the vizualiser export to work correctly before padding the circuit. - // otherwise constraints try to access non-existent rows - assignment.witness(state_selector->W(0), curr_row) = value_type(0xC0FFEE); + // Constraint for given row for opcode + constraint_type opcode_row_selector_constraint(std::size_t opcode_num, std::size_t row){ + std::size_t bit1 = (opcode_num % 4 == 3) || (opcode_num % 4 == 2); + state_var row_var = row_selector->index(row/2); + state_var o4 = opcode_selector->index(opcode_num/4); + constraint_type o2_constraint; + if(row % 2) + o2_constraint = bit1 ? state.is_even() * o4.next() : state.is_even() * o4(); + else + o2_constraint = bit1 ? state.is_even.prev() * o4() : state.is_even.prev() * o4.prev(); + constraint_type opcode_parity = opcode_num%2 ? state.opcode_parity(): 1 - state.opcode_parity(); + return o2_constraint * opcode_parity * row_var();// Degree 3 + } + public: + const std::size_t get_opcode_range_checked_cols_amount() const { + return opcode_range_checked_cols_amount; + } + const std::shared_ptr get_row_selector() const{ + return row_selector; } - void finalize() { - BOOST_ASSERT_MSG(curr_row != 0, "Row underflow in finalization"); - assignment.enable_selector(end_selector, curr_row - 1); + const std::shared_ptr get_opcode_selector() const{ + return opcode_selector; } - void assign_opcode(const zkevm_opcode opcode, zkevm_machine_interface &machine) { - auto opcode_it = opcodes.find(opcode); - if (opcode_it == opcodes.end()) { - BOOST_ASSERT_MSG(false, (std::string("Unimplemented opcode: ") + opcode_to_string(opcode)) != ""); - } - opcode_it->second->generate_assignments(*this, machine); - // state management - state.step_selection.value = 1; - state.rows_until_next_op.value = opcode_it->second->rows_amount() - 1; - state.rows_until_next_op_inv.value = - state.rows_until_next_op.value == 0 ? 0 : state.rows_until_next_op.value.inversed(); - advance_rows(opcode, opcode_it->second->rows_amount()); + const opcodes_info get_opcodes_info() const{ + return opcodes_info_instance; } - void advance_rows(const zkevm_opcode opcode, std::size_t rows) { - assignment.enable_selector(middle_selector, curr_row, curr_row + rows - 1); - // TODO: figure out what is going to happen on state change - value_type opcode_val = opcodes_info_instance.get_opcode_value(opcode); - for (std::size_t i = 0; i < rows; i++) { - // TODO: switch to real bytecode - assignment.witness(state_selector->W(0), curr_row) = opcode_val; - components::generate_assignments( - *state_selector, assignment, - {var(state_selector->W(0), curr_row, false, var::column_type::witness)}, curr_row); - assignment.witness(opcode_row_selector->W(0), curr_row) = state.rows_until_next_op.value; - components::generate_assignments( - *opcode_row_selector, assignment, - {var(opcode_row_selector->W(0), curr_row, false, var::column_type::witness)}, curr_row); - assign_state(); - if (i == 0) { - state.step_selection.value = 0; - } - assignment.witness(state_selector->W(0), curr_row) = opcode_val; - state.rows_until_next_op.value = state.rows_until_next_op.value - 1; - state.rows_until_next_op_inv.value = state.rows_until_next_op.value == 0 ? - 0 : state.rows_until_next_op.value.inversed(); - curr_row++; - } + const std::map>> &get_opcodes() const{ + return opcodes; } - zkevm_state_type &get_state() { + const zkevm_state_type &get_state() const{ return state; } - selector_manager_type &get_selector_manager() { - return sel_manager; + const std::vector &get_opcode_selector_cols() const{ + return opcode_selector_cols; } - const std::vector &get_state_selector_cols() { - return state_selector_cols; + const std::vector &get_opcode_cols() const{ + return opcode_cols; } - const std::vector &get_opcode_cols() { - return opcode_cols; + std::size_t get_start_row_index() const { + return start_row_index; } - std::size_t get_current_row() const { - return curr_row; + std::size_t get_max_rows() const{ + return max_rows; } assignment_type &get_assignment() { return assignment; } - circuit_type &get_circuit() { - return circuit; + const typename lookup_library::left_reserved_type &get_reserved_indices() const{ + return lookup_tables_indices; } - // for opcode constraints at certain row of opcode execution // note that rows are counted "backwards", starting from opcode rows amount minus one // and ending in zero - constraint_type get_opcode_row_constraint(std::size_t row, std::size_t opcode_height) const { + /*constraint_type get_opcode_row_constraint(std::size_t row, std::size_t opcode_height) const { BOOST_ASSERT(row < opcode_height); - var height_var = state.rows_until_next_op.variable(); - var height_var_inv = state.rows_until_next_op_inv.variable(); + + var height_var = opcode_row_selector->option_variable(); + var height_var_inv = state.row_counter_inv; // ordering here is important: minimising the degree when possible if (row == opcode_height - 1) { - return state.step_selection.variable(); + return state.step_start; } if (row == opcode_height - 2) { - return state.step_selection.variable(-1); + return state.step_start.prev(); } if (row == 0) { return 1 - height_var * height_var_inv; } // TODO: this is probably possible to optimise return opcode_row_selector->option_constraint(row); + }*/ + + const std::vector &get_bytecode_witnesses() const{ + return bytecode_witnesses; + } + + std::size_t get_range_check_table_id() const{ + return range_check_table_index; + } + + std::size_t get_bytecode_table_id() const{ + return bytecode_table_index; } private: - void init_state() { - state.pc = state_var_type( - sel_manager.allocate_witess_column(), state_var_type::column_type::witness, 1); - state.stack_size = state_var_type( - sel_manager.allocate_witess_column(), state_var_type::column_type::witness, 0); - state.memory_size = state_var_type( - sel_manager.allocate_witess_column(), state_var_type::column_type::witness, 0); - state.curr_gas = state_var_type( - sel_manager.allocate_witess_column(), state_var_type::column_type::witness, 0); - state.rows_until_next_op = state_var_type( - sel_manager.allocate_witess_column(), state_var_type::column_type::witness, 0); - state.rows_until_next_op_inv = state_var_type( - sel_manager.allocate_witess_column(), state_var_type::column_type::witness, 0); - state.step_selection = state_var_type( - sel_manager.allocate_witess_column(), state_var_type::column_type::witness, 1); + void init_state(columns_manager_type &col_manager) { + state.pc = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.stack_size = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.memory_size = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.gas = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.opcode = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.real_opcode = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.bytecode_hash_hi = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.bytecode_hash_lo = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + + state.row_counter = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.row_counter_inv = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.step_start = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + //state.last_row_indicator = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.opcode_parity = typename zkevm_state_type::state_var(col_manager.allocate_witness_column()); + state.is_even = typename zkevm_state_type::state_var(col_manager.allocate_constant_column(), var::column_type::constant); + } + + std::vector generate_selectors_constraints(){ + return {}; } std::vector generate_generic_transition_constraints( @@ -258,125 +347,370 @@ namespace nil { ) { std::vector constraints; - auto rows_until_next_op_var = state.rows_until_next_op.variable(); - auto rows_until_next_op_prev_var = state.rows_until_next_op.variable(-1); - auto rows_until_next_op_next_var = state.rows_until_next_op.variable(+1); - auto rows_until_next_op_inv_var = state.rows_until_next_op_inv.variable(); - auto rows_until_next_op_inv_prev_var = state.rows_until_next_op_inv.variable(-1); - auto step_selection_var = state.step_selection.variable(); - auto step_selection_next_var = state.step_selection.variable(+1); - auto option_variable = state_selector->option_variable(0); - auto option_variable_prev = state_selector->option_variable(-1); - // inverse or zero for rows_until_next_op/rows_until_next_op_inv - constraints.push_back( - rows_until_next_op_var * rows_until_next_op_var * rows_until_next_op_inv_var - - rows_until_next_op_var); - constraints.push_back( - (rows_until_next_op_var * rows_until_next_op_inv_var - 1) * rows_until_next_op_inv_var); - // rows_until_next_op decrementing (unless we are at the last row of opcode) - constraints.push_back( - rows_until_next_op_var * (rows_until_next_op_next_var - rows_until_next_op_var + 1)); + state_var row_counter = state.row_counter; + state_var row_counter_inv = state.row_counter_inv; + state_var step_start = state.step_start; + state_var opcode = state.opcode; + + constraints.push_back(row_counter() * (row_counter() * row_counter_inv() - 1 )); //GEN1 + constraints.push_back(row_counter_inv() * (row_counter() * row_counter_inv() - 1)); //GEN2 + // row_counter decrementing (unless we are at the last row of opcode) + constraints.push_back(row_counter() * (row_counter.next() - row_counter() + 1)); //GEN3 + // step_start is 0 or 1 + constraints.push_back((1 - step_start()) * step_start()); //GEN4 + // step_start = 1 if previous row_counter is 0 + constraints.push_back(step_start() * row_counter.prev()); //GEN5 // step is copied unless new opcode is next - constraints.push_back( - (1 - step_selection_var) * (option_variable - option_variable_prev)); + constraints.push_back((1 - step_start()) * (opcode() - opcode.prev())); //GEN6 // new opcode selection is forced if new opcode is next - constraints.push_back( - (1 - rows_until_next_op_inv_prev_var * rows_until_next_op_prev_var) * (1 - step_selection_var)); - // freeze some of the the state variables unless new opcode is next - // or we are at the end of the circuit - auto partial_state_transition_constraints = generate_transition_constraints( - state, generate_frozen_state_transition()); - for (auto constraint : partial_state_transition_constraints) { - constraints.push_back( - (1 - var(end_selector, 0, true, var::column_type::selector)) * - (1 - step_selection_next_var) * constraint); - } + constraints.push_back((1 - row_counter_inv.prev() * row_counter.prev()) * (1 - step_start())); //GEN7 + constraints.push_back((1 - step_start()) * (state.opcode_parity() - state.opcode_parity.prev())); + + // Other state variables does not changed inside one opcode change it if necessary. + constraints.push_back((1 - step_start()) * (state.pc() - state.pc.prev())); //GEN8 + constraints.push_back((1 - step_start()) * (state.gas() - state.gas.prev())); //GEN9 + constraints.push_back((1 - step_start()) * (state.stack_size() - state.stack_size.prev())); //GEN10 + constraints.push_back((1 - step_start()) * (state.memory_size() - state.memory_size.prev())); //GEN11 return constraints; } - void init_opcodes() { + void init_opcodes(circuit_type &circuit, columns_manager_type &col_manager) { // add all the implemented opcodes here - opcodes[zkevm_opcode::ISZERO] = std::make_shared>(); + // STOP opcodes[zkevm_opcode::ADD] = std::make_shared>(true); - opcodes[zkevm_opcode::SUB] = std::make_shared>(false); opcodes[zkevm_opcode::MUL] = std::make_shared>(); - opcodes[zkevm_opcode::DIV] = std::make_shared>(); + opcodes[zkevm_opcode::SUB] = std::make_shared>(false); + opcodes[zkevm_opcode::DIV] = std::make_shared>(true); + opcodes[zkevm_opcode::SDIV] = std::make_shared>(true); + opcodes[zkevm_opcode::MOD] = std::make_shared>(false); + opcodes[zkevm_opcode::SMOD] = std::make_shared>(false); + opcodes[zkevm_opcode::ADDMOD] = std::make_shared>(); + opcodes[zkevm_opcode::MULMOD] = std::make_shared>(); + // EXP + opcodes[zkevm_opcode::SIGNEXTEND] = std::make_shared>(); + opcodes[zkevm_opcode::LT] = std::make_shared>(cmp_type::C_LT); + opcodes[zkevm_opcode::GT] = std::make_shared>(cmp_type::C_GT); + opcodes[zkevm_opcode::SLT] = std::make_shared>(cmp_type::C_SLT); + opcodes[zkevm_opcode::SGT] = std::make_shared>(cmp_type::C_SGT); + opcodes[zkevm_opcode::EQ] = std::make_shared>(cmp_type::C_EQ); + opcodes[zkevm_opcode::ISZERO] = std::make_shared>(); + opcodes[zkevm_opcode::AND] = std::make_shared>(bitwise_type::B_AND); + opcodes[zkevm_opcode::OR] = std::make_shared>(bitwise_type::B_OR); + opcodes[zkevm_opcode::XOR] = std::make_shared>(bitwise_type::B_XOR); + opcodes[zkevm_opcode::NOT] = std::make_shared>(); + opcodes[zkevm_opcode::BYTE] = std::make_shared>(); + opcodes[zkevm_opcode::SHL] = std::make_shared>(); + opcodes[zkevm_opcode::SHR] = std::make_shared>(); + opcodes[zkevm_opcode::SAR] = std::make_shared>(); + + // Memory operations + opcodes[zkevm_opcode::MSTORE] = std::make_shared>(); + opcodes[zkevm_opcode::MLOAD] = std::make_shared>(); + + // Storage operations + opcodes[zkevm_opcode::SLOAD] = std::make_shared>(); + opcodes[zkevm_opcode::SSTORE] = std::make_shared>(); + + // CALL operaitions + opcodes[zkevm_opcode::CALLVALUE] = std::make_shared>(); + opcodes[zkevm_opcode::CALLDATASIZE] = std::make_shared>(); + opcodes[zkevm_opcode::CALLDATALOAD] = std::make_shared>(); + + // PC operations + opcodes[zkevm_opcode::JUMPI] = std::make_shared>(); + opcodes[zkevm_opcode::JUMP] = std::make_shared>(); + opcodes[zkevm_opcode::JUMPDEST] = std::make_shared>(); + + opcodes[zkevm_opcode::PUSH0] = std::make_shared>(0); + opcodes[zkevm_opcode::PUSH1] = std::make_shared>(1); + opcodes[zkevm_opcode::PUSH2] = std::make_shared>(2); + opcodes[zkevm_opcode::PUSH3] = std::make_shared>(3); + opcodes[zkevm_opcode::PUSH4] = std::make_shared>(4); + opcodes[zkevm_opcode::PUSH5] = std::make_shared>(5); + opcodes[zkevm_opcode::PUSH6] = std::make_shared>(6); + opcodes[zkevm_opcode::PUSH7] = std::make_shared>(7); + opcodes[zkevm_opcode::PUSH8] = std::make_shared>(8); + opcodes[zkevm_opcode::PUSH9] = std::make_shared>(9); + opcodes[zkevm_opcode::PUSH10] = std::make_shared>(10); + opcodes[zkevm_opcode::PUSH11] = std::make_shared>(11); + opcodes[zkevm_opcode::PUSH12] = std::make_shared>(12); + opcodes[zkevm_opcode::PUSH13] = std::make_shared>(13); + opcodes[zkevm_opcode::PUSH14] = std::make_shared>(14); + opcodes[zkevm_opcode::PUSH15] = std::make_shared>(15); + opcodes[zkevm_opcode::PUSH16] = std::make_shared>(16); + opcodes[zkevm_opcode::PUSH17] = std::make_shared>(17); + opcodes[zkevm_opcode::PUSH18] = std::make_shared>(18); + opcodes[zkevm_opcode::PUSH19] = std::make_shared>(19); + opcodes[zkevm_opcode::PUSH20] = std::make_shared>(20); + opcodes[zkevm_opcode::PUSH21] = std::make_shared>(21); + opcodes[zkevm_opcode::PUSH22] = std::make_shared>(22); + opcodes[zkevm_opcode::PUSH23] = std::make_shared>(23); + opcodes[zkevm_opcode::PUSH24] = std::make_shared>(24); + opcodes[zkevm_opcode::PUSH25] = std::make_shared>(25); + opcodes[zkevm_opcode::PUSH26] = std::make_shared>(26); + opcodes[zkevm_opcode::PUSH27] = std::make_shared>(27); + opcodes[zkevm_opcode::PUSH28] = std::make_shared>(28); + opcodes[zkevm_opcode::PUSH29] = std::make_shared>(29); + opcodes[zkevm_opcode::PUSH30] = std::make_shared>(30); + opcodes[zkevm_opcode::PUSH31] = std::make_shared>(31); + opcodes[zkevm_opcode::PUSH32] = std::make_shared>(32); + + opcodes[zkevm_opcode::POP] = std::make_shared>(); + opcodes[zkevm_opcode::RETURN] = std::make_shared>(); + + // DUP + opcodes[zkevm_opcode::DUP1] = std::make_shared>(1); + opcodes[zkevm_opcode::DUP2] = std::make_shared>(2); + opcodes[zkevm_opcode::DUP3] = std::make_shared>(3); + opcodes[zkevm_opcode::DUP4] = std::make_shared>(4); + opcodes[zkevm_opcode::DUP5] = std::make_shared>(5); + opcodes[zkevm_opcode::DUP6] = std::make_shared>(6); + opcodes[zkevm_opcode::DUP7] = std::make_shared>(7); + opcodes[zkevm_opcode::DUP8] = std::make_shared>(8); + opcodes[zkevm_opcode::DUP9] = std::make_shared>(9); + opcodes[zkevm_opcode::DUP10] = std::make_shared>(10); + opcodes[zkevm_opcode::DUP11] = std::make_shared>(11); + opcodes[zkevm_opcode::DUP12] = std::make_shared>(12); + opcodes[zkevm_opcode::DUP13] = std::make_shared>(13); + opcodes[zkevm_opcode::DUP14] = std::make_shared>(14); + opcodes[zkevm_opcode::DUP15] = std::make_shared>(15); + opcodes[zkevm_opcode::DUP16] = std::make_shared>(16); + + // SWAP + opcodes[zkevm_opcode::SWAP1] = std::make_shared>(1); + opcodes[zkevm_opcode::SWAP2] = std::make_shared>(2); + opcodes[zkevm_opcode::SWAP3] = std::make_shared>(3); + opcodes[zkevm_opcode::SWAP4] = std::make_shared>(4); + opcodes[zkevm_opcode::SWAP5] = std::make_shared>(5); + opcodes[zkevm_opcode::SWAP6] = std::make_shared>(6); + opcodes[zkevm_opcode::SWAP7] = std::make_shared>(7); + opcodes[zkevm_opcode::SWAP8] = std::make_shared>(8); + opcodes[zkevm_opcode::SWAP9] = std::make_shared>(9); + opcodes[zkevm_opcode::SWAP10] = std::make_shared>(10); + opcodes[zkevm_opcode::SWAP11] = std::make_shared>(11); + opcodes[zkevm_opcode::SWAP13] = std::make_shared>(13); + opcodes[zkevm_opcode::SWAP14] = std::make_shared>(14); + opcodes[zkevm_opcode::SWAP15] = std::make_shared>(15); + opcodes[zkevm_opcode::SWAP16] = std::make_shared>(16); + + // fake opcodes for errors and padding + opcodes[zkevm_opcode::err0] = std::make_shared>(); + opcodes[zkevm_opcode::err1] = std::make_shared>(); + opcodes[zkevm_opcode::padding] = std::make_shared>(); + + range_check_table_index = circuit.get_reserved_indices().at("chunk_16_bits/full"); + bytecode_table_index = circuit.get_reserved_indices().at("zkevm_bytecode"); + std::cout << "Range check table index = " << range_check_table_index << std::endl; + std::cout << "Bytecode table index = " << bytecode_table_index << std::endl; std::vector middle_constraints; std::vector first_constraints; std::vector last_constraints; - // first step is step selection - first_constraints.push_back(state.step_selection.variable() - 1); - start_selector = sel_manager.add_gate(first_constraints); - // TODO: proper end constraints - end_selector = circuit.add_gate(last_constraints); + + std::vector middle_lookup_constraints; + + // TODO: This should be checked for all transactions' first opcode. Not only for the first row. + first_constraints.push_back(state.stack_size); // stack size at start is 0. + // NB: no need for range checks before first real transition, + // it's all ensured by "frozen" transition constraints. + first_constraints.push_back(state.step_start - 1); // first step is step selection + + // Allocate all necessary columns. Selectors + col_manager.allocate_selector_column(); // Start + col_manager.allocate_selector_column(); // End + col_manager.allocate_selector_column(); // Middle const std::size_t opcodes_amount = opcodes_info_instance.get_opcodes_amount(); - const std::size_t state_selector_cols_amount = - state_selector_type::get_manifest(opcodes_amount).witness_amount->max_value_if_sat(); - for (std::size_t i = 0; i < state_selector_cols_amount; i++) { - state_selector_cols.push_back(sel_manager.allocate_witess_column()); + const std::size_t opcode_selector_cols_amount = std::ceil(float(opcodes_amount)/4); + std::cout << "Implemented opcodes amount = " << opcodes_amount << std::endl; + std::cout << "Opcode selector cols amount = " << opcode_selector_cols_amount << std::endl; + for (std::size_t i = 0; i < opcode_selector_cols_amount; i++) { + opcode_selector_cols.push_back(col_manager.allocate_witness_column()); } - for (std::size_t i = 0; i < max_opcode_cols; i++) { - opcode_cols.push_back(sel_manager.allocate_witess_column()); + opcode_selector = std::make_shared( + opcode_selector_cols, std::array({}), std::array({}), + std::ceil(float(opcodes_amount)/4) + ); + auto opcode_selector_constraints = opcode_selector->generate_constraints(); + middle_constraints.insert( + middle_constraints.end(), opcode_selector_constraints.begin(), opcode_selector_constraints.end() + ); + middle_constraints.push_back( state.is_even() * (1 - opcode_selector->sum_constraint() - opcode_selector->sum_constraint(1))); + middle_constraints.push_back( + state.opcode + - 4 * ( state.is_even() * (opcode_selector->index_constraint() + opcode_selector->index_constraint(1)) + + state.is_even.prev() * (opcode_selector->index_constraint(-1) + opcode_selector->index_constraint()) ) + - 2 * state.is_even.prev() * opcode_selector->sum_constraint() + - 2 * state.is_even() * opcode_selector->sum_constraint(1) + - state.opcode_parity() + ); + + std::cout << "Opcode range checked columns amount = " << opcode_range_checked_cols_amount << std::endl; + std::vector opcode_range_checked_cols; + for(std::size_t i = 0; i < opcode_range_checked_cols_amount; i++) { + opcode_range_checked_cols.push_back(col_manager.allocate_witness_column()); } - state_selector = std::make_shared( - state_selector_cols, std::array({}), std::array({}), - opcodes_amount); - - auto state_selector_constraints = state_selector->generate_constraints(); - middle_constraints.insert(middle_constraints.end(), state_selector_constraints.begin(), - state_selector_constraints.end()); - - static constexpr std::size_t max_opcode_height = 20; - const std::size_t opcode_row_selection_cols_amount = - state_selector_type::get_manifest(max_opcode_height).witness_amount->max_value_if_sat(); - for (std::size_t i = 0; i < opcode_row_selection_cols_amount; i++) { - opcode_row_selection_cols.push_back(sel_manager.allocate_witess_column()); + opcode_cols = opcode_range_checked_cols; // range-checked columns are the first part of opcode columns + + std::cout << "Opcode non range checked columns amount = " << opcode_other_cols_amount << std::endl; + for (std::size_t i = 0; i < opcode_other_cols_amount; i++) { // followed by some non-range-checked columns + opcode_cols.push_back(col_manager.allocate_witness_column()); } - opcode_row_selector = std::make_shared( - opcode_row_selection_cols, std::array({}), std::array({}), - max_opcode_height); - auto opcode_row_selector_constraints = opcode_row_selector->generate_constraints(); - middle_constraints.insert(middle_constraints.end(), opcode_row_selector_constraints.begin(), - opcode_row_selector_constraints.end()); + + const std::size_t row_selector_cols_amount = (max_opcode_height + max_opcode_height%2)/2; + std::cout << "Opcode row selector checked columns amount = " << row_selector_cols_amount << std::endl; + for (std::size_t i = 0; i < row_selector_cols_amount; i++) { + row_selector_cols.push_back(col_manager.allocate_witness_column()); + } + row_selector = std::make_shared( + row_selector_cols, std::array({}), std::array({}), + std::ceil(float(max_opcode_height)/2)); + auto row_selector_constraints = row_selector->generate_constraints(); + middle_constraints.insert( + middle_constraints.end(), row_selector_constraints.begin(), row_selector_constraints.end() + ); + middle_constraints.push_back(1 - row_selector->sum_constraint()); + middle_constraints.push_back(state.row_counter() - row_selector->index_constraint() * 2 - state.is_even()); + + start_selector = circuit.add_gate(first_constraints); + +// middle_constraints.push_back(state.last_row_indicator.prev()); + // ensure that stack_size is always between 0 and max_stack_size. + // This allows simpler transitions of stack size without the need to control validity of updated stack size + + // TODO: stack size validity will be checked by RW table. +// middle_lookup_constraints.push_back({range_check_table_index, { state.stack_size } }); +// middle_lookup_constraints.push_back({range_check_table_index, { state.stack_size + 65535 - max_stack_size } }); + + // TODO: proper end constraints zkevm_padding_operation +// last_constraints.push_back(state.last_row_indicator.prev() - 1); + end_selector = circuit.add_gate(last_constraints); auto generic_state_transition_constraints = generate_generic_transition_constraints( start_selector, end_selector); - middle_constraints.insert(middle_constraints.end(), generic_state_transition_constraints.begin(), - generic_state_transition_constraints.end()); + middle_constraints.insert( + middle_constraints.end(), generic_state_transition_constraints.begin(), generic_state_transition_constraints.end() + ); + + // "unconditional" range checks for some opcode columns + for(std::size_t i = 0; i < opcode_range_checked_cols_amount; i++) { + middle_lookup_constraints.push_back({range_check_table_index, + {var(opcode_range_checked_cols[i], 0 ,true, var::column_type::witness) } }); + } + + using gate_id_type = gate_id; + std::map constraint_list; + std::map virtual_selector; + + constraint_type opcode_first_line_constraint; + constraint_type stack_size_transitions; + constraint_type memory_size_transitions; + constraint_type gas_transitions; + constraint_type bytecode_lookup_dynamic_selector; + std::map > lookup_map; for (auto opcode_it : opcodes) { + if( opcode_it.second->stack_input != opcodes_info_instance.get_opcode_stack_input(opcode_it.first)) + std::cout << "WRONG stack_input for " << opcode_to_string(opcode_it.first) << ": " << opcode_it.second->stack_input << " != " << opcodes_info_instance.get_opcode_stack_input(opcode_it.first) << std::endl; + if( opcode_it.second->stack_output != opcodes_info_instance.get_opcode_stack_output(opcode_it.first)) + std::cout << "WRONG stack_output for " << opcode_to_string(opcode_it.first) << ": " << opcode_it.second->stack_output << " != " << opcodes_info_instance.get_opcode_stack_output(opcode_it.first) << std::endl; + if( opcode_it.second->gas_cost != opcodes_info_instance.get_opcode_cost(opcode_it.first)) + std::cout << "WRONG gas_cost for " << opcode_to_string(opcode_it.first) << ": " << opcode_it.second->gas_cost << " != " << opcodes_info_instance.get_opcode_cost(opcode_it.first) << std::endl; std::size_t opcode_height = opcode_it.second->rows_amount(); + if (opcode_height > max_opcode_height) { BOOST_ASSERT("Opcode height exceeds maximum, please update max_opcode_height constant."); } + // force opcode height to be always even + std::size_t adj_opcode_height = opcode_height + (opcode_height % 2); - std::size_t opcode_num = opcodes_info_instance.get_opcode_value(opcode_it.first); - auto curr_opt_constraint = state_selector->option_constraint(opcode_num); - // force current height to be proper value at the start of the opcode - if (opcode_height == 1) { - // minor optimisation here: we have only a single step so can just set 0 - middle_constraints.push_back(curr_opt_constraint * state.rows_until_next_op.variable()); - } else { - middle_constraints.push_back( - curr_opt_constraint * (state.rows_until_next_op.variable() - (opcode_height - 1)) * - state.step_selection.variable()); - } + std::size_t opcode_num = opcodes_info_instance.get_opcode_number(opcode_it.first); + std::size_t opcode_byte = opcodes_info_instance.get_opcode_value(opcode_it.first); + + // save constraints to ensure later that internal row number has proper value at the start of the opcode + // We can use opcode_row_selector_constraint, but it has similar degree. + opcode_first_line_constraint += + opcode_selector_constraint(opcode_num) * ( state.row_counter() - adj_opcode_height + 1); + // ^^^ curr_opt_constraint is in _odd_ version because it's applied + // at row with internal number adj_opcode_height-1, that always odd auto opcode_gates = opcode_it.second->generate_gates(*this); for (auto gate_it : opcode_gates) { switch (gate_it.first) { case zkevm_opcode_gate_class::FIRST_OP: - for (auto constraint : gate_it.second) { - middle_constraints.push_back( - curr_opt_constraint * constraint * start_selector); + std::cout << "Not implemented" << std::endl; +/* for (auto constraint_pair : gate_it.second.first) { + constraint_type constraint = opcode_row_selector_constraint(opcode_num, adj_opcode_height - 1) + * constraint_pair.second; + + constraint_list[gate_id_type(constraint_pair.second)] = constraint_pair.second; + virtual_selector[gate_id_type(constraint_pair.second)] += + constraint * start_selector; } + for (auto lookup_constraint_pair : gate_it.second.second) { + std::size_t local_row = lookup_constraint_pair.first; + lookup_constraint_type lookup_constraint = lookup_constraint_pair.second; + auto lookup_table = lookup_constraint.table_id; + auto lookup_expressions = lookup_constraint.lookup_input; + constraint_type row_selector = get_opcode_row_constraint(local_row, adj_opcode_height - 1); + std::vector new_lookup_expressions; + + for(auto lookup_expr : lookup_expressions) { + new_lookup_expressions.push_back(curr_opt_constraint * lookup_expr * row_selector * start_selector); + } + middle_lookup_constraints.push_back({lookup_table, new_lookup_expressions}); + }*/ break; case zkevm_opcode_gate_class::MIDDLE_OP: - for (auto constraint : gate_it.second) { - middle_constraints.push_back( - curr_opt_constraint * constraint); + //std::cout << "Middle constraints from " << opcode_to_string(opcode_it.first) << std::endl; + for (auto constraint_pair : gate_it.second.first) { + //std::cout << "\t" << constraint_pair.first << ": " << constraint_pair.second << std::endl; + std::size_t local_row = constraint_pair.first; + if( opcode_it.second->rows_amount() % 2 ) local_row++; + + constraint_list[gate_id_type(constraint_pair.second)] = constraint_pair.second; + virtual_selector[gate_id_type(constraint_pair.second)] += + opcode_row_selector_constraint(opcode_num, local_row); + } + { + // Table_id => position => {constraints} + // You cannot add lookup constraints with similar positions + std::map>> opcode_lookup_map; + for (auto lookup_constraint_pair : gate_it.second.second) { + // TODO:: we can put lookup constraints into one if they are i + std::size_t local_row = lookup_constraint_pair.first; + if( opcode_it.second->rows_amount() % 2 ) local_row++; + lookup_constraint_type lookup_constraint = lookup_constraint_pair.second; + auto lookup_table = lookup_constraint.table_id; + auto lookup_expressions = lookup_constraint.lookup_input; + std::vector new_lookup_expressions; + + for(auto lookup_expr : lookup_expressions) { + new_lookup_expressions.push_back( opcode_row_selector_constraint(opcode_num, local_row) * lookup_expr ); + } + //middle_lookup_constraints.push_back({lookup_table, new_lookup_expressions}); + + if( opcode_lookup_map.find(lookup_table) == opcode_lookup_map.end() ) + opcode_lookup_map[lookup_table] = {}; + if( opcode_lookup_map[lookup_table].find(local_row) == opcode_lookup_map[lookup_table].end() ) + opcode_lookup_map[lookup_table][local_row] = {}; + opcode_lookup_map[lookup_table][local_row].push_back({lookup_table, new_lookup_expressions}); + } + for( auto &[table_id,positioned_constraints]: opcode_lookup_map ){ + for( auto &[position, lookup_constraint_list] : positioned_constraints){ + if( lookup_map.find(table_id) == lookup_map.end() ) lookup_map[table_id] = {}; + for( std::size_t ind = 0; ind < lookup_constraint_list.size(); ind++ ){ + if( ind < lookup_map[table_id].size() ){ + //BOOST_ASSERT(lookup_map[table_id][ind].lookup_input.size() == lookup_constraint_list[ind].lookup_input.size()); + for( std::size_t ind2 = 0; ind2 < lookup_constraint_list[ind].lookup_input.size(); ind2++ ) + lookup_map[table_id][ind].lookup_input[ind2] = lookup_map[table_id][ind].lookup_input[ind2] + lookup_constraint_list[ind].lookup_input[ind2]; + } + else{ + lookup_map[table_id].push_back(lookup_constraint_list[ind]); + } + } + } + } } break; case zkevm_opcode_gate_class::LAST_OP: @@ -389,46 +723,100 @@ namespace nil { BOOST_ASSERT("Unknown gate class"); } } + if( opcode_byte < 256 ) bytecode_lookup_dynamic_selector += opcode_selector_constraint(opcode_num); + gas_transitions += opcode_row_selector_constraint(opcode_num, 0) * opcode_it.second->gas_transition(*this); + pc_transitions += opcode_row_selector_constraint(opcode_num, 0) * opcode_it.second->pc_transition(*this); + stack_size_transitions += opcode_row_selector_constraint(opcode_num, 0) * opcode_it.second->stack_size_transition(*this); + real_opcode += opcode_selector_constraint(opcode_num) * opcode_byte; + } + for( auto &[k,v]: lookup_map ){ + for( auto &lc: v){ + middle_lookup_constraints.push_back(lc); + } + } + std::cout << "Lookup constraints amount = " << middle_lookup_constraints.size() << std::endl; + // ensure first line of each opcode has correct internal row number + middle_constraints.push_back(opcode_first_line_constraint * state.step_start()); + + + middle_constraints.push_back(stack_size_transitions); + middle_constraints.push_back(pc_transitions); + middle_constraints.push_back(gas_transitions); + middle_constraints.push_back(state.real_opcode() - real_opcode); + + for(const auto c : virtual_selector) { + constraint_type constraint = constraint_list[c.first]; + middle_constraints.push_back(constraint * c.second); } - middle_selector = sel_manager.add_gate(middle_constraints); - assignment.enable_selector(start_selector, curr_row); - assignment.enable_selector(middle_selector, curr_row); + middle_lookup_constraints.push_back({ + bytecode_table_index, + { + bytecode_lookup_dynamic_selector, + bytecode_lookup_dynamic_selector * state.pc(), + bytecode_lookup_dynamic_selector * state.real_opcode(), + bytecode_lookup_dynamic_selector, + bytecode_lookup_dynamic_selector * state.bytecode_hash_hi(), + bytecode_lookup_dynamic_selector * state.bytecode_hash_lo() + } + }); + + middle_selector = circuit.add_gate(middle_constraints); + circuit.add_lookup_gate(middle_selector, middle_lookup_constraints); } + + constraint_type gas_transitions; + constraint_type pc_transitions; + constraint_type stack_size_transitions; + constraint_type opcode_transitions; + constraint_type real_opcode; + zkevm_state_type state; - // static selectors used to mark the places where the circuit starts/ends + // static selectors used to mark the places where the circuit starts/ends and when the circuit is acitve std::size_t start_selector; std::size_t end_selector; - // dynamic selector: indicates when the circuit is acitve - // currently represented as a selector column; hopefully this is possible to do in practice std::size_t middle_selector; + // selectors for dynamic tables + std::size_t bytecode_selector; // witness columns for opcodes std::vector opcode_cols; // dynamic selectors for the state selector circuit - std::vector state_selector_cols; + std::vector opcode_selector_cols; // columns for selecting specific rows from the opcode - std::vector opcode_row_selection_cols; + std::vector row_selector_cols; // --------------------------------------------------------------------------------------------- // |Variables below this point are internal to the object and do not go into the actual circuit| // --------------------------------------------------------------------------------------------- // reference to the assignment/circuit objects + assignment_type &assignment; - circuit_type &circuit; // information about opcode metadata (mapping, etc.) const opcodes_info &opcodes_info_instance; - selector_manager_type sel_manager; - std::shared_ptr state_selector; - std::shared_ptr opcode_row_selector; + std::shared_ptr opcode_selector; // Selects opcode_id/4 + std::shared_ptr row_selector; // Selects row_selector/2 // opcode objects std::map>> opcodes; - // current row maintained between different calls to the circuit object - std::size_t curr_row; // start and end rows for the circuit; both have to be fixed + std::size_t max_rows; // Should be odd number because all opcodes has even rows amount and last row is also used by last_row selector + std::size_t max_bytecode_size; // For correct connection with bytecode circuit std::size_t start_row_index; std::size_t end_row_index; - - static const std::size_t max_opcode_cols = 64; + std::size_t range_check_table_index; + std::size_t bytecode_table_index; + typename lookup_library::left_reserved_type lookup_tables_indices; + + static const std::size_t opcode_range_checked_cols_amount = 32; + static const std::size_t opcode_other_cols_amount = 16; + static const std::size_t max_opcode_cols = opcode_range_checked_cols_amount + opcode_other_cols_amount; + static const std::size_t max_opcode_height = 8; + static const std::size_t max_stack_size = 1024; + static const std::size_t dynamic_tables_amount = 1; + std::vector bytecode_witnesses; }; + template + const std::size_t zkevm_circuit::max_opcode_height; + template + const std::size_t zkevm_circuit::max_stack_size; } // namespace blueprint -} // namespace nil +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_machine_interface.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_machine_interface.hpp index 7be562e41f..db034f77c0 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_machine_interface.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_machine_interface.hpp @@ -1,5 +1,7 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova // // MIT License // @@ -31,10 +33,585 @@ namespace nil { namespace blueprint { // at the time I am writing this there is no interface to the zkevm machine // this is a placeholder + + // Hi! I added to this placeholder a bit more funtionality that shouldn't be in test assigner and in zkevm_state class zkevm_machine_interface { public: using word_type = zkevm_word_type; - zkevm_stack stack; + + struct state_type{ + zkevm_opcode opcode; + word_type additional_input; + zkevm_stack stack; + std::vector memory; + std::vector bytecode; + std::size_t gas; + std::size_t pc; + + bool tx_finish; + zkevm_opcode error_opcode; + + state_type():tx_finish(false){} + + state_type( + std::vector &_bytecode, + zkevm_opcode _opcode, + word_type _additional_input, + zkevm_stack _stack, + std::vector &_memory, + std::size_t _gas, + std::size_t _pc + ): opcode(_opcode), additional_input(_additional_input), stack(_stack), memory(_memory), gas(_gas), pc(_pc), tx_finish(false), bytecode(_bytecode) + { + std::size_t i = 0; + } + + zkevm_word_type stack_pop(){ + if(stack.size() == 0 ){ + tx_finish = true; + error_opcode = opcode; + opcode = zkevm_opcode::err0; + std::cout << "stack_pop error" << std::endl; + return 0; + } + return stack.pop(); + } + + void run_opcode(){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + switch(opcode) { + case zkevm_opcode::PUSH0: + stack.push(0); + gas-=2; + pc++; + break; + case zkevm_opcode::PUSH1: + stack.push(additional_input); + gas-=3; pc+=2; + break; + case zkevm_opcode::PUSH2: + stack.push(additional_input); + gas-=3; pc+=3; + break; + case zkevm_opcode::PUSH3: + stack.push(additional_input); + gas-=3; pc+=4; + break; + case zkevm_opcode::PUSH4: + stack.push(additional_input); + gas-=3; pc+=5; + break; + case zkevm_opcode::PUSH5: + stack.push(additional_input); + gas-=3; pc+=6; + break; + case zkevm_opcode::PUSH6: + stack.push(additional_input); + gas-=3; pc+=7; + break; + case zkevm_opcode::PUSH7: + stack.push(additional_input); + gas-=3; pc+=8; + break; + case zkevm_opcode::PUSH8: + stack.push(additional_input); + gas-=3; pc+=9; + break; + case zkevm_opcode::PUSH9: + stack.push(additional_input); + gas-=3; pc+=10; + break; + case zkevm_opcode::PUSH10: + stack.push(additional_input); + gas-=3; pc+=11; + break; + case zkevm_opcode::PUSH11: + stack.push(additional_input); + gas-=3; pc+=12; + break; + case zkevm_opcode::PUSH12: + stack.push(additional_input); + gas-=3; pc+=13; + break; + case zkevm_opcode::PUSH13: + stack.push(additional_input); + gas-=3; pc+=14; + break; + case zkevm_opcode::PUSH14: + stack.push(additional_input); + gas-=3; pc+=15; + break; + case zkevm_opcode::PUSH15: + stack.push(additional_input); + gas-=3; pc+=16; + break; + case zkevm_opcode::PUSH16: + stack.push(additional_input); + gas-=3; pc+=17; + break; + case zkevm_opcode::PUSH17: + stack.push(additional_input); + gas-=3; pc+=18; + break; + case zkevm_opcode::PUSH18: + stack.push(additional_input); + gas-=3; pc+=19; + break; + case zkevm_opcode::PUSH19: + stack.push(additional_input); + gas-=3; pc+=20; + break; + case zkevm_opcode::PUSH20: + stack.push(additional_input); + gas-=3; pc+=21; + break; + case zkevm_opcode::PUSH21: + stack.push(additional_input); + gas-=3; pc+=22; + break; + case zkevm_opcode::PUSH22: + stack.push(additional_input); + gas-=3; pc+=23; + break; + case zkevm_opcode::PUSH23: + stack.push(additional_input); + gas-=3; pc+=24; + break; + case zkevm_opcode::PUSH24: + stack.push(additional_input); + gas-=3; pc+=25; + break; + case zkevm_opcode::PUSH25: + stack.push(additional_input); + gas-=3; pc+=26; + break; + case zkevm_opcode::PUSH26: + stack.push(additional_input); + gas-=3; pc+=27; + break; + case zkevm_opcode::PUSH27: + stack.push(additional_input); + gas-=3; pc+=28; + break; + case zkevm_opcode::PUSH28: + stack.push(additional_input); + gas-=3; pc+=29; + break; + case zkevm_opcode::PUSH29: + stack.push(additional_input); + gas-=3; pc+=30; + break; + case zkevm_opcode::PUSH30: + stack.push(additional_input); + gas-=3; pc+=31; + break; + case zkevm_opcode::PUSH31: + stack.push(additional_input); + gas-=3; pc+=32; + break; + case zkevm_opcode::PUSH32: + stack.push(additional_input); + gas-=3; pc+=33; + break; + case zkevm_opcode::RETURN: + stack_pop(); + stack_pop(); + pc++; gas -= 2; + tx_finish = true; + break; + case zkevm_opcode::NOT:{ + word_type a = stack_pop(); + word_type not_a = word_type(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint257) - a; + stack.push(not_a); + pc++; gas -= 3; + break; + } + case zkevm_opcode::ADD:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a+b); + pc++; gas -= 3; + break; + } + case zkevm_opcode::SUB:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a-b); + pc++; gas -= 3; + break; + } + case zkevm_opcode::MUL:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a*b); + pc++; gas -= 5; + break; + } + case zkevm_opcode::MULMOD:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + word_type N = stack_pop(); + stack.push(N? (a * b).base() % N.base() : 0u); + pc++; gas -= 8; + break; + } + case zkevm_opcode::ADDMOD:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + word_type N = stack_pop(); + stack.push(N? (a + b).base() % N.base() : 0u); + pc++; gas -= 8; + break; + } + case zkevm_opcode::ISZERO:{ + word_type a = stack_pop(); + stack.push(a? 1u : 0u); + pc++; gas -= 3; + break; + } + case zkevm_opcode::DIV:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(std::get<0>(eth_div(a, b))); + pc++; gas -= 5; + break; + } + case zkevm_opcode::SDIV:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(std::get<0>(eth_signed_div(a, b))); + pc++; gas -= 5; + break; + } + case zkevm_opcode::MOD:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(std::get<1>(eth_div(a, b))); + pc++; gas -= 5; + break; + } + case zkevm_opcode::SMOD:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(std::get<1>(eth_signed_div(a, b))); + pc++; gas -= 5; + break; + } + case zkevm_opcode::SIGNEXTEND:{ + word_type b = stack_pop(); + word_type x = stack_pop(); + int len = (integral_type(b) < 32) ? int(integral_type(b)) + 1 : 32; + integral_type sign = (integral_type(x) << (8*(32-len) + 1)) >> 256; + word_type result = word_type((((integral_type(1) << 8*(32-len)) - 1) << 8*len)*sign) + + word_type((integral_type(x) << (8*(32-len) + 1)) >> (8*(32-len) + 1)); + stack.push(result); + pc++; gas -= 5; + break; + } + case zkevm_opcode::BYTE:{ + word_type i = stack_pop(); + word_type x = stack_pop(); + int shift = (integral_type(i) < 32) ? int(integral_type(i)) : 32; + stack.push(word_type((integral_type(x) << ((8*shift) + 1)) >> (31*8 + 1))); + pc++; gas -= 3; + break; + } + case zkevm_opcode::SHL:{ + word_type a = stack_pop(); + word_type input_b = stack_pop(); + int shift = (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + stack.push(word_type(integral_type(a) << shift)); + pc++; gas -= 3; + break; + } + case zkevm_opcode::SHR:{ + word_type a = stack_pop(); + word_type input_b = stack_pop(); + int shift = (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + integral_type r_integral = integral_type(a) << shift; + word_type b = word_type(integral_type(1) << shift); + stack.push(r_integral); + pc++; gas -= 3; + break; + } + case zkevm_opcode::SAR:{ + word_type input_a = stack_pop(); + word_type input_b = stack_pop(); + word_type a = abs_word(input_a); + int shift = (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + integral_type r_integral = integral_type(a) << shift; + word_type result = is_negative(input_a) ? ( + (r_integral == 0)? word_type(zkevm_modulus-1) : negate_word(word_type(r_integral)) + ) : word_type(r_integral); + stack.push(result); + pc++; gas -= 3; + break; + } + case zkevm_opcode::AND:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a.base() & b.base()); + pc++; gas -= 3; + break; + } + case zkevm_opcode::OR:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a.base() | b.base()); + pc++; gas -= 3; + break; + } + case zkevm_opcode::XOR:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a.base() ^ b.base()); + pc++; gas -= 3; + break; + } + case zkevm_opcode::GT:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a > b); + pc++; gas -= 3; + break; + } + case zkevm_opcode::LT:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a < b); + pc++; gas -= 3; + break; + } + case zkevm_opcode::EQ:{ + word_type a = stack_pop(); + word_type b = stack_pop(); + stack.push(a == b); + pc++; gas -= 3; + break; + } + case zkevm_opcode::SGT:{ + word_type x = stack_pop(); + word_type y = stack_pop(); + bool result = (!is_negative(x) && is_negative(y)); + result = result || (is_negative(x) && is_negative(y) && (abs_word(x) < abs_word(y))); + result = result || (!is_negative(x) && !is_negative(y) && (abs_word(x) > abs_word(y))); + stack.push(result); + pc++; gas -= 3; + break; + } + case zkevm_opcode::SLT:{ + word_type x = stack_pop(); + word_type y = stack_pop(); + bool result = (is_negative(x) && !is_negative(y)); + result = result || (is_negative(x) && is_negative(y) && (abs_word(x) > abs_word(y))); + result = result || (!is_negative(x) && !is_negative(y) && (abs_word(x) < abs_word(y))); + stack.push(result); + pc++; gas -= 3; + break; + } + case zkevm_opcode::JUMP:{ + word_type addr = stack_pop(); + //TODO: add JUMPDEST error processing + pc = w_to_16(addr)[15]; gas -= 8; + // 0x5B -- JUMPDEST opcode. TODO: do function opcode_to_value more convenient + if( pc > bytecode.size() || bytecode[pc] != 0x5B ) { + tx_finish = true; + error_opcode = opcode; + opcode = zkevm_opcode::err1; + std::cout << "bad jump destination error" << std::endl; + } + break; + } + case zkevm_opcode::JUMPI:{ + word_type addr = stack_pop(); + word_type state = stack_pop(); + //TODO: add JUMPDEST error processing + pc = state? w_to_16(addr)[15]: pc+1; gas -= 10; + if( state && (pc > bytecode.size() || bytecode[pc] != 0x5B) ) { + tx_finish = true; + error_opcode = opcode; + opcode = zkevm_opcode::err1; + std::cout << "bad jump destination error" << std::endl; + } + break; + } + case zkevm_opcode::JUMPDEST:{ + pc++; gas -= 1; + break; + } + case zkevm_opcode::err0:{ + BOOST_ASSERT(false); + break; + } + case zkevm_opcode::err1:{ + BOOST_ASSERT(false); + break; + } + default: + std::cout << "Test machine unknown opcode " << opcode_to_string(opcode) << std::endl; + BOOST_ASSERT_MSG(false, "Opcode is not implemented inside test machine"); + } + if( stack.size() > 1024 ) { + tx_finish = true; + error_opcode = opcode; + opcode = zkevm_opcode::err0; + std::cout << "stack overflow error" << std::endl; + } + } + }; + + zkevm_machine_interface( + std::vector _bytecode, + word_type _bytecode_hash, + unsigned long int _init_gas + ) : bytecode(_bytecode),bytecode_hash(_bytecode_hash), is_opcode(fill_is_opcode(_bytecode)) { + current_state.bytecode = bytecode; + current_state.gas = new_state.gas = _init_gas; + current_state.pc = new_state.pc = 0; + } + + // It is not a part of an interface. Real machine will really run here. + // But we just read a trace from file and completely update our state. + // This function is for work with trace + void update_state( + zkevm_opcode _opcode, + std::vector _stack, + std::vector _memory, + std::size_t _gas, + std::size_t _pc, + word_type _additional_input + ){ + current_state = state_type( + bytecode, + _opcode, + _additional_input, + zkevm_stack(_stack), + _memory, + _gas, + _pc + ); + new_state = current_state; + } + + bool apply_opcode( + zkevm_opcode _opcode, + std::vector param = {} + ){ + BOOST_ASSERT(!current_state.tx_finish); + current_state = new_state; + //std::cout << "Current state.pc = " << current_state.pc << " opcode = " << opcode_to_string(_opcode) << std::endl; + current_state.bytecode = new_state.bytecode = bytecode; + current_state.opcode = new_state.opcode = _opcode; + current_state.additional_input = new_state.additional_input = zkevm_word_from_bytes(param); + new_state.run_opcode(); + if( new_state.tx_finish ){ + std::cout << "Final opcode = " << opcode_to_string(current_state.opcode) << std::endl; + current_state.tx_finish = true; + current_state.error_opcode = current_state.opcode; + current_state.opcode = new_state.opcode; + } + return current_state.tx_finish; + } + + void padding_state(){ + current_state.opcode = zkevm_opcode::padding; + current_state.stack = {}; + current_state.memory = {}; + current_state.gas = 0; + current_state.pc = 0; + bytecode_hash = 0; + } + + const state_type &get_current_state() const { + return current_state; + } + + const zkevm_opcode &opcode() const { + return current_state.opcode; + } + + const zkevm_word_type &additional_input() const { + return current_state.additional_input; + } + + const std::size_t pc() const { + return current_state.pc; + } + + const std::size_t pc_next() const { + return new_state.pc; + } + + const std::size_t gas() const { + return current_state.gas; + } + +/* const std::vector & stack() const { + return current_state.stack; + }*/ + + const std::size_t stack_size() const { + return current_state.stack.size(); + } + + const std::size_t memory_size() const { + return current_state.memory.size(); + } + + const zkevm_word_type stack_top(std::size_t depth = 0) const{ + return current_state.stack.top(depth); + } + + const std::vector & memory() const { + return current_state.memory; + } + + const bool tx_finish() const { + return current_state.tx_finish; + } + + const zkevm_opcode error_opcode() const { + return current_state.error_opcode; + } + + const std::size_t bytecode_length() const { + return bytecode.size(); + } + + const std::uint8_t bytecode_byte(std::size_t i) const { + BOOST_ASSERT(i < bytecode.size()); + return bytecode[i]; + } + + const bool is_bytecode_byte_opcode(std::size_t i) const { + BOOST_ASSERT(i < is_opcode.size()); + return is_opcode[i]; + } + word_type bytecode_hash; + protected: + std::vector fill_is_opcode(const std::vector &_bytecode){ + std::vector result(_bytecode.size()); + auto it = result.begin(); + while(it != result.end() ){ + *it = true; + if( _bytecode[it - result.begin()] > 0x5f && _bytecode[it - result.begin()] < 0x80 ){ + std::size_t push_size = _bytecode[it - result.begin()] - 0x5f; + for( std::size_t i = 0; i < push_size; i++){ + it++; + *it = false; + } + } + it++; + } + return result; + } + + private: + state_type current_state; + state_type new_state; + std::vector bytecode; + std::vector is_opcode; + bool opcode_added; }; } } diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_opcodes.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_opcodes.hpp index 80ea81e307..73150ed36d 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_opcodes.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_opcodes.hpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -180,7 +181,10 @@ namespace nil { X(STATICCALL) \ X(REVERT) \ X(INVALID) \ - X(SELFDESTRUCT) // ! please update LAST_ZKEVM_OPCODE below if changing this ! + X(SELFDESTRUCT) \ + X(err0) \ + X(err1) \ + X(padding) enum zkevm_opcode { #define ENUM_DEF(name) name, @@ -202,169 +206,225 @@ namespace nil { return it->second; } + std::size_t get_opcode_number(const zkevm_opcode& opcode) const { + auto it = opcode_to_number_map.left.find(opcode); + BOOST_ASSERT(it != opcode_to_number_map.left.end()); + return it->second; + } + zkevm_opcode get_opcode_from_value(const std::size_t& value) const { auto it = opcode_to_byte_map.right.find(value); BOOST_ASSERT(it != opcode_to_byte_map.right.end()); return it->second; } + zkevm_opcode get_opcode_from_number(const std::size_t& value) const { + auto it = opcode_to_number_map.right.find(value); + BOOST_ASSERT(it != opcode_to_number_map.right.end()); + return it->second; + } + + std::size_t is_opcode_dynamic(const zkevm_opcode& opcode) const { + auto it = opcode_is_dynamic_map.find(opcode); + BOOST_ASSERT(it != opcode_is_dynamic_map.end()); + return it->second; + } + + std::size_t get_opcode_cost(const zkevm_opcode& opcode) const { + auto it = opcode_cost_map.find(opcode); + BOOST_ASSERT(it != opcode_cost_map.end()); + return it->second; + } + + std::size_t get_opcode_stack_input(const zkevm_opcode& opcode) const { + auto it = opcode_stack_input_map.find(opcode); + BOOST_ASSERT(it != opcode_stack_input_map.end()); + return it->second; + } + + std::size_t get_opcode_stack_output(const zkevm_opcode& opcode) const { + auto it = opcode_stack_output_map.find(opcode); + BOOST_ASSERT(it != opcode_stack_output_map.end()); + return it->second; + } + std::size_t get_opcodes_amount() const { return opcode_to_byte_map.size(); } - boost::bimap, boost::bimaps::set_of> - opcode_to_byte_map; + boost::bimap, boost::bimaps::set_of> opcode_to_byte_map; + boost::bimap, boost::bimaps::set_of> opcode_to_number_map; + std::map opcode_cost_map; + std::map opcode_is_dynamic_map; + std::map opcode_stack_input_map; + std::map opcode_stack_output_map; private: opcodes_info() { - opcode_to_byte_map.insert({zkevm_opcode::STOP, 0x00}); - opcode_to_byte_map.insert({zkevm_opcode::ADD, 0x01}); - opcode_to_byte_map.insert({zkevm_opcode::MUL, 0x02}); - opcode_to_byte_map.insert({zkevm_opcode::SUB, 0x03}); - opcode_to_byte_map.insert({zkevm_opcode::DIV, 0x04}); - opcode_to_byte_map.insert({zkevm_opcode::SDIV, 0x05}); - opcode_to_byte_map.insert({zkevm_opcode::MOD, 0x06}); - opcode_to_byte_map.insert({zkevm_opcode::SMOD, 0x07}); - opcode_to_byte_map.insert({zkevm_opcode::ADDMOD, 0x08}); - opcode_to_byte_map.insert({zkevm_opcode::MULMOD, 0x09}); - opcode_to_byte_map.insert({zkevm_opcode::EXP, 0x0a}); - opcode_to_byte_map.insert({zkevm_opcode::SIGNEXTEND, 0x0b}); - opcode_to_byte_map.insert({zkevm_opcode::LT, 0x10}); - opcode_to_byte_map.insert({zkevm_opcode::GT, 0x11}); - opcode_to_byte_map.insert({zkevm_opcode::SLT, 0x12}); - opcode_to_byte_map.insert({zkevm_opcode::SGT, 0x13}); - opcode_to_byte_map.insert({zkevm_opcode::EQ, 0x14}); - opcode_to_byte_map.insert({zkevm_opcode::ISZERO, 0x15}); - opcode_to_byte_map.insert({zkevm_opcode::AND, 0x16}); - opcode_to_byte_map.insert({zkevm_opcode::OR, 0x17}); - opcode_to_byte_map.insert({zkevm_opcode::XOR, 0x18}); - opcode_to_byte_map.insert({zkevm_opcode::NOT, 0x19}); - opcode_to_byte_map.insert({zkevm_opcode::BYTE, 0x1a}); - opcode_to_byte_map.insert({zkevm_opcode::SHL, 0x1b}); - opcode_to_byte_map.insert({zkevm_opcode::SHR, 0x1c}); - opcode_to_byte_map.insert({zkevm_opcode::SAR, 0x1d}); - opcode_to_byte_map.insert({zkevm_opcode::KECCAK256, 0x20}); - opcode_to_byte_map.insert({zkevm_opcode::ADDRESS, 0x30}); - opcode_to_byte_map.insert({zkevm_opcode::BALANCE, 0x31}); - opcode_to_byte_map.insert({zkevm_opcode::ORIGIN, 0x32}); - opcode_to_byte_map.insert({zkevm_opcode::CALLER, 0x33}); - opcode_to_byte_map.insert({zkevm_opcode::CALLVALUE, 0x34}); - opcode_to_byte_map.insert({zkevm_opcode::CALLDATALOAD, 0x35}); - opcode_to_byte_map.insert({zkevm_opcode::CALLDATASIZE, 0x36}); - opcode_to_byte_map.insert({zkevm_opcode::CALLDATACOPY, 0x37}); - opcode_to_byte_map.insert({zkevm_opcode::CODESIZE, 0x38}); - opcode_to_byte_map.insert({zkevm_opcode::CODECOPY, 0x39}); - opcode_to_byte_map.insert({zkevm_opcode::GASPRICE, 0x3a}); - opcode_to_byte_map.insert({zkevm_opcode::EXTCODESIZE, 0x3b}); - opcode_to_byte_map.insert({zkevm_opcode::EXTCODECOPY, 0x3c}); - opcode_to_byte_map.insert({zkevm_opcode::RETURNDATASIZE, 0x3d}); - opcode_to_byte_map.insert({zkevm_opcode::RETURNDATACOPY, 0x3e}); - opcode_to_byte_map.insert({zkevm_opcode::EXTCODEHASH, 0x3f}); - opcode_to_byte_map.insert({zkevm_opcode::BLOCKHASH, 0x40}); - opcode_to_byte_map.insert({zkevm_opcode::COINBASE, 0x41}); - opcode_to_byte_map.insert({zkevm_opcode::TIMESTAMP, 0x42}); - opcode_to_byte_map.insert({zkevm_opcode::NUMBER, 0x43}); - opcode_to_byte_map.insert({zkevm_opcode::PREVRANDAO, 0x44}); - opcode_to_byte_map.insert({zkevm_opcode::GASLIMIT, 0x45}); - opcode_to_byte_map.insert({zkevm_opcode::CHAINID, 0x46}); - opcode_to_byte_map.insert({zkevm_opcode::SELFBALANCE, 0x47}); - opcode_to_byte_map.insert({zkevm_opcode::BASEFEE, 0x48}); - opcode_to_byte_map.insert({zkevm_opcode::BLOBHASH, 0x49}); - opcode_to_byte_map.insert({zkevm_opcode::BLOBBASEFEE, 0x4a}); - opcode_to_byte_map.insert({zkevm_opcode::POP, 0x50}); - opcode_to_byte_map.insert({zkevm_opcode::MLOAD, 0x51}); - opcode_to_byte_map.insert({zkevm_opcode::MSTORE, 0x52}); - opcode_to_byte_map.insert({zkevm_opcode::MSTORE8, 0x53}); - opcode_to_byte_map.insert({zkevm_opcode::SLOAD, 0x54}); - opcode_to_byte_map.insert({zkevm_opcode::SSTORE, 0x55}); - opcode_to_byte_map.insert({zkevm_opcode::JUMP, 0x56}); - opcode_to_byte_map.insert({zkevm_opcode::JUMPI, 0x57}); - opcode_to_byte_map.insert({zkevm_opcode::PC, 0x58}); - opcode_to_byte_map.insert({zkevm_opcode::MSIZE, 0x59}); - opcode_to_byte_map.insert({zkevm_opcode::GAS, 0x5a}); - opcode_to_byte_map.insert({zkevm_opcode::JUMPDEST, 0x5b}); - opcode_to_byte_map.insert({zkevm_opcode::TLOAD, 0x5c}); - opcode_to_byte_map.insert({zkevm_opcode::TSTORE, 0x5d}); - opcode_to_byte_map.insert({zkevm_opcode::MCOPY, 0x5e}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH0, 0x5f}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH1, 0x60}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH2, 0x61}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH3, 0x62}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH4, 0x63}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH5, 0x64}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH6, 0x65}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH7, 0x66}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH8, 0x67}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH9, 0x68}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH10, 0x69}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH11, 0x6a}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH12, 0x6b}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH13, 0x6c}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH14, 0x6d}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH15, 0x6e}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH16, 0x6f}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH17, 0x70}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH18, 0x71}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH19, 0x72}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH20, 0x73}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH21, 0x74}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH22, 0x75}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH23, 0x76}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH24, 0x77}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH25, 0x78}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH26, 0x79}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH27, 0x7a}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH28, 0x7b}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH29, 0x7c}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH30, 0x7d}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH31, 0x7e}); - opcode_to_byte_map.insert({zkevm_opcode::PUSH32, 0x7f}); - opcode_to_byte_map.insert({zkevm_opcode::DUP1, 0x80}); - opcode_to_byte_map.insert({zkevm_opcode::DUP2, 0x81}); - opcode_to_byte_map.insert({zkevm_opcode::DUP3, 0x82}); - opcode_to_byte_map.insert({zkevm_opcode::DUP4, 0x83}); - opcode_to_byte_map.insert({zkevm_opcode::DUP5, 0x84}); - opcode_to_byte_map.insert({zkevm_opcode::DUP6, 0x85}); - opcode_to_byte_map.insert({zkevm_opcode::DUP7, 0x86}); - opcode_to_byte_map.insert({zkevm_opcode::DUP8, 0x87}); - opcode_to_byte_map.insert({zkevm_opcode::DUP9, 0x88}); - opcode_to_byte_map.insert({zkevm_opcode::DUP10, 0x89}); - opcode_to_byte_map.insert({zkevm_opcode::DUP11, 0x8a}); - opcode_to_byte_map.insert({zkevm_opcode::DUP12, 0x8b}); - opcode_to_byte_map.insert({zkevm_opcode::DUP13, 0x8c}); - opcode_to_byte_map.insert({zkevm_opcode::DUP14, 0x8d}); - opcode_to_byte_map.insert({zkevm_opcode::DUP15, 0x8e}); - opcode_to_byte_map.insert({zkevm_opcode::DUP16, 0x8f}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP1, 0x90}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP2, 0x91}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP3, 0x92}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP4, 0x93}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP5, 0x94}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP6, 0x95}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP7, 0x96}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP8, 0x97}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP9, 0x98}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP10, 0x99}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP11, 0x9a}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP12, 0x9b}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP13, 0x9c}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP14, 0x9d}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP15, 0x9e}); - opcode_to_byte_map.insert({zkevm_opcode::SWAP16, 0x9f}); - opcode_to_byte_map.insert({zkevm_opcode::LOG0, 0xa0}); - opcode_to_byte_map.insert({zkevm_opcode::LOG1, 0xa1}); - opcode_to_byte_map.insert({zkevm_opcode::LOG2, 0xa2}); - opcode_to_byte_map.insert({zkevm_opcode::LOG3, 0xa3}); - opcode_to_byte_map.insert({zkevm_opcode::LOG4, 0xa4}); - opcode_to_byte_map.insert({zkevm_opcode::CREATE, 0xf0}); - opcode_to_byte_map.insert({zkevm_opcode::CALL, 0xf1}); - opcode_to_byte_map.insert({zkevm_opcode::CALLCODE, 0xf2}); - opcode_to_byte_map.insert({zkevm_opcode::RETURN, 0xf3}); - opcode_to_byte_map.insert({zkevm_opcode::DELEGATECALL, 0xf4}); - opcode_to_byte_map.insert({zkevm_opcode::CREATE2, 0xf5}); - opcode_to_byte_map.insert({zkevm_opcode::STATICCALL, 0xfa}); - opcode_to_byte_map.insert({zkevm_opcode::REVERT, 0xfd}); - opcode_to_byte_map.insert({zkevm_opcode::INVALID, 0xfe}); - opcode_to_byte_map.insert({zkevm_opcode::SELFDESTRUCT, 0xff}); + // + std::vector> opcode_data = { + {zkevm_opcode::STOP, 0x00, 0, 0, 0, 0}, + {zkevm_opcode::ADD, 0x01, 3, 0, 2, 1}, + {zkevm_opcode::MUL, 0x02, 5, 0, 2, 1}, + {zkevm_opcode::SUB, 0x03, 3, 0, 2, 1}, + {zkevm_opcode::DIV, 0x04, 5, 0, 2, 1}, + {zkevm_opcode::SDIV, 0x05, 5, 0, 2, 1}, + {zkevm_opcode::MOD, 0x06, 5, 0, 2, 1}, + {zkevm_opcode::SMOD, 0x07, 5, 0, 2, 1}, + {zkevm_opcode::ADDMOD, 0x08, 8, 0, 3, 1}, + {zkevm_opcode::MULMOD, 0x09, 8, 0, 3, 1}, + {zkevm_opcode::EXP, 0x0a, 10, 1, 2, 1}, + {zkevm_opcode::SIGNEXTEND, 0x0b, 5, 0, 2, 1}, + {zkevm_opcode::LT, 0x10, 3, 0, 2, 1}, + {zkevm_opcode::GT, 0x11, 3, 0, 2, 1}, + {zkevm_opcode::SLT, 0x12, 3, 0, 2, 1}, + {zkevm_opcode::SGT, 0x13, 3, 0, 2, 1}, + {zkevm_opcode::EQ, 0x14, 3, 0, 2, 1}, + {zkevm_opcode::ISZERO, 0x15, 3, 0, 1, 1}, + {zkevm_opcode::AND, 0x16, 3, 0, 2, 1}, + {zkevm_opcode::OR, 0x17, 3, 0, 2, 1}, + {zkevm_opcode::XOR, 0x18, 3, 0, 2, 1}, + {zkevm_opcode::NOT, 0x19, 3, 0, 1, 1}, + {zkevm_opcode::BYTE, 0x1a, 3, 0, 2, 1}, + {zkevm_opcode::SHL, 0x1b, 3, 0, 2, 1}, + {zkevm_opcode::SHR, 0x1c, 3, 0, 2, 1}, + {zkevm_opcode::SAR, 0x1d, 3, 0, 2, 1}, + {zkevm_opcode::KECCAK256, 0x20, 30, 1, 2, 1}, + {zkevm_opcode::ADDRESS, 0x30, 2, 0, 0, 1}, + {zkevm_opcode::BALANCE, 0x31, 100, 1, 1, 1}, + {zkevm_opcode::ORIGIN, 0x32, 2, 0, 0, 1}, + {zkevm_opcode::CALLER, 0x33, 2, 0, 0, 1}, + {zkevm_opcode::CALLVALUE, 0x34, 2, 0, 0, 1}, + {zkevm_opcode::CALLDATALOAD, 0x35, 3, 0, 1, 1}, + {zkevm_opcode::CALLDATASIZE, 0x36, 2, 0, 0, 1}, + {zkevm_opcode::CALLDATACOPY, 0x37, 3, 1, 3, 0}, + {zkevm_opcode::CODESIZE, 0x38, 2, 0, 0, 1}, + {zkevm_opcode::CODECOPY, 0x39, 3, 1, 3, 0}, + {zkevm_opcode::GASPRICE, 0x3a, 2, 0, 0, 1}, + {zkevm_opcode::EXTCODESIZE, 0x3b, 100, 1, 1, 1}, + {zkevm_opcode::EXTCODECOPY, 0x3c, 100, 1, 4, 0}, + {zkevm_opcode::RETURNDATASIZE, 0x3d, 2, 0, 0, 1}, + {zkevm_opcode::RETURNDATACOPY, 0x3e, 3, 1, 3, 0}, + {zkevm_opcode::EXTCODEHASH, 0x3f, 100, 1, 1, 1}, + {zkevm_opcode::BLOCKHASH, 0x40, 20, 0, 1, 1}, + {zkevm_opcode::COINBASE, 0x41, 2, 0, 0, 1}, + {zkevm_opcode::TIMESTAMP, 0x42, 2, 0, 0, 1}, + {zkevm_opcode::NUMBER, 0x43, 2, 0, 0, 1}, + {zkevm_opcode::PREVRANDAO, 0x44, 2, 0, 0, 1}, + {zkevm_opcode::GASLIMIT, 0x45, 2, 0, 0, 1}, + {zkevm_opcode::CHAINID, 0x46, 2, 0, 0, 1}, + {zkevm_opcode::SELFBALANCE, 0x47, 5, 0, 0, 1}, + {zkevm_opcode::BASEFEE, 0x48, 2, 0, 0, 1}, + {zkevm_opcode::BLOBHASH, 0x49, 3, 0, 1, 1}, + {zkevm_opcode::BLOBBASEFEE, 0x4a, 2, 0, 0, 1}, + {zkevm_opcode::POP, 0x50, 2, 0, 1, 0}, + {zkevm_opcode::MLOAD, 0x51, 3, 1, 1, 1}, + {zkevm_opcode::MSTORE, 0x52, 3, 1, 2, 0}, + {zkevm_opcode::MSTORE8, 0x53, 3, 1, 2, 0}, + {zkevm_opcode::SLOAD, 0x54, 100, 1, 1, 1}, + {zkevm_opcode::SSTORE, 0x55, 100, 1, 2, 0}, + {zkevm_opcode::JUMP, 0x56, 8, 0, 1, 0}, + {zkevm_opcode::JUMPI, 0x57, 10, 0, 2, 0}, + {zkevm_opcode::PC, 0x58, 2, 0, 0, 1}, + {zkevm_opcode::MSIZE, 0x59, 2, 0, 0, 1}, + {zkevm_opcode::GAS, 0x5a, 2, 0, 0, 1}, + {zkevm_opcode::JUMPDEST, 0x5b, 1, 0, 0, 0}, + {zkevm_opcode::TLOAD, 0x5c, 100, 0, 1, 1}, + {zkevm_opcode::TSTORE, 0x5d, 100, 0, 2, 0}, + {zkevm_opcode::MCOPY, 0x5e, 3, 1, 3, 0}, + {zkevm_opcode::PUSH0, 0x5f, 2, 0, 0, 1}, + {zkevm_opcode::PUSH1, 0x60, 3, 0, 0, 1}, + {zkevm_opcode::PUSH2, 0x61, 3, 0, 0, 1}, + {zkevm_opcode::PUSH3, 0x62, 3, 0, 0, 1}, + {zkevm_opcode::PUSH4, 0x63, 3, 0, 0, 1}, + {zkevm_opcode::PUSH5, 0x64, 3, 0, 0, 1}, + {zkevm_opcode::PUSH6, 0x65, 3, 0, 0, 1}, + {zkevm_opcode::PUSH7, 0x66, 3, 0, 0, 1}, + {zkevm_opcode::PUSH8, 0x67, 3, 0, 0, 1}, + {zkevm_opcode::PUSH9, 0x68, 3, 0, 0, 1}, + {zkevm_opcode::PUSH10, 0x69, 3, 0, 0, 1}, + {zkevm_opcode::PUSH11, 0x6a, 3, 0, 0, 1}, + {zkevm_opcode::PUSH12, 0x6b, 3, 0, 0, 1}, + {zkevm_opcode::PUSH13, 0x6c, 3, 0, 0, 1}, + {zkevm_opcode::PUSH14, 0x6d, 3, 0, 0, 1}, + {zkevm_opcode::PUSH15, 0x6e, 3, 0, 0, 1}, + {zkevm_opcode::PUSH16, 0x6f, 3, 0, 0, 1}, + {zkevm_opcode::PUSH17, 0x70, 3, 0, 0, 1}, + {zkevm_opcode::PUSH18, 0x71, 3, 0, 0, 1}, + {zkevm_opcode::PUSH19, 0x72, 3, 0, 0, 1}, + {zkevm_opcode::PUSH20, 0x73, 3, 0, 0, 1}, + {zkevm_opcode::PUSH21, 0x74, 3, 0, 0, 1}, + {zkevm_opcode::PUSH22, 0x75, 3, 0, 0, 1}, + {zkevm_opcode::PUSH23, 0x76, 3, 0, 0, 1}, + {zkevm_opcode::PUSH24, 0x77, 3, 0, 0, 1}, + {zkevm_opcode::PUSH25, 0x78, 3, 0, 0, 1}, + {zkevm_opcode::PUSH26, 0x79, 3, 0, 0, 1}, + {zkevm_opcode::PUSH27, 0x7a, 3, 0, 0, 1}, + {zkevm_opcode::PUSH28, 0x7b, 3, 0, 0, 1}, + {zkevm_opcode::PUSH29, 0x7c, 3, 0, 0, 1}, + {zkevm_opcode::PUSH30, 0x7d, 3, 0, 0, 1}, + {zkevm_opcode::PUSH31, 0x7e, 3, 0, 0, 1}, + {zkevm_opcode::PUSH32, 0x7f, 3, 0, 0, 1}, + {zkevm_opcode::DUP1, 0x80, 3, 0, 1, 2}, + {zkevm_opcode::DUP2, 0x81, 3, 0, 2, 3}, + {zkevm_opcode::DUP3, 0x82, 3, 0, 3, 4}, + {zkevm_opcode::DUP4, 0x83, 3, 0, 4, 5}, + {zkevm_opcode::DUP5, 0x84, 3, 0, 5, 6}, + {zkevm_opcode::DUP6, 0x85, 3, 0, 6, 7}, + {zkevm_opcode::DUP7, 0x86, 3, 0, 7, 8}, + {zkevm_opcode::DUP8, 0x87, 3, 0, 8, 9}, + {zkevm_opcode::DUP9, 0x88, 3, 0, 9, 10}, + {zkevm_opcode::DUP10, 0x89, 3, 0, 10, 11}, + {zkevm_opcode::DUP11, 0x8a, 3, 0, 11, 12}, + {zkevm_opcode::DUP12, 0x8b, 3, 0, 12, 13}, + {zkevm_opcode::DUP13, 0x8c, 3, 0, 13, 14}, + {zkevm_opcode::DUP14, 0x8d, 3, 0, 14, 15}, + {zkevm_opcode::DUP15, 0x8e, 3, 0, 15, 16}, + {zkevm_opcode::DUP16, 0x8f, 3, 0, 16, 17}, + {zkevm_opcode::SWAP1, 0x90, 3, 0, 2, 2}, + {zkevm_opcode::SWAP2, 0x91, 3, 0, 3, 3}, + {zkevm_opcode::SWAP3, 0x92, 3, 0, 4, 4}, + {zkevm_opcode::SWAP4, 0x93, 3, 0, 5, 5}, + {zkevm_opcode::SWAP5, 0x94, 3, 0, 6, 6}, + {zkevm_opcode::SWAP6, 0x95, 3, 0, 7, 7}, + {zkevm_opcode::SWAP7, 0x96, 3, 0, 8, 8}, + {zkevm_opcode::SWAP8, 0x97, 3, 0, 9, 9}, + {zkevm_opcode::SWAP9, 0x98, 3, 0, 10, 10}, + {zkevm_opcode::SWAP10, 0x99, 3, 0, 11, 11}, + {zkevm_opcode::SWAP11, 0x9a, 3, 0, 12, 12}, + {zkevm_opcode::SWAP12, 0x9b, 3, 0, 13, 13}, + {zkevm_opcode::SWAP13, 0x9c, 3, 0, 14, 14}, + {zkevm_opcode::SWAP14, 0x9d, 3, 0, 15, 15}, + {zkevm_opcode::SWAP15, 0x9e, 3, 0, 16, 16}, + {zkevm_opcode::SWAP16, 0x9f, 3, 0, 17, 17}, + {zkevm_opcode::LOG0, 0xa0, 375, 1, 2, 0}, + {zkevm_opcode::LOG1, 0xa1, 750, 1, 3, 0}, + {zkevm_opcode::LOG2, 0xa2, 1125, 1, 4, 0}, + {zkevm_opcode::LOG3, 0xa3, 1500, 1, 5, 0}, + {zkevm_opcode::LOG4, 0xa4, 1875, 1, 6, 0}, + {zkevm_opcode::CREATE, 0xf0, 32000, 1, 3, 1}, + {zkevm_opcode::CALL, 0xf1, 100, 1, 7, 1}, + {zkevm_opcode::CALLCODE, 0xf2, 100, 1, 7, 1}, + {zkevm_opcode::RETURN, 0xf3, 0, 1, 2, 0}, + {zkevm_opcode::DELEGATECALL, 0xf4, 100, 1, 6, 1}, + {zkevm_opcode::CREATE2, 0xf5, 32000, 1, 4, 1}, + {zkevm_opcode::STATICCALL, 0xfa, 100, 1, 6, 1}, + {zkevm_opcode::REVERT, 0xfd, 0, 1, 2, 0}, + {zkevm_opcode::INVALID, 0xfe, 0, 1, 0, 0}, + {zkevm_opcode::SELFDESTRUCT, 0xff, 5000, 1, 1, 0}, + // these are not real opcodes, they are for exception processing + {zkevm_opcode::err0, 0x100, 0, 0, 0, 0}, // not enough static gas or incorrect stack size + {zkevm_opcode::err1, 0x101, 0, 0, 0, 0}, // not enough static gas or incorrect stack size + {zkevm_opcode::padding, 0x102, 0, 1, 0, 0} // empty opcode for the fixed circuit size + }; + for(std::size_t i = 0; i < opcode_data.size(); i++) { + auto [opcode_mnemo, opcode_byte, opcode_cost, opcode_dynamic, stack_input, stack_output] = opcode_data[i]; + opcode_to_byte_map.insert({opcode_mnemo, opcode_byte}); + opcode_to_number_map.insert({opcode_mnemo, i}); + opcode_cost_map.insert({opcode_mnemo, opcode_cost}); + opcode_is_dynamic_map.insert({opcode_mnemo, opcode_dynamic}); + opcode_stack_input_map.insert({opcode_mnemo, stack_input}); + opcode_stack_output_map.insert({opcode_mnemo, stack_output}); + } } }; diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_operation.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_operation.hpp index 150bb2c922..7958db5803 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_operation.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_operation.hpp @@ -33,8 +33,9 @@ #include #include -#include #include +#include +#include namespace nil { namespace blueprint { @@ -42,6 +43,9 @@ namespace nil { template class zkevm_circuit; + template + class zkevm_table; + // interface class for generic zkevm operation template class zkevm_operation { @@ -58,25 +62,50 @@ namespace nil { }; using zkevm_circuit_type = zkevm_circuit; + using zkevm_table_type = zkevm_table; using constraint_type = nil::crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; using assignment_type = assignment>; using var = nil::crypto3::zk::snark::plonk_variable; - zkevm_operation() {} - virtual ~zkevm_operation() = default; // note that some parts of the map may be empty // we expect that most of the operations would only use MIDDLE_OP - virtual std::map> generate_gates(zkevm_circuit_type &zkevm_circuit) = 0; + virtual std::map>, + std::vector> + >> + generate_gates(zkevm_circuit_type &zkevm_circuit) = 0; - virtual void generate_assignments(zkevm_circuit_type &zkevm_circuit, zkevm_machine_interface &machine) = 0; + virtual void generate_assignments(zkevm_table_type &zkevm_table, const zkevm_machine_interface &machine) = 0; // should return the same rows amount for everyс operation right now // here in case we would make it dynamic in the future virtual std::size_t rows_amount() = 0; + + virtual constraint_type pc_transition(const zkevm_circuit_type &zkevm_circuit) { + const auto &state = zkevm_circuit.get_state(); + return state.pc.next() - state.pc() - pc_gap; + } + + virtual constraint_type gas_transition(const zkevm_circuit_type &zkevm_circuit) { + const auto &state = zkevm_circuit.get_state(); + return state.gas.next() - state.gas() + gas_cost; + } + + virtual constraint_type stack_size_transition(const zkevm_circuit_type &zkevm_circuit) { + const auto &state = zkevm_circuit.get_state(); + return state.stack_size.next() - state.stack_size() + stack_input - stack_output; + } + // utility funciton static var var_gen(const std::vector &witness_cols, std::size_t i, int32_t offset = 0) { return var(witness_cols[i], offset, true, var::column_type::witness); }; + public: + std::size_t pc_gap = 1; + std::size_t stack_input = 0; + std::size_t stack_output = 0; + std::size_t gas_cost = 3; }; } // namespace blueprint } // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_table.hpp new file mode 100644 index 0000000000..8c04d3cd60 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_table.hpp @@ -0,0 +1,265 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + template + class columns_manager; + + template + class zkevm_circuit; + + template + class zkevm_table { + public: + using arithmetization_type = crypto3::zk::snark::plonk_constraint_system; + using assignment_type = nil::blueprint::assignment; + using circuit_type = nil::blueprint::circuit; + using zkevm_state_type = zkevm_vars; + using columns_manager_type = columns_manager; + using zkevm_operation_type = zkevm_operation; + using zkevm_opcode_gate_class = typename zkevm_operation::gate_class; + using index_selector_type = components::index_selector; + using constraint_type = crypto3::zk::snark::plonk_constraint; + using lookup_constraint_type = crypto3::zk::snark::plonk_lookup_constraint; + using value_type = typename BlueprintFieldType::value_type; + using var = typename crypto3::zk::snark::plonk_variable; + + zkevm_table(const zkevm_circuit &circuit_, assignment_type &assignment_): + circuit(circuit_), assignment(assignment_), curr_row(circuit.get_start_row_index()){ + } + + void finalize_test( + const typename zkevm_circuit::bytecode_table_component::input_type &bytecode_input + ) { + finalize(bytecode_input); + std::cout << "Assignment rows amount = " << assignment.rows_amount() << std::endl; + } + + void finalize( + const typename zkevm_circuit::bytecode_table_component::input_type &bytecode_input + ) { + BOOST_ASSERT_MSG(curr_row != 0, "Row underflow in finalization"); + + zkevm_machine_interface empty_machine({}, 0, 0); + empty_machine.padding_state(); + while(curr_row - circuit.get_start_row_index() < circuit.get_max_rows()-1){ + assign_opcode(empty_machine); + } + + // Assign dynamic lookup tables + typename zkevm_circuit::bytecode_table_component bytecode_table({ + circuit.get_bytecode_witnesses()[0], circuit.get_bytecode_witnesses()[1], circuit.get_bytecode_witnesses()[2], + circuit.get_bytecode_witnesses()[3], circuit.get_bytecode_witnesses()[4], circuit.get_bytecode_witnesses()[5] + }, {}, {}, 10); + + std::cout << "Assign bytecode_table" << std::endl; + generate_assignments(bytecode_table, assignment, bytecode_input, 0); + } + + void assign_opcode(const zkevm_machine_interface &machine) { + auto opcode = machine.opcode(); + if( machine.opcode() != zkevm_opcode::padding ){ + std::cout << "Assign opcode " << opcode_to_string(machine.opcode()) + << " on row " << curr_row + << " pc = " << machine.pc() + << " stack_size = " << machine.stack_size() + << " gas = " << machine.gas() + << " tx_finish = " << machine.tx_finish() + << std::endl; + } + const auto &opcodes = circuit.get_opcodes(); + auto opcode_it = opcodes.find(opcode); + if (opcode_it == opcodes.end()) { + BOOST_ASSERT_MSG(false, (std::string("Unimplemented opcode: ") + opcode_to_string(opcode)) != ""); + } + // Generate all state columns + advance_rows(machine); + + std::set opcodes_with_args = { zkevm_opcode::PUSH0, zkevm_opcode::PUSH1, zkevm_opcode::PUSH2, + zkevm_opcode::PUSH3, zkevm_opcode::PUSH4, zkevm_opcode::PUSH5, zkevm_opcode::PUSH6, zkevm_opcode::PUSH7, + zkevm_opcode::PUSH8, zkevm_opcode::PUSH9, zkevm_opcode::PUSH10, zkevm_opcode::PUSH11, zkevm_opcode::PUSH12, + zkevm_opcode::PUSH13, zkevm_opcode::PUSH14, zkevm_opcode::PUSH15, zkevm_opcode::PUSH16, zkevm_opcode::PUSH17, + zkevm_opcode::PUSH18, zkevm_opcode::PUSH19, zkevm_opcode::PUSH20, zkevm_opcode::PUSH21, zkevm_opcode::PUSH22, + zkevm_opcode::PUSH23, zkevm_opcode::PUSH24, zkevm_opcode::PUSH25, zkevm_opcode::PUSH26, zkevm_opcode::PUSH27, + zkevm_opcode::PUSH28, zkevm_opcode::PUSH29, zkevm_opcode::PUSH30, zkevm_opcode::PUSH31, zkevm_opcode::PUSH32, + zkevm_opcode::err0 + }; + if (opcodes_with_args.find(opcode) == opcodes_with_args.end()) { + opcode_it->second->generate_assignments(*this, machine); + } else { + // for push opcodes we use the additional argument + using pushx_op_type = zkevm_pushx_operation; + using err0_op_type = zkevm_err0_operation; + if (opcode == zkevm_opcode::err0) { + auto err0_implementation = std::static_pointer_cast(opcode_it->second); + err0_implementation->generate_assignments(*this, machine, machine.additional_input()); + } else { + auto pushx_implementation = std::static_pointer_cast(opcode_it->second); + pushx_implementation->generate_assignments(*this, machine, machine.additional_input()); + } + } + curr_row += opcode_it->second->rows_amount() + opcode_it->second->rows_amount() % 2; + if( curr_row - circuit.get_start_row_index() >= circuit.get_max_rows() ) + std::cout << "Curr_row = " << curr_row << " max_rows = " << circuit.get_max_rows() << std::endl; + BOOST_ASSERT(curr_row - circuit.get_start_row_index() < circuit.get_max_rows()); + } + + void advance_rows( + const zkevm_machine_interface &machine + ) { + auto &state = circuit.get_state(); + const auto &opcodes = circuit.get_opcodes(); + auto opcode = machine.opcode(); + auto opcode_it = opcodes.find(machine.opcode()); + if (opcode_it == opcodes.end()) { + BOOST_ASSERT_MSG(false, (std::string("Unimplemented opcode: ") + opcode_to_string(opcode)) != ""); + } + std::size_t opcode_height = opcode_it->second->rows_amount(); + + // state management + value_type step_start = 1; // internal variables + value_type row_counter_inv; + + // for opcodes with odd height append one row + if (opcode_it->second->rows_amount() % 2 ) { + opcode_height++; + } + row_counter_inv = value_type(opcode_height - 1).inversed(); + + std::size_t current_internal_row = opcode_height - 1; + auto &opcodes_info_instance = circuit.get_opcodes_info(); + + // TODO: figure out what is going to happen on state change + std::size_t local_row = curr_row; + std::size_t opcode_num = opcodes_info_instance.get_opcode_number(opcode); + std::size_t opcode_half = ((opcode_num % 4 == 3) || (opcode_num % 4 == 2)); + for (std::size_t i = 0; i < opcode_height; i++) { + assignment.witness(state.opcode.index, local_row) = opcode_num; + assignment.witness(state.real_opcode.index, local_row) = opcodes_info_instance.get_opcode_value(opcode); + assignment.witness(state.bytecode_hash_hi.index, local_row) = w_hi(machine.bytecode_hash); + assignment.witness(state.bytecode_hash_lo.index, local_row) = w_lo(machine.bytecode_hash); + + if (i % 2 == opcode_half) { + components::generate_assignments(*circuit.get_opcode_selector(), assignment, {opcode_num/4}, local_row); + } + assignment.witness(state.opcode_parity.index, local_row) = opcode_num%2; + + assignment.witness(state.row_counter.index, local_row) = current_internal_row; + components::generate_assignments(*(circuit.get_row_selector()), assignment, {current_internal_row/2}, local_row); + + assignment.witness(state.pc.index, local_row) = machine.pc(); + assignment.witness(state.gas.index, local_row) = machine.gas(); + assignment.witness(state.stack_size.index, local_row) = machine.stack_size(); + assignment.witness(state.memory_size.index, local_row) = machine.memory_size(); + + assignment.witness(state.step_start.index, local_row) = step_start; + assignment.witness(state.row_counter_inv.index, local_row) = row_counter_inv; + + if (i == 0) step_start = 0; + + current_internal_row--; + row_counter_inv = current_internal_row == 0 ? 0 : value_type(current_internal_row).inversed(); + local_row++; + } + } + + const opcodes_info get_opcodes_info() const{ + return circuit.get_opcodes_info(); + } + + const std::vector &get_opcode_cols() const{ + return circuit.get_opcode_cols(); + } + + const std::size_t get_opcode_range_checked_cols_amount() const { + return circuit.get_opcode_range_checked_cols_amount(); + } + + assignment_type &get_assignment(){ + return assignment; + } + + std::size_t get_current_row(){ + return curr_row; + } + private: + assignment_type &assignment; + const zkevm_circuit &circuit; + // current row maintained between different calls to the circuit object + std::size_t curr_row; + }; + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_word.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_word.hpp index 9224795e02..bd8e5d809d 100644 --- a/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_word.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm/zkevm_word.hpp @@ -24,35 +24,24 @@ #pragma once -#include +#include #include #include +#include +#include +#include + namespace nil { namespace blueprint { - constexpr static const - boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<257>> zkevm_modulus = - 0x10000000000000000000000000000000000000000000000000000000000000000_cppui_modular257; - - constexpr static const boost::multiprecision::backends::modular_params< - boost::multiprecision::backends::cpp_int_modular_backend<257>> - zkevm_modular_params = zkevm_modulus.backend(); + constexpr inline auto zkevm_modulus = + 0x10000000000000000000000000000000000000000000000000000000000000000_big_uint257; - typedef boost::multiprecision::number< - boost::multiprecision::backends::modular_adaptor< - boost::multiprecision::backends::cpp_int_modular_backend<257>, - boost::multiprecision::backends::modular_params_ct< - boost::multiprecision::backends::cpp_int_modular_backend<257>, - zkevm_modular_params>>> - zkevm_word_type; + using zkevm_word_type = nil::crypto3::multiprecision::auto_big_mod; - template - constexpr zkevm_word_type zwordc(const T &value) { - return zkevm_word_type::backend_type(value.backend()); - } + using zkevm_word_integral_type = nil::crypto3::multiprecision::big_uint<257>; template std::vector zkevm_word_to_field_element(const zkevm_word_type &word) { @@ -60,10 +49,8 @@ namespace nil { std::vector chunks; constexpr const std::size_t chunk_size = 16; constexpr const std::size_t num_chunks = 256 / chunk_size; - using integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<257>>; - constexpr const integral_type mask = - integral_type((zkevm_word_type(1) << chunk_size) - 1); + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + constexpr const integral_type mask = (integral_type(1) << chunk_size) - 1; integral_type word_copy = integral_type(word); for (std::size_t i = 0; i < num_chunks; ++i) { chunks.push_back(word_copy & mask); @@ -89,5 +76,127 @@ namespace nil { } return chunks; } + + std::uint8_t char_to_hex(char c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'a' && c <= 'f') return c - 'a' + 10; + if (c >= 'A' && c <= 'F') return c - 'A' + 10; + return 0; + } + + zkevm_word_type zkevm_word_from_string(std::string val){ + zkevm_word_type result; + for(std::size_t i = 0; i < val.size(); i++ ){ + result *= 16; + result += char_to_hex(val[i]); + } + return result; + } + + zkevm_word_type zkevm_word_from_bytes(const std::vector &buffer){ + zkevm_word_type result; + for(std::size_t i = 0; i < buffer.size(); i++ ){ + result *= 256; + result += buffer[i]; + } + return result; + } + + template + typename BlueprintFieldType::value_type w_hi(const zkevm_word_type &val){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + integral_type mask = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000_big_uint257; + return (integral_type(val) & mask) >> 128; + } + + template + typename BlueprintFieldType::value_type w_lo(const zkevm_word_type &val){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + integral_type mask = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint257; + return integral_type(val) & mask; + } + + std::array w_to_8(const zkevm_word_type &val){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + std::array result; + integral_type tmp(val); + for(std::size_t i = 0; i < 32; i++){ + result[31-i] = std::uint8_t(tmp & 0xFF); tmp >>= 8; + } + return result; + } + + std::array w_to_16(const zkevm_word_type &val){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + std::array result; + integral_type tmp(val); + for(std::size_t i = 0; i < 16; i++){ + result[15-i] = std::size_t(tmp & 0xFFFF); tmp >>= 16; + } + return result; + } + + template + std::array w_to_128(const zkevm_word_type &val){ + std::array result; + result[0] = w_hi; + result[1] = w_lo; + return result; + } + + // Return a/b, a%b + std::pair eth_div(const zkevm_word_type &a, const zkevm_word_type &b){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + integral_type r_integral = b != 0u ? integral_type(a) / integral_type(b) : 0u; + zkevm_word_type r = r_integral; + zkevm_word_type q = b != 0u ? integral_type(a) % integral_type(b) : 0u; + return {r, q}; + } + + bool is_negative(zkevm_word_type x){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + return (integral_type(x) > zkevm_modulus/2 - 1); + } + + zkevm_word_type negate_word(zkevm_word_type x){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + return zkevm_word_type(zkevm_modulus - integral_type(x)); + } + + zkevm_word_type abs_word(zkevm_word_type x){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + return is_negative(x)? negate_word(x) : x; + } + + zkevm_word_type zkevm_keccak_hash(std::vector input){ + nil::crypto3::hashes::keccak_1600<256>::digest_type d = nil::crypto3::hash>(input); + nil::crypto3::algebra::fields::field<256>::integral_type n(d); + zkevm_word_type result(n); + + return result; + } + + // Return a/b, a%b + std::pair eth_signed_div(const zkevm_word_type &a, const zkevm_word_type &b_input){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + zkevm_word_type b = (integral_type(a) == zkevm_modulus - 1) && (integral_type(b_input) == zkevm_modulus/2) ? 1 : b_input; + zkevm_word_type a_abs = abs_word(a), + b_abs = abs_word(b); + + integral_type r_integral = (b != 0u)? integral_type(a_abs) / integral_type(b_abs) : 0u; + zkevm_word_type r_abs = r_integral, + q_abs = b != 0u ? integral_type(a_abs) % integral_type(b_abs) : a_abs, + r = (is_negative(a) == is_negative(b)) ? r_abs : negate_word(r_abs), + q = is_negative(a)? negate_word(q_abs) : q_abs; + + zkevm_word_type q_out = b != 0u ? q : 0; // according to EVM spec a % 0 = 0 + + return {r, q_out}; + } } // namespace blueprint } // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/bytecode.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/bytecode.hpp new file mode 100644 index 0000000000..49363508ba --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/bytecode.hpp @@ -0,0 +1,178 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class bytecode : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + struct input_type{ + TYPE rlc_challenge; + typename std::conditional::type bytecodes; + typename std::conditional::type keccak_buffers; + }; + + std::size_t max_bytecode_size; + std::size_t max_keccak_blocks; + + static nil::crypto3::zk::snark::plonk_table_description get_table_description( + std::size_t max_bytecode_size_, + std::size_t max_keccak_blocks_, + bool make_links = true + ){ + nil::crypto3::zk::snark::plonk_table_description desc(15, 1, 10, 10); + desc.usable_rows_amount = max_bytecode_size_ + max_keccak_blocks_; + return desc; + } + + bytecode(context_type &context_object, + input_type input, + std::size_t max_bytecode_size_, + std::size_t max_keccak_blocks_, + bool make_links = true + ) : max_bytecode_size(max_bytecode_size_), + max_keccak_blocks(max_keccak_blocks_), + generic_component(context_object) + { + using Bytecode_Table = bytecode_table; + using Keccak_Table = keccak_table; + + std::vector bytecode_lookup_area = {0,1,2,3,4,5}; + std::vector keccak_lookup_area = {0,1,2,3}; + context_type bytecode_ct = context_object.subcontext(bytecode_lookup_area,0,max_bytecode_size); + context_type keccak_ct = context_object.subcontext( keccak_lookup_area, max_bytecode_size, max_bytecode_size + max_keccak_blocks); + + Bytecode_Table bc_t = Bytecode_Table(bytecode_ct, input.bytecodes, max_bytecode_size); + Keccak_Table(keccak_ct, {input.rlc_challenge, input.keccak_buffers}, max_keccak_blocks); + + const std::vector &tag = bc_t.tag; + const std::vector &index = bc_t.index; + const std::vector &value = bc_t.value; + const std::vector &is_opcode = bc_t.is_opcode; + const std::vector &hash_hi = bc_t.hash_hi; + const std::vector &hash_lo = bc_t.hash_lo; + std::vector rlc_challenge = std::vector(max_bytecode_size); + std::vector push_size = std::vector(max_bytecode_size); + std::vector length_left = std::vector(max_bytecode_size); + std::vector value_rlc = std::vector(max_bytecode_size); + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + std::size_t cur = 0; + const auto &bytecodes = input.bytecodes.get_data(); + for(std::size_t i = 0; i < bytecodes.size(); i++){ + TYPE push_size_value = 0; + auto buffer = bytecodes[i].first; + TYPE length_left_value = buffer.size(); + for(std::size_t j = 0; j < bytecodes[i].first.size(); j++, cur++){ + auto byte = buffer[j]; + rlc_challenge[cur] = input.rlc_challenge; + if( j == 0){ // HEADER + push_size[cur] = 0; + length_left[cur] = length_left_value; + value_rlc[cur] = length_left_value; + push_size_value = 0; + length_left_value--; + cur++; + } + // BYTE + rlc_challenge[cur] = input.rlc_challenge; + length_left[cur] = length_left_value; + if(push_size_value == 0){ + if(byte > 0x5f && byte < 0x80) push_size_value = byte - 0x5f; + } else { + push_size_value--; + } + push_size[cur] = push_size_value; + value_rlc[cur] = value_rlc[cur - 1] * input.rlc_challenge + byte; + length_left_value--; + } + } + } + // allocate things that are not part of bytecode_table + for(std::size_t i = 0; i < max_bytecode_size; i++) { + allocate(push_size[i],6,i); + allocate(value_rlc[i],7,i); + allocate(length_left[i],8,i); + allocate(rlc_challenge[i],9,i); + } + // constrain all bytecode values +// if (make_links) { +// copy_constrain(input.rlc_challenge, rlc_challenge[0]); +// } + static const auto zerohash = zkevm_keccak_hash({}); + for(std::size_t i = 0; i < max_bytecode_size; i++) { + constrain(tag[i] * (tag[i] - 1)); // 0. TAG is zeroes or ones -- maybe there will be third value for non-used rows + constrain((tag[i] - 1) * index[i]); // 1. INDEX for HEADER and unused bytes is zero + constrain((tag[i] - 1) * (length_left[i] - value[i])); // 4. In contract header length_left == contract length + constrain(is_opcode[i] * (is_opcode[i] - 1)); // 7. is_opcode is zeroes or ones + constrain((tag[i] - 1) * is_opcode[i]); // 8. is_opcode on HEADER are zeroes + constrain((tag[i] - 1) * (value_rlc[i] - length_left[i])); // 14. value_rlc for HEADERS == 0; + + if (i > 0) { + constrain((tag[i-1] - 1) * index[i]); // 2. INDEX for first contract byte is zero + constrain(tag[i-1] * tag[i] * (index[i] - index[i-1] - 1)); // 3. INDEX is incremented for all bytes + constrain(tag[i] * (length_left[i-1] - length_left[i] - 1)); // 5. In contract bytes each row decrement length_left + constrain(tag[i-1] * (tag[i] - 1) * length_left[i-1]); // 6. Length_left is zero for last byte in the contract + constrain((tag[i-1] - 1) * tag[i] * (is_opcode[i] - 1)); // 9. Fist is_opcode on BYTE after HEADER is 1 + constrain(tag[i] * (is_opcode[i] - 1) * (push_size[i-1] - push_size[i] - 1)); // 10. PUSH_SIZE decreases for non-opcodes + constrain(is_opcode[i] * push_size[i-1]); // 11. before opcode push_size is always zero + constrain(tag[i] * (hash_hi[i-1] - hash_hi[i])); //12. for all bytes hash is similar to previous + constrain(tag[i] * (hash_lo[i-1] - hash_lo[i])); //13. for all bytes hash is similar to previous + constrain(tag[i] * (value_rlc[i] - value_rlc[i-1] * rlc_challenge[i] - value[i])); // 15. for all bytes RLC is correct + constrain(tag[i] * (rlc_challenge[i] - rlc_challenge[i-1])); //16. for each BYTEs rlc_challenge are similar + } + if (i> 0 && i < max_bytecode_size-1) { + constrain(tag[i+1] * (rlc_challenge[i] - rlc_challenge[i-1])); //17. rlc_challenge is similar for different contracts + } + lookup(tag[i]*value[i],"byte_range_table/full"); + lookup(std::vector({value[i]*is_opcode[i], push_size[i]*is_opcode[i], is_opcode[i]}),"zkevm_opcodes/full"); + + if( i > 0 ){ + lookup(std::vector({ + tag[i] + 1 - tag[i], // TODO: update math::expression constructor with constant parameter + tag[i-1] * (1 - tag[i]) * value_rlc[i-1], + tag[i-1] * (1 - tag[i]) * hash_hi[i-1] + (1 - tag[i-1] * (1 - tag[i])) * w_hi(zerohash), + tag[i-1] * (1 - tag[i]) * hash_lo[i-1] + (1 - tag[i-1] * (1 - tag[i])) * w_lo(zerohash) + }), "keccak_table"); + } + } + }; + }; + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/copy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/copy.hpp new file mode 100644 index 0000000000..c1bdfcd27c --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/copy.hpp @@ -0,0 +1,270 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class copy : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + struct input_type{ + TYPE rlc_challenge; + + template + using enable_for_assignment_t = typename std::conditional_t; + + enable_for_assignment_t bytecodes; + enable_for_assignment_t keccak_buffers; + enable_for_assignment_t rw_operations; + enable_for_assignment_t> copy_events; + }; + public: + using BytecodeTable = bytecode_table; + using RWTable = rw_table; + using KeccakTable = keccak_table; + using CopyTable = copy_table; + + static constexpr std::size_t copy_advice_amount = 11; + + static nil::crypto3::zk::snark::plonk_table_description get_table_description( + std::size_t max_copy, + std::size_t max_rw, + std::size_t max_keccak_blocks, + std::size_t max_bytecode + ){ + std::size_t witness_amount = copy_advice_amount; + witness_amount += BytecodeTable::get_witness_amount(); + witness_amount += RWTable::get_witness_amount(); + witness_amount += KeccakTable::get_witness_amount(); + witness_amount += CopyTable::get_witness_amount(); + nil::crypto3::zk::snark::plonk_table_description desc(witness_amount, 1, 3, 10); + desc.usable_rows_amount = std::max(std::max(max_copy, max_rw + 1), std::max(max_keccak_blocks + 1, max_bytecode + 1)); + return desc; + } + copy(context_type &context_object, + const input_type &input, + std::size_t max_copy, + std::size_t max_rw, + std::size_t max_keccak_blocks, + std::size_t max_bytecode + ) :generic_component(context_object) { + auto zerohash = zkevm_keccak_hash({}); + if constexpr (stage == GenerationStage::ASSIGNMENT) { + std::cout << "Copy assign " << input.copy_events.size() << std::endl; + } else { + std::cout << "Copy circuit" << std::endl; + } + + std::cout << "Copy assignment and circuit construction" << std::endl; + std::size_t current_column = copy_advice_amount; + + std::vector copy_lookup_area; + for( std::size_t i = 0; i < CopyTable::get_witness_amount(); i++){ + copy_lookup_area.push_back(current_column++); + } + std::vector bytecode_lookup_area; + for( std::size_t i = 0; i < BytecodeTable::get_witness_amount(); i++){ + bytecode_lookup_area.push_back(current_column++); + } + std::vector keccak_lookup_area; + for( std::size_t i = 0; i < KeccakTable::get_witness_amount(); i++){ + keccak_lookup_area.push_back(current_column++); + } + std::vector rw_lookup_area; + for( std::size_t i = 0; i < RWTable::get_witness_amount(); i++){ + rw_lookup_area.push_back(current_column++); + } + + // Dynamic lookups shouldn't be placed on 0 row. + context_type bytecode_ct = context_object.subcontext(bytecode_lookup_area,1,max_bytecode + 1); + context_type keccak_ct = context_object.subcontext( keccak_lookup_area, 1, max_keccak_blocks + 1); + context_type rw_ct = context_object.subcontext(rw_lookup_area, 1, max_rw + 1); + + context_type copy_ct = context_object.subcontext( copy_lookup_area, 0, max_copy); + + BytecodeTable bc_t = BytecodeTable(bytecode_ct, input.bytecodes, max_bytecode); + KeccakTable k_t = KeccakTable(keccak_ct, {input.rlc_challenge, input.keccak_buffers}, max_keccak_blocks); + RWTable rw_t = RWTable(rw_ct, input.rw_operations, max_rw, true); + CopyTable c_t = CopyTable(copy_ct, input.copy_events, max_copy, false); + + const std::vector is_first = c_t.is_first; + const std::vector id_hi = c_t.id_hi; + const std::vector id_lo = c_t.id_lo; + const std::vector cp_type = c_t.cp_type; + const std::vector addr = c_t.addr; + const std::vector length = c_t.length; + const std::vector is_write = c_t.is_write; + const std::vector rw_counter = c_t.rw_counter; + + std::vector> type_selector(max_copy); + std::vector bytes(max_copy); + std::vector rlc(max_copy); + std::vector rlc_challenge(max_copy); + std::vector is_last(max_copy); + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + std::size_t current_row = 0; + for( auto &cp: input.copy_events ){ + std::cout + << "\tCopy event " << copy_op_to_num(cp.source_type) + << " => " << copy_op_to_num(cp.destination_type) + << " bytes size " << cp.bytes.size() + << " rw_counter " << cp.initial_rw_counter + << std::endl; + for( std::size_t i = 0; i < cp.bytes.size(); i++ ){ + std::cout << std::hex << std::size_t(cp.bytes[i]) << " " << std::dec; + bytes[current_row] = cp.bytes[i]; + bytes[current_row + 1] = cp.bytes[i]; + rlc_challenge[current_row] = input.rlc_challenge; + rlc_challenge[current_row + 1] = input.rlc_challenge; + rlc[current_row] = i == 0? length[current_row] * rlc_challenge[current_row]: rlc[current_row - 1] * rlc_challenge[current_row]; + rlc[current_row + 1] = rlc[current_row] + bytes[current_row]; + type_selector[current_row][copy_op_to_num(cp.source_type) - 1] = 1; + type_selector[current_row + 1][copy_op_to_num(cp.destination_type) - 1] = 1; + + current_row += 2; + } + is_last[current_row - 1] = 1; + std::cout << std::endl; + std::cout << "\tFor bytes size = " << cp.bytes.size() << " last row is " << current_row - 1 << std::endl; + } + } + for( std::size_t i = 0; i < max_copy; i++){ + for(std::size_t j = 0; j < 6; j++){ + allocate(type_selector[i][j], j, i); + } + allocate(bytes[i],6, i); + allocate(rlc[i],7, i); + allocate(rlc_challenge[i],8, i); + allocate(is_last[i], 9, i); + + TYPE memory_selector = type_selector[i][copy_op_to_num(copy_operand_type::memory) - 1]; + TYPE keccak_selector = type_selector[i][copy_op_to_num(copy_operand_type::keccak) - 1]; + std::vector tmp; + tmp = { + memory_selector * TYPE(rw_op_to_num(rw_operation_type::memory)), + memory_selector * id_lo[i], + memory_selector * addr[i], + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + memory_selector * rw_counter[i], + memory_selector * is_write[i],// is_write + TYPE(0), + memory_selector * bytes[i] + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(1) , + keccak_selector * is_last[i] * rlc[i], + keccak_selector * is_last[i] * id_hi[i] + (1 - keccak_selector * is_last[i]) * w_hi(zerohash), + keccak_selector * is_last[i] * id_lo[i] + (1 - keccak_selector * is_last[i]) * w_lo(zerohash) + }; + lookup(tmp, "keccak_table"); + } + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + std::vector even; + std::vector odd; + std::vector every; + std::vector non_first; + + every.push_back(context_object.relativize(is_write[1] * (is_write[1] - 1), -1)); + every.push_back(context_object.relativize(is_first[1] * (is_first[1] - 1), -1)); + every.push_back(context_object.relativize(is_last[1] * (is_last[1] - 1), -1)); + TYPE type_selector_sum; + TYPE cp_type_constraint; + for(std::size_t j = 0; j < 6; j++){ + type_selector_sum += type_selector[1][j]; + cp_type_constraint += (j+1) * type_selector[1][j]; + every.push_back(context_object.relativize(type_selector[1][j] * (type_selector[1][j] - 1), -1)); + } + every.push_back(context_object.relativize(type_selector_sum * (type_selector_sum - 1), -1)); + every.push_back(context_object.relativize(cp_type_constraint - cp_type[1], -1)); + every.push_back(context_object.relativize((type_selector_sum - 1)* is_last[1], -1)); + every.push_back(context_object.relativize((type_selector_sum - 1)* is_first[1], -1)); + + non_first.push_back(context_object.relativize(type_selector_sum * (rlc_challenge[1] - rlc_challenge[0]), -1)); + + even.push_back(context_object.relativize(is_write[1], -1)); + even.push_back(context_object.relativize(is_last[1], -1)); + even.push_back(context_object.relativize(type_selector_sum * (1 - is_first[1]) * (id_hi[0] - id_hi[2]),-1)); + even.push_back(context_object.relativize(type_selector_sum * (1 - is_first[1]) * (id_lo[0] - id_lo[2]),-1)); + even.push_back(context_object.relativize(type_selector_sum * (1 - is_first[1]) * (cp_type[0] - cp_type[2]),-1)); + even.push_back(context_object.relativize(type_selector_sum * (1 - is_first[1]) * (addr[0] - addr[2] + 1),-1)); + even.push_back(context_object.relativize((1 - is_first[1]) * type_selector_sum * (length[0] - length[2] - 1),-1)); + even.push_back(context_object.relativize((1 - is_first[1]) * type_selector_sum * (rw_counter[0] - rw_counter[2] + 1),-1)); + even.push_back(context_object.relativize(is_first[1] *(rlc[1] - length[1] * rlc_challenge[1]),-1)); + even.push_back(context_object.relativize((1 - is_first[1]) * type_selector_sum * (rlc[1] - rlc[0] * rlc_challenge[1]),-1)); + + odd.push_back(context_object.relativize(1 - is_write[1], -1)); + odd.push_back(context_object.relativize(bytes[1] - bytes[0], -1)); + odd.push_back(context_object.relativize(is_first[1] - is_first[0], -1)); + odd.push_back(context_object.relativize(length[1] - length[0], -1)); + + odd.push_back(context_object.relativize(type_selector_sum * (1 - is_last[1]) * (id_hi[0] - id_hi[2]),-1)); + odd.push_back(context_object.relativize(type_selector_sum * (1 - is_last[1]) * (id_lo[0] - id_lo[2]),-1)); + odd.push_back(context_object.relativize(type_selector_sum * (1 - is_last[1]) * (cp_type[0] - cp_type[2]),-1)); + odd.push_back(context_object.relativize(type_selector_sum * (1 - is_last[1]) * (addr[0] - addr[2] + 1),-1)); + odd.push_back(context_object.relativize(type_selector_sum * (rlc[1] - rlc[0] - bytes[1]),-1)); + odd.push_back(context_object.relativize((1 - is_last[1]) * type_selector_sum * (length[0] - length[2] - 1),-1)); + odd.push_back(context_object.relativize((1 - is_last[1]) * type_selector_sum * (rw_counter[0] - rw_counter[2] + 1),-1)); + odd.push_back(context_object.relativize(is_last[1] * (length[1] - 1), -1)); + + for( std::size_t i = 0; i < even.size(); i++ ){ + for( std::size_t j = 0; j < max_copy-1; j+=2 ){ + context_object.relative_constrain(even[i], j); + } + } + for( std::size_t i = 0; i < odd.size(); i++ ){ + for( std::size_t j = 1; j <= max_copy-1; j+=2 ){ + context_object.relative_constrain(odd[i], j); + } + } + for( std::size_t i = 0; i < every.size(); i++ ){ + context_object.relative_constrain(every[i], 0, max_copy-1); + } + for( std::size_t i = 0; i < non_first.size(); i++ ){ + context_object.relative_constrain(non_first[i], 1, max_copy-1); + } + } + } + }; + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/hardhat_input_generator.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/hardhat_input_generator.hpp new file mode 100644 index 0000000000..7e332082a8 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/hardhat_input_generator.hpp @@ -0,0 +1,993 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include +#include + +#include //Move needed utils to bbf +#include + +#include +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + class zkevm_hardhat_input_generator:zkevm_abstract_input_generator{ + public: + zkevm_hardhat_input_generator( + const std::vector> bytecodes, + const std::vector &pts + ){ + for( auto &bytecode: bytecodes ){ + _keccaks.new_buffer(bytecode); + _bytecodes.new_buffer(bytecode); + } + + std::size_t rw_counter = 0; + std::size_t call_id = 0; + for( auto &pt: pts){ + boost::property_tree::ptree ptrace = pt.get_child("result.structLogs"); + std::cout << "PT = " << ptrace.size() << std::endl; + + std::vector stack = zkevm_word_vector_from_ptree(ptrace.begin()->second.get_child("stack")); + std::vector memory = byte_vector_from_ptree(ptrace.begin()->second.get_child("memory")); + std::vector memory_next; + std::vector stack_next; + std::map storage = key_value_storage_from_ptree(ptrace.begin()->second.get_child("storage")); + std::map storage_next; + + std::size_t memory_size_before = 0; + for( auto it = ptrace.begin(); it!=ptrace.end(); it++){ + std::string opcode = it->second.get_child("op").data(); + //std::cout << "\t" << opcode << std::endl; + if(std::distance(it, ptrace.end()) != 1){ + stack_next = zkevm_word_vector_from_ptree(std::next(it)->second.get_child("stack")); + memory_next = byte_vector_from_ptree(std::next(it)->second.get_child("memory")); + storage_next = key_value_storage_from_ptree(it->second.get_child("storage")); + } + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + zkevm_state state; // TODO:optimize + state.tx_hash = 0; // TODO: change it + state.opcode = opcode_number_from_str(opcode); + state.call_id = call_id; + state.gas = atoi(it->second.get_child("gas").data().c_str()); + state.pc = atoi(it->second.get_child("pc").data().c_str()); + state.rw_counter = rw_counter; + state.bytecode_hash = _bytecodes.get_data()[call_id].second; // TODO: fix it if possible + state.additional_input = opcode.substr(0,4) == "PUSH"? stack_next[stack_next.size() - 1]: 0; + state.tx_finish = (std::distance(it, ptrace.end()) != 1); + state.stack_size = stack.size(); + state.memory_size = memory_size_before; + state.stack_slice = stack; + // TODO:memory_slice + // TODO:storage_slice + for( std::size_t i = 0; i < memory.size(); i++){ + state.memory_slice[i] = memory[i]; + } + // Opcode is not presented in RW lookup table. We just take it from json + // // std::cout << opcode << std::endl; + memory_size_before = memory.size(); + if(opcode == "STOP") { + // 0x00 -- no RW operations + } else if(opcode == "ADD") { + // 0x01 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "MUL") { + // 0x02 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SUB") { + // 0x03 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DIV") { + // 0x04 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SDIV") { + // 0x05 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "MOD") { + // 0x06 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SMOD") { + // 0x07 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "ADDMOD") { + // 0x08 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "MULMOD") { + // 0x09 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "EXP") { + // 0x0a + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + _exponentiations.push_back({stack[stack.size() - 1], stack[stack.size() - 2]}); + } else if(opcode == "SIGEXTEND") { + // 0x0b + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "LT") { + // 0x10 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "GT") { + // 0x11 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SLT") { + // 0x12 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SGT") { + // 0x13 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "EQ") { + // 0x14 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "ISZERO") { + // 0x15 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "AND") { + // 0x16 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "OR") { + // 0x17 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "XOR") { + // 0x18 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "NOT") { + // 0x19 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "BYTE") { + // 0x1a + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SHL") { + // 0x1b + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SHR") { + // 0x1c + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SAR") { + // 0x1d + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "KECCAK256") { + // 0x20 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + + std::size_t length = std::size_t(integral_type(stack[stack.size()-2])); + std::size_t offset = std::size_t(integral_type(stack[stack.size()-1])); + auto hash_value = stack_next[stack_next.size()-1]; + + std::cout << "\tAdd copy event for KECCAK256 length = " << length << std::endl; + copy_event cpy; + cpy.source_id = call_id; + cpy.source_type = copy_operand_type::memory; + cpy.src_address = offset; + cpy.destination_id = hash_value; + cpy.destination_type = copy_operand_type::keccak; + cpy.dst_address = 0; + cpy.length = length; + cpy.initial_rw_counter = rw_counter; + cpy.bytes = {}; + std::cout << "\toffset = " << offset << std::endl; + + std::size_t offset_small = w_to_16(offset)[15]; + for( std::size_t i = 0; i < length; i++){ + _rw_operations.push_back(memory_rw_operation(call_id, offset+i, rw_counter++, false, memory_next[offset_small + i])); + cpy.bytes.push_back(memory_next[offset_small + i]); + } + _copy_events.push_back(cpy); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, hash_value)); + _keccaks.new_buffer(cpy.bytes); + memory_size_before = memory_next.size(); + } else if(opcode == "ADDRESS") { + // 0x30 + std::cout << "Test ADDRESS opcode, please!" << std::endl; + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "BALANCE") { + // 0x31 + // std::cout << "Test me, please!" << std::endl; + std::cout << "Test BALANCE opcode, please!" << std::endl; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + + // TODO: add read operations from account + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "ORIGIN") { + // 0x32 + // std::cout << "Test me, please!" << std::endl; + std::cout << "Test ORIGIN opcode, please!" << std::endl; + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "CALLER") { + // 0x33 + // std::cout << "Test me, please!" << std::endl; + std::cout << "Test CALLER opcode, please!" << std::endl; + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "CALLVALUE") { + // 0x34 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "CALLDATALOAD") { + // 0x35 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + + // TODO: add 32 read operations to calldata + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "CALLDATASIZE") { + // 0x36 + // TODO: get real call data size + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "CALLDATACOPY") { + // 0x37 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + + std::size_t length = std::size_t(integral_type(stack[stack.size()-3])); + std::size_t src = std::size_t(integral_type(stack[stack.size()-2])); + std::size_t dest = std::size_t(integral_type(stack[stack.size()-1])); + // std::cout << "Length = " << length << std::endl; + // std::cout << "Memory_size " << memory.size() << "=>" << memory_next.size() << std::endl; + + std::cout << "\tAdd copy event for CALLDATACOPY length = " << length << std::endl; + copy_event cpy; + cpy.source_id = call_id; + cpy.source_type = copy_operand_type::calldata; + cpy.src_address = src; + cpy.destination_id = call_id; + cpy.destination_type = copy_operand_type::memory; + cpy.dst_address = dest; + cpy.length = length; + cpy.initial_rw_counter = rw_counter; + cpy.bytes = {}; + + // TODO: add read operations on calldata after calldata final design + for( std::size_t i = 0; i < length; i++){ + _rw_operations.push_back(memory_rw_operation(call_id, dest+i, rw_counter++, true, memory_next[dest+i])); + cpy.bytes.push_back(memory_next[dest+i]); //TODO: change it on calldata + } + _copy_events.push_back(cpy); + memory_size_before = memory_next.size(); + } else if(opcode == "CODESIZE") { + // 0x38 + // std::cout << "Test me, please!" << std::endl; + std::cout << "CODESIZE" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "CODECOPY") { + // 0x39 + std::cout << "CODECOPY not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + + // TODO: add length write operations to memory + // Consistency with bytecode table will be checked by bytecode circuit + } else if(opcode == "GASPRICE") { + // 0x3a + // std::cout << "Test me, please!" << std::endl; + std::cout << "GASPRICE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "EXTCODESIZE") { + // 0x3b + // std::cout << "Test me, please!" << std::endl; + std::cout << "EXTCODESIZE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "EXTCODECOPY") { + // 0x3c + // std::cout << "Test me, please!" << std::endl; + std::cout << "EXTCODECOPY not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-4])); + + // TODO: add length write operations to memory + // Consistency with bytecode table will be checked by bytecode circuit + } else if(opcode == "RETURNDATASIZE") { + // 0x3d + // std::cout << "Test me, please!" << std::endl; + std::cout << "RETURNDATASIZE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "RETURNDATACOPY") { + // 0x3e + // std::cout << "Test me, please!" << std::endl; + std::cout << "RETURNDATACOPY not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + + // TODO: add length write operations to memory + // Where will consistency check be done? + } else if(opcode == "EXTCODEHASH") { + // 0x3f + // std::cout << "Test me, please!" << std::endl; + std::cout << "EXTCODEHASH not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "BLOCKHASH") { + // 0x40 + std::cout << "BLOCKHASH not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "COINBASE") { + // 0x41 + std::cout << "COINBASE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "TIMESTAMP") { + // 0x42 + std::cout << "TIMESTAMP not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "NUMBER") { + // 0x43 + std::cout << "NUMBER not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "DIFFICULTY") { + // 0x44 + std::cout << "DIFFICULTY not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "GASLIMIT") { + // 0x45 + std::cout << "GASLIMIT not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "CHAINID") { + // 0x46 + std::cout << "CHAINID not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SELFBALANCE") { + // 0x47 + std::cout << "SELFBALANCE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "BASEFEE") { + // 0x48 + std::cout << "BASEFEE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "BLOBHASH") { + // 0x49 + std::cout << "BLOBHASH not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "BLOBBASEFEE") { + // 0x4a + std::cout << "BLOBBASEFEE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "POP") { + // 0x50 + } else if(opcode == "MLOAD") { + // 0x51 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, false, stack[stack.size()-1])); + + zkevm_word_type addr = stack[stack.size() - 1]; + BOOST_ASSERT_MSG(addr < std::numeric_limits::max(), "Cannot process so large memory address"); + // std::cout << "\t\t Address = 0x" << std::hex << addr << std::dec << " memory size " << memory.size() << std::endl; + for( std::size_t i = 0; i < 32; i++){ + _rw_operations.push_back(memory_rw_operation(call_id, addr+i, rw_counter++, false, addr+i < memory.size() ? memory[std::size_t(integral_type(addr+i))]: 0)); + + } + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + memory_size_before = memory_next.size(); + } else if(opcode == "MSTORE") { + // 0x52 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + + zkevm_word_type addr = stack[stack.size() - 1]; + BOOST_ASSERT_MSG(addr < std::numeric_limits::max(), "Cannot process so large memory address"); + // std::cout << "\t\t Address = 0x" << std::hex << addr << std::dec << " memory size " << memory.size() << std::endl; + auto bytes = w_to_8(stack[stack.size() - 2]); + for( std::size_t i = 0; i < 32; i++){ + _rw_operations.push_back(memory_rw_operation(call_id, addr + i, rw_counter++, true, bytes[i])); + } + memory_size_before = memory_next.size(); + } else if(opcode == "MSTORE8") { + // 0x53 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + + zkevm_word_type addr = stack[stack.size() - 1]; + BOOST_ASSERT_MSG(addr < std::numeric_limits::max(), "Cannot process so large memory address"); + // std::cout << "\t\t Address = 0x" << std::hex << addr << std::dec << " memory size " << memory.size() << std::endl; + auto bytes = w_to_8(stack[stack.size() - 2]); + _rw_operations.push_back(memory_rw_operation(call_id, addr, rw_counter++, true, bytes[31])); + memory_size_before = memory_next.size(); + } else if(opcode == "SLOAD") { + // 0x54 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(storage_rw_operation( + call_id, + stack[stack.size()-1], //Storage key + rw_counter++, + false, + storage_next.at(stack[stack.size()-1]), + storage_next.at(stack[stack.size()-1]) //TODO: Here should be previous value + )); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + // TODO: here should be previous value + state.storage_slice[stack[stack.size()-1]] = storage_next.at(stack[stack.size()-1]); + + } else if(opcode == "SSTORE") { + // 0x55 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(storage_rw_operation( + call_id, + stack[stack.size()-1], + rw_counter++, + true, + stack[stack.size()-2], + // TODO: Remove by real initial value + // Overwise lookup in MPT table won't be correct + (storage.find(stack[stack.size()-1]) == storage.end())? 0: storage.at(stack[stack.size()-1])) + ); // Second parameter should be transaction_id + + } else if(opcode == "JUMP") { + // 0x56 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + } else if(opcode == "JUMPI") { + // 0x57 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + + } else if(opcode == "PC") { + // 0x58 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "MSIZE") { + // 0x58 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "GAS") { + // 0x59 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "JUMPDEST") { + // 0x5a + } else if(opcode == "TLOAD") { + // 0x5b + std::cout << "TLOAD not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, false, stack[stack.size()-1])); + + // TODO: add trasient storage operations + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "TSTORE") { + // 0x5c + std::cout << "TSTORE not implemented" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, false, stack[stack.size()-1])); + + // TODO: add trasient storage write operations + } else if(opcode == "MCOPY") { + // 0x5d + std::cout << "MCOPY not implemented. Add copy event" << std::endl; + exit(2); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + + // TODO: add length read operations to memory + // TODO: add length write operations to memory + // Consistensy will be checked by copy circuit + } else if(opcode == "PUSH0") { + // 0x5f + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH1") { + // 0x60 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH2") { + // 0x61 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH3") { + // 0x62 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH4") { + // 0x63 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH5") { + // 0x64 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH6") { + // 0x65 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH7") { + // 0x66 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH8") { + // 0x67 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH9") { + // 0x68 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH10") { + // 0x69 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH11") { + // 0x6a + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH12") { + // 0x6b + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH13") { + // 0x6c + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH14") { + // 0x6d + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH15") { + // 0x6e + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH16") { + // 0x6f + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH17") { + // 0x70 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH18") { + // 0x71 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH19") { + // 0x72 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH20") { + // 0x73 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH21") { + // 0x74 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH22") { + // 0x75 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH23") { + // 0x76 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH24") { + // 0x77 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH25") { + // 0x78 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH26") { + // 0x79 + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH27") { + // 0x7a + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH28") { + // 0x7b + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH29") { + // 0x7c + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH30") { + // 0x7d + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH31") { + // 0x7e + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "PUSH32") { + // 0x7f + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP1") { + // 0x80 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP2") { + // 0x81 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP3") { + // 0x82 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP4") { + // 0x83 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP5") { + // 0x84 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP6") { + // 0x85 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-6, rw_counter++, false, stack[stack.size()-6])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP7") { + // 0x86 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-7, rw_counter++, false, stack[stack.size()-7])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP8") { + // 0x87 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-8, rw_counter++, false, stack[stack.size()-8])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP9") { + // 0x88 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-9, rw_counter++, false, stack[stack.size()-9])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP10") { + // 0x89 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-10, rw_counter++, false, stack[stack.size()-10])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP11") { + // 0x8a + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-11, rw_counter++, false, stack[stack.size()-11])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP12") { + // 0x8b + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-12, rw_counter++, false, stack[stack.size()-12])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP13") { + // 0x8c + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-13, rw_counter++, false, stack[stack.size()-13])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP14") { + // 0x8d + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-14, rw_counter++, false, stack[stack.size()-14])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP15") { + // 0x8e + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-15, rw_counter++, false, stack[stack.size()-15])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "DUP16") { + // 0x8f + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-16, rw_counter++, false, stack[stack.size()-16])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP1") { + // 0x90 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-2, rw_counter++, true, stack_next[stack_next.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP2") { + // 0x91 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-3, rw_counter++, true, stack_next[stack_next.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP3") { + // 0x92 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-4, rw_counter++, true, stack_next[stack_next.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP4") { + // 0x93 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-5, rw_counter++, true, stack_next[stack_next.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP5") { + // 0x94 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-6, rw_counter++, false, stack[stack.size()-6])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-6, rw_counter++, true, stack_next[stack_next.size()-6])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP6") { + // 0x95 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-7, rw_counter++, false, stack[stack.size()-7])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-7, rw_counter++, true, stack_next[stack_next.size()-7])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP7") { + // 0x96 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-8, rw_counter++, false, stack[stack.size()-8])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-8, rw_counter++, true, stack_next[stack_next.size()-8])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP8") { + // 0x97 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-9, rw_counter++, false, stack[stack.size()-9])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-9, rw_counter++, true, stack_next[stack_next.size()-9])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP9") { + // 0x98 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-10, rw_counter++, false, stack[stack.size()-10])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-10, rw_counter++, true, stack_next[stack_next.size()-10])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP10") { + // 0x99 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-11, rw_counter++, false, stack[stack.size()-11])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-11, rw_counter++, true, stack_next[stack_next.size()-11])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP11") { + // 0x9a + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-12, rw_counter++, false, stack[stack.size()-12])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-12, rw_counter++, true, stack_next[stack_next.size()-12])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP12") { + // 0x9b + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-13, rw_counter++, false, stack[stack.size()-13])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-13, rw_counter++, true, stack_next[stack_next.size()-13])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP13") { + // 0x9c + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-14, rw_counter++, false, stack[stack.size()-14])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-14, rw_counter++, true, stack_next[stack_next.size()-14])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP14") { + // 0x9d + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-15, rw_counter++, false, stack[stack.size()-15])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-15, rw_counter++, true, stack_next[stack_next.size()-15])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP15") { + // 0x9e + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-16, rw_counter++, false, stack[stack.size()-16])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-16, rw_counter++, true, stack_next[stack_next.size()-16])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "SWAP16") { + // 0x9f + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-17, rw_counter++, false, stack[stack.size()-17])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-17, rw_counter++, true, stack_next[stack_next.size()-17])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "LOG0") { + // 0xa0 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + } else if(opcode == "LOG1") { + // 0xa1 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + } else if(opcode == "LOG2") { + // 0xa2 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-4])); + } else if(opcode == "LOG3") { + // 0xa3 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-5])); + } else if(opcode == "LOG4") { + // 0xa4 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-6, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-6])); + } else if(opcode == "CREATE") { + // 0xf0 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "CALL") { + // 0xf1 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-7, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-6, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-6])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-7])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "CALLCODE") { + // 0xf2 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-7, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-6, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-6])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-7])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + + } else if(opcode == "RETURN") { + // 0xf3 + std::cout << "\tAdd copy event for RETURN" << std::endl; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-2])); + std::size_t offset = std::size_t(integral_type(stack[stack.size()-1])); + std::size_t length = std::size_t(integral_type(stack[stack.size()-2])); + + copy_event cpy; + cpy.source_id = call_id; + cpy.source_type = copy_operand_type::memory; + cpy.src_address = offset; + cpy.destination_id = call_id; + cpy.destination_type = copy_operand_type::returndata; + cpy.dst_address = 0; + cpy.length = length; + cpy.initial_rw_counter = rw_counter; + cpy.bytes = {}; + + std::cout << "\tRETURN length = " << length << " memory size = " << memory.size() << " offset = " << offset << std::endl; + std::cout << "\tInitial RW counter = " << std::hex << rw_counter << std::dec << std::endl; + for(std::size_t i = 0; i < length; i++){ + _rw_operations.push_back(memory_rw_operation(call_id, offset+i, rw_counter++, false, offset+i < memory.size() ? memory[offset+i]: 0)); + cpy.bytes.push_back(offset+i < memory.size() ? memory[offset+i]: 0); + } + std::cout << std::endl; + _copy_events.push_back(cpy); + } else if(opcode == "DELEGATECALL") { + // 0xf4 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-6, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-6])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "CREATE2") { + // 0xf5 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "STATICCALL") { + // 0xfa + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-6, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-5, rw_counter++, false, stack[stack.size()-2])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-4, rw_counter++, false, stack[stack.size()-3])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-3, rw_counter++, false, stack[stack.size()-4])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-5])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-6])); + _rw_operations.push_back(stack_rw_operation(call_id, stack_next.size()-1, rw_counter++, true, stack_next[stack_next.size()-1])); + } else if(opcode == "REVERT") { + // 0xfd + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-2, rw_counter++, false, stack[stack.size()-1])); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-2])); + } else if(opcode == "SELFDESTRUCT") { + // 0xff + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, stack[stack.size()-1])); + } else { + std::cout << "Unknown opcode " << std::hex << opcode << std::dec << std::endl; + BOOST_ASSERT(false); + } + _zkevm_states.push_back(state); + stack = stack_next; + memory = memory_next; + storage = storage_next; + } + call_id++; + } + std::sort(_rw_operations.begin(), _rw_operations.end(), [](rw_operation a, rw_operation b){ + return a < b; + }); + } + public: + virtual zkevm_keccak_buffers keccaks() override {return _keccaks;} + virtual zkevm_keccak_buffers bytecodes() override { return _bytecodes;} + virtual rw_operations_vector rw_operations() override {return _rw_operations;} + virtual std::vector copy_events() override { return _copy_events;} + virtual std::vector zkevm_states() override{ return _zkevm_states;} + virtual std::vector> exponentiations()override{return _exponentiations;} + protected: + zkevm_keccak_buffers _keccaks; + zkevm_keccak_buffers _bytecodes; + rw_operations_vector _rw_operations; + std::vector _copy_events; + std::vector _zkevm_states; + std::vector> _exponentiations; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/opcode_tester.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/opcode_tester.hpp new file mode 100644 index 0000000000..bbf6a89b79 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/opcode_tester.hpp @@ -0,0 +1,112 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + + // This is a class that bytecodes as a sequence of bytes. + // It emulates contract if we don't want to compile contract from the solidity code e t.c. + class zkevm_opcode_tester{ + public: + zkevm_opcode_tester(){} + void push_opcode(const zkevm_opcode opcode, const std::vector &additional_input = {}){ + std::cout << "PC opcode map[" << bytecode.size() << "] = " << opcodes.size() << " opcode = " << opcode_to_string(opcode) << std::endl; + std::uint8_t opcode_number = opcode_to_number(opcode); + bool is_push = (opcode_number >= 0x60) && (opcode_number <= 0x7f); + + pc_opcode_map[bytecode.size()] = opcodes.size(); + opcodes.push_back({opcode, word_from_byte_buffer(additional_input)}); + bytecode.push_back(opcode_number); + if( is_push) { + std::uint8_t x = opcode_number - 0x5f; + for( std::size_t i = 0; i < x - additional_input.size(); i++){ + bytecode.push_back(0); + } + bytecode.insert(bytecode.end(), additional_input.begin(), additional_input.end() ); + BOOST_ASSERT(additional_input.size() <= x); + } else { + if( additional_input.size() != 0) + std::cout << "WRONG opcode input " << opcode + << " " << std::hex << std::size_t(opcode_number) << std::dec + << " additional input size = " << additional_input.size() + << std::endl; + BOOST_ASSERT(additional_input.size() == 0); + } + } + + void push_opcode(const zkevm_opcode opcode, zkevm_word_type additional_input){ + std::cout << "PC opcode map[" << bytecode.size() << "] = " << opcodes.size() << " opcode = " << opcode_to_string(opcode) << std::endl; + std::uint8_t opcode_number = opcode_to_number(opcode); + std::uint8_t x = 0; + bool is_push = (opcode_number >= 0x60) && (opcode_number <= 0x7f); + auto bytes = w_to_8(additional_input); + + pc_opcode_map[bytecode.size()] = opcodes.size(); + opcodes.push_back({opcode, additional_input}); + bytecode.push_back(opcode_number); + if( is_push) { + x = opcode_number - 0x5f; + } + for( std::size_t i = 0; i < 32 - x; i++){ + BOOST_ASSERT(bytes[i] == 0); + } + for( std::size_t i = 32 - x; i < 32; i++){ + bytecode.push_back(bytes[i]); + } + } + + const std::vector &get_bytecode() const { + return bytecode; + } + const std::vector> &get_opcodes() const { + return opcodes; + } + + const std::pair &get_opcode_by_pc(std::size_t pc) const { + return opcodes[pc_opcode_map.at(pc)]; + } + + private: + zkevm_word_type word_from_byte_buffer(const std::vector &bytes){ + zkevm_word_type result; + for( std::size_t i = 0; i < bytes.size(); i++){ + result *= 0x100; + result += bytes[i]; + } + return result; + } + std::vector bytecode; + std::vector> opcodes; + std::map pc_opcode_map; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/opcode_tester_input_generator.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/opcode_tester_input_generator.hpp new file mode 100644 index 0000000000..5d245d7f29 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/input_generators/opcode_tester_input_generator.hpp @@ -0,0 +1,723 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include +#include + +#include //Move needed utils to bbf +#include + +#include + +#include +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + class zkevm_opcode_tester_input_generator:zkevm_abstract_input_generator{ + public: + zkevm_opcode_tester_input_generator( + const zkevm_opcode_tester &tester + ): rw_counter(1), transactions_amount(0){ + // It may be done for multiple transactions; + apply_tester(tester); + } + + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<512>; + + void apply_tester(const zkevm_opcode_tester &tester, std::size_t initial_gas = 30000000){ + transactions_amount++; + _keccaks.new_buffer(tester.get_bytecode()); + std::size_t current_buffer_id = _bytecodes.new_buffer(tester.get_bytecode()); + + std::size_t call_id = transactions_amount - 1; + std::size_t pc = 0; + std::size_t gas = initial_gas; + std::vector stack; + zkevm_word_type bytecode_hash = _bytecodes.get_data()[current_buffer_id].second; + const std::map memory; + const std::map storage; + + while(true){ + auto [opcode,additional_input] = tester.get_opcode_by_pc(pc); + + zkevm_state state; // TODO:optimize + state.tx_hash = 0; // * change it + state.opcode = opcode_to_number(opcode); + state.call_id = call_id; + state.gas = gas; + state.pc = pc; + state.rw_counter = rw_counter; + state.bytecode_hash = _bytecodes.get_data()[current_buffer_id].second; + state.additional_input = additional_input; + //state.tx_finish = (ind == tester.get_opcodes().size() - 1); + state.stack_size = stack.size(); + state.memory_size = memory.size(); + state.stack_slice = stack; + state.memory_slice = memory; + state.storage_slice = storage; + _zkevm_states.push_back(state); + + if(opcode == zkevm_opcode::STOP){ + break; + } else if (opcode == zkevm_opcode::ADD){ + // 0x01 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = (a + b); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::MUL){ + // 0x02 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = (a * b); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::SUB){ + // 0x03 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = (a - b); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::DIV){ + // 0x04 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + integral_type r_integral = b != 0u ? integral_type(a) / integral_type(b) : 0u; + zkevm_word_type result = r_integral; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 5; + } else if (opcode == zkevm_opcode::SDIV){ + // 0x05 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b_input = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b_input)); + auto is_negative = [](zkevm_word_type x) { + return (integral_type(x) > zkevm_modulus / 2 - 1); + }; + auto negate_word = [](zkevm_word_type x) { + return zkevm_word_type(zkevm_modulus - integral_type(x)); + }; + auto abs_word = [&is_negative, &negate_word](zkevm_word_type x) { + return is_negative(x) ? negate_word(x) : x; + }; + bool overflow = (integral_type(a) == zkevm_modulus - 1) && (integral_type(b_input) == zkevm_modulus / 2); + zkevm_word_type b = overflow ? 1 : b_input; + zkevm_word_type a_abs = abs_word(a), b_abs = abs_word(b); + integral_type r_integral =(b != 0u) ? integral_type(a_abs) / integral_type(b_abs) : 0u; + zkevm_word_type r_abs = r_integral, + result = (is_negative(a) == is_negative(b)) ? r_abs: negate_word(r_abs); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 5; + } else if (opcode == zkevm_opcode::MOD){ + // 0x06 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + integral_type r_integral = b != 0u ? integral_type(a) / integral_type(b) : 0u; + zkevm_word_type r = r_integral; + zkevm_word_type q = b != 0u ? integral_type(a) % integral_type(b) : a; + zkevm_word_type result = b != 0u ? q : 0; // according to EVM spec a % 0 = 0 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 5; + } else if (opcode == zkevm_opcode::SMOD){ + // 0x07 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b_input = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b_input)); + auto is_negative = [](zkevm_word_type x) { + return (integral_type(x) > zkevm_modulus / 2 - 1); + }; + auto negate_word = [](zkevm_word_type x) { + return zkevm_word_type(zkevm_modulus - integral_type(x)); + }; + auto abs_word = [&is_negative, &negate_word](zkevm_word_type x) { + return is_negative(x) ? negate_word(x) : x; + }; + bool overflow = (integral_type(a) == zkevm_modulus - 1) && (integral_type(b_input) == zkevm_modulus / 2); + zkevm_word_type b = overflow ? 1 : b_input; + zkevm_word_type a_abs = abs_word(a), b_abs = abs_word(b); + integral_type r_integral =(b != 0u) ? integral_type(a_abs) / integral_type(b_abs) : 0u; + zkevm_word_type r_abs = r_integral, + q_abs = b != 0u ? integral_type(a_abs) % integral_type(b_abs) : a_abs, + r = (is_negative(a) == is_negative(b)) ? r_abs: negate_word(r_abs), + q = is_negative(a) ? negate_word(q_abs) : q_abs; + zkevm_word_type result = b != 0u ? q : 0; // according to EVM spec a % 0 = 0 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 5; + } else if(opcode == zkevm_opcode::ADDMOD) { + // 0x08 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type modulus = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, modulus)); + // This is how the result is calculated inside the circuit + // It is suppose to avoid overflow of the type zkevm_word_type + integral_type s_integral = integral_type(a) + integral_type(b); + integral_type r_integral = modulus != 0u ? s_integral / integral_type(modulus) : 0u; + zkevm_word_type q = zkevm_word_type(s_integral - r_integral * integral_type(modulus)); + zkevm_word_type result = modulus != 0u ? q : 0; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 8; + } else if(opcode == zkevm_opcode::MULMOD) { + // 0x09 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type modulus = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, modulus)); + a = modulus != 0u ? a : 0; + extended_integral_type s_integral = extended_integral_type(integral_type(a)) * extended_integral_type(integral_type(b)); + zkevm_word_type sp = zkevm_word_type(s_integral % extended_integral_type(zkevm_modulus)); + zkevm_word_type spp = zkevm_word_type(s_integral / extended_integral_type(zkevm_modulus)); + extended_integral_type r_integral = modulus != 0u ? s_integral / extended_integral_type(integral_type(modulus)): 0u; + zkevm_word_type rp = zkevm_word_type(r_integral % extended_integral_type(zkevm_modulus)); + zkevm_word_type rpp = zkevm_word_type(r_integral / extended_integral_type(zkevm_modulus)); + zkevm_word_type result = modulus != 0u ? zkevm_word_type(s_integral % extended_integral_type(integral_type(modulus))): 0u; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 8; + } else if (opcode == zkevm_opcode::EXP){ + // 0x0a + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type d = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, d)); + zkevm_word_type result = exp_by_squaring(a, d); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + std::cout << "\tExponentiation: " << a << " ^ " << d << std::endl; + _exponentiations.push_back({a, d}); + pc++; + //gas -= (d == 0) ? 10 : (10 + 10 * (1 + log256(d))); + } else if (opcode == zkevm_opcode::SIGNEXTEND){ + // 0x0b + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type x = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, x)); + int len = (integral_type(b) < 32) ? int(integral_type(b)) + 1 : 32; + integral_type sign = (integral_type(x) << (8 * (32 - len) + 1)) >> 256; + zkevm_word_type result = zkevm_word_type((((integral_type(1) << 8 * (32 - len)) - 1) << 8 * len) * sign) + zkevm_word_type((integral_type(x) << (8 * (32 - len) + 1)) >>(8 * (32 - len) + 1)); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 5; + } else if (opcode == zkevm_opcode::LT){ + // 0x10 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = a < b; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::GT){ + // 0x11 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = a > b; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::SLT){ + // 0x12 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result; + if( is_negative(a) && !is_negative(b) ){ + result = 1; + } else if( is_negative(a) && is_negative(b) ){ + result = a > b; + } else if( !is_negative(a) && !is_negative(b) ){ + result = a < b; + } + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::SGT){ + // 0x13 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result; + if( !is_negative(a) && is_negative(b) ){ + result = 1; + } else if( is_negative(a) && is_negative(b) ){ + result = a < b; + } else if( !is_negative(a) && !is_negative(b) ){ + result = a > b; + } + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::EQ){ + // 0x14 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = (a == b); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::ISZERO){ + // 0x15 + zkevm_word_type a = stack.back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, false, a)); + stack.pop_back(); + zkevm_word_type result = a == 0u? 1u: 0u; + stack.push_back(result); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size()-1, rw_counter++, true, result)); + gas -= 3; + pc++; + } else if(opcode == zkevm_opcode::AND) { + // 0x16 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = a.base() & b.base(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if(opcode == zkevm_opcode::OR) { + // 0x17 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = a.base() & b.base(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if(opcode == zkevm_opcode::XOR) { + // 0x18 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type result = a.base() & b.base(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if(opcode == zkevm_opcode::NOT) { + // 0x19 + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + zkevm_word_type result = zkevm_word_type(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint257) - a;; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if(opcode == zkevm_opcode::BYTE) { + // 0x1a + zkevm_word_type N = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, N)); + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + auto n = w_to_8(N)[31]; + zkevm_word_type result = N > 31? 0: w_to_8(a)[n]; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + }else if(opcode == zkevm_opcode::SHL) { + // 0x1b + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + int shift = (integral_type(b) < 256) ? int(integral_type(b)) : 256; + zkevm_word_type result = zkevm_word_type(integral_type(a) << shift); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + }else if(opcode == zkevm_opcode::SHR) { + // 0x1c + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, a)); + int shift = (integral_type(b) < 256) ? int(integral_type(b)) : 256; + integral_type r_integral = integral_type(a) >> shift; + zkevm_word_type result = r_integral; + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + }else if(opcode == zkevm_opcode::SAR) { + //0x1d + zkevm_word_type b = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, b)); + zkevm_word_type input_a = stack.back(); + stack.pop_back(); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, false, input_a)); + auto is_negative = [](zkevm_word_type x) { + return (integral_type(x) > zkevm_modulus / 2 - 1);}; + auto negate_word = [](zkevm_word_type x) { + return zkevm_word_type(zkevm_modulus - integral_type(x));}; + auto abs_word = [&is_negative, &negate_word](zkevm_word_type x) { + return is_negative(x) ? negate_word(x) : x;}; + zkevm_word_type a = abs_word(input_a); + int shift = (integral_type(b) < 256) ? int(integral_type(b)) : 256; + integral_type r_integral = integral_type(a) >> shift; + zkevm_word_type result = is_negative(a) ? ((r_integral == 0)? zkevm_word_type(zkevm_modulus-1) : negate_word(zkevm_word_type(r_integral))) : zkevm_word_type(r_integral); + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, result)); + stack.push_back(result); + pc++; + gas -= 3; + } else if (opcode == zkevm_opcode::PUSH0){ + // 0x5f + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 2; + pc++; + } else if(opcode == zkevm_opcode::PUSH1){ + // 0x60 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc+=2; + } else if(opcode == zkevm_opcode::PUSH2){ + // 0x61 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 3; + } else if(opcode == zkevm_opcode::PUSH3){ + // 0x62 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 4; + } else if(opcode == zkevm_opcode::PUSH4){ + // 0x63 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 5; + } else if(opcode == zkevm_opcode::PUSH5){ + // 0x64 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 6; + } else if(opcode == zkevm_opcode::PUSH6){ + // 0x65 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 7; + } else if(opcode == zkevm_opcode::PUSH7){ + // 0x66 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 8; + } else if(opcode == zkevm_opcode::PUSH8){ + // 0x67 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 9; + } else if(opcode == zkevm_opcode::PUSH9){ + // 0x68 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 10; + } else if(opcode == zkevm_opcode::PUSH10){ + // 0x69 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 11; + } else if(opcode == zkevm_opcode::PUSH11){ + // 0x6a + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 12; + } else if(opcode == zkevm_opcode::PUSH12){ + // 0x6b + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 13; + } else if(opcode == zkevm_opcode::PUSH13){ + // 0x6c + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 14; + } else if(opcode == zkevm_opcode::PUSH14){ + // 0x6d + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 15; + } else if(opcode == zkevm_opcode::PUSH15){ + // 0x6e + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 16; + } else if(opcode == zkevm_opcode::PUSH16){ + // 0x6f + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 17; + } else if(opcode == zkevm_opcode::PUSH17){ + // 0x70 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 18; + } else if(opcode == zkevm_opcode::PUSH18){ + // 0x71 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 19; + } else if(opcode == zkevm_opcode::PUSH19){ + // 0x72 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 20; + } else if(opcode == zkevm_opcode::PUSH20){ + // 0x73 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 21; + } else if(opcode == zkevm_opcode::PUSH21){ + // 0x74 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 22; + } else if(opcode == zkevm_opcode::PUSH22){ + // 0x75 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 23; + } else if(opcode == zkevm_opcode::PUSH23){ + // 0x76 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 24; + } else if(opcode == zkevm_opcode::PUSH24){ + // 0x77 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 25; + } else if(opcode == zkevm_opcode::PUSH25){ + // 0x78 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 26; + } else if(opcode == zkevm_opcode::PUSH26){ + // 0x79 + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 27; + } else if(opcode == zkevm_opcode::PUSH27){ + // 0x7a + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 28; + } else if(opcode == zkevm_opcode::PUSH28){ + // 0x7b + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 29; + } else if(opcode == zkevm_opcode::PUSH29){ + // 0x7c + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 30; + } else if(opcode == zkevm_opcode::PUSH30){ + // 0x7d + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 31; + } else if(opcode == zkevm_opcode::PUSH31){ + // 0x7e + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 32; + } else if(opcode == zkevm_opcode::PUSH32){ + // 0x7f + _rw_operations.push_back(stack_rw_operation(call_id, stack.size(), rw_counter++, true, additional_input)); + stack.push_back(additional_input); + gas -= 3; + pc += 33; + } else { + std::cout << "Opcode tester machine doesn't contain " << opcode << " implementation" << std::endl; + BOOST_ASSERT(false); + } + } + + std::sort(_rw_operations.begin(), _rw_operations.end(), [](rw_operation a, rw_operation b){ + return a < b; + }); + } + public: + virtual zkevm_keccak_buffers keccaks() override {return _keccaks;} + virtual zkevm_keccak_buffers bytecodes() override { return _bytecodes;} + virtual rw_operations_vector rw_operations() override {return _rw_operations;} + virtual std::vector copy_events() override { return _copy_events;} + virtual std::vector zkevm_states() override{ return _zkevm_states;} + virtual std::vector> exponentiations()override{return _exponentiations;} + protected: + std::size_t transactions_amount; + std::size_t rw_counter; + zkevm_keccak_buffers _keccaks; + zkevm_keccak_buffers _bytecodes; + rw_operations_vector _rw_operations; + std::vector _copy_events; + std::vector _zkevm_states; + std::vector> _exponentiations; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/keccak.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/keccak.hpp new file mode 100644 index 0000000000..3b78bc6116 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/keccak.hpp @@ -0,0 +1,62 @@ +//---------------------------------------------------------------------------// +// Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class keccak : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using private_input_type = typename std::conditional::type; + + struct input_type{ + TYPE rlc_challenge; + private_input_type private_input; + }; + public: + static nil::crypto3::zk::snark::plonk_table_description get_table_description(){ + nil::crypto3::zk::snark::plonk_table_description desc(20, 1, 3, 5); + desc.usable_rows_amount = 300; + return desc; + } + + keccak(context_type &context_object, const input_type &input) :generic_component(context_object) { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + std::cout << "Keccak assign = " << input.private_input << std::endl; + } + } + }; + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/add_sub.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/add_sub.hpp new file mode 100644 index 0000000000..543fbd376f --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/add_sub.hpp @@ -0,0 +1,173 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_add_sub_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using integral_type = zkevm_word_integral_type; + + zkevm_add_sub_bbf(context_type &context_object, const opcode_input_type ¤t_state, bool is_add): + generic_component(context_object, false) + { + integral_type two_128 = integral_type(1) << 128; + + std::vector A(16); + std::vector B(16); + std::vector S(16); // S = A+B + TYPE carry0; + TYPE carry1; + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto a = w_to_16(current_state.stack_top()); + auto b = w_to_16(current_state.stack_top(1)); + auto s = + is_add ? + w_to_16(current_state.stack_top() + current_state.stack_top(1)): + w_to_16(current_state.stack_top() - current_state.stack_top(1)); + + for( std::size_t i = 0; i < 16; i++){ + A[i] = is_add? a[i]: s[i]; + B[i] = b[i]; + S[i] = is_add? s[i] : a[i]; + } + auto A_128 = chunks16_to_chunks128(A); + auto B_128 = chunks16_to_chunks128(B); + auto S_128 = chunks16_to_chunks128(S); + carry0 = (A_128.second + B_128.second >= two_128); + carry1 = (A_128.first + B_128.first + carry0 >= two_128); + } + for( std::size_t i = 0; i < 16; i++){ + allocate(A[i], i, 0); + allocate(B[i], i + 16, 0); + allocate(S[i], i, 1); + } + allocate(carry0, 32, 0); + allocate(carry1, 33, 0); + auto A_128 = chunks16_to_chunks128(A); + auto B_128 = chunks16_to_chunks128(B); + auto S_128 = chunks16_to_chunks128(S); + constrain(carry0 * (carry0 - 1)); + constrain(carry1 * (carry1 - 1)); + constrain(A_128.second + B_128.second - carry0 * two_128 - S_128.second); + constrain(A_128.first + B_128.first + carry0 - carry1 * two_128 - S_128.first); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition + constrain(current_state.gas(1) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(1) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1), + TYPE(0),// is_write + is_add? A_128.first: S_128.first, + is_add? A_128.second: S_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 1, + TYPE(0),// is_write + B_128.first, + B_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 2, + TYPE(1),// is_write + is_add? S_128.first: A_128.first, + is_add? S_128.second: A_128.second + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tAssignment implemented" << std::endl; + } + } + }; + + template + class zkevm_add_sub_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_add_sub_bbf bbf_obj(context, current_state, is_add); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_add_sub_bbf bbf_obj(context, current_state, is_add); + } + zkevm_add_sub_operation(bool _is_add):is_add(_is_add){ + } + std::size_t rows_amount() override { + return 2; + } + protected: + bool is_add; + }; + } //namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/addmod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/addmod.hpp new file mode 100644 index 0000000000..d232818f3b --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/addmod.hpp @@ -0,0 +1,495 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_addmod_bbf : public generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + using value_type = typename FieldType::value_type; + using var = crypto3::zk::snark::plonk_variable; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two_128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two_192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) - + a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * + (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct(const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * + (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + TYPE carry_on_addition_constraint(TYPE a_0, TYPE a_1, TYPE a_2, TYPE b_0, TYPE b_1, + TYPE b_2, TYPE r_0, TYPE r_1, TYPE r_2, + TYPE last_carry, TYPE result_carry, + bool first_constraint = false) { + TYPE res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - r_0 - + r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + + (a_2 + b_2) * two_32 - r_0 - r_1 * two_16 - r_2 * two_32 - + result_carry * two_48; + } + return res; + }; + TYPE last_carry_on_addition_constraint(TYPE a_0, TYPE b_0, TYPE r_0, + TYPE last_carry, TYPE result_carry) { + TYPE res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + + std::vector res; + + public: + zkevm_addmod_bbf(context_type &context_object, + const opcode_input_type ¤t_state, + bool make_links = true) + : generic_component(context_object), res(chunk_amount) { + using integral_type = zkevm_word_integral_type; + + std::vector c_1_chunks(4); + TYPE c_2; + TYPE c_3; + TYPE carry[2][carry_amount + 1]; + TYPE N_sum_inverse; + TYPE r_overflow; + TYPE s_overflow; + TYPE N_nonzero; + TYPE N_sum; + TYPE c_1_64; + TYPE first_carryless; + TYPE second_row_carries; + TYPE third_row_carries; + TYPE two_192_cell; + TYPE two_128_cell; + TYPE two_64_cell; + std::vector N_64_chunks(4); + std::vector r_64_chunks(4); + std::vector s_64_chunks(4); + std::vector q_64_chunks(4); + + std::vector a_chunks(chunk_amount); + std::vector b_chunks(chunk_amount); + std::vector N_chunks(chunk_amount); + std::vector s_chunks(chunk_amount); + std::vector r_chunks(chunk_amount); + std::vector q_chunks(chunk_amount); + std::vector v_chunks(chunk_amount); + std::vector q_out_chunks(chunk_amount); + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type a = current_state.stack_top(); + zkevm_word_type b = current_state.stack_top(1); + zkevm_word_type N = current_state.stack_top(2); + + integral_type s_integral = integral_type(a) + integral_type(b); + zkevm_word_type s = zkevm_word_type(s_integral); + s_overflow = (s_integral >= zkevm_modulus); + integral_type r_integral = N != 0u ? s_integral / integral_type(N) : 0u; + r_overflow = (r_integral >= zkevm_modulus); + zkevm_word_type r = r_integral; + // word_type q = N != 0u ? s % N : s; + zkevm_word_type q = + zkevm_word_type(s_integral - r_integral * integral_type(N)); + zkevm_word_type q_out = N != 0u ? q : 0; // according to EVM spec s % 0 = 0 + bool t_last = integral_type(q) < integral_type(N); + zkevm_word_type v = zkevm_word_type(integral_type(q) + + integral_type(t_last) * zkevm_modulus - + integral_type(N)); + + a_chunks = zkevm_word_to_field_element(a); + b_chunks = zkevm_word_to_field_element(b); + N_chunks = zkevm_word_to_field_element(N); + s_chunks = zkevm_word_to_field_element(s); + r_chunks = zkevm_word_to_field_element(r); + q_chunks = zkevm_word_to_field_element(q); + v_chunks = zkevm_word_to_field_element(v); + q_out_chunks = zkevm_word_to_field_element(q_out); + // note that we don't assign 64-chunks for s/N, as we can build them + // from 16-chunks with constraints under the same logic we only assign + // the 16-bit chunks for carries + for (std::size_t i = 0; i < 4; i++) { + s_64_chunks.push_back(chunk_sum_64(s_chunks, i)); + N_64_chunks.push_back(chunk_sum_64(N_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + // caluclate first row carries + first_carryless = first_carryless_construct(s_64_chunks, N_64_chunks, + r_64_chunks, q_64_chunks); + auto first_row_carries = first_carryless_construct(s_64_chunks, N_64_chunks, + r_64_chunks, q_64_chunks) + .data.base() >> + 128; + value_type c_1 = + static_cast(first_row_carries & (two_64 - 1).data.base()); + c_2 = static_cast(first_row_carries >> 64); + c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + auto second_row_carries = + (second_carryless_construct(s_64_chunks, N_64_chunks, r_64_chunks, + q_64_chunks) + + c_1 + c_2 * two_64) + .data.base() >> + 128; + c_3 = static_cast(second_row_carries); + std::vector c_3_chunks = chunk_64_to_16(c_3); + value_type N_sum = + std::accumulate(N_chunks.begin(), N_chunks.end(), value_type(0)); + N_sum_inverse = N_sum == 0 ? 0 : N_sum.inversed(); + N_nonzero = N_sum_inverse * N_sum; + // value_type + c_1_64 = chunk_sum_64(c_1_chunks, 0); + + auto third_row_carries = + third_carryless_construct(N_64_chunks, r_64_chunks).data.base() >> 128; + + carry[0][0] = 0; + carry[1][0] = 0; + two_192_cell = two_192; + two_128_cell = two_128; + two_64_cell = two_64; + } + + // TODO: replace with memory access, which would also do range checks! + // also we can pack slightly more effectively + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(a_chunks[3 * i], 0, i); + allocate(b_chunks[3 * i], 1, i); + allocate(s_chunks[3 * i], 2, i); + + allocate(a_chunks[3 * i + 1], 3, i); + allocate(b_chunks[3 * i + 1], 4, i); + allocate(s_chunks[3 * i + 1], 5, i); + + allocate(a_chunks[3 * i + 2], 6, i); + allocate(b_chunks[3 * i + 2], 7, i); + allocate(s_chunks[3 * i + 2], 8, i); + } + allocate(a_chunks[chunk_amount - 1], 26, 3); + allocate(b_chunks[chunk_amount - 1], 27, 3); + allocate(s_chunks[chunk_amount - 1], 28, 3); + + for (std::size_t i = 0; i < carry_amount - 1; i++) { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[0][i + 1] = + (carry[0][i] + a_chunks[3 * i] + b_chunks[3 * i] + + (a_chunks[3 * i + 1] + b_chunks[3 * i + 1]) * two_16 + + (a_chunks[3 * i + 2] + b_chunks[3 * i + 2]) * two_32) >= two_48; + } + allocate(carry[0][i], 9, i); + allocate(carry[0][i + 1], 10, i); + constrain(carry_on_addition_constraint( + a_chunks[3 * i], a_chunks[3 * i + 1], a_chunks[3 * i + 2], + b_chunks[3 * i], b_chunks[3 * i + 1], b_chunks[3 * i + 2], + s_chunks[3 * i], s_chunks[3 * i + 1], s_chunks[3 * i + 2], carry[0][i], + carry[0][i + 1], i == 0)); + constrain(carry[0][i + 1] * (1 - carry[0][i + 1])); + } + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[0][carry_amount] = + (carry[0][carry_amount - 1] + a_chunks[3 * (carry_amount - 1)] + + b_chunks[3 * (carry_amount - 1)]) >= two_16; + } + allocate(carry[0][carry_amount - 1], 29, 3); + allocate(carry[0][carry_amount], 30, 3); + + constrain(last_carry_on_addition_constraint( + a_chunks[3 * (carry_amount - 1)], b_chunks[3 * (carry_amount - 1)], + s_chunks[3 * (carry_amount - 1)], carry[0][carry_amount - 1], + carry[0][carry_amount])); + constrain(carry[0][carry_amount] * (1 - carry[0][carry_amount])); + + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(N_chunks[3 * i], 11, i); + allocate(q_chunks[3 * i], 12, i); + allocate(v_chunks[3 * i], 13, i); + + allocate(N_chunks[3 * i + 1], 14, i); + allocate(q_chunks[3 * i + 1], 15, i); + allocate(v_chunks[3 * i + 1], 16, i); + + allocate(N_chunks[3 * i + 2], 17, i); + allocate(q_chunks[3 * i + 2], 18, i); + allocate(v_chunks[3 * i + 2], 19, i); + } + allocate(N_chunks[chunk_amount - 1], 26, 4); + allocate(q_chunks[chunk_amount - 1], 27, 4); + allocate(v_chunks[chunk_amount - 1], 28, 4); + + for (std::size_t i = 0; i < carry_amount - 1; i++) { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[1][i + 1] = + (carry[1][i] + N_chunks[3 * i] + v_chunks[3 * i] + + (N_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (N_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32) >= two_48; + } + allocate(carry[1][i], 20, i); + allocate(carry[1][i + 1], 21, i); + constrain(carry_on_addition_constraint( + N_chunks[3 * i], N_chunks[3 * i + 1], N_chunks[3 * i + 2], + v_chunks[3 * i], v_chunks[3 * i + 1], v_chunks[3 * i + 2], + q_chunks[3 * i], q_chunks[3 * i + 1], q_chunks[3 * i + 2], carry[1][i], + carry[1][i + 1], i == 0)); + constrain(carry[1][i + 1] * (1 - carry[1][i + 1])); + } + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[1][carry_amount] = + (carry[1][carry_amount - 1] + N_chunks[3 * (carry_amount - 1)] + + v_chunks[3 * (carry_amount - 1)]) >= two_16; + } + allocate(carry[1][carry_amount - 1], 29, 4); + allocate(carry[1][carry_amount], 30, 4); + constrain(last_carry_on_addition_constraint( + N_chunks[3 * (carry_amount - 1)], v_chunks[3 * (carry_amount - 1)], + q_chunks[3 * (carry_amount - 1)], carry[1][carry_amount - 1], + carry[1][carry_amount])); + + // // carry[1][carry_amount] is 0 or 1, but should be 1 if N_nonzero = 1 + + constrain((N_nonzero + (1 - N_nonzero) * carry[1][carry_amount]) * + (1 - carry[1][carry_amount])); + + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(q_out_chunks[3 * i], 22, i); + allocate(q_out_chunks[3 * i + 1], 23, i); + allocate(q_out_chunks[3 * i + 2], 24, i); + } + allocate(q_out_chunks[chunk_amount - 1], 31, 4); + + for (std::size_t i = 0; i < chunk_amount; i++) { + if (i % 3 == 0) { + allocate(N_nonzero, 25, i / 3); + } + constrain((N_nonzero * (q_chunks[i] - q_out_chunks[i]) + + (1 - N_nonzero) * q_out_chunks[i])); + res[i] = q_out_chunks[i]; + } + + allocate(first_carryless, 32, 0); + allocate(c_1_64, 33, 0); + allocate(c_2, 34, 0); + constrain((first_carryless - c_1_64 * two_128 - c_2 * two_192)); + + allocate(second_row_carries, 32, 1); + allocate(c_3, 33, 1); + constrain((second_row_carries + c_1_64 + c_2 * two_64 - c_3 * two_128)); + + allocate(N_64_chunks[0], 31, 2); + allocate(third_row_carries, 32, 2); + allocate(r_overflow, 33, 2); + allocate(s_overflow, 34, 2); + allocate(N_sum, 35, 2); + allocate(N_sum_inverse, 36, 2); + constrain((third_row_carries + r_overflow * N_64_chunks[0] + c_3 - + s_overflow * N_sum * N_sum_inverse)); + + allocate(N_64_chunks[3], 30, 1); + allocate(r_64_chunks[3], 31, 1); + constrain(N_64_chunks[3] * r_64_chunks[3]); + + constrain(c_2 * (c_2 - 1)); + constrain(c_3 * (c_3 - 1)); + constrain(r_overflow * (1 - r_overflow)); + + auto A_128 = chunks16_to_chunks128_reversed(a_chunks); + auto B_128 = chunks16_to_chunks128_reversed(b_chunks); + auto N_128 = chunks16_to_chunks128_reversed(N_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE A0, A1, B0, B1, N0, N1, Res0, Res1; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + A0 = A_128.first; + A1 = A_128.second; + B0 = B_128.first; + B1 = B_128.second; + N0 = N_128.first; + N1 = N_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + } + allocate(A0, 34, 3); allocate(A1, 34, 1); + allocate(B0, 35, 3); allocate(B1, 35, 1); + allocate(N0, 36, 3); allocate(N1, 36, 1); + allocate(Res0, 37, 3); allocate(Res1, 37, 1); + + constrain(A0 - A_128.first); constrain(A1 - A_128.second); + constrain(B0 - B_128.first); constrain(B1 - B_128.second); + constrain(N0 - N_128.first); constrain(N1 - N_128.second); + constrain(Res0 - Res_128.first); constrain(Res1 - Res_128.second); + if constexpr (stage == GenerationStage::CONSTRAINTS) { + constrain(current_state.pc_next() - current_state.pc(4) - 1); // PC transition + constrain(current_state.gas(4) - current_state.gas_next() - 8); // GAS transition + constrain(current_state.stack_size(4) - current_state.stack_size_next() - 2); // stack_size transition + constrain(current_state.memory_size(4) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(4) - 4); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(2), + current_state.stack_size(2) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(2), + TYPE(0), // is_write + A0, + A1 + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 1, + TYPE(0), // is_write + B0, + B1 + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(2), + current_state.stack_size(2) - 3, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(2) + 2, + TYPE(0), // is_write + N0, + N1 + }; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(2), + current_state.stack_size(2) - 3, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(2) + 3, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_addmod_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state + ) override { + zkevm_addmod_bbf bbf_obj(context, + current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state + ) override { + zkevm_addmod_bbf bbf_obj( + context, current_state); + } + virtual std::size_t rows_amount() override { return 5; } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/bitwise.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/bitwise.hpp new file mode 100644 index 0000000000..4e42ecf75b --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/bitwise.hpp @@ -0,0 +1,213 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + enum bitwise_type { B_AND, B_OR, B_XOR }; + + template + class zkevm_bitwise_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using integral_type = zkevm_word_integral_type; + + zkevm_bitwise_bbf(context_type &context_object, const opcode_input_type ¤t_state, bitwise_type bitwise_operation): + generic_component(context_object, false) + { + std::vector A(32); + std::vector B(32); + std::vector AND(32); + std::vector XOR(32); + TYPE A0, A1, B0, B1, AND0, AND1, XOR0, XOR1, OR0, OR1; + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + zkevm_word_type a_word = current_state.stack_top(); + zkevm_word_type b_word = current_state.stack_top(1); + auto a = w_to_8(a_word); + auto b = w_to_8(b_word); + auto and_chunks = w_to_8(a_word.base() & b_word.base()); + auto xor_chunks = w_to_8(a_word.base() ^ b_word.base()); + + for(std::size_t i = 0; i <32; i++){ + A[i] = a[i]; + B[i] = b[i]; + AND[i] = and_chunks[i]; + XOR[i] = xor_chunks[i]; + } + + auto A_128 = chunks8_to_chunks128(A); + auto B_128 = chunks8_to_chunks128(B); + auto AND_128 = chunks8_to_chunks128(AND); + auto XOR_128 = chunks8_to_chunks128(XOR); + auto OR_128 = std::make_pair(AND_128.first + XOR_128.first,AND_128.second + XOR_128.second); + A0 = A_128.first; A1 = A_128.second; + B0 = B_128.first; B1 = B_128.second; + AND0 = AND_128.first; AND1 = AND_128.second; + XOR0 = XOR_128.first; XOR1 = XOR_128.second; + OR0 = OR_128.first; OR1 = OR_128.second; + } + for(std::size_t i = 0; i < 32; i++){ + allocate(A[i], i%8, i/8); + allocate(B[i], i%8 + 8, i/8); + allocate(AND[i], i%8 + 16, i/8); + allocate(XOR[i], i%8 + 24, i/8); + } + allocate(A0, 32, 0); allocate(A1, 32, 2); + allocate(B0, 33, 0); allocate(B1, 33, 2); + allocate(AND0, 34, 0); allocate(AND1, 34, 2); + allocate(XOR0, 35, 0); allocate(XOR1, 35, 2); + allocate(OR0, 36, 0); allocate(OR1, 36, 2); + + std::vector tmp; + for(std::size_t i = 0; i < 32; i++){ + tmp = { + A[i], + B[i], + AND[i], + XOR[i] + }; + lookup(tmp, "byte_and_xor_table/full"); + } + auto A_128 = chunks8_to_chunks128(A); + auto B_128 = chunks8_to_chunks128(B); + auto AND_128 = chunks8_to_chunks128(AND); + auto XOR_128 = chunks8_to_chunks128(XOR); + constrain(A0 - A_128.first); constrain(A1 - A_128.second); + constrain(B0 - B_128.first); constrain(B1 - B_128.second); + constrain(AND0 - AND_128.first); constrain(AND1 - AND_128.second); + constrain(XOR0 - XOR_128.first); constrain(XOR1 - XOR_128.second); + constrain(XOR0 + AND0 - OR0); constrain(XOR1 + AND1 - OR1); + // std::cout << "\tA = "<< std::hex << A0 << " " << A1 << std::endl; + // std::cout << "\tB = "<< std::hex << B0 << " " << B1 << std::endl; + // std::cout << "\tAND = "<< std::hex << AND0 << " " << AND1 << std::endl; + // std::cout << "\tOR = "<< std::hex << OR0 << " " << OR1 << std::endl; + // std::cout << "\tXOR = "<< std::hex << XOR0 << " " << XOR1 << std::endl; + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(3) - 1); // PC transition + constrain(current_state.gas(3) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(3) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(3) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(3) - 3); // rw_counter transition + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1), + TYPE(0),// is_write + A0, + A1 + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 1, + TYPE(0),// is_write + B0, + B1 + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 2, + TYPE(1)// is_write + }; + switch(bitwise_operation){ + case B_AND: + tmp.push_back(AND0); + tmp.push_back(AND1); + break; + case B_OR: + tmp.push_back(OR0); + tmp.push_back(OR1); + break; + case B_XOR: + tmp.push_back(XOR0); + tmp.push_back(XOR1); + break; + } + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_bitwise_operation : public opcode_abstract { + public: + zkevm_bitwise_operation(bitwise_type _bit_operation): bit_operation(_bit_operation) { } + virtual std::size_t rows_amount() override { + // It may be three if we don't want to minimize lookup constraints amount. + // It's a tradeoff between rows_amount and lookup constraints amount + return 4; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_bitwise_bbf bbf_obj(context, current_state, bit_operation); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_bitwise_bbf bbf_obj(context, current_state, bit_operation); + } + private: + bitwise_type bit_operation; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/byte.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/byte.hpp new file mode 100644 index 0000000000..48c7585860 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/byte.hpp @@ -0,0 +1,203 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_byte_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using integral_type = zkevm_word_integral_type; + + zkevm_byte_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + std::vector A(16); + std::vector B(16); + std::vector B_bits(16); + TYPE a16, a16_hi, a16_lo, minus_a16_hi, minus_a16_lo, b_last_bit, b_sum, b_hi, b_lo, b_sum_inv, result; + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto N = current_state.stack_top(); + auto b = w_to_16(current_state.stack_top()); + auto a = w_to_16(current_state.stack_top(1)); + for( std::size_t i = 0; i < 16; i++){ + A[i] = a[i]; + B[i] = b[i]; + B_bits[i] = (N >= 0 && N < 32) && (b[15]/2 == i); + if( i != 15 ) b_sum += b[i]; + } + b_last_bit = (0 <= N && N < 32) && ((b[15] & 1) != 0); + b_hi = b[15] / 32; + b_lo = b[15] % 32; + b_sum += b_hi; + b_sum_inv = b_sum == 0? 0: b_sum.inversed(); + std::size_t chunk = (0<=N && N<32) ? a[b[15]/2] : 0; + a16 = chunk; + a16_lo = chunk & 0xFF; + a16_hi = (chunk & 0xFF00) >> 8; + minus_a16_hi = 255 - a16_hi; + minus_a16_lo = 255 - a16_lo; + result = (b_last_bit == 0)? a16_hi: a16_lo; + } + for( std::size_t i = 0; i < 16; i++ ){ + allocate(A[i], i, 0); + allocate(B[i], i+16, 0); + allocate(B_bits[i], i + 16, 1); + } + allocate(a16, 0, 1); + allocate(a16_hi, 1, 1); + allocate(a16_lo, 2, 1); + allocate(minus_a16_hi, 3, 1); + allocate(minus_a16_lo, 4, 1); + allocate(b_hi, 5, 1); + allocate(b_lo, 6, 1); + allocate(b_last_bit, 7, 1); + allocate(result, 8, 1); + allocate(b_sum, 32, 0); + allocate(b_sum_inv, 33, 0); + + constrain(a16_hi + minus_a16_hi - 255); + constrain(a16_lo + minus_a16_lo - 255); + constrain(a16 - a16_hi * 256 - a16_lo); + TYPE b_sum_constraint; + TYPE b_bits_composition; + TYPE b_bits_sum; + TYPE chunk; + for(std::size_t i = 0; i < 16; i++){ + constrain(B_bits[i] * (B_bits[i] - 1)); + if( i != 15) b_sum_constraint += B[i]; + b_bits_composition += i * B_bits[i]; + b_bits_sum += B_bits[i]; + chunk += B_bits[i] * A[i]; + } + b_sum_constraint += b_hi; + b_bits_composition *= 2; + b_bits_composition += b_last_bit; + constrain(b_bits_composition - b_bits_sum * b_lo); + constrain(b_sum_constraint - b_sum); + constrain(b_sum * (b_sum * b_sum_inv - 1)); + constrain(b_sum_inv * (b_sum * b_sum_inv - 1)); + constrain(b_sum * b_sum_inv * result); + constrain(b_last_bit * (b_last_bit - 1)); + constrain(b_bits_sum + b_sum * b_sum_inv - 1); + constrain(b_hi * 32 + b_lo - B[15]); + constrain(a16_hi * 256 + a16_lo - a16); + constrain(chunk - a16); + constrain(b_bits_sum * (b_last_bit * (a16_lo - result) + (1 - b_last_bit) * (a16_hi - result))); + + auto A_128 = chunks16_to_chunks128(A); + auto B_128 = chunks16_to_chunks128(B); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition + constrain(current_state.gas(1) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(1) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + B_128.first, + B_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 1, + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 2, + TYPE(1),// is_write + TYPE(0), + result + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tAssignment implemented" << std::endl; + } + } + }; + + template + class zkevm_byte_operation : public opcode_abstract { + public: + virtual std::size_t rows_amount() override { + return 2; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_byte_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_byte_bbf bbf_obj(context, current_state); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/call.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/call.hpp new file mode 100644 index 0000000000..dbd0d18b5d --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/call.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + + template + using zkevm_call_operation = zkevm_dummy_operation; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldatacopy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldatacopy.hpp new file mode 100644 index 0000000000..4f0068022b --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldatacopy.hpp @@ -0,0 +1,137 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_calldatacopy_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_calldatacopy_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE destOffset; + TYPE offset; + TYPE length; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + destOffset = w_lo(current_state.stack_top()); + offset = w_lo(current_state.stack_top(1)); + length = w_lo(current_state.stack_top(2)); + } + allocate(destOffset,32,0); + allocate(offset,33,0); + allocate(length,34,0); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + // constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + // constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition + // constrain(current_state.stack_size_next() - current_state.stack_size(0) - 3); // stack_size transition + // constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + // constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 2); // rw_counter transition + // std::vector tmp; + // tmp = { + // TYPE(rw_op_to_num(rw_operation_type::stack)), + // current_state.call_id(0), + // current_state.stack_size(0) - 1, + // TYPE(0),// storage_key_hi + // TYPE(0),// storage_key_lo + // TYPE(0),// field + // current_state.rw_counter(0), + // TYPE(0),// is_write + // TYPE(0), + // destOffset + // }; + // lookup(tmp, "zkevm_rw"); + // tmp = { + // TYPE(rw_op_to_num(rw_operation_type::stack)), + // current_state.call_id(0), + // current_state.stack_size(0) - 2, + // TYPE(0),// storage_key_hi + // TYPE(0),// storage_key_lo + // TYPE(0),// field + // current_state.rw_counter(0) + 1, + // TYPE(0),// is_write + // TYPE(0), + // offset + // }; + // lookup(tmp, "zkevm_rw"); + // tmp = { + // TYPE(rw_op_to_num(rw_operation_type::stack)), + // current_state.call_id(0), + // current_state.stack_size(0) - 3, + // TYPE(0),// storage_key_hi + // TYPE(0),// storage_key_lo + // TYPE(0),// field + // current_state.rw_counter(0) + 2, + // TYPE(0),// is_write + // TYPE(0), + // length + // }; + // lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tSTATE transition implemented" << std::endl; + } + } + }; + + template + class zkevm_calldatacopy_operation : public opcode_abstract { + public: + virtual std::size_t rows_amount() override { + return 1; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_calldatacopy_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_calldatacopy_bbf bbf_obj(context, current_state); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldataload.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldataload.hpp new file mode 100644 index 0000000000..fd47145d21 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldataload.hpp @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_calldataload_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_calldataload_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size_next() - current_state.stack_size(0)); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 2); // rw_counter transition + } else { + std::cout << "\tSTATE transition implemented" << std::endl; + } + } + }; + + template + class zkevm_calldataload_operation : public opcode_abstract { + public: + virtual std::size_t rows_amount() override { + return 1; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_calldataload_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_calldataload_bbf bbf_obj(context, current_state); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldatasize.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldatasize.hpp new file mode 100644 index 0000000000..51f08bc975 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/calldatasize.hpp @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_calldatasize_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_calldatasize_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 2); // GAS transition + constrain(current_state.stack_size_next() - current_state.stack_size(0) - 1); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 1); // rw_counter transition + } else { + std::cout << "\tSTATE transition implemented" << std::endl; + } + } + }; + + template + class zkevm_calldatasize_operation : public opcode_abstract { + public: + virtual std::size_t rows_amount() override { + return 1; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_calldatasize_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_calldatasize_bbf bbf_obj(context, current_state); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/callvalue.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/callvalue.hpp new file mode 100644 index 0000000000..b6d7b81a85 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/callvalue.hpp @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_callvalue_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_callvalue_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 2); // GAS transition + constrain(current_state.stack_size_next() - current_state.stack_size(0) - 1); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 1); // rw_counter transition + } else { + std::cout << "\tSTATE transition implemented" << std::endl; + } + } + }; + + template + class zkevm_callvalue_operation : public opcode_abstract { + public: + virtual std::size_t rows_amount() override { + return 1; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_callvalue_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_callvalue_bbf bbf_obj(context, current_state); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/cmp.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/cmp.hpp new file mode 100644 index 0000000000..6625f80340 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/cmp.hpp @@ -0,0 +1,210 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + enum cmp_type { C_LT, C_GT }; + + template + class zkevm_cmp_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_cmp_bbf(context_type &context_object, const opcode_input_type ¤t_state, cmp_type cmp_operation): + generic_component(context_object, false) + { + std::vector A(16); + std::vector B(16); + std::vector S(16); + TYPE diff; + TYPE diff_inv; + TYPE lt; + TYPE gt; + TYPE result; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto a = w_to_16(current_state.stack_top()); + auto b = w_to_16(current_state.stack_top(1)); + bool eq = true; + result = false; + lt = false; + gt = false; + for( std::size_t i = 0; i < 16; i++ ){ + A[i] = a[i]; + B[i] = b[i]; + } + for( std::size_t i = 0; i < 16; i++ ){ + if( a[i] != b[i] ) { + std::cout << "\tNOT equal" << std::endl; + if( eq ) S[i] = 1; + eq = false; + diff = a[i] < b[i]? b[i] - a[i]: a[i] - b[i]; + diff_inv = diff.inversed(); + lt = a[i] < b[i]; + gt = a[i] > b[i]; + result = cmp_operation == cmp_type::C_LT ? a[i] < b[i]: a[i] > b[i]; + break; + } + } + if( cmp_operation == cmp_type::C_LT ) std::cout << "\t" << current_state.stack_top() << "<" << current_state.stack_top(1) << " = " << result << std::endl; + if( cmp_operation == cmp_type::C_GT ) std::cout << "\t" << current_state.stack_top() << ">" << current_state.stack_top(1) << " = " << result << std::endl; } + TYPE s_sum; + for( std::size_t i = 0; i < 16; i++ ){ + allocate(A[i], i, 0); + allocate(B[i], i + 16, 0); + allocate(S[i], i, 1); + } + allocate(diff, 16, 1 ); + allocate(diff_inv, 32, 0); + allocate(lt, 17, 1); + allocate(gt, 18, 1); + allocate(result, 19, 1); + + for( std::size_t i = 0; i < 16; i++ ){ + constrain(S[i] * (S[i] - 1)); + s_sum += S[i]; + } + + constrain(gt * (gt - 1)); + constrain(lt * (lt - 1)); + constrain(s_sum * (s_sum - 1)); + constrain(gt + lt - s_sum); + constrain(result * (result - 1)); + if( cmp_operation == cmp_type::C_LT ){ + constrain(result - lt); + } else { + constrain(result - gt); + } + std::vector zero_constraints(15); + for( std::size_t i = 0; i < 15; i++ ){ + for( std::size_t j = i+1; j < 16; j++){ + zero_constraints[i] += S[j]; + } + zero_constraints[i] *= A[i] - B[i]; + constrain(zero_constraints[i]); + } + TYPE diff_constraint; + for( std::size_t i = 0; i < 16; i++ ){ + diff_constraint += S[i] * (gt * (A[i] - B[i]) + lt *(B[i] - A[i])); + } + constrain(diff - diff_constraint); + constrain(diff * (diff * diff_inv - 1)); + constrain(diff_inv * (diff * diff_inv - 1)); + constrain(diff * diff_inv - lt - gt); + auto A_128 = chunks16_to_chunks128(A); + auto B_128 = chunks16_to_chunks128(B); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition + constrain(current_state.gas(1) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(1) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1), + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 1, + TYPE(0),// is_write + B_128.first, + B_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 2, + TYPE(1),// is_write + TYPE(0), + result + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_cmp_operation : public opcode_abstract { + public: + zkevm_cmp_operation(cmp_type _cmp_operation) : cmp_operation(_cmp_operation) {} + virtual std::size_t rows_amount() override { + return 2; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_cmp_bbf bbf_obj(context, current_state, cmp_operation); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_cmp_bbf bbf_obj(context, current_state, cmp_operation); + } + private: + cmp_type cmp_operation; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/div_mod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/div_mod.hpp new file mode 100644 index 0000000000..f83e172e1f --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/div_mod.hpp @@ -0,0 +1,392 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_div_mod_bbf : generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + using value_type = typename FieldType::value_type; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two_128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two_192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) - + a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * + (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct(const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * + (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + TYPE carry_on_addition_constraint(TYPE a_0, TYPE a_1, TYPE a_2, TYPE b_0, TYPE b_1, + TYPE b_2, TYPE r_0, TYPE r_1, TYPE r_2, + TYPE last_carry, TYPE result_carry, + bool first_constraint = false) { + TYPE res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - r_0 - + r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + + (a_2 + b_2) * two_32 - r_0 - r_1 * two_16 - r_2 * two_32 - + result_carry * two_48; + } + return res; + }; + TYPE last_carry_on_addition_constraint(TYPE a_0, TYPE b_0, TYPE r_0, + TYPE last_carry, TYPE result_carry) { + TYPE res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + + std::vector res; + + public: + zkevm_div_mod_bbf(context_type &context_object, + const opcode_input_type ¤t_state, + bool is_div) + : generic_component(context_object, false),res(chunk_amount) { + using integral_type = zkevm_word_integral_type; + + std::vector c_1_chunks(4); + TYPE c_2; + TYPE carry[carry_amount + 1]; + TYPE c_1_64; + TYPE first_carryless; + TYPE second_row_carries; + TYPE third_row_carries; + TYPE b_sum; + TYPE b_zero; + TYPE b_sum_inverse; + TYPE b_nonzero; + + std::vector a_64_chunks(4); + std::vector b_64_chunks(4); + std::vector r_64_chunks(4); + std::vector q_64_chunks(4); + + std::vector a_chunks(chunk_amount); + std::vector b_chunks(chunk_amount); + std::vector r_chunks(chunk_amount); + std::vector q_chunks(chunk_amount); + std::vector v_chunks(chunk_amount); + std::vector q_out_chunks(chunk_amount); + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type a = current_state.stack_top(); + zkevm_word_type b = current_state.stack_top(1); + + + integral_type r_integral = + b != 0u ? integral_type(a) / integral_type(b) : 0u; + zkevm_word_type r = r_integral; + zkevm_word_type q = b != 0u ? integral_type(a) % integral_type(b) : a; + zkevm_word_type q_out = b != 0u ? q : 0; // according to EVM spec a % 0 = 0 + + bool t_last = integral_type(q) < integral_type(b); + zkevm_word_type v = zkevm_word_type(integral_type(q) + + integral_type(t_last) * zkevm_modulus - + integral_type(b)); + + zkevm_word_type result = is_div ? r : q_out; + + a_chunks = zkevm_word_to_field_element(a); + b_chunks = zkevm_word_to_field_element(b); + r_chunks = zkevm_word_to_field_element(r); + q_chunks = zkevm_word_to_field_element(q); + v_chunks = zkevm_word_to_field_element(v); + q_out_chunks = zkevm_word_to_field_element(q_out); + + // note that we don't assign 64-chunks for s/N, as we can build them + // from 16-chunks with constraints under the same logic we only assign + // the 16-bit chunks for carries + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + // caluclate first row carries + first_carryless = first_carryless_construct(a_64_chunks, b_64_chunks, + r_64_chunks, q_64_chunks); + auto first_row_carries = first_carryless.data.base() >> 128; + value_type c_1 = + static_cast(first_row_carries & (two_64 - 1).data.base()); + c_2 = static_cast(first_row_carries >> 64); + c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + auto second_row_carries = + (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, + q_64_chunks) + + c_1 + c_2 * two_64) + .data.base() >> + 128; + + // value_type + c_1_64 = chunk_sum_64(c_1_chunks, 0); + + auto third_row_carries = + third_carryless_construct(b_64_chunks, r_64_chunks).data.base() >> 128; + + b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + b_sum_inverse = b_sum == 0 ? 0 : b_sum.inversed(); + b_zero = 1 - b_sum_inverse * b_sum; + b_nonzero = b_sum_inverse * b_sum; + + carry[0] = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[i + 1] = + (carry[i] + b_chunks[3 * i] + v_chunks[3 * i] + + (b_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32) >= two_48; + } + carry[carry_amount] = + (carry[carry_amount - 1] + b_chunks[3 * (carry_amount - 1)] + + v_chunks[3 * (carry_amount - 1)]) >= two_16; + } + + allocate(b_zero,32,2); + allocate(b_nonzero,33,2); + + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(a_chunks[i], i, 0); + allocate(b_chunks[i], i + chunk_amount, 0); + allocate(v_chunks[i], i, 1); + allocate(q_chunks[i], chunk_amount + i, 1); + allocate(r_chunks[i], i, 2); + constrain(b_zero * r_chunks[i]); + + if (!is_div) { + allocate(q_out_chunks[i], chunk_amount+ i, 2); + constrain(b_nonzero * (q_chunks[i] - q_out_chunks[i]) + + (1 - b_nonzero) * q_out_chunks[i]); + res[i] = q_out_chunks[i]; + } else { + res[i] = r_chunks[i]; + } + } + + allocate(carry[0], 32, 0); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[i + 1], 33 + i, 0); + constrain(carry_on_addition_constraint( + b_chunks[3 * i], b_chunks[3 * i + 1], b_chunks[3 * i + 2], + v_chunks[3 * i], v_chunks[3 * i + 1], v_chunks[3 * i + 2], + q_chunks[3 * i], q_chunks[3 * i + 1], q_chunks[3 * i + 2], carry[i], + carry[i + 1], i == 0)); + constrain(carry[i + 1] * (1 - carry[i + 1])); + } + allocate(carry[carry_amount], 38, 0); + constrain(last_carry_on_addition_constraint( + b_chunks[3 * (carry_amount - 1)], v_chunks[3 * (carry_amount - 1)], + q_chunks[3 * (carry_amount - 1)], carry[carry_amount - 1], + carry[carry_amount])); + + // last carry is 0 or 1, but should be 1 if b_nonzero = 1 + constrain((b_nonzero + + (1 - b_nonzero) * carry[carry_amount]) * (1 - carry[carry_amount])); + + allocate(first_carryless, 32, 1); + allocate(c_1_64, 33, 1); + allocate(c_2, 34, 1); + + constrain(first_carryless - c_1_64 * two_128 - c_2 * two_192); + + allocate(second_row_carries, 35, 1); + constrain(second_row_carries + c_1_64 + c_2 * two_64); + + allocate(third_row_carries, 33, 3); + constrain(third_row_carries); + allocate(b_sum, 34, 2); + allocate(b_sum_inverse, 35, 2); + constrain(b_sum_inverse * (b_sum_inverse * b_sum - 1)); + constrain(b_sum * (b_sum_inverse * b_sum - 1)); + + allocate(b_64_chunks[3], 0, 3); + allocate(r_64_chunks[3], 1, 3); + constrain(b_64_chunks[3] * r_64_chunks[3]); + + constrain(c_2 * (c_2 - 1)); + + auto A_128 = chunks16_to_chunks128_reversed(a_chunks); + auto B_128 = chunks16_to_chunks128_reversed(b_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE A0, A1, B0, B1, Res0, Res1; + + A0 = A_128.first; + A1 = A_128.second; + B0 = B_128.first; + B1 = B_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + allocate(A0, 39, 0); + allocate(A1, 40, 0); + allocate(B0, 41, 0); + allocate(B1, 42, 0); + allocate(Res0, 39, 2); + allocate(Res1, 40, 2); + + if constexpr (stage == GenerationStage::CONSTRAINTS) { + + constrain(current_state.pc_next() - current_state.pc(3) - + 1); // PC transition + constrain(current_state.gas(3) - current_state.gas_next() - + 5); // GAS transition + constrain(current_state.stack_size(3) - current_state.stack_size_next() - + 1); // stack_size transition + constrain(current_state.memory_size(3) - + current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(3) - + 3); // rw_counter transition + std::vector tmp; + + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0), + TYPE(0), // is_write + A0, + A1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + 1, + TYPE(0), // is_write + B0, + B1}; + + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(2), + current_state.stack_size(2) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(2) + 2, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } + + } + }; + + template + class zkevm_div_mod_operation : public opcode_abstract { + public: + zkevm_div_mod_operation(bool _is_div) : is_div(_is_div) {} + virtual std::size_t rows_amount() override { return 4; } + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state) override { + zkevm_div_mod_bbf bbf_obj(context, current_state, is_div); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state) override { + zkevm_div_mod_bbf bbf_obj(context, current_state, is_div); + } + + protected: + bool is_div; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/dummy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/dummy.hpp new file mode 100644 index 0000000000..01e0fd105c --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/dummy.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + // SHOULD NOT BE USED IN THE FINAL VERSION + template + class zkevm_dummy_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + std::cout << "DUMMY CONTSTRAINT, REPLACE ME WITH SOME ACTUAL IMPL" << std::endl; + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/dupx.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/dupx.hpp new file mode 100644 index 0000000000..16ceb7e0d9 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/dupx.hpp @@ -0,0 +1,130 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_dupx_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_dupx_bbf(context_type &context_object, const opcode_input_type ¤t_state, std::size_t x): + generic_component(context_object, false) + { + std::vector A_chunks(16); + std::vector B_chunks(16); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + // std::cout << "\tinput=" << std::hex << current_state.additional_input << std::dec << std::endl; + std::cout << "\tASSIGNMENT implemented" << std::endl; + auto A = current_state.stack_top(x - 1); + auto A16 = nil::blueprint::w_to_16(A); + for( std::size_t i = 0; i < 16; i++ ){ + A_chunks[i] = A16[i]; + } + } + for( std::size_t i = 0; i < 16; i++){ + allocate(A_chunks[i], i, 0); + } + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size_next() - current_state.stack_size(0) - 1); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 2); // rw_counter transition + auto A_128 = chunks16_to_chunks128(A_chunks); + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - x, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0), + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 1, + TYPE(1),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + } + } + }; + + template + class zkevm_dupx_operation : public opcode_abstract { + public: + zkevm_dupx_operation(std::size_t _x):x(_x){ + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_dupx_bbf bbf_obj(context, current_state, x); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_dupx_bbf bbf_obj(context, current_state, x); + } + virtual std::size_t rows_amount() override { + return 1; + } + protected: + std::size_t x; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/eq.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/eq.hpp new file mode 100644 index 0000000000..551bff6e6c --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/eq.hpp @@ -0,0 +1,173 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_eq_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_eq_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + // | a | b | R_hi_inv | R_lo_inv | r_hi | r_lo | r + std::vector A(16); + std::vector B(16); + TYPE R_hi_inv; + TYPE R_lo_inv; + TYPE r_hi; + TYPE r_lo; + TYPE r; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto a = w_to_16(current_state.stack_top()); + auto b = w_to_16(current_state.stack_top(1)); + for( std::size_t i = 0; i < 16; i++ ){ + A[i] = a[i]; + B[i] = b[i]; + } + TYPE A_hi, A_lo, B_hi, B_lo; + for( std::size_t i = 0; i < 8; i++){ + A_hi *= 0x10000; A_hi += A[i]; + A_lo *= 0x10000; A_lo += A[i + 8]; + B_hi *= 0x10000; B_hi += B[i]; + B_lo *= 0x10000; B_lo += B[i + 8]; + } + R_hi_inv = (A_hi - B_hi) == 0? 0: (A_hi - B_hi).inversed(); + R_lo_inv = (A_lo - B_lo) == 0? 0: (A_lo - B_lo).inversed(); + r_hi = ((A_hi - B_hi) == 0); + r_lo = ((A_lo - B_lo) == 0); + r = r_hi * r_lo; + } + for( std::size_t i = 0; i < 16; i++ ){ + allocate(A[i], i, 0); + allocate(B[i], i + 16, 0); + } + allocate(R_hi_inv, 32, 0); + allocate(R_lo_inv, 33, 0); + allocate(r_hi, 34, 0); + allocate(r_lo, 35, 0); + allocate(r, 36, 0); + + auto A_128 = chunks16_to_chunks128(A); + auto B_128 = chunks16_to_chunks128(B); + constrain( R_hi_inv *((A_128.first - B_128.first) * R_hi_inv - 1)); + constrain( (A_128.first - B_128.first) *((A_128.first - B_128.first) * R_hi_inv - 1)); + // constrain( R_lo_inv *((A_128.second - B_128.second) * R_lo_inv - 1)); + // constrain( (A_128.second - B_128.second) *((A_128.second - B_128.second) * R_lo_inv - 1)); + // constrain( r_hi - 1 + (A_128.first - B_128.first) * R_hi_inv ); + // constrain( r_lo - 1 + (A_128.first - B_128.first) * R_lo_inv ); + // constrain( r - r_hi * r_lo); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(0) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0), + TYPE(0), // is_write + A_128.first, // hi bytes are 0 + A_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + 1, + TYPE(0), // is_write + B_128.first, // hi bytes are 0 + B_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + 2, + TYPE(1), // is_write + TYPE(0), // hi bytes are 0 + r // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + template + class zkevm_eq_operation : public opcode_abstract { + public: + zkevm_eq_operation(){} + virtual std::size_t rows_amount() override { + return 1; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_eq_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_eq_bbf bbf_obj(context, current_state); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/block/include/nil/crypto3/block/algorithm/copy_n_if.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/err0.hpp similarity index 51% rename from crypto3/libs/block/include/nil/crypto3/block/algorithm/copy_n_if.hpp rename to crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/err0.hpp index 007615a6d5..689aeefe59 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/algorithm/copy_n_if.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/err0.hpp @@ -1,5 +1,5 @@ //---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -22,39 +22,35 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_COPY_N_IF_HPP -#define CRYPTO3_COPY_N_IF_HPP +#pragma once -namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief Combination of std::copy_n and std::copy_if algorithms - * @tparam TInputIterator - * @tparam TSize - * @tparam TOutputIterator - * @tparam TUnaryPredicate - * @param i_begin - * @param n - * @param o_begin - * @param predicate - * @return - */ - template - TOutputIterator copy_n_if(TInputIterator i_begin, TSize n, TOutputIterator o_begin, - TUnaryPredicate predicate) { - while (n-- > 0) { - if (predicate(*i_begin)) { - *o_begin++ = *i_begin; - } +#include +#include - ++i_begin; - } +#include +#include - return o_begin; - } - } // namespace block - } // namespace crypto3 -} // namespace nil +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; -#endif // CRYPTO3_COPY_N_IF_HPP \ No newline at end of file + template + class zkevm_err0_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/err1.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/err1.hpp new file mode 100644 index 0000000000..3d8b0e5762 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/err1.hpp @@ -0,0 +1,57 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_err1_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/exp.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/exp.hpp new file mode 100644 index 0000000000..0f5880f489 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/exp.hpp @@ -0,0 +1,197 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_exp_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using integral_type = zkevm_word_integral_type; + + zkevm_exp_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + std::vector A(16); + std::vector D(16); + std::vector R(16); + std::vector d_log(8); + std::vector d_inv(8); + TYPE d_sum; + TYPE d_sum_inv; + TYPE d_sum_inv_1; + TYPE s; + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto a = w_to_16(current_state.stack_top()); + auto d = w_to_16(current_state.stack_top(1)); + auto r = w_to_16(exp_by_squaring(current_state.stack_top(), current_state.stack_top(1))); + s = 1; + if( integral_type(current_state.stack_top(1)) == 0 ) s = 0; + if( integral_type(current_state.stack_top(1)) == 1 ) s = 0; + + std::cout << "\t" + << current_state.stack_top() << " ^ " + << current_state.stack_top(1) << " = " + << exp_by_squaring(current_state.stack_top(), current_state.stack_top(1)) + << std::endl; + for( std::size_t i = 0; i < 16; i++){ + A[i] = a[i]; + D[i] = d[i]; + R[i] = r[i]; + d_sum += d[i]; + } + d_sum_inv = d_sum == 0? 0: d_sum.inversed(); + d_sum_inv_1 = d_sum == 1 ? 0: (d_sum - 1).inversed(); + } + for( std::size_t i = 0; i < 16; i++){ + allocate(A[i], i, 0); + allocate(D[i], i + 16, 0); + allocate(R[i], i, 1); + } + allocate(d_sum, 32, 0); + allocate(d_sum_inv, 33, 0); + allocate(d_sum_inv_1, 34, 0); + allocate(s, 35, 0); + + TYPE d_sum_constraint; + for( std::size_t i = 0; i < 16; i++){ + d_sum_constraint += D[i]; + } + + constrain(s * (s-1)); + constrain(d_sum_constraint - d_sum); + constrain(d_sum * (d_sum_inv * d_sum - 1)); + constrain(d_sum_inv * (d_sum_inv * d_sum - 1)); + constrain(d_sum_inv_1 * (d_sum_inv_1 * (d_sum - 1) - 1)); + + auto A_128 = chunks16_to_chunks128(A); + auto D_128 = chunks16_to_chunks128(D); + auto R_128 = chunks16_to_chunks128(R); + constrain( (1 - (d_sum - 1) * d_sum_inv_1) * (A_128.first - R_128.first) ); + constrain( (1 - (d_sum - 1) * d_sum_inv_1) * (A_128.second - R_128.second) ); + constrain( (1 - (d_sum - 1) * d_sum_inv_1) * s ); + + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition +// constrain(current_state.gas(1) - current_state.gas_next() - 5); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(1) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 1, + TYPE(0),// is_write + D_128.first, + D_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 2, + TYPE(1),// is_write + R_128.first, + R_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + s, + s * A_128.first, + s * A_128.second, + s * D_128.first, + s * D_128.second, + s * R_128.first, + s * R_128.second + }; + lookup(tmp, "zkevm_exp"); + } else { + std::cout << "\tAssignment implemented" << std::endl; + } + } + }; + + template + class zkevm_exp_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_exp_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_exp_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/gas.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/gas.hpp new file mode 100644 index 0000000000..d9d38d8fc2 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/gas.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + + template + using zkevm_gas_operation = zkevm_dummy_operation; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/iszero.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/iszero.hpp new file mode 100644 index 0000000000..4ae6cbc128 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/iszero.hpp @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_iszero_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_iszero_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + std::vector a_chunks(16); + TYPE chunks_sum; + TYPE chunks_sum_inv; + TYPE result; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + std::cout << "\tASSIGNMENT implemented" << std::endl; + zkevm_word_type A = current_state.stack_top(); + auto a = w_to_16(A); + for( std::size_t i = 0; i < a_chunks.size(); i++ ){ + a_chunks[i] = a[i]; + chunks_sum += a_chunks[i]; + } + chunks_sum_inv = chunks_sum == 0? 0 : chunks_sum.inversed(); + result = 1 - chunks_sum * chunks_sum_inv; + } + TYPE chunks_sum_expr; + for( std::size_t i = 0; i < a_chunks.size(); i++ ){ + allocate(a_chunks[i], i, 0); + chunks_sum_expr+=a_chunks[i]; + } + allocate(chunks_sum, 32, 0); + allocate(chunks_sum_inv, 33, 0); + allocate(result, 34, 0); + + constrain(chunks_sum_expr - chunks_sum); + constrain(result + chunks_sum * chunks_sum_inv - 1); + constrain(result * (result - 1)); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(0) - current_state.stack_size_next()); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 2); // rw_counter transition + auto A_128 = chunks16_to_chunks128(a_chunks); + std::vector tmp({ + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + A_128.first, + A_128.second + }); + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 1, + TYPE(1),// is_write + 0, + result + }; + lookup(tmp, "zkevm_rw"); + } + // std::cout << "\tResult = " << result << std::endl; + } + }; + + template + class zkevm_iszero_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + // std::cout << "\tAssign ISZERO input = " << current_state.stack_top() << std::endl; + zkevm_iszero_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + // std::cout << "\tBuild ISZERO constraints" << std::endl; + zkevm_iszero_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/jump.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/jump.hpp new file mode 100644 index 0000000000..50c9b72ebd --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/jump.hpp @@ -0,0 +1,164 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_jump_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_jump_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE addr; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + std::cout << "\tASSIGNMENT implemented" << std::endl; + auto add_chunks = nil::blueprint::w_to_16(current_state.stack_top()); + addr = add_chunks[15]; + } + allocate(addr, 0, 0); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - addr); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 8); // GAS transition + constrain(current_state.stack_size(0) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 1); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + TYPE(0),// hi bytes are 0 + addr // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + // JUMP may be done only to JUMPDEST destination + tmp = { + TYPE(1), + addr, + 0x5b, // JUMPDEST opcode + TYPE(1), + current_state.bytecode_hash_hi(0), + current_state.bytecode_hash_lo(0) + }; + // TODO(oclaw): bytecode check is disabled since hash algorithm for circuits is not finalized yet + // https://github.com/NilFoundation/placeholder/issues/205 + // lookup(tmp, "zkevm_bytecode"); + } + } + }; + + template + class zkevm_jump_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_jump_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_jump_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + + template + class zkevm_jumpdest_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_jumpdest_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 1); // GAS transition + constrain(current_state.stack_size(0) - current_state.stack_size_next()); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0)); // rw_counter transition + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_jumpdest_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_jumpdest_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_jumpdest_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/jumpi.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/jumpi.hpp new file mode 100644 index 0000000000..33dd4e0c5e --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/jumpi.hpp @@ -0,0 +1,157 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_jumpi_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_jumpi_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + std::vector condition(16); + TYPE addr; + TYPE chunks_sum; + TYPE chunks_sum_inv; + TYPE is_jump; + TYPE new_pc; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + std::cout << "\tASSIGNMENT implemented" << std::endl; + addr = nil::blueprint::w_to_16(current_state.stack_top())[15]; + auto c_chunks = nil::blueprint::w_to_16(current_state.stack_top(1)); + for( std::size_t i = 0; i < 16; i++ ){ + condition[i] = c_chunks[i]; + chunks_sum += c_chunks[i]; + } + chunks_sum_inv = chunks_sum == 0?0:chunks_sum.inversed(); + is_jump = chunks_sum * chunks_sum_inv; + } + TYPE chunks_sum_expr; + for( std::size_t i = 0; i < 16; i++ ){ + allocate(condition[i], i, 0); + chunks_sum_expr += condition[i]; + } + allocate(addr, 16, 0); + allocate(is_jump, 17, 0); + allocate(chunks_sum,32, 0); + allocate(chunks_sum_inv,33, 0); + + constrain(chunks_sum_expr - chunks_sum); + constrain(chunks_sum * (chunks_sum * chunks_sum_inv - 1)); + constrain(chunks_sum_inv * (chunks_sum * chunks_sum_inv - 1)); + constrain(is_jump - chunks_sum*chunks_sum_inv); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + new_pc = is_jump * addr + (1 - is_jump) * (current_state.pc(0) + 1); + auto C_128 = chunks16_to_chunks128(condition); + + constrain(current_state.pc_next() - new_pc); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 10); // GAS transition + constrain(current_state.stack_size(0) - current_state.stack_size_next() - 2); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 2); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0), + TYPE(0), // is_write + TYPE(0), // hi bytes are 0 + addr // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0)+1, + TYPE(0), // is_write + C_128.first, // hi bytes are 0 + C_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + // JUMP may be done only to JUMPDEST destination + tmp = { + is_jump * TYPE(1), + is_jump * addr, + is_jump * 0x5b, // JUMPDEST opcode + is_jump * TYPE(1), + is_jump * current_state.bytecode_hash_hi(0), + is_jump * current_state.bytecode_hash_lo(0) + }; + // TODO(oclaw): bytecode check is disabled since hash algorithm for circuits is not finalized yet + // https://github.com/NilFoundation/placeholder/issues/205 + // lookup(tmp, "zkevm_bytecode"); + } + } + }; + + template + class zkevm_jumpi_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_jumpi_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_jumpi_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/keccak.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/keccak.hpp new file mode 100644 index 0000000000..90dee41547 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/keccak.hpp @@ -0,0 +1,170 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_keccak_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using integral_type = zkevm_word_integral_type; + + zkevm_keccak_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE offset; + TYPE length; + TYPE hash_hi; + TYPE hash_lo; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + offset = w_lo(current_state.stack_top()); + length = w_lo(current_state.stack_top(1)); + std::size_t start_offset = std::size_t(integral_type(current_state.stack_top())); + std::size_t l = std::size_t(integral_type(current_state.stack_top(1))); + std::vector buffer; + for( std::size_t i = 0; i < l; i++ ){ + buffer.push_back(std::uint8_t(integral_type(current_state.memory(start_offset + i)))); + } + auto hash_value = zkevm_keccak_hash(buffer); + hash_hi = w_hi(hash_value); + hash_lo = w_lo(hash_value); + } + allocate(offset, 32, 0); + allocate(length, 33, 0); + allocate(hash_hi, 34, 0); + allocate(hash_lo, 35, 0); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + // constrain(current_state.gas(0) - current_state.gas_next() - 2); // GAS transition + constrain(current_state.stack_size_next() - current_state.stack_size(0) + 1); // stack_size transition + // constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 3 - length); // rw_counter transition + + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + TYPE(0),// hi bytes are 0 + offset // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) +1, + TYPE(0),// is_write + TYPE(0),// hi bytes are 0 + length // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(1), // is_first + TYPE(0), // source_id_hi + current_state.call_id(0), // source_id_lo + TYPE(copy_op_to_num(copy_operand_type::memory)), // cp_type + offset, + length, + TYPE(0), // is_write + current_state.rw_counter(0) + 2 // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_copy"); + tmp = { + TYPE(1), // is_first + hash_hi, // source_id_hi + hash_lo, // source_id_lo + TYPE(copy_op_to_num(copy_operand_type::keccak)), // cp_type + 0, + length, + TYPE(1), // is_write + current_state.rw_counter(0) + 2 + length // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_copy"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 2 + length, + TYPE(1),// is_write + hash_hi, + hash_lo + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_keccak_operation : public opcode_abstract { + public: + virtual std::size_t rows_amount() override { + return 1; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_keccak_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_keccak_bbf bbf_obj(context, current_state); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mcopy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mcopy.hpp new file mode 100644 index 0000000000..ff605a35e6 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mcopy.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + + template + using zkevm_mcopy_operation = zkevm_dummy_operation; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mload.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mload.hpp new file mode 100644 index 0000000000..b318c0f9c9 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mload.hpp @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_mload_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_mload_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE addr; + TYPE addr1; + TYPE addr_mod; + TYPE addr_mod31; + TYPE addr_words; + TYPE memory_mod; + TYPE memory_mod31; + TYPE memory_words; + TYPE is_memory_size_changed; + TYPE new_memory_size; + std::vector bytes(32); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto address = w_to_16(current_state.stack_top())[15]; + for( std::size_t i = 0; i < 32; i++){ + auto b = w_to_8(current_state.memory(address + i))[31]; + bytes[i] = TYPE(b); + } + addr = address; + addr1 = address; + // addr + 31 -- maximum address + // memory_size -- previous memory_size + // if ( memory_size < addr + 31 ) then + // new_memory_size = std::ceil(float(addr + 31) / 32) * 32 + // else + // new_memory_size = memory_size + // So, we have | addr | std::ceil(addr + 31) % 32 | (addr + 31) / 32 | + std::size_t last_address = address + 31; + addr_mod = last_address % 32; + addr_mod31 = 31 - addr_mod; + addr_words = last_address % 32 == 0? last_address/32 : last_address / 32 + 1; + memory_mod = current_state.memory_size %32; + memory_mod31 = 31 - memory_mod; + memory_words = current_state.memory_size %32 == 0? current_state.memory_size/32 : current_state.memory_size / 32 + 1; + + std::cout << "\tMemory words = " << memory_words + << " memory size = " << current_state.memory_size + << " memory mod = " << memory_mod + << " address = " << address + << " last_address = " << last_address + << " addr_mod = " << addr_mod + << " addr_words = " << addr_words + << std::endl; + is_memory_size_changed = (addr_words > memory_words); + if( is_memory_size_changed != 0 ) { + std::cout << "\tMEMORY SIZE CHANGED " << addr_words << " > " << memory_words << std::endl; + } else { + std::cout << "\tMEMORY SIZE NOT CHANGED " << addr_words << " <= " << memory_words << std::endl; + } + } + for( std::size_t i = 0; i < 16; i++ ){ + allocate(bytes[i], i+16, 0); + allocate(bytes[i+16], i+16, 1); + } + + allocate(addr, 0, 0); + allocate(addr1, 0, 1); + allocate(addr_mod, 1, 0); + allocate(addr_mod31 , 2, 0); + allocate(addr_words, 3, 0); + allocate(memory_mod, 4, 0); + allocate(memory_mod31, 5, 0); + allocate(memory_words, 6, 0); + allocate(is_memory_size_changed, 7, 0); + + constrain( addr_mod + addr_mod31 - 31); + constrain( memory_mod + memory_mod31 - 31); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain((addr + 31 - 32 * addr_words)*(32 * addr_words - 32 + addr_mod - addr - 31)); + constrain( addr_mod * (32 * addr_words - 32 + addr_mod - addr - 31)); + constrain((current_state.memory_size(0) - 32 * memory_words)*(32 * memory_words - 32 - current_state.memory_size(0) + memory_mod)); + constrain( memory_mod * (32 * memory_words - 32 - current_state.memory_size(0) + memory_mod)); + new_memory_size = is_memory_size_changed * addr_words * 32 + (1 - is_memory_size_changed) * current_state.memory_size(0); + TYPE old_memory_gas_cost = 3 * memory_words; // TODO: check and test with large memory consumption + TYPE new_memory_gas_cost = 3 * addr_words; // TODO: check and test with large memory consumption + + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition + //constrain(current_state.gas(0) - current_state.gas_next() - 3 - is_memory_size_changed * (new_memory_gas_cost - old_memory_gas_cost)); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next()); // stack_size transition + //constrain(new_memory_size - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 34); // rw_counter transition + + auto V_128 = chunks8_to_chunks128(bytes); + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1), + TYPE(0), // is_write + TYPE(0), // hi bytes are 0 + addr // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + for( std::size_t i = 0; i < 32; i++ ){ + if( i < 16 ){ + tmp = { + TYPE(rw_op_to_num(rw_operation_type::memory)), + current_state.call_id(0), + addr + i, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + i + 1, + TYPE(0), // is_write + TYPE(0), // hi bytes are 0 + bytes[i] // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } else { + tmp = { + TYPE(rw_op_to_num(rw_operation_type::memory)), + current_state.call_id(1), + addr1 + i, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + i + 1, + TYPE(0), // is_write + TYPE(0), // hi bytes are 0 + bytes[i] // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } + } + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1)+33, + TYPE(1), // is_write + V_128.first, // hi bytes are 0 + V_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_mload_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mload_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mload_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mstore.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mstore.hpp new file mode 100644 index 0000000000..d49ec8d74e --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mstore.hpp @@ -0,0 +1,234 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_mstore_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_mstore_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE addr; + TYPE addr1; + TYPE addr_mod; + TYPE addr_mod31; + TYPE addr_words; + TYPE memory_mod; + TYPE memory_mod31; + TYPE memory_words; + TYPE is_memory_size_changed; + TYPE new_memory_size; + // TYPE addr_quad_mod; + // TYPE addr_quad_mod512; + // TYPE addr_quad_r; + // TYPE memory_quad_mod; + // TYPE memory_quad_mod512; + // TYPE memory_quad_r; + std::vector value(32); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + std::cout << "\tASSIGNMENT implemented" << std::endl; + auto address = w_to_16(current_state.stack_top())[15]; + addr = address; + addr1 = address; + auto bytes = w_to_8(current_state.stack_top(1)); + for( std::size_t i = 0; i < 32; i++){ + value[i] = bytes[i]; + } + // addr + 31 -- maximum address + // memory_size -- previous memory_size + // if ( memory_size < addr + 31 ) then + // new_memory_size = std::ceil(float(addr + 31) / 32) * 32 + // else + // new_memory_size = memory_size + // So, we have | addr | std::ceil(addr + 31) % 32 | (addr + 31) / 32 | + std::size_t last_address = address + 31; + addr_mod = last_address % 32; + addr_mod31 = 31 - addr_mod; + addr_words = last_address % 32 == 0? last_address/32 : last_address / 32 + 1; + memory_mod = current_state.memory_size %32; + memory_mod31 = 31 - memory_mod; + memory_words = current_state.memory_size %32 == 0? current_state.memory_size/32 : current_state.memory_size / 32 + 1; + // addr_quad_mod = ((std::size_t(addr_words) * std::size_t(addr_words)) % 512); + // addr_quad_r = ((std::size_t(addr_words) * std::size_t(addr_words)) / 512); + // addr_quad_mod512 = 512 - addr_quad_mod; + // memory_quad_mod = ((std::size_t(memory_words) * std::size_t(memory_words)) % 512); + // memory_quad_r = ((std::size_t(memory_words) * std::size_t(memory_words)) / 512); + // memory_quad_mod512 = 512 - memory_quad_mod; + + std::cout << "\tMemory words = " << memory_words + << " memory size = " << current_state.memory_size + << " memory mod = " << memory_mod + << " address = " << address + << " last_address = " << last_address + << " addr_mod = " << addr_mod + << " addr_words = " << addr_words + << std::endl; + is_memory_size_changed = (addr_words > memory_words); + if( is_memory_size_changed != 0 ) { + std::cout << "\tMEMORY SIZE CHANGED " << addr_words << " > " << memory_words << std::endl; + } else { + std::cout << "\tMEMORY SIZE NOT CHANGED " << addr_words << " <= " << memory_words << std::endl; + } + } + for( std::size_t i = 0; i < 16; i++){ + allocate(value[i], i+16, 0); // Values are range-checked by RW circuit, so use non-range-checked columns + allocate(value[i + 16], i+16, 1); // Values are range-checked by RW circuit, so use non-range-checked columns + } + + allocate(addr, 0, 0); + allocate(addr1, 0, 1); + allocate(addr_mod, 1, 0); + allocate(addr_mod31 , 2, 0); + allocate(addr_words, 3, 0); + allocate(memory_mod, 4, 0); + allocate(memory_mod31, 5, 0); + allocate(memory_words, 6, 0); + allocate(is_memory_size_changed, 7, 0); + + constrain( addr_mod + addr_mod31 - 31); + constrain( memory_mod + memory_mod31 - 31); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain((addr + 31 - 32 * addr_words)*(32 * addr_words - 32 + addr_mod - addr - 31)); + constrain( addr_mod * (32 * addr_words - 32 + addr_mod - addr - 31)); + constrain((current_state.memory_size(0) - 32 * memory_words)*(32 * memory_words - 32 - current_state.memory_size(0) + memory_mod)); + constrain( memory_mod * (32 * memory_words - 32 - current_state.memory_size(0) + memory_mod)); + new_memory_size = is_memory_size_changed * addr_words * 32 + (1 - is_memory_size_changed) * current_state.memory_size(0); + TYPE old_memory_gas_cost = 3 * memory_words; // TODO: check and test with large memory consumption + TYPE new_memory_gas_cost = 3 * addr_words; // TODO: check and test with large memory consumption + + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition + constrain(current_state.gas(1) - current_state.gas_next() - 3 - is_memory_size_changed * (new_memory_gas_cost - old_memory_gas_cost)); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 2); // stack_size transition + constrain(new_memory_size - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 34); // rw_counter transition + auto V_128 = chunks8_to_chunks128(value); + + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1), + TYPE(0), // is_write + TYPE(0), // hi bytes are 0 + addr // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 1, + TYPE(0), // is_write + V_128.first, // hi bytes are 0 + V_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + + for( std::size_t i = 0; i < 32; i++){ + if( i < 16){ + tmp = { + TYPE(rw_op_to_num(rw_operation_type::memory)), + current_state.call_id(0), + addr + i, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + 2 + i, + TYPE(1), // is_write + TYPE(0), // hi bytes are 0 + value[i] // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } else { + tmp = { + TYPE(rw_op_to_num(rw_operation_type::memory)), + current_state.call_id(1), + addr1 + i, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 2 + i, + TYPE(1), // is_write + TYPE(0), // hi bytes are 0 + value[i] // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } + } + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_mstore_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mstore_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mstore_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mstore8.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mstore8.hpp new file mode 100644 index 0000000000..9ddf6f6429 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mstore8.hpp @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_mstore8_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_mstore8_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE addr; + TYPE addr1; + TYPE addr_mod; + TYPE addr_mod31; + TYPE addr_words; + TYPE memory_mod; + TYPE memory_mod31; + TYPE memory_words; + TYPE is_memory_size_changed; + TYPE new_memory_size; + // TYPE addr_quad_mod; + // TYPE addr_quad_mod512; + // TYPE addr_quad_r; + // TYPE memory_quad_mod; + // TYPE memory_quad_mod512; + // TYPE memory_quad_r; + std::vector value(32); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + std::cout << "\tASSIGNMENT implemented" << std::endl; + auto address = w_to_16(current_state.stack_top())[15]; + addr = address; + addr1 = address; + auto bytes = w_to_8(current_state.stack_top(1)); + for( std::size_t i = 0; i < 32; i++){ + value[i] = bytes[i]; + } + // addr + 31 -- maximum address + // memory_size -- previous memory_size + // if ( memory_size < addr + 31 ) then + // new_memory_size = std::ceil(float(addr + 31) / 32) * 32 + // else + // new_memory_size = memory_size + // So, we have | addr | std::ceil(addr + 31) % 32 | (addr + 31) / 32 | + std::size_t last_address = address + 31; + addr_mod = last_address % 32; + addr_mod31 = 31 - addr_mod; + addr_words = last_address % 32 == 0? last_address/32 : last_address / 32 + 1; + memory_mod = current_state.memory_size %32; + memory_mod31 = 31 - memory_mod; + memory_words = current_state.memory_size %32 == 0? current_state.memory_size/32 : current_state.memory_size / 32 + 1; + // addr_quad_mod = ((std::size_t(addr_words) * std::size_t(addr_words)) % 512); + // addr_quad_r = ((std::size_t(addr_words) * std::size_t(addr_words)) / 512); + // addr_quad_mod512 = 512 - addr_quad_mod; + // memory_quad_mod = ((std::size_t(memory_words) * std::size_t(memory_words)) % 512); + // memory_quad_r = ((std::size_t(memory_words) * std::size_t(memory_words)) / 512); + // memory_quad_mod512 = 512 - memory_quad_mod; + + std::cout << "\tMemory words = " << memory_words + << " memory size = " << current_state.memory_size + << " memory mod = " << memory_mod + << " address = " << address + << " last_address = " << last_address + << " addr_mod = " << addr_mod + << " addr_words = " << addr_words + << std::endl; + is_memory_size_changed = (addr_words > memory_words); + if( is_memory_size_changed != 0 ) { + std::cout << "\tMEMORY SIZE CHANGED " << addr_words << " > " << memory_words << std::endl; + } else { + std::cout << "\tMEMORY SIZE NOT CHANGED " << addr_words << " <= " << memory_words << std::endl; + } + } + for( std::size_t i = 0; i < 16; i++){ + allocate(value[i], i+16, 0); // Values are range-checked by RW circuit, so use non-range-checked columns + allocate(value[i + 16], i+16, 1); // Values are range-checked by RW circuit, so use non-range-checked columns + } + + allocate(addr, 0, 0); + allocate(addr1, 0, 1); + allocate(addr_mod, 1, 0); + allocate(addr_mod31 , 2, 0); + allocate(addr_words, 3, 0); + allocate(memory_mod, 4, 0); + allocate(memory_mod31, 5, 0); + allocate(memory_words, 6, 0); + allocate(is_memory_size_changed, 7, 0); + + // constrain( addr_mod + addr_mod31 - 31); + // constrain( memory_mod + memory_mod31 - 31); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + // constrain((addr + 31 - 32 * addr_words)*(32 * addr_words - 32 + addr_mod - addr - 31)); + // constrain( addr_mod * (32 * addr_words - 32 + addr_mod - addr - 31)); + // constrain((current_state.memory_size(0) - 32 * memory_words)*(32 * memory_words - 32 - current_state.memory_size(0) + memory_mod)); + // constrain( memory_mod * (32 * memory_words - 32 - current_state.memory_size(0) + memory_mod)); + new_memory_size = is_memory_size_changed * addr_words * 32 + (1 - is_memory_size_changed) * current_state.memory_size(0); + TYPE old_memory_gas_cost = 3 * memory_words; // TODO: check and test with large memory consumption + TYPE new_memory_gas_cost = 3 * addr_words; // TODO: check and test with large memory consumption + + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition + //constrain(current_state.gas(1) - current_state.gas_next() - 3 - is_memory_size_changed * (new_memory_gas_cost - old_memory_gas_cost)); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 2); // stack_size transition + //constrain(new_memory_size - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 3); // rw_counter transition + auto V_128 = chunks8_to_chunks128(value); + + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1), + TYPE(0), // is_write + TYPE(0), // hi bytes are 0 + addr // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 1, + TYPE(0), // is_write + V_128.first, // hi bytes are 0 + V_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + + tmp = { + TYPE(rw_op_to_num(rw_operation_type::memory)), + current_state.call_id(1), + addr, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 2, + TYPE(1), // is_write + TYPE(0), // hi bytes are 0 + value[31] // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_mstore8_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mstore8_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mstore8_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mul.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mul.hpp new file mode 100644 index 0000000000..3bce9bfc6b --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mul.hpp @@ -0,0 +1,251 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_mul_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using integral_type = zkevm_word_integral_type; + + constexpr static const typename FieldType::value_type two_64 = 0x10000000000000000_big_uint257; + constexpr static const typename FieldType::value_type two_128 = 0x100000000000000000000000000000000_big_uint254; + constexpr static const typename FieldType::value_type two_192 = 0x1000000000000000000000000000000000000000000000000_big_uint254; + + TYPE chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + TYPE result; + result = chunks[4 * chunk_idx]; result *= 0x10000; + result += chunks[4 * chunk_idx + 1]; result *= 0x10000; + result += chunks[4 * chunk_idx + 2]; result *= 0x10000; + result += chunks[4 * chunk_idx + 3]; + return result; + } + + TYPE lo_carryless_construct( + const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks + ) const { + return + a_64_chunks[3] * b_64_chunks[3] + + two_64 * (a_64_chunks[3] * b_64_chunks[2] + a_64_chunks[2] * b_64_chunks[3]) - r_64_chunks[3] - two_64 * r_64_chunks[2]; + } + + + TYPE hi_carryless_construct( + const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks + ) { + return + (a_64_chunks[3] * b_64_chunks[1] + a_64_chunks[2] * b_64_chunks[2] + + a_64_chunks[1] * b_64_chunks[3] - r_64_chunks[1]) + + two_64 * (a_64_chunks[3] * b_64_chunks[0] + a_64_chunks[1] * b_64_chunks[2] + + a_64_chunks[2] * b_64_chunks[1] + a_64_chunks[0] * b_64_chunks[3] - r_64_chunks[0]); + } + + zkevm_mul_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + std::vector A(16); + std::vector B(16); + std::vector R(16); + std::vector A_64(4); + std::vector B_64(4); + std::vector R_64(4); + TYPE C0; + std::vector C1(4); + TYPE C2; + std::vector C3(4); + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto a = w_to_16(current_state.stack_top()); + auto b = w_to_16(current_state.stack_top(1)); + auto r = w_to_16(current_state.stack_top() * current_state.stack_top(1)); + std::cout << "\ta = " << std::hex << current_state.stack_top() << std::dec << std::endl; + std::cout << "\tb = " << std::hex << current_state.stack_top(1) << std::dec << std::endl; + std::cout << "\tr = " << std::hex << current_state.stack_top() * current_state.stack_top(1) << std::dec << std::endl; + for( std::size_t i = 0; i < 16; i++){ + A[i] = a[i]; + B[i] = b[i]; + R[i] = r[i]; + } + } + for( std::size_t i = 0; i < 16; i++){ + allocate(A[i], i, 0); + allocate(B[i], i + 16, 0); + allocate(R[i], i, 1); + } + + A_64[0] = chunk_sum_64(A, 0); + A_64[1] = chunk_sum_64(A, 1); + A_64[2] = chunk_sum_64(A, 2); + A_64[3] = chunk_sum_64(A, 3); + + B_64[0] = chunk_sum_64(B, 0); + B_64[1] = chunk_sum_64(B, 1); + B_64[2] = chunk_sum_64(B, 2); + B_64[3] = chunk_sum_64(B, 3); + + R_64[0] = chunk_sum_64(R, 0); + R_64[1] = chunk_sum_64(R, 1); + R_64[2] = chunk_sum_64(R, 2); + R_64[3] = chunk_sum_64(R, 3); + + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + TYPE lo_carries = lo_carryless_construct(A_64, B_64, R_64); + TYPE hi_carries = hi_carryless_construct(A_64, B_64, R_64); + + integral_type c_first_i = typename FieldType::integral_type(lo_carries.data) >> 128; + auto c_first = w_to_16(c_first_i); + integral_type c_second_i = (typename FieldType::integral_type(hi_carries.data) + c_first_i) >> 128; + auto c_second = w_to_16(c_second_i); + C3[3] = c_first[15]; C3[2] = c_first[14]; C3[1] = c_first[13]; C3[0] = c_first[12]; + C2 = c_first[11]; + C1[3] = c_second[15]; C1[2] = c_second[14]; C1[1] = c_second[13]; C1[0] = c_second[12]; + C0 = c_second[11]; + } + + TYPE lo_carries = lo_carryless_construct(A_64, B_64, R_64); + TYPE hi_carries = hi_carryless_construct(A_64, B_64, R_64); + + allocate(C3[0], 17, 1); + allocate(C3[1], 18, 1); + allocate(C3[2], 19, 1); + allocate(C3[3], 20, 1); + TYPE C3_64 = chunk_sum_64(C3, 0); + allocate(C2, 21, 1); + + allocate(C1[0], 22, 1); + allocate(C1[1], 23, 1); + allocate(C1[2], 24, 1); + allocate(C1[3], 25, 1); + TYPE C1_64 = chunk_sum_64(C1, 0); + allocate(C0, 26, 1); + + constrain(C2 * (C2 - 1)); + constrain(C0 * (C0 - 1) * (C0 - 2) * (C0 - 3)); + + constrain(lo_carries - C3_64 * two_128 - C2 * two_192); + constrain(hi_carries + C3_64 + C2 * two_64 - C1_64 * two_128 - C0 * two_192); + + auto A_128 = chunks16_to_chunks128(A); + auto B_128 = chunks16_to_chunks128(B); + auto R_128 = chunks16_to_chunks128(R); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(2) - 1); // PC transition + constrain(current_state.gas(1) - current_state.gas_next() - 5); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(1) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 1, + TYPE(0),// is_write + B_128.first, + B_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 2, + TYPE(1),// is_write + R_128.first, + R_128.second + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tAssignment implemented" << std::endl; + } + } + }; + + template + class zkevm_mul_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mul_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_mul_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mulmod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mulmod.hpp new file mode 100644 index 0000000000..5b2268d464 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/mulmod.hpp @@ -0,0 +1,670 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_mulmod_bbf : public generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + using value_type = typename FieldType::value_type; + using var = crypto3::zk::snark::plonk_variable; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 8); // corrected to allow 512-bit numbers + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + // a = b*r, a and r have 8 64-bit chunks, b has 4 64-bit chunks + template + T first_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return r_64_chunks[0] * b_64_chunks[0] + + two_64 * + (r_64_chunks[0] * b_64_chunks[1] + r_64_chunks[1] * b_64_chunks[0]) - + a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0]) + + two_64 * + (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0]) - + a_64_chunks[2] - two_64 * a_64_chunks[3]; + } + + template + T third_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1] + r_64_chunks[4] * b_64_chunks[0]) + + two_64 * + (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2] + + r_64_chunks[4] * b_64_chunks[1] + r_64_chunks[5] * b_64_chunks[0]) - + a_64_chunks[4] - two_64 * a_64_chunks[5]; + } + + template + T forth_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[3] * b_64_chunks[3] + r_64_chunks[4] * b_64_chunks[2] + + r_64_chunks[5] * b_64_chunks[1] + r_64_chunks[6] * b_64_chunks[0]) + + two_64 * + (r_64_chunks[4] * b_64_chunks[3] + r_64_chunks[5] * b_64_chunks[2] + + r_64_chunks[6] * b_64_chunks[1] + r_64_chunks[7] * b_64_chunks[0]) - + a_64_chunks[6] - two_64 * a_64_chunks[7]; + } + TYPE carry_on_addition_constraint(TYPE a_0, TYPE a_1, TYPE a_2, TYPE b_0, TYPE b_1, + TYPE b_2, TYPE r_0, TYPE r_1, TYPE r_2, + TYPE last_carry, TYPE result_carry, + bool first_constraint = false) { + if (first_constraint) { + // no last carry for first constraint + return (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - r_0 - + r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + return last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + + (a_2 + b_2) * two_32 - r_0 - r_1 * two_16 - r_2 * two_32 - + result_carry * two_48; + } + }; + TYPE last_carry_on_addition_constraint(TYPE a_0, TYPE b_0, TYPE r_0, + TYPE last_carry, TYPE result_carry) { + return (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + }; + + std::vector res; + + public: + zkevm_mulmod_bbf(context_type &context_object, + const opcode_input_type ¤t_state, + bool make_links = true) + : generic_component(context_object), res(chunk_amount) { + using integral_type = zkevm_word_integral_type; + using extended_integral_type = nil::crypto3::multiprecision::big_uint<512>; + // The central relation is a * b = s = Nr + q, q < N. + + std::vector v_chunks(chunk_amount); + std::vector N_chunks(chunk_amount); + std::vector q_chunks(chunk_amount); + std::vector a_chunks(chunk_amount); + std::vector input_a_chunks(chunk_amount); + std::vector b_chunks(chunk_amount); + std::vector sp_chunks(chunk_amount); + std::vector spp_chunks(chunk_amount); + std::vector rp_chunks(chunk_amount); + std::vector rpp_chunks(chunk_amount); + std::vector Nr_p_chunks(chunk_amount); + std::vector Nr_pp_chunks(chunk_amount); + + TYPE N_sum; + TYPE N_sum_inverse; + TYPE N_nonzero; + TYPE N_nonzero_2; + TYPE carry[3][carry_amount + 1]; + + std::vector s_c_1_chunks(4); + TYPE s_c_2; + std::vector s_c_3_chunks(4); + TYPE s_c_4; + std::vector s_c_5_chunks(4); + TYPE s_c_6; + TYPE s_c_1_64; + TYPE s_c_3_64; + TYPE s_c_5_64; + + std::vector c_1_chunks(4); + TYPE c_2; + std::vector c_3_chunks(4); + TYPE c_4; + std::vector c_5_chunks(4); + TYPE c_6; + TYPE c_1_64; + TYPE c_3_64; + TYPE c_5_64; + + TYPE Nrpp_add; + + TYPE c_zero; + TYPE c_one; + + std::vector a_64_chunks(8); + std::vector b_64_chunks(4); + std::vector s_64_chunks(8); + std::vector N_64_chunks(4); + std::vector r_64_chunks(8); + std::vector Nr_64_chunks(8); + + TYPE s_first_carryless; + TYPE s_second_carryless; + TYPE s_third_carryless; + TYPE s_forth_carryless; + TYPE first_carryless; + TYPE second_carryless; + TYPE third_carryless; + TYPE forth_carryless; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type input_a = current_state.stack_top(); + zkevm_word_type b = current_state.stack_top(1); + zkevm_word_type N = current_state.stack_top(2); + zkevm_word_type a = N != 0u ? input_a : 0; + extended_integral_type s_integral = + extended_integral_type(integral_type(a)) * + extended_integral_type(integral_type(b)); + + zkevm_word_type sp = + zkevm_word_type(s_integral % extended_integral_type(zkevm_modulus)); + zkevm_word_type spp = + zkevm_word_type(s_integral / extended_integral_type(zkevm_modulus)); + + extended_integral_type r_integral = + N != 0u ? s_integral / extended_integral_type(integral_type(N)) : 0u; + zkevm_word_type rp = + zkevm_word_type(r_integral % extended_integral_type(zkevm_modulus)); + zkevm_word_type rpp = + zkevm_word_type(r_integral / extended_integral_type(zkevm_modulus)); + + zkevm_word_type q = + N != 0u ? zkevm_word_type(s_integral % + extended_integral_type(integral_type(N))) + : 0u; + extended_integral_type Nr_integral = + s_integral - extended_integral_type(integral_type(q)); + zkevm_word_type Nr_p = + zkevm_word_type(Nr_integral % extended_integral_type(zkevm_modulus)); + zkevm_word_type Nr_pp = + zkevm_word_type(Nr_integral / extended_integral_type(zkevm_modulus)); + + bool t_last = integral_type(q) < integral_type(N); + zkevm_word_type v = zkevm_word_type(integral_type(q) + + integral_type(t_last) * zkevm_modulus - + integral_type(N)); + + zkevm_word_type result = q; + + v_chunks = zkevm_word_to_field_element(v); + N_chunks = zkevm_word_to_field_element(N); + q_chunks = zkevm_word_to_field_element(q); + a_chunks = zkevm_word_to_field_element(a); + input_a_chunks = zkevm_word_to_field_element(input_a); + b_chunks = zkevm_word_to_field_element(b); + sp_chunks = zkevm_word_to_field_element(sp); + spp_chunks = zkevm_word_to_field_element(spp); + rp_chunks = zkevm_word_to_field_element(rp); + rpp_chunks = zkevm_word_to_field_element(rpp); + Nr_p_chunks = zkevm_word_to_field_element(Nr_p); + Nr_pp_chunks = zkevm_word_to_field_element(Nr_pp); + + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + s_64_chunks.push_back(chunk_sum_64(sp_chunks, i)); + N_64_chunks.push_back(chunk_sum_64(N_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(rp_chunks, i)); + Nr_64_chunks.push_back(chunk_sum_64(Nr_p_chunks, i)); + } + + // note that we don't assign 64-chunks for s/N, as we can build them from + // 16-chunks with constraints under the same logic we only assign the 16-bit + // chunks for carries + for (std::size_t i = 0; i < 4; + i++) { // for 512-bit integers 64-bit chunks go on + a_64_chunks.push_back(0); // artificially extend a_64_chunks to a + // 512-bit number representation + s_64_chunks.push_back(chunk_sum_64(spp_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(rpp_chunks, i)); + Nr_64_chunks.push_back(chunk_sum_64(Nr_pp_chunks, i)); + } + + // computation of s = a*b product + s_first_carryless = + first_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + auto s_first_row_carries = + first_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks).data.base() >> + 128; + value_type s_c_1 = + static_cast(s_first_row_carries & (two_64 - 1).data.base()); + s_c_2 = static_cast(s_first_row_carries >> 64); + s_c_1_chunks = chunk_64_to_16(s_c_1); + // no need for c_2 chunks as there is only a single chunk + s_second_carryless = + second_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + auto s_second_row_carries = + (second_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks) + + s_c_1 + s_c_2 * two_64) + .data.base() >> + 128; + + // computation of s = a*b product + + value_type s_c_3 = + static_cast(s_second_row_carries & (two_64 - 1).data.base()); + s_c_4 = static_cast(s_second_row_carries >> 64); + s_c_3_chunks = chunk_64_to_16(s_c_3); + s_third_carryless = + third_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + auto s_third_row_carries = + (third_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks)) + .data.base() >> + 128; + + value_type s_c_5 = + static_cast(s_third_row_carries & (two_64 - 1).data.base()); + s_c_6 = static_cast(s_third_row_carries >> 64); + s_c_5_chunks = chunk_64_to_16(s_c_5); + s_forth_carryless = + forth_carryless_construct(s_64_chunks, b_64_chunks, a_64_chunks); + + // computation of N*r product + // caluclate first row carries + first_carryless = + first_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks); + auto first_row_carries = + first_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks) + .data.base() >> + 128; + value_type c_1 = + static_cast(first_row_carries & (two_64 - 1).data.base()); + c_2 = static_cast(first_row_carries >> 64); + c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + second_carryless = second_carryless_construct( + Nr_64_chunks, N_64_chunks, r_64_chunks); + auto second_row_carries = + (second_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks) + + c_1 + c_2 * two_64) + .data.base() >> + 128; + value_type c_3 = + static_cast(second_row_carries & (two_64 - 1).data.base()); + c_4 = static_cast(second_row_carries >> 64); + c_3_chunks = chunk_64_to_16(c_3); + third_carryless = + third_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks); + auto third_row_carries = + (third_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks) + + c_3 + c_4 * two_64) + .data.base() >> + 128; + value_type c_5 = + static_cast(third_row_carries & (two_64 - 1).data.base()); + c_6 = static_cast(third_carryless.data.base() >> 64); + c_5_chunks = chunk_64_to_16(c_5); + forth_carryless = + forth_carryless_construct(Nr_64_chunks, N_64_chunks, r_64_chunks); + + N_sum = std::accumulate(N_chunks.begin(), N_chunks.end(), value_type(0)); + N_sum_inverse = N_sum == 0 ? 0 : N_sum.inversed(); + + carry[0][0] = 0; + carry[1][0] = 0; + carry[2][0] = 0; + c_zero = 0; + + s_c_1_64 = chunk_sum_64(s_c_1_chunks, 0); + s_c_3_64 = chunk_sum_64(s_c_3_chunks, 0); + s_c_5_64 = chunk_sum_64(s_c_5_chunks, 0); + + c_1_64 = chunk_sum_64(c_1_chunks, 0); + c_3_64 = chunk_sum_64(c_3_chunks, 0); + c_5_64 = chunk_sum_64(c_5_chunks, 0); + } + c_one = c_zero + 1; + N_nonzero = N_sum * N_sum_inverse; + N_nonzero_2 = N_nonzero; + + allocate(N_nonzero, 32, 5); + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(N_chunks[i], i, 0); + allocate(q_chunks[i], i, 1); + allocate(v_chunks[i], i + chunk_amount, 0); + res[i] = q_chunks[i]; + + allocate(Nr_p_chunks[i], i, 2); + allocate(sp_chunks[i], i + chunk_amount, 2); + + allocate(spp_chunks[i], i, 3); + allocate(Nr_pp_chunks[i], i + chunk_amount, 3); + + allocate(a_chunks[i], i, 5); + allocate(input_a_chunks[i], i + chunk_amount, 5); + constrain((a_chunks[i] - N_nonzero * input_a_chunks[i])); + + allocate(b_chunks[i], i, 6); + } + allocate(carry[0][0], chunk_amount, 1); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[0][i + 1] = + (carry[0][i] + N_chunks[3 * i] + v_chunks[3 * i] + + (N_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (N_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32) >= two_48; + } + allocate(carry[0][i + 1], chunk_amount + i + 1, 1); + constrain(carry_on_addition_constraint( + N_chunks[3 * i], N_chunks[3 * i + 1], N_chunks[3 * i + 2], + v_chunks[3 * i], v_chunks[3 * i + 1], v_chunks[3 * i + 2], + q_chunks[3 * i], q_chunks[3 * i + 1], q_chunks[3 * i + 2], carry[0][i], + carry[0][i + 1], i == 0)); + constrain(carry[0][i + 1] * (1 - carry[0][i + 1])); + } + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[0][carry_amount] = + (carry[0][carry_amount - 1] + N_chunks[3 * (carry_amount - 1)] + + v_chunks[3 * (carry_amount - 1)]) >= two_16; + } + allocate(carry[0][carry_amount], chunk_amount + carry_amount, 1); + allocate(N_nonzero_2, chunk_amount + carry_amount + 1, 1); + constrain(last_carry_on_addition_constraint( + N_chunks[3 * (carry_amount - 1)], v_chunks[3 * (carry_amount - 1)], + q_chunks[3 * (carry_amount - 1)], carry[0][carry_amount - 1], + carry[0][carry_amount])); + // last carry is 0 or 1, but should be 1 if N_nonzero = 1 + constrain((N_nonzero_2 + (1 - N_nonzero_2) * carry[0][carry_amount]) * + (1 - carry[0][carry_amount])); + for (std::size_t i = 0; i < 4; i++) { + // s = a * b carries + allocate(s_c_1_chunks[i], i + 8, 4); + allocate(s_c_3_chunks[i], i + 12, 4); + allocate(s_c_5_chunks[i], i + 16, 4); + } + allocate(s_first_carryless, 32, 0); + allocate(s_second_carryless, 33, 0); + allocate(s_third_carryless, 34, 0); + allocate(s_forth_carryless, 35, 0); + allocate(s_c_1_64, 36, 0); + allocate(s_c_2, 37, 0); + allocate(s_c_3_64, 38, 0); + allocate(s_c_4, 39, 0); + allocate(s_c_5_64, 40, 0); + allocate(s_c_6, 41, 0); + + constrain(s_first_carryless - s_c_1_64 * two128 - s_c_2 * two192); + constrain((s_second_carryless + s_c_1_64 + s_c_2 * two_64 - s_c_3_64 * two128 - + s_c_4 * two192)); + // add constraints for s_c_2/s_c_4/s_c_6: s_c_2 is 0/1, s_c_4 is 0/1/2/3,s_c_6 + // is 0/1 + constrain(s_c_2 * (s_c_2 - 1)); + constrain(s_c_4 * (s_c_4 - 1) * (s_c_4 - 2) * (s_c_4 - 3)); + constrain(s_c_6 * (s_c_6 - 1)); + + constrain(s_third_carryless + s_c_3_64 + s_c_4 * two_64 - s_c_5_64 * two128 - + s_c_6 * two192); + constrain(s_forth_carryless + s_c_5_64 + s_c_6 * two_64); + + // s = Nr + q carries + allocate(carry[1][0], 24, 1); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[1][i + 1] = + (carry[1][i] + Nr_p_chunks[3 * i] + q_chunks[3 * i] + + (Nr_p_chunks[3 * i + 1] + q_chunks[3 * i + 1]) * two_16 + + (Nr_p_chunks[3 * i + 2] + q_chunks[3 * i + 2]) * two_32) >= two_48; + } + allocate(carry[1][i + 1], 25 + i, 1); + constrain(carry_on_addition_constraint( + Nr_p_chunks[3 * i], Nr_p_chunks[3 * i + 1], Nr_p_chunks[3 * i + 2], + q_chunks[3 * i], q_chunks[3 * i + 1], q_chunks[3 * i + 2], + sp_chunks[3 * i], sp_chunks[3 * i + 1], sp_chunks[3 * i + 2], + carry[1][i], carry[1][i + 1], i == 0)); + constrain(carry[1][i + 1] * (1 - carry[1][i + 1])); + } + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[1][carry_amount] = + (carry[1][carry_amount - 1] + Nr_p_chunks[3 * (carry_amount - 1)] + + q_chunks[3 * (carry_amount - 1)]) >= two_16; + } + allocate(carry[1][carry_amount], 30, 1); + constrain(last_carry_on_addition_constraint( + Nr_p_chunks[3 * (carry_amount - 1)], q_chunks[3 * (carry_amount - 1)], + sp_chunks[3 * (carry_amount - 1)], carry[1][carry_amount - 1], + carry[1][carry_amount])); + constrain(carry[1][carry_amount] * (1 - carry[1][carry_amount])); + + allocate(carry[2][1], 0, 4); + allocate(c_zero, carry_amount + 1, 4); + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[2][1] = + (carry[2][0] + Nr_pp_chunks[0] + carry[1][carry_amount] + + Nr_pp_chunks[1] * two_16 + Nr_pp_chunks[2] * two_32) >= two_48; + } + for (std::size_t i = 1; i < carry_amount - 1; i++) { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[2][i + 1] = (carry[2][i] + Nr_pp_chunks[3 * i] + + Nr_pp_chunks[3 * i + 1] * two_16 + + Nr_pp_chunks[3 * i + 2] * two_32) >= two_48; + } + allocate(carry[2][i + 1], i + 1, 4); + constrain(carry_on_addition_constraint( + Nr_pp_chunks[3 * i], Nr_pp_chunks[3 * i + 1], Nr_pp_chunks[3 * i + 2], + c_zero, c_zero, c_zero, spp_chunks[3 * i], spp_chunks[3 * i + 1], + spp_chunks[3 * i + 2], carry[2][i], carry[2][i + 1], i == 0)); + constrain(carry[2][i + 1] * (1 - carry[2][i + 1])); + } + allocate(carry[2][carry_amount], carry_amount, 4); + if constexpr (stage == GenerationStage::ASSIGNMENT) { + carry[2][carry_amount] = (carry[2][carry_amount - 1] + + Nr_pp_chunks[3 * (carry_amount - 1)]) >= two_16; + BOOST_ASSERT(carry[2][carry_amount] == 0); + } + // ^^^^ normally should be zero, so instead we put c_zero + constrain(carry[2][carry_amount]); + last_carry_on_addition_constraint(Nr_pp_chunks[3 * (carry_amount - 1)], c_zero, + spp_chunks[3 * (carry_amount - 1)], + carry[2][carry_amount - 1], c_zero); + // end of s = Nr + q carries + + // the section where we prove Nr = N * r + for (std::size_t i = 0; i < 4; i++) { + // N*r carries + allocate(c_1_chunks[i], i + 20, 4); + allocate(c_3_chunks[i], i + 24, 4); + allocate(c_5_chunks[i], i + 28, 4); + } + allocate(first_carryless, 32, 1); + allocate(second_carryless, 33, 1); + allocate(third_carryless, 34, 1); + allocate(forth_carryless, 35, 1); + allocate(c_1_64, 36, 1); + allocate(c_2, 37, 1); + allocate(c_3_64, 38, 1); + allocate(c_4, 39, 1); + allocate(c_5_64, 40, 1); + allocate(c_6, 41, 1); + + constrain((first_carryless - c_1_64 * two128 - c_2 * two192)); + constrain((second_carryless + c_1_64 + c_2 * two_64 - c_3_64 * two128 - + c_4 * two192)); + + // add constraints for c_2/c_4/c_6: c_2 is 0/1, c_4, c_6 is 0/1/2/3 + constrain(c_2 * (c_2 - 1)); + constrain(c_4 * (c_4 - 1) * (c_4 - 2) * (c_4 - 3)); + constrain(c_6 * (c_6 - 1) * (c_6 - 2) * (c_6 - 3)); + + constrain( + (third_carryless + c_3_64 + c_4 * two_64 - c_5_64 * two128 - c_6 * two192)); + constrain((forth_carryless + c_5_64 + c_6 * two_64)); + + auto A_128 = chunks16_to_chunks128_reversed(input_a_chunks); + auto B_128 = chunks16_to_chunks128_reversed(b_chunks); + auto N_128 = chunks16_to_chunks128_reversed(N_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE A0, A1, B0, B1, N0, N1, Res0, Res1; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + A0 = A_128.first; + A1 = A_128.second; + B0 = B_128.first; + B1 = B_128.second; + N0 = N_128.first; + N1 = N_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + } + allocate(A0, 33, 4); + allocate(A1, 33, 5); + allocate(B0, 34, 5); + allocate(B1, 34, 6); + allocate(N0, 42, 0); + allocate(N1, 42, 1); + allocate(Res0, 34, 2); + allocate(Res1, 34, 3); + + constrain(A0 - A_128.first); + constrain(A1 - A_128.second); + constrain(B0 - B_128.first); + constrain(B1 - B_128.second); + constrain(N0 - N_128.first); + constrain(N1 - N_128.second); + constrain(Res0 - Res_128.first); + constrain(Res1 - Res_128.second); + if constexpr (stage == GenerationStage::CONSTRAINTS) { + constrain(current_state.pc_next() - current_state.pc(6) - + 1); // PC transition + constrain(current_state.gas(6) - current_state.gas_next() - + 8); // GAS transition + constrain(current_state.stack_size(6) - current_state.stack_size_next() - + 2); // stack_size transition + constrain(current_state.memory_size(6) - + current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(6) - + 4); // rw_counter transition + std::vector tmp; + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(5), + current_state.stack_size(5) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(5), + TYPE(0), // is_write + A0, + A1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(5), + current_state.stack_size(5) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(5) + 1, + TYPE(0), // is_write + B0, + B1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 3, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 2, + TYPE(0), // is_write + N0, + N1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(2), + current_state.stack_size(2) - 3, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(2) + 3, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_mulmod_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state) override { + zkevm_mulmod_bbf bbf_obj(context, + current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state + ) override { + zkevm_mulmod_bbf bbf_obj( + context, current_state); + } + virtual std::size_t rows_amount() override { return 7; } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/not.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/not.hpp new file mode 100644 index 0000000000..2fdf673a50 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/not.hpp @@ -0,0 +1,134 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_not_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_not_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + // NOT checked by current test + std::vector A(16); + std::vector R(16); + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto a = w_to_16(current_state.stack_top()); + for( std::size_t i = 0; i < 16; i++ ){ + A[i] = a[i]; + R[i] = 0xFFFF - a[i]; + } + } + for( std::size_t i = 0; i < 16; i++ ){ + allocate(A[i], i, 0); + allocate(R[i], i + 16, 0); + } + for( std::size_t i = 0; i < 16; i++ ){ + constrain(R[i] + A[i] - 0xFFFF); + } + + auto A_128 = chunks16_to_chunks128(A); + auto R_128 = chunks16_to_chunks128(R); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(0) - current_state.stack_size_next()); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 2); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 1, + TYPE(1),// is_write + R_128.first, + R_128.second + }; + lookup(tmp, "zkevm_rw"); + } else { + std::cout << "Assignment implemented" << std::endl; + } + } + }; + + template + class zkevm_not_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_not_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_not_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/block/include/nil/crypto3/block/algorithm/move.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/padding.hpp similarity index 51% rename from crypto3/libs/block/include/nil/crypto3/block/algorithm/move.hpp rename to crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/padding.hpp index 28c79bd722..422ad4af30 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/algorithm/move.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/padding.hpp @@ -1,5 +1,5 @@ //---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2024 Elena Tatuzova // // MIT License // @@ -22,31 +22,35 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_BLOCK_MOVE_HPP -#define CRYPTO3_BLOCK_MOVE_HPP +#pragma once +#include #include -#include -#include +#include +#include namespace nil { - namespace crypto3 { - namespace block { - /*! - * @brief - * @tparam SinglePassRange - * @tparam OutputIterator - * @param rng - * @param result - * @return - */ - template - inline OutputIterator move(const SinglePassRange &rng, OutputIterator result) { - return std::move(boost::begin(rng), boost::end(rng), result); - } - } // namespace block - } // namespace crypto3 -} // namespace nil + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; -#endif // CRYPTO3_BLOCK_MOVE_HPP + template + class zkevm_padding_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/pop.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/pop.hpp new file mode 100644 index 0000000000..ee1271cf77 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/pop.hpp @@ -0,0 +1,86 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_pop_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_pop_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 2); // GAS transition + constrain(current_state.stack_size(0) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0)); // rw_counter transition + } else { + std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_pop_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_pop_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_pop_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/pushx.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/pushx.hpp new file mode 100644 index 0000000000..b11a819c3e --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/pushx.hpp @@ -0,0 +1,145 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_pushx_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_pushx_bbf(context_type &context_object, const opcode_input_type ¤t_state, std::size_t x): + generic_component(context_object, false) + { + std::vector A_bytes(32); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + std::cout << "\tASSIGNMENT implemented" << std::endl; + auto bytes = nil::blueprint::w_to_8(current_state.additional_input); + for( std::size_t i = 0; i < 32; i++ ){ + A_bytes[i] = bytes[i]; + } + } + for( std::size_t i = 0; i < 16; i++){ + allocate(A_bytes[i], i, 0); + allocate(A_bytes[i + 16], i, 1); + } + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(1) - x - 1); // PC transition + if( x == 0 ) + constrain(current_state.gas(1) - current_state.gas_next() - 2); // GAS transition + else + constrain(current_state.gas(1) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size_next() - current_state.stack_size(1) - 1); // stack_size transition + constrain(current_state.memory_size(1) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 1); // rw_counter transition + auto A_128 = chunks8_to_chunks128(A_bytes); + std::vector tmp({ + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0), + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(1),// is_write + A_128.first, + A_128.second + }); + lookup(tmp, "zkevm_rw"); + for( std::size_t i = 0; i < 32 - x; i++){ + constrain(A_bytes[i]); + } + for( std::size_t j = 32-x; j < 32; j++){ + if( j < 16 ){ + tmp = { + TYPE(1), + current_state.pc(0) + j - (32 - x) + 1, + A_bytes[j], + TYPE(0), + current_state.bytecode_hash_hi(0), + current_state.bytecode_hash_lo(0) + }; + } else { + tmp = { + TYPE(1), + current_state.pc(1) + j - (32 - x) + 1, + A_bytes[j], + TYPE(0), + current_state.bytecode_hash_hi(1), + current_state.bytecode_hash_lo(1) + }; + } + // TODO(oclaw): bytecode check is disabled since hash algorithm for circuits is not finalized yet + // https://github.com/NilFoundation/placeholder/issues/205 + // lookup(tmp, "zkevm_bytecode"); + } + } + } + }; + + + template + class zkevm_pushx_operation : public opcode_abstract { + public: + zkevm_pushx_operation(std::size_t _x):x(_x){ + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_pushx_bbf bbf_obj(context, current_state, x); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_pushx_bbf bbf_obj(context, current_state, x); + } + virtual std::size_t rows_amount() override { + return 2; + } + protected: + std::size_t x; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/return.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/return.hpp new file mode 100644 index 0000000000..f04d915c5c --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/return.hpp @@ -0,0 +1,145 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_return_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_return_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE offset; + TYPE length; + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + offset = w_lo(current_state.stack_top()); + length = w_lo(current_state.stack_top(1)); + } + allocate(offset, 32, 0); + allocate(length, 33, 0); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + TYPE(0),// hi bytes are 0 + offset // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) +1, + TYPE(0),// is_write + TYPE(0),// hi bytes are 0 + length // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + + tmp = { + TYPE(1), // is_first + TYPE(0), // source_id_hi + current_state.call_id(0), // source_id_lo + TYPE(copy_op_to_num(copy_operand_type::memory)), // cp_type + offset, + length, + TYPE(0), // is_write + current_state.rw_counter(0) + 2 // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_copy"); + tmp = { + TYPE(1), // is_first + TYPE(0), // dst_id_hi + current_state.call_id(0), // dst_id_lo + TYPE(copy_op_to_num(copy_operand_type::returndata)), // cp_type + 0, + length, + TYPE(1), // is_write + current_state.rw_counter(0) + 2 + length // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_copy"); + // constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + // constrain(current_state.gas(0) - current_state.gas_next() - 1); // GAS transition + // constrain(current_state.stack_size(0) - current_state.stack_size_next()); // stack_size transition + // constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + // constrain(current_state.rw_counter_next() - current_state.rw_counter(0)); // rw_counter transition + } else { + // std::cout << "\tASSIGNMENT implemented" << std::endl; + } + } + }; + + template + class zkevm_return_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_return_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_return_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 2; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/returndatacopy.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/returndatacopy.hpp new file mode 100644 index 0000000000..710d0d905b --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/returndatacopy.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + + template + using zkevm_returndatacopy_operation = zkevm_dummy_operation; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/returndatasize.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/returndatasize.hpp new file mode 100644 index 0000000000..6dc1a55b27 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/returndatasize.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + + template + using zkevm_returndatasize_operation = zkevm_dummy_operation; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sar.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sar.hpp new file mode 100644 index 0000000000..6ac2042988 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sar.hpp @@ -0,0 +1,576 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_sar_bbf : public generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + using value_type = typename FieldType::value_type; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two_128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two_192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) - + a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * + (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct(const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * + (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + TYPE carry_on_addition_constraint(TYPE a_0, TYPE a_1, TYPE a_2, TYPE b_0, TYPE b_1, + TYPE b_2, TYPE r_0, TYPE r_1, TYPE r_2, + TYPE last_carry, TYPE result_carry, + bool first_constraint = false) { + TYPE res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - r_0 - + r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + + (a_2 + b_2) * two_32 - r_0 - r_1 * two_16 - r_2 * two_32 - + result_carry * two_48; + } + return res; + }; + TYPE last_carry_on_addition_constraint(TYPE a_0, TYPE b_0, TYPE r_0, + TYPE last_carry, TYPE result_carry) { + TYPE res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + + std::vector res; + + public: + zkevm_sar_bbf(context_type &context_object, + const opcode_input_type ¤t_state) + : generic_component(context_object, false), + res(chunk_amount) { + using integral_type = zkevm_word_integral_type; + + TYPE first_carryless; + TYPE second_carryless; + TYPE third_carryless; + + TYPE b0p; + TYPE b0pp; + TYPE b0ppp; + TYPE b0p_range_check; + TYPE b0pp_range_check; + TYPE b0ppp_range_check; + TYPE I1; + TYPE I2; + TYPE z; + TYPE tp; + TYPE two_powers; + TYPE sum_part_b; + TYPE b_sum; + TYPE b_sum_inverse; + TYPE r_sum; + TYPE r_sum_inverse; + TYPE a_neg; + TYPE a_neg_2; + + std::vector a_64_chunks(4); + std::vector b_64_chunks(4); + std::vector r_64_chunks(4); + std::vector q_64_chunks(4); + + std::vector c_1_chunks(4); + std::vector c_3_chunks(4); + TYPE c_1; + TYPE c_2; + TYPE c_3; + TYPE c_4; + + TYPE c_1_64; + TYPE c_3_64; + + TYPE b_zero; + + std::vector input_a_chunks(chunk_amount); + std::vector input_b_chunks(chunk_amount); + std::vector results_chunks(chunk_amount); + std::vector a_chunks(chunk_amount); + std::vector b_chunks(chunk_amount); + std::vector r_chunks(chunk_amount); + std::vector q_chunks(chunk_amount); + std::vector v_chunks(chunk_amount); + + std::vector indic_1(chunk_amount); + std::vector indic_2(chunk_amount); + + TYPE carry[3][carry_amount + 1]; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type input_b = current_state.stack_top(); + zkevm_word_type input_a = current_state.stack_top(1); + + auto is_negative = [](zkevm_word_type x) { + return (integral_type(x) > zkevm_modulus / 2 - 1); + }; + auto negate_word = [](zkevm_word_type x) { + return zkevm_word_type(zkevm_modulus - integral_type(x)); + }; + auto abs_word = [&is_negative, &negate_word](zkevm_word_type x) { + return is_negative(x) ? negate_word(x) : x; + }; + + zkevm_word_type a = abs_word(input_a); + + int shift = + (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + integral_type r_integral = integral_type(a) >> shift; + + zkevm_word_type result = + is_negative(input_a) + ? ((r_integral == 0) ? zkevm_word_type(zkevm_modulus - 1) + : negate_word(zkevm_word_type(r_integral))) + : zkevm_word_type(r_integral); + + zkevm_word_type b = zkevm_word_type(integral_type(1) << shift); + + zkevm_word_type r = r_integral; + zkevm_word_type q = b != 0u ? integral_type(a) % integral_type(b) : a; + + bool t_last = integral_type(q) < integral_type(b); + zkevm_word_type v = zkevm_word_type(integral_type(q) + + integral_type(t_last) * zkevm_modulus - + integral_type(b)); + a_neg = is_negative(input_a); + + input_a_chunks = zkevm_word_to_field_element(input_a); + input_b_chunks = zkevm_word_to_field_element(input_b); + results_chunks = zkevm_word_to_field_element(result); + a_chunks = zkevm_word_to_field_element(a); + b_chunks = zkevm_word_to_field_element(b); + r_chunks = zkevm_word_to_field_element(r); + q_chunks = zkevm_word_to_field_element(q); + v_chunks = zkevm_word_to_field_element(v); + + integral_type two_15 = 32768; + integral_type biggest_input_a_chunk = integral_type(input_a) >> (256 - 16); + + b0p = integral_type(input_b) % 16; + b0pp = (integral_type(input_b) / 16) % 16; + b0ppp = (integral_type(input_b) % 65536) / 256; + I1 = b0ppp.is_zero() ? 0 : b0ppp.inversed(); + + sum_part_b = 0; + b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + for (std::size_t i = 1; i < chunk_amount; i++) { + sum_part_b += input_b_chunks[i]; + } + I2 = sum_part_b.is_zero() ? 0 : sum_part_b.inversed(); + z = (1 - b0ppp * I1) * + (1 - + sum_part_b * I2); // z is zero if input_b >= 256, otherwise it is 1 + tp = z * (static_cast(1) << int(integral_type(input_b) % 16)); + b_sum_inverse = b_sum.is_zero() ? 0 : b_sum.inversed(); + b_zero = 1 - b_sum_inverse * b_sum; + + two_powers = 0; + unsigned int pow = 1; + for (std::size_t i = 0; i < chunk_amount; i++) { + indic_1[i] = (b0p - i).is_zero() ? 0 : (b0p - i).inversed(); + indic_2[i] = (b0pp - i).is_zero() ? 0 : (b0pp - i).inversed(); + two_powers += (1 - (b0p - i) * indic_1[i]) * pow; + pow *= 2; + } + + // note that we don't assign 64-chunks for a/b, as we can build them from + // 16-chunks with constraints under the same logic we only assign the 16 - + // bit + + // chunks for carries + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + // caluclate first row carries + first_carryless = first_carryless_construct(a_64_chunks, b_64_chunks, + r_64_chunks, q_64_chunks); + auto first_row_carries = first_carryless_construct(a_64_chunks, b_64_chunks, + r_64_chunks, q_64_chunks) + .data.base() >> + 128; + c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + c_2 = static_cast(first_row_carries >> 64); + BOOST_ASSERT(first_carryless - c_1 * two_128 - c_2 * two_192 == 0); + c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + second_carryless = second_carryless_construct( + a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks); + c_1_64 = chunk_sum_64(c_1_chunks, 0); + + third_carryless = third_carryless_construct(b_64_chunks, r_64_chunks); + + // lookup constrain b0p < 16, b0pp < 16, b0ppp < 256 + b0p_range_check = 4096 * b0p; + b0pp_range_check = 4096 * b0pp; + b0ppp_range_check = 256 * b0ppp; + + carry[0][0] = 0; + // input_a + |input_a| = 2^256 carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[0][i + 1] = + (carry[0][i] + input_a_chunks[3 * i] + a_chunks[3 * i] + + (input_a_chunks[3 * i + 1] + a_chunks[3 * i + 1]) * two_16 + + (input_a_chunks[3 * i + 2] + a_chunks[3 * i + 2]) * two_32) >= + two_48; + } + // The last carry, if input_a + |input_a| is ever needed, should be 1 + // anyway, so we don't store it + + r_sum = std::accumulate(r_chunks.begin(), r_chunks.end(), value_type(0)); + r_sum_inverse = r_sum.is_zero() ? 0 : r_sum.inversed(); + + carry[1][0] = 0; + // result + r = 2^256 carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[1][i + 1] = + (carry[1][i] + results_chunks[3 * i] + r_chunks[3 * i] + + (results_chunks[3 * i + 1] + r_chunks[3 * i + 1]) * two_16 + + (results_chunks[3 * i + 2] + r_chunks[3 * i + 2]) * two_32) >= + two_48; + } + // The last carry, if result + r is ever needed, should be 1 anyway, so we + // don't store it + + carry[2][0] = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[2][i + 1] = + (carry[2][i] + b_chunks[3 * i] + v_chunks[3 * i] + + (b_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32) >= two_48; + } + carry[2][carry_amount] = + (carry[2][carry_amount - 1] + b_chunks[3 * (carry_amount - 1)] + + v_chunks[3 * (carry_amount - 1)]) >= two_16; + + b_zero = 1 - b_sum_inverse * b_sum; + } + + allocate(b0p_range_check, 0, 4); + allocate(b0pp_range_check, 1, 4); + allocate(b0ppp_range_check, 2, 4); + allocate(b_zero, 39, 1); + for (std::size_t i = 0; i < 4; i++) { + allocate(c_1_chunks[i], 3 + i, 4); + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(input_a_chunks[i], i, 0); + allocate(a_chunks[i], i + chunk_amount, 0); + allocate(results_chunks[i], i, 1); + allocate(r_chunks[i], i + chunk_amount, 1); + allocate(q_chunks[i], i, 2); + allocate(v_chunks[i], i + chunk_amount, 2); + allocate(b_chunks[i], i, 3); + allocate(input_b_chunks[i], i + chunk_amount, 4); + res[i] = r_chunks[i]; + constrain(b_zero * r_chunks[i]); + } + + allocate(tp, 16, 3); + allocate(z, 17, 3); + allocate(I1, 39, 2); + allocate(I2, 40, 2); + allocate(two_powers, 41, 2); + + allocate(b0p, 9, 4); + allocate(b0pp, 18, 3); + allocate(b0ppp, 19, 3); + allocate(sum_part_b, 42, 2); + allocate(b_sum, 40, 1); + allocate(b_sum_inverse, 41, 1); + + constrain(tp - z * two_powers); + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(indic_1[i], i + 2 * chunk_amount, 4); + allocate(indic_2[i], i + 2 * chunk_amount, 3); + constrain((b0p - i) * (1 - (b0p - i) * indic_1[i])); + constrain((b0pp - i) * (1 - (b0pp - i) * indic_2[i])); + constrain(b_chunks[i] - tp * (1 - (b0pp - i) * indic_2[i])); + } + + constrain(b_sum_inverse * (b_sum_inverse * b_sum - 1)); + constrain(b_sum * (b_sum_inverse * b_sum - 1)); + constrain(input_b_chunks[0] - b0p - 16 * b0pp - 256 * b0ppp); + constrain(b0ppp * (1 - b0ppp * I1)); + + constrain(sum_part_b * (1 - sum_part_b * I2)); + constrain((z - (1 - b0ppp * I1) * (1 - sum_part_b * I2))); + + allocate(first_carryless, 39, 0); + allocate(second_carryless, 40, 0); + allocate(third_carryless, 41, 0); + allocate(c_1_64, 42, 0); + allocate(c_2, 43, 0); + + allocate(b_64_chunks[3], 7, 4); + allocate(r_64_chunks[3], 8, 4); + + constrain(first_carryless - c_1_64 * two_128 - c_2 * two_192); + constrain(second_carryless + c_1_64 + c_2 * two_64); + constrain(c_2 * (c_2 - 1)); + constrain(third_carryless); + constrain(b_64_chunks[3] * r_64_chunks[3]); + + allocate(a_neg, 42, 1); + allocate(r_sum, 44, 0); + allocate(r_sum_inverse, 45, 0); + constrain(1 - b_sum_inverse * b_sum - b_zero); + + allocate(carry[0][0], 32, 1); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[0][i + 1], 33 + i, 1); + constrain(a_neg * carry_on_addition_constraint( + input_a_chunks[3 * i], input_a_chunks[3 * i + 1], + input_a_chunks[3 * i + 2], a_chunks[3 * i], + a_chunks[3 * i + 1], a_chunks[3 * i + 2], 0, 0, 0, + carry[0][i], carry[0][i + 1], i == 0)); + constrain(a_neg * carry[0][i + 1] * (1 - carry[0][i + 1])); + } + allocate(carry[0][carry_amount], 38, 1); + constrain(a_neg * last_carry_on_addition_constraint( + input_a_chunks[3 * (carry_amount - 1)], + a_chunks[3 * (carry_amount - 1)], 0, + carry[0][carry_amount - 1], 1)); + // ^^^ if ever input_a + |input_a| = 2^256 is used, the last carry should be 1 + + // since it is an overflow, if a_neg = 0, we should have input_a= a + for (std::size_t i = 0; i < chunk_amount; i++) { + constrain((1 - a_neg) *(input_a_chunks[i] - a_chunks[i]) ); + } + + constrain(r_sum * (1 - r_sum_inverse * r_sum)); + + allocate(carry[1][0], 32, 0); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[1][i + 1], 33 + i, 0); + constrain(a_neg * r_sum * + carry_on_addition_constraint( + results_chunks[3 * i], results_chunks[3 * i + 1], + results_chunks[3 * i + 2], r_chunks[3 * i], + r_chunks[3 * i + 1], r_chunks[3 * i + 2], 0, 0, 0, + carry[1][i], carry[1][i + 1], i == 0)); + constrain(a_neg * r_sum * carry[1][i + 1] * (1 - carry[1][i + 1])); + } + allocate(carry[1][carry_amount], 38, 0); + constrain( + a_neg * r_sum * + last_carry_on_addition_constraint(results_chunks[3 * (carry_amount - 1)], + r_chunks[3 * (carry_amount - 1)], 0, + carry[1][carry_amount - 1], 1)); + // ^^^ if ever result + r = 2^256 is used, the last carry should be 1 since is + // actually an overflow + + // if a_neg = 0 we should have r = result + // if a_neg = 1 and r_sum_0 = 0 we should have result = 2^257 - 1, + // i.e. every chunk of result should be 2^16 - 1 + a_neg_2 = a_neg; + allocate(a_neg_2, 43, 2); + for (std::size_t i = 0; i < chunk_amount; i++) { + constrain((1 - a_neg_2) * (results_chunks[i] - r_chunks[i]) + a_neg_2 * (1 - r_sum * r_sum_inverse) *(two_16 - 1 -results_chunks[i])); + }; + + allocate(carry[2][0], 32, 2); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[2][i + 1], 33 + i, 2); + constrain(carry_on_addition_constraint( + b_chunks[3 * i], b_chunks[3 * i + 1], b_chunks[3 * i + 2], + v_chunks[3 * i], v_chunks[3 * i + 1], v_chunks[3 * i + 2], + q_chunks[3 * i], q_chunks[3 * i + 1], q_chunks[3 * i + 2], + carry[2][i], carry[2][i + 1], i == 0)); + constrain(carry[2][i + 1] * (1 - carry[2][i + 1])); + } + allocate(carry[2][carry_amount], 38, 2); + constrain(last_carry_on_addition_constraint( + b_chunks[3 * (carry_amount - 1)], v_chunks[3 * (carry_amount - 1)], + q_chunks[3 * (carry_amount - 1)], carry[2][carry_amount - 1], + carry[2][carry_amount])); + + // last carry is 0 or 1, but should be 1 if z = 1 + constrain((z + (1 - z) * carry[2][carry_amount]) * + (1 - carry[2][carry_amount])); + + auto A_128 = chunks16_to_chunks128_reversed(input_a_chunks); + auto B_128 = chunks16_to_chunks128_reversed(input_b_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE A0, A1, B0, B1, Res0, Res1; + + A0 = A_128.first; + A1 = A_128.second; + B0 = B_128.first; + B1 = B_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + allocate(A0, 46, 0); + allocate(A1, 47, 0); + allocate(B0, 44, 2); + allocate(B1, 45, 2); + allocate(Res0, 46, 1); + allocate(Res1, 47, 1); + + if constexpr (stage == GenerationStage::CONSTRAINTS) { + constrain(current_state.pc_next() - current_state.pc(4) - + 1); // PC transition + constrain(current_state.gas(4) - current_state.gas_next() - + 3); // GAS transition + constrain(current_state.stack_size(4) - current_state.stack_size_next() - + 1); // stack_size transition + constrain(current_state.memory_size(4) - + current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(4) - + 3); // rw_counter transition + std::vector tmp; + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(2), + current_state.stack_size(2) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(2), + TYPE(0), // is_write + B0, + B1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + 1, + TYPE(0), // is_write + A0, + A1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 2, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } + }; + }; + + template + class zkevm_sar_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state) override { + zkevm_sar_bbf bbf_obj(context, + current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state) override { + zkevm_sar_bbf bbf_obj(context, + current_state); + } + virtual std::size_t rows_amount() override { return 5; } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/scmp.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/scmp.hpp new file mode 100644 index 0000000000..f76ce65446 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/scmp.hpp @@ -0,0 +1,250 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + enum scmp_type { C_SLT, C_SGT }; + + template + class zkevm_scmp_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_scmp_bbf(context_type &context_object, const opcode_input_type ¤t_state, scmp_type scmp_operation): + generic_component(context_object, false) + { + std::vector A(16); + std::vector B(16); + std::vector S(16); + TYPE diff; + TYPE diff_inv; + TYPE eq; + TYPE lt; + TYPE gt; + TYPE is_negative_A; + TYPE is_negative_B; + TYPE sign_proof_A; + TYPE sign_proof_B; + TYPE result; + + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + auto a = w_to_16(current_state.stack_top()); + auto b = w_to_16(current_state.stack_top(1)); + // std::cout << "\ta = " << std::hex << current_state.stack_top() << std::dec << std::endl; + // std::cout << "\tb = " << std::hex << current_state.stack_top(1) << std::dec << std::endl; + bool eq = true; + for( std::size_t i = 0; i < 16; i++ ){ + A[i] = a[i]; + B[i] = b[i]; + } + is_negative_A = is_negative(current_state.stack_top()); + is_negative_B = is_negative(current_state.stack_top(1)); + sign_proof_A = is_negative(current_state.stack_top()) ? a[0] - 0x8000: 0x7fff - a[0]; + sign_proof_B = is_negative(current_state.stack_top(1)) ? b[0] - 0x8000: 0x7fff - b[0]; + // std::cout <<"\tSign proofs: " << std::hex << a[0] << " " << b[0] << std::dec << std::endl; + if( scmp_operation == scmp_type::C_SLT ){ + result = is_negative_A * (1 - is_negative_B); + } else { + result = is_negative_B * (1 - is_negative_A); + } + for( std::size_t i = 0; i < 16; i++ ){ + if( a[i] != b[i] ) { + if( eq ) S[i] = 1; + eq = false; + // is_negative_A && !is_negative_B => A < B; + // !is_negative_A && is_negative_B => A > B; + // is_negative_A && is_negative_B && lt => A < B; + // && gt => A > B; + // !is_negative_A && !is_negative_B && lt => A > B; + // && gt => A < B; + //result = scmp_operation == scmp_type::C_SLT ? a[i] < b[i]: a[i] > b[i]; + std::cout << "\tNot equal" << std::endl; + diff = a[i] < b[i]? b[i] - a[i]: a[i] - b[i]; + diff_inv = diff.inversed(); + lt = a[i] < b[i]; + gt = a[i] > b[i]; + if( scmp_operation == scmp_type::C_SLT ){ + result = result + (is_negative_A * is_negative_B * gt + (1 - is_negative_A) * (1 - is_negative_B) * lt); + } else { + result = result + (is_negative_A * is_negative_B * lt + (1 - is_negative_A) * (1 - is_negative_B) * gt); + } + break; + } + } + } + TYPE s_sum; + for( std::size_t i = 0; i < 16; i++ ){ + allocate(A[i], i, 0); + allocate(B[i], i + 16, 0); + allocate(S[i], i, 1); + } + allocate(diff, 16, 1 ); + allocate(diff_inv, 32, 0); + allocate(lt, 17, 1); + allocate(gt, 18, 1); + allocate(result, 19, 1); + allocate(is_negative_A, 20, 1); + allocate(is_negative_B, 21, 1); + allocate(sign_proof_A, 22, 1); + allocate(sign_proof_B, 23, 1); + + constrain(is_negative_A * (1 - is_negative_A)); + constrain(is_negative_B * (1 - is_negative_B)); + constrain(is_negative_A * (A[0] - sign_proof_A - 0x8000) + (1 - is_negative_A) * (0x7fff - A[0] - sign_proof_A)); + constrain(is_negative_B * (B[0] - sign_proof_B - 0x8000) + (1 - is_negative_B) * (0x7fff - B[0] - sign_proof_B)); + + // std::cout << "\tresult = " << result << std::endl; + // std::cout << "\tlt = " << lt << std::endl; + // std::cout << "\tgt = " << gt << std::endl; + // std::cout << "\tis_negative_A = " << is_negative_A << std::endl; + // std::cout << "\tis_negative_B = " << is_negative_B << std::endl; + + for( std::size_t i = 0; i < 16; i++ ){ + constrain(S[i] * (S[i] - 1)); + s_sum += S[i]; + } + + constrain(gt * (gt - 1)); + constrain(lt * (lt - 1)); + constrain(s_sum * (s_sum - 1)); + constrain(gt + lt - s_sum); + constrain(result * (result - 1)); + if( scmp_operation == scmp_type::C_SLT ){ + constrain(result - is_negative_A * (1 - is_negative_B) - is_negative_A * is_negative_B * gt - (1 - is_negative_A) * (1 - is_negative_B) * lt); + } else { + constrain(result - is_negative_B * (1 - is_negative_A) - is_negative_A * is_negative_B * lt - (1 - is_negative_A) * (1 - is_negative_B) * gt); + } + std::vector zero_constraints(15); + for( std::size_t i = 0; i < 15; i++ ){ + for( std::size_t j = i+1; j < 16; j++){ + zero_constraints[i] += S[j]; + } + zero_constraints[i] *= A[i] - B[i]; + // constrain(zero_constraints[i]); + } + TYPE diff_constraint; + for( std::size_t i = 0; i < 16; i++ ){ + diff_constraint += S[i] * (gt * (A[i] - B[i]) + lt *(B[i] - A[i])); + } + // constrain(diff - diff_constraint); + // constrain(diff * (diff * diff_inv - 1)); + // constrain(diff_inv * (diff * diff_inv - 1)); + // constrain(diff * diff_inv - lt - gt); + auto A_128 = chunks16_to_chunks128(A); + auto B_128 = chunks16_to_chunks128(B); + // std::cout << "A = " << std::hex << A_128.first << " " << A_128.second << std::dec << std::endl; + // std::cout << "B = " << std::hex << B_128.first << " " << B_128.second << std::dec << std::endl; + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(1) - 1); // PC transition + constrain(current_state.gas(1) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - 1); // stack_size transition + constrain(current_state.memory_size(1) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1), + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 1, + TYPE(0),// is_write + B_128.first, + B_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(1) + 2, + TYPE(1),// is_write + TYPE(0), + result + + }; + lookup(tmp, "zkevm_rw"); + } + } + }; + template + class zkevm_scmp_operation : public opcode_abstract { + public: + zkevm_scmp_operation(scmp_type _scmp_operation) : scmp_operation(_scmp_operation) {} + virtual std::size_t rows_amount() override { + return 2; + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_scmp_bbf bbf_obj(context, current_state, scmp_operation); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_scmp_bbf bbf_obj(context, current_state, scmp_operation); + } + private: + scmp_type scmp_operation; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sdiv_smod.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sdiv_smod.hpp new file mode 100644 index 0000000000..94bbaddf6a --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sdiv_smod.hpp @@ -0,0 +1,623 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_sdiv_smod_bbf : generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + using value_type = typename FieldType::value_type; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_15 = 32768; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two_128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two_192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) - + a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * + (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct(const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * + (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + TYPE carry_on_addition_constraint(TYPE a_0, TYPE a_1, TYPE a_2, TYPE b_0, TYPE b_1, + TYPE b_2, TYPE r_0, TYPE r_1, TYPE r_2, + TYPE last_carry, TYPE result_carry, + bool first_constraint = false) { + TYPE res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - r_0 - + r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + + (a_2 + b_2) * two_32 - r_0 - r_1 * two_16 - r_2 * two_32 - + result_carry * two_48; + } + return res; + }; + TYPE last_carry_on_addition_constraint(TYPE a_0, TYPE b_0, TYPE r_0, + TYPE last_carry, TYPE result_carry) { + TYPE res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + + std::vector res; + + // The central relation is a = br + q. We also require that sgn(q) = sgn(a) and + // that |q| < |b| if b != 0. + // For b = 0 we must assure r = 0. For the SMOD operation we should + // have q = 0 if b = 0, so we use a special q_out value. + + public: + zkevm_sdiv_smod_bbf(context_type &context_object, + const opcode_input_type ¤t_state, + bool is_div) + : generic_component(context_object, false), + res(chunk_amount) { + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + std::vector c_1_chunks(4); + TYPE c_2; + TYPE carry[3][carry_amount + 1]; + TYPE c_1_64; + TYPE first_carryless; + TYPE second_row_carries; + TYPE third_row_carries; + TYPE b_sum; + TYPE b2; + TYPE b_zero; + TYPE b_sum_inverse; + TYPE b2_inverse; + TYPE b_nonzero; + TYPE a_sum; + TYPE a_sum_inverse; + TYPE b_input_sum; + TYPE b_lower_sum; + TYPE b_lower_sum_inverse; + TYPE q_sum; + + TYPE biggest_a_chunk; + TYPE biggest_b_chunk; + TYPE biggest_q_chunk; + + TYPE a_top; + TYPE b_top; + TYPE q_top; + TYPE a_aux; + TYPE b_aux; + TYPE q_aux; + TYPE a_neg; + TYPE b_neg; + TYPE q_neg; + TYPE q_neg_2; + TYPE a_ind; + TYPE b_ind; + TYPE b2_ind; + + TYPE is_overflow; + + std::vector a_64_chunks(4); + std::vector b_64_chunks(4); + std::vector r_64_chunks(4); + std::vector q_64_chunks(4); + + std::vector a_chunks(chunk_amount); + std::vector b_input_chunks(chunk_amount); + std::vector b_chunks(chunk_amount); + std::vector r_chunks(chunk_amount); + std::vector q_chunks(chunk_amount); + std::vector v_chunks(chunk_amount); + std::vector b_abs_chunks(chunk_amount); + std::vector q_abs_chunks(chunk_amount); + std::vector q_out_chunks(chunk_amount); + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type a = current_state.stack_top(); + zkevm_word_type b_input = current_state.stack_top(1); + + bool overflow = (integral_type(a) == zkevm_modulus - 1) && + (integral_type(b_input) == zkevm_modulus / 2); + zkevm_word_type b = overflow ? 1 : b_input; + is_overflow = overflow; + + auto is_negative = [](zkevm_word_type x) { + return (integral_type(x) > zkevm_modulus / 2 - 1); + }; + auto negate_word = [](zkevm_word_type x) { + return zkevm_word_type(zkevm_modulus - integral_type(x)); + }; + auto abs_word = [&is_negative, &negate_word](zkevm_word_type x) { + return is_negative(x) ? negate_word(x) : x; + }; + + zkevm_word_type a_abs = abs_word(a), b_abs = abs_word(b); + + integral_type r_integral = + (b != 0u) ? integral_type(a_abs) / integral_type(b_abs) : 0u; + zkevm_word_type r_abs = r_integral, + q_abs = b != 0u ? integral_type(a_abs) % integral_type(b_abs) : a_abs, + r = (is_negative(a) == is_negative(b)) ? r_abs + : negate_word(r_abs), + q = is_negative(a) ? negate_word(q_abs) : q_abs; + + zkevm_word_type q_out = b != 0u ? q : 0; // according to EVM spec a % 0 = 0 + bool t_last = integral_type(q_abs) < integral_type(b_abs); + zkevm_word_type v = zkevm_word_type(integral_type(q_abs) + + integral_type(t_last) * zkevm_modulus - + integral_type(b_abs)); + zkevm_word_type result = is_div ? r : q_out; + + a_chunks = zkevm_word_to_field_element(a); + b_input_chunks = zkevm_word_to_field_element(b_input); + b_chunks = zkevm_word_to_field_element(b); + r_chunks = zkevm_word_to_field_element(r); + q_chunks = zkevm_word_to_field_element(q); + v_chunks = zkevm_word_to_field_element(v); + b_abs_chunks = zkevm_word_to_field_element(b_abs); + q_abs_chunks = zkevm_word_to_field_element(q_abs); + q_out_chunks = zkevm_word_to_field_element(q_out); + + // note that we don't assign 64-chunks for s/N, as we can build them + // from 16-chunks with constraints under the same logic we only assign + // the 16-bit chunks for carries + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + // caluclate first row carries + first_carryless = first_carryless_construct(a_64_chunks, b_64_chunks, + r_64_chunks, q_64_chunks); + auto first_row_carries = first_carryless.data.base() >> 128; + value_type c_1 = + static_cast(first_row_carries & (two_64 - 1).data.base()); + c_2 = static_cast(first_row_carries >> 64); + c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + auto second_row_carries = + (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks, + q_64_chunks) + + c_1 + c_2 * two_64) + .data.base() >> + 128; + + // value_type + c_1_64 = chunk_sum_64(c_1_chunks, 0); + + auto third_row_carries = + third_carryless_construct(b_64_chunks, r_64_chunks).data.base() >> 128; + + b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + a_sum = std::accumulate(a_chunks.begin(), a_chunks.end(), value_type(0)) - + 16 * 65535; + q_sum = std::accumulate(q_chunks.begin(), q_chunks.end(), value_type(0)); + b_input_sum = std::accumulate(b_input_chunks.begin(), b_input_chunks.end(), + value_type(0)); + b_lower_sum = + b_input_sum - + b_input_chunks[chunk_amount - 1]; // all chunks except the last + b2 = b_input_chunks[chunk_amount - 1] - two_15; + + bool a_indicator = a_sum == 0; + bool b_indicator = b_lower_sum == 0; + bool b2_indicator = b2 == 0; + // a_ind and b_ind needs to be 1 when overflow is 1 + a_ind = a_indicator; + b_ind = b_indicator; + b2_ind = b2_indicator; + b_lower_sum_inverse = b_indicator ? 0 : b_lower_sum.inversed(); + b_sum_inverse = b_sum == 0 ? 0 : b_sum.inversed(); + b2_inverse = b2 == 0 ? 0 : b2.inversed(); + a_sum_inverse = a_indicator ? 0 : a_sum.inversed(); + + b_zero = 1 - b_sum_inverse * b_sum; + b_nonzero = b_sum_inverse * b_sum; + + // compute signs of a,b and q + // x + 2^15 = x_aux + 2^16*x_neg + biggest_a_chunk = integral_type(a) >> (256 - 16); + biggest_b_chunk = integral_type(b) >> (256 - 16); + biggest_q_chunk = integral_type(q) >> (256 - 16); + + a_aux = (biggest_a_chunk > two_15 - 1) ? (biggest_a_chunk - two_15) + : biggest_a_chunk + two_15; + a_neg = (biggest_a_chunk > two_15 - 1); + a_top = a_aux + two_16 * a_neg - two_15; + + b_aux = (biggest_b_chunk > two_15 - 1) ? (biggest_b_chunk - two_15) + : biggest_b_chunk + two_15; + b_neg = (biggest_b_chunk > two_15 - 1); + b_top = b_aux + two_16 * b_neg - two_15; + + q_aux = (biggest_q_chunk > two_15 - 1) ? (biggest_q_chunk - two_15) + : biggest_q_chunk + two_15; + q_neg = (biggest_q_chunk > two_15 - 1); + q_top = q_aux + two_16 * q_neg - two_15; + + carry[0][0] = 0; + carry[1][0] = 0; + carry[2][0] = 0; + // b + |b| = 2^256 carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[0][i + 1] = + (carry[0][i] + b_chunks[3 * i] + b_abs_chunks[3 * i] + + (b_chunks[3 * i + 1] + b_abs_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + b_abs_chunks[3 * i + 2]) * two_32) >= + two_48; + } + // The last carry, if b + |b| is ever needed, should be 1 anyway, so we + // don't store it + + // q + |q| = 2^256 carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[1][i + 1] = + (carry[1][i] + q_chunks[3 * i] + q_abs_chunks[3 * i] + + (q_chunks[3 * i + 1] + q_abs_chunks[3 * i + 1]) * two_16 + + (q_chunks[3 * i + 2] + q_abs_chunks[3 * i + 2]) * two_32) >= + two_48; + } + // The last carry, if q + |q| is ever needed, should be 1 anyway, so we + // don't store it + + // |q| < |b| <=> |b| + v = |q| + 2^T, i.e. the last carry is 1. + // We use t to store the addition carries and enforce the above constraint + // if b != 0 + // |b| + v carries + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[2][i + 1] = + (carry[2][i] + b_abs_chunks[3 * i] + v_chunks[3 * i] + + (b_abs_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_abs_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32) >= + two_48; + } + carry[2][carry_amount] = + (carry[2][carry_amount - 1] + b_abs_chunks[3 * (carry_amount - 1)] + + v_chunks[3 * (carry_amount - 1)]) >= two_16; + } + + allocate(b_zero, 39, 2); + allocate(b_nonzero, 39, 3); + allocate(b_neg, 39, 1); + allocate(is_overflow, 32, 0); + allocate(q_neg, 39, 4); + + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(a_chunks[i], i, 0); + allocate(b_input_chunks[i], i + chunk_amount, 0); + allocate(b_chunks[i], i, 1); + allocate(b_abs_chunks[i], i + chunk_amount, 1); + allocate(r_chunks[i], i, 2); + allocate(v_chunks[i], i + chunk_amount, 2); + allocate(q_chunks[i], i, 3); + allocate(q_abs_chunks[i], i + chunk_amount, 3); + constrain(b_zero * r_chunks[i]); + + if (i == 0) { + constrain(b_chunks[0] - is_overflow * (1 - b_input_chunks[0]) - + b_input_chunks[0]); + } else { + constrain(b_chunks[i] - (1 - is_overflow) * b_input_chunks[i]); + }; + + // if b_neg = 0, we should have b = |b| + constrain((1 - b_neg) * (b_chunks[i] - b_abs_chunks[i])); + // if q_neg = 0, we should have q = |q| + constrain((1 - q_neg) * (q_chunks[i] - q_abs_chunks[i])); + + if (!is_div) { + allocate(q_out_chunks[i], i, 4); + constrain(b_nonzero * (q_chunks[i] - q_out_chunks[i]) + + (1 - b_nonzero) * q_out_chunks[i]); + constrain(b_nonzero * (q_chunks[i] - q_out_chunks[i]) + + (1 - b_nonzero) * q_out_chunks[i]); + res[i] = q_out_chunks[i]; + } else { + res[i] = r_chunks[i]; + } + } + + + allocate(carry[0][0], 32, 1); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[0][i + 1], 33 + i, 1); + constrain(b_neg * carry_on_addition_constraint( + b_chunks[3 * i], b_chunks[3 * i + 1], + b_chunks[3 * i + 2], b_abs_chunks[3 * i], + b_abs_chunks[3 * i + 1], b_abs_chunks[3 * i + 2], + 0, 0, 0, carry[0][i], carry[0][i + 1], + i == 0)); + constrain(b_neg * carry[0][i + 1] * (1 - carry[0][i + 1])); + } + constrain(b_neg * last_carry_on_addition_constraint( + b_chunks[3 * (carry_amount - 1)], + b_abs_chunks[3 * (carry_amount - 1)], 0, + carry[0][carry_amount - 1], 1)); + + allocate(carry[1][0], 32, 4); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[1][i + 1], 33 + i, 4); + constrain(q_neg * carry_on_addition_constraint( + q_chunks[3 * i], q_chunks[3 * i + 1], + q_chunks[3 * i + 2], q_abs_chunks[3 * i], + q_abs_chunks[3 * i + 1], q_abs_chunks[3 * i + 2], + 0, 0, 0, carry[1][i], carry[1][i + 1], + i == 0)); + constrain(q_neg * carry[1][i + 1] * (1 - carry[1][i + 1])); + } + constrain(q_neg * last_carry_on_addition_constraint( + q_chunks[3 * (carry_amount - 1)], + q_abs_chunks[3 * (carry_amount - 1)], 0, + carry[1][carry_amount - 1], 1)); + + allocate(carry[2][0], 32, 3); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[2][i + 1], 33 + i, 2); + constrain(carry_on_addition_constraint( + b_abs_chunks[3 * i], b_abs_chunks[3 * i + 1], b_abs_chunks[3 * i + 2], + v_chunks[3 * i], v_chunks[3 * i + 1], v_chunks[3 * i + 2], + q_abs_chunks[3 * i], q_abs_chunks[3 * i + 1], q_abs_chunks[3 * i + 2], + carry[2][i], carry[2][i + 1], i == 0)); + constrain(carry[2][i + 1] * (1 - carry[2][i + 1])); + } + + allocate(carry[2][carry_amount], 38, 2); + constrain(last_carry_on_addition_constraint( + b_abs_chunks[3 * (carry_amount - 1)], v_chunks[3 * (carry_amount - 1)], + q_abs_chunks[3 * (carry_amount - 1)], carry[2][carry_amount - 1], + carry[2][carry_amount])); + // last carry is 0 or 1, but should be 1 if b_nonzero = 1 + constrain((b_nonzero + (1 - b_nonzero) * carry[2][carry_amount]) * + (1 - carry[2][carry_amount])); + + allocate(first_carryless, 40, 4); + allocate(c_1_64, 41, 4); + allocate(c_2, 42, 4); + constrain(c_2 * (c_2 - 1)); + constrain(first_carryless - c_1_64 * two_128 - c_2 * two_192); + allocate(second_row_carries, 43, 4); + constrain(second_row_carries + c_1_64 + c_2 * two_64); + allocate(third_row_carries, 44, 4); + constrain(third_row_carries); + allocate(b_sum, 33, 0); + allocate(b_sum_inverse, 34, 0); + allocate(b_lower_sum, 35, 0); + allocate(b_lower_sum_inverse, 36, 0); + constrain(b_sum_inverse * (b_sum_inverse * b_sum - 1)); + constrain(b_sum * (b_sum_inverse * b_sum - 1)); + constrain(b_lower_sum_inverse * (b_lower_sum_inverse * b_lower_sum - 1)); + constrain(b_lower_sum * (b_lower_sum_inverse * b_lower_sum - 1)); + + allocate(b_64_chunks[3], 16, 4); + allocate(r_64_chunks[3], 17, 4); + constrain(b_64_chunks[3] * r_64_chunks[3]); + + + allocate(a_neg, 40, 1); + allocate(a_top, 41, 1); + allocate(a_aux, 42, 1); + constrain(a_neg * (1 - a_neg)); + constrain(a_top + two_15 - two_16 * a_neg - a_aux); + + allocate(b_top, 43, 1); + allocate(b_aux, 44, 1); + // b_top + 2^15 = b_aux + 2^16 * b_neg + constrain(b_neg * (1 - b_neg)); + constrain(b_top + two_15 - two_16 * b_neg - b_aux); + + allocate(q_top, 45, 1); + allocate(q_aux, 46, 1); + + //q_top + 2^15 = q_aux + 2^16 * q_neg + constrain(q_neg * (1 - q_neg)); + q_neg_2 = q_neg; + allocate(q_neg_2, 40,2); + constrain(q_top + two_15 - two_16 * q_neg_2 - q_aux); + + allocate(q_sum, 47, 1); + constrain(q_sum * (a_neg - q_neg_2)); + + allocate(a_sum, 37, 0); + allocate(a_sum_inverse, 38, 0); + constrain(a_sum * (1 - a_sum * a_sum_inverse)); + + allocate(a_ind, 39, 0); + allocate(b_ind, 40, 0); + allocate(b2_ind, 41, 0); + allocate(b2_inverse, 42, 0); + + constrain((b_input_chunks[chunk_amount - 1] - two_15) * + (1 - (b_input_chunks[chunk_amount - 1] - two_15) * b2_inverse)); + + constrain(a_ind - (1 - a_sum * a_sum_inverse)); + constrain(b_ind - (1 - b_lower_sum * b_lower_sum_inverse)); + constrain(b2_ind - + (1 - (b_input_chunks[chunk_amount - 1] - two_15) * b2_inverse)); + constrain(is_overflow - a_ind * b_ind * b2_ind); + + auto A_128 = chunks16_to_chunks128_reversed(a_chunks); + auto B_128 = chunks16_to_chunks128_reversed(b_input_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE A0, A1, B0, B1, Res0, Res1; + + A0 = A_128.first; + A1 = A_128.second; + B0 = B_128.first; + B1 = B_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + allocate(A0, 44, 0); + allocate(A1, 45, 0); + allocate(B0, 46, 0); + allocate(B1, 47, 0); + if (is_div){ + allocate(Res0, 46, 2); + allocate(Res1, 47, 2); + } + else{ + allocate(Res0, 46, 4); + allocate(Res1, 47, 4);} + + if constexpr (stage == GenerationStage::CONSTRAINTS) { + constrain(current_state.pc_next() - current_state.pc(4) - + 1); // PC transition + constrain(current_state.gas(4) - current_state.gas_next() - + 5); // GAS transition + constrain(current_state.stack_size(4) - current_state.stack_size_next() - + 1); // stack_size transition + constrain(current_state.memory_size(4) - + current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(4) - + 3); // rw_counter transition + std::vector tmp; + + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1), + TYPE(0), // is_write + A0, + A1}; + lookup(tmp, "zkevm_rw"); + + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(2), + current_state.stack_size(2) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(2) + 1, + TYPE(0), // is_write + B0, + B1}; + + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(3), + current_state.stack_size(3) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(3) + 2, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } + } + }; + + template + class zkevm_sdiv_smod_operation : public opcode_abstract { + public: + zkevm_sdiv_smod_operation(bool _is_div) : is_div(_is_div) {} + virtual std::size_t rows_amount() override { return 5; } + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state) override { + zkevm_sdiv_smod_bbf bbf_obj( + context, current_state, is_div); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state) override { + zkevm_sdiv_smod_bbf bbf_obj( + context, current_state, is_div); + } + + protected: + bool is_div; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/shl.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/shl.hpp new file mode 100644 index 0000000000..f8692c6094 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/shl.hpp @@ -0,0 +1,366 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_shl_bbf : public generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + using value_type = typename FieldType::value_type; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two_128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two_192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_consrtruct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return a_64_chunks[0] * b_64_chunks[0] + + two_64 * + (a_64_chunks[0] * b_64_chunks[1] + a_64_chunks[1] * b_64_chunks[0]) - + r_64_chunks[0] - two_64 * r_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks) { + return (a_64_chunks[0] * b_64_chunks[2] + a_64_chunks[1] * b_64_chunks[1] + + a_64_chunks[2] * b_64_chunks[0] - r_64_chunks[2]) + + two_64 * + (a_64_chunks[0] * b_64_chunks[3] + a_64_chunks[1] * b_64_chunks[2] + + a_64_chunks[2] * b_64_chunks[1] + a_64_chunks[3] * b_64_chunks[0] - + r_64_chunks[3]); + } + + std::vector res; + + public: + zkevm_shl_bbf(context_type &context_object, + const opcode_input_type ¤t_state) + : generic_component(context_object, false), + res(chunk_amount) { + using integral_type = zkevm_word_integral_type; + + TYPE first_carryless; + TYPE second_carryless; + + TYPE b0p; + TYPE b0pp; + TYPE b0ppp; + TYPE b0p_range_check; + TYPE b0pp_range_check; + TYPE b0ppp_range_check; + TYPE I1; + TYPE I2; + TYPE z; + TYPE tp; + TYPE two_powers; + TYPE sum_b; + + std::vector a_64_chunks(4); + std::vector b_64_chunks(4); + std::vector r_64_chunks(4); + + std::vector c_1_chunks(4); + std::vector c_3_chunks(4); + TYPE c_1; + TYPE c_2; + TYPE c_3; + TYPE c_4; + + TYPE c_1_64; + TYPE c_3_64; + + std::vector input_b_chunks(chunk_amount); + std::vector a_chunks(chunk_amount); + std::vector b_chunks(chunk_amount); + std::vector r_chunks(chunk_amount); + + std::vector indic_1(chunk_amount); + std::vector indic_2(chunk_amount); + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type input_b = current_state.stack_top(); + zkevm_word_type a = current_state.stack_top(1); + + int shift = + (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + + zkevm_word_type result = zkevm_word_type(integral_type(a) << shift); + + zkevm_word_type b = zkevm_word_type(integral_type(1) << shift); + + input_b_chunks = zkevm_word_to_field_element(input_b); + a_chunks = zkevm_word_to_field_element(a); + b_chunks = zkevm_word_to_field_element(b); + r_chunks = zkevm_word_to_field_element(result); + + b0p = integral_type(input_b) % 16; + b0pp = (integral_type(input_b) / 16) % 16; + b0ppp = (integral_type(input_b) % 65536) / 256; + I1 = b0ppp.is_zero() ? 0 : b0ppp.inversed(); + + sum_b = 0; + for (std::size_t i = 1; i < chunk_amount; i++) { + sum_b += input_b_chunks[i]; + } + I2 = sum_b.is_zero() ? 0 : sum_b.inversed(); + z = (1 - b0ppp * I1) * + (1 - sum_b * I2); // z is zero if input_b >= 256, otherwise it is 1 + tp = z * (static_cast(1) << int(integral_type(input_b) % 16)); + + // note that we don't assign 64-chunks for a/b, as we can build them from + // 16-chunks with constraints under the same logic we only assign the 16 - + // bit + + // chunks for carries + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + } + // caluclate first row carries + first_carryless = + first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks); + auto first_row_carries = + first_carryless_consrtruct(a_64_chunks, b_64_chunks, r_64_chunks) + .data.base() >> + 128; + c_1 = static_cast(first_row_carries & (two_64 - 1).data.base()); + c_2 = static_cast(first_row_carries >> 64); + c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + second_carryless = + second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks); + auto second_row_carries = + (second_carryless_construct(a_64_chunks, b_64_chunks, r_64_chunks) + + c_1 + c_2 * two_64) + .data.base() >> + 128; + c_3 = static_cast(second_row_carries & (two_64 - 1).data.base()); + c_4 = static_cast(second_row_carries >> 64); + c_3_chunks = chunk_64_to_16(c_3); + + c_1_64 = chunk_sum_64(c_1_chunks, 0); + c_3_64 = chunk_sum_64(c_3_chunks, 0); + + // lookup constrain b0p < 16, b0pp < 16, b0ppp < 256 + b0p_range_check = 4096 * b0p; + b0pp_range_check = 4096 * b0pp; + b0ppp_range_check = 256 * b0ppp; + + two_powers = 0; + unsigned int pow = 1; + for (std::size_t i = 0; i < chunk_amount; i++) { + indic_1[i] = (b0p - i).is_zero() ? 0 : (b0p - i).inversed(); + indic_2[i] = (b0pp - i).is_zero() ? 0 : (b0pp - i).inversed(); + two_powers += (1 - (b0p - i) * indic_1[i]) * pow; + pow *= 2; + } + } + + allocate(b0p_range_check, 0, 2); + allocate(b0pp_range_check, 1, 2); + allocate(b0ppp_range_check, 2, 2); + for (std::size_t i = 0; i < 4; i++) { + allocate(c_1_chunks[i], 3 + i, 2); + allocate(c_3_chunks[i], 7 + i, 2); + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(a_chunks[i], i, 0); + allocate(b_chunks[i], i + chunk_amount, 0); + allocate(input_b_chunks[i], i, 1); + allocate(r_chunks[i], i + chunk_amount, 1); + res[i] = r_chunks[i]; + } + + allocate(tp, 14, 2); + allocate(z, 15, 2); + allocate(I1, 33, 0); + allocate(I2, 34, 0); + + allocate(b0p, 11, 2); + allocate(b0pp, 12, 2); + allocate(b0ppp, 13, 2); + allocate(two_powers, 32, 0); + allocate(sum_b, 35, 0); + + constrain(tp - z * two_powers); + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(indic_1[i], i + 2 * chunk_amount, 1); + allocate(indic_2[i], i + 2 * chunk_amount, 2); + constrain((b0p - i) * (1 - (b0p - i) * indic_1[i])); + constrain((b0pp - i) * (1 - (b0pp - i) * indic_2[i])); + constrain(b_chunks[i] - tp * (1 - (b0pp - i) * indic_2[i])); + } + + constrain(input_b_chunks[0] - b0p - 16 * b0pp - 256 * b0ppp); + constrain(b0ppp * (1 - b0ppp * I1)); + + constrain(sum_b * (1 - sum_b * I2)); + constrain(z - (1 - b0ppp * I1) * (1 - sum_b * I2)); + + allocate(first_carryless, 16, 2); + allocate(second_carryless, 17, 2); + allocate(c_1_64, 18, 2); + allocate(c_2, 19, 2); + allocate(c_3_64, 20, 2); + allocate(c_4, 21, 2); + + constrain(first_carryless - c_1_64 * two_128 - c_2 * two_192); + constrain(second_carryless + c_1_64 + c_2 * two_64 - c_3_64 * two_128 - + c_4 * two_192); + // add constraints for c_2/c_4: c_2 is 0/1, c_4 is 0/1/2/3 + constrain(c_2 * (c_2 - 1)); + constrain(c_4 * (c_4 - 1) * (c_4 - 2) * (c_4 - 3)); + + auto A_128 = chunks16_to_chunks128_reversed(a_chunks); + auto B_128 = chunks16_to_chunks128_reversed(input_b_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE A0, A1, B0, B1, Res0, Res1; + A0 = A_128.first; + A1 = A_128.second; + B0 = B_128.first; + B1 = B_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + allocate(A0, 36, 0); + allocate(A1, 37, 0); + allocate(B0, 38, 0); + allocate(B1, 39, 0); + allocate(Res0, 40, 0); + allocate(Res1, 41, 0); + + if constexpr (stage == GenerationStage::CONSTRAINTS) { + constrain(current_state.pc_next() - current_state.pc(2) - + 1); // PC transition + constrain(current_state.gas(2) - current_state.gas_next() - + 3); // GAS transition + constrain(current_state.stack_size(2) - current_state.stack_size_next() - + 1); // stack_size transition + constrain(current_state.memory_size(2) - + current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(2) - + 3); // rw_counter transition + std::vector tmp; + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0), + TYPE(0), // is_write + B0, + B1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 1, + TYPE(0), // is_write + A0, + A1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + 2, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } + } + }; + + template + class zkevm_shl_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state) override { + zkevm_shl_bbf bbf_obj(context, + current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state) override { + zkevm_shl_bbf bbf_obj(context, + current_state); + } + virtual std::size_t rows_amount() override { return 3; } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/shr.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/shr.hpp new file mode 100644 index 0000000000..dd9378ba02 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/shr.hpp @@ -0,0 +1,454 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_shr_bbf : public generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + using value_type = typename FieldType::value_type; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const std::size_t carry_amount = 16 / 3 + 1; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two_128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two_192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + template + T chunk_sum_64(const std::vector &chunks, const unsigned char chunk_idx) const { + BOOST_ASSERT(chunk_idx < 4); + return chunks[4 * chunk_idx] + chunks[4 * chunk_idx + 1] * two_16 + + chunks[4 * chunk_idx + 2] * two_32 + chunks[4 * chunk_idx + 3] * two_48; + } + + template + T first_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return r_64_chunks[0] * b_64_chunks[0] + q_64_chunks[0] + + two_64 * (r_64_chunks[0] * b_64_chunks[1] + + r_64_chunks[1] * b_64_chunks[0] + q_64_chunks[1]) - + a_64_chunks[0] - two_64 * a_64_chunks[1]; + } + + template + T second_carryless_construct(const std::vector &a_64_chunks, + const std::vector &b_64_chunks, + const std::vector &r_64_chunks, + const std::vector &q_64_chunks) const { + return (r_64_chunks[0] * b_64_chunks[2] + r_64_chunks[1] * b_64_chunks[1] + + r_64_chunks[2] * b_64_chunks[0] + q_64_chunks[2] - a_64_chunks[2]) + + two_64 * + (r_64_chunks[0] * b_64_chunks[3] + r_64_chunks[1] * b_64_chunks[2] + + r_64_chunks[2] * b_64_chunks[1] + r_64_chunks[3] * b_64_chunks[0] + + q_64_chunks[3] - a_64_chunks[3]); + } + + template + T third_carryless_construct(const std::vector &b_64_chunks, + const std::vector &r_64_chunks) const { + return (r_64_chunks[1] * b_64_chunks[3] + r_64_chunks[2] * b_64_chunks[2] + + r_64_chunks[3] * b_64_chunks[1]) + + two_64 * + (r_64_chunks[2] * b_64_chunks[3] + r_64_chunks[3] * b_64_chunks[2]); + } + + TYPE carry_on_addition_constraint(TYPE a_0, TYPE a_1, TYPE a_2, TYPE b_0, TYPE b_1, + TYPE b_2, TYPE r_0, TYPE r_1, TYPE r_2, + TYPE last_carry, TYPE result_carry, + bool first_constraint = false) { + TYPE res; + if (first_constraint) { + // no last carry for first constraint + res = (a_0 + b_0) + (a_1 + b_1) * two_16 + (a_2 + b_2) * two_32 - r_0 - + r_1 * two_16 - r_2 * two_32 - result_carry * two_48; + } else { + res = last_carry + (a_0 + b_0) + (a_1 + b_1) * two_16 + + (a_2 + b_2) * two_32 - r_0 - r_1 * two_16 - r_2 * two_32 - + result_carry * two_48; + } + return res; + }; + TYPE last_carry_on_addition_constraint(TYPE a_0, TYPE b_0, TYPE r_0, + TYPE last_carry, TYPE result_carry) { + TYPE res = (last_carry + a_0 + b_0 - r_0 - result_carry * two_16); + return res; + }; + + std::vector res; + + public: + zkevm_shr_bbf(context_type &context_object, + const opcode_input_type ¤t_state) + : generic_component(context_object, false), + res(chunk_amount) { + using integral_type = zkevm_word_integral_type; + + TYPE first_carryless; + TYPE second_carryless; + TYPE third_carryless; + + TYPE b0p; + TYPE b0pp; + TYPE b0ppp; + TYPE b0p_range_check; + TYPE b0pp_range_check; + TYPE b0ppp_range_check; + TYPE I1; + TYPE I2; + TYPE z; + TYPE tp; + TYPE two_powers; + TYPE sum_part_b; + TYPE b_sum; + TYPE b_sum_inverse; + TYPE b_zero; + + std::vector a_64_chunks(4); + std::vector b_64_chunks(4); + std::vector r_64_chunks(4); + std::vector q_64_chunks(4); + + std::vector c_1_chunks(4); + std::vector c_3_chunks(4); + TYPE c_1; + TYPE c_2; + TYPE c_3; + TYPE c_4; + + TYPE c_1_64; + TYPE c_3_64; + + std::vector input_b_chunks(chunk_amount); + std::vector a_chunks(chunk_amount); + std::vector b_chunks(chunk_amount); + std::vector r_chunks(chunk_amount); + std::vector q_chunks(chunk_amount); + std::vector v_chunks(chunk_amount); + + std::vector indic_1(chunk_amount); + std::vector indic_2(chunk_amount); + + TYPE carry[carry_amount + 1]; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type input_b = current_state.stack_top(); + zkevm_word_type a = current_state.stack_top(1); + + int shift = + (integral_type(input_b) < 256) ? int(integral_type(input_b)) : 256; + integral_type r_integral = integral_type(a) >> shift; + + zkevm_word_type b = zkevm_word_type(integral_type(1) << shift); + + zkevm_word_type result = + r_integral; + zkevm_word_type q = b != 0u ? integral_type(a) % integral_type(b) : a; + + bool t_last = integral_type(q) < integral_type(b); + zkevm_word_type v = zkevm_word_type(integral_type(q) + + integral_type(t_last) * zkevm_modulus - + integral_type(b)); + + input_b_chunks = zkevm_word_to_field_element(input_b); + a_chunks = zkevm_word_to_field_element(a); + b_chunks = zkevm_word_to_field_element(b); + r_chunks = zkevm_word_to_field_element(result); + q_chunks = zkevm_word_to_field_element(q); + v_chunks = zkevm_word_to_field_element(v); + + b0p = integral_type(input_b) % 16; + b0pp = (integral_type(input_b) / 16) % 16; + b0ppp = (integral_type(input_b) % 65536) / 256; + I1 = b0ppp.is_zero() ? 0 : b0ppp.inversed(); + + sum_part_b = 0; + b_sum = std::accumulate(b_chunks.begin(), b_chunks.end(), value_type(0)); + for (std::size_t i = 1; i < chunk_amount; i++) { + sum_part_b += input_b_chunks[i]; + } + I2 = sum_part_b.is_zero() ? 0 : sum_part_b.inversed(); + z = (1 - b0ppp * I1) * + (1 - + sum_part_b * I2); // z is zero if input_b >= 256, otherwise it is 1 + tp = z * (static_cast(1) << int(integral_type(input_b) % 16)); + b_sum_inverse = b_sum.is_zero() ? 0 : b_sum.inversed(); + b_zero = 1 - b_sum_inverse * b_sum; + + two_powers = 0; + unsigned int pow = 1; + for (std::size_t i = 0; i < chunk_amount; i++) { + indic_1[i] = (b0p - i).is_zero() ? 0 : (b0p - i).inversed(); + indic_2[i] = (b0pp - i).is_zero() ? 0 : (b0pp - i).inversed(); + two_powers += (1 - (b0p - i) * indic_1[i]) * pow; + pow *= 2; + } + + + // note that we don't assign 64-chunks for a/b, as we can build them from + // 16-chunks with constraints under the same logic we only assign the 16 - + // bit + + // chunks for carries + for (std::size_t i = 0; i < 4; i++) { + a_64_chunks.push_back(chunk_sum_64(a_chunks, i)); + b_64_chunks.push_back(chunk_sum_64(b_chunks, i)); + r_64_chunks.push_back(chunk_sum_64(r_chunks, i)); + q_64_chunks.push_back(chunk_sum_64(q_chunks, i)); + } + // caluclate first row carries + first_carryless = first_carryless_construct(a_64_chunks, b_64_chunks, + r_64_chunks, q_64_chunks); + auto first_row_carries = first_carryless.data.base() >> 128; + + c_1 = value_type(first_row_carries & (two_64 - 1).data.base()); + c_2 = value_type(first_row_carries >> 64); + BOOST_ASSERT(first_carryless - c_1 * two_128 - c_2 * two_192 == 0); + c_1_chunks = chunk_64_to_16(c_1); + // no need for c_2 chunks as there is only a single chunk + second_carryless = second_carryless_construct( + a_64_chunks, b_64_chunks, r_64_chunks, q_64_chunks); + c_1_64 = chunk_sum_64(c_1_chunks, 0); + + third_carryless = third_carryless_construct(b_64_chunks, r_64_chunks); + + // lookup constrain b0p < 16, b0pp < 16, b0ppp < 256 + b0p_range_check = 4096 * b0p; + b0pp_range_check = 4096 * b0pp; + b0ppp_range_check = 256 * b0ppp; + + carry[0] = 0; + for (std::size_t i = 0; i < carry_amount - 1; i++) { + carry[i + 1] = + (carry[i] + b_chunks[3 * i] + v_chunks[3 * i] + + (b_chunks[3 * i + 1] + v_chunks[3 * i + 1]) * two_16 + + (b_chunks[3 * i + 2] + v_chunks[3 * i + 2]) * two_32) >= two_48; + } + carry[carry_amount] = + (carry[carry_amount - 1] + b_chunks[3 * (carry_amount - 1)] + + v_chunks[3 * (carry_amount - 1)]) >= two_16; + } + + allocate(b0p_range_check, 0, 3); + allocate(b0pp_range_check, 1, 3); + allocate(b0ppp_range_check, 2, 3); + allocate(b_zero, 32, 0); + for (std::size_t i = 0; i < 4; i++) { + allocate(c_1_chunks[i], 3 + i, 3); + } + + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(input_b_chunks[i], i, 2); + allocate(r_chunks[i], i + chunk_amount, 2); + allocate(a_chunks[i], i, 1); + allocate(b_chunks[i], i + chunk_amount, 1); + allocate(q_chunks[i], i, 0); + allocate(v_chunks[i], i + chunk_amount, 0); + res[i] = r_chunks[i]; + constrain(b_zero * r_chunks[i]); + } + + allocate(tp, 12, 3); + allocate(z, 13, 3); + allocate(I1, 40, 1); + allocate(I2, 41, 1); + allocate(two_powers, 42, 1); + + allocate(b0p, 9, 3); + allocate(b0pp, 10, 3); + allocate(b0ppp, 11, 3); + allocate(sum_part_b, 39, 1); + allocate(b_sum, 33, 0); + allocate(b_sum_inverse, 34, 0); + + constrain(tp - z * two_powers); + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(indic_1[i], i + 2 * chunk_amount, 2); + allocate(indic_2[i], i + 2 * chunk_amount, 3); + constrain((b0p - i) * (1 - (b0p - i) * indic_1[i])); + constrain((b0pp - i) * (1 - (b0pp - i) * indic_2[i])); + constrain(b_chunks[i] - tp * (1 - (b0pp - i) * indic_2[i])); + } + + constrain(b_sum_inverse * (b_sum_inverse * b_sum - 1)); + constrain(b_sum * (b_sum_inverse * b_sum - 1)); + constrain(1 - b_sum_inverse * b_sum - b_zero); + constrain(input_b_chunks[0] - b0p - 16 * b0pp - 256 * b0ppp); + constrain(b0ppp * (1 - b0ppp * I1)); + + constrain(sum_part_b * (1 - sum_part_b * I2)); + constrain((z - (1 - b0ppp * I1) * (1 - sum_part_b * I2))); + + allocate(first_carryless, 35, 0); + allocate(second_carryless, 36, 0); + allocate(third_carryless, 37, 0); + allocate(c_1_64, 38, 0); + allocate(c_2, 39, 0); + + allocate(b_64_chunks[3], 7, 3); + allocate(r_64_chunks[3], 8, 3); + + constrain(first_carryless - c_1_64 * two_128 - c_2 * two_192); + constrain(second_carryless + c_1_64 + c_2 * two_64); + constrain(c_2 * (c_2 - 1)); + constrain(third_carryless); + constrain(b_64_chunks[3] * r_64_chunks[3]); + + allocate(carry[0], 32, 1); + for (std::size_t i = 0; i < carry_amount - 1; i++) { + allocate(carry[i + 1], 33 + i, 1); + constrain(carry_on_addition_constraint( + b_chunks[3 * i], b_chunks[3 * i + 1], b_chunks[3 * i + 2], + v_chunks[3 * i], v_chunks[3 * i + 1], v_chunks[3 * i + 2], + q_chunks[3 * i], q_chunks[3 * i + 1], q_chunks[3 * i + 2], carry[i], + carry[i + 1], i == 0)); + constrain(carry[i + 1] * (1 - carry[i + 1])); + } + allocate(carry[carry_amount], 38, 1); + constrain(last_carry_on_addition_constraint( + b_chunks[3 * (carry_amount - 1)], v_chunks[3 * (carry_amount - 1)], + q_chunks[3 * (carry_amount - 1)], carry[carry_amount - 1], + carry[carry_amount])); + // carry[carry_amount] is 0 or 1, but should be 1 if z = 1 + constrain((z + (1 - z) * carry[carry_amount]) * (1 - carry[carry_amount])); + + auto A_128 = chunks16_to_chunks128_reversed(a_chunks); + auto B_128 = chunks16_to_chunks128_reversed(input_b_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE A0, A1, B0, B1, Res0, Res1; + A0 = A_128.first; + A1 = A_128.second; + B0 = B_128.first; + B1 = B_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + allocate(A0, 45, 0); + allocate(A1, 45, 1); + allocate(B0, 46, 0); + allocate(B1, 46, 1); + allocate(Res0, 47, 0); + allocate(Res1, 47, 1); + + if constexpr (stage == GenerationStage::CONSTRAINTS) { + constrain(current_state.pc_next() - current_state.pc(3) - + 1); // PC transition + constrain(current_state.gas(3) - current_state.gas_next() - + 3); // GAS transition + constrain(current_state.stack_size(3) - current_state.stack_size_next() - + 1); // stack_size transition + constrain(current_state.memory_size(3) - + current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(3) - + 3); // rw_counter transition + std::vector tmp; + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1), + TYPE(0), // is_write + B0, + B1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 1, + TYPE(0), // is_write + A0, + A1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 2, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } + } + }; + + template + class zkevm_shr_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state) override { + zkevm_shr_bbf bbf_obj(context, + current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state) override { + zkevm_shr_bbf bbf_obj(context, + current_state); + } + virtual std::size_t rows_amount() override { return 4; } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/signextend.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/signextend.hpp new file mode 100644 index 0000000000..061cfe8677 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/signextend.hpp @@ -0,0 +1,285 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class opcode_abstract; + + template + class zkevm_signextend_bbf : public generic_component { + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + using value_type = typename FieldType::value_type; + + constexpr static const std::size_t chunk_amount = 16; + constexpr static const value_type two_16 = 65536; + constexpr static const value_type two_32 = 4294967296; + constexpr static const value_type two_48 = 281474976710656; + constexpr static const value_type two_64 = 0x10000000000000000_big_uint254; + constexpr static const value_type two_128 = + 0x100000000000000000000000000000000_big_uint254; + constexpr static const value_type two_192 = + 0x1000000000000000000000000000000000000000000000000_big_uint254; + + public: + using typename generic_component::TYPE; + using typename generic_component::context_type; + + std::vector res; + + public: + zkevm_signextend_bbf(context_type &context_object, + const opcode_input_type ¤t_state) + : generic_component(context_object, false), + res(chunk_amount) { + using integral_type = zkevm_word_integral_type; + + std::vector b_chunks(chunk_amount); + std::vector x_chunks(chunk_amount); + std::vector r_chunks(chunk_amount); + std::vector indic(chunk_amount); + std::vector cur(chunk_amount); + + TYPE b_sum; + TYPE x_sum; + TYPE b_sum_inverse; + TYPE b0p; + TYPE parity; + TYPE n; + TYPE xn; + TYPE xp; + TYPE xpp; + TYPE sb; + TYPE sgn; + TYPE saux; + + TYPE range_check_n; + TYPE range_check_xp; + TYPE range_check_xpp; + TYPE range_check_saux; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + zkevm_word_type b = current_state.stack_top(); + zkevm_word_type x = current_state.stack_top(1); + + int len = (integral_type(b) < 32) ? int(integral_type(b)) + 1 : 32; + integral_type sign = (integral_type(x) << (8 * (32 - len) + 1)) >> 256; + zkevm_word_type result = + zkevm_word_type( + (((integral_type(1) << 8 * (32 - len)) - 1) << 8 * len) * sign) + + zkevm_word_type((integral_type(x) << (8 * (32 - len) + 1)) >> + (8 * (32 - len) + 1)); + // +1 because integral type is 257 bits long + + unsigned int b0 = static_cast(integral_type(b) % 65536); + unsigned int b0p_ui = (integral_type(b) > 65535) ? 32 : b0; + b0p = b0p_ui; + unsigned int parity_ui = b0p_ui%2; + parity = parity_ui; + unsigned int n_ui = (b0p_ui-parity_ui)/2; + n = n_ui; + unsigned int xn_ui = static_cast( + (integral_type(x) << (16 * (n_ui > 15 ? 16 : 15 - n_ui) + 1)) >> + (16 * 15 + 1)); + xn = xn_ui; + // +1 because integral_type is 257 bits long + unsigned int xpp_ui = xn_ui % 256; + xpp = xpp_ui; + xp = (xn - xpp) / 256; + sb = (parity == 0) ? xpp : xp; + sgn = (sb > 128); + saux = sb + 128 - sgn * 256; + + b_chunks = zkevm_word_to_field_element(b); + x_chunks = zkevm_word_to_field_element(x); + r_chunks = zkevm_word_to_field_element(result); + for (std::size_t i = 0; i < chunk_amount; i++) { + cur[i] = i; + indic[i] = (cur[i] == n) ? 0 : (cur[i]-n).inversed(); + } + + b_sum = 0; + for (std::size_t i = 1; i < chunk_amount; i++) { + b_sum += b_chunks[i]; + } + b_sum_inverse = b_sum.is_zero() ? 0 : b_sum.inversed(); + + x_sum = 0; + for (std::size_t i = 0; i < chunk_amount; i++) { + x_sum += x_chunks[i] * (1 - (i - n) * indic[i]); + } + range_check_n = 2 * n; + range_check_xp = xp * 256; + range_check_xpp = xpp * 256; + range_check_saux = saux * 256; + } + + allocate(n, 23, 1); + for (std::size_t i = 0; i < chunk_amount; i++) { + allocate(b_chunks[i], i, 0); + allocate(x_chunks[i], i + chunk_amount, 0); + allocate(r_chunks[i], i, 1); + allocate(indic[i], i + 2 * chunk_amount, 0); + res[i] = r_chunks[i]; + constrain((i - n) * (1 - (i - n) * indic[i])); + } + + allocate(b_sum, 32, 1); + allocate(b_sum_inverse, 33, 1); + allocate(x_sum, 34, 1); + allocate(b0p, 35, 1); + allocate(parity, 36, 1); + allocate(xn, 37, 1); + allocate(xp, 20, 1); + allocate(xpp, 21, 1); + allocate(sb, 38, 1); + allocate(sgn, 39, 1); + allocate(saux, 22, 1); + + constrain(b_sum * (1 - b_sum_inverse * b_sum)); + constrain((b0p - b_chunks[0] * (1 - b_sum * b_sum_inverse) - + 32 * b_sum * b_sum_inverse)); + constrain(parity * (1 - parity)); + constrain(b0p - parity - 2 * n); + // n < 32768 range check + allocate(range_check_n); + // xp, xpp,saux < 256 + allocate(range_check_xp); + allocate(range_check_xpp); + allocate(range_check_saux); + + constrain(xn - x_sum); + constrain(xn - xp * 256 - xpp); + + constrain(sb - (1 - parity) * xpp - parity * xp); + constrain(sgn * (1 - sgn)); + constrain(sb + 128 - saux - 256 * sgn); + + auto B_128 = chunks16_to_chunks128_reversed(b_chunks); + auto X_128 = chunks16_to_chunks128_reversed(x_chunks); + auto Res_128 = chunks16_to_chunks128_reversed(res); + + TYPE B0, B1, X0, X1, Res0, Res1; + B0 = B_128.first; + B1 = B_128.second; + X0 = X_128.first; + X1 = X_128.second; + Res0 = Res_128.first; + Res1 = Res_128.second; + allocate(B0, 42, 1); + allocate(B1, 43, 1); + allocate(X0, 44, 1); + allocate(X1, 45, 1); + allocate(Res0, 46, 1); + allocate(Res1, 47, 1); + + if constexpr (stage == GenerationStage::CONSTRAINTS) { + + constrain(current_state.pc_next() - current_state.pc(1) - + 1); // PC transition + constrain(current_state.gas(1) - current_state.gas_next() - + 5); // GAS transition + constrain(current_state.stack_size(1) - current_state.stack_size_next() - + 1); // stack_size transition + constrain(current_state.memory_size(1) - + current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(1) - + 3); // rw_counter transition + std::vector tmp; + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1), + TYPE(0), // is_write + B0, + B1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 1, + TYPE(0), // is_write + X0, + X1}; + lookup(tmp, "zkevm_rw"); + tmp = {TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(1), + current_state.stack_size(1) - 2, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(1) + 2, + TYPE(1), // is_write + Res0, + Res1}; + lookup(tmp, "zkevm_rw"); + } + } + }; + + template + class zkevm_signextend_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type + &context, + const opcode_input_type + ¤t_state) override { + zkevm_signextend_bbf bbf_obj( + context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type + ¤t_state) override { + zkevm_signextend_bbf bbf_obj( + context, current_state); + } + virtual std::size_t rows_amount() override { return 2; } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sload.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sload.hpp new file mode 100644 index 0000000000..e7b2924e00 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sload.hpp @@ -0,0 +1,142 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_sload_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_sload_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE K_hi; + TYPE K_lo; + std::vector V(16); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + K_hi = w_hi(current_state.stack_top()); + K_lo = w_lo(current_state.stack_top()); + auto v = w_to_16(current_state.storage(current_state.stack_top())); + std::cout << "K = " << std::hex << K_hi << " " << K_lo << std::dec << std::endl; + std::cout << "v = " << std::hex << current_state.storage(current_state.stack_top()) << std::endl; + for(std::size_t i = 0; i < 16; i++) V[i] = v[i]; + } + for(std::size_t i = 0; i < 16; i++) + allocate(V[i], i,0); + allocate(K_hi, 32, 0); + allocate(K_lo, 33, 0); + std::cout << "\tK_hi = " << K_hi << std::endl; + std::cout << "\tK_lo = " << K_lo << std::endl; + auto V_128 = chunks16_to_chunks128(V); + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + //constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition: TODO: update gas cost + constrain(current_state.stack_size(0) - current_state.stack_size_next()); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 3); // rw_counter transition + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0), + TYPE(0), // is_write + K_hi, // hi bytes are 0 + K_lo // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::storage)), + current_state.call_id(0), + TYPE(0), + K_hi, // storage_key_hi + K_lo, // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0)+1, + TYPE(0), // is_write + V_128.first, // hi bytes are 0 + V_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0), // storage_key_hi + TYPE(0), // storage_key_lo + TYPE(0), // field + current_state.rw_counter(0) + 2, + TYPE(1), // is_write + V_128.first, // hi bytes are 0 + V_128.second // addr is smaller than maximum contract size + }; + lookup(tmp, "zkevm_rw"); + } + } + }; + + template + class zkevm_sload_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_sload_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_sload_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sstore.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sstore.hpp new file mode 100644 index 0000000000..f6932bd587 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/sstore.hpp @@ -0,0 +1,138 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_sstore_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_sstore_bbf(context_type &context_object, const opcode_input_type ¤t_state): + generic_component(context_object, false) + { + TYPE K_hi; + TYPE K_lo; + std::vector V(16); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + K_hi = w_hi(current_state.stack_top()); + K_lo = w_lo(current_state.stack_top()); + std::cout << "\tKey = " << current_state.stack_top() << "=[" < + class zkevm_sstore_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_sstore_bbf bbf_obj(context, current_state); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_sstore_bbf bbf_obj(context, current_state); + } + virtual std::size_t rows_amount() override { + return 1; + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/staticcall.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/staticcall.hpp new file mode 100644 index 0000000000..2277d1b124 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/staticcall.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + + template + using zkevm_staticcall_operation = zkevm_dummy_operation; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/block/include/nil/crypto3/detail/state_adder.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/stop.hpp similarity index 51% rename from crypto3/libs/block/include/nil/crypto3/detail/state_adder.hpp rename to crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/stop.hpp index bb69c58fcc..d74bc84a27 100644 --- a/crypto3/libs/block/include/nil/crypto3/detail/state_adder.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/stop.hpp @@ -1,5 +1,5 @@ //---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2024 Elena Tatuzova // // MIT License // @@ -22,25 +22,35 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_DETAIL_STATE_ADDER_HPP -#define CRYPTO3_DETAIL_STATE_ADDER_HPP +#pragma once + +#include +#include + +#include +#include namespace nil { - namespace crypto3 { - namespace detail { - struct state_adder { - template - void operator()(T &s1, T const &s2) { - typedef typename T::size_type size_type; - size_type n = (s2.size() < s1.size() ? s2.size() : s1.size()); - for (typename T::size_type i = 0; i < n; ++i) { - s1[i] += s2[i]; - } + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_stop_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override {} + virtual std::size_t rows_amount() override { + return 2; } }; - - } // namespace detail - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLOCK_DETAIL_STATE_ADDER_HPP + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/swapx.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/swapx.hpp new file mode 100644 index 0000000000..2197a94f54 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/swapx.hpp @@ -0,0 +1,164 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include + +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class opcode_abstract; + + template + class zkevm_swapx_bbf : generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + + zkevm_swapx_bbf(context_type &context_object, const opcode_input_type ¤t_state, std::size_t x): + generic_component(context_object, false) + { + std::vector A_chunks(16); + std::vector B_chunks(16); + if constexpr( stage == GenerationStage::ASSIGNMENT ){ + // std::cout << "\tinput=" << std::hex << current_state.additional_input << std::dec << std::endl; + std::cout << "\tASSIGNMENT implemented" << std::endl; + auto A = current_state.stack_top(); + auto A16 = nil::blueprint::w_to_16(A); + auto B = current_state.stack_top(x); + auto B16 = nil::blueprint::w_to_16(B); + for( std::size_t i = 0; i < 16; i++ ){ + A_chunks[i] = A16[i]; + B_chunks[i] = B16[i]; + } + } + for( std::size_t i = 0; i < 16; i++){ + allocate(A_chunks[i], i, 0); + allocate(B_chunks[i], i+16, 0); + } + if constexpr( stage == GenerationStage::CONSTRAINTS ){ + constrain(current_state.pc_next() - current_state.pc(0) - 1); // PC transition + constrain(current_state.gas(0) - current_state.gas_next() - 3); // GAS transition + constrain(current_state.stack_size_next() - current_state.stack_size(0)); // stack_size transition + constrain(current_state.memory_size(0) - current_state.memory_size_next()); // memory_size transition + constrain(current_state.rw_counter_next() - current_state.rw_counter(0) - 4); // rw_counter transition + auto A_128 = chunks16_to_chunks128(A_chunks); + auto B_128 = chunks16_to_chunks128(B_chunks); + std::vector tmp; + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0), + TYPE(0),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - x - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 1, + TYPE(0),// is_write + B_128.first, + B_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - x - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 2, + TYPE(1),// is_write + A_128.first, + A_128.second + }; + lookup(tmp, "zkevm_rw"); + tmp = { + TYPE(rw_op_to_num(rw_operation_type::stack)), + current_state.call_id(0), + current_state.stack_size(0) - 1, + TYPE(0),// storage_key_hi + TYPE(0),// storage_key_lo + TYPE(0),// field + current_state.rw_counter(0) + 3, + TYPE(1),// is_write + B_128.first, + B_128.second + }; + lookup(tmp, "zkevm_rw"); + } + } + }; + + + template + class zkevm_swapx_operation : public opcode_abstract { + public: + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_swapx_bbf bbf_obj(context, current_state, x); + } + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) override { + zkevm_swapx_bbf bbf_obj(context, current_state, x); + } + + virtual std::size_t rows_amount() override { + return 1; + } + zkevm_swapx_operation(std::size_t _x):x(_x){ + } + protected: + std::size_t x; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/zkevm_opcodes.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/zkevm_opcodes.hpp new file mode 100644 index 0000000000..612f9f7767 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/opcodes/zkevm_opcodes.hpp @@ -0,0 +1,744 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + #define ZKEVM_OPCODE_ENUM(X) \ + X(STOP) \ + X(ADD) \ + X(MUL) \ + X(SUB) \ + X(DIV) \ + X(SDIV) \ + X(MOD) \ + X(SMOD) \ + X(ADDMOD) \ + X(MULMOD) \ + X(EXP) \ + X(SIGNEXTEND) \ + X(LT) \ + X(GT) \ + X(SLT) \ + X(SGT) \ + X(EQ) \ + X(ISZERO) \ + X(AND) \ + X(OR) \ + X(XOR) \ + X(NOT) \ + X(BYTE) \ + X(SHL) \ + X(SHR) \ + X(SAR) \ + X(KECCAK256) \ + X(ADDRESS) \ + X(BALANCE) \ + X(ORIGIN) \ + X(CALLER) \ + X(CALLVALUE) \ + X(CALLDATALOAD) \ + X(CALLDATASIZE) \ + X(CALLDATACOPY) \ + X(CODESIZE) \ + X(CODECOPY) \ + X(GASPRICE) \ + X(EXTCODESIZE) \ + X(EXTCODECOPY) \ + X(RETURNDATASIZE) \ + X(RETURNDATACOPY) \ + X(EXTCODEHASH) \ + X(BLOCKHASH) \ + X(COINBASE) \ + X(TIMESTAMP) \ + X(NUMBER) \ + X(PREVRANDAO) \ + X(GASLIMIT) \ + X(CHAINID) \ + X(SELFBALANCE) \ + X(BASEFEE) \ + X(BLOBHASH) \ + X(BLOBBASEFEE) \ + X(POP) \ + X(MLOAD) \ + X(MSTORE) \ + X(MSTORE8) \ + X(SLOAD) \ + X(SSTORE) \ + X(JUMP) \ + X(JUMPI) \ + X(PC) \ + X(MSIZE) \ + X(GAS) \ + X(JUMPDEST) \ + X(TLOAD) \ + X(TSTORE) \ + X(MCOPY) \ + X(PUSH0) \ + X(PUSH1) \ + X(PUSH2) \ + X(PUSH3) \ + X(PUSH4) \ + X(PUSH5) \ + X(PUSH6) \ + X(PUSH7) \ + X(PUSH8) \ + X(PUSH9) \ + X(PUSH10) \ + X(PUSH11) \ + X(PUSH12) \ + X(PUSH13) \ + X(PUSH14) \ + X(PUSH15) \ + X(PUSH16) \ + X(PUSH17) \ + X(PUSH18) \ + X(PUSH19) \ + X(PUSH20) \ + X(PUSH21) \ + X(PUSH22) \ + X(PUSH23) \ + X(PUSH24) \ + X(PUSH25) \ + X(PUSH26) \ + X(PUSH27) \ + X(PUSH28) \ + X(PUSH29) \ + X(PUSH30) \ + X(PUSH31) \ + X(PUSH32) \ + X(DUP1) \ + X(DUP2) \ + X(DUP3) \ + X(DUP4) \ + X(DUP5) \ + X(DUP6) \ + X(DUP7) \ + X(DUP8) \ + X(DUP9) \ + X(DUP10) \ + X(DUP11) \ + X(DUP12) \ + X(DUP13) \ + X(DUP14) \ + X(DUP15) \ + X(DUP16) \ + X(SWAP1) \ + X(SWAP2) \ + X(SWAP3) \ + X(SWAP4) \ + X(SWAP5) \ + X(SWAP6) \ + X(SWAP7) \ + X(SWAP8) \ + X(SWAP9) \ + X(SWAP10) \ + X(SWAP11) \ + X(SWAP12) \ + X(SWAP13) \ + X(SWAP14) \ + X(SWAP15) \ + X(SWAP16) \ + X(LOG0) \ + X(LOG1) \ + X(LOG2) \ + X(LOG3) \ + X(LOG4) \ + X(CREATE) \ + X(CALL) \ + X(CALLCODE) \ + X(RETURN) \ + X(DELEGATECALL) \ + X(CREATE2) \ + X(STATICCALL) \ + X(REVERT) \ + X(INVALID) \ + X(SELFDESTRUCT) \ + X(err0) \ + X(err1) \ + X(padding) + + enum zkevm_opcode { + #define ENUM_DEF(name) name, + ZKEVM_OPCODE_ENUM(ENUM_DEF) + #undef ENUM_DEF + }; + + std::uint16_t opcode_number_from_str(const std::string &str){ + if( str == "STOP" ) return 0x00; + if( str == "ADD" ) return 0x01; + if( str == "MUL" ) return 0x02; + if( str == "SUB" ) return 0x03; + if( str == "DIV" ) return 0x04; + if( str == "SDIV" ) return 0x05; + if( str == "MOD" ) return 0x06; + if( str == "SMOD" ) return 0x07; + if( str == "ADDMOD" ) return 0x08; + if( str == "MULMOD" ) return 0x09; + if( str == "EXP" ) return 0x0a; + if( str == "SIGNEXTEND" ) return 0x0b; + if( str == "LT" ) return 0x10; + if( str == "GT" ) return 0x11; + if( str == "SLT" ) return 0x12; + if( str == "SGT" ) return 0x13; + if( str == "EQ" ) return 0x14; + if( str == "ISZERO" ) return 0x15; + if( str == "AND" ) return 0x16; + if( str == "OR" ) return 0x17; + if( str == "XOR" ) return 0x18; + if( str == "NOT" ) return 0x19; + if( str == "BYTE" ) return 0x1a; + if( str == "SHL" ) return 0x1b; + if( str == "SHR" ) return 0x1c; + if( str == "SAR" ) return 0x1d; + if( str == "KECCAK256" ) return 0x20; + if( str == "ADDRESS" ) return 0x30; + if( str == "BALANCE" ) return 0x31; + if( str == "ORIGIN" ) return 0x32; + if( str == "CALLER" ) return 0x33; + if( str == "CALLVALUE" ) return 0x34; + if( str == "CALLDATALOAD" ) return 0x35; + if( str == "CALLDATASIZE" ) return 0x36; + if( str == "CALLDATACOPY" ) return 0x37; + if( str == "CODESIZE" ) return 0x38; + if( str == "CODECOPY" ) return 0x39; + if( str == "GASPRICE" ) return 0x3a; + if( str == "EXTCODESIZE" ) return 0x3b; + if( str == "EXTCODECOPY" ) return 0x3c; + if( str == "RETURNDATASIZE" ) return 0x3d; + if( str == "RETURNDATACOPY" ) return 0x3e; + if( str == "EXTCODEHASH" ) return 0x3f; + if( str == "BLOCKHASH" ) return 0x40; + if( str == "COINBASE" ) return 0x41; + if( str == "TIMESTAMP" ) return 0x42; + if( str == "NUMBER" ) return 0x43; + if( str == "PREVRANDAO" ) return 0x44; + if( str == "GASLIMIT" ) return 0x45; + if( str == "CHAINID" ) return 0x46; + if( str == "SELFBALANCE" ) return 0x47; + if( str == "BASEFEE" ) return 0x48; + if( str == "BLOBHASH" ) return 0x49; + if( str == "BLOBBASEFEE" ) return 0x4a; + if( str == "POP" ) return 0x50; + if( str == "MLOAD" ) return 0x51; + if( str == "MSTORE" ) return 0x52; + if( str == "MSTORE8" ) return 0x53; + if( str == "SLOAD" ) return 0x54; + if( str == "SSTORE" ) return 0x55; + if( str == "JUMP" ) return 0x56; + if( str == "JUMPI" ) return 0x57; + if( str == "PC" ) return 0x58; + if( str == "MSIZE" ) return 0x59; + if( str == "GAS" ) return 0x5a; + if( str == "JUMPDEST" ) return 0x5b; + if( str == "TLOAD" ) return 0x5c; + if( str == "TSTORE" ) return 0x5d; + if( str == "MCOPY" ) return 0x5e; + if( str == "PUSH0" ) return 0x5f; + if( str == "PUSH1" ) return 0x60; + if( str == "PUSH2" ) return 0x61; + if( str == "PUSH3" ) return 0x62; + if( str == "PUSH4" ) return 0x63; + if( str == "PUSH5" ) return 0x64; + if( str == "PUSH6" ) return 0x65; + if( str == "PUSH7" ) return 0x66; + if( str == "PUSH8" ) return 0x67; + if( str == "PUSH9" ) return 0x68; + if( str == "PUSH10" ) return 0x69; + if( str == "PUSH11" ) return 0x6a; + if( str == "PUSH12" ) return 0x6b; + if( str == "PUSH13" ) return 0x6c; + if( str == "PUSH14" ) return 0x6d; + if( str == "PUSH15" ) return 0x6e; + if( str == "PUSH16" ) return 0x6f; + if( str == "PUSH17" ) return 0x70; + if( str == "PUSH18" ) return 0x71; + if( str == "PUSH19" ) return 0x72; + if( str == "PUSH20" ) return 0x73; + if( str == "PUSH21" ) return 0x74; + if( str == "PUSH22" ) return 0x75; + if( str == "PUSH23" ) return 0x76; + if( str == "PUSH24" ) return 0x77; + if( str == "PUSH25" ) return 0x78; + if( str == "PUSH26" ) return 0x79; + if( str == "PUSH27" ) return 0x7a; + if( str == "PUSH28" ) return 0x7b; + if( str == "PUSH29" ) return 0x7c; + if( str == "PUSH30" ) return 0x7d; + if( str == "PUSH31" ) return 0x7e; + if( str == "PUSH32" ) return 0x7f; + if( str == "DUP1" ) return 0x80; + if( str == "DUP2" ) return 0x81; + if( str == "DUP3" ) return 0x82; + if( str == "DUP4" ) return 0x83; + if( str == "DUP5" ) return 0x84; + if( str == "DUP6" ) return 0x85; + if( str == "DUP7" ) return 0x86; + if( str == "DUP8" ) return 0x87; + if( str == "DUP9" ) return 0x88; + if( str == "DUP10" ) return 0x89; + if( str == "DUP11" ) return 0x8a; + if( str == "DUP12" ) return 0x8b; + if( str == "DUP13" ) return 0x8c; + if( str == "DUP14" ) return 0x8d; + if( str == "DUP15" ) return 0x8e; + if( str == "DUP16" ) return 0x8f; + if( str == "SWAP1" ) return 0x90; + if( str == "SWAP2" ) return 0x91; + if( str == "SWAP3" ) return 0x92; + if( str == "SWAP4" ) return 0x93; + if( str == "SWAP5" ) return 0x94; + if( str == "SWAP6" ) return 0x95; + if( str == "SWAP7" ) return 0x96; + if( str == "SWAP8" ) return 0x97; + if( str == "SWAP9" ) return 0x98; + if( str == "SWAP10" ) return 0x99; + if( str == "SWAP11" ) return 0x9a; + if( str == "SWAP12" ) return 0x9b; + if( str == "SWAP13" ) return 0x9c; + if( str == "SWAP14" ) return 0x9d; + if( str == "SWAP15" ) return 0x9e; + if( str == "SWAP16" ) return 0x9f; + if( str == "LOG0" ) return 0xa0; + if( str == "LOG1" ) return 0xa1; + if( str == "LOG2" ) return 0xa2; + if( str == "LOG3" ) return 0xa3; + if( str == "LOG4" ) return 0xa4; + if( str == "CREATE" ) return 0xf0; + if( str == "CALL" ) return 0xf1; + if( str == "CALLCODE" ) return 0xf2; + if( str == "RETURN" ) return 0xf3; + if( str == "DELEGATECALL" ) return 0xf4; + if( str == "CREATE2" ) return 0xf5; + if( str == "STATICCALL" ) return 0xfa; + if( str == "REVERT" ) return 0xfd; + if( str == "INVALID" ) return 0xfe; + if( str == "SELFDESTRUCT" ) return 0xff; + // these are not real opcodes, they are for exception processing + if( str == "err0" ) return 0x100; // not enough static gas or incorrect stack size + if( str == "err1" ) return 0x101; // not enough static gas or incorrect stack size + if( str == "padding" ) return 0x102; // empty opcode for the fixed circuit size + BOOST_ASSERT(false); + return 0x102; + } + + zkevm_opcode opcode_from_number(std::size_t number){ + if( number == 0x00) return zkevm_opcode::STOP; + if( number == 0x01 ) return zkevm_opcode::ADD; + if( number == 0x02 ) return zkevm_opcode::MUL; + if( number == 0x03) return zkevm_opcode::SUB; + if( number == 0x04) return zkevm_opcode::DIV; + if( number == 0x05) return zkevm_opcode::SDIV; + if( number == 0x06) return zkevm_opcode::MOD; + if( number == 0x07) return zkevm_opcode::SMOD; + if( number == 0x08) return zkevm_opcode::ADDMOD; + if( number == 0x09) return zkevm_opcode::MULMOD; + if( number == 0x0a) return zkevm_opcode::EXP; + if( number == 0x0b) return zkevm_opcode::SIGNEXTEND; + if( number == 0x10) return zkevm_opcode::LT; + if( number == 0x11) return zkevm_opcode::GT; + if( number == 0x12) return zkevm_opcode::SLT; + if( number == 0x13) return zkevm_opcode::SGT; + if( number == 0x14) return zkevm_opcode::EQ; + if( number == 0x15) return zkevm_opcode::ISZERO; + if( number == 0x16) return zkevm_opcode::AND; + if( number == 0x17) return zkevm_opcode::OR; + if( number == 0x18) return zkevm_opcode::XOR; + if( number == 0x19) return zkevm_opcode::NOT; + if( number == 0x1a) return zkevm_opcode::BYTE; + if( number == 0x1b) return zkevm_opcode::SHL; + if( number == 0x1c) return zkevm_opcode::SHR; + if( number == 0x1d) return zkevm_opcode::SAR; + if( number == 0x20) return zkevm_opcode::KECCAK256; + if( number == 0x30) return zkevm_opcode::ADDRESS; + if( number == 0x31) return zkevm_opcode::BALANCE; + if( number == 0x32) return zkevm_opcode::ORIGIN; + if( number == 0x33) return zkevm_opcode::CALLER; + if( number == 0x34) return zkevm_opcode::CALLVALUE; + if( number == 0x35) return zkevm_opcode::CALLDATALOAD; + if( number == 0x36) return zkevm_opcode::CALLDATASIZE; + if( number == 0x37) return zkevm_opcode::CALLDATACOPY; + if( number == 0x38) return zkevm_opcode::CODESIZE; + if( number == 0x39) return zkevm_opcode::CODECOPY; + if( number == 0x3a) return zkevm_opcode::GASPRICE; + if( number == 0x3b) return zkevm_opcode::EXTCODESIZE; + if( number == 0x3c) return zkevm_opcode::EXTCODECOPY; + if( number == 0x3d) return zkevm_opcode::RETURNDATASIZE; + if( number == 0x3e) return zkevm_opcode::RETURNDATACOPY; + if( number == 0x3f) return zkevm_opcode::EXTCODEHASH; + if( number == 0x40) return zkevm_opcode::BLOCKHASH; + if( number == 0x41) return zkevm_opcode::COINBASE; + if( number == 0x42) return zkevm_opcode::TIMESTAMP; + if( number == 0x43) return zkevm_opcode::NUMBER; + if( number == 0x44) return zkevm_opcode::PREVRANDAO; + if( number == 0x45) return zkevm_opcode::GASLIMIT; + if( number == 0x46) return zkevm_opcode::CHAINID; + if( number == 0x47) return zkevm_opcode::SELFBALANCE; + if( number == 0x48) return zkevm_opcode::BASEFEE; + if( number == 0x49) return zkevm_opcode::BLOBHASH; + if( number == 0x4a) return zkevm_opcode::BLOBBASEFEE; + if( number == 0x50) return zkevm_opcode::POP; + if( number == 0x51) return zkevm_opcode::MLOAD; + if( number == 0x52) return zkevm_opcode::MSTORE; + if( number == 0x53) return zkevm_opcode::MSTORE8; + if( number == 0x54) return zkevm_opcode::SLOAD; + if( number == 0x55) return zkevm_opcode::SSTORE; + if( number == 0x56) return zkevm_opcode::JUMP; + if( number == 0x57) return zkevm_opcode::JUMPI; + if( number == 0x58) return zkevm_opcode::PC; + if( number == 0x59) return zkevm_opcode::MSIZE; + if( number == 0x5a) return zkevm_opcode::GAS; + if( number == 0x5b) return zkevm_opcode::JUMPDEST; + if( number == 0x5c) return zkevm_opcode::TLOAD; + if( number == 0x5d) return zkevm_opcode::TSTORE; + if( number == 0x5e) return zkevm_opcode::MCOPY; + if( number == 0x5f) return zkevm_opcode::PUSH0; + if( number == 0x60) return zkevm_opcode::PUSH1; + if( number == 0x61) return zkevm_opcode::PUSH2; + if( number == 0x62) return zkevm_opcode::PUSH3; + if( number == 0x63) return zkevm_opcode::PUSH4; + if( number == 0x64) return zkevm_opcode::PUSH5; + if( number == 0x65) return zkevm_opcode::PUSH6; + if( number == 0x66) return zkevm_opcode::PUSH7; + if( number == 0x67) return zkevm_opcode::PUSH8; + if( number == 0x68) return zkevm_opcode::PUSH9; + if( number == 0x69) return zkevm_opcode::PUSH10; + if( number == 0x6a) return zkevm_opcode::PUSH11; + if( number == 0x6b) return zkevm_opcode::PUSH12; + if( number == 0x6c) return zkevm_opcode::PUSH13; + if( number == 0x6d) return zkevm_opcode::PUSH14; + if( number == 0x6e) return zkevm_opcode::PUSH15; + if( number == 0x6f) return zkevm_opcode::PUSH16; + if( number == 0x70) return zkevm_opcode::PUSH17; + if( number == 0x71) return zkevm_opcode::PUSH18; + if( number == 0x72) return zkevm_opcode::PUSH19; + if( number == 0x73) return zkevm_opcode::PUSH20; + if( number == 0x74) return zkevm_opcode::PUSH21; + if( number == 0x75) return zkevm_opcode::PUSH22; + if( number == 0x76) return zkevm_opcode::PUSH23; + if( number == 0x77) return zkevm_opcode::PUSH24; + if( number == 0x78) return zkevm_opcode::PUSH25; + if( number == 0x79) return zkevm_opcode::PUSH26; + if( number == 0x7a) return zkevm_opcode::PUSH27; + if( number == 0x7b) return zkevm_opcode::PUSH28; + if( number == 0x7c) return zkevm_opcode::PUSH29; + if( number == 0x7d) return zkevm_opcode::PUSH30; + if( number == 0x7e) return zkevm_opcode::PUSH31; + if( number == 0x7f) return zkevm_opcode::PUSH32; + if( number == 0x80) return zkevm_opcode::DUP1; + if( number == 0x81) return zkevm_opcode::DUP2; + if( number == 0x82) return zkevm_opcode::DUP3; + if( number == 0x83) return zkevm_opcode::DUP4; + if( number == 0x84) return zkevm_opcode::DUP5; + if( number == 0x85) return zkevm_opcode::DUP6; + if( number == 0x86) return zkevm_opcode::DUP7; + if( number == 0x87) return zkevm_opcode::DUP8; + if( number == 0x88) return zkevm_opcode::DUP9; + if( number == 0x89) return zkevm_opcode::DUP10; + if( number == 0x8a) return zkevm_opcode::DUP11; + if( number == 0x8b) return zkevm_opcode::DUP12; + if( number == 0x8c) return zkevm_opcode::DUP13; + if( number == 0x8d) return zkevm_opcode::DUP14; + if( number == 0x8e) return zkevm_opcode::DUP15; + if( number == 0x8f) return zkevm_opcode::DUP16; + if( number == 0x90) return zkevm_opcode::SWAP1; + if( number == 0x91) return zkevm_opcode::SWAP2; + if( number == 0x92) return zkevm_opcode::SWAP3; + if( number == 0x93) return zkevm_opcode::SWAP4; + if( number == 0x94) return zkevm_opcode::SWAP5; + if( number == 0x95) return zkevm_opcode::SWAP6; + if( number == 0x96) return zkevm_opcode::SWAP7; + if( number == 0x97) return zkevm_opcode::SWAP8; + if( number == 0x98) return zkevm_opcode::SWAP9; + if( number == 0x99) return zkevm_opcode::SWAP10; + if( number == 0x9a) return zkevm_opcode::SWAP11; + if( number == 0x9b) return zkevm_opcode::SWAP12; + if( number == 0x9c) return zkevm_opcode::SWAP13; + if( number == 0x9d) return zkevm_opcode::SWAP14; + if( number == 0x9e) return zkevm_opcode::SWAP15; + if( number == 0x9f) return zkevm_opcode::SWAP16; + if( number == 0xa0) return zkevm_opcode::LOG0; + if( number == 0xa1) return zkevm_opcode::LOG1; + if( number == 0xa2) return zkevm_opcode::LOG2; + if( number == 0xa3) return zkevm_opcode::LOG3; + if( number == 0xa4) return zkevm_opcode::LOG4; + if( number == 0xf0) return zkevm_opcode::CREATE; + if( number == 0xf1) return zkevm_opcode::CALL; + if( number == 0xf2) return zkevm_opcode::CALLCODE; + if( number == 0xf3) return zkevm_opcode::RETURN; + if( number == 0xf4) return zkevm_opcode::DELEGATECALL; + if( number == 0xf5) return zkevm_opcode::CREATE2; + if( number == 0xfa) return zkevm_opcode::STATICCALL; + if( number == 0xfd) return zkevm_opcode::REVERT; + if( number == 0xfe) return zkevm_opcode::INVALID; + if( number == 0xff) return zkevm_opcode::SELFDESTRUCT; + // these are not real opcodes, they are for exception processing + if( number == 0x100 ) return zkevm_opcode::err0; // not enough static gas or incorrect stack size + if( number == 0x101 ) return zkevm_opcode::err1; // not enough static gas or incorrect stack size + if( number == 0x102 ) return zkevm_opcode::padding; // empty opcode for the fixed circuit size + std::cout << "Unknown opcode " << std::hex << number << std::dec << std::endl; + BOOST_ASSERT(false); + return zkevm_opcode::padding; + } + + zkevm_opcode opcode_from_str(const std::string &str){ + // these are not real opcodes, they are for exception processing + #define ENUM_DEF(name) if(str == #name) return zkevm_opcode::name; + ZKEVM_OPCODE_ENUM(ENUM_DEF) + #undef ENUM_DEF + std::cout << "Unknown opcode " << str << std::endl; + return zkevm_opcode::err0; // not enough static gas or incorrect stack size + } + + std::string opcode_to_string(const zkevm_opcode& opcode) { + switch (opcode) { + #define ENUM_DEF(name) case zkevm_opcode::name: return #name; + ZKEVM_OPCODE_ENUM(ENUM_DEF) + #undef ENUM_DEF + } + return "unknown"; + } + + std::size_t opcode_to_number(const zkevm_opcode &opcode ){ + return opcode_number_from_str(opcode_to_string(opcode)); + } + + std::ostream& operator<<(std::ostream& os, const zkevm_opcode& opcode) { + #define ENUM_DEF(name) case zkevm_opcode::name: os << "zkevm_opcode::" << #name; break; + switch (opcode) { + ZKEVM_OPCODE_ENUM(ENUM_DEF) + } + #undef ENUM_DEF + return os; + } + + std::vector get_implemented_opcodes_list(){ + std::vector result; + #define ENUM_DEF(name) result.push_back(zkevm_opcode::name); + ZKEVM_OPCODE_ENUM(ENUM_DEF) + #undef ENUM_DEF + return result; + } + + template + std::map>> get_opcode_implementations(){ + std::map>> opcodes; + // add all the implemented opcodes here + // // STOP + opcodes[zkevm_opcode::STOP] = std::make_shared>(); + opcodes[zkevm_opcode::ADD] = std::make_shared>(true); + opcodes[zkevm_opcode::MUL] = std::make_shared>(); + opcodes[zkevm_opcode::SUB] = std::make_shared>(false); + opcodes[zkevm_opcode::DIV] = std::make_shared>(true); + opcodes[zkevm_opcode::SDIV] = std::make_shared>(true); + opcodes[zkevm_opcode::MOD] = std::make_shared>(false); + opcodes[zkevm_opcode::SMOD] = std::make_shared>(false); + opcodes[zkevm_opcode::ADDMOD] = std::make_shared>(); + opcodes[zkevm_opcode::MULMOD] = std::make_shared>(); + opcodes[zkevm_opcode::EXP] = std::make_shared>(); + opcodes[zkevm_opcode::SIGNEXTEND] = std::make_shared>(); + opcodes[zkevm_opcode::LT] = std::make_shared>(cmp_type::C_LT); + opcodes[zkevm_opcode::GT] = std::make_shared>(cmp_type::C_GT); + opcodes[zkevm_opcode::SLT] = std::make_shared>(scmp_type::C_SLT); + opcodes[zkevm_opcode::SGT] = std::make_shared>(scmp_type::C_SGT); + opcodes[zkevm_opcode::EQ] = std::make_shared>(); + opcodes[zkevm_opcode::ISZERO] = std::make_shared>(); + opcodes[zkevm_opcode::AND] = std::make_shared>(bitwise_type::B_AND); + opcodes[zkevm_opcode::OR] = std::make_shared>(bitwise_type::B_OR); + opcodes[zkevm_opcode::XOR] = std::make_shared>(bitwise_type::B_XOR); + opcodes[zkevm_opcode::NOT] = std::make_shared>(); + opcodes[zkevm_opcode::BYTE] = std::make_shared>(); + opcodes[zkevm_opcode::SHL] = std::make_shared>(); + opcodes[zkevm_opcode::SHR] = std::make_shared>(); + opcodes[zkevm_opcode::SAR] = std::make_shared>(); + opcodes[zkevm_opcode::KECCAK256] = std::make_shared>(); + // // Memory operations + opcodes[zkevm_opcode::MSTORE] = std::make_shared>(); + opcodes[zkevm_opcode::MSTORE8] = std::make_shared>(); + opcodes[zkevm_opcode::MLOAD] = std::make_shared>(); + + // // Storage operations + opcodes[zkevm_opcode::SLOAD] = std::make_shared>(); + opcodes[zkevm_opcode::SSTORE] = std::make_shared>(); + + // // CALL operaitions + opcodes[zkevm_opcode::CALLVALUE] = std::make_shared>(); + opcodes[zkevm_opcode::CALLDATASIZE] = std::make_shared>(); + opcodes[zkevm_opcode::CALLDATALOAD] = std::make_shared>(); + opcodes[zkevm_opcode::CALLDATACOPY] = std::make_shared>(); + + // // PC operations + opcodes[zkevm_opcode::JUMPI] = std::make_shared>(); + opcodes[zkevm_opcode::JUMP] = std::make_shared>(); + opcodes[zkevm_opcode::JUMPDEST] = std::make_shared>(); + + opcodes[zkevm_opcode::PUSH0] = std::make_shared>(0); + opcodes[zkevm_opcode::PUSH1] = std::make_shared>(1); + opcodes[zkevm_opcode::PUSH2] = std::make_shared>(2); + opcodes[zkevm_opcode::PUSH3] = std::make_shared>(3); + opcodes[zkevm_opcode::PUSH4] = std::make_shared>(4); + opcodes[zkevm_opcode::PUSH5] = std::make_shared>(5); + opcodes[zkevm_opcode::PUSH6] = std::make_shared>(6); + opcodes[zkevm_opcode::PUSH7] = std::make_shared>(7); + opcodes[zkevm_opcode::PUSH8] = std::make_shared>(8); + opcodes[zkevm_opcode::PUSH9] = std::make_shared>(9); + opcodes[zkevm_opcode::PUSH10] = std::make_shared>(10); + opcodes[zkevm_opcode::PUSH11] = std::make_shared>(11); + opcodes[zkevm_opcode::PUSH12] = std::make_shared>(12); + opcodes[zkevm_opcode::PUSH13] = std::make_shared>(13); + opcodes[zkevm_opcode::PUSH14] = std::make_shared>(14); + opcodes[zkevm_opcode::PUSH15] = std::make_shared>(15); + opcodes[zkevm_opcode::PUSH16] = std::make_shared>(16); + opcodes[zkevm_opcode::PUSH17] = std::make_shared>(17); + opcodes[zkevm_opcode::PUSH18] = std::make_shared>(18); + opcodes[zkevm_opcode::PUSH19] = std::make_shared>(19); + opcodes[zkevm_opcode::PUSH20] = std::make_shared>(20); + opcodes[zkevm_opcode::PUSH21] = std::make_shared>(21); + opcodes[zkevm_opcode::PUSH22] = std::make_shared>(22); + opcodes[zkevm_opcode::PUSH23] = std::make_shared>(23); + opcodes[zkevm_opcode::PUSH24] = std::make_shared>(24); + opcodes[zkevm_opcode::PUSH25] = std::make_shared>(25); + opcodes[zkevm_opcode::PUSH26] = std::make_shared>(26); + opcodes[zkevm_opcode::PUSH27] = std::make_shared>(27); + opcodes[zkevm_opcode::PUSH28] = std::make_shared>(28); + opcodes[zkevm_opcode::PUSH29] = std::make_shared>(29); + opcodes[zkevm_opcode::PUSH30] = std::make_shared>(30); + opcodes[zkevm_opcode::PUSH31] = std::make_shared>(31); + opcodes[zkevm_opcode::PUSH32] = std::make_shared>(32); + + opcodes[zkevm_opcode::POP] = std::make_shared>(); + opcodes[zkevm_opcode::RETURN] = std::make_shared>(); + + // not implemented yet opcodes + opcodes[zkevm_opcode::MCOPY] = std::make_shared>(); + opcodes[zkevm_opcode::RETURNDATASIZE] = std::make_shared>(); + opcodes[zkevm_opcode::RETURNDATACOPY] = std::make_shared>(); + opcodes[zkevm_opcode::CALL] = std::make_shared>(); + opcodes[zkevm_opcode::GAS] = std::make_shared>(); + opcodes[zkevm_opcode::STATICCALL] = std::make_shared>(); + + // // DUP + opcodes[zkevm_opcode::DUP1] = std::make_shared>(1); + opcodes[zkevm_opcode::DUP2] = std::make_shared>(2); + opcodes[zkevm_opcode::DUP3] = std::make_shared>(3); + opcodes[zkevm_opcode::DUP4] = std::make_shared>(4); + opcodes[zkevm_opcode::DUP5] = std::make_shared>(5); + opcodes[zkevm_opcode::DUP6] = std::make_shared>(6); + opcodes[zkevm_opcode::DUP7] = std::make_shared>(7); + opcodes[zkevm_opcode::DUP8] = std::make_shared>(8); + opcodes[zkevm_opcode::DUP9] = std::make_shared>(9); + opcodes[zkevm_opcode::DUP10] = std::make_shared>(10); + opcodes[zkevm_opcode::DUP11] = std::make_shared>(11); + opcodes[zkevm_opcode::DUP12] = std::make_shared>(12); + opcodes[zkevm_opcode::DUP13] = std::make_shared>(13); + opcodes[zkevm_opcode::DUP14] = std::make_shared>(14); + opcodes[zkevm_opcode::DUP15] = std::make_shared>(15); + opcodes[zkevm_opcode::DUP16] = std::make_shared>(16); + + // // SWAP + opcodes[zkevm_opcode::SWAP1] = std::make_shared>(1); + opcodes[zkevm_opcode::SWAP2] = std::make_shared>(2); + opcodes[zkevm_opcode::SWAP3] = std::make_shared>(3); + opcodes[zkevm_opcode::SWAP4] = std::make_shared>(4); + opcodes[zkevm_opcode::SWAP5] = std::make_shared>(5); + opcodes[zkevm_opcode::SWAP6] = std::make_shared>(6); + opcodes[zkevm_opcode::SWAP7] = std::make_shared>(7); + opcodes[zkevm_opcode::SWAP8] = std::make_shared>(8); + opcodes[zkevm_opcode::SWAP9] = std::make_shared>(9); + opcodes[zkevm_opcode::SWAP10] = std::make_shared>(10); + opcodes[zkevm_opcode::SWAP11] = std::make_shared>(11); + opcodes[zkevm_opcode::SWAP13] = std::make_shared>(13); + opcodes[zkevm_opcode::SWAP14] = std::make_shared>(14); + opcodes[zkevm_opcode::SWAP15] = std::make_shared>(15); + opcodes[zkevm_opcode::SWAP16] = std::make_shared>(16); + + // // fake opcodes for errors and padding + opcodes[zkevm_opcode::err0] = std::make_shared>(); + opcodes[zkevm_opcode::err1] = std::make_shared>(); + opcodes[zkevm_opcode::padding] = std::make_shared>(); + return opcodes; + } + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/rw.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/rw.hpp new file mode 100644 index 0000000000..6cb04ed611 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/rw.hpp @@ -0,0 +1,590 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include +#include + +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class rw : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using rw_table_type = rw_table; + using input_type = typename rw_table_type::input_type; + using value = typename FieldType::value_type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + public: + static constexpr std::size_t op_bits_amount = 4; + static constexpr std::size_t diff_index_bits_amount = 5; + + static constexpr std::size_t id_chunks_amount = 2; + static constexpr std::size_t address_chunks_amount = 10; + static constexpr std::size_t storage_key_chunks_amount = 16; + static constexpr std::size_t rw_id_chunks_amount = 2; + static constexpr std::size_t chunks_amount = 30; + + static nil::crypto3::zk::snark::plonk_table_description get_table_description(std::size_t max_rw_size, std::size_t max_mpt_size){ + nil::crypto3::zk::snark::plonk_table_description desc(rw_table_type::get_witness_amount() + 50, 0, 2, 6); + desc.usable_rows_amount = max_rw_size + max_mpt_size; + return desc; + } + + template + TYPE bit_tag_selector(std::array bits, std::size_t k){ + TYPE result; + integral_type mask = (1 << n); + for( std::size_t bit_ind = 0; bit_ind < n; bit_ind++ ){ + mask >>= 1; + TYPE bit_selector; + if( (mask & k) == 0) + bit_selector = (1 - bits[bit_ind]); + else + bit_selector = bits[bit_ind]; + if( bit_ind == 0) + result = bit_selector; + else + result *= bit_selector; + } + return result; + } + + rw(context_type &context_object, const input_type &input, std::size_t max_rw_size, std::size_t max_mpt_size) :generic_component(context_object) { + std::size_t START_OP = rw_op_to_num(rw_operation_type::start); + std::size_t STACK_OP = rw_op_to_num(rw_operation_type::stack); + std::size_t MEMORY_OP = rw_op_to_num(rw_operation_type::memory); + std::size_t STORAGE_OP = rw_op_to_num(rw_operation_type::storage); + std::size_t TRANSIENT_STORAGE_OP = rw_op_to_num(rw_operation_type::transient_storage); + std::size_t CALL_CONTEXT_OP = rw_op_to_num(rw_operation_type::call_context); + std::size_t ACCOUNT_OP = rw_op_to_num(rw_operation_type::account); + std::size_t TX_REFUND_OP = rw_op_to_num(rw_operation_type::tx_refund_op); + std::size_t TX_ACCESS_LIST_ACCOUNT_OP = rw_op_to_num(rw_operation_type::tx_access_list_account); + std::size_t TX_ACCESS_LIST_ACCOUNT_STORAGE_OP = rw_op_to_num(rw_operation_type::tx_access_list_account_storage); + std::size_t TX_LOG_OP = rw_op_to_num(rw_operation_type::tx_log); + std::size_t TX_RECEIPT_OP = rw_op_to_num(rw_operation_type::tx_receipt); + std::size_t PADDING_OP = rw_op_to_num(rw_operation_type::padding); + + PROFILE_SCOPE("Rw circuit constructor, total time"); + std::vector rw_table_area; + for( std::size_t i = 0; i < rw_table_type::get_witness_amount(); i++ ) rw_table_area.push_back(i); + + context_type rw_table_ct = context_object.subcontext(rw_table_area,0,max_rw_size); + rw_table_type t(rw_table_ct, input, max_rw_size, false); + + const std::vector &op = t.op; + const std::vector &id = t.id; + const std::vector &address = t.address; + const std::vector &storage_key_hi = t.storage_key_hi; + const std::vector &storage_key_lo = t.storage_key_lo; + const std::vector &field_type = t.field_type; + const std::vector &rw_id = t.rw_id; + const std::vector &is_write = t.is_write; + const std::vector &value_hi = t.value_hi; + const std::vector &value_lo = t.value_lo; + + std::vector> op_bits(max_rw_size); + std::vector> diff_index_bits(max_rw_size); + std::vector is_first(max_rw_size); + std::vector> chunks(max_rw_size); + std::vector diff(max_rw_size); + std::vector inv_diff(max_rw_size); + std::vector value_before_hi(max_rw_size); + std::vector value_before_lo(max_rw_size); + std::vector state_root_hi(max_rw_size); + std::vector state_root_lo(max_rw_size); + std::vector state_root_before_hi(max_rw_size); + std::vector state_root_before_lo(max_rw_size); + std::vector is_last(max_rw_size); + std::vector sorted; + std::vector sorted_prev; + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + auto rw_trace = input; + std::cout << "RW trace.size = " << rw_trace.size() << std::endl; + for( std::size_t i = 0; i < rw_trace.size(); i++ ){ + integral_type mask = (1 << op_bits_amount); + for( std::size_t j = 0; j < op_bits_amount; j++){ + mask >>= 1; + op_bits[i][j] = (((static_cast(rw_trace[i].op) & mask) == 0) ? 0 : 1); + } + std::size_t cur_chunk = 0; + // id + mask = 0xffff0000; + chunks[i][cur_chunk++] = (mask & integral_type(rw_trace[i].call_id)) >> 16; + mask = 0xffff; + chunks[i][cur_chunk++] = (mask & integral_type(rw_trace[i].call_id)); + + // address + mask = 0xffff; + mask <<= (16 * 9); + for( std::size_t j = 0; j < address_chunks_amount; j++){ + chunks[i][cur_chunk++] = (((mask & integral_type(rw_trace[i].address)) >> (16 * (9-j)))); + mask >>= 16; + } + + // storage_key + mask = 0xffff; + mask <<= (16 * 15); + for( std::size_t j = 0; j < storage_key_chunks_amount; j++){ + chunks[i][cur_chunk++] = (((mask & integral_type(rw_trace[i].storage_key)) >> (16 * (15-j)))); + mask >>= 16; + } + + // rw_id + mask = 0xffff; + mask <<= 16; + chunks[i][cur_chunk++] = (mask & rw_trace[i].rw_counter) >> 16; + mask >>= 16; + chunks[i][cur_chunk++] = (mask & rw_trace[i].rw_counter); + + sorted_prev = sorted; + sorted = {op[i]}; + for( std::size_t j = 0; j < chunks_amount; j++ ){ + sorted.push_back(chunks[i][j]); + if( j == 12 ) sorted.push_back(field_type[i]); + } + + if( i == 0) continue; + std::size_t diff_ind; + for( diff_ind= 0; diff_ind < chunks_amount; diff_ind++ ){ + if(sorted[diff_ind] != sorted_prev[diff_ind]) break; + } + if( op[i] != START_OP && op[i] != PADDING_OP && diff_ind < 30){ + is_first[i] = 1; + if(i != 0) is_last[i-1] = 1; + } + if( diff_ind > 30 ){ + value_before_hi[i] = w_hi(rw_trace[i].initial_value); + value_before_lo[i] = w_lo(rw_trace[i].initial_value); + } else { + value_before_hi[i] = value_before_hi[i-1]; + value_before_lo[i] = value_before_lo[i-1]; + } + mask = (1 << diff_index_bits_amount); + for( std::size_t j = 0; j < diff_index_bits_amount; j++){ + mask >>= 1; + diff_index_bits[i][j] = (((diff_ind & mask) == 0) ? 0 : 1); + } + diff[i] = sorted[diff_ind] - sorted_prev[diff_ind]; + inv_diff[i] = diff[i] == 0? 0: diff[i].inversed(); + } + for( std::size_t i = rw_trace.size(); i < max_rw_size; i++ ){ + integral_type mask = (1 << op_bits_amount); + for( std::size_t j = 0; j < op_bits_amount; j++){ + mask >>= 1; + op_bits[i][j] = (((PADDING_OP & mask) == 0) ? 0 : 1); + } + } + } + for( std::size_t i = 0; i < max_rw_size; i++){ + if( i % 20 == 0) std::cout << "."; std::cout.flush(); + std::size_t cur_column = rw_table_type::get_witness_amount(); + for( std::size_t j = 0; j < op_bits_amount; j++){ + allocate(op_bits[i][j], ++cur_column, i); + }; + + for( std::size_t k = 0; k < chunks_amount; k++){ + allocate(chunks[i][k], ++cur_column, i); + } + for( std::size_t j = 0; j < diff_index_bits_amount; j++){ + allocate(diff_index_bits[i][j], ++cur_column, i); + } + allocate(value_before_hi[i], ++cur_column, i); + allocate(value_before_lo[i], ++cur_column, i); + allocate(diff[i], ++cur_column, i); lookup(diff[i], "chunk_16_bits/full"); + allocate(inv_diff[i], ++cur_column, i); + allocate(is_first[i], ++cur_column, i); + allocate(is_last[i], ++cur_column, i); + allocate(state_root_hi[i], ++cur_column, i); + allocate(state_root_lo[i], ++cur_column, i); + allocate(state_root_before_hi[i], ++cur_column, i); + allocate(state_root_before_lo[i], ++cur_column, i); + } + std::cout << std::endl; + if constexpr (stage == GenerationStage::CONSTRAINTS) { + std::vector every_row_constraints; + std::vector non_first_row_constraints; + std::vector chunked_16_lookups; + for( std::size_t j = 0; j < diff_index_bits_amount; j++){ + every_row_constraints.push_back(context_object.relativize(diff_index_bits[1][j] * (diff_index_bits[1][j] - 1), -1)); + } + for( std::size_t k = 0; k < chunks_amount; k++){ + chunked_16_lookups.push_back(context_object.relativize(chunks[1][k], -1)); + } + TYPE op_bit_composition; + for( std::size_t j = 0; j < op_bits_amount; j++){ + every_row_constraints.push_back(context_object.relativize(op_bits[1][j] * (op_bits[1][j] - 1), -1)); + if(j == 0) { + op_bit_composition = op_bits[1][j]; + } else { + op_bit_composition *= 2; + op_bit_composition += op_bits[1][j]; + } + } + every_row_constraints.push_back(context_object.relativize(op_bit_composition - op[1], -1)); + + TYPE id_composition; + std::size_t cur_chunk = 0; + id_composition = chunks[1][cur_chunk++]; id_composition *= (1<<16); + id_composition += chunks[1][cur_chunk++]; + every_row_constraints.push_back(context_object.relativize(id[1] - id_composition, -1)); + + TYPE addr_composition; + addr_composition = chunks[1][cur_chunk++]; addr_composition *= (1<<16); //1 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //2 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //3 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //4 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //5 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //6 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //7 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //8 + addr_composition += chunks[1][cur_chunk++]; addr_composition *= (1<<16); //9 + addr_composition += chunks[1][cur_chunk++]; + every_row_constraints.push_back(context_object.relativize(address[1] - addr_composition, -1)); + + TYPE storage_key_hi_comp; + storage_key_hi_comp = chunks[1][cur_chunk++]; storage_key_hi_comp *= (1<<16); //1 + storage_key_hi_comp += chunks[1][cur_chunk++]; storage_key_hi_comp *= (1<<16); //2 + storage_key_hi_comp += chunks[1][cur_chunk++]; storage_key_hi_comp *= (1<<16); //3 + storage_key_hi_comp += chunks[1][cur_chunk++]; storage_key_hi_comp *= (1<<16); //4 + storage_key_hi_comp += chunks[1][cur_chunk++]; storage_key_hi_comp *= (1<<16); //5 + storage_key_hi_comp += chunks[1][cur_chunk++]; storage_key_hi_comp *= (1<<16); //6 + storage_key_hi_comp += chunks[1][cur_chunk++]; storage_key_hi_comp *= (1<<16); //7 + storage_key_hi_comp += chunks[1][cur_chunk++]; + every_row_constraints.push_back(context_object.relativize(storage_key_hi[1] - storage_key_hi_comp, -1)); + + TYPE storage_key_lo_comp; + storage_key_lo_comp = chunks[1][cur_chunk++]; storage_key_lo_comp *= (1<<16); //1 + storage_key_lo_comp += chunks[1][cur_chunk++]; storage_key_lo_comp *= (1<<16); //2 + storage_key_lo_comp += chunks[1][cur_chunk++]; storage_key_lo_comp *= (1<<16); //3 + storage_key_lo_comp += chunks[1][cur_chunk++]; storage_key_lo_comp *= (1<<16); //4 + storage_key_lo_comp += chunks[1][cur_chunk++]; storage_key_lo_comp *= (1<<16); //5 + storage_key_lo_comp += chunks[1][cur_chunk++]; storage_key_lo_comp *= (1<<16); //6 + storage_key_lo_comp += chunks[1][cur_chunk++]; storage_key_lo_comp *= (1<<16); //7 + storage_key_lo_comp += chunks[1][cur_chunk++]; + every_row_constraints.push_back(context_object.relativize(storage_key_lo[1] - storage_key_lo_comp, -1)); + + TYPE rw_id_composition; + rw_id_composition = chunks[1][cur_chunk++]; rw_id_composition *= (1<<16); + rw_id_composition += chunks[1][cur_chunk++]; + every_row_constraints.push_back(context_object.relativize(rw_id[1] - rw_id_composition, -1)); + + sorted_prev = {op[0]}; + sorted = {op[1]}; + for( std::size_t j = 0; j < chunks_amount; j++ ){ + sorted_prev.push_back(chunks[0][j]); + sorted.push_back(chunks[1][j]); + if( j == 12 ) { + sorted_prev.push_back(field_type[0]); + sorted.push_back(field_type[1]); + } + } + + TYPE start_selector = bit_tag_selector(op_bits[1], START_OP); + TYPE stack_selector = bit_tag_selector(op_bits[1], STACK_OP); + TYPE memory_selector = bit_tag_selector(op_bits[1], MEMORY_OP); + TYPE storage_selector = bit_tag_selector(op_bits[1], STORAGE_OP); + TYPE transient_storage_selector = bit_tag_selector(op_bits[1], TRANSIENT_STORAGE_OP); + TYPE call_context_selector = bit_tag_selector(op_bits[1], CALL_CONTEXT_OP); + TYPE account_selector = bit_tag_selector(op_bits[1], ACCOUNT_OP); + TYPE tx_refund_selector = bit_tag_selector(op_bits[1], TX_REFUND_OP); + TYPE tx_access_list_account_selector = bit_tag_selector(op_bits[1], TX_ACCESS_LIST_ACCOUNT_OP); + TYPE tx_access_list_account_storage_selector = bit_tag_selector(op_bits[1], TX_ACCESS_LIST_ACCOUNT_STORAGE_OP); + TYPE tx_log_selector = bit_tag_selector(op_bits[1], TX_LOG_OP); + TYPE tx_receipt_selector = bit_tag_selector(op_bits[1], TX_RECEIPT_OP); + TYPE padding_selector = bit_tag_selector(op_bits[1], PADDING_OP); + + for( std::size_t diff_ind = 0; diff_ind < sorted.size(); diff_ind++ ){ + TYPE diff_ind_selector = bit_tag_selector(diff_index_bits[1], diff_ind); + for(std::size_t less_diff_ind = 0; less_diff_ind < diff_ind; less_diff_ind++){ + non_first_row_constraints.push_back(context_object.relativize((op[1] - PADDING_OP) * diff_ind_selector * (sorted[less_diff_ind]-sorted_prev[less_diff_ind]),-1)); + } + non_first_row_constraints.push_back( context_object.relativize((op[1] - PADDING_OP) * diff_ind_selector * (sorted[diff_ind] - sorted_prev[diff_ind] - diff[1]), -1)); + } + + every_row_constraints.push_back(context_object.relativize(is_write[1] * (is_write[1]-1), -1)); + every_row_constraints.push_back(context_object.relativize(is_first[1] * (is_first[1]-1), -1)); + every_row_constraints.push_back(context_object.relativize((diff[1] * inv_diff[1] - 1) * diff[1], -1)); + every_row_constraints.push_back(context_object.relativize((diff[1] * inv_diff[1] - 1) * inv_diff[1], -1)); + every_row_constraints.push_back(context_object.relativize(is_first[1] * (is_first[1] - 1), -1)); + every_row_constraints.push_back(context_object.relativize(is_last[1] * (is_last[1] - 1), -1)); + every_row_constraints.push_back(context_object.relativize((op[1] - START_OP) * (op[1] - PADDING_OP) * (is_first[1] - 1) * (diff_index_bits[1][0] - 1), -1)); + every_row_constraints.push_back(context_object.relativize((op[1] - START_OP) * (op[1] - PADDING_OP) * (is_first[1] - 1) * (diff_index_bits[1][1] - 1), -1)); + every_row_constraints.push_back(context_object.relativize((op[1] - START_OP) * (op[1] - PADDING_OP) * (is_first[1] - 1) * (diff_index_bits[1][2] - 1), -1)); + every_row_constraints.push_back(context_object.relativize((op[1] - START_OP) * (op[1] - PADDING_OP) * (is_first[1] - 1) * (diff_index_bits[1][3] - 1), -1)); + + non_first_row_constraints.push_back(context_object.relativize((op[0] - START_OP) * (op[0] - PADDING_OP) + * is_last[0] * diff_index_bits[1][0] + * diff_index_bits[1][1] * diff_index_bits[1][2] + * diff_index_bits[1][3], -1)); + every_row_constraints.push_back(context_object.relativize((op[1] - START_OP) * (op[1] - PADDING_OP) * (is_first[1] - 1) * (value_before_hi[1] - value_before_hi[0]), -1)); + every_row_constraints.push_back(context_object.relativize((op[1] - START_OP) * (op[1] - PADDING_OP) * (is_first[1] - 1) * (value_before_lo[1] - value_before_lo[0]), -1)); + + + // // Specific constraints for START + std::map> special_constraints; + special_constraints[START_OP].push_back(context_object.relativize(start_selector * storage_key_hi[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * storage_key_lo[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * id[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * address[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * field_type[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * rw_id[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * value_before_hi[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * value_before_lo[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * state_root_hi[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * state_root_lo[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * state_root_before_hi[1], -1)); + special_constraints[START_OP].push_back(context_object.relativize(start_selector * state_root_before_lo[1], -1)); + + // Specific constraints for STACK + special_constraints[STACK_OP].push_back(context_object.relativize(stack_selector * field_type[1], -1)); + special_constraints[STACK_OP].push_back(context_object.relativize(stack_selector * is_first[1] * (1 - is_write[1]), -1)); // 4. First stack operation is obviously write + //if(i!=0) { + non_first_row_constraints.push_back(context_object.relativize(stack_selector * (address[1] - address[0]) * (is_write[1] - 1), -1)); // 5. First operation is always write + non_first_row_constraints.push_back(context_object.relativize(stack_selector * (1 - is_first[1]) * (address[1] - address[0]) * (address[1] - address[0] - 1), -1)); // 6. Stack pointer always grows and only by one + non_first_row_constraints.push_back(context_object.relativize(stack_selector * (1 - is_first[1]) * (state_root_hi[1] - state_root_before_hi[0]), -1)); + non_first_row_constraints.push_back(context_object.relativize(stack_selector * (1 - is_first[1]) * (state_root_lo[1] - state_root_before_lo[0]), -1)); + //} + special_constraints[STACK_OP].push_back(context_object.relativize(stack_selector * storage_key_hi[1], -1)); + special_constraints[STACK_OP].push_back(context_object.relativize(stack_selector * storage_key_lo[1], -1)); + special_constraints[STACK_OP].push_back(context_object.relativize(stack_selector * value_before_hi[1], -1)); + special_constraints[STACK_OP].push_back(context_object.relativize(stack_selector * value_before_lo[1], -1)); + chunked_16_lookups.push_back(context_object.relativize(stack_selector * address[1], -1)); + chunked_16_lookups.push_back(context_object.relativize(1023 - stack_selector * address[1], -1)); + + // Specific constraints for MEMORY + // address is 32 bit + //if( i != 0 ) + non_first_row_constraints.push_back(context_object.relativize(memory_selector * (is_first[1] - 1) * (is_write[1] - 1) * (value_lo[1] - value_lo[0]), -1)); // 4. for read operations value is equal to previous value + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * value_hi[1], -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * is_first[1] * (is_write[1] - 1) * value_lo[1], -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * field_type[1], -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * storage_key_hi[1], -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * storage_key_lo[1], -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * value_before_hi[1], -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * value_before_lo[1], -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * (1 - is_first[1]) * (state_root_hi[1] - state_root_before_hi[1]), -1)); + special_constraints[MEMORY_OP].push_back(context_object.relativize(memory_selector * (1 - is_first[1]) * (state_root_lo[1] - state_root_before_lo[1]), -1)); + chunked_16_lookups.push_back(context_object.relativize(memory_selector * value_lo[1], -1)); + chunked_16_lookups.push_back(context_object.relativize(255 - memory_selector * value_lo[1], -1)); + + + // Specific constraints for STORAGE + // lookup to MPT circuit + // field is 0 + special_constraints[STORAGE_OP].push_back(context_object.relativize(storage_selector * field_type[1], -1)); + //lookup_constrain({"MPT table", { + // storage_selector * addr, + // storage_selector * field, + // storage_selector * storage_key_hi, + // storage_selector * storage_key_lo, + // storage_selector * value_before_hi, + // storage_selector * value_before_lo, + // storage_selector * value_hi, + // storage_selector * value_lo, + // storage_selector * state_root_hi, + // storage_selector * state_root_lo + //}}); + + // Specific constraints for TRANSIENT_STORAGE + // field is 0 + special_constraints[TRANSIENT_STORAGE_OP].push_back(context_object.relativize(transient_storage_selector * field_type[1], -1)); + + // Specific constraints for CALL_CONTEXT + // address, storage_key, initial_value, value_prev are 0 + // state_root = state_root_prev + // range_check for field_flag + special_constraints[CALL_CONTEXT_OP].push_back(context_object.relativize(call_context_selector * address[1], -1)); + special_constraints[CALL_CONTEXT_OP].push_back(context_object.relativize(call_context_selector * storage_key_hi[1], -1)); + special_constraints[CALL_CONTEXT_OP].push_back(context_object.relativize(call_context_selector * storage_key_lo[1], -1)); + special_constraints[CALL_CONTEXT_OP].push_back(context_object.relativize(call_context_selector * (1 - is_first[1]) * (state_root_hi[1] - state_root_before_hi[1]), -1)); + special_constraints[CALL_CONTEXT_OP].push_back(context_object.relativize(call_context_selector * (1 - is_first[1]) * (state_root_lo[1] - state_root_before_lo[1]), -1)); + special_constraints[CALL_CONTEXT_OP].push_back(context_object.relativize(call_context_selector * value_before_hi[1], -1)); + special_constraints[CALL_CONTEXT_OP].push_back(context_object.relativize(call_context_selector * value_before_lo[1], -1)); + + // Specific constraints for ACCOUNT_OP + // id, storage_key 0 + // field_tag -- Range + // MPT lookup for last access + // value and value_prev consistency + special_constraints[ACCOUNT_OP].push_back(context_object.relativize(account_selector * id[1], -1)); + special_constraints[ACCOUNT_OP].push_back(context_object.relativize(account_selector * storage_key_hi[1], -1)); + special_constraints[ACCOUNT_OP].push_back(context_object.relativize(account_selector * storage_key_lo[1], -1)); + //lookup_constrain({"MPT table", { + // storage_selector * is_last * addr, + // storage_selector * is_last * field, + // storage_selector * is_last * storage_key_hi, + // storage_selector * is_last * storage_key_lo, + // storage_selector * is_last * value_before_hi, + // storage_selector * is_last * value_before_lo, + // storage_selector * is_last * value_hi, + // storage_selector * is_last * value_lo, + // storage_selector * is_last * state_root_hi, + // storage_selector * is_last * state_root_lo, + // storage_selector * is_last * state_root_before_hi, + // storage_selector * is_last * state_root_before_lo + //}}); + + // Specific constraints for TX_REFUND_OP + // address, field_tag and storage_key are 0 + // state_root eqauls state_root_prev + // initial_value is 0 + // if first access is Read then value = 0 + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * address[1], -1)); + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * field_type[1], -1)); + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * storage_key_hi[1], -1)); + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * storage_key_lo[1], -1)); + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * is_first[1] * (1-is_write[1]) * value_hi[1], -1)); + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * is_first[1] * (1-is_write[1]) * value_lo[1], -1)); + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * (state_root_hi[1] - state_root_before_hi[1]), -1)); + special_constraints[TX_REFUND_OP].push_back(context_object.relativize(tx_refund_selector * (state_root_lo[1] - state_root_before_lo[1]), -1)); + + // Specific constraints for TX_ACCESS_LIST_ACCOUNT_OP + // field_tag and storage_key are 0 + // value is boolean + // initial_value is 0 + // state_root eqauls state_root_prev + // value column at previous rotation equals value_prev at current rotation + special_constraints[TX_ACCESS_LIST_ACCOUNT_OP].push_back(context_object.relativize(tx_access_list_account_selector * field_type[1], -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_OP].push_back(context_object.relativize(tx_access_list_account_selector * storage_key_hi[1], -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_OP].push_back(context_object.relativize(tx_access_list_account_selector * storage_key_lo[1], -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_OP].push_back(context_object.relativize(tx_access_list_account_selector * value_hi[1], -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_OP].push_back(context_object.relativize(tx_access_list_account_selector * value_lo[1] * (1 - value_lo[1]), -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_OP].push_back(context_object.relativize(tx_access_list_account_selector * (state_root_hi[1] - state_root_before_hi[1]), -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_OP].push_back(context_object.relativize(tx_access_list_account_selector * (state_root_lo[1] - state_root_before_lo[1]), -1)); + //if(i != 0) + non_first_row_constraints.push_back(context_object.relativize(tx_access_list_account_selector * (1 - is_first[1]) * (value_hi[0] - value_before_hi[1]), -1)); + //if(i != 0) + non_first_row_constraints.push_back(context_object.relativize(tx_access_list_account_selector * (1 - is_first[1]) * (value_lo[0] - value_before_lo[1]), -1)); + + // Specific constraints for + // field_tag is 0 + // value is boolean + // initial_value is 0 + // state_root eqauls state_root_prev + // value column at previous rotation equals value_prev at current rotation + special_constraints[TX_ACCESS_LIST_ACCOUNT_STORAGE_OP].push_back(context_object.relativize(tx_access_list_account_selector * field_type[1], -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_STORAGE_OP].push_back(context_object.relativize(tx_access_list_account_selector * value_hi[1], -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_STORAGE_OP].push_back(context_object.relativize(tx_access_list_account_selector * value_lo[1] * (1 - value_lo[1]), -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_STORAGE_OP].push_back(context_object.relativize(tx_access_list_account_selector * (state_root_hi[1] - state_root_before_hi[1]), -1)); + special_constraints[TX_ACCESS_LIST_ACCOUNT_STORAGE_OP].push_back(context_object.relativize(tx_access_list_account_selector * (state_root_lo[1] - state_root_before_lo[1]), -1)); + //if(i != 0) + non_first_row_constraints.push_back(context_object.relativize(tx_access_list_account_selector * (1 - is_first[1]) * (value_hi[0] - value_before_hi[1]), -1)); + //if(i != 0) + non_first_row_constraints.push_back(context_object.relativize(tx_access_list_account_selector * (1 - is_first[1]) * (value_lo[0] - value_before_lo[1]), -1)); + + + // Specific constraints for TX_LOG_OP + // is_write is true + // initial_value is 0 + // state_root eqauls state_root_prev + // value_prev equals initial_value + // address 64 bits + special_constraints[TX_LOG_OP].push_back(context_object.relativize(tx_log_selector * (1 - is_write[1]), -1)); + special_constraints[TX_LOG_OP].push_back(context_object.relativize(tx_log_selector * (state_root_hi[1] - state_root_before_hi[1]), -1)); + special_constraints[TX_LOG_OP].push_back(context_object.relativize(tx_log_selector * (state_root_lo[1] - state_root_before_lo[1]), -1)); + special_constraints[TX_LOG_OP].push_back(context_object.relativize(tx_log_selector * value_before_hi[1], -1)); + special_constraints[TX_LOG_OP].push_back(context_object.relativize(tx_log_selector * value_before_lo[1], -1)); + + // Specific constraints for TX_RECEIPT_OP + // address and storage_key are 0 + // field_tag is boolean (according to EIP-658) + // tx_id increases by 1 and value increases as well if tx_id changes + // tx_id is 1 if it's the first row and tx_id is in 11 bits range + // state root is the same + // value_prev is 0 and initial_value is 0 + special_constraints[TX_RECEIPT_OP].push_back(context_object.relativize(tx_receipt_selector * address[1], -1)); + special_constraints[TX_RECEIPT_OP].push_back(context_object.relativize(tx_receipt_selector * storage_key_hi[1], -1)); + special_constraints[TX_RECEIPT_OP].push_back(context_object.relativize(tx_receipt_selector * storage_key_lo[1], -1)); + + // Specific constraints for PADDING + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * address[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * storage_key_hi[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * storage_key_lo[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * id[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * address[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * field_type[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * rw_id[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * state_root_hi[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * state_root_lo[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * state_root_before_hi[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * state_root_before_lo[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * value_hi[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * value_lo[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * value_before_hi[1], -1)); + special_constraints[PADDING_OP].push_back(context_object.relativize(padding_selector * value_before_lo[1], -1)); + + std::size_t max_constraints = 0; + for(const auto&[k,constr] : special_constraints){ + if( constr.size() > max_constraints) max_constraints = constr.size(); + } + for( std::size_t i = 0; i < max_constraints; i++ ){ + TYPE constraint; + for(const auto&[k,constr] : special_constraints){ + if( constr.size() > i ) constraint += constr[i]; + } + every_row_constraints.push_back(constraint); + } + + { + PROFILE_SCOPE("RW circuit constraints row definition") + std::vector every_row; + std::vector non_first_row; + for( std::size_t i = 0; i < max_rw_size; i++){ + every_row.push_back(i); + if( i!= 0 ) non_first_row.push_back(i); + } + for( auto& constraint: every_row_constraints){ + context_object.relative_constrain(constraint, 0, max_rw_size-1); + } + for( auto &constraint:chunked_16_lookups ){ + std::vector tmp = {constraint}; + context_object.relative_lookup(tmp, "chunk_16_bits/full", 0, max_rw_size-1); + } + for( auto &constraint: non_first_row_constraints ){ + context_object.relative_constrain(constraint, 1, max_rw_size - 1); + } + } + } + std::cout << std::endl; + } + }; + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/bytecode_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/bytecode_table.hpp new file mode 100644 index 0000000000..4fabf33ded --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/bytecode_table.hpp @@ -0,0 +1,122 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + // Component for bytecode table + + template + class bytecode_table : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + using input_type = typename std::conditional::type; + + std::size_t max_bytecode_size; + + // interfaces for interaction with other components: + std::vector tag = std::vector(max_bytecode_size); + std::vector index = std::vector(max_bytecode_size); + std::vector value = std::vector(max_bytecode_size); + std::vector is_opcode = std::vector(max_bytecode_size); + std::vector hash_hi = std::vector(max_bytecode_size); + std::vector hash_lo = std::vector(max_bytecode_size); + + static std::size_t get_witness_amount(){ + return 6; + } + + bytecode_table(context_type &context_object, + const input_type &input, + std::size_t max_bytecode_size_, + bool make_links = true) : + max_bytecode_size(max_bytecode_size_), + generic_component(context_object) { + + // if we're in assignment stage, prepare all the values + if constexpr (stage == GenerationStage::ASSIGNMENT) { + auto bytecodes = input.get_data(); + + std::size_t cur = 0; + for(std::size_t i = 0; i < bytecodes.size(); i++) { + TYPE hash_hi_val = w_hi(bytecodes[i].second); + TYPE hash_lo_val = w_lo(bytecodes[i].second); + TYPE push_size = 0; + const auto &buffer = bytecodes[i].first; + for(std::size_t j = 0; j < buffer.size(); j++, cur++){ + BOOST_ASSERT(cur < max_bytecode_size); + std::uint8_t byte = buffer[j]; + hash_hi[cur] = hash_hi_val; + hash_lo[cur] = hash_lo_val; + if( j == 0) { // HEADER + value[cur] = buffer.size(); + tag[cur] = 0; + index[cur] = 0; + is_opcode[cur] = 0; + push_size = 0; // might be unnecessary + cur++; + } + // BYTE + value[cur] = byte; + hash_hi[cur] = hash_hi_val; + hash_lo[cur] = hash_lo_val; + tag[cur] = 1; + index[cur] = j; + if (push_size == 0) { + is_opcode[cur] = 1; + if (byte > 0x5f && byte < 0x80) push_size = byte - 0x5f; + } else { + is_opcode[cur] = 0; + push_size--; + } + //std::cout << cur << ". " << std::hex << std::size_t(byte) << " " << is_opcode[cur] << " " << push_size << std::dec << std::endl; + } + } + } + // allocate everything. NB: this replaces the map from the original component + for(std::size_t i = 0; i < max_bytecode_size; i++) { + allocate(tag[i],0,i); + allocate(index[i],1,i); + allocate(value[i],2,i); + allocate(is_opcode[i],3,i); + allocate(hash_hi[i],4,i); + allocate(hash_lo[i],5,i); + } + // declare dynamic lookup table + lookup_table("zkevm_bytecode",std::vector({0,1,2,3,4,5}),0,max_bytecode_size); + }; + }; + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/copy_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/copy_table.hpp new file mode 100644 index 0000000000..32f22fc847 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/copy_table.hpp @@ -0,0 +1,120 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class copy_table : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using input_type = typename std::conditional, std::nullptr_t>::type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + public: + // For connection with upper-level circuits + std::vector is_first; + std::vector id_hi; + std::vector id_lo; + std::vector cp_type; + std::vector addr; + std::vector length; + std::vector is_write; + std::vector rw_counter; + + static std::size_t get_witness_amount(){ + return 8; + } + + copy_table(context_type &context_object, const input_type &input, std::size_t max_copy_size, bool register_dynamic_lookup) + :generic_component(context_object), + is_first(max_copy_size), + id_hi(max_copy_size), id_lo(max_copy_size), cp_type(max_copy_size), addr(max_copy_size), + length(max_copy_size), is_write(max_copy_size), rw_counter(max_copy_size) + { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + std::cout << "Copy table assignment " << input.size() << std::endl; + std::size_t current_row = 0; + for( auto &cp: input ){ + // std::cout + // << "\tCopy event " << copy_op_to_num(cp.source_type) + // << " => " << copy_op_to_num(cp.destination_type) + // << " bytes size" << cp.bytes.size() + // << std::endl; + std::size_t src_rw_counter = cp.initial_rw_counter; + std::size_t dst_rw_counter = cp.initial_rw_counter; + if( cp.source_type == copy_operand_type::memory) + dst_rw_counter += cp.length;// Fake rw for some copy events + for( std::size_t i = 0; i < cp.bytes.size(); i++ ){ + BOOST_ASSERT(current_row < max_copy_size); + if( i== 0) { + is_first[current_row] = 1; + is_first[current_row + 1] = 1; + } + length[current_row] = cp.length - i; + length[current_row+1] = cp.length - i; + rw_counter[current_row] = src_rw_counter; + rw_counter[current_row + 1] = dst_rw_counter; + cp_type[current_row] = copy_op_to_num(cp.source_type); + cp_type[current_row+1] = copy_op_to_num(cp.destination_type); + addr[current_row] = cp.src_address + i; + addr[current_row+1] = cp.dst_address + i; + id_hi[current_row] = w_hi(cp.source_id); + id_lo[current_row] = w_lo(cp.source_id); + id_hi[current_row+1] = w_hi(cp.destination_id); + id_lo[current_row+1] = w_lo(cp.destination_id); + src_rw_counter++; + dst_rw_counter++; + current_row += 2; + } + } + } else { + } + for( std::size_t i = 0; i < max_copy_size; i++ ){ + if constexpr ( stage == GenerationStage::ASSIGNMENT ) + is_write[i] = i%2 ? 1 : 0; + + allocate(is_first[i], 0, i); + allocate(id_hi[i], 1, i); + allocate(id_lo[i], 2, i); + allocate(cp_type[i], 3, i); + allocate(addr[i], 4, i); + allocate(length[i], 5, i); + allocate(is_write[i], 6, i); + allocate(rw_counter[i], 7, i); + } + if( register_dynamic_lookup ) + lookup_table("zkevm_copy",std::vector({0,1,2,3,4,5,6,7}),0,max_copy_size); + } + }; + } + } +} diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/exp_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/exp_table.hpp new file mode 100644 index 0000000000..5e833c99a0 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/exp_table.hpp @@ -0,0 +1,128 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +// @file Declaration of interfaces for PLONK BBF exp table class +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include +#include +// #include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class exp_table : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + using word_type = zkevm_word_type; + using input_type = typename std::conditional>, std::nullptr_t>::type; + + std::size_t max_exponentiations; + std::vector selector; + std::vector base_hi; + std::vector base_lo; + std::vector exponent_hi; + std::vector exponent_lo; + std::vector exponentiation_hi; + std::vector exponentiation_lo; + + public: + static std::size_t get_witness_amount(){ + return 7; + } + + exp_table( + context_type &context_object, + const input_type &input, + std::size_t max_exponentiations_ + ): max_exponentiations(max_exponentiations_), + generic_component(context_object), + selector(max_exponentiations), + base_hi(max_exponentiations), + base_lo(max_exponentiations), + exponent_hi(max_exponentiations), + exponent_lo(max_exponentiations), + exponentiation_hi(max_exponentiations), + exponentiation_lo(max_exponentiations) + { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + BOOST_ASSERT(input.size() <= max_exponentiations); + + std::size_t i = 0; + std::cout << "Exp table:" << std::endl; + for (i = 0; i < input.size(); i++) { + BOOST_ASSERT(input.size() < max_exponentiations); + zkevm_word_type base = input[i].first; + zkevm_word_type exponent = input[i].second; + zkevm_word_type exponentiation = exp_by_squaring(base, exponent); + std::cout <<"\t" << base << " ^ " << exponent << " = " << exponentiation << std::endl; + + selector[i] = 1; + base_hi[i] = w_hi(base); base_lo[i] = w_lo(base); + exponent_hi[i] = w_hi(exponent); exponent_lo[i] = w_lo(exponent); + exponentiation_hi[i] = w_hi(exponentiation); exponentiation_lo[i] = w_lo(exponentiation); + } + + // if there are unused rows, fill in with valid exp triplets (0^1 = 0) + // while (i < max_exponentiations) { + // selector[i] = 0; + // base_hi[i] = 0; base_lo[i] = 0; + // exponent_hi[i] = 0; exponent_lo[i] = 0; + // exponentiation_hi[i] = 0; exponentiation_lo[i] = 0; + // i++; + // } + } + + for (std::size_t i = 0; i < max_exponentiations; i++) { + allocate(selector[i], 0, i); + allocate(base_hi[i], 1, i); + allocate(base_lo[i], 2, i); + allocate(exponent_hi[i], 3, i); + allocate(exponent_lo[i], 4, i); + allocate(exponentiation_hi[i], 5, i); + allocate(exponentiation_lo[i], 6, i); + } + + lookup_table("zkevm_exp", {0, 1, 2, 3, 4, 5, 6}, 0, max_exponentiations); + }; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil + diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/oracles.cpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/index_selector.hpp similarity index 72% rename from parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/oracles.cpp rename to crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/index_selector.hpp index 4184eac810..d25298f666 100644 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/oracles.cpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/index_selector.hpp @@ -1,5 +1,5 @@ //---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov +// Copyright (c) 2024 Elena Tatuzova // // MIT License // @@ -22,21 +22,9 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#define BOOST_TEST_MODULE pickles_test - -#include - -#include -#include -#include - -#include - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(pickles_oracles_test_suite) - -BOOST_AUTO_TEST_CASE(pickles_oracle_test) { -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file +namespace nil { + namespace blueprint { + namespace bbf { + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/keccak_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/keccak_table.hpp new file mode 100644 index 0000000000..da418592c9 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/keccak_table.hpp @@ -0,0 +1,116 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include + +#include //Move needed utils to bbf +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + // Component for keccak table + template + class keccak_table : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + + public: + using typename generic_component::TYPE; + struct input_type{ + TYPE rlc_challenge; + typename std::conditional::type private_input; + }; + std::size_t max_blocks; + + std::vector is_last = std::vector(max_blocks); + std::vector hash_hi = std::vector(max_blocks); + std::vector hash_lo = std::vector(max_blocks); + std::vector RLC = std::vector(max_blocks); + + static std::size_t get_witness_amount(){ + return 4; + } + + keccak_table(context_type &context_object, + input_type input, + std::size_t max_blocks_ + ) : + max_blocks(max_blocks_), + generic_component(context_object) { + std::cout << "a"; + if constexpr (stage == GenerationStage::ASSIGNMENT) { + TYPE theta = input.rlc_challenge; + + std::size_t input_idx = 0; + std::size_t block_counter = 0; + std::vector msg; + zkevm_word_type hash; + + while( block_counter < max_blocks ) { + if( input_idx < input.private_input.input.size() ){ + msg = std::get<0>(input.private_input.input[input_idx]); + hash = std::get<1>(input.private_input.input[input_idx]); + input_idx++; + } else { + msg = {}; + hash = zkevm_keccak_hash(msg); + } + TYPE RLC_value = calculateRLC(msg, theta); + for( std::size_t block = 0; block < std::ceil(float(msg.size() + 1)/136); block++){ + assert(block_counter < max_blocks); + if( block != std::ceil(float(msg.size() + 1)/136) - 1){ + is_last[block_counter] = 0; + } else { + is_last[block_counter] = 1; + } + RLC[block_counter] = RLC_value; + hash_hi[block_counter] = w_hi(hash); + hash_lo[block_counter] = w_lo(hash); + block_counter++; + } + } + } + // allocate everything. NB: this replaces the map from the original component + for(std::size_t i = 0; i < max_blocks; i++) { + allocate(is_last[i],0,i); + allocate(RLC[i],1,i); + allocate(hash_hi[i],2,i); + allocate(hash_lo[i],3,i); + } + // declare dynamic lookup table + lookup_table("keccak_table",std::vector({0,1,2,3}),0,max_blocks); + }; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/rw_table.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/rw_table.hpp new file mode 100644 index 0000000000..a0aacd48b6 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/rw_table.hpp @@ -0,0 +1,105 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + class rw_table : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::copy_constrain; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using typename generic_component::TYPE; + using input_type = typename std::conditional::type; + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + public: + // For connection with upper-level circuits + std::vector op; + std::vector id; + std::vector address; + std::vector storage_key_hi; + std::vector storage_key_lo; + std::vector field_type; + std::vector rw_id; + std::vector is_write; + std::vector value_hi; + std::vector value_lo; + + static std::size_t get_witness_amount(){ return 10; } + + rw_table(context_type &context_object, const input_type &input, std::size_t max_rw_size, bool register_dynamic_lookup) + :generic_component(context_object), + op(max_rw_size), id(max_rw_size), address(max_rw_size), + storage_key_hi(max_rw_size), storage_key_lo(max_rw_size), + field_type(max_rw_size), is_write(max_rw_size), + rw_id(max_rw_size), value_hi(max_rw_size), value_lo(max_rw_size) + { + if constexpr (stage == GenerationStage::ASSIGNMENT) { + auto rw_trace = input; + //std::cout << "RW assign size = " << rw_trace.size() << std::endl; + BOOST_ASSERT(rw_trace.size() < max_rw_size); + for( std::size_t i = 0; i < rw_trace.size(); i++ ){ + //if( rw_trace[i].op != rw_operation_type::padding ) + // std::cout << "\t" << i << "." << rw_trace[i] << std::endl; + op[i] = rw_op_to_num(rw_trace[i].op); + id[i] = rw_trace[i].call_id; + address[i] = integral_type(rw_trace[i].address); + storage_key_hi[i] = w_hi(rw_trace[i].storage_key); + storage_key_lo[i] = w_lo(rw_trace[i].storage_key); + field_type[i] = 0; // TODO: fix it for different state updates + rw_id[i] = rw_trace[i].rw_counter; + is_write[i] = rw_trace[i].is_write; + value_hi[i] = w_hi(rw_trace[i].value); + value_lo[i] = w_lo(rw_trace[i].value); + } + for( std::size_t i = rw_trace.size(); i < max_rw_size; i++ ){ + op[i] = rw_op_to_num(rw_operation_type::padding); + } + } + for( std::size_t i = 0; i < max_rw_size; i++ ){ + allocate(op[i], 0, i); + allocate(id[i], 1, i); + allocate(address[i], 2, i); + allocate(storage_key_hi[i], 3, i); + allocate(storage_key_lo[i], 4, i); + allocate(field_type[i], 5, i); + allocate(rw_id[i], 6, i); + allocate(is_write[i], 7, i); + allocate(value_hi[i], 8, i); + allocate(value_lo[i], 9, i); + } + if( register_dynamic_lookup ) + lookup_table("zkevm_rw",std::vector({0,1,2,3,4,5,6,7,8,9}),0,max_rw_size); + } + }; + } + } +} \ No newline at end of file diff --git a/crypto3/libs/block/include/nil/crypto3/block/accumulators/parameters/cipher.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/state.hpp similarity index 69% rename from crypto3/libs/block/include/nil/crypto3/block/accumulators/parameters/cipher.hpp rename to crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/state.hpp index e5bd5e91c3..d25298f666 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/accumulators/parameters/cipher.hpp +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/subcomponents/state.hpp @@ -1,5 +1,5 @@ //---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2024 Elena Tatuzova // // MIT License // @@ -22,19 +22,9 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_BLOCK_ACCUMULATORS_PARAMETERS_CIPHER_HPP -#define CRYPTO3_BLOCK_ACCUMULATORS_PARAMETERS_CIPHER_HPP - -#include -#include - namespace nil { - namespace crypto3 { - namespace accumulators { - BOOST_PARAMETER_KEYWORD(tag, cipher) - BOOST_ACCUMULATORS_IGNORE_GLOBAL(cipher) - } // namespace accumulators - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BITS_HPP + namespace blueprint { + namespace bbf { + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/copy_event.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/copy_event.hpp new file mode 100644 index 0000000000..03b2d94ca6 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/copy_event.hpp @@ -0,0 +1,70 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include + +#include //Move needed utils to bbf +#include + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + enum class copy_operand_type { + padding, memory, bytecode, calldata, log, keccak, returndata + }; + std::size_t copy_op_to_num(copy_operand_type copy_op){ + switch(copy_op){ + case copy_operand_type::padding: return 0; + case copy_operand_type::memory: return 1; + case copy_operand_type::bytecode: return 2; + case copy_operand_type::log: return 3; + case copy_operand_type::keccak: return 4; + case copy_operand_type::returndata: return 5; + case copy_operand_type::calldata: return 6; + } + BOOST_ASSERT(false); + return 0; + } + static constexpr std::size_t copy_operand_types_amount = 7; + + struct copy_event{ + using zkevm_word_type = nil::blueprint::zkevm_word_type; + + zkevm_word_type source_id; + copy_operand_type source_type; + std::size_t src_address; + zkevm_word_type destination_id; + copy_operand_type destination_type; + std::size_t dst_address; + std::size_t length; + std::size_t initial_rw_counter; + std::vector bytes; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/hashed_buffers.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/hashed_buffers.hpp new file mode 100644 index 0000000000..76c6f3834f --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/hashed_buffers.hpp @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include + +#include //Move needed utils to bbf +#include + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + // ! zkevm_word.hpp has similar function but it is not in the bbf namespace + // TODO: Remove one of them + + nil::blueprint::zkevm_word_type + zkevm_keccak_hash(const std::vector &buffer){ + nil::crypto3::hashes::keccak_1600<256>::digest_type d = nil::crypto3::hash>(buffer); + nil::crypto3::algebra::fields::field<256>::integral_type n(d); + nil::blueprint::zkevm_word_type hash_value(n); + + return hash_value; + } + + class zkevm_keccak_buffers { + public: + using zkevm_word_type = nil::blueprint::zkevm_word_type; + using data_item = std::pair, zkevm_word_type>; + using data_type = std::vector; + + void fill_data(const data_type& _input){ + input = _input; + } + + std::size_t new_buffer(const data_item &_pair){ + input.push_back(_pair); + return input.size() - 1; + } + + std::size_t new_buffer(const std::vector& buffer){ + input.push_back({buffer, zkevm_keccak_hash(buffer)}); + return input.size() - 1; + } + + void push_byte(std::size_t code_id, std::uint8_t b){ + BOOST_ASSERT(code_id < input.size()); + input[code_id].first.push_back(b); + input[code_id].second = zkevm_keccak_hash(input[code_id].first); + } + + const data_type &get_data() const{ + return input; + } + data_type input; + }; + + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/opcode.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/opcode.hpp new file mode 100644 index 0000000000..cafae37b2d --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/opcode.hpp @@ -0,0 +1,61 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include + +#include //Move needed utils to bbf +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + using opcode_input_type = typename std::conditional>::type; + + template + class opcode_abstract{ + public: + virtual std::size_t rows_amount()=0; + + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) = 0; + virtual void fill_context( + typename generic_component::context_type &context, + const opcode_input_type ¤t_state + ) = 0; + protected: + std::size_t gas = 0; + std::size_t stack_input = 0; + std::size_t stack_output = 0; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/rw_operation.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/rw_operation.hpp new file mode 100644 index 0000000000..c049c720b1 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/rw_operation.hpp @@ -0,0 +1,153 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include + +#include //Move needed utils to bbf +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + enum class rw_operation_type { + start, stack, memory,storage, transient_storage, call_context, + account, tx_refund_op, tx_access_list_account, + tx_access_list_account_storage, tx_log, tx_receipt, + padding + }; + static constexpr std::size_t rw_operation_types_amount = 13; + + std::size_t rw_op_to_num(rw_operation_type rw_op){ + if( rw_op == rw_operation_type::start ) return 0; + if( rw_op == rw_operation_type::stack ) return 1; + if( rw_op == rw_operation_type::memory ) return 2; + if( rw_op == rw_operation_type::storage ) return 3; + if( rw_op == rw_operation_type::transient_storage ) return 4; + if( rw_op == rw_operation_type::call_context ) return 5; + if( rw_op == rw_operation_type::account ) return 6; + if( rw_op == rw_operation_type::tx_refund_op ) return 7; + if( rw_op == rw_operation_type::tx_access_list_account ) return 8; + if( rw_op == rw_operation_type::tx_access_list_account_storage ) return 9; + if( rw_op == rw_operation_type::tx_log ) return 10; + if( rw_op == rw_operation_type::tx_receipt ) return 11; + if( rw_op == rw_operation_type::padding ) return 12; + BOOST_ASSERT(false); + return 12; + + } + + struct rw_operation{ + using zkevm_word_type = nil::blueprint::zkevm_word_type; + + rw_operation_type op; // operation type + std::size_t call_id; // transaction number inside block + zkevm_word_type address; // account_address (160 bits) + std::uint8_t field; // — for storage only. If given value exist before current operation or not + zkevm_word_type storage_key; + std::size_t rw_counter; + bool is_write; + zkevm_word_type value; + zkevm_word_type initial_value; // for stack, memory ,it’s zero, Storage item value before transaction for storage operation + zkevm_word_type root; // used only for storage. Last operation. + zkevm_word_type initial_root; // used only for storage. + bool operator< (const rw_operation &other) const { + if( op != other.op ) return op < other.op; + if( call_id != other.call_id ) return call_id < other.call_id; + if( address != other.address ) return address.base() < other.address.base(); + if( field != other.field ) return field < other.field; + if( storage_key != other.storage_key ) return storage_key.base() < other.storage_key.base(); + if( rw_counter != other.rw_counter) return rw_counter < other.rw_counter; + return false; + } + }; + + // For testing purposes + std::ostream& operator<<(std::ostream& os, const rw_operation& obj){ + if(obj.op == rw_operation_type::start ) os << "START : "; + if(obj.op == rw_operation_type::stack ) os << "STACK : "; + if(obj.op == rw_operation_type::memory ) os << "MEMORY : "; + if(obj.op == rw_operation_type::storage ) os << "STORAGE : "; + if(obj.op == rw_operation_type::transient_storage ) os << "TRANSIENT_STORAGE : "; + if(obj.op == rw_operation_type::call_context ) os << "CALL_CONTEXT_OP : "; + if(obj.op == rw_operation_type::account ) os << "ACCOUNT_OP : "; + if(obj.op == rw_operation_type::tx_refund_op ) os << "TX_REFUND_OP : "; + if(obj.op == rw_operation_type::tx_access_list_account ) os << "TX_ACCESS_LIST_ACCOUNT_OP : "; + if(obj.op == rw_operation_type::tx_access_list_account_storage ) os << "TX_ACCESS_LIST_ACCOUNT_STORAGE_OP : "; + if(obj.op == rw_operation_type::tx_log ) os << "TX_LOG_OP : "; + if(obj.op == rw_operation_type::tx_receipt ) os << "TX_RECEIPT_OP : "; + if(obj.op == rw_operation_type::padding ) os << "PADDING_OP : "; + os << obj.rw_counter << " call_id = " << obj.call_id << ", addr =" << std::hex << obj.address << std::dec; + if(obj.op == rw_operation_type::storage || obj.op == rw_operation_type::transient_storage) + os << " storage_key = " << obj.storage_key; + if(obj.is_write) os << " W "; else os << " R "; + os << "[" << std::hex << obj.initial_value << std::dec <<"] => "; + os << "[" << std::hex << obj.value << std::dec <<"]"; + return os; + } + + rw_operation start_rw_operation(){ + return rw_operation({rw_operation_type::start, 0, 0, 0, 0, 0, 0, 0}); + } + + rw_operation stack_rw_operation(std::size_t id, uint16_t address, std::size_t rw_id, bool is_write, zkevm_word_type value){ + BOOST_ASSERT(id < ( 1 << 28)); // Maximum calls amount(?) + BOOST_ASSERT(address < 1024); + return rw_operation({rw_operation_type::stack, id, address, 0, 0, rw_id, is_write, value, 0}); + } + + rw_operation memory_rw_operation(std::size_t id, zkevm_word_type address, std::size_t rw_id, bool is_write, zkevm_word_type value){ + BOOST_ASSERT(id < ( 1 << 28)); // Maximum calls amount(?) + return rw_operation({rw_operation_type::memory, id, address, 0, 0, rw_id, is_write, value, 0}); + } + + rw_operation storage_rw_operation( + std::size_t id, + zkevm_word_type storage_key, + std::size_t rw_id, + bool is_write, + zkevm_word_type value, + zkevm_word_type value_prev, + zkevm_word_type root = zkevm_word_type(0) + ){ + return rw_operation({rw_operation_type::storage, id, 0, 0, storage_key, rw_id, is_write, value, value_prev}); + } + + rw_operation padding_operation(){ + return rw_operation({rw_operation_type::padding, 0, 0, 0, 0, 0, 0, 0}); + } + + class rw_operations_vector: public std::vector{ + public: + rw_operations_vector(){ + this->push_back(start_rw_operation()); + } + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/zkevm_input_generator.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/zkevm_input_generator.hpp new file mode 100644 index 0000000000..40a5cc06e1 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/zkevm_input_generator.hpp @@ -0,0 +1,73 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include +#include + +#include //Move needed utils to bbf +#include + +#include +#include +#include +#include + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + class zkevm_abstract_input_generator{ + public: + virtual zkevm_keccak_buffers keccaks() = 0; + virtual zkevm_keccak_buffers bytecodes() = 0; + virtual rw_operations_vector rw_operations() = 0; + virtual std::vector copy_events() = 0; + virtual std::vector zkevm_states() = 0; + virtual std::vector> exponentiations() = 0; + }; + + class zkevm_small_test_input_generator:zkevm_abstract_input_generator{ + public: + zkevm_keccak_buffers keccaks() override {return _keccaks;} + zkevm_keccak_buffers bytecodes() override { return _bytecodes;} + rw_operations_vector rw_operations() override {return _rw_operations;} + std::vector copy_events() override { return _copy_events;} + std::vector zkevm_states() override{ return _zkevm_states;} + std::vector> exponentiations()override{return _exponentiations;} + + zkevm_small_test_input_generator(){} + private: + zkevm_keccak_buffers _keccaks; + zkevm_keccak_buffers _bytecodes; + rw_operations_vector _rw_operations; + std::vector _copy_events; + std::vector _zkevm_states; + std::vector> _exponentiations; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/zkevm_state.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/zkevm_state.hpp new file mode 100644 index 0000000000..da13339dda --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/types/zkevm_state.hpp @@ -0,0 +1,199 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once +#include +#include + +#include //Move needed utils to bbf +#include + +#include + +namespace nil { + namespace blueprint { + namespace bbf { + class zkevm_state{ + public: + zkevm_word_type tx_hash; // full transaction hash. Now it is not used. But it’ll be used some day + std::size_t call_id; // call_id — number of current transaction in block + std::size_t pc; + std::size_t gas; + std::size_t rw_counter; + zkevm_word_type bytecode_hash; + std::size_t opcode; + zkevm_word_type additional_input; // data for pushX opcode + std::size_t stack_size; // BEFORE opcode + std::size_t memory_size; // BEFORE opcode + bool tx_finish; // convinent, but optional11. + std::size_t error_opcode; // real opcode if error + + zkevm_word_type stack_top(std::size_t depth = 0) const{ + BOOST_ASSERT(depth < stack_slice.size()); + return stack_slice[stack_slice.size() - 1 - depth]; + } + + zkevm_word_type memory(std::size_t addr) const{ + if( memory_slice.find(addr) == memory_slice.end() ) + return 0; + else + return memory_slice.at(addr); + } + + zkevm_word_type storage(zkevm_word_type key) const{ + if( storage_slice.find(key) == storage_slice.end() ) + return 0; + else + return storage_slice.at(key); + } + zkevm_state( + const std::vector &stack, + const std::map &memory, + const std::map &storage + ): stack_slice(stack), memory_slice(memory), storage_slice(storage){} + + zkevm_state(){} + public: + std::vector stack_slice; // BEFORE opcode + std::map memory_slice; // BEFORE opcode + std::map storage_slice; // BEFORE opcode + }; + + template + struct state_vars{ + using TYPE = typename generic_component::TYPE; + + TYPE call_id; + TYPE bytecode_hash_hi; + TYPE bytecode_hash_lo; + TYPE pc; + TYPE opcode; + TYPE gas_hi; + TYPE gas_lo; + TYPE stack_size; + TYPE memory_size; + TYPE rw_counter; + + TYPE row_counter; + TYPE step_start; + TYPE row_counter_inv; + TYPE opcode_parity; + TYPE is_even;// Do we really need it? + + static std::size_t get_items_amout(){ return 15; } + }; + + template + class zkevm_state_vars{ + public: + using TYPE = typename generic_component::TYPE; + + zkevm_state_vars(const std::vector> &_states, std::size_t size){ + state.assign(_states.begin()+1, _states.begin() + size + 2); + } + TYPE tx_hash(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].tx_hash; + } // full transaction hash. Now it is not used. But it’ll be used some day + TYPE call_id(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].call_id; + } // call_id — number of current transaction in block + TYPE pc(std::size_t row) const{ + //BOOST_ASSERT(row < state.size() - 1); + return state[row].pc; + } + TYPE gas(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].gas_hi * 0x10000 + state[row].gas_lo; + } + TYPE rw_counter(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].rw_counter; + } + TYPE bytecode_hash_hi(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].bytecode_hash_hi; + } + TYPE bytecode_hash_lo(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].bytecode_hash_lo; + } + TYPE opcode(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].opcode; + } + TYPE additional_input(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].additional_input; + } // data for pushX opcode + TYPE stack_size(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].stack_size; + } // BEFORE opcode + TYPE memory_size(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].memory_size; + } // BEFORE opcode + TYPE tx_finish(std::size_t row) const{ + BOOST_ASSERT(row < state.size() - 1); + return state[row].tx_finish; + } // convinent, but optional11. + + TYPE tx_hash_next() const{ + return state[state.size()-1].tx_hash; + } // full transaction hash. Now it is not used. But it’ll be used some day + TYPE call_id_next() const{ + return state[state.size()-1].call_id; + } // call_id — number of current transaction in block + TYPE pc_next() const{ + return state[state.size()-1].pc; + } + TYPE gas_next() const{ + return state[state.size()-1].gas_hi * 0x10000 + state[state.size()-1].gas_lo;; + } + TYPE rw_counter_next() const{ + return state[state.size()-1].rw_counter; + } + TYPE bytecode_hash_hi_next() const{ + return state[state.size()-1].bytecode_hash_hi; + } + TYPE bytecode_hash_lo_next() const{ + return state[state.size()-1].bytecode_hash_lo; + } + TYPE opcode_next() const{ + return state[state.size()-1].opcode; + } + TYPE stack_size_next() const{ + return state[state.size()-1].stack_size; + } // BEFORE opcode + TYPE memory_size_next() const{ + return state[state.size()-1].memory_size; + } // BEFORE opcode + protected: + std::vector> state; + }; + } // namespace bbf + } // namespace blueprint +} // namespace nil \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/util.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/util.hpp new file mode 100644 index 0000000000..19950f42af --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/util.hpp @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include +#include + +#include +#include +#include + +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf { + template + std::pairchunks16_to_chunks128(const std::vector &chunks){ + TYPE result_hi, result_lo; + for(std::size_t i = 0; i < 8; i++){ + result_hi *= 0x10000; + result_hi += chunks[i]; + result_lo *= 0x10000; + result_lo += chunks[i+8]; + } + return {result_hi, result_lo}; + } + + template + std::pairchunks16_to_chunks128_reversed(const std::vector &chunks){ + TYPE result_hi, result_lo; + for(std::size_t i = 0; i < 8; i++){ + result_lo *= 0x10000; + result_lo += chunks[7 - i]; + result_hi *= 0x10000; + result_hi += chunks[15 - i]; + } + return {result_hi, result_lo}; + } + + template + std::pairchunks8_to_chunks128(const std::vector &chunks){ + TYPE result_hi, result_lo; + for(std::size_t i = 0; i < 16; i++){ + result_hi *= 0x100; + result_hi += chunks[i]; + result_lo *= 0x100; + result_lo += chunks[i+16]; + } + return {result_hi, result_lo}; + } + + zkevm_word_type exp_by_squaring(zkevm_word_type a, zkevm_word_type n) { + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + if (n == 0x00_big_uint257) return 1; + if (n == 0x01_big_uint257) return a; + + zkevm_word_type exp = exp_by_squaring(a, zkevm_word_type(integral_type(n) >> 1)); + zkevm_word_type exp2 = exp * exp; + if ((integral_type(n) & 1) == 1) { + return exp2 * a; + } + return exp2; + } + + std::size_t log256(zkevm_word_type d){ + using integral_type = nil::crypto3::multiprecision::big_uint<257>; + + std::size_t result = 0; + while(d > 0){ + d = zkevm_word_type(integral_type(d) / integral_type(256u)); + result++; + } + return result; + } + } + } +} \ No newline at end of file diff --git a/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/zkevm.hpp b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/zkevm.hpp new file mode 100644 index 0000000000..45420f5052 --- /dev/null +++ b/crypto3/libs/blueprint/include/nil/blueprint/zkevm_bbf/zkevm.hpp @@ -0,0 +1,544 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#pragma once + +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace nil { + namespace blueprint { + namespace bbf{ + template + class zkevm : public generic_component { + using typename generic_component::context_type; + using generic_component::allocate; + using generic_component::constrain; + using generic_component::lookup; + using generic_component::lookup_table; + public: + using state = state_vars; + using typename generic_component::TYPE; + struct input_type{ + TYPE rlc_challenge; + typename std::conditional::type bytecodes; + typename std::conditional::type keccak_buffers; + typename std::conditional::type rw_operations; + typename std::conditional, std::nullptr_t>::type copy_events; + typename std::conditional, std::nullptr_t>::type zkevm_states; + typename std::conditional>, std::nullptr_t>::type exponentiations; + }; + public: + using val = typename FieldType::value_type; + using BytecodeTable = bytecode_table; + using RWTable = rw_table; + using ExpTable = exp_table; + using CopyTable = copy_table; + + static nil::crypto3::zk::snark::plonk_table_description get_table_description( + std::size_t max_zkevm_rows, + std::size_t max_copy, + std::size_t max_rw, + std::size_t max_keccak_blocks, + std::size_t max_bytecode + ){ + std::size_t implemented_opcodes_amount = get_implemented_opcodes_list().size(); + + std::size_t witness_amount = state::get_items_amout() + std::ceil(float(implemented_opcodes_amount)/4) + max_opcode_height/2 + opcode_columns_amount; + witness_amount += BytecodeTable::get_witness_amount(); + witness_amount += RWTable::get_witness_amount(); + witness_amount += ExpTable::get_witness_amount(); + witness_amount += CopyTable::get_witness_amount(); + witness_amount += 10; + nil::crypto3::zk::snark::plonk_table_description desc(witness_amount, 1, 5, 20); + desc.usable_rows_amount = std::max(max_zkevm_rows, std::max(std::max(max_copy, max_rw), std::max(max_keccak_blocks, max_bytecode)) + 1); + return desc; + } + + zkevm( + context_type &context_object, + const input_type &input, + std::size_t max_zkevm_rows, + std::size_t max_copy, + std::size_t max_rw, + std::size_t max_keccak_blocks, + std::size_t max_bytecode, + std::size_t max_exponentiations = 50 // TODO:remove it later + ) :generic_component(context_object), implemented_opcodes(get_implemented_opcodes_list()) { + std::size_t implemented_opcodes_amount = implemented_opcodes.size(); + std::size_t opcode_selectors_amount = std::ceil(float(implemented_opcodes_amount)/4); + std::size_t opcode_row_selectors_amount = max_opcode_height/2; + std::size_t current_column = state::get_items_amout() + opcode_selectors_amount + opcode_row_selectors_amount; + std::vector opcode_list; + std::vector all_states(max_zkevm_rows); + std::vector> opcode_selectors(max_zkevm_rows, std::vector(opcode_selectors_amount)); + std::vector> opcode_row_selectors(max_zkevm_rows, std::vector(opcode_row_selectors_amount)); + + std::vector opcode_area; + std::cout << "Opcode_area: "; + for( std::size_t i = 0; i < opcode_columns_amount; i++){ + std::cout << current_column << " "; + opcode_area.push_back(current_column++); + } + std::cout << std::endl; + + std::vector bytecode_lookup_area; + std::cout << "Bytecode_area: "; + for( std::size_t i = 0; i < BytecodeTable::get_witness_amount(); i++){ + std::cout << current_column << " "; + bytecode_lookup_area.push_back(current_column++); + } + std::cout << std::endl; + + std::vector exp_lookup_area; + std::cout << "Exponentiation_area: "; + for( std::size_t i = 0; i < ExpTable::get_witness_amount(); i++){ + std::cout << current_column << " "; + exp_lookup_area.push_back(current_column++); + } + std::cout << std::endl; + + std::vector rw_lookup_area; + std::cout << "RW_area: "; + for( std::size_t i = 0; i < RWTable::get_witness_amount(); i++){ + std::cout << current_column << " "; + rw_lookup_area.push_back(current_column++); + } + std::cout << std::endl; + + std::vector copy_lookup_area; + std::cout << "Copy_area: "; + for( std::size_t i = 0; i < CopyTable::get_witness_amount(); i++){ + std::cout << current_column << " "; + copy_lookup_area.push_back(current_column++); + } + std::cout << std::endl; + std::cout << std::endl; + + context_type bytecode_ct = context_object.subcontext(bytecode_lookup_area,1,max_bytecode + 1); + context_type exp_ct = context_object.subcontext( exp_lookup_area, 1, max_exponentiations + 1); + context_type rw_ct = context_object.subcontext(rw_lookup_area,1,max_rw + 1); + context_type copy_ct = context_object.subcontext( copy_lookup_area, 1, max_copy + 1); + + BytecodeTable bc_t = BytecodeTable(bytecode_ct, input.bytecodes, max_bytecode); + ExpTable e_t = ExpTable(exp_ct, input.exponentiations, max_exponentiations); + RWTable rw_t = RWTable(rw_ct, input.rw_operations, max_rw, true); + CopyTable c_t = CopyTable(copy_ct, input.copy_events, max_copy, true); + + auto opcode_impls = get_opcode_implementations(); + + if constexpr (stage == GenerationStage::ASSIGNMENT) { + std::cout << "ZKEVM assign size=" << input.zkevm_states.size() << std::endl; + std::size_t current_row = 0; + for( std::size_t i = 0; i rows_amount(); + std::size_t current_opcode_rows_amount = std::ceil(float(current_opcode_bare_rows_amount)/2) * 2; + // std::cout << "Fresh subcontext:" + // << current_row + current_opcode_bare_rows_amount%2 << "..." + // << current_row + current_opcode_bare_rows_amount%2 + current_opcode_bare_rows_amount - 1 + // << std::endl; + context_type op_ct = context_object.fresh_subcontext( + opcode_area, + current_row + current_opcode_bare_rows_amount%2, + current_row + current_opcode_bare_rows_amount + ); + std::size_t opcode_id = (std::find(implemented_opcodes.begin(), implemented_opcodes.end(), current_opcode) - implemented_opcodes.begin()); + std::cout << current_opcode + << " with id = " << opcode_id + << " will be assigned as " << std::hex << current_state.opcode << std::dec + << " on row " << current_row + << " rows_amount = " << current_opcode_rows_amount + << " stack_size = " << current_state.stack_size + << " memory_size = " << current_state.memory_size + << " rw_counter = 0x" << std::hex<< current_state.rw_counter << std::dec + << " gas = " << current_state.gas + // << " bytecode_hash = " << current_state.bytecode_hash + << std::endl; + + for( std::size_t j = 0; j < current_opcode_rows_amount; j++ ){ + BOOST_ASSERT(current_row < max_zkevm_rows); + std::size_t row_counter = current_opcode_rows_amount - j - 1; + all_states[current_row]= {}; + all_states[current_row].call_id = current_state.call_id; + all_states[current_row].bytecode_hash_hi = w_hi(current_state.bytecode_hash); + all_states[current_row].bytecode_hash_lo = w_lo(current_state.bytecode_hash); + all_states[current_row].pc = current_state.pc; + all_states[current_row].opcode = opcode_to_number(current_opcode); + all_states[current_row].gas_hi = (current_state.gas & 0xFFFF0000) >> 16; + all_states[current_row].gas_lo = current_state.gas & 0xFFFF; + all_states[current_row].stack_size = current_state.stack_size; + all_states[current_row].memory_size = current_state.memory_size; + all_states[current_row].rw_counter = current_state.rw_counter; + all_states[current_row].row_counter = row_counter; + all_states[current_row].step_start = (j == 0); + all_states[current_row].row_counter_inv = row_counter == 0? 0: val(row_counter).inversed(); //row_counter_inv + all_states[current_row].opcode_parity = opcode_id % 2; // opcode_parity + all_states[current_row].is_even = 1 - current_row % 2; // is_even + + opcode_selectors[current_row].resize(opcode_selectors_amount); + if( current_row % 2 == (opcode_id % 4 ) / 2) opcode_selectors[current_row][opcode_id/4] = 1; + opcode_row_selectors[current_row].resize(opcode_row_selectors_amount); + opcode_row_selectors[current_row][row_counter/2] = 1; + current_row++; + } + + opcode_impls[current_opcode]->fill_context(op_ct, current_state); + } + + while(current_row < max_zkevm_rows ){ + std::size_t opcode_id = std::find(implemented_opcodes.begin(), implemented_opcodes.end(), zkevm_opcode::padding) - implemented_opcodes.begin(); + std::size_t row_counter = 1 - current_row % 2; + all_states[current_row] = { + 0, + 0, + 0, + 0, + opcode_to_number(zkevm_opcode::padding), + 0, + 0, + 0, + 0, + 0, + + row_counter, //row_counter + row_counter, //step_start + row_counter, // inv_row_counter + opcode_id % 2, //opcode_parity + 1 - current_row%2 //is_even + }; + opcode_selectors[current_row].resize(opcode_selectors_amount); + if( current_row % 2 == (opcode_id % 4 ) / 2 ) opcode_selectors[current_row][opcode_id/4] = 1; + opcode_row_selectors[current_row].resize(opcode_selectors_amount); + opcode_row_selectors[current_row][row_counter/2] = 1; + current_row++; + } + + std::cout << "Assignment" << std::endl; + } + std::vector sample_opcode_row; + for( std::size_t i = 0; i < all_states.size(); i++ ){ + std::size_t cur_column = 0; + allocate(all_states[i].call_id, cur_column++, i); //0 + allocate(all_states[i].bytecode_hash_hi, cur_column++, i); //1 + allocate(all_states[i].bytecode_hash_lo, cur_column++, i); //2 + allocate(all_states[i].pc, cur_column++, i); //3 + allocate(all_states[i].opcode, cur_column++, i); //4 + allocate(all_states[i].gas_hi, cur_column++, i); //5 + allocate(all_states[i].gas_lo, cur_column++, i); //6 + allocate(all_states[i].stack_size, cur_column++, i); //7 + allocate(all_states[i].memory_size, cur_column++, i); //8 + allocate(all_states[i].rw_counter, cur_column++, i); //9 + + allocate(all_states[i].row_counter,cur_column++,i); //10 + allocate(all_states[i].step_start, cur_column++, i); //11 + allocate(all_states[i].row_counter_inv, cur_column++, i); //12 + allocate(all_states[i].opcode_parity, cur_column++, i); //13 + allocate(all_states[i].is_even, cur_column++, i);// Do we really need it? + + BOOST_ASSERT(cur_column == state::get_items_amout()); + + for( std::size_t j = 0; j < opcode_selectors_amount; j++){ + allocate(opcode_selectors[i][j], cur_column++, i); + } + for( std::size_t j = 0; j < opcode_row_selectors_amount;j++){ + allocate(opcode_row_selectors[i][j], cur_column++, i); + } + //std::cout << "Cur_column = " << cur_column << std::endl; + } + constrain(all_states[0].is_even - 1); + if constexpr (stage == GenerationStage::CONSTRAINTS) { + std::vector tmp; + tmp = {context_object.relativize(all_states[1].gas_hi, -1)}; + context_object.relative_lookup(tmp, "chunk_16_bits/full", 0, max_zkevm_rows-1); + tmp = {context_object.relativize(all_states[1].gas_lo, -1)}; + context_object.relative_lookup(tmp, "chunk_16_bits/full", 0, max_zkevm_rows-1); + for(std::size_t i = 0; i < range_checked_opcode_columns_amount; i++){ + TYPE range_checked_column; + allocate(range_checked_column, opcode_area[i], max_zkevm_rows-1); + tmp = {context_object.relativize(range_checked_column, -(max_zkevm_rows-1))}; + context_object.relative_lookup(tmp, "chunk_16_bits/full", 0, max_zkevm_rows-1); + } + + // Remove it! + std::vector erc; // every row constraints + std::vector nfrc; // non-first row constraints + std::vector mc; // non-first and non-last row constraints + std::vector relative_mc; + + erc.push_back(all_states[1].is_even * (all_states[1].is_even - 1)); + nfrc.push_back(all_states[1].is_even + all_states[0].is_even - 1); + + // Define step_start and row_counter + erc.push_back(all_states[1].step_start * (all_states[1].step_start - 1)); + nfrc.push_back(all_states[1].step_start * all_states[0].row_counter); + nfrc.push_back(all_states[0].row_counter * (all_states[0].row_counter - all_states[1].row_counter - 1)); + erc.push_back(all_states[1].row_counter * (all_states[1].row_counter * all_states[1].row_counter_inv - 1)); + erc.push_back(all_states[1].row_counter_inv * (all_states[1].row_counter * all_states[1].row_counter_inv - 1)); + + // State does not change inside one step + nfrc.push_back((1-all_states[1].step_start) * (all_states[1].gas_hi - all_states[0].gas_hi)); + nfrc.push_back((1-all_states[1].step_start) * (all_states[1].gas_lo - all_states[0].gas_lo)); + nfrc.push_back((1-all_states[1].step_start) * (all_states[1].stack_size - all_states[0].stack_size)); + nfrc.push_back((1-all_states[1].step_start) * (all_states[1].memory_size - all_states[0].memory_size)); + nfrc.push_back((1-all_states[1].step_start) * (all_states[1].pc - all_states[0].pc)); + nfrc.push_back((1-all_states[1].step_start) * (all_states[1].rw_counter - all_states[0].rw_counter)); + + TYPE opcode_selector_sum; + for( std::size_t j = 0; j < opcode_selectors[1].size(); j++){ + opcode_selector_sum += opcode_selectors[1][j] + opcode_selectors[0][j]; + erc.push_back(opcode_selectors[1][j] * ( 1 - opcode_selectors[1][j] )); + } + nfrc.push_back(all_states[0].is_even * (opcode_selector_sum - 1)); + + TYPE opcode_row_selector_sum; + for( std::size_t j = 0; j < opcode_row_selectors[1].size(); j++){ + opcode_row_selector_sum += opcode_row_selectors[1][j]; + erc.push_back(opcode_row_selectors[1][j] * ( 1 - opcode_row_selectors[1][j] )); + } + erc.push_back(opcode_row_selector_sum - 1); + + std::map zkevm_opcode_selectors; + std::map, TYPE> zkevm_opcode_row_selectors; + TYPE opcode_selector_check_constraint; + TYPE opcode_row_selector_check_constraint; + TYPE opcode_length_check_constraint; + TYPE opcode_constraint; + TYPE row_counter_constraint; + TYPE evm_opcode_constraint; + for( std::size_t opcode_num = 0; opcode_num < implemented_opcodes_amount; opcode_num++){ + zkevm_opcode current_opcode = implemented_opcodes[opcode_num]; + if( opcode_impls.find(current_opcode) == opcode_impls.end() ) { + std::cout << "Opcode " << current_opcode <<" implementation not found" << std::endl; + } + std::size_t current_opcode_bare_rows_amount = + opcode_impls.find(current_opcode) == opcode_impls.end()? + 0: + opcode_impls[current_opcode]->rows_amount(); + std::size_t current_opcode_rows_amount = std::ceil(float(current_opcode_bare_rows_amount)/2) * 2; + TYPE o4 = opcode_selectors[1][opcode_num/4]; + TYPE parity = opcode_num%2 ? all_states[1].opcode_parity: 1 - all_states[1].opcode_parity; + TYPE is_even = all_states[1].is_even; + TYPE zero_constraint; + std::size_t bit1 = (opcode_num % 4 == 3) || (opcode_num % 4 == 2); + //zkevm_opcode_selectors[current_opcode] = parity * (1 - is_even) * (opcode_selectors[1][opcode_num/4] + opcode_selectors[0][opcode_num/4]); + if( !bit1 ){ + // 1 op parity -- current_row + // 0 0 parity + zkevm_opcode_selectors[current_opcode] = parity * ( + is_even * opcode_selectors[1][opcode_num/4] + + opcode_selectors[0][opcode_num/4] * (1 - is_even) + ); + } else { + // 1 0 parity -- current_row + // 0 op parity + zkevm_opcode_selectors[current_opcode] = parity * ( + opcode_selectors[1][opcode_num/4] * (1 - is_even) + + is_even * opcode_selectors[2][opcode_num/4] + ); + } + opcode_selector_check_constraint += zkevm_opcode_selectors[current_opcode]; + opcode_constraint += zkevm_opcode_selectors[current_opcode] * opcode_to_number(current_opcode); + if( current_opcode_rows_amount != 0) + opcode_length_check_constraint += zkevm_opcode_selectors[current_opcode] * (current_opcode_rows_amount - 1); + else + opcode_length_check_constraint += zkevm_opcode_selectors[current_opcode]; + if( opcode_to_number(current_opcode) < 0x100 ) evm_opcode_constraint += zkevm_opcode_selectors[current_opcode]; + for(std::size_t i = 0; i < max_opcode_height; i++){ + TYPE row_sel = opcode_row_selectors[1][i/2]; + TYPE row_parity = i%2 ? is_even : 1 - is_even; + TYPE zero_constraint; + TYPE one_constraint = zero_constraint + 1; + //zkevm_opcode_row_selectors[std::make_pair(current_opcode, i)] = zkevm_opcode_selectors[current_opcode] * row_parity * row_sel; + if( !bit1 ) { + if( i%2 ) + zkevm_opcode_row_selectors[std::make_pair(current_opcode, i)] = + parity * is_even * opcode_selectors[1][opcode_num/4] * row_sel; + else + zkevm_opcode_row_selectors[std::make_pair(current_opcode, i)] = + parity * opcode_selectors[0][opcode_num/4] * (1 - is_even) * row_sel; + } else { + if( i%2 ) + zkevm_opcode_row_selectors[std::make_pair(current_opcode, i)] = + parity * is_even * opcode_selectors[2][opcode_num/4] * row_sel; + else + zkevm_opcode_row_selectors[std::make_pair(current_opcode, i)] + = parity * opcode_selectors[1][opcode_num/4] * (1 - is_even) * row_sel; + } + opcode_row_selector_check_constraint += zkevm_opcode_row_selectors[std::make_pair(current_opcode, i)]; + row_counter_constraint += zkevm_opcode_row_selectors[std::make_pair(current_opcode, i)] * i; + } + } + mc.push_back(all_states[1].step_start*(opcode_length_check_constraint - all_states[1].row_counter)); + mc.push_back(opcode_selector_check_constraint - 1); + mc.push_back(opcode_row_selector_check_constraint - 1); + mc.push_back(opcode_constraint - all_states[1].opcode); + mc.push_back(row_counter_constraint - all_states[1].row_counter); + + if( stage == GenerationStage::CONSTRAINTS) { + std::map, std::vector> opcode_constraints_aggregator; + std::map, std::vector>> opcode_lookup_constraints_aggregator; + std::size_t max_opcode_row_constraints = 0; + for( std::size_t opcode_num = 0; opcode_num < implemented_opcodes.size(); opcode_num++ ){ + zkevm_opcode current_opcode = implemented_opcodes[opcode_num]; + //std::cout << "Build constraints for " << current_opcode << std::endl; + if( opcode_impls.find(current_opcode) == opcode_impls.end() ){ + std::cout << "\tImplementation for "<< current_opcode << " is not defined" << std::endl; + continue; + } + std::size_t current_opcode_bare_rows_amount = opcode_impls[current_opcode]->rows_amount(); + //std::cout << "\tcurrent_opcode_bare_rows_amount = " << current_opcode_bare_rows_amount << std::endl; + context_type fresh_ct = context_object.fresh_subcontext( + opcode_area, + 1, + 1 + current_opcode_bare_rows_amount + ); + zkevm_state_vars opcode_state_vars(all_states, current_opcode_bare_rows_amount); + + opcode_impls[current_opcode]->fill_context(fresh_ct, opcode_state_vars); + auto opcode_constraints = fresh_ct.get_constraints(); + for( const auto &constr_list: opcode_constraints){ + for( const auto &local_row: constr_list.first){ + for( auto constraint: constr_list.second){ + std::size_t real_row = std::ceil(float(current_opcode_bare_rows_amount) / 2) * 2 - local_row - current_opcode_bare_rows_amount % 2; + opcode_constraints_aggregator[{current_opcode, real_row}].push_back(constraint); + if(opcode_constraints_aggregator[{current_opcode, real_row}].size() > max_opcode_row_constraints){ + max_opcode_row_constraints = opcode_constraints_aggregator[{current_opcode, real_row}].size(); + } + //std::cout << "\t" << local_row << "=>" << real_row << ": " << constraint << std::endl; + } + //std::cout << std::endl; + } + } + auto opcode_lookup_constraints = fresh_ct.get_lookup_constraints(); + for( const auto &constr_list: opcode_lookup_constraints){ + for( const auto &local_row: constr_list.first){ + for( auto lookup_constraint: constr_list.second){ + std::size_t real_row = std::ceil(float(current_opcode_bare_rows_amount) / 2) * 2 - local_row - current_opcode_bare_rows_amount % 2; + opcode_lookup_constraints_aggregator[{current_opcode, real_row, lookup_constraint.first}].push_back(lookup_constraint.second); + //std::cout << "\t" << local_row << "=>" << real_row << ": " << lookup_constraint.first << std::endl; + for( auto constraint:lookup_constraint.second ){ + //std::cout << "\t\t" << constraint << std::endl; + } + //std::cout << std::endl; + } + } + } + } + std::cout << "Accumulate constraints " << max_opcode_row_constraints << std::endl; + for( std::size_t i = 0; i < max_opcode_row_constraints; i++ ){ + TYPE acc_constraint; + // std::cout << "\tConstraint " << i << std::endl; + for( auto &[pair, constraints]: opcode_constraints_aggregator ){ + if( constraints.size() <= i) continue; + acc_constraint += context_object.relativize(zkevm_opcode_row_selectors[pair], -1) * constraints[i]; + //std::cout << "\topcode " << pair.first << " row " << pair.second << " constraint " << context_object.relativize(zkevm_opcode_row_selectors[pair], -1) * constraints[i] << std::endl; + //relative_mc.push_back(context_object.relativize(zkevm_opcode_row_selectors[pair], -1) * constraints[i]); + } + relative_mc.push_back(acc_constraint); + //std::cout << "\t" << acc_constraint << std::endl; + } + //relative_mc.push_back(context_object.relativize(zkevm_opcode_row_selectors[{zkevm_opcode::PUSH1, 1}], -1)); + std::cout << "Accumulate lookup constraints " << std::endl; + std::map>> acc_lookup_constraints; + for( auto &[key, exprs]:opcode_lookup_constraints_aggregator){ + auto &[local_opcode, local_row, table_name] = key; + //std::cout << "\t" << local_opcode << ", " << local_row << ", " << table_name << std::endl; + if( acc_lookup_constraints.find(table_name) == acc_lookup_constraints.end()) acc_lookup_constraints[table_name] = {}; + if( acc_lookup_constraints[table_name].size() < exprs.size() ) acc_lookup_constraints[table_name].resize(exprs.size()); + for( std::size_t i = 0; i < exprs.size(); i++ ) { + acc_lookup_constraints[table_name][i].resize(exprs[i].size()); + for( std::size_t j = 0; j < exprs[i].size(); j++ ){ + // std::cout << "\t\t" << exprs[i][j] << std::endl; + acc_lookup_constraints[table_name][i][j] += context_object.relativize( + zkevm_opcode_row_selectors[{local_opcode, local_row}], -1 + ) * exprs[i][j]; + } + } + } + for( auto&[table_name, constraint_list]:acc_lookup_constraints ){ + std::cout << "\tOpcode lookups amount for " << table_name << " = " << constraint_list.size() << std::endl; + for(auto &exprs: constraint_list){ + context_object.relative_lookup(exprs, table_name, 1, max_zkevm_rows - 1); + } + } + } + + for( auto &constr: erc ){ + context_object.relative_constrain(context_object.relativize(constr, -1), 0, max_zkevm_rows-1); + } + for( auto &constr: nfrc ){ + context_object.relative_constrain(context_object.relativize(constr, -1), 1, max_zkevm_rows-1); + } + for( auto &constr: mc ){ + context_object.relative_constrain(context_object.relativize(constr, -1), 1, max_zkevm_rows-2); + } + for( auto &constr: relative_mc ){ + context_object.relative_constrain(constr, 0, max_zkevm_rows-2); + } + tmp.resize(6); + tmp[0] = context_object.relativize(evm_opcode_constraint, -1); + tmp[1] = context_object.relativize(evm_opcode_constraint * all_states[1].pc, -1); + tmp[2] = context_object.relativize(evm_opcode_constraint * all_states[1].opcode, -1); + tmp[3] = context_object.relativize(evm_opcode_constraint, -1); + tmp[4] = context_object.relativize(evm_opcode_constraint * all_states[1].bytecode_hash_hi, -1); + tmp[5] = context_object.relativize(evm_opcode_constraint * all_states[1].bytecode_hash_lo, -1); + + // TODO(oclaw): bytecode check is disabled since hash algorithm for circuits is not finalized yet + // https://github.com/NilFoundation/placeholder/issues/205 + // context_object.relative_lookup(tmp, "zkevm_bytecode", 1, max_zkevm_rows-1); + } + } + protected: + static constexpr std::size_t max_opcode_height = 8; + static constexpr std::size_t opcode_columns_amount = 48; + static constexpr std::size_t range_checked_opcode_columns_amount = 32; + std::vector implemented_opcodes = get_implemented_opcodes_list(); + }; + } + } +} diff --git a/crypto3/libs/blueprint/test/CMakeLists.txt b/crypto3/libs/blueprint/test/CMakeLists.txt index 32ba69d964..2f8348349a 100644 --- a/crypto3/libs/blueprint/test/CMakeLists.txt +++ b/crypto3/libs/blueprint/test/CMakeLists.txt @@ -36,6 +36,17 @@ if(BLUEPRINT_PLACEHOLDER_PROOF_GEN) add_definitions(-DBLUEPRINT_PLACEHOLDER_PROOF_GEN_ENABLED) endif() +cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} + crypto3::blueprint + crypto3::algebra + crypto3::zk + crypto3::random + crypto3::hash + Boost::unit_test_framework +) +set_target_properties(_cm_internal_tests-crypto3-blueprint-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-crypto3-blueprint-test REUSE_FROM crypto3_precompiled_headers) + macro(define_blueprint_test test) string(REPLACE "/" "_" full_test_name blueprint_${test}_test) @@ -49,14 +60,9 @@ macro(define_blueprint_test test) target_include_directories(${full_test_name} PRIVATE ${Boost_INCLUDE_DIRS}) - target_link_libraries(${full_test_name} - crypto3::blueprint - crypto3::algebra - crypto3::zk - crypto3::random - ) + set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 20) - set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 17) + target_compile_definitions(${full_test_name} PRIVATE TEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/zkevm/data/") if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(${full_test_name} PRIVATE "${ARGV2}" "-fconstexpr-steps=2147483647" "-ftemplate-backtrace-limit=0") @@ -70,6 +76,8 @@ macro(define_blueprint_test test) elseif(target_type STREQUAL "STATIC_LIB") endif() + + target_precompile_headers(${full_test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(COMMON_TEST_FILES @@ -82,7 +90,12 @@ set(COMMON_TEST_FILES "proxy" #"mock/mocked_components" "component_batch" - "bbf/bbf_wrapper" + "bbf/tester" + "bbf/opcode_poc" + "bbf/row_seletor_test" + "bbf/gate_optimizer" + "bbf/poseidon" + "bbf/test_circuit_builder" ) set(NON_NATIVE_TESTS_FILES @@ -120,6 +133,8 @@ set(PLONK_TESTS_FILES "hashes/plonk/sha256_process" "hashes/plonk/sha512_process" "hashes/plonk/decomposition" + "bbf/hashes/keccak/keccak_round" + "bbf/hashes/keccak/keccak_dynamic" #"hashes/plonk/detail/sha_table_generators_base4" #"hashes/plonk/detail/sha_table_generators_base7" #"verifiers/kimchi/base_field" @@ -150,7 +165,7 @@ set(PLONK_TESTS_FILES #"verifiers/kimchi/detail/prepare_scalars" #"verifiers/kimchi/detail/zkpm_evaluate" #"verifiers/kimchi/sponge/sponge" - "verifiers/kimchi/sponge/oracles" + #"verifiers/kimchi/sponge/oracles" #"verifiers/kimchi/sponge/transcript_fr" #"verifiers/kimchi/sponge/transcript_fq" #"verifiers/kimchi/sponge/compare" @@ -188,19 +203,51 @@ set(PLONK_TESTS_FILES "verifiers/placeholder/verifier" "verifiers/placeholder/dfri_verifier" "verifiers/placeholder/dfri_input_generator" - "zkevm/bytecode" ) set(ZKEVM_TESTS_FILES - "zkevm/state_selector" + "zkevm/bytecode" + "zkevm/rw" + #"zkevm/copy" + "zkevm/connections" + #"zkevm/state_selector" "zkevm/zkevm_word" - "zkevm/state_transition" + #"zkevm/state_transition" "zkevm/opcodes/iszero" "zkevm/opcodes/add_sub" "zkevm/opcodes/mul" "zkevm/opcodes/div" - ) + "zkevm/opcodes/cmp" + "zkevm/opcodes/pushx" + "zkevm/opcodes/not" + "zkevm/opcodes/mod_ops" + "zkevm/opcodes/byte_ops" + "zkevm/opcodes/bitwise" + "zkevm/opcodes/err0" + "zkevm/opcodes/err1" + #"zkevm/opcodes/workload" + "zkevm/opcodes/jumps" +) + +set(ZKEVM_BBF_TESTS_FILES + "zkevm_bbf/hardhat" + "zkevm_bbf/rw" + "zkevm_bbf/bytecode" + "zkevm_bbf/copy" + "zkevm_bbf/opcodes/pushx" + "zkevm_bbf/opcodes/iszero" + "zkevm_bbf/opcodes/mod_ops" + "zkevm_bbf/opcodes/bitwise" + "zkevm_bbf/opcodes/cmp" + "zkevm_bbf/opcodes/add_sub" + "zkevm_bbf/opcodes/byte_ops" + "zkevm_bbf/opcodes/mul" + "zkevm_bbf/opcodes/div" + "zkevm_bbf/opcodes/jumps" + "zkevm_bbf/opcodes/not" + "zkevm_bbf/opcodes/exp" +) SET(ALGEBRA_TESTS_FILES @@ -214,10 +261,10 @@ SET(ALL_TESTS_FILES ${PLONK_TESTS_FILES} ${ALGEBRA_TESTS_FILES} ${ZKEVM_TESTS_FILES} + ${ZKEVM_BBF_TESTS_FILES} ${HASHES_TESTS_FILES} ${ROUTING_TESTS_FILES} ${SCHEMES_TESTS_FILES} - ${MERKLE_TREE_TESTS_FILES} ${VOTING_TESTS_FILES} ${BASIC_COMPONENTS_TESTS_FILES}) diff --git a/crypto3/libs/blueprint/test/algebra/curves/plonk/endo_scalar.cpp b/crypto3/libs/blueprint/test/algebra/curves/plonk/endo_scalar.cpp index e99c7b4f06..0658ac911a 100644 --- a/crypto3/libs/blueprint/test/algebra/curves/plonk/endo_scalar.cpp +++ b/crypto3/libs/blueprint/test/algebra/curves/plonk/endo_scalar.cpp @@ -56,9 +56,9 @@ struct endo_scalar_params { using scalar_field_type = typename curve_type::scalar_field_type; using base_field_type = typename curve_type::base_field_type; constexpr static const typename scalar_field_type::value_type endo_r = - 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular255; + 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_big_uint255; constexpr static const typename base_field_type::value_type endo_q = - 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_cppui_modular255; + 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_big_uint255; }; template<> @@ -67,9 +67,9 @@ struct endo_scalar_params { using scalar_field_type = typename curve_type::scalar_field_type; using base_field_type = typename curve_type::base_field_type; constexpr static const typename scalar_field_type::value_type endo_r = - 0x397E65A7D7C1AD71AEE24B27E308F0A61259527EC1D4752E619D1840AF55F1B1_cppui_modular255; + 0x397E65A7D7C1AD71AEE24B27E308F0A61259527EC1D4752E619D1840AF55F1B1_big_uint255; constexpr static const typename base_field_type::value_type endo_q = - 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_cppui_modular255; + 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_big_uint255; }; template @@ -89,11 +89,11 @@ typename CurveType::scalar_field_type::value_type calculate_endo_scalar(typename typename BlueprintFieldType::integral_type(scalar.data); std::array bits_msb; { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; BOOST_CHECK(ScalarSize <= 255); std::array bits_msb_all = - nil::marshalling::pack(integral_scalar, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::pack(integral_scalar, status); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); std::copy(bits_msb_all.end() - ScalarSize, bits_msb_all.end(), bits_msb.begin()); for(std::size_t i = 0; i < 255 - ScalarSize; ++i) { @@ -179,14 +179,14 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_endo_scalar_vesta) { using curve_type = nil::crypto3::algebra::curves::vesta; using BlueprintFieldType = typename curve_type::scalar_field_type; - typename BlueprintFieldType::value_type challenge = 0x00000000000000000000000000000000FC93536CAE0C612C18FBE5F6D8E8EEF2_cppui_modular255; - typename BlueprintFieldType::value_type result = 0x004638173549A4C55A118327904B54E5F6F6314225C8C862F5AFA2506C77AC65_cppui_modular255; + typename BlueprintFieldType::value_type challenge = 0x00000000000000000000000000000000FC93536CAE0C612C18FBE5F6D8E8EEF2_big_uint255; + typename BlueprintFieldType::value_type result = 0x004638173549A4C55A118327904B54E5F6F6314225C8C862F5AFA2506C77AC65_big_uint255; test_endo_scalar({challenge}, result); test_endo_scalar({1}, calculate_endo_scalar(1)); test_endo_scalar({0}, calculate_endo_scalar(0)); - test_endo_scalar({0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular255}, - calculate_endo_scalar(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular255)); + test_endo_scalar({0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint255}, + calculate_endo_scalar(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint255)); nil::crypto3::random::algebraic_engine generate_random; boost::random::mt19937 seed_seq; @@ -195,7 +195,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_endo_scalar_vesta) { for (std::size_t i = 0; i < random_tests_amount; i++){ typename curve_type::scalar_field_type::value_type input = generate_random(); typename curve_type::scalar_field_type::integral_type input_integral = typename curve_type::scalar_field_type::integral_type(input.data); - input_integral = input_integral & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular255; + input_integral = input_integral & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint255; typename curve_type::scalar_field_type::value_type input_scalar = input_integral; test_endo_scalar({input_scalar}, calculate_endo_scalar(input_scalar)); } @@ -205,13 +205,13 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_endo_scalar_pallas) { using curve_type = nil::crypto3::algebra::curves::pallas; using BlueprintFieldType = typename curve_type::scalar_field_type; - typename BlueprintFieldType::value_type challenge = 0x00000000000000000000000000000000FC93536CAE0C612C18FBE5F6D8E8EEF2_cppui_modular255; + typename BlueprintFieldType::value_type challenge = 0x00000000000000000000000000000000FC93536CAE0C612C18FBE5F6D8E8EEF2_big_uint255; test_endo_scalar({challenge}, calculate_endo_scalar(challenge)); test_endo_scalar({1}, calculate_endo_scalar(1)); test_endo_scalar({0}, calculate_endo_scalar(0)); - test_endo_scalar({0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular255}, - calculate_endo_scalar(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular255)); + test_endo_scalar({0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint255}, + calculate_endo_scalar(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint255)); nil::crypto3::random::algebraic_engine generate_random; boost::random::mt19937 seed_seq; @@ -220,7 +220,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_endo_scalar_pallas) { for (std::size_t i = 0; i < random_tests_amount; i++){ typename curve_type::scalar_field_type::value_type input = generate_random(); typename curve_type::scalar_field_type::integral_type input_integral = typename curve_type::scalar_field_type::integral_type(input.data); - input_integral = input_integral & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular255; + input_integral = input_integral & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint255; typename curve_type::scalar_field_type::value_type input_scalar = input_integral; test_endo_scalar({input_scalar}, calculate_endo_scalar(input_scalar)); } diff --git a/crypto3/libs/blueprint/test/algebra/curves/plonk/variable_base_endo_scalar_mul.cpp b/crypto3/libs/blueprint/test/algebra/curves/plonk/variable_base_endo_scalar_mul.cpp index 1d6e52634c..122adfbf16 100644 --- a/crypto3/libs/blueprint/test/algebra/curves/plonk/variable_base_endo_scalar_mul.cpp +++ b/crypto3/libs/blueprint/test/algebra/curves/plonk/variable_base_endo_scalar_mul.cpp @@ -84,7 +84,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_base_endo_scalar_mul) { std::vector public_input = {T.X, T.Y, b_scalar}; constexpr static const typename BlueprintFieldType::value_type endo = component_type::endo; - typename BlueprintFieldType::value_type endo_scalar = 0x244630A7EE5033DA383B3677B4C5CA94A3EBE4156FC4FA4E08B35974929CA2C5_cppui_modular255; + typename BlueprintFieldType::value_type endo_scalar = 0x244630A7EE5033DA383B3677B4C5CA94A3EBE4156FC4FA4E08B35974929CA2C5_big_uint255; typename curve_type::template g1_type::value_type testResult = endo_scalar * T; std::cout<<"Expected result for endo_scalar * T: "<(random_point(), two + two.pow(255) + 1); @@ -248,9 +248,9 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_variable_base_scalar_mul_random_scalar_pall random_scalar.seed(pallas_seed_seq); typename pallas_curve_type::scalar_field_type::value_type pallas_two = 2; - typename pallas_curve_type::scalar_field_type::value_type pallas_threefff = 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular255; + typename pallas_curve_type::scalar_field_type::value_type pallas_threefff = 0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint255; typename pallas_curve_type::scalar_field_type::value_type pallas_unshifted_threefff = 2*pallas_threefff + pallas_two.pow(255) + 1; - typename pallas_curve_type::scalar_field_type::value_type pallas_p = 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_cppui_modular255; + typename pallas_curve_type::scalar_field_type::value_type pallas_p = 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_big_uint255; test_vbsm(pallas_random_point(), pallas_two + pallas_two.pow(255) + 1); test_vbsm(pallas_random_point(), pallas_two - pallas_two + pallas_two.pow(255) + 1); diff --git a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/logic_ops.cpp b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/logic_ops.cpp index 4b3b607639..117ff7ff56 100644 --- a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/logic_ops.cpp +++ b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/logic_ops.cpp @@ -204,7 +204,7 @@ BOOST_AUTO_TEST_CASE(blueprint_non_native_select_test) { rand.seed(seed_seq); for (std::size_t j = 0; j < random_tests_amount; j++) { - value_type cond = rand().data & value_type(1).data, + value_type cond = rand().data.base() & 1u, true_branch = rand(), false_branch = rand(); diff --git a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/multiplication.cpp b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/multiplication.cpp index 1abd443b50..42c70e27e4 100644 --- a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/multiplication.cpp +++ b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/multiplication.cpp @@ -183,8 +183,8 @@ void test_field_mul_all_cases() { } test_field_mul_useable( - glue_non_native({0, 0, 0x3ffffffffffffffff_cppui_modular255, 0}), - glue_non_native({0, 0, 0x3ffffffffffffffff_cppui_modular255, 0})); + glue_non_native({0, 0, 0x3ffffffffffffffff_big_uint255, 0}), + glue_non_native({0, 0, 0x3ffffffffffffffff_big_uint255, 0})); test_field_mul_useable(0, 0); test_field_mul_useable(1, 1); @@ -203,16 +203,16 @@ void test_field_mul_all_cases() { glue_non_native({1, 0, 0, 0})); test_field_mul_useable( - glue_non_native({0x2BCA8C5A0FDF3D53E_cppui_modular253, 0x39840DDF4C421B2D5_cppui_modular253, - 0x24FCE5728D26931CA_cppui_modular253, 0xFBD6153B4CE63_cppui_modular253}), - glue_non_native({0x3CD7BA9506A76AA1C_cppui_modular253, 0x15C58810F101DDB2F_cppui_modular253, - 0x1AA5750251F6DA658_cppui_modular253, 0x1323F61B67242F_cppui_modular253})); + glue_non_native({0x2BCA8C5A0FDF3D53E_big_uint253, 0x39840DDF4C421B2D5_big_uint253, + 0x24FCE5728D26931CA_big_uint253, 0xFBD6153B4CE63_big_uint253}), + glue_non_native({0x3CD7BA9506A76AA1C_big_uint253, 0x15C58810F101DDB2F_big_uint253, + 0x1AA5750251F6DA658_big_uint253, 0x1323F61B67242F_big_uint253})); test_field_mul_useable( glue_non_native( - {0xc801afd_cppui_modular255, 0xc801afd_cppui_modular255, 0xc801afd_cppui_modular255, 0xc801afd_cppui_modular255}), + {0xc801afd_big_uint255, 0xc801afd_big_uint255, 0xc801afd_big_uint255, 0xc801afd_big_uint255}), glue_non_native( - {0xc801afd_cppui_modular255, 0xc801afd_cppui_modular255, 0xc801afd_cppui_modular255, 0xc801afd_cppui_modular255})); + {0xc801afd_big_uint255, 0xc801afd_big_uint255, 0xc801afd_big_uint255, 0xc801afd_big_uint255})); for (std::size_t i = 0; i < 10; i++) { test_field_mul_useable(rand(), rand()); } diff --git a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/range.cpp b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/range.cpp index 37fdf2d320..30905db4f4 100644 --- a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/range.cpp +++ b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/range.cpp @@ -130,11 +130,11 @@ BOOST_AUTO_TEST_CASE(blueprint_non_native_range_test0) { BOOST_AUTO_TEST_CASE(blueprint_non_native_range_test_must_fail) { test_field_range( //ed25519 modulus - {0x3ffffffffffffffed_cppui_modular255, 0x3ffffffffffffffff_cppui_modular255, 0x3ffffffffffffffff_cppui_modular255, 0x1ffffffffffffff_cppui_modular255}, false + {0x3ffffffffffffffed_big_uint255, 0x3ffffffffffffffff_big_uint255, 0x3ffffffffffffffff_big_uint255, 0x1ffffffffffffff_big_uint255}, false ); test_field_range( - {0x3ffffffffffffffff_cppui_modular255, 0x3ffffffffffffffff_cppui_modular255, 0x3ffffffffffffffff_cppui_modular255, 0x1ffffffffffffff_cppui_modular255}, false + {0x3ffffffffffffffff_big_uint255, 0x3ffffffffffffffff_big_uint255, 0x3ffffffffffffffff_big_uint255, 0x1ffffffffffffff_big_uint255}, false ); } diff --git a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/reduction.cpp b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/reduction.cpp index 319ab9eed8..9f59306991 100644 --- a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/reduction.cpp +++ b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/reduction.cpp @@ -90,11 +90,10 @@ void test_reduction(std::vector public_ component_instance, desc, public_input, result_check, instance_input); } -using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<513> >; +using extended_integral_type = nil::crypto3::multiprecision::big_uint<513>; constexpr static const extended_integral_type ed25519_scalar_modulus = - 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_cppui_modular512; + 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_big_uint512; constexpr static const extended_integral_type one = 1; constexpr static const extended_integral_type max512 = (one << 512) - 1; @@ -102,7 +101,7 @@ template std::vector vector_from_extended_integral(extended_integral_type input) { std::vector pub_inp; for (std::size_t i = 0; i < 8; i++) { - extended_integral_type mask = 0xffffffffffffffff_cppui_modular512; + extended_integral_type mask = 0xffffffffffffffff_big_uint512; typename FieldType::value_type current = typename FieldType::value_type((input >> (64*i)) & mask); pub_inp.push_back(current); } @@ -125,7 +124,7 @@ BOOST_AUTO_TEST_CASE(blueprint_variable_base_decomposition_edward25519) { test_reduction_input_expended_integral_calculate_expected(max512); test_reduction_input_expended_integral_calculate_expected(0); test_reduction_input_expended_integral_calculate_expected(1); - test_reduction_input_expended_integral_calculate_expected(0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular512); + test_reduction_input_expended_integral_calculate_expected(0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint512); test_reduction_input_expended_integral_calculate_expected(ed25519_scalar_modulus); test_reduction_input_expended_integral_calculate_expected(ed25519_scalar_modulus * 2); test_reduction_input_expended_integral_calculate_expected(ed25519_scalar_modulus + 1); @@ -133,7 +132,7 @@ BOOST_AUTO_TEST_CASE(blueprint_variable_base_decomposition_edward25519) { test_reduction_input_expended_integral_calculate_expected(ed25519_scalar_modulus << 256); test_reduction_input_expended_integral_calculate_expected( max512 - extended_integral_type( - 0x399411b7c309a3dceec73d217f5be65d00e1ba768859347a40611e3449c0f00_cppui_modular512)); + 0x399411b7c309a3dceec73d217f5be65d00e1ba768859347a40611e3449c0f00_big_uint512)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/subtraction.cpp b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/subtraction.cpp index 5ff6e8cdfa..a0dd7c071e 100644 --- a/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/subtraction.cpp +++ b/crypto3/libs/blueprint/test/algebra/fields/plonk/non_native/subtraction.cpp @@ -170,8 +170,8 @@ void test_field_sub_all_cases(){ glue_non_native({1,0,0,0})); test_field_sub_useable( - glue_non_native({0x2BCA8C5A0FDF3D53E_cppui_modular253, 0x39840DDF4C421B2D5_cppui_modular253, 0x24FCE5728D26931CA_cppui_modular253, 0xFBD6153B4CE63_cppui_modular253}), - glue_non_native({0x3CD7BA9506A76AA1C_cppui_modular253, 0x15C58810F101DDB2F_cppui_modular253, 0x1AA5750251F6DA658_cppui_modular253, 0x1323F61B67242F_cppui_modular253})); + glue_non_native({0x2BCA8C5A0FDF3D53E_big_uint253, 0x39840DDF4C421B2D5_big_uint253, 0x24FCE5728D26931CA_big_uint253, 0xFBD6153B4CE63_big_uint253}), + glue_non_native({0x3CD7BA9506A76AA1C_big_uint253, 0x15C58810F101DDB2F_big_uint253, 0x1AA5750251F6DA658_big_uint253, 0x1323F61B67242F_big_uint253})); for (std::size_t i = 0; i < 10; i++) { test_field_sub_useable(rand(), rand()); diff --git a/crypto3/libs/blueprint/test/algebra/fields/plonk/range_check.cpp b/crypto3/libs/blueprint/test/algebra/fields/plonk/range_check.cpp index 09fc4c636e..797a9e9cbb 100644 --- a/crypto3/libs/blueprint/test/algebra/fields/plonk/range_check.cpp +++ b/crypto3/libs/blueprint/test/algebra/fields/plonk/range_check.cpp @@ -143,7 +143,7 @@ void test_range_check_specific_inputs() { test_range_check(-1); test_range_check(value_type(2).pow(R)); test_range_check( - 0x4000000000000000000000000000000000000000000000000000000000000000_cppui_modular256 + 0x4000000000000000000000000000000000000000000000000000000000000000_big_uint256 ); } diff --git a/crypto3/libs/blueprint/test/bbf/exp_wrapper.cpp b/crypto3/libs/blueprint/test/bbf/exp_wrapper.cpp new file mode 100644 index 0000000000..ff26021abc --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/exp_wrapper.cpp @@ -0,0 +1,171 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_exp_wrapper_test + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../test_plonk_component.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; + +using word_type = zkevm_word_type; + +template +void test_exp_wrapper(std::vector> &input_triplets, std::size_t max_rows, + std::size_t max_exps) { + constexpr std::size_t WitnessColumns = 48; // TODO + constexpr std::size_t PublicInputColumns = 0; // TODO + constexpr std::size_t ConstantColumns = 0; // TODO + constexpr std::size_t SelectorColumns = 13; // TODO + + // table configuration + zk::snark::plonk_table_description desc(WitnessColumns, PublicInputColumns, + ConstantColumns, SelectorColumns); + + using ArithmetizationType = zk::snark::plonk_constraint_system; + using AssignmentType = assignment; + using CircuitType = circuit; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 40; + + using var = zk::snark::plonk_variable; + + using component_type = components::exp_wrapper; + + typename BlueprintFieldType::value_type expected_res = 0; + + typename component_type::input_type instance_input = {}; + instance_input.add_triplets(input_triplets); + + std::vector public_input = {}; + std::vector witnesses(WitnessColumns); + for (uint32_t i = 0; i < WitnessColumns; i++) { + witnesses[i] = i; + } + + component_type component_instance(witnesses, {0}, {0}, max_rows, max_exps); + + auto result_check = [&expected_res](AssignmentType &assignment, typename component_type::result_type &real_res) { + // assert(expected_res == var_value(assignment, real_res.output)); + }; + + test_component( + component_instance, desc, public_input, result_check, instance_input, + nil::blueprint::connectedness_check_type::type::NONE, max_rows, max_exps); +} + +// highly inefficient 256-bit random number generator. +template +word_type random_word_type(nil::crypto3::random::algebraic_engine &g) { + // TODO: there should be easier way. + using value_type = typename FieldType::value_type; + using integral_type = typename FieldType::integral_type; + + integral_type base128 = integral_type(1) << 128; + + integral_type hi = integral_type(g().data) % base128; + integral_type lo = integral_type(g().data) % base128; + word_type w_hi = hi; + word_type w_lo = lo; + word_type result = w_hi * base128 + w_lo; + return result; +} + +word_type exp_by_squaring(word_type a, word_type n) { + if (n == 0x00_big_uint257) return 1; + if (n == 0x01_big_uint257) return a; + + word_type exp = exp_by_squaring(a, n >> 1); + word_type exp2 = exp * exp; + if (n & 1 == 1) { + return exp2 * a; + } + return exp2; +} + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) + +BOOST_AUTO_TEST_CASE(blueprint_plonk_exp_wrapper_test) { + using field_type = typename algebra::curves::pallas::base_field_type; + + std::size_t max_exps = 2; + std::vector> inputs; + + word_type a1 = + 0xa00e9bd49962d7b217963a3daed6f4591c2bdbd41562d5f1446dc932ac9e1975_big_uint257; + word_type d1 = + 0xacab9c07aa7d08b7652965f01307cf5a3ed09cbf08325c10af9d2029e918ac7d_big_uint257; + word_type A1 = + 0x22fcc8f007a53fb4d231a691075afd85980214380e16a5994ff90de783c28b85_big_uint257; + word_type a2 = 0x2_big_uint257; + word_type d2 = 0x100_big_uint257; + word_type A2 = 0x0_big_uint257; + + inputs.push_back({a1, d1, A1}); + inputs.push_back({a2, d2, A2}); + + std::size_t max_rows = 1200; + test_exp_wrapper(inputs, max_rows, max_exps); +} + +BOOST_AUTO_TEST_CASE(blueprint_plonk_exp_random_test) { + using field_type = typename algebra::curves::pallas::base_field_type; + + std::srand(std::time(nullptr)); + using generator_type = nil::crypto3::random::algebraic_engine; + generator_type g; + boost::random::mt19937 seed_seq; + g.seed(seed_seq); + + std::size_t max_exps = 10; + std::vector> inputs; + + for (std::size_t i = 0; i < max_exps; i++) { + word_type a3 = random_word_type(g); + word_type d3 = random_word_type(g); + word_type A3 = exp_by_squaring(a3, d3); + // std::cout << A3 << std::endl; + inputs.push_back({a3, d3, A3}); + } + std::size_t max_rows = 3 * 400 * max_exps; + test_exp_wrapper(inputs, max_rows, max_exps); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/bbf/gate_optimizer.cpp b/crypto3/libs/blueprint/test/bbf/gate_optimizer.cpp new file mode 100644 index 0000000000..2a8c6d2eff --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/gate_optimizer.cpp @@ -0,0 +1,94 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Martun Karapetyan +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_bbf_gates_optimizier_test + +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +using namespace nil::crypto3; +using namespace nil::blueprint; + +BOOST_AUTO_TEST_SUITE(blueprint_bbf_gates_optimizer_test_suite) + +BOOST_AUTO_TEST_CASE(blueprint_plonk_bbf_gates_optimizer_test) { + using field_type = typename algebra::curves::pallas::base_field_type; + using integral_type = typename field_type::integral_type; + using value_type = typename field_type::value_type; + + using assignment_description_type = nil::crypto3::zk::snark::plonk_table_description; + using constraint_type = zk::snark::plonk_constraint; + using context_type = bbf::context; + + // Create just 1 of each column type, and 0 already used rows. + assignment_description_type desc(1, 1, 1, 1, 0, 0); + + // Create a context that can use all 5 rows. + context_type c(desc, 6); + + constraint_type X1, X2, X3, X4, X5, X6; + c.allocate(X1, 0, 0, bbf::column_type::witness); + c.constrain(X1*(1-X1), "Left Constraint"); + + // Same thing on row 2. + c.allocate(X2, 0, 3, bbf::column_type::witness); + c.constrain(X2*(1-X2), "Left Constraint 2"); + + c.allocate(X3, 0, 1, bbf::column_type::witness); + c.constrain(X3*(2-X3), "Middle constraint 1"); + + c.allocate(X4, 0, 4, bbf::column_type::witness); + c.constrain(X4*(2-X4), "Middle constraint 2"); + + c.allocate(X5, 0, 2, bbf::column_type::witness); + c.constrain(X5*(3-X5), "Right constraint 1"); + + c.allocate(X6, 0, 5, bbf::column_type::witness); + c.constrain(X6*(3-X6), "Right constraint 2"); + + bbf::gates_optimizer optimizer(std::move(c)); + bbf::optimized_gates gates = optimizer.optimize_gates(); + + // We must have just 1 selector here, since these constraints can be shifted to match the same selector. + BOOST_CHECK_EQUAL(gates.selectors_.size(), 1); + + bbf::row_selector<> expected(8); + expected.set_row(1); + expected.set_row(4); + + // This must be selector [1,4], since it's in the middle and the other 2 can be switched to that one. + BOOST_CHECK_EQUAL(gates.selectors_.begin()->first, expected); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/bbf/hashes/keccak/keccak_dynamic.cpp b/crypto3/libs/blueprint/test/bbf/hashes/keccak/keccak_dynamic.cpp new file mode 100644 index 0000000000..5d7f05e3c2 --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/hashes/keccak/keccak_dynamic.cpp @@ -0,0 +1,156 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE plonk_keccak_test + +#include +#include +#include +#include +#include +// #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../../../test_plonk_component.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; + +template +void test_keccaks( + std::vector, + std::pair + >> input, + nil::crypto3::test_tools::random_test_initializer &rnd +){ + std::cout << "Test keccak with " << input.size() << " messages, max_blocks = " << max_blocks << std::endl; + + typename bbf::keccak_dynamic::raw_input_type raw_input = {rnd.alg_random_engines.template get_alg_engine()(), input}; + auto B = bbf::circuit_builder(max_blocks); + auto [at, A, desc] = B.assign(raw_input); + std::cout << "Is_satisfied = " << B.is_satisfied(at) << std::endl; +} + +template +std::pair +calculate_hash(std::vector input){ + hashes::keccak_1600<256>::digest_type d = nil::crypto3::hash>(input); + nil::crypto3::algebra::fields::field<256>::integral_type n(d); + nil::crypto3::algebra::fields::field<256>::integral_type mask = ((nil::crypto3::algebra::fields::field<256>::integral_type(1) << 128) - 1); + std::pair result; + result.first = typename BlueprintFieldType::value_type(n >> 128); + result.second = typename BlueprintFieldType::value_type(n & mask); + + std::cout << "Message hash = " << std::hex << result.first << " " << result.second << std::dec << std::endl; + return result; +} + +BOOST_AUTO_TEST_SUITE(bn254_test_suite) + using field_type = nil::crypto3::algebra::curves::alt_bn128_254::base_field_type; + +BOOST_AUTO_TEST_CASE(keccak_1_short_message) { + nil::crypto3::test_tools::random_test_initializer rnd; + test_keccaks({{{0},calculate_hash({0})}}, rnd); +} + +BOOST_AUTO_TEST_CASE(keccak_2_short_messages) { + nil::crypto3::test_tools::random_test_initializer rnd; + test_keccaks({{{0, 0},calculate_hash({0, 0})}, {{1,2,3,4,5}, calculate_hash({1,2,3,4,5})}}, rnd); +} +// BOOST_AUTO_TEST_CASE(keccak_1_N_message) { +// nil::crypto3::test_tools::random_test_initializer rnd; +// std::size_t N = 5; +// for (std::size_t i = 0; i < std::size_t(boost::unit_test::framework::master_test_suite().argc - 1); i++) { +// std:: cout << boost::unit_test::framework::master_test_suite().argv[i] << std::endl; +// if (std::string(boost::unit_test::framework::master_test_suite().argv[i]) == "--n") { +// if (std::regex_match(boost::unit_test::framework::master_test_suite().argv[i + 1], +// std::regex(("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?")))) { +// N = atoi(boost::unit_test::framework::master_test_suite().argv[i + 1]); +// break; +// } +// } +// } +// std::vector msg(N); +// for( std::size_t i = 0; i < N; i++ ){ msg[i] = (rnd.generic_random_engine()) % 256; } +// test_keccaks({{msg,calculate_hash(msg)}}, rnd); +// } +// BOOST_AUTO_TEST_CASE(keccak_1_N_zeroes) { +// nil::crypto3::test_tools::random_test_initializer rnd; +// std::size_t N = 5; +// for (std::size_t i = 0; i < std::size_t(boost::unit_test::framework::master_test_suite().argc - 1); i++) { +// std:: cout << boost::unit_test::framework::master_test_suite().argv[i] << std::endl; +// if (std::string(boost::unit_test::framework::master_test_suite().argv[i]) == "--n") { +// if (std::regex_match(boost::unit_test::framework::master_test_suite().argv[i + 1], +// std::regex(("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?")))) { +// N = atoi(boost::unit_test::framework::master_test_suite().argv[i + 1]); +// break; +// } +// } +// } +// std::vector msg(N, 0x0); +// test_keccaks({{msg,calculate_hash(msg)}}, rnd); +// } +// BOOST_AUTO_TEST_CASE(keccak_1_long_message) { +// nil::crypto3::test_tools::random_test_initializer rnd; +// std::vector msg(500, 5); +// test_keccaks({{msg,calculate_hash(msg)}}, rnd); +// } +// BOOST_AUTO_TEST_CASE(keccak_2_long_messages) { +// nil::crypto3::test_tools::random_test_initializer rnd; +// std::vector msg1(136, 6); +// std::vector msg2(277, 7); +// test_keccaks({{msg1,calculate_hash(msg1)}, {msg2,calculate_hash(msg2)}}, rnd); +// } + +// BOOST_AUTO_TEST_CASE(keccak_test_hello_world){ +// nil::crypto3::test_tools::random_test_initializer rnd; +// std::vector msg = { +// 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, +// 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x55, +// 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, +// 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, +// 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, +// 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, +// 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, +// 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0x68, +// 0x65, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c}; +// test_keccaks({{msg, calculate_hash(msg)}}, rnd); +// } +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/bbf/hashes/keccak/keccak_round.cpp b/crypto3/libs/blueprint/test/bbf/hashes/keccak/keccak_round.cpp new file mode 100644 index 0000000000..1dc7477fb2 --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/hashes/keccak/keccak_round.cpp @@ -0,0 +1,231 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// Copyright (c) 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// +#define BOOST_TEST_MODULE plonk_keccak_test +#include +#include +#include +#include +// #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../../../test_plonk_component.hpp" +const int r[5][5] = {{0, 36, 3, 41, 18}, + {1, 44, 10, 45, 2}, + {62, 6, 43, 15, 61}, + {28, 55, 25, 21, 56}, + {27, 20, 39, 8, 14}}; +template +typename BlueprintFieldType::value_type to_sparse(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); +} +template +std::array sparse_round_function( + std::array inner_state, + std::array padded_message_chunk, + typename BlueprintFieldType::value_type RC) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + bool last_round_call = false; + std::array, 5> inner_state_integral; + std::array padded_message_chunk_integral; + integral_type RC_integral = integral_type(RC.data); + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] = integral_type(inner_state[x + 5 * y].data); + } + } + for (int i = 0; i < 17; ++i) { + padded_message_chunk_integral[i] = integral_type(padded_message_chunk[i].data); + } + auto rot = [](integral_type x, const int s) { + return ((x << (3 * s)) | (x >> (192 - 3 * s))) & ((integral_type(1) << 192) - 1); + }; + if (xor_with_mes) { + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + if (last_round_call && (x + 5 * y == 16)) { + continue; + } + if (x + 5 * y < 17) { + inner_state_integral[x][y] = + inner_state_integral[x][y] ^ padded_message_chunk_integral[x + 5 * y]; + } + } + } + if (last_round_call) { + value_type last_round_const = + to_sparse(value_type(0x8000000000000000)); + integral_type last_round_const_integral = integral_type(last_round_const.data); + inner_state_integral[1][3] = inner_state_integral[1][3] ^ + padded_message_chunk_integral[16] ^ + last_round_const_integral; + } + } + // theta + std::array C; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + C[x] ^= inner_state_integral[x][y]; + } + } + std::array D; + for (int x = 0; x < 5; ++x) { + D[x] = C[(x + 4) % 5] ^ rot(C[(x + 1) % 5], 1); + } + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] ^= D[x]; + } + } + // rho and pi + std::array, 5> B; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + B[y][(2 * x + 3 * y) % 5] = rot(inner_state_integral[x][y], r[x][y]); + } + } + // chi + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] = B[x][y] ^ ((~B[(x + 1) % 5][y]) & B[(x + 2) % 5][y]); + } + } + // iota + inner_state_integral[0][0] = inner_state_integral[0][0] ^ RC_integral; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state[x + 5 * y] = value_type(inner_state_integral[x][y]); + } + } + return inner_state; +} +using namespace nil::crypto3; +using namespace nil::blueprint; +template +void test_bbf_keccak_round(const std::array &inner_state, + const std::array &message_chunks, + typename field_type::value_type RC, bool xor_with_mes, + const std::array &expected_res) { + + typename bbf::keccak_round::raw_input_type raw_input = {inner_state, message_chunks, RC}; + auto B = bbf::circuit_builder(xor_with_mes); + auto [at, A, desc] = B.assign(raw_input); + std::cout << "Is_satisfied = " << B.is_satisfied(at) << std::endl; + for (std::size_t i = 0; i < 25; i++) { + assert(expected_res[i] == A.inner_state[i]); + } +} +template +void test_keccak_round_bbf_random() { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dis; + std::array inner_state; + std::array padded_message_chunk; + value_type RC; + integral_type mask = (integral_type(1) << 64) - 1; + for (int i = 0; i < 25; ++i) { + auto random_value = integral_type(dis(gen)) & mask; + inner_state[i] = to_sparse(value_type(random_value)); + } + for (int i = 0; i < 17; ++i) { + auto random_value = integral_type(dis(gen)) & mask; + padded_message_chunk[i] = to_sparse(value_type(random_value)); + } + auto random_value = integral_type(dis(gen)) & mask; + RC = to_sparse(value_type(random_value)); + auto expected_result = sparse_round_function(inner_state, padded_message_chunk, RC); + test_bbf_keccak_round(inner_state, padded_message_chunk, RC, xor_with_mes, expected_result); +} +BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_bbf_random_pallas) { + using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; + using value_type = typename field_type::value_type; + test_keccak_round_bbf_random(); + // test_keccak_round_bbf_random(); +} +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_bbf_not_random_pallas) { + using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; + using value_type = typename field_type::value_type; + // round 0 + std::array state = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + std::array message = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + value_type rc; + std::array expected_result; + std::array round_constants = {value_type(1), + value_type(0x8082), + value_type(0x800000000000808A), + value_type(0x8000000080008000), + value_type(0x808B), + value_type(0x80000001), + value_type(0x8000000080008081), + value_type(0x8000000000008009), + value_type(0x8A), + value_type(0x88), + value_type(0x80008009), + value_type(0x8000000A), + value_type(0x8000808B), + value_type(0x800000000000008B), + value_type(0x8000000000008089), + value_type(0x8000000000008003), + value_type(0x8000000000008002), + value_type(0x8000000000000080), + value_type(0x800A), + value_type(0x800000008000000A), + value_type(0x8000000080008081), + value_type(0x8000000000008080), + value_type(80000001), + value_type(0x8000000080008008)}; + for (std::size_t i = 0; i < 24; i++) { + rc = to_sparse((round_constants[i])); + expected_result = sparse_round_function(state, message, rc); + test_bbf_keccak_round(state, message, rc, false, expected_result); + state = expected_result; + } +} +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/bbf/opcode_poc.cpp b/crypto3/libs/blueprint/test/bbf/opcode_poc.cpp new file mode 100644 index 0000000000..9d15192468 --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/opcode_poc.cpp @@ -0,0 +1,77 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_bytecode_test + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +template +void test_opcode_poc( + std::vector blocks, + std::size_t max_rows +){ + typename opcode_poc::raw_input_type raw_input; + raw_input.B = blocks; + + std::cout << "input_size = " << blocks.size() << std::endl; + auto B = circuit_builder(max_rows); + auto [at, A, desc] = B.assign(raw_input); + std::cout << "Is_satisfied = " << B.is_satisfied(at) << std::endl; +} + + +BOOST_AUTO_TEST_SUITE(blueprint_opcode_poc) + using field_type = typename algebra::curves::pallas::base_field_type; + using integral_type = typename field_type::integral_type; + using value_type = typename field_type::value_type; +BOOST_AUTO_TEST_CASE(test1){ + test_opcode_poc({1, 2, 3, 4, 5, 1, 1, 4, 5}, 50); +} + +BOOST_AUTO_TEST_CASE(test2){ + test_opcode_poc({5, 5, 4, 4, 3, 3, 3, 5, 1, 3, 2}, 50); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/bbf/poseidon.cpp b/crypto3/libs/blueprint/test/bbf/poseidon.cpp new file mode 100644 index 0000000000..13593c7345 --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/poseidon.cpp @@ -0,0 +1,152 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2021-2022 Mikhail Komarov +// Copyright (c) 2021-2022 Nikita Kaskov +// Copyright (c) 2022 Alisa Cherniaeva +// Copyright (c) 2024 Antoine Cyr +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE bbf_plonk_poseidon_test + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace nil; +using namespace nil::blueprint; + +template +void test_poseidon(std::vector public_input, + std::vector expected_res) { + + using FieldType = BlueprintFieldType; + + typename bbf::components::flexible_poseidon::raw_input_type raw_input; + raw_input.state = public_input; + + auto B = bbf::circuit_builder(); + auto [at, A, desc] = B.assign(raw_input); + std::cout << "Is_satisfied = " << B.is_satisfied(at) << std::endl; + + for (std::uint32_t i = 0; i < public_input.size(); i++) { + std::cout << "input[" << i << "] : " << public_input[i].data << "\n"; + std::cout << "expected[" << i << "]: " << expected_res[i].data << "\n"; + std::cout << "real[" << i << "] : " << A.res[i] << "\n"; + assert(expected_res[i] == A.res[i]); + } +} + +template +std::vector calculate_expected_poseidon( + const typename std::vector &a) { + using permutation_type = nil::crypto3::hashes::detail::poseidon_permutation; + using state_type = typename permutation_type::state_type; + + state_type state; + std::copy(a.begin(), a.end(), state.begin()); + permutation_type::permute(state); + + std::vector result(3); + std::copy(state.begin(), state.end(), result.begin()); + return result; +} + +template +void test_poseidon_specfic_data() { + std::vector input = {0, 1, 1}; + test_poseidon(input, calculate_expected_poseidon(input)); + + input = {0, 0, 0}; + test_poseidon(input, calculate_expected_poseidon(input)); + + input = {1, 2, 3}; + test_poseidon(input, calculate_expected_poseidon(input)); + + input = {-1, -1, -1}; + test_poseidon(input, calculate_expected_poseidon(input)); + + typename FieldType::value_type threeFFF = + 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint256; + input = {threeFFF, threeFFF, threeFFF}; + test_poseidon(input, calculate_expected_poseidon(input)); +} + +template +void test_poseidon_random_data() { + using generator_type = nil::crypto3::random::algebraic_engine; + generator_type g; + boost::random::mt19937 seed_seq; + g.seed(seed_seq); + std::vector input; + + for (std::size_t i = 0; i < RandomDataTestsAmount; i++) { + input = {g(), g(), g()}; + test_poseidon(input, calculate_expected_poseidon(input)); + } +} + +constexpr static const std::size_t random_data_tests_amount = 10; + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_poseidon_test_suite) + +BOOST_AUTO_TEST_CASE(blueprint_plonk_poseidon_test_vesta) { + using field_type = typename crypto3::algebra::curves::vesta::base_field_type; + using poseidon_policy = nil::crypto3::hashes::detail::mina_poseidon_policy; + test_poseidon_specfic_data(); + test_poseidon_random_data(); +} + +BOOST_AUTO_TEST_CASE(blueprint_plonk_poseidon_test_pallas) { + using field_type = typename crypto3::algebra::curves::pallas::base_field_type; + using poseidon_policy = nil::crypto3::hashes::detail::mina_poseidon_policy; + test_poseidon_specfic_data(); + test_poseidon_random_data(); +} + +BOOST_AUTO_TEST_CASE(blueprint_plonk_poseidon_test_alt_bn128) { + using field_type = typename crypto3::algebra::curves::alt_bn128<254>::scalar_field_type; + using poseidon_policy = nil::crypto3::hashes::detail::poseidon_policy; + test_poseidon_specfic_data(); + test_poseidon_random_data(); +} + +// BOOST_AUTO_TEST_CASE(blueprint_plonk_poseidon_test_bls12) { +// using field_type = typename crypto3::algebra::fields::bls12_fr<381>; +// test_poseidon_specfic_data(); +// test_poseidon_random_data(); +// } + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/block/test/md5.cpp b/crypto3/libs/blueprint/test/bbf/row_seletor_test.cpp similarity index 67% rename from crypto3/libs/block/test/md5.cpp rename to crypto3/libs/blueprint/test/bbf/row_seletor_test.cpp index 582f6a0850..4ae769a76f 100644 --- a/crypto3/libs/block/test/md5.cpp +++ b/crypto3/libs/blueprint/test/bbf/row_seletor_test.cpp @@ -1,5 +1,5 @@ //---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2024 Martun Karapetyan // // MIT License // @@ -22,28 +22,27 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#define BOOST_TEST_MODULE md5_cipher_test - -#include -#include +#define BOOST_TEST_MODULE blueprint_plonk_bbf_row_selector_test #include -#include -#include - -#include - -#include -#include -using namespace nil::crypto3; -using namespace nil::crypto3::block; +#include -BOOST_TEST_DONT_PRINT_LOG_VALUE(md5::block_type) +using namespace nil::blueprint; -BOOST_AUTO_TEST_SUITE(md5_test_suite) +BOOST_AUTO_TEST_SUITE(blueprint_bbf_row_selector_test) -BOOST_AUTO_TEST_CASE(md5_single_block_encrypt1) { +BOOST_AUTO_TEST_CASE(blueprint_plonk_bbf_row_selector_test) { + size_t max_rows = 10; + bbf::row_selector<> r(max_rows); + r.set_row(0); + r.set_row(2); + r.set_row(5); + std::vector v(r.begin(), r.end()); + std::vector expected = {0, 2, 5}; + BOOST_CHECK_EQUAL_COLLECTIONS( + v.begin(), v.end(), + expected.begin(), expected.end()); } -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/bbf/test_circuit_builder.cpp b/crypto3/libs/blueprint/test/bbf/test_circuit_builder.cpp new file mode 100644 index 0000000000..2dee50eb56 --- /dev/null +++ b/crypto3/libs/blueprint/test/bbf/test_circuit_builder.cpp @@ -0,0 +1,90 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_circuit_builder_test + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +// #include +#include + +using namespace nil::crypto3; +using namespace nil::blueprint; + +template class Component, typename... ComponentStaticInfoArgs> +void test_circuit_builder(typename Component::raw_input_type raw_input, + ComponentStaticInfoArgs... args) { + + auto B = bbf::circuit_builder(args...); + + auto [at, A, desc] = B.assign(raw_input); + std::cout << "Input = " << A.input << std::endl; + bool pass = B.is_satisfied(at); + std::cout << "Is_satisfied = " << pass << std::endl; + + if (pass) { + bool proof = B.check_proof(at, desc); + std::cout << "Is_proved = " << proof << std::endl; + } +} + +static const std::size_t random_tests_amount = 5; + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) + +BOOST_AUTO_TEST_CASE(blueprint_plonk_cicruit_builder_test) { + using field_type = typename algebra::curves::pallas::base_field_type; + using integral_type = typename field_type::integral_type; + using value_type = typename field_type::value_type; + + nil::crypto3::random::algebraic_engine generate_random; + boost::random::mt19937 seed_seq; + generate_random.seed(seed_seq); + + integral_type base16 = integral_type(1) << 16; + integral_type base17 = integral_type(1) << 17; + + for (std::size_t i = 0; i < random_tests_amount; i++) { + auto random_input = value_type(integral_type(generate_random().data) % (i % 2 ? base16 : base17)); + bbf::micro_range_check::raw_input_type raw_input = {random_input}; + test_circuit_builder(raw_input); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/bbf/bbf_wrapper.cpp b/crypto3/libs/blueprint/test/bbf/tester.cpp similarity index 50% rename from crypto3/libs/blueprint/test/bbf/bbf_wrapper.cpp rename to crypto3/libs/blueprint/test/bbf/tester.cpp index 8062fe01a3..d74ba4fbab 100644 --- a/crypto3/libs/blueprint/test/bbf/bbf_wrapper.cpp +++ b/crypto3/libs/blueprint/test/bbf/tester.cpp @@ -22,7 +22,7 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#define BOOST_TEST_MODULE blueprint_plonk_bbf_wrapper_test +#define BOOST_TEST_MODULE blueprint_plonk_bbf_tester_test #include @@ -40,63 +40,36 @@ #include #include -#include +#include -#include "../test_plonk_component.hpp" +#include using namespace nil::crypto3; -using namespace nil::blueprint; - -template -void test_bbf_wrapper(std::vector public_input) { - constexpr std::size_t WitnessColumns = 15; // TODO - constexpr std::size_t PublicInputColumns = 1; // TODO - constexpr std::size_t ConstantColumns = 3; // TODO - constexpr std::size_t SelectorColumns = 9; // TODO - - // table configuration, TODO: We need 108 rows because test_plonk_component.hpp places the component at a random row 0..100. - // In practice it's placed at row 82. - zk::snark::plonk_table_description desc( - WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns, 108, 108); - - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - using component_type = components::bbf_wrapper; - - typename BlueprintFieldType::value_type expected_res = 0; // TODO - - typename component_type::input_type instance_input = { - var(0, 0, false, var::column_type::public_input), - var(0, 1, false, var::column_type::public_input), - var(0, 2, false, var::column_type::public_input), - var(0, 3, false, var::column_type::public_input), - var(0, 4, false, var::column_type::public_input), - var(0, 5, false, var::column_type::public_input), - var(0, 6, false, var::column_type::public_input), - var(0, 7, false, var::column_type::public_input) }; - -// std::vector public_input = {input}; - - component_type component_instance({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, {0}, {0}); - - auto result_check = [&expected_res](AssignmentType &assignment, typename component_type::result_type &real_res) { - // assert(expected_res == var_value(assignment, real_res.output)); - }; - - test_component - (component_instance, desc, public_input, result_check, instance_input); +using namespace nil::blueprint::bbf; + +template +void test_bbf_tester(std::array public_input) { + + typename bbf_tester::raw_input_type raw_input = { + public_input[0], + public_input[1], + public_input[2], + public_input[3], + public_input[4], + public_input[5], + public_input[6], + public_input[7]}; + + auto B = circuit_builder(); + auto [at, A, desc] = B.assign(raw_input); + std::cout << "Is_satisfied = " << B.is_satisfied(at) << std::endl; } static const std::size_t random_tests_amount = 10; BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) -BOOST_AUTO_TEST_CASE(blueprint_plonk_bbf_wrapper_test) { +BOOST_AUTO_TEST_CASE(blueprint_plonk_bbf_tester_test) { using field_type = typename algebra::curves::pallas::base_field_type; using integral_type = typename field_type::integral_type; using value_type = typename field_type::value_type; @@ -109,7 +82,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_bbf_wrapper_test) { for (std::size_t i = 0; i < random_tests_amount; i++) { auto random_input = value_type(integral_type(generate_random().data) % base16); - test_bbf_wrapper({random_input,1,random_input,random_input,random_input,random_input,random_input,random_input}); + test_bbf_tester({random_input,1,random_input,random_input,random_input,random_input,random_input,random_input}); } } diff --git a/crypto3/libs/blueprint/test/hashes/plonk/data_for_keccak_round.hpp b/crypto3/libs/blueprint/test/hashes/plonk/data_for_keccak_round.hpp new file mode 100644 index 0000000000..be8b442e6c --- /dev/null +++ b/crypto3/libs/blueprint/test/hashes/plonk/data_for_keccak_round.hpp @@ -0,0 +1,121 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2021-2022 Mikhail Komarov +// Copyright (c) 2023 Polina Chernyshova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_DATA_KECCAK_ROUND_HPP +#define CRYPTO3_BLUEPRINT_COMPONENTS_DATA_KECCAK_ROUND_HPP + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +using namespace nil::crypto3; + +const uint64_t RC[25] = {0, 1ULL, 0x8082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, + 0x808bULL, 0x80000001ULL, 0x8000000080008081ULL, 0x8000000000008009ULL, + 0x8aULL, 0x88ULL, 0x80008009ULL, 0x8000000aULL, + 0x8000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL, 0x8000000000008003ULL, + 0x8000000000008002ULL, 0x8000000000000080ULL, 0x800aULL, 0x800000008000000aULL, + 0x8000000080008081ULL, 0x8000000000008080ULL, 0x80000001ULL, 0x8000000080008008ULL}; + +const std::vector> inner_states = { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { + 32899, 17592186044416, 32768, 1, 17592186077184, + 0, 35184374185984, 0, 35184372088832, 2097152, + 2, 512, 0, 514, 0, + 268436480, 0, 1024, 268435456, 0, + 1099511627776, 0, 1099511627780, 0, 4 + }, + { + 9236970796698600460, 4092250545529553158, 626057523912327425, 2306538108895626371, 1173341635645358336, + 1293304092434976, 1266393375296193026, 4612686711565066480, 3572814934320349200, 6918386853474468034, + 181437471070544, 17451689225912448, 14123431978033217603, 9612137362626578, 14131171423402623105, + 109225863298950544, 4469910934709993472, 291608492588557700, 4143342752895270928, 722898250671538564, + 9260980282462904729, 14339470011802853602, 37581858268459548, 4683770000893804961, 432358761588732518 + }, + { + 592319258926211651, 14940587067404002452, 6163873250186209783, 9133172271835791495, 13983250434949586883, + 10037245043040796116, 14625807227073111006, 9517639169617348992, 10802803781493464979, 1170967630360556906, + 4833658608200494670, 14411270558251773425, 10413092914151648788, 6324505867985343017, 15456637871614865798, + 15961727220218474669, 12219779720573097889, 13453918774002596887, 11249665490274026413, 16763947842887530834, + 9348458261315236693, 11269932799224724130, 5725669273397430228, 16793563075160212879, 7296601056617420707 + }, + { + 7638250137956199023, 17990125325728205105, 7906499215270811140, 10861036725959346835, 11195520138696188958, + 8358174899797462070, 8135952663530915624, 1143978644753002443, 15662404937588594201, 16535557756827863490, + 2821756897662528488, 12114361851460063201, 8845673958919045506, 13942698502943567537, 11656387723772272466, + 13322614738909770079, 2086432298574777049, 17543636310180418713, 1178364895537752846, 10832164025006223835, + 2030143342952750111, 12360607886846421348, 10479039689777663018, 16563260862735374768, 7279885679800479721 + }, + { + 4891766363406797400, 15439122233753343804, 13823342620960621853, 11746433691194652646, 4017314498112237324, + 815207819430446539, 4967747420293129338, 3818588911347179217, 12982395987346120149, 8831006501622048216, + 3273200702990303769, 11925911941096385939, 11818410238024184151, 6855937196075990472, 6813782227838587502, + 5749709705375199086, 198532287281302992, 3986921420170929948, 2084732521627207926, 3955984847012879536, + 17540298648724239738, 14973796877054370773, 9207394463793105740, 13336242423054526618, 2223831538796077986 + }, + { + 898454936699210940, 8026835929569667841, 7594412717710188589, 17691297879001667639, 12039682773981733750, + 4806751406901749727, 11830785691895369039, 6215100860000502273, 3084694277248389144, 16700214332683074198, + 1701067029580549681, 2935021215067160996, 10064659787097191500, 7604822824502759976, 1494105689337672248, + 12626178481354463734, 2395136601172298592, 4068135589652482799, 15567196270789777948, 4732526861918809121, + 2821496240805205513, 5710775155925759758, 9794593245826189275, 17281148776925903127, 7447477925633355381 + } + //8 +}; + +template +auto inner_states_data(int num_round) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::array prev_inner_state; + for (std::size_t i = 0; i < 25; i++) { + prev_inner_state[i] = value_type(integral_type(inner_states[num_round - 1][i])); + } + std::array inner_state; + for (std::size_t i = 0; i < 25; i++) { + inner_state[i] = value_type(integral_type(inner_states[num_round][i])); + } + value_type rc = value_type(integral_type(RC[num_round])); + return std::make_tuple(prev_inner_state, inner_state, rc); +} + +#endif // CRYPTO3_BLUEPRINT_COMPONENTS_DATA_KECCAK_ROUND_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/hashes/plonk/decomposition.cpp b/crypto3/libs/blueprint/test/hashes/plonk/decomposition.cpp index 536530c783..0ec6f6d24f 100644 --- a/crypto3/libs/blueprint/test/hashes/plonk/decomposition.cpp +++ b/crypto3/libs/blueprint/test/hashes/plonk/decomposition.cpp @@ -135,8 +135,8 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_decomposition_test0) { using field_type = typename crypto3::algebra::curves::pallas::base_field_type; test_decomposition( - {0x8d741211e928fdd4d33a13970d0ce7f3_cppui_modular255, 0x92f209334030f9ec8fa8a025e987a5dd_cppui_modular255}, - calculate_decomposition({0x8d741211e928fdd4d33a13970d0ce7f3_cppui_modular255, 0x92f209334030f9ec8fa8a025e987a5dd_cppui_modular255}), + {0x8d741211e928fdd4d33a13970d0ce7f3_big_uint255, 0x92f209334030f9ec8fa8a025e987a5dd_big_uint255}, + calculate_decomposition({0x8d741211e928fdd4d33a13970d0ce7f3_big_uint255, 0x92f209334030f9ec8fa8a025e987a5dd_big_uint255}), true); test_decomposition( @@ -145,15 +145,15 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_decomposition_test0) { true); test_decomposition( - {0xffffffffffffffffffffffffffffffff_cppui_modular255, 0xffffffffffffffffffffffffffffffff_cppui_modular255}, - calculate_decomposition({0xffffffffffffffffffffffffffffffff_cppui_modular255, 0xffffffffffffffffffffffffffffffff_cppui_modular255}), + {0xffffffffffffffffffffffffffffffff_big_uint255, 0xffffffffffffffffffffffffffffffff_big_uint255}, + calculate_decomposition({0xffffffffffffffffffffffffffffffff_big_uint255, 0xffffffffffffffffffffffffffffffff_big_uint255}), true); } BOOST_AUTO_TEST_CASE(blueprint_plonk_decomposition_must_fail) { using field_type = typename crypto3::algebra::curves::pallas::base_field_type; - typename field_type::value_type bad = 0x100000000000000000000000000000000_cppui_modular255; + typename field_type::value_type bad = 0x100000000000000000000000000000000_big_uint255; test_decomposition( {0u, bad}, @@ -165,7 +165,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_decomposition_must_fail) { calculate_decomposition({bad, 0u}), false); - bad = 0x4000000000000000000000000000000000000000000000000000000000000000_cppui_modular255; + bad = 0x4000000000000000000000000000000000000000000000000000000000000000_big_uint255; test_decomposition( {0u, bad}, diff --git a/crypto3/libs/blueprint/test/hashes/plonk/keccak_component.cpp b/crypto3/libs/blueprint/test/hashes/plonk/keccak_component.cpp new file mode 100644 index 0000000000..b92b3b8fe1 --- /dev/null +++ b/crypto3/libs/blueprint/test/hashes/plonk/keccak_component.cpp @@ -0,0 +1,191 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE plonk_keccak_component_test + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +// #include +#include +// #include + +#include + +#include +#include +#include +#include + +#include "../../test_plonk_component.hpp" +#include + +template +void test_keccaks( + std::vector, + std::pair + >> input, + nil::crypto3::test_tools::random_test_initializer &rnd +){ + std::cout << "Test keccak with " << input.size() << " messages" << std::endl; + + constexpr std::size_t WitnessesAmount = 15; // May be changed in next version + constexpr std::size_t PublicInputColumns = 1; + constexpr std::size_t ConstantColumns = 8; + constexpr std::size_t SelectorColumns = 60; + nil::crypto3::zk::snark::plonk_table_description desc(WitnessesAmount, PublicInputColumns, + ConstantColumns, SelectorColumns); + using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; + using AssignmentType = nil::blueprint::assignment; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 1; + + using component_type = nil::blueprint::components::keccak_component; + using var = nil::crypto3::zk::snark::plonk_variable; + + var rlc_challenge(0, 0, false, var::column_type::public_input); + typename component_type::input_type instance_input; + instance_input.rlc_challenge = rlc_challenge; + instance_input.input = input; + + std::size_t limit_permutation_columns = 15; + + auto result_check = [](AssignmentType &assignment, typename component_type::result_type &real_res) {}; + + if (!(WitnessesAmount == 15)) { + BOOST_ASSERT_MSG(false, "Please add support for WitnessesAmount that you passed here!"); + } + std::array witnesses; + for (std::uint32_t i = 0; i < WitnessesAmount; i++) { + witnesses[i] = i; + } + + std::vector public_input = {rnd.alg_random_engines.template get_alg_engine()()}; + + component_type component_instance = + component_type(witnesses, std::array {0}, std::array {0}, max_blocks, limit_permutation_columns); + + nil::crypto3::test_component( + component_instance, desc, public_input, result_check, instance_input, + nil::blueprint::connectedness_check_type::type::NONE, + max_blocks, limit_permutation_columns); +} + +template +std::pair +calculate_hash(std::vector input){ + hashes::keccak_1600<256>::digest_type d = nil::crypto3::hash>(input); + nil::crypto3::algebra::fields::field<256>::integral_type n(d); + nil::crypto3::algebra::fields::field<256>::integral_type mask = ((nil::crypto3::algebra::fields::field<256>::integral_type(1) << 128) - 1); + std::pair result; + result.first = typename BlueprintFieldType::value_type(n >> 128); + result.second = typename BlueprintFieldType::value_type(n & mask); + + std::cout << "Message hash = " << std::hex << result.first << " " << result.second << std::dec << std::endl; + return result; +} + +BOOST_AUTO_TEST_SUITE(bn254_test_suite) + using field_type = nil::crypto3::algebra::curves::alt_bn128_254::base_field_type; +BOOST_AUTO_TEST_CASE(keccak_1_short_message) { + nil::crypto3::test_tools::random_test_initializer rnd; + test_keccaks({{{0},calculate_hash({0})}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_2_short_messages) { + nil::crypto3::test_tools::random_test_initializer rnd; + test_keccaks({{{0, 0},calculate_hash({0, 0})}, {{1,2,3,4,5}, calculate_hash({1,2,3,4,5})}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_1_N_message) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::size_t N = 5; + for (std::size_t i = 0; i < std::size_t(boost::unit_test::framework::master_test_suite().argc - 1); i++) { + std:: cout << boost::unit_test::framework::master_test_suite().argv[i] << std::endl; + if (std::string(boost::unit_test::framework::master_test_suite().argv[i]) == "--n") { + if (std::regex_match(boost::unit_test::framework::master_test_suite().argv[i + 1], + std::regex(("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?")))) { + N = atoi(boost::unit_test::framework::master_test_suite().argv[i + 1]); + break; + } + } + } + std::vector msg(N); + for( std::size_t i = 0; i < N; i++ ){ msg[i] = (rnd.generic_random_engine()) % 256; } + test_keccaks({{msg,calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_1_N_zeroes) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::size_t N = 5; + for (std::size_t i = 0; i < std::size_t(boost::unit_test::framework::master_test_suite().argc - 1); i++) { + std:: cout << boost::unit_test::framework::master_test_suite().argv[i] << std::endl; + if (std::string(boost::unit_test::framework::master_test_suite().argv[i]) == "--n") { + if (std::regex_match(boost::unit_test::framework::master_test_suite().argv[i + 1], + std::regex(("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?")))) { + N = atoi(boost::unit_test::framework::master_test_suite().argv[i + 1]); + break; + } + } + } + std::vector msg(N, 0x0); + test_keccaks({{msg,calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_1_long_message) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::vector msg(500, 5); + test_keccaks({{msg,calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_2_long_messages) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::vector msg1(136, 6); + std::vector msg2(277, 7); + test_keccaks({{msg1,calculate_hash(msg1)}, {msg2,calculate_hash(msg2)}}, rnd); +} + +BOOST_AUTO_TEST_CASE(keccak_test_hello_world){ + nil::crypto3::test_tools::random_test_initializer rnd; + std::vector msg = { + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, + 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0x68, + 0x65, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c}; + test_keccaks({{msg, calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/hashes/plonk/keccak_dynamic.cpp b/crypto3/libs/blueprint/test/hashes/plonk/keccak_dynamic.cpp new file mode 100644 index 0000000000..055af595b4 --- /dev/null +++ b/crypto3/libs/blueprint/test/hashes/plonk/keccak_dynamic.cpp @@ -0,0 +1,199 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE plonk_keccak_dynamic_test + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +// #include +#include +// #include + +#include + +#include +#include +#include +#include +#include + +#include "../../test_plonk_component.hpp" +#include + +template +void test_keccaks( + std::vector, + std::pair + >> input, + nil::crypto3::test_tools::random_test_initializer &rnd, + std::string output_path = "" +){ + std::cout << "Test keccak with " << input.size() << " messages, max_blocks = " << max_blocks << std::endl; + + constexpr std::size_t WitnessesAmount = 15; // May be changed in next version + constexpr std::size_t PublicInputColumns = 1; + constexpr std::size_t ConstantColumns = 16; + constexpr std::size_t SelectorColumns = 50; + nil::crypto3::zk::snark::plonk_table_description desc(WitnessesAmount, PublicInputColumns, + ConstantColumns, SelectorColumns); + using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; + using AssignmentType = nil::blueprint::assignment; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 1; + + using component_type = nil::blueprint::components::keccak_dynamic; + using var = nil::crypto3::zk::snark::plonk_variable; + + var rlc_challenge(0, 0, false, var::column_type::public_input); + typename component_type::input_type instance_input; + instance_input.rlc_challenge = rlc_challenge; + instance_input.input = input; + + std::size_t limit_permutation_columns = 15; + + auto result_check = [](AssignmentType &assignment, typename component_type::result_type &real_res) {}; + + if (!(WitnessesAmount == 15)) { + BOOST_ASSERT_MSG(false, "Please add support for WitnessesAmount that you passed here!"); + } + std::array witnesses; + for (std::uint32_t i = 0; i < WitnessesAmount; i++) { + witnesses[i] = i; + } + + std::vector public_input = { + rnd.alg_random_engines.template get_alg_engine()() + }; + + // Last parameter is LPC + component_type component_instance = + component_type(witnesses, std::array {0}, std::array {0}, max_blocks, limit_permutation_columns); + + nil::crypto3::test_component_extended( + component_instance, desc, public_input, result_check, instance_input, + true, nil::blueprint::connectedness_check_type::type::NONE, + output_path, false, + max_blocks, limit_permutation_columns); +} + +template +std::pair +calculate_hash(std::vector input){ + hashes::keccak_1600<256>::digest_type d = nil::crypto3::hash>(input); + nil::crypto3::algebra::fields::field<256>::integral_type n(d); + nil::crypto3::algebra::fields::field<256>::integral_type mask = ((nil::crypto3::algebra::fields::field<256>::integral_type(1) << 128) - 1); + std::pair result; + result.first = typename BlueprintFieldType::value_type(n >> 128); + result.second = typename BlueprintFieldType::value_type(n & mask); + + std::cout << "Message hash = " << std::hex << result.first << " " << result.second << std::dec << std::endl; + return result; +} + +BOOST_AUTO_TEST_SUITE(bn254_test_suite) + using field_type = nil::crypto3::algebra::curves::alt_bn128_254::base_field_type; + +BOOST_AUTO_TEST_CASE(keccak_1_short_message) { + nil::crypto3::test_tools::random_test_initializer rnd; + test_keccaks({{{0},calculate_hash({0})}}, rnd, "./keccak_1_short_message"); +} + +BOOST_AUTO_TEST_CASE(keccak_2_short_messages) { + nil::crypto3::test_tools::random_test_initializer rnd; + test_keccaks({{{0, 0},calculate_hash({0, 0})}, {{1,2,3,4,5}, calculate_hash({1,2,3,4,5})}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_1_N_message) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::size_t N = 5; + for (std::size_t i = 0; i < std::size_t(boost::unit_test::framework::master_test_suite().argc - 1); i++) { + std:: cout << boost::unit_test::framework::master_test_suite().argv[i] << std::endl; + if (std::string(boost::unit_test::framework::master_test_suite().argv[i]) == "--n") { + if (std::regex_match(boost::unit_test::framework::master_test_suite().argv[i + 1], + std::regex(("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?")))) { + N = atoi(boost::unit_test::framework::master_test_suite().argv[i + 1]); + break; + } + } + } + std::vector msg(N); + for( std::size_t i = 0; i < N; i++ ){ msg[i] = (rnd.generic_random_engine()) % 256; } + test_keccaks({{msg,calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_1_N_zeroes) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::size_t N = 5; + for (std::size_t i = 0; i < std::size_t(boost::unit_test::framework::master_test_suite().argc - 1); i++) { + std:: cout << boost::unit_test::framework::master_test_suite().argv[i] << std::endl; + if (std::string(boost::unit_test::framework::master_test_suite().argv[i]) == "--n") { + if (std::regex_match(boost::unit_test::framework::master_test_suite().argv[i + 1], + std::regex(("((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?")))) { + N = atoi(boost::unit_test::framework::master_test_suite().argv[i + 1]); + break; + } + } + } + std::vector msg(N, 0x0); + test_keccaks({{msg,calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_1_long_message) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::vector msg(500, 5); + test_keccaks({{msg,calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_CASE(keccak_2_long_messages) { + nil::crypto3::test_tools::random_test_initializer rnd; + std::vector msg1(136, 6); + std::vector msg2(277, 7); + test_keccaks({{msg1,calculate_hash(msg1)}, {msg2,calculate_hash(msg2)}}, rnd); +} + +BOOST_AUTO_TEST_CASE(keccak_test_hello_world){ + nil::crypto3::test_tools::random_test_initializer rnd; + std::vector msg = { + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33, + 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x77, + 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x99, + 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbb, + 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0x68, + 0x65, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c}; + test_keccaks({{msg, calculate_hash(msg)}}, rnd); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/hashes/plonk/keccak_padding.cpp b/crypto3/libs/blueprint/test/hashes/plonk/keccak_padding.cpp new file mode 100644 index 0000000000..fa78b8740d --- /dev/null +++ b/crypto3/libs/blueprint/test/hashes/plonk/keccak_padding.cpp @@ -0,0 +1,315 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// 2024 Valeh Farzaliyev +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE plonk_keccak_test + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +// #include +#include +// #include + +#include + +#include +#include + +#include + +#include "../../test_plonk_component.hpp" + +template +std::size_t number_bits(typename BlueprintFieldType::value_type value) { + using integral_type = typename BlueprintFieldType::integral_type; + + integral_type integral_value = integral_type(value.data); + std::size_t result = 0; + while (integral_value > 0) { + integral_value >>= 1; + ++result; + } + return result; +} + + +template +std::vector + padding_function(std::vector message, std::size_t num_bits) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::vector result; + std::size_t shift = 64 * message.size() - num_bits; + + if (shift > 0) { + integral_type relay_value = integral_type(message[0].data); + for (int i = 1; i < message.size(); ++i) { + integral_type mask = (integral_type(1) << (64 - shift)) - 1; + integral_type left_part = integral_type(message[i].data.base() >> (64 - shift)); + integral_type right_part = integral_type(message[i].data) & mask; + result.push_back(value_type((relay_value << shift) + left_part)); + relay_value = right_part; + } + relay_value <<= shift; + relay_value += integral_type(1) << (shift - 8); + result.push_back(value_type(relay_value)); + } else { + for (int i = 0; i < message.size(); ++i) { + result.push_back(message[i]); + } + result.push_back(value_type(integral_type(1) << 56)); + } + while (result.size() % 17 != 0) { + result.push_back(value_type(0)); + } + + return result; +} + +template +auto test_keccak_padding_inner(std::vector message, + std::vector expected_result, + const std::size_t num_blocks, const std::size_t num_bits, + const bool range_check_input = true, const std::size_t limit_permutation_column = 7) { + constexpr std::size_t PublicInputColumns = 1; + constexpr std::size_t ConstantColumns = 3; + constexpr std::size_t SelectorColumns = 20; + nil::crypto3::zk::snark::plonk_table_description desc(WitnessesAmount, PublicInputColumns, + ConstantColumns, SelectorColumns); + using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; + using AssignmentType = nil::blueprint::assignment; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 1; + + using component_type = nil::blueprint::components::keccak_padding; + using var = typename component_type::var; + + std::vector public_input; + for (int i = 0; i < num_blocks; ++i) { + public_input.push_back(message[i]); + } + + std::vector message_vars; + for (int i = 0; i < num_blocks; ++i) { + message_vars.push_back(var(0, i, false, var::column_type::public_input)); + } + typename component_type::input_type instance_input = {message_vars}; + + auto result_check = [expected_result](AssignmentType &assignment, typename component_type::result_type &real_res) { + assert(expected_result.size() == real_res.padded_message.size()); + for (int i = 0; i < real_res.padded_message.size(); ++i) { + assert(expected_result[i] == var_value(assignment, real_res.padded_message[i])); + } + }; + + if (!(WitnessesAmount == 15 || WitnessesAmount == 9)) { + BOOST_ASSERT_MSG(false, "Please add support for WitnessesAmount that you passed here!"); + } + std::array witnesses; + for (std::uint32_t i = 0; i < WitnessesAmount; i++) { + witnesses[i] = i; + } + component_type component_instance = + component_type(witnesses, std::array {0}, std::array {0}, num_blocks, + num_bits, range_check_input, limit_permutation_column); + + nil::crypto3::test_component( + component_instance, desc, public_input, result_check, instance_input, + nil::blueprint::connectedness_check_type::type::NONE, num_blocks, num_bits, range_check_input, + limit_permutation_column); +} + +// works +template +void test_keccak_padding_0() { + using value_type = typename BlueprintFieldType::value_type; + + std::vector message = {0}; + const std::size_t num_blocks = 1; + const std::size_t num_bits = 8; + + std::vector expected_result = {281474976710656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + + test_keccak_padding_inner(message, expected_result, + num_blocks, num_bits); +} +template +void test_keccak_padding_1(std::size_t num_bits) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::vector message = {value_type(integral_type(1) << (num_bits - 1) % 64)}; + for (std::size_t i = 0; i < (num_bits - 1) / 64; i++) { + message.push_back(value_type(0)); + } + const std::size_t num_blocks = message.size(); + + auto expected_result = padding_function(message, num_bits); + + test_keccak_padding_inner(message, expected_result, + num_blocks, num_bits); +} + +template +void test_keccak_padding_random(std::size_t message_size, bool random_mask_zero = true, bool range_check_input = true, + std::size_t limit_permutation_column = 7) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dis; + + integral_type mask = (integral_type(1) << 64) - 1; + std::size_t power_for_mask = 64; + if (random_mask_zero) { + power_for_mask = dis(gen) % 63 + 1; + } + integral_type mask_zero = (integral_type(1) << power_for_mask) - 1; + value_type message_zero = + value_type((integral_type(dis(gen)) & mask_zero) | (integral_type(1) << (power_for_mask - 1))); + + std::vector message; + message.push_back(message_zero); + for (std::size_t i = 1; i < message_size; i++) { + message.push_back(value_type(integral_type(dis(gen)) & mask)); + } + assert(message_size == message.size()); + std::size_t num_bits = 64 * (message_size - 1) + number_bits(message[0]); + std::size_t num_blocks = message_size; + + auto expected_result = padding_function(message, num_bits); + + test_keccak_padding_inner( + message, expected_result, num_blocks, num_bits, range_check_input, limit_permutation_column); +} + +template +void test_to_fail_keccak_padding_random(std::size_t message_size, bool more_bits, bool random_mask_zero = true, + bool range_check_input = true, std::size_t limit_permutation_column = 7) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dis; + + integral_type mask = (integral_type(1) << 64) - 1; + std::size_t power_for_mask = 64; + if (random_mask_zero) { + power_for_mask = dis(gen) % 63 + 1; + } + integral_type mask_zero = (integral_type(1) << power_for_mask) - 1; + value_type message_zero = + value_type((integral_type(dis(gen)) & mask_zero) | (integral_type(1) << (power_for_mask - 1))); + std::vector message; + message.push_back(message_zero); + for (std::size_t i = 1; i < message_size; i++) { + message.push_back(value_type(integral_type(dis(gen)) & mask)); + } + assert(message_size == message.size()); + std::size_t num_bits = 64 * (message_size - 1) + number_bits(message[0]); + std::size_t num_blocks = message_size; + + auto expected_result = padding_function(message, num_bits); + + if (more_bits) { + num_bits -= 1; + } else { + num_bits += 1; + } + + test_keccak_padding_inner( + message, expected_result, num_blocks, num_bits, range_check_input, limit_permutation_column); +} + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) + +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_pallas) { + using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; + + test_keccak_padding_0(); + test_keccak_padding_random(2, true, false); + for (std::size_t i = 1; i < 100; i++) { + test_keccak_padding_1(i); + test_keccak_padding_random(i); + test_keccak_padding_random(i, false); + test_keccak_padding_random(i, true, false); + test_keccak_padding_random(i, false, false); + } +} + +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_pallas_15) { + using field_type = nil::crypto3::algebra::curves::vesta::scalar_field_type; + + test_keccak_padding_0(); + test_keccak_padding_random(10); + for (std::size_t i = 80; i < 100; i++) { + test_keccak_padding_1(i); + test_keccak_padding_random(i); + test_keccak_padding_random(i, false); + test_keccak_padding_random(i, true, false); + test_keccak_padding_random(i, false, false); + } +} + +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_to_fail) { + // test with no result_check asserts + using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; + + // test_to_fail_keccak_padding_random(10, false); + // test_to_fail_keccak_padding_random(16, false, false); + // test_to_fail_keccak_padding_random(11, false, false, false); + // test_to_fail_keccak_padding_random(100, true); + // test_to_fail_keccak_padding_random(150, true, false); + // test_to_fail_keccak_padding_random(2, true, true, false); + // test_to_fail_keccak_padding_random(4, true, false, false); + + // test_to_fail_keccak_padding_random(10, false); + // test_to_fail_keccak_padding_random(16, false, false); + // test_to_fail_keccak_padding_random(11, false, false, false); + // test_to_fail_keccak_padding_random(100, true); + // test_to_fail_keccak_padding_random(150, true, false); + // test_to_fail_keccak_padding_random(2, true, true, false); + // test_to_fail_keccak_padding_random(4, true, false, false); + + // this doesn't break, because we switched off range check input + // test_to_fail_keccak_padding_random(5, false, true, false); + // test_to_fail_keccak_padding_random(5, false, true, false); + + // test_to_fail_keccak_padding_random(5, false, true); + // test_to_fail_keccak_padding_random(5, false, true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/hashes/plonk/keccak_round.cpp b/crypto3/libs/blueprint/test/hashes/plonk/keccak_round.cpp new file mode 100644 index 0000000000..dca9ebf01b --- /dev/null +++ b/crypto3/libs/blueprint/test/hashes/plonk/keccak_round.cpp @@ -0,0 +1,416 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// 2024 Valeh Farzaliyev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE plonk_keccak_test + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +// #include +#include +// #include + +#include + +#include +#include + +#include + +#include "../../test_plonk_component.hpp" + +const int r[5][5] = {{0, 36, 3, 41, 18}, + {1, 44, 10, 45, 2}, + {62, 6, 43, 15, 61}, + {28, 55, 25, 21, 56}, + {27, 20, 39, 8, 14}}; + +template +typename BlueprintFieldType::value_type to_sparse(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); +} +template +std::array sparse_round_function(std::array inner_state, + std::array padded_message_chunk, + typename BlueprintFieldType::value_type RC) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::array, 5> inner_state_integral; + std::array padded_message_chunk_integral; + integral_type RC_integral = integral_type(RC.data); + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] = integral_type(inner_state[x + 5 * y].data); + } + } + for (int i = 0; i < 17; ++i) { + padded_message_chunk_integral[i] = integral_type(padded_message_chunk[i].data); + } + + auto rot = [](integral_type x, const int s) { + return ((x << (3 * s)) | (x >> (192 - 3 * s))) & ((integral_type(1) << 192) - 1); + }; + + if (xor_with_mes) { + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + if (last_round_call && (x + 5 * y == 16)) { + continue; + } + if (x + 5 * y < 17) { + inner_state_integral[x][y] = inner_state_integral[x][y] ^ padded_message_chunk_integral[x + 5 * y]; + } + } + } + if (last_round_call) { + value_type last_round_const = to_sparse(value_type(0x8000000000000000)); + integral_type last_round_const_integral = integral_type(last_round_const.data); + inner_state_integral[1][3] = inner_state_integral[1][3] ^ padded_message_chunk_integral[16] ^ last_round_const_integral; + } + } + + // theta + std::array C; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + C[x] ^= inner_state_integral[x][y]; + } + } + std::array D; + for (int x = 0; x < 5; ++x) { + D[x] = C[(x + 4) % 5] ^ rot(C[(x + 1) % 5], 1); + } + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] ^= D[x]; + } + } + + // rho and pi + std::array, 5> B; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + B[y][(2 * x + 3 * y) % 5] = rot(inner_state_integral[x][y], r[x][y]); + } + } + + // chi + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] = B[x][y] ^ ((~B[(x + 1) % 5][y]) & B[(x + 2) % 5][y]); + } + } + + // iota + inner_state_integral[0][0] = inner_state_integral[0][0] ^ RC_integral; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state[x + 5 * y] = value_type(inner_state_integral[x][y]); + } + } + return inner_state; +} + +template +auto test_keccak_round_inner(std::array inner_state, + std::array padded_message_chunk, + typename BlueprintFieldType::value_type RC, + std::array expected_result) { + constexpr std::size_t PublicInputColumns = 1; + constexpr std::size_t ConstantColumns = 30; + constexpr std::size_t SelectorColumns = 50; + nil::crypto3::zk::snark::plonk_table_description desc( + WitnessesAmount, PublicInputColumns, ConstantColumns, SelectorColumns); + using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; + using AssignmentType = nil::blueprint::assignment; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 1; + + using component_type = nil::blueprint::components::keccak_round; + using var = nil::crypto3::zk::snark::plonk_variable; + + std::vector public_input; + for (int i = 0; i < 25; ++i) { + public_input.push_back(inner_state[i]); + } + for (int i = 0; i < 17; ++i) { + public_input.push_back(padded_message_chunk[i]); + } + public_input.push_back(RC); + + std::array inner_state_vars; + std::array padded_message_chunk_vars; + var RC_var; + for (int i = 0; i < 25; ++i) { + inner_state_vars[i] = var(0, i, false, var::column_type::public_input); + } + for (int i = 0; i < 17; ++i) { + padded_message_chunk_vars[i] = var(0, i + 25, false, var::column_type::public_input); + } + RC_var = var(0, 42, false, var::column_type::public_input); + typename component_type::input_type instance_input = {inner_state_vars, padded_message_chunk_vars, RC_var}; + + auto result_check = [expected_result] + (AssignmentType &assignment, typename component_type::result_type &real_res) { + for (int i = 0; i < 25; ++i) { + // std::cout << expected_result[i] << ' ' << var_value(assignment, real_res.inner_state[i]) << std::endl; + assert(expected_result[i] == var_value(assignment, real_res.inner_state[i])); + } + }; + + if (!(WitnessesAmount == 15 || WitnessesAmount == 9)) { + BOOST_ASSERT_MSG(false, "Please add support for WitnessesAmount that you passed here!") ; + } + std::array witnesses; + for (std::uint32_t i = 0; i < WitnessesAmount; i++) { + witnesses[i] = i; + } + component_type component_instance = + component_type(witnesses, std::array{0}, std::array{0}, + xor_with_mes, last_round_call, last_perm_col); + + nil::crypto3::test_component( + boost::get(component_instance), desc, public_input, result_check, instance_input, + xor_with_mes ? nil::blueprint::connectedness_check_type::type::STRONG : nil::blueprint::connectedness_check_type::type::NONE, + xor_with_mes, last_round_call, last_perm_col); +} + +template +void test_keccak_round_not_random() { + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wimplicitly-unsigned-literal" + std::cout << "Test keccak round not random witnesses = " << WitnessesAmount << std::endl; + + using value_type = typename BlueprintFieldType::value_type; + std::array padded_message_chunk = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + + //call 1 + std::array inner_state = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + value_type RC = to_sparse(value_type(1)); + std::array expected_result = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); + + //call 2 + inner_state = expected_result; + RC = to_sparse(value_type(0x8082)); + expected_result = {32899, 17592186044416, 32768, 1, 17592186077184, 0, 35184374185984, 0, 35184372088832, 2097152, + 2, 512, 0, 514, 0, 268436480, 0, 1024, 268435456, 0, 1099511627776, 0, 1099511627780, 0, 4}; + for (int i = 0; i < 25; ++i) { + expected_result[i] = to_sparse(expected_result[i]); + } + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); + + //call 3 + inner_state = expected_result; + RC = to_sparse(value_type(0x800000000000808a)); + expected_result = {9236970796698600460, 4092250545529553158, 626057523912327425, 2306538108895626371, 1173341635645358336, + 1293304092434976, 1266393375296193026, 4612686711565066480, 3572814934320349200, 6918386853474468034, + 181437471070544, 17451689225912448, 14123431978033217603, 9612137362626578, 14131171423402623105, + 109225863298950544, 4469910934709993472, 291608492588557700, 4143342752895270928, 722898250671538564, + 9260980282462904729, 14339470011802853602, 37581858268459548, 4683770000893804961, 432358761588732518}; + for (int i = 0; i < 25; ++i) { + expected_result[i] = to_sparse(expected_result[i]); + } + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); + + //call 4 + inner_state = expected_result; + RC = to_sparse(value_type(0x8000000080008000)); + expected_result = {592319258926211651, 14940587067404002452, 6163873250186209783, 9133172271835791495, 13983250434949586883, + 10037245043040796116, 14625807227073111006, 9517639169617348992, 10802803781493464979, 1170967630360556906, + 4833658608200494670, 14411270558251773425, 10413092914151648788, 6324505867985343017, 15456637871614865798, + 15961727220218474669, 12219779720573097889, 13453918774002596887, 11249665490274026413, 16763947842887530834, + 9348458261315236693, 11269932799224724130, 5725669273397430228, 16793563075160212879, 7296601056617420707}; + for (int i = 0; i < 25; ++i) { + expected_result[i] = to_sparse(expected_result[i]); + } + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); + + //call 5 + inner_state = expected_result; + RC = to_sparse(value_type(0x808b)); + expected_result = {7638250137956199023, 17990125325728205105, 7906499215270811140, 10861036725959346835, 11195520138696188958, + 8358174899797462070, 8135952663530915624, 1143978644753002443, 15662404937588594201, 16535557756827863490, + 2821756897662528488, 12114361851460063201, 8845673958919045506, 13942698502943567537, 11656387723772272466, + 13322614738909770079, 2086432298574777049, 17543636310180418713, 1178364895537752846, 10832164025006223835, + 2030143342952750111, 12360607886846421348, 10479039689777663018, 16563260862735374768, 7279885679800479721}; + for (int i = 0; i < 25; ++i) { + expected_result[i] = to_sparse(expected_result[i]); + } + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); + + //call 6 + inner_state = expected_result; + RC = to_sparse(value_type(0x80000001)); + expected_result = {4891766363406797400, 15439122233753343804, 13823342620960621853, 11746433691194652646, 4017314498112237324, + 815207819430446539, 4967747420293129338, 3818588911347179217, 12982395987346120149, 8831006501622048216, + 3273200702990303769, 11925911941096385939, 11818410238024184151, 6855937196075990472, 6813782227838587502, + 5749709705375199086, 198532287281302992, 3986921420170929948, 2084732521627207926, 3955984847012879536, + 17540298648724239738, 14973796877054370773, 9207394463793105740, 13336242423054526618, 2223831538796077986}; + for (int i = 0; i < 25; ++i) { + expected_result[i] = to_sparse(expected_result[i]); + + } + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); + + // call 12 + inner_state = {8317352591327817587, 3347101423491892088, 13812284588227636790, 6672945709382097013, 14828349229463845968, + 17723229868831098326, 17401130588186959855, 16478565068789518457, 6492452647977334912, 11881899180789479218, + 16234817029224417455, 15219752985751753243, 7353976000907867650, 14188031598247865105, 15212311666827251122, + 11629652489896499652, 9435989968869629838, 3918343313233240239, 7628695717460153542, 12309003921403265649, + 345338872853187944, 12040357248728011954, 3576113714317971609, 6768822272106030756, 5816751084285246094}; + for (int i = 0; i < 25; ++i) { + inner_state[i] = to_sparse(inner_state[i]); + } + RC = to_sparse(value_type(0x8000000a)); + expected_result = {4650443609753860646, 9514407034135748299, 1325603491995511509, 5593257647634540243, 4316689694591141959, + 7056436588513633967, 3922974518795920519, 9361284003398536963, 12348570714043139801, 9410505497913992340, + 3614675582850630850, 6265106893083717952, 15812212848177019826, 5971330993120196744, 10998285978683370913, + 11166777828240479175, 7385351289822635840, 13873470266315090419, 6746683412968993695, 16204117485081817578, + 8627448812002334210, 5809981248579074143, 17919282347891220598, 3921880343594863541, 4864618403575458388}; + for (int i = 0; i < 25; ++i) { + expected_result[i] = to_sparse(expected_result[i]); + } + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); + + // call 24 + inner_state = {1021834983209491063, 271587765569717919, 4776059245685303294, 6929972956618907976, 15632760037079799599, + 335373011243745427, 4458191160998101431, 1054086133152375554, 2747216341432570284, 16716089959809353091, + 18427037088977732910, 8502882582543089190, 15262916258997799331, 1649067881221390653, 16305756012321036251, + 6396788823285448910, 16280709970257755463, 968684198036765735, 17453107891981340679, 14208300252181521039, + 8344225276973693085, 15466940913106191879, 9691424745450112199, 11326521537916162858, 14617465633943149704}; + for (int i = 0; i < 25; ++i) { + inner_state[i] = to_sparse(inner_state[i]); + } + RC = to_sparse(value_type(0x8000000080008008)); + expected_result = {17376452488221285863, 9571781953733019530, 15391093639620504046, 13624874521033984333, 10027350355371872343, + 18417369716475457492, 10448040663659726788, 10113917136857017974, 12479658147685402012, 3500241080921619556, + 16959053435453822517, 12224711289652453635, 9342009439668884831, 4879704952849025062, 140226327413610143, + 424854978622500449, 7259519967065370866, 7004910057750291985, 13293599522548616907, 10105770293752443592, + 10668034807192757780, 1747952066141424100, 1654286879329379778, 8500057116360352059, 16929593379567477321}; + + #pragma clang diagnostic pop + + for (int i = 0; i < 25; ++i) { + expected_result[i] = to_sparse(expected_result[i]); + } + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); +} + +template +void test_keccak_round_random() { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + std::cout << "Test keccak!" << std::endl; + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dis; + + std::array inner_state; + std::array padded_message_chunk; + value_type RC; + integral_type mask = (integral_type(1) << 64) - 1; + + for (int i = 0; i < 25; ++i) { + auto random_value = integral_type(dis(gen)) & mask; + inner_state[i] = to_sparse(value_type(random_value)); + } + for (int i = 0; i < 17; ++i) { + auto random_value = integral_type(dis(gen)) & mask; + padded_message_chunk[i] = to_sparse(value_type(random_value)); + } + auto random_value = integral_type(dis(gen)) & mask; + RC = to_sparse(value_type(random_value)); + + auto expected_result = sparse_round_function(inner_state, padded_message_chunk, RC); + + test_keccak_round_inner + (inner_state, padded_message_chunk, RC, expected_result); +} + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) + +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_pallas) { + using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; + test_keccak_round_not_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); +} + +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_pallas_diff_perm_cols) { + using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; + test_keccak_round_not_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); + test_keccak_round_random(); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/hashes/plonk/keccak_static.cpp b/crypto3/libs/blueprint/test/hashes/plonk/keccak_static.cpp new file mode 100644 index 0000000000..61e25e08b8 --- /dev/null +++ b/crypto3/libs/blueprint/test/hashes/plonk/keccak_static.cpp @@ -0,0 +1,575 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2023 Polina Chernyshova +// 2024 Valeh Farzaliyev +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE plonk_keccak_static_test + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +// #include +#include +// #include + +#include + +#include +#include + +#include + +#include "../../test_plonk_component.hpp" + +const int r[5][5] = {{0, 36, 3, 41, 18}, + {1, 44, 10, 45, 2}, + {62, 6, 43, 15, 61}, + {28, 55, 25, 21, 56}, + {27, 20, 39, 8, 14}}; + +template +std::size_t number_bits(typename BlueprintFieldType::value_type value) { + using integral_type = typename BlueprintFieldType::integral_type; + + integral_type integral_value = integral_type(value.data); + std::size_t result = 0; + while (integral_value > 0) { + integral_value >>= 1; + ++result; + } + return result; +} + +template +typename BlueprintFieldType::value_type to_sparse(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 1; + power = power << 3; + } + return value_type(result_integral); +} + +template +typename BlueprintFieldType::value_type to_le(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + for (int i = 0; i < 64; ++i) { + integral_type bit = value_integral & 1; + result_integral = (result_integral << 1) + bit; + value_integral = value_integral >> 1; + } + return value_type(result_integral); +} + +template +typename BlueprintFieldType::value_type to_le_bytes(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + for (int i = 0; i < 64; i += 8) { + integral_type bit = value_integral & 0xff; + result_integral = (result_integral << 8) + bit; + value_integral = value_integral >> 8; + } + return value_type(result_integral); +} +/* +template +typename BlueprintFieldType::value_type unpack(typename BlueprintFieldType::value_type value) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + integral_type value_integral = integral_type(value.data); + integral_type result_integral = 0; + integral_type power = 1; + while (value_integral >= 1) { + integral_type bit = value_integral & 1; + result_integral = result_integral + bit * power; + value_integral = value_integral >> 3; + power = power << 1; + } + return value_type(result_integral); +} +*/ + +template +std::vector + padding_function(std::vector message, std::size_t num_bits) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::vector result; + std::size_t shift = 64 * message.size() - num_bits; + + if (shift > 0) { + integral_type relay_value = integral_type(message[0].data); + for (int i = 1; i < message.size(); ++i) { + integral_type mask = (integral_type(1) << (64 - shift)) - 1; + integral_type left_part = integral_type(message[i].data.base() >> (64 - shift)); + integral_type right_part = integral_type(message[i].data) & mask; + result.push_back(value_type((relay_value << shift) + left_part)); + relay_value = right_part; + } + relay_value <<= shift; + relay_value += integral_type(1) << (shift - 8); + result.push_back(value_type(relay_value)); + } else { + for (int i = 0; i < message.size(); ++i) { + result.push_back(message[i]); + } + result.push_back(value_type(integral_type(1) << 56)); + } + + while (result.size() % 17 != 0) { + result.push_back(value_type(0)); + } + + for (int i = 0; i < result.size(); i++) { + result[i] = to_le_bytes(result[i]); + } + + return result; +} + +template +std::array + sparse_round_function(std::array inner_state, + std::array + padded_message_chunk, + typename BlueprintFieldType::value_type RC) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::array, 5> inner_state_integral; + std::array padded_message_chunk_integral; + integral_type RC_integral = integral_type(RC.data); + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] = integral_type(inner_state[x + 5 * y].data); + } + } + for (int i = 0; i < 17; ++i) { + padded_message_chunk_integral[i] = integral_type(padded_message_chunk[i].data); + } + + auto rot = [](integral_type x, const int s) { + return ((x << (3 * s)) | (x >> (192 - 3 * s))) & ((integral_type(1) << 192) - 1); + }; + + if (xor_with_mes) { + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + if (last_round_call && (x + 5 * y == 16)) { + continue; + } + if (x + 5 * y < 17) { + inner_state_integral[x][y] = inner_state_integral[x][y] ^ padded_message_chunk_integral[x + 5 * y]; + } + } + } + if (last_round_call) { + value_type last_round_const = to_sparse(value_type(0x8000000000000000)); + integral_type last_round_const_integral = integral_type(last_round_const.data); + inner_state_integral[1][3] = + inner_state_integral[1][3] ^ padded_message_chunk_integral[16] ^ last_round_const_integral; + } + } + + // theta + std::array C; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + C[x] ^= inner_state_integral[x][y]; + } + } + std::array D; + for (int x = 0; x < 5; ++x) { + D[x] = C[(x + 4) % 5] ^ rot(C[(x + 1) % 5], 1); + } + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] ^= D[x]; + } + } + + // rho and pi + std::array, 5> B; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + B[y][(2 * x + 3 * y) % 5] = rot(inner_state_integral[x][y], r[x][y]); + } + } + + // chi + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state_integral[x][y] = B[x][y] ^ ((~B[(x + 1) % 5][y]) & B[(x + 2) % 5][y]); + } + } + + // iota + inner_state_integral[0][0] = inner_state_integral[0][0] ^ RC_integral; + for (int x = 0; x < 5; ++x) { + for (int y = 0; y < 5; ++y) { + inner_state[x + 5 * y] = value_type(inner_state_integral[x][y]); + } + } + return inner_state; +} + +template +std::array + keccak_function(std::vector message, std::size_t num_bits) { + + using value_type = typename BlueprintFieldType::value_type; + + std::array hash; + std::vector padded_message = + padding_function(message, num_bits); + std::array inner_state; + const typename BlueprintFieldType::value_type round_constant[24] = {value_type(1), + value_type(0x8082), + value_type(0x800000000000808a), + value_type(0x8000000080008000), + value_type(0x808b), + value_type(0x80000001), + value_type(0x8000000080008081), + value_type(0x8000000000008009), + value_type(0x8a), + value_type(0x88), + value_type(0x80008009), + value_type(0x8000000a), + value_type(0x8000808b), + value_type(0x800000000000008b), + value_type(0x8000000000008089), + value_type(0x8000000000008003), + value_type(0x8000000000008002), + value_type(0x8000000000000080), + value_type(0x800a), + value_type(0x800000008000000a), + value_type(0x8000000080008081), + value_type(0x8000000000008080), + value_type(0x80000001), + value_type(0x8000000080008008)}; + + std::size_t i = 0, j; + std::array padded_message_chunk; + // Absorbing + std::size_t p17 = padded_message.size() / 17; + for (i = 0; i < p17; i++) { + for (j = 0; j < 17; j++) + padded_message_chunk[j] = to_sparse(padded_message[17 * i + j]); + for (j = 0; j < 24; j++) { + auto rc = to_sparse(round_constant[j]); + if (j == 0 && i == p17 - 1) { + inner_state = + sparse_round_function(inner_state, padded_message_chunk, rc); + } else if (j == 0) { + inner_state = + sparse_round_function(inner_state, padded_message_chunk, rc); + } else + inner_state = + sparse_round_function(inner_state, padded_message_chunk, rc); + } + } + + for (i = 0; i < 4; i++) { + hash[i] = unpack(inner_state[i]); + } + + return hash; +} + +template +auto test_keccak_inner(std::vector message, + std::array expected_result, std::size_t num_blocks, + std::size_t num_bits, bool range_check_input, std::size_t limit_permutation_column) { + constexpr std::size_t PublicInputColumns = 1; + constexpr std::size_t ConstantColumns = 3; + constexpr std::size_t SelectorColumns = 50; + nil::crypto3::zk::snark::plonk_table_description desc(WitnessesAmount, PublicInputColumns, + ConstantColumns, SelectorColumns); + using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; + using AssignmentType = nil::blueprint::assignment; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 1; + + using component_type = nil::blueprint::components::keccak_static; + using var = nil::crypto3::zk::snark::plonk_variable; + + std::vector public_input; + std::cout << "message:\n"; + for (int i = 0; i < num_blocks; ++i) { + public_input.push_back(message[i]); + std::cout << std::hex << message[i].data << std::dec << " "; + } + std::cout << std::endl; + + std::vector message_vars; + for (int i = 0; i < num_blocks; ++i) { + message_vars.push_back(var(0, i, false, var::column_type::public_input)); + } + typename component_type::input_type instance_input = {message_vars}; + + auto result_check = [expected_result](AssignmentType &assignment, typename component_type::result_type &real_res) { + assert(expected_result.size() == real_res.final_inner_state.size()); + for (int i = 0; i < expected_result.size(); ++i) { +// std::cout << "res:\n" +// << expected_result[i].data << "\n" +// << var_value(assignment, real_res.final_inner_state[i]).data << std::endl; + assert(expected_result[i] == var_value(assignment, real_res.final_inner_state[i])); + } + }; + + if (!(WitnessesAmount == 15 || WitnessesAmount == 9)) { + BOOST_ASSERT_MSG(false, "Please add support for WitnessesAmount that you passed here!"); + } + std::array witnesses; + for (std::uint32_t i = 0; i < WitnessesAmount; i++) { + witnesses[i] = i; + } + component_type component_instance = + component_type(witnesses, std::array {0}, std::array {0}, num_blocks, + num_bits, range_check_input, limit_permutation_column); + + nil::crypto3::test_component( + component_instance, desc, public_input, result_check, instance_input, + nil::blueprint::connectedness_check_type::type::NONE, + num_blocks, num_bits, range_check_input, limit_permutation_column); +} + +// works +template +void test_keccak_0(std::size_t num_bytes) { + std::cout << "Test keccak 0 " << num_bytes << " bytes" << std::endl; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::vector message; + std::size_t num_blocks = (num_bytes + 7) / 8; + std::size_t num_bits = num_bytes * 8; + + message.resize(num_blocks); + for (std::size_t i = 0; i < num_blocks; i++) { + message[i] = value_type(0); + } + const bool range_check_input = true; + const std::size_t limit_permutation_column = 7; + + std::array expected_result = keccak_function(message, num_bits); + + test_keccak_inner(message, expected_result, num_blocks, num_bits, + range_check_input, limit_permutation_column); +} + +template +void test_keccak_hello_world() { + std::cout << "Test keccak hello world!" << std::endl; + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::vector message = { + value_type(0x11111111111111), value_type(0x2222222222222222), value_type(0x3333333333333333), value_type(0x4444444444444444), value_type(0x5555555555555555), + value_type(0x6666666666666666), value_type(0x7777777777777777), value_type(0x8888888888888888), value_type(0x9999999999999999), value_type(0xaaaaaaaaaaaaaaaa), + value_type(0xbbbbbbbbbbbbbbbb), value_type(0xcccccccccccccccc), value_type(0xdddddddddddddddd), value_type(0xeeeeeeeeeeeeeeee), value_type(0xffffffffffffffff), + value_type(0xabababababababab), value_type(0x68656cffffffffff), value_type(0x6c6f20776f726c)}; + const std::size_t num_blocks = 18; + const std::size_t num_bits = 1144; + const bool range_check_input = false; + const std::size_t limit_permutation_column = 7; + + std::array expected_result = keccak_function(message, num_bits); + + test_keccak_inner(message, expected_result, num_blocks, num_bits, + range_check_input, limit_permutation_column); +} + +template +void test_keccak_random(std::size_t message_size = 1, bool random_mask_zero = true, bool range_check_input = true, + std::size_t limit_permutation_column = 7) { + using value_type = typename BlueprintFieldType::value_type; + using integral_type = typename BlueprintFieldType::integral_type; + + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution dis; + + integral_type mask = (integral_type(1) << 64) - 1; + std::size_t power_for_mask = 64; + if (random_mask_zero) { + power_for_mask = dis(gen) % 63 + 1; + } + integral_type mask_zero = (integral_type(1) << power_for_mask) - 1; + ; + value_type message_zero = + value_type((integral_type(dis(gen)) & mask_zero) | (integral_type(1) << (power_for_mask - 1))); + std::vector message; + message.push_back(message_zero); + for (std::size_t i = 1; i < message_size; i++) { + message.push_back(value_type(integral_type(dis(gen)) & mask)); + } + assert(message_size == message.size()); + std::size_t num_bits = 64 * (message_size - 1) + number_bits(message[0]); + std::size_t num_blocks = message_size; + + std::vector expected_result = keccak_function(message, num_bits); + + test_keccak_inner(message, expected_result, num_blocks, num_bits, + range_check_input, limit_permutation_column); +} + + +/* +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_pallas) { + using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; + + test_keccak_0(136); + test_keccak_0(1); + test_keccak_hello_world(); +} + +BOOST_AUTO_TEST_CASE(blueprint_plonk_hashes_keccak_round_pallas_15) { + using field_type = nil::crypto3::algebra::curves::vesta::scalar_field_type; + + test_keccak_0(136); + test_keccak_0(1); + test_keccak_hello_world(); +} +*/ + +BOOST_AUTO_TEST_SUITE(bn254_test_suite) + using field_type = nil::crypto3::algebra::curves::alt_bn128_254::base_field_type; +BOOST_AUTO_TEST_CASE(keccak_9_zero_1) { + test_keccak_0(1); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_2) { + test_keccak_0(2); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_3) { + test_keccak_0(3); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_4) { + test_keccak_0(4); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_5) { + test_keccak_0(5); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_6) { + test_keccak_0(6); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_7) { + test_keccak_0(7); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_8) { + test_keccak_0(8); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_9) { + test_keccak_0(9); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_10) { + test_keccak_0(10); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_11) { + test_keccak_0(11); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_12) { + test_keccak_0(12); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_13) { + test_keccak_0(13); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_14) { + test_keccak_0(14); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_15) { + test_keccak_0(15); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_16) { + test_keccak_0(16); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_17) { + test_keccak_0(17); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_18) { + test_keccak_0(18); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_19) { + test_keccak_0(19); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_20) { + test_keccak_0(20); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_21) { + test_keccak_0(21); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_22) { + test_keccak_0(22); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_135) { + test_keccak_0(135); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_136) { + test_keccak_0(136); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_137) { + test_keccak_0(137); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_272) { + test_keccak_0(272); +} +BOOST_AUTO_TEST_CASE(keccak_9_zero_547) { + test_keccak_0(547); +} +BOOST_AUTO_TEST_CASE(keccak_9_hello_world) { + test_keccak_hello_world(); +} +BOOST_AUTO_TEST_CASE(keccak_15_zero_1) { + test_keccak_0(1); +} +BOOST_AUTO_TEST_CASE(keccak_15_zero_136) { + test_keccak_0(136); +} +BOOST_AUTO_TEST_CASE(keccak_15_hello_world) { + test_keccak_hello_world(); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/hashes/plonk/poseidon.cpp b/crypto3/libs/blueprint/test/hashes/plonk/poseidon.cpp index 78f3cbda71..1f8a06ce52 100644 --- a/crypto3/libs/blueprint/test/hashes/plonk/poseidon.cpp +++ b/crypto3/libs/blueprint/test/hashes/plonk/poseidon.cpp @@ -126,7 +126,7 @@ void test_poseidon_specfic_data(){ input = {-1,-1,-1}; test_poseidon(input, calculate_expected_poseidon(input)); - typename FieldType::value_type threeFFF = 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular256; + typename FieldType::value_type threeFFF = 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint256; input = {threeFFF, threeFFF, threeFFF}; test_poseidon(input, calculate_expected_poseidon(input)); } diff --git a/crypto3/libs/blueprint/test/hashes/plonk/sha256.cpp b/crypto3/libs/blueprint/test/hashes/plonk/sha256.cpp index f7bf689558..b2dbdeefbb 100644 --- a/crypto3/libs/blueprint/test/hashes/plonk/sha256.cpp +++ b/crypto3/libs/blueprint/test/hashes/plonk/sha256.cpp @@ -96,6 +96,54 @@ void test_sha256(std::vector public_inp } } +template +void test_and_print(std::vector public_input, std::array expected_res){ + constexpr std::size_t WitnessColumns = 15; + constexpr std::size_t PublicInputColumns = 1; + constexpr std::size_t ConstantColumns = 35; + constexpr std::size_t SelectorColumns = 56; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 1; + + std::cout << "test_and_print" << std::endl; + zk::snark::plonk_table_description desc( + WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); + using ArithmetizationType = crypto3::zk::snark::plonk_constraint_system; + using AssignmentType = blueprint::assignment; + using var = crypto3::zk::snark::plonk_variable; + + using component_type = blueprint::components::sha256; + + std::array input_state_var = { + var(0, 0, false, var::column_type::public_input), var(0, 1, false, var::column_type::public_input), + var(0, 2, false, var::column_type::public_input), var(0, 3, false, var::column_type::public_input)}; + + component_type component_instance({0, 1, 2, 3, 4, 5, 6, 7, 8},{0},{}); + + typename component_type::input_type instance_input = {input_state_var}; + auto result_check = [expected_res](AssignmentType &assignment, + typename component_type::result_type &real_res) { + assert(var_value(assignment, real_res.output[0]) == expected_res[0] && var_value(assignment, real_res.output[1]) == expected_res[1]); + }; + + // check computation + auto output = component_type::calculate({public_input[0], public_input[1], public_input[2], public_input[3]}); + for (std::size_t i = 0; i < 2; i++) { + assert(expected_res[i] == output[i]); + } + + std::cout << "I am here!" << std::endl; + if constexpr (Stretched) { + } else { + std::cout << "Component not stretched" << std::endl; + crypto3::test_component_extended( + component_instance, desc, public_input, result_check, instance_input, + true, nil::blueprint::connectedness_check_type::type::NONE, + "sha256", false + ); + } +} + template void test_sha256_with_stretching(std::vector public_input, std::array expected_res) { @@ -113,35 +161,43 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_sha256_test0) { test_sha256_with_stretching( {s, s + 1, s + 2, s + 3}, - {0xf5790a69d0a3f69cb85d0b5a233405fb_cppui_modular255, 0xa47050b703fce590fd6585dd02b175f8_cppui_modular255}); + {0xf5790a69d0a3f69cb85d0b5a233405fb_big_uint255, 0xa47050b703fce590fd6585dd02b175f8_big_uint255}); test_sha256_with_stretching({ - 0xf5a5fd42d16a20302798ef6ed309979b_cppui_modular255, 0x43003d2320d9f0e8ea9831a92759fb4b_cppui_modular255, - 0xdb56114e00fdd4c1f85c892bf35ac9a8_cppui_modular255, 0x9289aaecb1ebd0a96cde606a748b5d71_cppui_modular255}, - {0x42b052541dce45557d83d34634a45a56_cppui_modular255, 0xd216d4375e5a9584f6445ce4e63324af_cppui_modular255}); + 0xf5a5fd42d16a20302798ef6ed309979b_big_uint255, 0x43003d2320d9f0e8ea9831a92759fb4b_big_uint255, + 0xdb56114e00fdd4c1f85c892bf35ac9a8_big_uint255, 0x9289aaecb1ebd0a96cde606a748b5d71_big_uint255}, + {0x42b052541dce45557d83d34634a45a56_big_uint255, 0xd216d4375e5a9584f6445ce4e63324af_big_uint255}); test_sha256_with_stretching({ - 0xc78009fdf07fc56a11f122370658a353_cppui_modular255, 0xaaa542ed63e44c4bc15ff4cd105ab33c_cppui_modular255, - 0x536d98837f2dd165a55d5eeae9148595_cppui_modular255, 0x4472d56f246df256bf3cae19352a123c_cppui_modular255}, - {0x69113382140943e8205d01244f562096_cppui_modular255, 0x4d5b92a1cb78bf9fe35ab0bbd2f1f8c2_cppui_modular255}); + 0xc78009fdf07fc56a11f122370658a353_big_uint255, 0xaaa542ed63e44c4bc15ff4cd105ab33c_big_uint255, + 0x536d98837f2dd165a55d5eeae9148595_big_uint255, 0x4472d56f246df256bf3cae19352a123c_big_uint255}, + {0x69113382140943e8205d01244f562096_big_uint255, 0x4d5b92a1cb78bf9fe35ab0bbd2f1f8c2_big_uint255}); test_sha256_with_stretching({ - 0x9efde052aa15429fae05bad4d0b1d7c6_cppui_modular255, 0x4da64d03d7a1854a588c2cb8430c0d30_cppui_modular255, - 0xd88ddfeed400a8755596b21942c1497e_cppui_modular255, 0x114c302e6118290f91e6772976041fa1_cppui_modular255}, - {0x60a7f836b0b42a41d74143c1ae465c25_cppui_modular255, 0xed04376190677ef7d589bd69bc4d79c8_cppui_modular255}); + 0x9efde052aa15429fae05bad4d0b1d7c6_big_uint255, 0x4da64d03d7a1854a588c2cb8430c0d30_big_uint255, + 0xd88ddfeed400a8755596b21942c1497e_big_uint255, 0x114c302e6118290f91e6772976041fa1_big_uint255}, + {0x60a7f836b0b42a41d74143c1ae465c25_big_uint255, 0xed04376190677ef7d589bd69bc4d79c8_big_uint255}); test_sha256_with_stretching({ - 0x87eb0ddba57e35f6d286673802a4af59_cppui_modular255, 0x75e22506c7cf4c64bb6be5ee11527f2c_cppui_modular255, - 0x26846476fd5fc54a5d43385167c95144_cppui_modular255, 0xf2643f533cc85bb9d16b782f8d7db193_cppui_modular255}, - {0x841510f2de07868d707940400d618c9e_cppui_modular255, 0xeeb91d1bd77177f196a238e272cb9bc3_cppui_modular255}); + 0x87eb0ddba57e35f6d286673802a4af59_big_uint255, 0x75e22506c7cf4c64bb6be5ee11527f2c_big_uint255, + 0x26846476fd5fc54a5d43385167c95144_big_uint255, 0xf2643f533cc85bb9d16b782f8d7db193_big_uint255}, + {0x841510f2de07868d707940400d618c9e_big_uint255, 0xeeb91d1bd77177f196a238e272cb9bc3_big_uint255}); test_sha256_with_stretching({ - 0x506d86582d252405b840018792cad2bf_cppui_modular255, 0x1259f1ef5aa5f887e13cb2f0094f51e1_cppui_modular255, - 0xffff0ad7e659772f9534c195c815efc4_cppui_modular255, 0x14ef1e1daed4404c06385d11192e92b_cppui_modular255}, - {0x88b8aa87277a142cbe3d58e7a85ced04_cppui_modular255, 0x4fec5eb57f1828caf06b5fae9c8c67fd_cppui_modular255}); + 0x506d86582d252405b840018792cad2bf_big_uint255, 0x1259f1ef5aa5f887e13cb2f0094f51e1_big_uint255, + 0xffff0ad7e659772f9534c195c815efc4_big_uint255, 0x14ef1e1daed4404c06385d11192e92b_big_uint255}, + {0x88b8aa87277a142cbe3d58e7a85ced04_big_uint255, 0x4fec5eb57f1828caf06b5fae9c8c67fd_big_uint255}); test_sha256_with_stretching( - {0xffffffffffffffff_cppui_modular64, 0xffffffffffffffff_cppui_modular64, 0xffffffffffffffff_cppui_modular64, 0xffffffffffffffff_cppui_modular64}, - {0xf58ac0f0665e3f1886f2eae35542987b_cppui_modular255, 0x9d61cc98e5d3ed2a5a9d8e3b9b7d9f2f_cppui_modular255}); + {0xffffffffffffffff_big_uint64, 0xffffffffffffffff_big_uint64, 0xffffffffffffffff_big_uint64, 0xffffffffffffffff_big_uint64}, + {0xf58ac0f0665e3f1886f2eae35542987b_big_uint255, 0x9d61cc98e5d3ed2a5a9d8e3b9b7d9f2f_big_uint255}); test_sha256_with_stretching( {1, 1, 1, 1}, - {0x8e1caeb2418a07d7d88f710dccd882d5_cppui_modular255, 0xb5772c88ae5ca4442ccc46c4518a3d3b_cppui_modular255}); + {0x8e1caeb2418a07d7d88f710dccd882d5_big_uint255, 0xb5772c88ae5ca4442ccc46c4518a3d3b_big_uint255}); } + +BOOST_AUTO_TEST_CASE(sha256_test1) { + using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; + + test_and_print( + {1, 1, 1, 1}, + {0x8e1caeb2418a07d7d88f710dccd882d5_big_uint255, 0xb5772c88ae5ca4442ccc46c4518a3d3b_big_uint255}); +} BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/hashes/plonk/sha512_process.cpp b/crypto3/libs/blueprint/test/hashes/plonk/sha512_process.cpp index 0e8e423a03..d163cc62db 100644 --- a/crypto3/libs/blueprint/test/hashes/plonk/sha512_process.cpp +++ b/crypto3/libs/blueprint/test/hashes/plonk/sha512_process.cpp @@ -64,14 +64,14 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_sha512_process) { using component_type = blueprint::components::sha512_process; typename BlueprintFieldType::value_type s = typename BlueprintFieldType::value_type(2).pow(59); - std::array public_input = {0x6a09e667f3bcc908_cppui_modular64, - 0xbb67ae8584caa73b_cppui_modular64, - 0x3c6ef372fe94f82b_cppui_modular64, - 0xa54ff53a5f1d36f1_cppui_modular64, - 0x510e527fade682d1_cppui_modular64, - 0x9b05688c2b3e6c1f_cppui_modular64, - 0x1f83d9abfb41bd6b_cppui_modular64, - 0x5be0cd19137e2179_cppui_modular64, + std::array public_input = {0x6a09e667f3bcc908_big_uint64, + 0xbb67ae8584caa73b_big_uint64, + 0x3c6ef372fe94f82b_big_uint64, + 0xa54ff53a5f1d36f1_big_uint64, + 0x510e527fade682d1_big_uint64, + 0x9b05688c2b3e6c1f_big_uint64, + 0x1f83d9abfb41bd6b_big_uint64, + 0x5be0cd19137e2179_big_uint64, s - 5, s + 5, s - 6, @@ -95,26 +95,26 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_sha512_process) { var(0, 6, false, var::column_type::public_input), var(0, 7, false, var::column_type::public_input)}; std::array round_constant = { - 0x428a2f98d728ae22_cppui_modular64, 0x7137449123ef65cd_cppui_modular64, 0xb5c0fbcfec4d3b2f_cppui_modular64, 0xe9b5dba58189dbbc_cppui_modular64, - 0x3956c25bf348b538_cppui_modular64, 0x59f111f1b605d019_cppui_modular64, 0x923f82a4af194f9b_cppui_modular64, 0xab1c5ed5da6d8118_cppui_modular64, - 0xd807aa98a3030242_cppui_modular64, 0x12835b0145706fbe_cppui_modular64, 0x243185be4ee4b28c_cppui_modular64, 0x550c7dc3d5ffb4e2_cppui_modular64, - 0x72be5d74f27b896f_cppui_modular64, 0x80deb1fe3b1696b1_cppui_modular64, 0x9bdc06a725c71235_cppui_modular64, 0xc19bf174cf692694_cppui_modular64, - 0xe49b69c19ef14ad2_cppui_modular64, 0xefbe4786384f25e3_cppui_modular64, 0x0fc19dc68b8cd5b5_cppui_modular64, 0x240ca1cc77ac9c65_cppui_modular64, - 0x2de92c6f592b0275_cppui_modular64, 0x4a7484aa6ea6e483_cppui_modular64, 0x5cb0a9dcbd41fbd4_cppui_modular64, 0x76f988da831153b5_cppui_modular64, - 0x983e5152ee66dfab_cppui_modular64, 0xa831c66d2db43210_cppui_modular64, 0xb00327c898fb213f_cppui_modular64, 0xbf597fc7beef0ee4_cppui_modular64, - 0xc6e00bf33da88fc2_cppui_modular64, 0xd5a79147930aa725_cppui_modular64, 0x06ca6351e003826f_cppui_modular64, 0x142929670a0e6e70_cppui_modular64, - 0x27b70a8546d22ffc_cppui_modular64, 0x2e1b21385c26c926_cppui_modular64, 0x4d2c6dfc5ac42aed_cppui_modular64, 0x53380d139d95b3df_cppui_modular64, - 0x650a73548baf63de_cppui_modular64, 0x766a0abb3c77b2a8_cppui_modular64, 0x81c2c92e47edaee6_cppui_modular64, 0x92722c851482353b_cppui_modular64, - 0xa2bfe8a14cf10364_cppui_modular64, 0xa81a664bbc423001_cppui_modular64, 0xc24b8b70d0f89791_cppui_modular64, 0xc76c51a30654be30_cppui_modular64, - 0xd192e819d6ef5218_cppui_modular64, 0xd69906245565a910_cppui_modular64, 0xf40e35855771202a_cppui_modular64, 0x106aa07032bbd1b8_cppui_modular64, - 0x19a4c116b8d2d0c8_cppui_modular64, 0x1e376c085141ab53_cppui_modular64, 0x2748774cdf8eeb99_cppui_modular64, 0x34b0bcb5e19b48a8_cppui_modular64, - 0x391c0cb3c5c95a63_cppui_modular64, 0x4ed8aa4ae3418acb_cppui_modular64, 0x5b9cca4f7763e373_cppui_modular64, 0x682e6ff3d6b2b8a3_cppui_modular64, - 0x748f82ee5defb2fc_cppui_modular64, 0x78a5636f43172f60_cppui_modular64, 0x84c87814a1f0ab72_cppui_modular64, 0x8cc702081a6439ec_cppui_modular64, - 0x90befffa23631e28_cppui_modular64, 0xa4506cebde82bde9_cppui_modular64, 0xbef9a3f7b2c67915_cppui_modular64, 0xc67178f2e372532b_cppui_modular64, - 0xca273eceea26619c_cppui_modular64, 0xd186b8c721c0c207_cppui_modular64, 0xeada7dd6cde0eb1e_cppui_modular64, 0xf57d4f7fee6ed178_cppui_modular64, - 0x06f067aa72176fba_cppui_modular64, 0x0a637dc5a2c898a6_cppui_modular64, 0x113f9804bef90dae_cppui_modular64, 0x1b710b35131c471b_cppui_modular64, - 0x28db77f523047d84_cppui_modular64, 0x32caab7b40c72493_cppui_modular64, 0x3c9ebe0a15c9bebc_cppui_modular64, 0x431d67c49c100d4c_cppui_modular64, - 0x4cc5d4becb3e42b6_cppui_modular64, 0x597f299cfc657e2a_cppui_modular64, 0x5fcb6fab3ad6faec_cppui_modular64, 0x6c44198c4a475817_cppui_modular64}; + 0x428a2f98d728ae22_big_uint64, 0x7137449123ef65cd_big_uint64, 0xb5c0fbcfec4d3b2f_big_uint64, 0xe9b5dba58189dbbc_big_uint64, + 0x3956c25bf348b538_big_uint64, 0x59f111f1b605d019_big_uint64, 0x923f82a4af194f9b_big_uint64, 0xab1c5ed5da6d8118_big_uint64, + 0xd807aa98a3030242_big_uint64, 0x12835b0145706fbe_big_uint64, 0x243185be4ee4b28c_big_uint64, 0x550c7dc3d5ffb4e2_big_uint64, + 0x72be5d74f27b896f_big_uint64, 0x80deb1fe3b1696b1_big_uint64, 0x9bdc06a725c71235_big_uint64, 0xc19bf174cf692694_big_uint64, + 0xe49b69c19ef14ad2_big_uint64, 0xefbe4786384f25e3_big_uint64, 0x0fc19dc68b8cd5b5_big_uint64, 0x240ca1cc77ac9c65_big_uint64, + 0x2de92c6f592b0275_big_uint64, 0x4a7484aa6ea6e483_big_uint64, 0x5cb0a9dcbd41fbd4_big_uint64, 0x76f988da831153b5_big_uint64, + 0x983e5152ee66dfab_big_uint64, 0xa831c66d2db43210_big_uint64, 0xb00327c898fb213f_big_uint64, 0xbf597fc7beef0ee4_big_uint64, + 0xc6e00bf33da88fc2_big_uint64, 0xd5a79147930aa725_big_uint64, 0x06ca6351e003826f_big_uint64, 0x142929670a0e6e70_big_uint64, + 0x27b70a8546d22ffc_big_uint64, 0x2e1b21385c26c926_big_uint64, 0x4d2c6dfc5ac42aed_big_uint64, 0x53380d139d95b3df_big_uint64, + 0x650a73548baf63de_big_uint64, 0x766a0abb3c77b2a8_big_uint64, 0x81c2c92e47edaee6_big_uint64, 0x92722c851482353b_big_uint64, + 0xa2bfe8a14cf10364_big_uint64, 0xa81a664bbc423001_big_uint64, 0xc24b8b70d0f89791_big_uint64, 0xc76c51a30654be30_big_uint64, + 0xd192e819d6ef5218_big_uint64, 0xd69906245565a910_big_uint64, 0xf40e35855771202a_big_uint64, 0x106aa07032bbd1b8_big_uint64, + 0x19a4c116b8d2d0c8_big_uint64, 0x1e376c085141ab53_big_uint64, 0x2748774cdf8eeb99_big_uint64, 0x34b0bcb5e19b48a8_big_uint64, + 0x391c0cb3c5c95a63_big_uint64, 0x4ed8aa4ae3418acb_big_uint64, 0x5b9cca4f7763e373_big_uint64, 0x682e6ff3d6b2b8a3_big_uint64, + 0x748f82ee5defb2fc_big_uint64, 0x78a5636f43172f60_big_uint64, 0x84c87814a1f0ab72_big_uint64, 0x8cc702081a6439ec_big_uint64, + 0x90befffa23631e28_big_uint64, 0xa4506cebde82bde9_big_uint64, 0xbef9a3f7b2c67915_big_uint64, 0xc67178f2e372532b_big_uint64, + 0xca273eceea26619c_big_uint64, 0xd186b8c721c0c207_big_uint64, 0xeada7dd6cde0eb1e_big_uint64, 0xf57d4f7fee6ed178_big_uint64, + 0x06f067aa72176fba_big_uint64, 0x0a637dc5a2c898a6_big_uint64, 0x113f9804bef90dae_big_uint64, 0x1b710b35131c471b_big_uint64, + 0x28db77f523047d84_big_uint64, 0x32caab7b40c72493_big_uint64, 0x3c9ebe0a15c9bebc_big_uint64, 0x431d67c49c100d4c_big_uint64, + 0x4cc5d4becb3e42b6_big_uint64, 0x597f299cfc657e2a_big_uint64, 0x5fcb6fab3ad6faec_big_uint64, 0x6c44198c4a475817_big_uint64}; std::array input_words_var; for (int i = 0; i < 16; i++) { diff --git a/crypto3/libs/blueprint/test/merkle_tree_components.cpp b/crypto3/libs/blueprint/test/merkle_tree_components.cpp deleted file mode 100644 index fd3d1c5d54..0000000000 --- a/crypto3/libs/blueprint/test/merkle_tree_components.cpp +++ /dev/null @@ -1,439 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// Copyright (c) 2021 Ilias Khairullin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE merkle_tree_components_test - -#include - -#include - -// TODO: fix sha256 component -// #include -#include - -// TODO: fix update component -// #include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::zk; -using namespace nil::crypto3::algebra; - -// template -// void test_merkle_tree_check_update_component() { -// /* prepare test */ -// const std::size_t digest_len = Hash::get_digest_len(); -// -// const std::size_t tree_depth = 16; -// std::vector prev_path(tree_depth); -// -// std::vector prev_load_hash(digest_len); -// std::generate(prev_load_hash.begin(), prev_load_hash.end(), [&]() { return std::rand() % 2; }); -// std::vector prev_store_hash(digest_len); -// std::generate(prev_store_hash.begin(), prev_store_hash.end(), [&]() { return std::rand() % 2; }); -// -// std::vector loaded_leaf = prev_load_hash; -// std::vector stored_leaf = prev_store_hash; -// -// std::vector address_bits; -// -// std::size_t address = 0; -// for (long level = tree_depth - 1; level >= 0; --level) { -// const bool computed_is_right = (std::rand() % 2); -// address |= (computed_is_right ? 1ul << (tree_depth - 1 - level) : 0); -// address_bits.push_back(computed_is_right); -// std::vector other(digest_len); -// std::generate(other.begin(), other.end(), [&]() { return std::rand() % 2; }); -// -// std::vector load_block = prev_load_hash; -// load_block.insert(computed_is_right ? load_block.begin() : load_block.end(), other.begin(), other.end()); -// std::vector store_block = prev_store_hash; -// store_block.insert(computed_is_right ? store_block.begin() : store_block.end(), other.begin(), other.end()); -// -// std::vector load_h = Hash::get_hash(load_block); -// std::vector store_h = Hash::get_hash(store_block); -// -// prev_path[level] = other; -// -// prev_load_hash = load_h; -// prev_store_hash = store_h; -// } -// -// std::vector load_root = prev_load_hash; -// std::vector store_root = prev_store_hash; -// -// /* execute the test */ -// components::blueprint bp; -// components::blueprint_variable_vector address_bits_va; -// address_bits_va.allocate(bp, tree_depth); -// components::digest_variable prev_leaf_digest(bp, digest_len); -// components::digest_variable prev_root_digest(bp, digest_len); -// components::merkle_authentication_path_variable prev_path_var(bp, tree_depth); -// components::digest_variable next_leaf_digest(bp, digest_len); -// components::digest_variable next_root_digest(bp, digest_len); -// components::merkle_authentication_path_variable next_path_var(bp, tree_depth); -// components::merkle_tree_check_update_components mls( -// bp, tree_depth, address_bits_va, prev_leaf_digest, prev_root_digest, prev_path_var, next_leaf_digest, -// next_root_digest, next_path_var, components::blueprint_variable(0)); -// -// prev_path_var.generate_gates(); -// mls.generate_gates(); -// -// address_bits_va.fill_with_bits(bp, address_bits); -// BOOST_REQUIRE(address_bits_va.get_field_element_from_bits(bp) == address); -// prev_leaf_digest.generate_assignments(loaded_leaf); -// prev_path_var.generate_assignments(address, prev_path); -// next_leaf_digest.generate_assignments(stored_leaf); -// address_bits_va.fill_with_bits(bp, address_bits); -// mls.generate_assignments(); -// -// /* make sure that update check will check for the right things */ -// prev_leaf_digest.generate_assignments(loaded_leaf); -// next_leaf_digest.generate_assignments(stored_leaf); -// prev_root_digest.generate_assignments(load_root); -// next_root_digest.generate_assignments(store_root); -// address_bits_va.fill_with_bits(bp, address_bits); -// BOOST_REQUIRE(bp.is_satisfied()); -// -// const std::size_t num_constraints = bp.num_constraints(); -// const std::size_t expected_constraints = -// components::merkle_tree_check_update_components::expected_constraints(tree_depth); -// BOOST_REQUIRE(num_constraints == expected_constraints); -// } - -// template -// void test_merkle_tree_check_read_component() { -// /* prepare test */ -// const std::size_t digest_len = Hash::get_digest_len(); -// const std::size_t tree_depth = 16; -// std::vector path(tree_depth); -// -// std::vector prev_hash(digest_len); -// std::generate(prev_hash.begin(), prev_hash.end(), [&]() { return std::rand() % 2; }); -// std::vector leaf = prev_hash; -// -// std::vector address_bits; -// -// std::size_t address = 0; -// for (long level = tree_depth - 1; level >= 0; --level) { -// const bool computed_is_right = (std::rand() % 2); -// address |= (computed_is_right ? 1ul << (tree_depth - 1 - level) : 0); -// address_bits.push_back(computed_is_right); -// std::vector other(digest_len); -// std::generate(other.begin(), other.end(), [&]() { return std::rand() % 2; }); -// -// std::vector block = prev_hash; -// block.insert(computed_is_right ? block.begin() : block.end(), other.begin(), other.end()); -// std::vector h = Hash::get_hash(block); -// -// path[level] = other; -// -// prev_hash = h; -// } -// std::vector root = prev_hash; -// -// /* execute test */ -// components::blueprint bp; -// components::blueprint_variable_vector address_bits_va; -// address_bits_va.allocate(bp, tree_depth); -// components::digest_variable leaf_digest(bp, digest_len); -// components::digest_variable root_digest(bp, digest_len); -// components::merkle_authentication_path_variable path_var(bp, tree_depth); -// components::merkle_tree_check_read_component ml(bp, tree_depth, address_bits_va, leaf_digest, -// root_digest, path_var, -// components::blueprint_variable(0)); -// -// path_var.generate_gates(); -// ml.generate_gates(); -// -// address_bits_va.fill_with_bits(bp, address_bits); -// BOOST_REQUIRE(address_bits_va.get_field_element_from_bits(bp) == address); -// leaf_digest.generate_assignments(leaf); -// path_var.generate_assignments(address, path); -// ml.generate_assignments(); -// -// /* make sure that read checker didn't accidentally overwrite anything */ -// address_bits_va.fill_with_bits(bp, address_bits); -// leaf_digest.generate_assignments(leaf); -// root_digest.generate_assignments(root); -// BOOST_REQUIRE(bp.is_satisfied()); -// -// const std::size_t num_constraints = bp.num_constraints(); -// const std::size_t expected_constraints = -// components::merkle_tree_check_read_component::expected_constraints(tree_depth); -// BOOST_REQUIRE(num_constraints == expected_constraints); -// } - -// template -// void test_all_merkle_tree_components() { -// typedef typename CurveType::scalar_field_type scalar_field_type; -// -// // for now all CRH components are knapsack CRH's; can be easily extended -// // later to more expressive selector types. -// using crh_with_field_out_component = components::knapsack_crh_with_field_out_component; -// using crh_with_bit_out_component = components::knapsack_crh_with_bit_out_component; -// -// test_merkle_tree_check_read_component(); -// test_merkle_tree_check_read_component>(); -// -// test_merkle_tree_check_update_component(); -// test_merkle_tree_check_update_component>(); -// } - -template -std::vector calculate_pedersen_via_component(const std::vector &in_bits) { - using hash_component = components::pedersen; - using field_type = typename hash_component::field_type; - - components::blueprint bp_bits; - components::block_variable in_block(bp_bits, in_bits.size()); - in_block.generate_assignments(in_bits); - - hash_component hash_comp_bits(bp_bits, in_block); - hash_comp_bits.generate_assignments(); - hash_comp_bits.generate_gates(); - return hash_comp_bits.result.get_digest(); -} - -void test_jubjub_pedersen_merkle_tree_container_check_validate_component() { - using curve_type = curves::jubjub; - using bp_generator_hash_type = hashes::sha2<256>; - using hash_params = hashes::find_group_hash_default_params; - using hash_component = components::pedersen; - using field_type = typename hash_component::field_type; - constexpr std::size_t arity = 2; - using merkle_proof_component = components::merkle_proof; - using merkle_validate_component = components::merkle_proof_validate; - - /* prepare test */ - const std::size_t digest_len = hash_component::get_digest_len(); - const std::size_t tree_depth = 2; - const std::size_t leafs_number = nil::crypto3::detail::pow(arity, tree_depth); - - // TODO: remove copy from array to vector - std::vector> leafs; - std::vector> leafs_v; - for (std::size_t i = 0; i < leafs_number; ++i) { - std::array leaf; - std::generate(leaf.begin(), leaf.end(), [&]() { return std::rand() % 2; }); - leafs.emplace_back(leaf); - } - - std::size_t leaf_idx = 0; - typename merkle_proof_component::merkle_tree_container tree(leafs); - typename merkle_proof_component::merkle_proof_container proof(tree, leaf_idx); - BOOST_CHECK(proof.validate(leafs[leaf_idx])); - BOOST_CHECK(!proof.validate(leafs[(leaf_idx + 1) % leafs_number])); - for (std::size_t i = 0; i < leafs_number; ++i) { - leafs_v.emplace_back( - static_cast>(nil::crypto3::hash(leafs[i]))); - } - - /* execute test */ - components::blueprint bp; - components::blueprint_variable_vector address_bits_va; - address_bits_va.allocate(bp, tree_depth); - components::digest_variable leaf_digest(bp, digest_len); - components::digest_variable root_digest(bp, digest_len); - merkle_proof_component path_var(bp, tree_depth); - merkle_validate_component ml(bp, tree_depth, address_bits_va, leaf_digest, root_digest, path_var, - components::blueprint_variable(0)); - - path_var.generate_gates(); - ml.generate_gates(); - - leaf_digest.generate_assignments(leafs_v[leaf_idx]); - path_var.generate_assignments(proof); - address_bits_va.fill_with_bits_of_ulong(bp, path_var.address); - BOOST_REQUIRE(address_bits_va.get_field_element_from_bits(bp) == path_var.address); - ml.generate_assignments(); - - /* make sure that read checker didn't accidentally overwrite anything */ - address_bits_va.fill_with_bits_of_ulong(bp, path_var.address); - leaf_digest.generate_assignments(leafs_v[leaf_idx]); - /// Very important step, hidden error could appear without it. merkle_validate_component use - /// bit_vector_copy_component to copy computed root into root_digest, so without this step internal check of the - /// computed step will always be positive - root_digest.generate_assignments(merkle_proof_component::root(proof)); - BOOST_REQUIRE(bp.is_satisfied()); - - auto root_wrong = merkle_proof_component::root(proof); - root_wrong[0] = !root_wrong[0]; - // false negative test with wrong root - root_digest.generate_assignments(root_wrong); - BOOST_REQUIRE(!bp.is_satisfied()); - - // reset blueprint in the correct state - root_digest.generate_assignments(merkle_proof_component::root(proof)); - BOOST_REQUIRE(bp.is_satisfied()); - // false negative test with wrong leaf - auto leaf_digest_wrong = leafs_v[leaf_idx]; - leaf_digest_wrong[0] = !leaf_digest_wrong[0]; - leaf_digest.generate_assignments(leaf_digest_wrong); - BOOST_REQUIRE(!bp.is_satisfied()); - - // reset blueprint in the correct state - leaf_digest.generate_assignments(leafs_v[leaf_idx]); - BOOST_REQUIRE(bp.is_satisfied()); - // false negative test with wrong path - typename merkle_proof_component::merkle_proof_container proof_wrong(tree, (leaf_idx + 1) % leafs_number); - path_var.generate_assignments(proof_wrong); - address_bits_va.fill_with_bits_of_ulong(bp, path_var.address); - BOOST_REQUIRE(!bp.is_satisfied()); -} - -void test_jubjub_pedersen_merkle_tree_check_validate_component() { - using curve_type = curves::jubjub; - using bp_generator_hash_type = hashes::sha2<256>; - using hash_params = hashes::find_group_hash_default_params; - using hash_component = components::pedersen; - using field_type = typename hash_component::field_type; - constexpr std::size_t arity = 2; - using merkle_proof_component = components::merkle_proof; - using merkle_validate_component = components::merkle_proof_validate; - - /* prepare test */ - const std::size_t digest_len = hash_component::get_digest_len(); - const std::size_t tree_depth = 16; - std::vector path(tree_depth); - - std::vector prev_hash(digest_len); - std::generate(prev_hash.begin(), prev_hash.end(), [&]() { return std::rand() % 2; }); - std::vector leaf = prev_hash; - auto leaf_wrong = leaf; - leaf_wrong[0] = !leaf_wrong[0]; - - std::vector address_bits; - - std::size_t address = 0; - for (long level = tree_depth - 1; level >= 0; --level) { - const bool computed_is_right = (std::rand() % 2); - address |= (computed_is_right ? 1ul << (tree_depth - 1 - level) : 0); - address_bits.push_back(computed_is_right); - std::vector other(digest_len); - std::generate(other.begin(), other.end(), [&]() { return std::rand() % 2; }); - - std::vector block = prev_hash; - block.insert(computed_is_right ? block.begin() : block.end(), other.begin(), other.end()); - std::vector h = calculate_pedersen_via_component(block); - - path[level] = other; - - prev_hash = h; - } - std::vector root = prev_hash; - auto root_wrong = root; - root_wrong[0] = !root_wrong[0]; - auto path_wrong = path; - path_wrong[0][0] = !path_wrong[0][0]; - auto address_bits_wrong = address_bits; - address_bits_wrong[0] = !address_bits_wrong[0]; - - /* execute test */ - components::blueprint bp; - components::blueprint_variable_vector address_bits_va; - address_bits_va.allocate(bp, tree_depth); - components::digest_variable leaf_digest(bp, digest_len); - components::digest_variable root_digest(bp, digest_len); - merkle_proof_component path_var(bp, tree_depth); - merkle_validate_component ml(bp, tree_depth, address_bits_va, leaf_digest, root_digest, path_var, - components::blueprint_variable(0)); - - path_var.generate_gates(); - ml.generate_gates(); - - address_bits_va.fill_with_bits(bp, address_bits); - BOOST_REQUIRE(address_bits_va.field_element_from_bits(bp) == address); - leaf_digest.generate_assignments(leaf); - path_var.generate_assignments(address, path); - ml.generate_assignments(); - - /* make sure that read checker didn't accidentally overwrite anything */ - address_bits_va.fill_with_bits(bp, address_bits); - leaf_digest.generate_assignments(leaf); - /// Very important step, hidden error could appear without it. merkle_validate_component use - /// bit_vector_copy_component to copy computed root into root_digest, so without this step internal check of the - /// computed step will always be positive - root_digest.generate_assignments(root); - BOOST_REQUIRE(bp.is_satisfied()); - - // false negative test with wrong root - root_digest.generate_assignments(root_wrong); - BOOST_REQUIRE(!bp.is_satisfied()); - - // reset blueprint in the correct state - root_digest.generate_assignments(root); - BOOST_REQUIRE(bp.is_satisfied()); - // false negative test with wrong leaf - leaf_digest.generate_assignments(leaf_wrong); - BOOST_REQUIRE(!bp.is_satisfied()); - - // reset blueprint in the correct state - leaf_digest.generate_assignments(leaf); - BOOST_REQUIRE(bp.is_satisfied()); - // false negative test with wrong path - path_var.generate_assignments(address, path_wrong); - BOOST_REQUIRE(!bp.is_satisfied()); - - // reset blueprint in the correct state - path_var.generate_assignments(address, path); - BOOST_REQUIRE(bp.is_satisfied()); - // false negative test with wrong address - address_bits_va.fill_with_bits(bp, address_bits_wrong); - BOOST_REQUIRE(!bp.is_satisfied()); - - // const std::size_t num_constraints = bp.num_constraints(); - // const std::size_t expected_constraints = - // components::merkle_tree_check_read_component::expected_constraints(tree_depth); - // BOOST_REQUIRE(num_constraints == expected_constraints); -} - -BOOST_AUTO_TEST_SUITE(merkle_tree_components_test_suite) - -// BOOST_AUTO_TEST_CASE(merkle_tree_components_bls12_381_test) { -// -// test_all_merkle_tree_components>(); -// } -// -// BOOST_AUTO_TEST_CASE(merkle_tree_components_mnt4_test) { -// -// test_all_merkle_tree_components>(); -// } -// -// BOOST_AUTO_TEST_CASE(merkle_tree_components_mnt6_test) { -// -// test_all_merkle_tree_components>(); -// } - -BOOST_AUTO_TEST_CASE(merkle_tree_components_jubjub_pedersen_test) { - - test_jubjub_pedersen_merkle_tree_container_check_validate_component(); - // test_jubjub_pedersen_merkle_tree_check_validate_component(); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/mock/mocked_components.cpp b/crypto3/libs/blueprint/test/mock/mocked_components.cpp index 9433761060..3493bb64d9 100644 --- a/crypto3/libs/blueprint/test/mock/mocked_components.cpp +++ b/crypto3/libs/blueprint/test/mock/mocked_components.cpp @@ -197,10 +197,10 @@ BOOST_AUTO_TEST_SUITE(blueprint_plonk_mock_test_suite) for (std::size_t i = 0; i < 4 * random_tests_amount; i++) { \ cpp_int_type a = dist(seed_seq) * (sign_dist(seed_seq) ? 1 : -1); \ cpp_int_type b = dist(seed_seq) * (sign_dist(seed_seq) ? 1 : -1); \ - uint_type a_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(a)).backend()); \ - uint_type b_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(b)).backend()); \ + uint_type a_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(a))); \ + uint_type b_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(b))); \ cpp_int_type result = OP(a, b); \ - uint_type result_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(result)).backend()); \ + uint_type result_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(result))); \ TEST_NAME( \ a >= 0 ? 0 : 1, a_modular, \ b >= 0 ? 0 : 1, b_modular, \ @@ -278,7 +278,7 @@ void test_small_signed_absolute() { boost::random::uniform_int_distribution sign_dist(0, 1); for (std::size_t i = 0; i < 4 * random_tests_amount; i++) { cpp_int_type a = dist(seed_seq) * (sign_dist(seed_seq) ? 1 : -1); - uint_type a_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(a)).backend()); + uint_type a_modular = typename uint_type::backend_type(cpp_uint_type(boost::multiprecision::abs(a))); test_small_signed_abs( a >= 0 ? 0 : 1, a_modular, 0, a_modular); @@ -330,8 +330,7 @@ void test_big_signed_absolute() { 256u, 256u, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked>>; using cpp_uint_type = boost::multiprecision::number>; - using uint_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<256u>>; + using uint_type = nil::crypto3::multiprecision::big_uint<256u>; boost::random::mt19937 seed_seq; boost::random::uniform_int_distribution @@ -343,8 +342,8 @@ void test_big_signed_absolute() { cpp_int_type a = dist(seed_seq) * (sign_dist(seed_seq) ? 1 : -1); cpp_int_type a_first = (a & top_mask) >> 128, a_second = a & bottom_mask; - uint_type a_first_modular = typename uint_type::backend_type(cpp_uint_type(a_first).backend()); - uint_type a_second_modular = typename uint_type::backend_type(cpp_uint_type(a_second).backend()); + uint_type a_first_modular = typename uint_type::backend_type(cpp_uint_type(a_first)); + uint_type a_second_modular = typename uint_type::backend_type(cpp_uint_type(a_second)); test_big_signed_abs( a >= 0 ? 0 : 1, a_first_modular, a_second_modular, 0, a_first_modular, a_second_modular); @@ -623,12 +622,12 @@ OP_UNSIGNED_BIG_BOOL_TEST_FUNC_GEN(test_big_unsigned_greater_than_eq, test_big_u cpp_int_type b_top = (b & top_mask) >> 128; \ cpp_int_type b_bottom = b & bottom_mask; \ \ - uint_type expected_first_modular = typename uint_type::backend_type(cpp_uint_type(expected_first).backend()); \ - uint_type expected_second_modular = typename uint_type::backend_type(cpp_uint_type(expected_second).backend()); \ - uint_type a_top_modular = typename uint_type::backend_type(cpp_uint_type(a_top).backend()); \ - uint_type a_bottom_modular = typename uint_type::backend_type(cpp_uint_type(a_bottom).backend()); \ - uint_type b_top_modular = typename uint_type::backend_type(cpp_uint_type(b_top).backend()); \ - uint_type b_bottom_modular = typename uint_type::backend_type(cpp_uint_type(b_bottom).backend()); \ + uint_type expected_first_modular = typename uint_type::backend_type(cpp_uint_type(expected_first)); \ + uint_type expected_second_modular = typename uint_type::backend_type(cpp_uint_type(expected_second)); \ + uint_type a_top_modular = typename uint_type::backend_type(cpp_uint_type(a_top)); \ + uint_type a_bottom_modular = typename uint_type::backend_type(cpp_uint_type(a_bottom)); \ + uint_type b_top_modular = typename uint_type::backend_type(cpp_uint_type(b_top)); \ + uint_type b_bottom_modular = typename uint_type::backend_type(cpp_uint_type(b_bottom)); \ \ TEST_NAME(a.sign() >= 0 ? 0 : 1, a_top_modular, a_bottom_modular, \ b.sign() >= 0 ? 0 : 1, b_top_modular, b_bottom_modular, \ diff --git a/crypto3/libs/blueprint/test/non_native/plonk/add_mul_zkllvm_compatible.cpp b/crypto3/libs/blueprint/test/non_native/plonk/add_mul_zkllvm_compatible.cpp index 8b7c5f1e93..22bc8dff13 100644 --- a/crypto3/libs/blueprint/test/non_native/plonk/add_mul_zkllvm_compatible.cpp +++ b/crypto3/libs/blueprint/test/non_native/plonk/add_mul_zkllvm_compatible.cpp @@ -439,7 +439,7 @@ BOOST_AUTO_TEST_CASE(blueprint_non_native_mul_1) { typename CurveType::base_field_type::integral_type scal_integral; typename CurveType::base_field_type::value_type scal_rand; typename CurveType::base_field_type::value_type scal_max = - 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_cppui_modular256; + 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_big_uint256; typename CurveType::base_field_type::value_type scal_zero = 0; typename Ed25519Type::template g1_type diff --git a/crypto3/libs/blueprint/test/non_native/plonk/scalar_non_native_range.cpp b/crypto3/libs/blueprint/test/non_native/plonk/scalar_non_native_range.cpp index 9ec1de162f..7e858613bc 100644 --- a/crypto3/libs/blueprint/test/non_native/plonk/scalar_non_native_range.cpp +++ b/crypto3/libs/blueprint/test/non_native/plonk/scalar_non_native_range.cpp @@ -96,8 +96,8 @@ BOOST_AUTO_TEST_CASE(blueprint_non_native_scalar_range_test1) { using field_type = typename crypto3::algebra::curves::pallas::base_field_type; typename field_type::integral_type ed25519_scalar_modulus = - 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_cppui_modular255; - typename field_type::value_type ones = 0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular255; + 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_big_uint255; + typename field_type::value_type ones = 0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint255; test_scalar_non_native_range({typename field_type::value_type(ed25519_scalar_modulus - 1)}, true); @@ -131,7 +131,7 @@ BOOST_AUTO_TEST_CASE(blueprint_non_native_scalar_range_test_must_fail) { rand.seed(seed_seq); typename field_type::integral_type ed25519_scalar_modulus = - 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_cppui_modular255; + 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed_big_uint255; typename field_type::extended_integral_type pow_bits = 1u; pow_bits <<= field_type::modulus_bits; typename field_type::integral_type ed25519_scalar_overage = pow_bits - field_type::extended_integral_type( diff --git a/crypto3/libs/blueprint/test/test_plonk_component.hpp b/crypto3/libs/blueprint/test/test_plonk_component.hpp index acbafff2ee..bf01579f35 100644 --- a/crypto3/libs/blueprint/test/test_plonk_component.hpp +++ b/crypto3/libs/blueprint/test/test_plonk_component.hpp @@ -62,11 +62,13 @@ #include #include - #include #include #include +using namespace nil; +using namespace nil::crypto3::algebra; + namespace nil { namespace blueprint { namespace components { @@ -95,8 +97,8 @@ namespace nil { ){ using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; using AssignmentType = nil::crypto3::zk::snark::plonk_table>; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; { std::ofstream otable; @@ -105,7 +107,7 @@ namespace nil { std::vector cv; cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); otable.write(reinterpret_cast(cv.data()), cv.size()); otable.close(); } @@ -117,7 +119,7 @@ namespace nil { std::vector cv; cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); ocircuit.write(reinterpret_cast(cv.data()), cv.size()); ocircuit.close(); } @@ -151,8 +153,8 @@ namespace nil { using ColumnType = nil::crypto3::zk::snark::plonk_column; using AssignmentTableType = nil::crypto3::zk::snark::plonk_table; using TableDescriptionType = nil::crypto3::zk::snark::plonk_table_description; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; ConstraintSystemType constraint_system; { @@ -360,6 +362,12 @@ namespace nil { // Stretched components do not have a manifest, as they are dynamically generated. if constexpr (!blueprint::components::is_component_stretcher< BlueprintFieldType, ComponentType>::value) { + if(bp.num_gates() + bp.num_lookup_gates() != + component_type::get_gate_manifest(component_instance.witness_amount(), + component_static_info_args...).get_gates_amount()){ + std::cout << bp.num_gates() + bp.num_lookup_gates() << " != " << component_type::get_gate_manifest(component_instance.witness_amount(), + component_static_info_args...).get_gates_amount() << std::endl; + } BOOST_ASSERT_MSG(bp.num_gates() + bp.num_lookup_gates() == component_type::get_gate_manifest(component_instance.witness_amount(), component_static_info_args...).get_gates_amount(), @@ -367,6 +375,8 @@ namespace nil { } if (start_row + component_instance.rows_amount >= public_input.size()) { + if ( assignment.rows_amount() - start_row != component_instance.rows_amount ) + std::cout << assignment.rows_amount() << " != " << component_instance.rows_amount << std::endl; BOOST_ASSERT_MSG(assignment.rows_amount() - start_row == component_instance.rows_amount, "Component rows amount does not match actual rows amount."); // Stretched components do not have a manifest, as they are dynamically generated. @@ -412,12 +422,13 @@ namespace nil { // blueprint::detail::export_connectedness_zones( // zones, assignment, instance_input.all_vars(), start_row, rows_after_batching - start_row, std::cout); - // BOOST_ASSERT_MSG(is_connected, - // "Component disconnected! See comment above this assert for a way to output a visual representation of the connectedness graph."); + BOOST_ASSERT_MSG(is_connected, + "Component disconnected! See comment above this assert for a way to output a visual representation of the connectedness graph."); } desc.usable_rows_amount = assignment.rows_amount(); if constexpr (nil::blueprint::use_lookups()) { + std::cout << "Pack lookup tables horizontal" << std::endl; desc.usable_rows_amount = zk::snark::pack_lookup_tables_horizontal( bp.get_reserved_indices(), bp.get_reserved_tables(), @@ -428,6 +439,7 @@ namespace nil { ); } desc.rows_amount = zk::snark::basic_padding(assignment); + std::cout << "Rows amount = " << desc.rows_amount << std::endl; #ifdef BLUEPRINT_PLONK_PROFILING_ENABLED std::cout << "Usable rows: " << desc.usable_rows_amount << std::endl; @@ -524,6 +536,7 @@ namespace nil { bool check_real_placeholder_proof, ComponentStaticInfoArgs... component_static_info_args ) { + std::cout << "Prepare compomemt" << std::endl; auto [desc, bp, assignments] = prepare_component< ComponentType, BlueprintFieldType, Hash, Lambda, PublicInputContainerType, FunctorResultCheck, PrivateInput, @@ -537,6 +550,7 @@ namespace nil { ); if( output_path != "" ){ + std::cout << "Print to file" << std::endl; print_bp_circuit_and_table_to_file( output_path, bp, desc, assignments ); diff --git a/crypto3/libs/blueprint/test/verifiers/flexible/linear_check.cpp b/crypto3/libs/blueprint/test/verifiers/flexible/linear_check.cpp index 8b45ddd102..48642b7300 100644 --- a/crypto3/libs/blueprint/test/verifiers/flexible/linear_check.cpp +++ b/crypto3/libs/blueprint/test/verifiers/flexible/linear_check.cpp @@ -277,22 +277,22 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_dfri_linear_check_test_pallas_m_13_k_3) { constexpr std::size_t m = 13; constexpr std::size_t k = 3; constexpr std::size_t n = 7; - value_type theta = 0x17f3269be06ff6c76417c00b03b877502ec58a8292c09a689aad0de2e3e6a209_cppui_modular255; - value_type x = 0x1109ad4c5183f69681888cf1ac9c73233ae4e3bd5ca9ad8e34b81c1a11794627_cppui_modular255; + value_type theta = 0x17f3269be06ff6c76417c00b03b877502ec58a8292c09a689aad0de2e3e6a209_big_uint255; + value_type x = 0x1109ad4c5183f69681888cf1ac9c73233ae4e3bd5ca9ad8e34b81c1a11794627_big_uint255; std::array y = { - 0x109c08b6434fdac4656b1b3b9c169ea0bb3763c54a0f226544f2e7cbb07699d3_cppui_modular255, - 0x29807c67ad0e77f1cb7df52eaacda8c8aeb7323998949e1e6dc96ace49d7ffdb_cppui_modular255, - 0x1e3b7cc212edf2735ccafdfe4ed9cb66692b11ad423a6980084a7fc3fd3c174c_cppui_modular255, - 0x2597470a24d0a2cbbbc6d526352a994e8238fc24baeb88e8101812c861ac984b_cppui_modular255, - 0x1ce5a2c4753bad5ebe0a964361f32d6407d1b2b3424371d7202059510025a368_cppui_modular255, - 0x171f218f4a75c541784cc7754b0ce73200eeb37529f6d49df003e453ca9243b4_cppui_modular255, - 0xbd0de19ad7279aef43773c595c3d8b8cfd9c7469e3192e86f1f9abf3adb3ad2_cppui_modular255 + 0x109c08b6434fdac4656b1b3b9c169ea0bb3763c54a0f226544f2e7cbb07699d3_big_uint255, + 0x29807c67ad0e77f1cb7df52eaacda8c8aeb7323998949e1e6dc96ace49d7ffdb_big_uint255, + 0x1e3b7cc212edf2735ccafdfe4ed9cb66692b11ad423a6980084a7fc3fd3c174c_big_uint255, + 0x2597470a24d0a2cbbbc6d526352a994e8238fc24baeb88e8101812c861ac984b_big_uint255, + 0x1ce5a2c4753bad5ebe0a964361f32d6407d1b2b3424371d7202059510025a368_big_uint255, + 0x171f218f4a75c541784cc7754b0ce73200eeb37529f6d49df003e453ca9243b4_big_uint255, + 0xbd0de19ad7279aef43773c595c3d8b8cfd9c7469e3192e86f1f9abf3adb3ad2_big_uint255 }; std::array xi = { - 0x3c4b5c29d2934183497c35596d868ddb8e0005397f67d2f26c91188ada9bd1c3_cppui_modular255, - 0x21ec40745cf822c5d422dc11f80a07845c4cb6ba727804c56a340f52bcfc6ace_cppui_modular255, - 0x15f359e7d0a1a4b1eff1de3a593890a472f721a83b8d7145bd1a4e830bc72298_cppui_modular255 + 0x3c4b5c29d2934183497c35596d868ddb8e0005397f67d2f26c91188ada9bd1c3_big_uint255, + 0x21ec40745cf822c5d422dc11f80a07845c4cb6ba727804c56a340f52bcfc6ace_big_uint255, + 0x15f359e7d0a1a4b1eff1de3a593890a472f721a83b8d7145bd1a4e830bc72298_big_uint255 }; @@ -315,19 +315,19 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_dfri_linear_check_test_pallas_m_13_k_3) { std::vector> z(n, std::vector()); std::array, n> z_ij; - z_ij[0][0] = 0x20d25fb8470fd8fabc58145cb26ad8742c475753ae5ca5d8f3c1b44684ce4f0_cppui_modular255; - z_ij[1][0] = 0x33c5922b908b7477233c66f1794147c57e3efd2bb2521669380e8178fac300c1_cppui_modular255; - z_ij[2][0] = 0xd4c90ee14439e9196e9d185b8ca15dda515922c05ca40df31cf7f770e6aa49d_cppui_modular255; - z_ij[3][0] = 0x228cee3a770a9e2f04a8fa727b31864730a2183747a1ef6d6a2b6b0946d099a4_cppui_modular255; - z_ij[3][1] = 0x1784c045ae5ab50022bc3f598811196d5c195a66ec67b8d0aa43c45d321288bb_cppui_modular255; - z_ij[3][2] = 0x23df4e8277cb5df68d32d783b1887bfb179f15717571db08c5579894e8c0ea42_cppui_modular255; - z_ij[4][0] = 0x3806fca6f22cd78d49d22c125e67d81f6fd336faed8e8d16303309e4f9165b90_cppui_modular255; - z_ij[4][1] = 0x3e5190c6669cce05fb6b3d63156f59f100cea0ff9730894e6133407213b8fc4b_cppui_modular255; - z_ij[4][2] = 0x175df5a226a4870b5b45d0b050471dee42c433c8ecc42cab79829156528711bf_cppui_modular255; - z_ij[5][0] = 0x2e8f89d9ffb7318286019c2ff4b8eba03fa812c97243a3e636b158c25e858c70_cppui_modular255; - z_ij[5][2] = 0x29c647fa69040c8b336a6bd63fc97477441b147f4c98e6d9632ba3290f434b8d_cppui_modular255; - z_ij[6][0] = 0x2a6a12ac90b00570b8b7dcb18540363ee0d7069aab9ab74bc30e92b8c3534cf1_cppui_modular255; - z_ij[6][2] = 0xf244b829bb26edce0aed5a36c70c09c43e6e612cd9b328bbc6518f427fe5988_cppui_modular255; + z_ij[0][0] = 0x20d25fb8470fd8fabc58145cb26ad8742c475753ae5ca5d8f3c1b44684ce4f0_big_uint255; + z_ij[1][0] = 0x33c5922b908b7477233c66f1794147c57e3efd2bb2521669380e8178fac300c1_big_uint255; + z_ij[2][0] = 0xd4c90ee14439e9196e9d185b8ca15dda515922c05ca40df31cf7f770e6aa49d_big_uint255; + z_ij[3][0] = 0x228cee3a770a9e2f04a8fa727b31864730a2183747a1ef6d6a2b6b0946d099a4_big_uint255; + z_ij[3][1] = 0x1784c045ae5ab50022bc3f598811196d5c195a66ec67b8d0aa43c45d321288bb_big_uint255; + z_ij[3][2] = 0x23df4e8277cb5df68d32d783b1887bfb179f15717571db08c5579894e8c0ea42_big_uint255; + z_ij[4][0] = 0x3806fca6f22cd78d49d22c125e67d81f6fd336faed8e8d16303309e4f9165b90_big_uint255; + z_ij[4][1] = 0x3e5190c6669cce05fb6b3d63156f59f100cea0ff9730894e6133407213b8fc4b_big_uint255; + z_ij[4][2] = 0x175df5a226a4870b5b45d0b050471dee42c433c8ecc42cab79829156528711bf_big_uint255; + z_ij[5][0] = 0x2e8f89d9ffb7318286019c2ff4b8eba03fa812c97243a3e636b158c25e858c70_big_uint255; + z_ij[5][2] = 0x29c647fa69040c8b336a6bd63fc97477441b147f4c98e6d9632ba3290f434b8d_big_uint255; + z_ij[6][0] = 0x2a6a12ac90b00570b8b7dcb18540363ee0d7069aab9ab74bc30e92b8c3534cf1_big_uint255; + z_ij[6][2] = 0xf244b829bb26edce0aed5a36c70c09c43e6e612cd9b328bbc6518f427fe5988_big_uint255; for(std::size_t i=0; i(public_inputs, expected_res, m, eval_map); test_dfri_linear_check(public_inputs, expected_res, m, eval_map); diff --git a/crypto3/libs/blueprint/test/verifiers/flexible/poseidon.cpp b/crypto3/libs/blueprint/test/verifiers/flexible/poseidon.cpp index d534271cf5..55949743c4 100644 --- a/crypto3/libs/blueprint/test/verifiers/flexible/poseidon.cpp +++ b/crypto3/libs/blueprint/test/verifiers/flexible/poseidon.cpp @@ -88,9 +88,7 @@ void test_poseidon(std::vector public_i nil::crypto3::test_component_extended( component_instance, desc, public_input, result_check, instance_input, - true, nil::blueprint::connectedness_check_type::type::STRONG, "flexible_poseidon", true, - 2046 - ); + true, nil::blueprint::connectedness_check_type::type::STRONG, "flexible_poseidon", true); } template @@ -122,7 +120,7 @@ void test_poseidon_specfic_data(){ input = {-1,-1,-1}; test_poseidon(input, calculate_expected_poseidon(input)); - typename FieldType::value_type threeFFF = 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular256; + typename FieldType::value_type threeFFF = 0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_big_uint256; input = {threeFFF, threeFFF, threeFFF}; test_poseidon(input, calculate_expected_poseidon(input)); } diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/base_field.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/base_field.cpp deleted file mode 100644 index cc7f92edea..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/base_field.cpp +++ /dev/null @@ -1,320 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Alisa Cherniaeva -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_base_field_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include -//#include - -#include -#include -#include -#include -#include -#include -#include - -#include "test_plonk_component.hpp" -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_base_field_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_base_field_test_suite) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 25; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - using var_ec_point = typename zk::components::var_ec_point; - constexpr std::size_t Lambda = 40; - constexpr static const std::size_t batch_size = 1; - constexpr static const std::size_t lr_rounds = 1; - constexpr static const std::size_t comm_size = 1; - // constexpr static const std::size_t n_2 = ceil(log2(n)); - // constexpr static const std::size_t padding = (1 << n_2) - n; - - constexpr static std::size_t public_input_size = 1; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 1; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = zk::components::base_field; - - using commitment_type = - typename zk::components::kimchi_commitment_type; - - using opening_proof_type = - typename zk::components::kimchi_opening_proof_base; - using var = zk::snark::plonk_variable; - - using binding = typename zk::components::binding; - - using verifier_index_type = zk::components::kimchi_verifier_index_base; - - using proof_type = zk::components::kimchi_proof_base; - - using kimchi_constants = zk::components::kimchi_inner_constants; - - // zk::snark::pickles_proof kimchi_proof = test_proof(); - - std::vector public_input; - std::vector shifted_var; - std::vector unshifted_var; - for (std::size_t i = 0; i < 14; i++) { - curve_type::template g1_type::value_type shifted = - algebra::random_element>(); - - public_input.push_back(shifted.X); - public_input.push_back(shifted.Y); - - shifted_var.push_back({var(0, i * 4, false, var::column_type::public_input), - var(0, i * 4 + 1, false, var::column_type::public_input)}); - - curve_type::template g1_type::value_type unshifted = - algebra::random_element>(); - - public_input.push_back(unshifted.X); - public_input.push_back(unshifted.Y); - - unshifted_var.push_back({var(0, i * 4 + 2, false, var::column_type::public_input), - var(0, i * 4 + 3, false, var::column_type::public_input)}); - } - std::array witness_comm; - for (std::size_t i = 0; i < witness_columns; i++) { - witness_comm[i] = {{unshifted_var[0]}}; - } - - std::array sigma_comm; - for (std::size_t i = 0; i < perm_size; i++) { - witness_comm[i] = {{unshifted_var[1]}}; - } - std::array - coefficient_comm; - for (std::size_t i = 0; i < coefficient_comm.size(); i++) { - coefficient_comm[i] = {{unshifted_var[2]}}; - } - std::vector oracles_poly_comm = { - {{unshifted_var[3]}}}; // to-do: get in the component from oracles - commitment_type lookup_runtime_comm = {{unshifted_var[4]}}; - commitment_type table_comm = {{unshifted_var[5]}}; - std::vector lookup_sorted_comm {{{unshifted_var[6]}}}; - std::vector lookup_selectors_comm = {{{unshifted_var[7]}}}; - std::vector selectors_comm = {{{unshifted_var[8]}}}; - commitment_type lookup_agg_comm = {{unshifted_var[9]}}; - commitment_type z_comm = {{unshifted_var[10]}}; - commitment_type t_comm = {{unshifted_var[11]}}; - commitment_type generic_comm = {{unshifted_var[12]}}; - commitment_type psm_comm = {{unshifted_var[13]}}; - - curve_type::template g1_type::value_type L = - algebra::random_element>(); - - public_input.push_back(L.X); - public_input.push_back(L.Y); - - var_ec_point L_var = {var(0, 56, false, var::column_type::public_input), - var(0, 57, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type R = - algebra::random_element>(); - - public_input.push_back(R.X); - public_input.push_back(R.Y); - - var_ec_point R_var = {var(0, 58, false, var::column_type::public_input), - var(0, 59, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type delta = - algebra::random_element>(); - - public_input.push_back(delta.X); - public_input.push_back(delta.Y); - - var_ec_point delta_var = {var(0, 60, false, var::column_type::public_input), - var(0, 61, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type G = - algebra::random_element>(); - - public_input.push_back(G.X); - public_input.push_back(G.Y); - - var_ec_point G_var = {var(0, 62, false, var::column_type::public_input), - var(0, 63, false, var::column_type::public_input)}; - - opening_proof_type o_var = {{L_var}, {R_var}, delta_var, G_var}; - - std::array scalars; - - std::array scalars_var; - - for (std::size_t i = 0; i < kimchi_constants::f_comm_msm_size; i++) { - scalars[i] = algebra::random_element(); - public_input.push_back(scalars[i]); - scalars_var[i] = var(0, 74 + i, false, var::column_type::public_input); - } - - curve_type::template g1_type::value_type lagrange_bases = - algebra::random_element>(); - - public_input.push_back(lagrange_bases.X); - public_input.push_back(lagrange_bases.Y); - - var_ec_point lagrange_bases_var = {var(0, 65, false, var::column_type::public_input), - var(0, 66, false, var::column_type::public_input)}; - - typename curve_type::base_field_type::value_type Pub = algebra::random_element(); - public_input.push_back(Pub); - var Pub_var = var(0, 67, false, var::column_type::public_input); - - typename curve_type::base_field_type::value_type zeta_to_srs_len = - algebra::random_element(); - public_input.push_back(zeta_to_srs_len); - var zeta_to_srs_len_var = var(0, 68, false, var::column_type::public_input); - - typename curve_type::base_field_type::value_type zeta_to_domain_size_minus_1 = - algebra::random_element(); - public_input.push_back(zeta_to_domain_size_minus_1); - var zeta_to_domain_size_minus_1_var = var(0, 69, false, var::column_type::public_input); - - curve_type::template g1_type::value_type H = - algebra::random_element>(); - - public_input.push_back(H.X); - public_input.push_back(H.Y); - - var_ec_point H_var = {var(0, 70, false, var::column_type::public_input), - var(0, 71, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type PI_G = - algebra::random_element>(); - - public_input.push_back(PI_G.X); - public_input.push_back(PI_G.Y); - - var_ec_point PI_G_var = {var(0, 72, false, var::column_type::public_input), - var(0, 73, false, var::column_type::public_input)}; - - constexpr static const std::size_t bases_size = kimchi_constants::final_msm_size(batch_size); - std::array batch_scalars; - - std::array batch_scalars_var; - - for (std::size_t i = 0; i < bases_size; i++) { - batch_scalars[i] = algebra::random_element(); - public_input.push_back(batch_scalars[i]); - batch_scalars_var[i] = var(0, 74 + i, false, var::column_type::public_input); - } - curve_type::base_field_type::value_type cip = algebra::random_element(); - - public_input.push_back(cip); - - var cip_var = var(0, 74 + bases_size, false, var::column_type::public_input); - - typename proof_type::commitments_type commitments = { - {witness_comm}, lookup_runtime_comm, table_comm, {lookup_sorted_comm}, lookup_agg_comm, z_comm, - t_comm, {oracles_poly_comm[0]} // to-do: get in the component from oracles - }; - /*zk::components::kimchi_transcript_fq transcript;*/ - proof_type proof_var = {/*transcript, */ commitments, o_var, {scalars_var}}; - verifier_index_type verifier_index = { - H_var, - {PI_G_var}, - {lagrange_bases_var}, - {{sigma_comm}, {coefficient_comm}, generic_comm, psm_comm, {selectors_comm}, {lookup_selectors_comm}, - psm_comm, // runtime_tables_selector - {psm_comm}, // table - psm_comm, // complete_add - psm_comm, // var_base_mmul - psm_comm, // endo_mul - psm_comm, // endo_mul_scalar - }}; - - typename binding::fr_data fr_data = { - batch_scalars_var, {cip_var}, {Pub_var}, zeta_to_srs_len_var, zeta_to_domain_size_minus_1_var}; - typename binding::fq_data fq_data; - - typename component_type::params_type params = {{proof_var}, verifier_index, fr_data, fq_data}; - - auto result_check = [](AssignmentType &assignment, component_type::result_type &real_res) {}; - - test_component( - params, public_input, result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/basic_verifier.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/basic_verifier.cpp deleted file mode 100644 index 5499a95e9b..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/basic_verifier.cpp +++ /dev/null @@ -1,464 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_oracles_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -#include "test_plonk_component.hpp" -#include "proof_data.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_oracles_test_suite) - -template -void prepare_proof(zk::snark::pickles_proof &original_proof, - zk::components::kimchi_proof_scalar &circuit_proof, - std::vector &public_input) { - using var = zk::snark::plonk_variable; - - // eval_proofs - for (std::size_t point_idx = 0; point_idx < 2; point_idx++) { - // w - for (std::size_t i = 0; i < KimchiParamsType::witness_columns; i++) { - public_input.push_back(original_proof.evals[point_idx].w[i]); - circuit_proof.proof_evals[point_idx].w[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // z - public_input.push_back(original_proof.evals[point_idx].z); - circuit_proof.proof_evals[point_idx].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - // s - for (std::size_t i = 0; i < KimchiParamsType::permut_size - 1; i++) { - public_input.push_back(original_proof.evals[point_idx].s[i]); - circuit_proof.proof_evals[point_idx].s[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // lookup - if (KimchiParamsType::use_lookup) { - // TODO - } - // generic_selector - public_input.push_back(original_proof.evals[point_idx].generic_selector); - circuit_proof.proof_evals[point_idx].generic_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - // poseidon_selector - public_input.push_back(original_proof.evals[point_idx].poseidon_selector); - circuit_proof.proof_evals[point_idx].poseidon_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - // ft_eval - public_input.push_back(algebra::random_element()); - circuit_proof.ft_eval = var(0, public_input.size() - 1, false, var::column_type::public_input); -} - -BOOST_AUTO_TEST_CASE(blueprint_verifiers_kimchi_basic_verifier_test) { - - // PARAMS - using curve_type = algebra::curves::vesta; - using ScalarFieldType = typename curve_type::scalar_field_type; - using BaseFieldType = typename curve_type::base_field_type; - - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var_scalar = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static std::size_t batch_size = 2; - - constexpr static const std::size_t prev_chal_size = 1; - - constexpr static const std::size_t domain_size = 128; - - constexpr std::size_t WitnessColumnsScalar = 15; - constexpr std::size_t PublicInputColumnsScalar = 1; - constexpr std::size_t ConstantColumnsScalar = 1; - constexpr std::size_t SelectorColumnsScalar = 30; - - using ArithmetizationParamsScalar = - zk::snark::plonk_arithmetization_params; - using ArithmetizationTypeScalar = zk::snark::plonk_constraint_system; - using AssignmentTypeScalar = blueprint::assignment; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - using kimchi_constants = zk::components::kimchi_inner_constants; - - // COMMON DATA - constexpr static const std::size_t bases_size = kimchi_constants::final_msm_size(batch_size); - std::array batch_scalars; - std::array cips_shifted; - std::array pi; - ScalarFieldType::value_type zeta = 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - std::array zeta_to_srs_len; - ScalarFieldType::value_type zeta_to_domain_size_minus_1 = zeta.pow(domain_size) - 1; - - for (std::size_t i = 0; i < bases_size; i++) { - batch_scalars[i] = algebra::random_element(); - } - - for (std::size_t i = 0; i < batch_size; i++) { - cips_shifted[i] = algebra::random_element(); - zeta_to_srs_len[i] = zeta.pow(srs_len); - } - - // SCALAR FIELD - - using fq_output_type_scalar = - typename zk::components::binding::fq_sponge_output; - - using fr_data_type_scalar = typename zk::components::binding::fr_data; - - using fq_data_type_scalar = typename zk::components::binding::fq_data; - - zk::components::kimchi_verifier_index_scalar verifier_index_scalar; - typename ScalarFieldType::value_type omega = - 0x1B1A85952300603BBF8DD3068424B64608658ACBB72CA7D2BB9694ADFA504418_cppui_modular256; - verifier_index_scalar.domain_size = domain_size; - verifier_index_scalar.omega = var_scalar(0, 0, false, var_scalar::column_type::public_input); - - using verify_scalar_component = - zk::components::verify_scalar; - - typename ScalarFieldType::value_type joint_combiner = 0; - typename ScalarFieldType::value_type beta = 0; - typename ScalarFieldType::value_type gamma = 0; - typename ScalarFieldType::value_type alpha = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename ScalarFieldType::value_type fq_digest = - 0x01D4E77CCD66755BDDFDBB6E4E8D8D17A6708B9CB56654D12070BD7BF4A5B33B_cppui_modular256; - - std::vector public_input_scalar = {omega}; - - std::array, batch_size> proofs; - - std::array fq_outputs; - - for (std::size_t batch_id = 0; batch_id < batch_size; batch_id++) { - zk::snark::pickles_proof kimchi_proof = test_proof(); - - zk::components::kimchi_proof_scalar proof; - - prepare_proof(kimchi_proof, proof, - public_input_scalar); - - fq_output_type_scalar fq_output; - std::array challenges; - for (std::size_t j = 0; j < eval_rounds; j++) { - public_input_scalar.emplace_back(10); - challenges[j] = var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - } - fq_output.challenges = challenges; - - // joint_combiner - public_input_scalar.push_back(algebra::random_element()); - fq_output.joint_combiner = - var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - // beta - public_input_scalar.push_back(algebra::random_element()); - fq_output.beta = var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - // gamma - public_input_scalar.push_back(algebra::random_element()); - fq_output.gamma = var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - // alpha - public_input_scalar.push_back(alpha); - fq_output.alpha = var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - // zeta - public_input_scalar.push_back(zeta); - fq_output.zeta = var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - // fq_digest - public_input_scalar.push_back(fq_digest); - fq_output.fq_digest = - var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - // c - public_input_scalar.emplace_back(250); - fq_output.c = var_scalar(0, public_input_scalar.size() - 1, false, var_scalar::column_type::public_input); - - fq_outputs[batch_id] = fq_output; - } - - fr_data_type_scalar fr_data_public; - fq_data_type_scalar fq_data_public; - - typename verify_scalar_component::params_type params_scalar = {fr_data_public, fq_data_public, - verifier_index_scalar, proofs, fq_outputs}; - - auto result_check_scalar = [](AssignmentTypeScalar &assignment, verify_scalar_component::result_type &real_res) {}; - - test_component( - params_scalar, public_input_scalar, result_check_scalar); - - ////////////////////////////////////////////////// - // BASE FIELD - ////////////////////////////////////////////////// - constexpr std::size_t WitnessColumnsBase = 15; - constexpr std::size_t PublicInputColumnsBase = 1; - constexpr std::size_t ConstantColumnsBase = 1; - constexpr std::size_t SelectorColumnsBase = 10; - - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - using var_ec_point = typename zk::components::var_ec_point; - - using verify_base_component = - zk::components::base_field; - - using shifted_commitment_type = - typename zk::components::kimchi_shifted_commitment_type; - - using opening_proof_type = - typename zk::components::kimchi_opening_proof_base; - using var = zk::snark::plonk_variable; - - using binding = typename zk::components::binding; - - using verifier_index_type = zk::components::kimchi_verifier_index_base; - - using proof_type = zk::components::kimchi_proof_base; - - std::vector public_input; - std::vector shifted_var; - std::vector unshifted_var; - for (std::size_t i = 0; i < 14; i++) { - curve_type::template g1_type::value_type shifted = - algebra::random_element>(); - - public_input.push_back(shifted.X); - public_input.push_back(shifted.Y); - - shifted_var.push_back({var(0, i * 4, false, var::column_type::public_input), - var(0, i * 4 + 1, false, var::column_type::public_input)}); - - curve_type::template g1_type::value_type unshifted = - algebra::random_element>(); - - public_input.push_back(unshifted.X); - public_input.push_back(unshifted.Y); - - unshifted_var.push_back({var(0, i * 4 + 2, false, var::column_type::public_input), - var(0, i * 4 + 3, false, var::column_type::public_input)}); - } - std::array witness_comm; - for (std::size_t i = 0; i < witness_columns; i++) { - witness_comm[i] = {{shifted_var[0]}, {unshifted_var[0]}}; - } - - std::array sigma_comm; - for (std::size_t i = 0; i < perm_size; i++) { - witness_comm[i] = {{shifted_var[1]}, {unshifted_var[1]}}; - } - std::vector coefficient_comm = {{{shifted_var[2]}, {unshifted_var[2]}}}; - std::vector oracles_poly_comm = { - {{shifted_var[3]}, {unshifted_var[3]}}}; // to-do: get in the component from oracles - shifted_commitment_type lookup_runtime_comm = {{shifted_var[4]}, {unshifted_var[4]}}; - shifted_commitment_type table_comm = {{shifted_var[5]}, {unshifted_var[5]}}; - std::vector lookup_sorted_comm {{{shifted_var[6]}, {unshifted_var[6]}}}; - std::vector lookup_selectors_comm = {{{shifted_var[7]}, {unshifted_var[7]}}}; - std::vector selectors_comm = {{{shifted_var[8]}, {unshifted_var[8]}}}; - shifted_commitment_type lookup_agg_comm = {{shifted_var[9]}, {unshifted_var[9]}}; - shifted_commitment_type z_comm = {{shifted_var[10]}, {unshifted_var[10]}}; - shifted_commitment_type t_comm = {{shifted_var[11]}, {unshifted_var[11]}}; - shifted_commitment_type generic_comm = {{shifted_var[12]}, {unshifted_var[12]}}; - shifted_commitment_type psm_comm = {{shifted_var[13]}, {unshifted_var[13]}}; - - curve_type::template g1_type::value_type L = - algebra::random_element>(); - - public_input.push_back(L.X); - public_input.push_back(L.Y); - - var_ec_point L_var = {var(0, 56, false, var::column_type::public_input), - var(0, 57, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type R = - algebra::random_element>(); - - public_input.push_back(R.X); - public_input.push_back(R.Y); - - var_ec_point R_var = {var(0, 58, false, var::column_type::public_input), - var(0, 59, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type delta = - algebra::random_element>(); - - public_input.push_back(delta.X); - public_input.push_back(delta.Y); - - var_ec_point delta_var = {var(0, 60, false, var::column_type::public_input), - var(0, 61, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type G = - algebra::random_element>(); - - public_input.push_back(G.X); - public_input.push_back(G.Y); - - var_ec_point G_var = {var(0, 62, false, var::column_type::public_input), - var(0, 63, false, var::column_type::public_input)}; - - opening_proof_type o_var = {{L_var}, {R_var}, delta_var, G_var}; - - std::array scalars; - - std::array scalars_var; - - for (std::size_t i = 0; i < kimchi_constants::f_comm_msm_size; i++) { - scalars[i] = algebra::random_element(); - public_input.push_back(scalars[i]); - scalars_var[i] = var(0, 74 + i, false, var::column_type::public_input); - } - - curve_type::template g1_type::value_type lagrange_bases = - algebra::random_element>(); - - public_input.push_back(lagrange_bases.X); - public_input.push_back(lagrange_bases.Y); - - var_ec_point lagrange_bases_var = {var(0, 65, false, var::column_type::public_input), - var(0, 66, false, var::column_type::public_input)}; - - std::array Pub; - std::array Pub_var; - for (std::size_t i = 0; i < public_input_size; i++) { - Pub[i] = typename BaseFieldType::value_type(typename BaseFieldType::integral_type(pi[i].data)); - public_input.push_back(Pub[i]); - Pub_var[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - std::array zeta_to_srs_len_var; - for (std::size_t i = 0; i < batch_size; i++) { - public_input.emplace_back(typename BaseFieldType::integral_type(zeta_to_srs_len[i].data)); - zeta_to_srs_len_var[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - public_input.emplace_back(typename BaseFieldType::integral_type(zeta_to_domain_size_minus_1.data)); - var zeta_to_domain_size_minus_1_var = var(0, public_input.size() - 1, false, var::column_type::public_input); - - curve_type::template g1_type::value_type H = - algebra::random_element>(); - - public_input.push_back(H.X); - public_input.push_back(H.Y); - - var_ec_point H_var = {var(0, public_input.size() - 1, false, var::column_type::public_input), - var(0, public_input.size() - 1, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type PI_G = - algebra::random_element>(); - - public_input.push_back(PI_G.X); - public_input.push_back(PI_G.Y); - - var_ec_point PI_G_var = {var(0, public_input.size() - 1, false, var::column_type::public_input), - var(0, public_input.size() - 1, false, var::column_type::public_input)}; - - std::array batch_scalars_var; - - for (std::size_t i = 0; i < bases_size; i++) { - public_input.emplace_back(typename BaseFieldType::integral_type(batch_scalars[i].data)); - batch_scalars_var[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - curve_type::base_field_type::value_type cip = algebra::random_element(); - - public_input.push_back(cip); - - var cip_var = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename proof_type::commitments_type commitments = { - {witness_comm}, lookup_runtime_comm, table_comm, {lookup_sorted_comm}, lookup_agg_comm, z_comm, - t_comm, {oracles_poly_comm[0]} // to-do: get in the component from oracles - }; - - proof_type proof_var = {commitments, o_var, {scalars_var}}; - verifier_index_type verifier_index = { - H_var, - {PI_G_var}, - {lagrange_bases_var}, - {{sigma_comm}, {coefficient_comm}, generic_comm, psm_comm, {selectors_comm}, {lookup_selectors_comm}}}; - - typename binding::fr_data fr_data = { - batch_scalars_var, {cip_var}, {Pub_var[0]}, zeta_to_srs_len_var[0], zeta_to_domain_size_minus_1_var}; - typename binding::fq_data fq_data; - - typename verify_base_component::params_type params = {{proof_var}, verifier_index, fr_data, fq_data}; - - auto result_check = [](AssignmentType &assignment, verify_base_component::result_type &real_res) {}; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/basic_verifier_types.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/basic_verifier_types.hpp deleted file mode 100644 index 25af8820a1..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/basic_verifier_types.hpp +++ /dev/null @@ -1,141 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_PICKLES_VERIFIER_PROOF_TYPES_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_PICKLES_VERIFIER_PROOF_TYPES_HPP - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -using namespace nil::crypto3; - -using curve_type = algebra::curves::vesta; -using FpType = typename curve_type::base_field_type; -using FrType = typename curve_type::scalar_field_type; - -template -struct proof_generator_result_type { - using ArithmetizationType = zk::snark::plonk_constraint_system; - using params = zk::snark::placeholder_params; - using types = zk::snark::detail::placeholder_policy; - - using fri_type = typename zk::commitments::fri; - - ProofType placeholder_proof; - typename fri_type::params_type fri_params; - zk::blueprint bp; - typename types::preprocessed_public_data_type public_preprocessed_data; - typename curve_type::scalar_field_type::integral_type out; -}; - -//////////// BASE ///////////////////////////// -constexpr std::size_t WitnessColumnsBase = 15; -constexpr std::size_t PublicInputColumnsBase = 1; -constexpr std::size_t ConstantColumnsBase = 0; -constexpr std::size_t SelectorColumnsBase = 1; - -using ArithmetizationParamsBase = zk::snark::plonk_arithmetization_params; -using ArithmetizationTypeBase = zk::snark::plonk_constraint_system; - -using params_base = zk::snark::placeholder_params; -using types_base = zk::snark::detail::placeholder_policy; - -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_witness_type_base; -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_permutation_type_base; -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_quotient_type_base; -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_public_input_type_base; - -using proof_type_base = zk::snark::placeholder_proof; - -using proof_generator_result_type_base = proof_generator_result_type; - -//////////// SCALAR /////////////////////////// -constexpr std::size_t WitnessColumnsScalar = 15; -constexpr std::size_t PublicInputColumnsScalar = 1; -constexpr std::size_t ConstantColumnsScalar = 3; -constexpr std::size_t SelectorColumnsScalar = 11; - -using ArithmetizationParamsScalar = zk::snark::plonk_arithmetization_params; -using ArithmetizationTypeScalar = zk::snark::plonk_constraint_system; - -using params_scalar = zk::snark::placeholder_params; -using types_scalar = zk::snark::detail::placeholder_policy; - -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_witness_type_scalar; -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_permutation_type_scalar; -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_quotient_type_scalar; -typedef zk::commitments::list_polynomial_commitment - commitment_scheme_public_input_type_scalar; - -using proof_type_scalar = zk::snark::placeholder_proof; - -using proof_generator_result_type_scalar = proof_generator_result_type; - -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_PICKLES_VERIFIER_PROOF_TYPES_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/batch_verify_base_field.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/batch_verify_base_field.cpp deleted file mode 100644 index e4e23773e2..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/batch_verify_base_field.cpp +++ /dev/null @@ -1,256 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Alisa Cherniaeva -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_batch_verify_base_field_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include -//#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_batch_verify_base_field_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_batch_verify_base_field_test) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 25; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - constexpr static const std::size_t batch_size = 1; - constexpr static const std::size_t eval_rounds = 1; - constexpr static const std::size_t comm_size = 1; - // constexpr static const std::size_t n_2 = ceil(log2(n)); - // constexpr static const std::size_t padding = (1 << n_2) - n; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - - constexpr static std::size_t witness_columns = 5; - constexpr static std::size_t perm_size = 5; - - constexpr static std::size_t srs_len = 1; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - using kimchi_constants = zk::components::kimchi_inner_constants; - - constexpr static const std::size_t bases_size = kimchi_constants::final_msm_size(batch_size); - - using component_type = zk::components::batch_verify_base_field; - - using opening_proof_type = - typename zk::components::kimchi_opening_proof_base; - using commitment_type = - typename zk::components::kimchi_commitment_type; - - // using transcript_type = kimchi_transcript_fq; - - using binding = typename zk::components::binding; - - using var_ec_point = typename zk::components::var_ec_point; - using var = zk::snark::plonk_variable; - - using batch_proof_type = typename zk::components:: - batch_evaluation_proof_base; - - // zk::snark::pickles_proof kimchi_proof = test_proof(); - - std::vector public_input; - - curve_type::template g1_type::value_type shifted = - algebra::random_element>(); - - public_input.push_back(shifted.X); - public_input.push_back(shifted.Y); - - var_ec_point shifted_var = {var(0, 0, false, var::column_type::public_input), - var(0, 1, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type unshifted = - algebra::random_element>(); - - public_input.push_back(unshifted.X); - public_input.push_back(unshifted.Y); - - var_ec_point unshifted_var = {var(0, 2, false, var::column_type::public_input), - var(0, 3, false, var::column_type::public_input)}; - - curve_type::base_field_type::value_type f_zeta = algebra::random_element(); - - public_input.push_back(f_zeta); - - var f_zeta_var = var(0, 4, false, var::column_type::public_input); - - curve_type::base_field_type::value_type f_zeta_w = algebra::random_element(); - - public_input.push_back(f_zeta_w); - - var f_zeta_w_var = var(0, 5, false, var::column_type::public_input); - - curve_type::template g1_type::value_type L = - algebra::random_element>(); - - public_input.push_back(L.X); - public_input.push_back(L.Y); - - var_ec_point L_var = {var(0, 6, false, var::column_type::public_input), - var(0, 7, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type R = - algebra::random_element>(); - - public_input.push_back(R.X); - public_input.push_back(R.Y); - - var_ec_point R_var = {var(0, 8, false, var::column_type::public_input), - var(0, 9, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type delta = - algebra::random_element>(); - - public_input.push_back(delta.X); - public_input.push_back(delta.Y); - - var_ec_point delta_var = {var(0, 10, false, var::column_type::public_input), - var(0, 11, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type G = - algebra::random_element>(); - - public_input.push_back(G.X); - public_input.push_back(G.Y); - - var_ec_point G_var = {var(0, 12, false, var::column_type::public_input), - var(0, 13, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type H = - algebra::random_element>(); - - public_input.push_back(H.X); - public_input.push_back(H.Y); - - var_ec_point H_var = {var(0, 20, false, var::column_type::public_input), - var(0, 21, false, var::column_type::public_input)}; - - curve_type::template g1_type::value_type PI_G = - algebra::random_element>(); - - public_input.push_back(PI_G.X); - public_input.push_back(PI_G.Y); - - var_ec_point PI_G_var = {var(0, 22, false, var::column_type::public_input), - var(0, 23, false, var::column_type::public_input)}; - - std::array scalars; - - std::array scalars_var; - - for (std::size_t i = 0; i < bases_size; i++) { - scalars[i] = algebra::random_element(); - public_input.push_back(scalars[i]); - scalars_var[i] = var(0, 24 + i, false, var::column_type::public_input); - } - curve_type::base_field_type::value_type cip = algebra::random_element(); - - public_input.push_back(cip); - - var cip_var = var(0, 24 + bases_size, false, var::column_type::public_input); - - commitment_type comm_var = {{unshifted_var}}; - - opening_proof_type o_var = {{L_var}, {R_var}, delta_var, G_var}; - //transcript_type transcript; - - typename binding::fr_data fr_data = {scalars_var, {cip_var}}; - - std::array prepared_proofs = {{{{comm_var}, o_var}}}; - - typename component_type::params_type params = {prepared_proofs, {H_var, {PI_G_var}, {PI_G_var}}, fr_data}; - - auto result_check = [](AssignmentType &assignment, component_type::result_type &real_res) {}; - - test_component( - params, public_input, result_check); -}; -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/batch_verify_scalar_field.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/batch_verify_scalar_field.cpp deleted file mode 100644 index 547e832aca..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/batch_verify_scalar_field.cpp +++ /dev/null @@ -1,255 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Alisa Cherniaeva -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_verifier_scalar_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -#include "test_plonk_component.hpp" -#include "proof_data.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_batch_verifier_scalar_field_test_suite) - -template -void prepare_proof(zk::snark::pickles_proof &original_proof, - zk::components::kimchi_proof_scalar &circuit_proof, - std::vector &public_input) { - using var = zk::snark::plonk_variable; - - // eval_proofs - for (std::size_t point_idx = 0; point_idx < 2; point_idx++) { - // w - for (std::size_t i = 0; i < KimchiParamsType::witness_columns; i++) { - public_input.push_back(original_proof.evals[point_idx].w[i]); - circuit_proof.proof_evals[point_idx].w[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // z - public_input.push_back(original_proof.evals[point_idx].z); - circuit_proof.proof_evals[point_idx].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - // s - for (std::size_t i = 0; i < KimchiParamsType::permut_size - 1; i++) { - public_input.push_back(original_proof.evals[point_idx].s[i]); - circuit_proof.proof_evals[point_idx].s[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // lookup - if (KimchiParamsType::use_lookup) { - // TODO - } - // generic_selector - public_input.push_back(original_proof.evals[point_idx].generic_selector); - circuit_proof.proof_evals[point_idx].generic_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - // poseidon_selector - public_input.push_back(original_proof.evals[point_idx].poseidon_selector); - circuit_proof.proof_evals[point_idx].poseidon_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - // ft_eval - public_input.push_back(algebra::random_element()); - circuit_proof.ft_eval = var(0, public_input.size() - 1, false, var::column_type::public_input); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_batch_verifier_scalar_field_test_suite) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 3; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr std::size_t srs_len = 5; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - zk::components::kimchi_verifier_index_scalar verifier_index; - typename BlueprintFieldType::value_type zeta = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type omega = - 0x1B1A85952300603BBF8DD3068424B64608658ACBB72CA7D2BB9694ADFA504418_cppui_modular256; - // verifier_index.zkpm = {0x2C46205451F6C3BBEA4BABACBEE609ECF1039A903C42BFF639EDC5BA33356332_cppui_modular256, - // 0x1764D9CB4C64EBA9A150920807637D458919CB6948821F4D15EB1994EADF9CE3_cppui_modular256, - // 0x0140117C8BBC4CE4644A58F7007148577782213065BB9699BF5C391FBE1B3E6D_cppui_modular256, - // 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256}; - std::size_t domain_size = 128; - verifier_index.domain_size = domain_size; - verifier_index.omega = var(0, 6, false, var::column_type::public_input); - - constexpr std::size_t batch_size = 2; - - using component_type = zk::components::batch_verify_scalar_field; - - zk::snark::pickles_proof kimchi_proof = test_proof(); - - typename BlueprintFieldType::value_type joint_combiner = 0; - typename BlueprintFieldType::value_type beta = 0; - typename BlueprintFieldType::value_type gamma = 0; - typename BlueprintFieldType::value_type alpha = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type fq_digest = - 0x01D4E77CCD66755BDDFDBB6E4E8D8D17A6708B9CB56654D12070BD7BF4A5B33B_cppui_modular256; - - zk::components::kimchi_proof_scalar proof; - std::array challenges; - - std::vector public_input = {}; - - std::array< - zk::components:: - batch_evaluation_proof_scalar, - batch_size> - batches; - - for (std::size_t i = 0; i < batch_size; i++) { - typename BlueprintFieldType::value_type cip = 12; - public_input.push_back(cip); - batches[i].cip = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename zk::components::binding::fq_sponge_output - fq_output; - - std::array challenges; - for (std::size_t j = 0; j < eval_rounds; j++) { - public_input.emplace_back(10); - challenges[j] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - fq_output.challenges = challenges; - - // joint_combiner - public_input.push_back(algebra::random_element()); - fq_output.joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - // beta - public_input.push_back(algebra::random_element()); - fq_output.beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - // gamma - public_input.push_back(algebra::random_element()); - fq_output.gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - // alpha - public_input.push_back(algebra::random_element()); - fq_output.alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - // zeta - public_input.push_back(algebra::random_element()); - fq_output.zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - // fq_digest - public_input.push_back(algebra::random_element()); - fq_output.fq_digest = var(0, public_input.size() - 1, false, var::column_type::public_input); - // c - public_input.emplace_back(250); - fq_output.c = var(0, public_input.size() - 1, false, var::column_type::public_input); - - batches[i].fq_output = fq_output; - - public_input.push_back(zeta); - public_input.push_back(zeta * omega); - batches[i].eval_points = {var(0, public_input.size() - 2, false, var::column_type::public_input), - var(0, public_input.size() - 1, false, var::column_type::public_input)}; - - public_input.push_back(algebra::random_element()); - batches[i].r = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(algebra::random_element()); - public_input.push_back(algebra::random_element()); - batches[i].opening = {var(0, public_input.size() - 2, false, var::column_type::public_input), - var(0, public_input.size() - 1, false, var::column_type::public_input)}; - } - - typename component_type::params_type params = {batches}; - - auto result_check = [](AssignmentType &assignment, component_type::result_type &real_res) {}; - - test_component( - params, public_input, result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/demo_verifier.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/demo_verifier.cpp deleted file mode 100644 index e42b8d4e64..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/demo_verifier.cpp +++ /dev/null @@ -1,209 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_basic_verifier_test - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "proof_data.hpp" - -using namespace nil::crypto3; - -template -void print_byteblob(std::ostream &os, TIter iter_begin, TIter iter_end) { - os << std::hex; - for (TIter it = iter_begin; it != iter_end; it++) { - os << std::setfill('0') << std::setw(2) << std::right << int(*it); - } - os << std::endl << std::dec; -} - -inline std::vector generate_random_step_list(const std::size_t r, const int max_step) { - using dist_type = std::uniform_int_distribution; - static std::random_device random_engine; - - std::vector step_list; - std::size_t steps_sum = 0; - while (steps_sum != r) { - if (r - steps_sum <= max_step) { - while (r - steps_sum != 1) { - step_list.emplace_back(r - steps_sum - 1); - steps_sum += step_list.back(); - } - step_list.emplace_back(1); - steps_sum += step_list.back(); - } else { - step_list.emplace_back(dist_type(1, max_step)(random_engine)); - steps_sum += step_list.back(); - } - } - return step_list; -} - -template -typename fri_type::params_type create_fri_params(std::size_t degree_log, const int max_step = 1) { - typename fri_type::params_type params; - math::polynomial q = {0, 0, 1}; - - constexpr std::size_t expand_factor = 0; - std::size_t r = degree_log - 1; - - std::vector>> domain_set = - math::calculate_domain_set(degree_log + expand_factor, r); - - params.r = r; - params.D = domain_set; - params.max_degree = (1 << degree_log) - 1; - params.step_list = generate_random_step_list(r, max_step); - - return params; -} - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_demo_verifier_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_demo_verifier_test) { - constexpr std::size_t complexity = 8000; - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - constexpr std::size_t WitnessColumns = 11; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 1; - - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - - nil::crypto3::zk::snark::pickles_proof kimchi_proof = test_proof(); - - using component_type = zk::components::curve_element_unified_addition; - using var = zk::snark::plonk_variable; - - auto P = kimchi_proof.commitments.w_comm[0].unshifted[0]; - auto Q = kimchi_proof.commitments.w_comm[1].unshifted[0]; - std::vector public_input = {P.X, P.Y, Q.X, Q.Y}; - - auto expected_result = P + Q; - std::cout << "exprected result: (" << expected_result.X.data << ", " << expected_result.Y.data << ")" << std::endl; - - zk::snark::plonk_table_description desc; - - zk::blueprint bp(desc); - zk::blueprint_private_assignment_table private_assignment(desc); - zk::blueprint_public_assignment_table public_assignment(desc); - blueprint::assignment assignment_bp(private_assignment, public_assignment); - - std::size_t start_row = zk::components::allocate(bp, complexity); - - std::vector result(complexity); - - bp.allocate_rows(public_input.size()); - component_type::params_type component_params = { - {assignment_bp.allocate_public_input(public_input[0]), assignment_bp.allocate_public_input(public_input[1])}, - {assignment_bp.allocate_public_input(public_input[2]), assignment_bp.allocate_public_input(public_input[3])}}; - - for (std::size_t i = 0; i < complexity; i++) { - - std::size_t row = start_row + i * component_type::rows_amount; - result[i] = component_type::result_type(component_params, row); - - zk::components::generate_circuit(bp, public_assignment, component_params, row); - - component_type::generate_assignments(assignment_bp, component_params, row); - } - - // std::cout << "actual result: " << std::endl; - // for (std::size_t i = 0; i < complexity; i++) { - // std::cout << "(" << assignment_bp.var_value(result[i].X).data << ", " - // << assignment_bp.var_value(result[i].Y).data << ")" << std::endl; - // } - - assignment_bp.padding(); - - zk::snark::plonk_assignment_table assignments(private_assignment, - public_assignment); - - // profiling(assignments); - using params = - zk::snark::placeholder_params; - - using fri_type = typename zk::commitments::fri; - - std::size_t table_rows_log = std::ceil(std::log2(desc.rows_amount)); - - typename fri_type::params_type fri_params = create_fri_params(table_rows_log); - - std::size_t permutation_size = desc.witness_columns + desc.public_input_columns + desc.constant_columns; - - typename zk::snark::placeholder_public_preprocessor::preprocessed_data_type - public_preprocessed_data = zk::snark::placeholder_public_preprocessor::process( - bp, public_assignment, desc, fri_params, permutation_size); - typename zk::snark::placeholder_private_preprocessor::preprocessed_data_type - private_preprocessed_data = zk::snark::placeholder_private_preprocessor::process( - bp, private_assignment, desc, fri_params); - - auto placeholder_proof = zk::snark::placeholder_prover::process( - public_preprocessed_data, private_preprocessed_data, desc, bp, assignments, fri_params); - - bool verifier_res = zk::snark::placeholder_verifier::process( - public_preprocessed_data, placeholder_proof, bp, fri_params); - std::cout << "Proof check: " << verifier_res << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/b_poly.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/b_poly.cpp deleted file mode 100644 index 3b90a4f744..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/b_poly.cpp +++ /dev/null @@ -1,110 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_b_poly_test - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include "../../../test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_b_poly) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 2; - constexpr std::size_t n = 5; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::b_poly; - - var one(0, 0, false, var::column_type::public_input); - var zeta(0, 1, false, var::column_type::public_input); - typename BlueprintFieldType::value_type zeta_value = algebra::random_element(); - - std::vector public_input = {1, zeta_value}; - - std::array challenges; - std::array challenges_values; - for (std::size_t i = 0; i < n; i++) { - challenges_values[i] = algebra::random_element(); - public_input.push_back(challenges_values[i]); - challenges[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - typename component_type::params_type params = {challenges, zeta, one}; - - std::array powers_twos; - powers_twos[0] = zeta_value; - for (std::size_t i = 1; i < n; i++) { - powers_twos[i] = powers_twos[i - 1] * powers_twos[i - 1]; - } - - typename BlueprintFieldType::value_type expected_result = 1; - for (std::size_t i = 0; i < n; i++) { - typename BlueprintFieldType::value_type term = 1 + challenges_values[i] * powers_twos[n - 1 - i]; - expected_result = expected_result * term; - } - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "b_poly_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/b_poly_coefficients.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/b_poly_coefficients.cpp deleted file mode 100644 index 044b05b9b7..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/b_poly_coefficients.cpp +++ /dev/null @@ -1,105 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_b_poly_test - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include "../../../test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_b_poly_coefficients) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 2; - constexpr std::size_t n = 3; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::b_poly_coefficients; - - var one(0, 0, false, var::column_type::public_input); - var zeta(0, 1, false, var::column_type::public_input); - typename BlueprintFieldType::value_type zeta_value = algebra::random_element(); - - std::vector public_input = {1, zeta_value}; - - std::array challenges; - std::array challenges_values = {1, 2, 5}; - for (std::size_t i = 0; i < n; i++) { - public_input.push_back(challenges_values[i]); - challenges[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - typename component_type::params_type params = {challenges, one}; - - constexpr std::size_t expected_result_size = 1 << n; - std::array expected_result = { - 1, 5, 2, 10, 1, 5, 2, 10 - }; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - for (std::size_t i = 0; i < expected_result.size(); i++) { - assert(expected_result[i] == assignment.var_value(real_res.output[i])); - } - }; - - test_component(params, public_input, - result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "b_poly__coefficients_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/combine_proof_evals.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/combine_proof_evals.cpp deleted file mode 100644 index 23a12c5056..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/combine_proof_evals.cpp +++ /dev/null @@ -1,200 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_ft_eval_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -#include "verifiers/kimchi/index_terms_instances/chacha_test.hpp" - -#include "test_plonk_component.hpp" -#include "../proof_data.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_combine_proof_evals_test_suite) - -template -void prepare_proof(zk::snark::pickles_proof &original_proof, - zk::components::kimchi_proof_scalar &circuit_proof, - std::vector &public_input) { - using var = zk::snark::plonk_variable; - - // eval_proofs - for (std::size_t point_idx = 0; point_idx < 2; point_idx++) { - // w - for (std::size_t i = 0; i < KimchiParamsType::witness_columns; i++) { - public_input.push_back(original_proof.evals[point_idx].w[i]); - circuit_proof.proof_evals[point_idx].w[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // z - public_input.push_back(original_proof.evals[point_idx].z); - circuit_proof.proof_evals[point_idx].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - // s - for (std::size_t i = 0; i < KimchiParamsType::permut_size - 1; i++) { - public_input.push_back(original_proof.evals[point_idx].s[i]); - circuit_proof.proof_evals[point_idx].s[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // lookup - if (KimchiParamsType::use_lookup) { - for (std::size_t i = 0; i < KimchiParamsType::circuit_params::lookup_columns; i++) { - public_input.push_back(original_proof.evals[point_idx].lookup.sorted[i]); - circuit_proof.proof_evals[point_idx].lookup.sorted[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - public_input.push_back(original_proof.evals[point_idx].lookup.aggreg); - circuit_proof.proof_evals[point_idx].lookup.aggreg = - var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(original_proof.evals[point_idx].lookup.table); - circuit_proof.proof_evals[point_idx].lookup.table = - var(0, public_input.size() - 1, false, var::column_type::public_input); - - if (KimchiParamsType::circuit_params::lookup_runtime) { - public_input.push_back(original_proof.evals[point_idx].lookup.runtime); - circuit_proof.proof_evals[point_idx].lookup.runtime = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - } - // generic_selector - public_input.push_back(original_proof.evals[point_idx].generic_selector); - circuit_proof.proof_evals[point_idx].generic_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - // poseidon_selector - public_input.push_back(original_proof.evals[point_idx].poseidon_selector); - circuit_proof.proof_evals[point_idx].poseidon_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_combine_proof_evals_test) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 10; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - constexpr static std::size_t srs_len = 10; - - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_chacha_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = zk::components::combine_proof_evals; - - zk::snark::pickles_proof kimchi_proof = test_proof_chacha(); - - typename BlueprintFieldType::value_type zeta_value = - 0x3CE960ABCAC273BBEEBA92D1EF87514B51187BFE5E8797B5DE97B01FF7C64484_cppui_modular256; - - std::vector public_input = {zeta_value, 1, 0}; - - var zeta(0, 0, false, var::column_type::public_input); - var one(0, 1, false, var::column_type::public_input); - var zero(0, 2, false, var::column_type::public_input); - - zk::components::kimchi_proof_scalar proof; - - prepare_proof(kimchi_proof, proof, public_input); - - typename component_type::params_type params = {proof.proof_evals[0], zeta}; - - auto result_check = [&kimchi_proof, &zeta_value](AssignmentType &assignment, - component_type::result_type &real_res) { - // w - for (std::size_t i = 0; i < kimchi_proof.evals[0].w.size(); i++) { - assert(kimchi_proof.evals[0].w[i] * zeta_value == assignment.var_value(real_res.output.w[i])); - } - // z - assert(kimchi_proof.evals[0].z * zeta_value == assignment.var_value(real_res.output.z)); - // s - for (std::size_t i = 0; i < kimchi_proof.evals[0].s.size(); i++) { - assert(kimchi_proof.evals[0].s[i] * zeta_value == assignment.var_value(real_res.output.s[i])); - } - // lookup - if (kimchi_params::use_lookup) { - for (std::size_t i = 0; i < kimchi_proof.evals[0].lookup.sorted.size(); i++) { - assert(kimchi_proof.evals[0].lookup.sorted[i] * zeta_value == assignment.var_value(real_res.output.lookup.sorted[i])); - } - assert(kimchi_proof.evals[0].lookup.aggreg * zeta_value == assignment.var_value(real_res.output.lookup.aggreg)); - assert(kimchi_proof.evals[0].lookup.table * zeta_value == assignment.var_value(real_res.output.lookup.table)); - if (kimchi_params::circuit_params::lookup_runtime) { - assert(kimchi_proof.evals[0].lookup.runtime * zeta_value == assignment.var_value(real_res.output.lookup.runtime)); - } - } - // generic_selector - assert(kimchi_proof.evals[0].generic_selector * zeta_value == assignment.var_value(real_res.output.generic_selector)); - // poseidon_selector - assert(kimchi_proof.evals[0].poseidon_selector * zeta_value == assignment.var_value(real_res.output.poseidon_selector)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/generic_scalars.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/generic_scalars.cpp deleted file mode 100644 index 4e00a6f217..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/generic_scalars.cpp +++ /dev/null @@ -1,232 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_detail_constraints_generic_scalars_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_detail_constraints_generic_scalars_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_constraints_generic_scalars_generic_input_test_suite) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = - zk::components::generic_scalars; - - // params: - // std::array, - // KimchiParamsType::eval_points_amount> evals; - // std::array alphas; - // std::size_t start_idx; - - std::array - eval0_w = { - 0x2A016E5F91F6C33552FC86A7A88C034E5CF1301E4982545A15AB709ECE150E09_cppui_modular256, - 0x1D1B8F16A3DF52F90BA4856A11D397FDD175DEBBDC84F9D9FD71C46E5CB311CC_cppui_modular256, - 0x034EB5403A85D023EFD87CE7E37CD027921DBC8F5A59C6338A12965B2E1D2D9B_cppui_modular256, - 0x3D708DC37C2985BD9E8F39D40FFB35A8C1D1D4106AC17CEA1668C944007FE789_cppui_modular256, - 0x23ACD65BE15FC86FB7FC4FD45701CF7F348C13DD6DFF400DF808BE97006E06C8_cppui_modular256, - 0x3F6D999688174F2CC9C37FBFDA241825F50505E56EF660E29FBC52F06008F2EF_cppui_modular256, - 0x054FF59489820600DB800466FDF3063D387CAFC5464741417FAD07A00E2B558A_cppui_modular256, - 0x078062AB9E022D286A47F28A6A57C368598416D076C558A8288A05AD9A1451DE_cppui_modular256, - 0x09B0CFC2B282544FF90FE0ADD6BC80937A8B7DDBA743700ED16703BB25FD4E32_cppui_modular256, - 0x0BE13CD9C7027B7787D7CED143213DBE9B92E4E6D7C187757A4401C8B1E64A86_cppui_modular256, - 0x0E11A9F0DB82A29F169FBCF4AF85FAE9BC9A4BF2083F9EDC2320FFD63DCF46DA_cppui_modular256, - 0x10421707F002C9C6A567AB181BEAB814DDA1B2FD38BDB642CBFDFDE3C9B8432E_cppui_modular256, - 0x1272841F0482F0EE342F993B884F753FFEA91A08693BCDA974DAFBF155A13F82_cppui_modular256, - 0x14A2F13619031815C2F7875EF4B4326B1FB0811399B9E5101DB7F9FEE18A3BD6_cppui_modular256, - 0x16D35E4D2D833F3D51BF75826118EF9640B7E81ECA37FC76C694F80C6D73382A_cppui_modular256, - }; - - typename BlueprintFieldType::value_type eval0_z = 0x38C5D08C61572A0F233A3732575F3A07AD484107EC7366FEB0903FCC30253C1A_cppui_modular256; - - std::array eval0_s = { - 0x01751A5CCC6A9B9BDF660296AF5F7C80229DC97F3646FFC3729D827E80DF39DF_cppui_modular256, - 0x264CBA1EFD870553869EC32E652FE2FC5DB4DF0C8B8550816F1947F66858B238_cppui_modular256, - 0x21D7D3F53426BA3024217C852D5B1944031F52E784E95CA0539A9F88FB3F3FBE_cppui_modular256, - 0x260E6148F06FA79CD3C8C4A379955A8823017E730AD3624A578304A44B5113AC_cppui_modular256, - 0x2E901B006A7D080B6566A472AC9DEA73BB53A57A190B1A21ECEB698A869374BA_cppui_modular256, - 0x2E70F1D4AE3E1DE24337D33C4F61C88A628368CA7FBE9BF67C16F0944C64B7DE_cppui_modular256, - }; - - typename BlueprintFieldType::value_type eval_generic_selector = 0x2C1E20B5D662CE38070228313FD0D968116779CC3CD2FFF662707412EEBD04C7_cppui_modular256; - - std::array - eval1_w = { - 0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256, - 0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256, - 0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256, - 0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256, - 0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256, - 0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256, - 0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256, - 0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256, - 0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256, - 0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256, - 0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256, - 0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256, - 0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256, - 0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256, - 0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval1_z = 0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256; - - std::array eval1_s = { - 0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256, - 0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256, - 0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256, - 0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256, - 0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256, - 0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256, - }; - - std::array, 2> eval_w = {eval0_w, eval1_w}; - std::array eval_z = {eval0_z, eval1_z}; - std::array, 2> eval_s = {eval0_s, eval1_s}; - - typename BlueprintFieldType::value_type alpha_val = - 0x220B73274823F8B0E46273FA8546B238F1E58529E061A811AB584A97C146AF87_cppui_modular256; - - std::array - expected_result ={ 0x3EA2D6B15BFDB5C984671ECF5BC14CB50F04F1DADECEA0CBD36C92B61F15312E_cppui_modular256, - 0x35E37366760C3D2A9C95BFEE8BE746548D84ED80E7C88ED535B5BEF0518EC54B_cppui_modular256, - 0x1A47E6230B00888729DEB23939B141C3A032851A8D06D8821CBA9388367D6577_cppui_modular256, - 0x3D2FFD65B4D7E78F53072A50E814894D76580CF03F8DF994097C3FD3179D53FE_cppui_modular256, - 0x2C1E20B5D662CE38070228313FD0D968116779CC3CD2FFF662707412EEBD04C7_cppui_modular256, - 0x19D709063B3A3E32EDB448F15674D93910478C69E394BC85A73128501155BCB0_cppui_modular256, - 0x37F4062FEFF15FFAE25149ADE7DFE424E2FC8330DF09FF8B4416BAF093464667_cppui_modular256, - 0x124D8A07FB6BFD8E8E61FF9BD400C12067B5A8D214D4DFCA30206A763D088B4C_cppui_modular256, - 0x0C400758CECEEAE5A929CA341595ADA15AA0C8C582CDF3A424CCBFE0C92DE235_cppui_modular256, - 0x0EF41780273377126FC396C87B03CA6AB9488BA955C5C2EC2253F6A9459C1A9E_cppui_modular256 - }; - - std::vector public_input; - - public_input.push_back(0); - var zero = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations< - BlueprintFieldType, kimchi_params>; - std::array evals; - - for (std::size_t i = 0; i < 2; i++) { - for (std::size_t j = 0; j < witness_columns; j++) { - public_input.push_back(eval_w[i][j]); - var w = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].w[j] = w; - } - - public_input.push_back(eval_z[i]); - var z = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].z = z; - - for (std::size_t j = 0; j < perm_size; j++) { - public_input.push_back(eval_s[i][j]); - var s = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].s[j] = s; - } - - public_input.push_back(eval_generic_selector); - var generic_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].generic_selector = generic_selector; - } - - std::array alpha_powers; - for (std::size_t i = 0; i < circuit_description::alpha_powers_n; i++) { - public_input.push_back(alpha_val.pow(i)); - alpha_powers[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - typename component_type::params_type params = { - evals, alpha_powers, 0}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - for (std::size_t i = 0; i < expected_result.size(); i++) { - assert(expected_result[i] == assignment.var_value(real_res.output[i])); - } - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/index_terms_scalars.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/index_terms_scalars.cpp deleted file mode 100644 index 05f68518e8..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/index_terms_scalars.cpp +++ /dev/null @@ -1,508 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Alisa Cherniaeva -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_detail_index_terms_scalar_test - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -#include "verifiers/kimchi/index_terms_instances/lookup_test.hpp" - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_detail_index_terms_scalar_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_index_terms_scalar_ec_test_suite) { - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 0; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = - zk::components::index_terms_scalars; - - std::array - eval0_w = { - 0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256, - 0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256, - 0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256, - 0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256, - 0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256, - 0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256, - 0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256, - 0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256, - 0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256, - 0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256, - 0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256, - 0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256, - 0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256, - 0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256, - 0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval0_z = 0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256; - - std::array eval0_s = { - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256, - 0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256, - 0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256, - 0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256, - 0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256, - 0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256 - }; - - std::array - eval1_w = { - 0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256, - 0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256, - 0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256, - 0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256, - 0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256, - 0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256, - 0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256, - 0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256, - 0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256, - 0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256, - 0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256, - 0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256, - 0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256, - 0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256, - 0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval1_z = 0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256; - - std::array eval1_s = { - 0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256, - 0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256, - 0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256, - 0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256, - 0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256, - 0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256, - }; - - std::array, 2> eval_w = {eval0_w, eval1_w}; - std::array eval_z = {eval0_z, eval1_z}; - std::array, 2> eval_s = {eval0_s, eval1_s}; - - typename BlueprintFieldType::value_type alpha_val = - 0x322D5D64C86AFB168AC57D2D8AB3512647B4802C8DC4DE07DB2C51E094C4D9B7_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x000000000000000000000000000000005D27C70754796C79C9D9958673CF2ABA_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x00000000000000000000000000000000C2278ADB337FA07CDFB689C4651FFD6D_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256; - - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - - std::array expected_result = { - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x017EEEF7695889AFB5311D7B36B31455AFF02B103BDA9BABF5BC29107B8F3AB7_cppui_modular256, // varBaseMul - 0x259D030170979C4754D0CEBF9E6AE529563BEB3A27C7003F57CCD4F80F875E4B_cppui_modular256, // endoMul - 0x0F297E2FA4E61DD377911C6B14C03F5CABC1114813C5D5C4CDCBDFBE84C526DB_cppui_modular256, // endoMulScalar - 0x0EF5278F0AD55CDE149D4E396A01E9B72A0D73FB4CF033C570B1B7E0C24C5FCE_cppui_modular256, // completeAdd - }; - - std::vector public_input; - - public_input.push_back(0); - var zero = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations< - BlueprintFieldType, kimchi_params>; - std::array evals; - - for (std::size_t i = 0; i < 2; i++) { - for (std::size_t j = 0; j < witness_columns; j++) { - public_input.push_back(eval_w[i][j]); - var w = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].w[j] = w; - } - - public_input.push_back(eval_z[i]); - var z = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].z = z; - - for (std::size_t j = 0; j < perm_size; j++) { - public_input.push_back(eval_s[i][j]); - var s = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].s[j] = s; - } - - evals[i].poseidon_selector = zero; - evals[i].generic_selector = zero; - } - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - var joint_combiner = zero; - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = { - zeta, alpha, beta, gamma, joint_combiner, - evals, omega, domain_size}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - for (std::size_t i = 0; i < expected_result.size(); ++i) { - assert(expected_result[i] == assignment.var_value(real_res.output[i])); - } - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_index_terms_scalar_lookup_test_suite) { - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 0; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_lookup_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = - zk::components::index_terms_scalars; - - std::array - eval0_w = { - 0x333AEBFBB633C5DAC78A664A97F382E44C7A3BA4129409B01465FDB51FBA6159_cppui_modular256, - 0x229705503FFBD3EA924B51FCE0710B063063B9554809B21630FA2265C608A930_cppui_modular256, - 0x13D016250A5B9CE89D5E6E22E0380EAC6C61DE4DDE38FC84EB8A08B1C8C4AD3C_cppui_modular256, - 0x32117E44C1F03F26F3481897755A9422E1280E4A9D21E5D00FCC436323657D7A_cppui_modular256, - 0x0F68E895335D3BBCE935310D52AA1406C20558F286D06CE3FDF70B9E74AF2877_cppui_modular256, - 0x19E176931CC0BB2D6CA0CFF8CC6A7C02CCD0137FA0F443CEA01C0F69E727E2B1_cppui_modular256, - 0x2E9559BD9D6C15B5632A9E5E0BB2C4FC5BFFD29C2B41366AE197545C5094B357_cppui_modular256, - 0x1F81313571BFF50D79E013B3F622BE5FC78724A8546F77C75B68CA780015E2C6_cppui_modular256, - 0x25D45FAB67F88E14B7EC510C28297DBA94DC373AA850AB17C49437DA44B53E68_cppui_modular256, - 0x2C278E215E31271BF5F88E645A303D15623149CCFC31DE682DBFA53C89549A0A_cppui_modular256, - 0x327ABC975469C0233404CBBC8C36FC702F865C5F501311B896EB129ECDF3F5AC_cppui_modular256, - 0x38CDEB0D4AA2592A72110914BE3DBBCAFCDB6EF1A3F44509001680011293514E_cppui_modular256, - 0x3F21198340DAF231B01D466CF0447B25CA308183F7D578596941ED635732ACF0_cppui_modular256, - 0x057447F937138B38EE2983C5224B3A80753EFB1A4269B28E394029D89BD20891_cppui_modular256, - 0x0BC7766F2D4C24402C35C11D5451F9DB42940DAC964AE5DEA26B973AE0716433_cppui_modular256, - }; - - typename BlueprintFieldType::value_type eval0_z = 0x134EBAD0F9C35BE923C101FBDDE3E6223FE9688D939FD620137F2BA1473CEE2E_cppui_modular256; - - std::array eval0_s = { - 0x38F09DAE5B20B0CE58B9146FA85FBD460B0560AC4A84C269A6B116B90CAD9930_cppui_modular256, - 0x14D2BCE16FBE86ADC87964FCB51A1D5DE50D20EFE036FE5CD1AC1A3CA30F0CFE_cppui_modular256, - 0x00EE6F2F707C48EB45BEB0B8DB361BBD7E965362E0CE8EF02A86C61942B6EC34_cppui_modular256, - 0x21497448D1A0FE3B4066DAF2476EE883962B5ABF7FFEBB54F2AF2AECBE591846_cppui_modular256, - 0x3BAA01F94DFF5E931CAC909968174CFF50EA6ED08377422EB5E56F5F43ADFCB2_cppui_modular256, - 0x2EF00DA590D3C70C042C6A36B7C0FD4F359979E5325A1AA04EF3239D65944055_cppui_modular256, - }; - - constexpr const std::size_t lookup_size = 4; - std::array eval0_lookup_sorted = { - 0x09BF9BB8DC4499B5E044B8F9725BD1F76D2B96D40E030CE45BFC8513C7878585_cppui_modular256, - 0x392178C04F97404121297069CDD6C7D1CAD07541AC82B6055EE72CB44E312ECE_cppui_modular256, - 0x22D44A9961BAEB007DE32FFDE0ACC05D545609F271F2C9994B309A96EE341689_cppui_modular256, - 0x2101DB892E0BFF916221891846B5208F85DC8AFADF3CEF66EC40AA026D7E2616_cppui_modular256, - }; - - typename BlueprintFieldType::value_type eval0_lookup_aggregated = - 0x2491DCAD05BC2541E67009FD6430FD3E3F761F6777745636741FBE38BF40178A_cppui_modular256;; - - typename BlueprintFieldType::value_type eval0_lookup_table = - 0x3061EA493FBB49E185D2C7B05A5F918B243FC5FF0BF157EE88C117C1C5FF250F_cppui_modular256; - - std::array - eval1_w = { - 0x1E62E030CDBC0C7188D33E5CDF44CB9F627F51A218E31B3DE5DC042D3985933A_cppui_modular256, - 0x35A92D4340842C373BAD02F6EB1EEA07DFEBD5F375AC8EBAFAE9FE39E1FE1C7D_cppui_modular256, - 0x3371121F8357D809F17C1DD8A213D22316F2F17856750CFEBA7A4FBA8C88B2BF_cppui_modular256, - 0x0E017A1556A517DFEE62C99B2676A0A6084213E8664A18BEAB37D0EF12057DB0_cppui_modular256, - 0x3D09624DEA00B11359E51D17B08F5407A1EC500F074D015BF701B0AF6B3A4A1A_cppui_modular256, - 0x14D9A308E0A2CAAE9570769666FBC6BFF2775CB2A19DEFA50F5974E5D9F476DB_cppui_modular256, - 0x2A7D07B5B324E6C311C3CD5DAB4DAED7CEC8E18B0291EC789814FC16726D0F10_cppui_modular256, - 0x28A9C3CF223D9F510AD33071132CA3554BDD14E05E541DD81E554C357E864CF6_cppui_modular256, - 0x17D8769C9C06FD70F8D32E73F6049D93D11F72C5D34E44C1B17E48853F3D42EC_cppui_modular256, - 0x0707296A15D05B90E6D32C76D8DC97D25661D0AB48486BAB44A744D4FFF438E2_cppui_modular256, - 0x3635DC378F99B9B0D4D32A79BBB49210FDEAC78CC68F8BB070FD7211C0AB2ED9_cppui_modular256, - 0x25648F05096317D0C2D3287C9E8C8C4F832D25723B89B29A04266E61816224CF_cppui_modular256, - 0x149341D2832C75F0B0D3267F8164868E086F8357B083D983974F6AB142191AC5_cppui_modular256, - 0x03C1F49FFCF5D4109ED32482643C80CC8DB1E13D257E006D2A78670102D010BB_cppui_modular256, - 0x32F0A76D76BF32308CD3228547147B0B353AD81EA3C5207256CE943DC38706B2_cppui_modular256, - }; - - typename BlueprintFieldType::value_type eval1_z = 0x3C6E48DF402AA8AD73AEE593E6A45E617A6FA5F0FD6537195830BDFAD5007FB2_cppui_modular256; - - std::array eval1_s = { - 0x2FB75D341DB2B66FD0065443D9B82C300A41DC7634D6F22B42A202C7C6EF6CFC_cppui_modular256, - 0x1BF54A529308426DC3223933D80FA71FD9D5D5BFE3FB24B003B0D136BCF81505_cppui_modular256, - 0x0757119D804CFB7B01FDF885E9FC678171B8F91B10D9D04496074912E139823D_cppui_modular256, - 0x3E0F44ACEC3F8EF9F2333B1DD953B283147266DFF7F74E0F63D79E305DA37165_cppui_modular256, - 0x30E36F8F7BFA41EFD55E63F55DA4E1BDF91A7346B271550FD209678CEA1A8AC3_cppui_modular256, - 0x381319F662909FA6C285987D1008BE056C3C31D19220AAADE93D92228C2A4B33_cppui_modular256, - }; - - std::array eval1_lookup_sorted = { - 0x0E825D8D5AC24EBC0C7AAD891B5F2AEC4A9880E98D318FB20580DCD7833A30B1_cppui_modular256, - 0x30D59443C883D3A96862BB9AAA2066387D5CC76A14CF208817617FBB21F39AFB_cppui_modular256, - 0x2B321B4F0969B1DEB9AFAD31F1E1CA18A45B1A9B4AE177613630EAD1184A35E1_cppui_modular256, - 0x08DF00E4FA6F4A9261CCF816AF7792D42CEF4E7E6942C8DC3171A0002538DEB5_cppui_modular256, - }; - - typename BlueprintFieldType::value_type eval1_lookup_aggregated = - 0x297BAEF6E597DAB1C9D2694509368B8D3A5FE32AE7B2AF577633806DB48952A3_cppui_modular256; - - typename BlueprintFieldType::value_type eval1_lookup_table = - 0x12A589E01D18A29D5D176B45C9EF899EF6ADDF3A6594EAD2461666E05876B2E9_cppui_modular256; - - std::array, 2> eval_w = {eval0_w, eval1_w}; - std::array eval_z = {eval0_z, eval1_z}; - std::array, 2> eval_s = {eval0_s, eval1_s}; - std::array, 2> eval_lookup_sorted = {eval0_lookup_sorted, eval1_lookup_sorted}; - std::array eval_lookup_aggregated = {eval0_lookup_aggregated, eval1_lookup_aggregated}; - std::array eval_lookup_table = {eval0_lookup_table, eval1_lookup_table}; - - - typename BlueprintFieldType::value_type alpha_val = - 0x093707BDEAB062634AFCBC9251180B77691009161382D1638490414AD45A33BE_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000082A48F2CCDBC01E4F4ADB977A324D6F6_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x000000000000000000000000000000007F486CD9B2A0B5C2198305055395F920_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x38F09DAE5B20B0CE58B9146FA85FBD460B0560AC4A84C269A6B116B90CAD9930_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x38C743A28755C1E00F0771302FE6A07A2130C21884C1A7AF1800DD8FD9FC6547_cppui_modular256; - - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - - std::array expected_result = { - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular256, - 0x3C298FAAF54E18672778EBEBAC6157CEE2D95F16122B92D0BAAD88BB8C2E0E1C_cppui_modular256, // varBaseMul - 0x2C4C103BC45214A6E78FB9CF5E6F7B8980C36AE4A2455988028C3C907D8C7F08_cppui_modular256, // endoMul - 0x18BDD6D3E3CFAEC53B93C6AD4B9B167FB44B5DFD1A92D34C93BBD1C9F713978D_cppui_modular256, // endoMulScalar - 0x2B2CCD26ACF301C648598FDF4FE0DF29BBD189A233E5BFDEC169B4545F151046_cppui_modular256, // completeAdd - 0x3D6B79823727C40A68B323E82437399AC3DB02009F7680E211415847A6A2DF53_cppui_modular256, // lookup - }; - - std::vector public_input; - - public_input.push_back(0); - var zero = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations< - BlueprintFieldType, kimchi_params>; - std::array evals; - - for (std::size_t i = 0; i < 2; i++) { - for (std::size_t j = 0; j < witness_columns; j++) { - public_input.push_back(eval_w[i][j]); - var w = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].w[j] = w; - } - - public_input.push_back(eval_z[i]); - var z = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].z = z; - - for (std::size_t j = 0; j < perm_size; j++) { - public_input.push_back(eval_s[i][j]); - var s = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].s[j] = s; - } - - for (std::size_t j = 0; j < lookup_size; j++) { - public_input.push_back(eval_lookup_sorted[i][j]); - var lookup_sorted = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].lookup.sorted[j] = lookup_sorted; - } - - public_input.push_back(eval_lookup_aggregated[i]); - var lookup_aggregated = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].lookup.aggreg = lookup_aggregated; - - public_input.push_back(eval_lookup_table[i]); - var lookup_table = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].lookup.table = lookup_table; - - evals[i].poseidon_selector = zero; - evals[i].generic_selector = zero; - } - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = { - zeta, alpha, beta, gamma, joint_combiner, - evals, omega, domain_size}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - for (std::size_t i = 0; i < expected_result.size(); ++i) { - assert(expected_result[i] == assignment.var_value(real_res.output[i])); - } - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/perm_scalars.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/perm_scalars.cpp deleted file mode 100644 index ad3140b9cb..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/perm_scalars.cpp +++ /dev/null @@ -1,232 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_detail_constraints_perm_scalars_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_detail_constraints_perm_scalars_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_constraints_perm_scalars_ec_input_test_suite) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = - zk::components::perm_scalars; - - // params: - // std::array, - // KimchiParamsType::eval_points_amount> evals; - // std::array alphas; - // std::size_t start_idx; - - // var beta; - // var gamma; - // var zkp_zeta; - - std::array - eval0_w = { - 0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256, - 0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256, - 0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256, - 0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256, - 0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256, - 0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256, - 0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256, - 0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256, - 0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256, - 0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256, - 0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256, - 0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256, - 0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256, - 0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256, - 0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval0_z = 0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256; - - std::array eval0_s = { - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256, - 0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256, - 0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256, - 0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256, - 0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256, - 0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256 - }; - - std::array - eval1_w = { - 0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256, - 0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256, - 0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256, - 0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256, - 0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256, - 0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256, - 0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256, - 0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256, - 0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256, - 0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256, - 0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256, - 0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256, - 0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256, - 0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256, - 0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval1_z = 0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256; - - std::array eval1_s = { - 0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256, - 0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256, - 0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256, - 0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256, - 0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256, - 0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256, - }; - - std::array, 2> eval_w = {eval0_w, eval1_w}; - std::array eval_z = {eval0_z, eval1_z}; - std::array, 2> eval_s = {eval0_s, eval1_s}; - - typename BlueprintFieldType::value_type alpha_val = - 0x322D5D64C86AFB168AC57D2D8AB3512647B4802C8DC4DE07DB2C51E094C4D9B7_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x000000000000000000000000000000005D27C70754796C79C9D9958673CF2ABA_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x00000000000000000000000000000000C2278ADB337FA07CDFB689C4651FFD6D_cppui_modular256; - typename BlueprintFieldType::value_type zkp_zeta_val = - 0x10D6264E9E2FD66DF8E432BBA507EA36F9BA431B00A80B80757E56DEADC39D7A_cppui_modular256; - - typename BlueprintFieldType::value_type expected_result = - 0x0E7F540B2F6CE243D4F603210A7EF55620EEC89679E894777E34D1AA3A33C689_cppui_modular256; - - std::vector public_input; - - public_input.push_back(0); - var zero = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations< - BlueprintFieldType, kimchi_params>; - std::array evals; - - for (std::size_t i = 0; i < 2; i++) { - for (std::size_t j = 0; j < witness_columns; j++) { - public_input.push_back(eval_w[i][j]); - var w = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].w[j] = w; - } - - public_input.push_back(eval_z[i]); - var z = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].z = z; - - for (std::size_t j = 0; j < perm_size; j++) { - public_input.push_back(eval_s[i][j]); - var s = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].s[j] = s; - } - } - - std::array alpha_powers; - for (std::size_t i = 0; i < circuit_description::alpha_powers_n; i++) { - public_input.push_back(alpha_val.pow(i)); - alpha_powers[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zkp_zeta_val); - var zkp_zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = { - evals, alpha_powers, 21, beta, gamma, zkp_zeta}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/rpn_expression.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/rpn_expression.cpp deleted file mode 100644 index 8ef8a27620..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/rpn_expression.cpp +++ /dev/null @@ -1,1121 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Alisa Cherniaeva -// Copyright (c) 2022 Ekaterina Chukavina -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_detail_rpn_expression_test - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite) -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_lagrange) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = zk::blueprint_assignment_table; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - typename BlueprintFieldType::value_type result = 0x1E2AE13562C642ED35261EB5927960C75105852F6F962D463BF981EF969050C4_cppui_modular255; - constexpr const char *s ="UnnormalizedLagrangeBasis(-4);\0"; - - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type alpha_val = - 0x0C0D3C26FCD47AFF64D9055FCE9858335ADE6B0706289AB4019630784E8B7527_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000059E5EE71CFF4B24FA2A3A131F77CFFC8_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000085D434481165E938FEA628354AA5B9E5_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x00_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x35ABB5BAFCAFF26391BB9A23EA996222FD0D4B0F392A78E4AFD5610ECE614E49_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x1421DEB15F5CE205068512B010382353DC0AA1B40386A1C14774C65664BB8182_cppui_modular256; - std::size_t domain_size = 1024; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - evals[0].w[3] = gamma; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&gamma_val, &beta_val, &result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(assignment.var_value(real_res.output)== result); - - }; - - test_component(params, public_input, - result_check); -} -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_vanishes) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = zk::blueprint_assignment_table; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - typename BlueprintFieldType::value_type result = 0x2692756edf321604d16f4d2151fbad0a9780c75ebb49f9b56a89adde2f6a1f48_cppui_modular255; - constexpr const char *s ="Alpha;Pow(24);VanishesOnLast4Rows;\0"; - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type group_gen = BlueprintFieldType::value_type::one(); - - typename BlueprintFieldType::value_type alpha_val = - 0x0C0D3C26FCD47AFF64D9055FCE9858335ADE6B0706289AB4019630784E8B7527_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000059E5EE71CFF4B24FA2A3A131F77CFFC8_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000085D434481165E938FEA628354AA5B9E5_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x00_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x35ABB5BAFCAFF26391BB9A23EA996222FD0D4B0F392A78E4AFD5610ECE614E49_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x1421DEB15F5CE205068512B010382353DC0AA1B40386A1C14774C65664BB8182_cppui_modular256; - std::size_t domain_size = 1024; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - evals[0].w[3] = gamma; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&gamma_val, &beta_val, &result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(assignment.var_value(real_res.output)== result); - - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_dup) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Alpha;Beta;Cell(Variable { col: Witness(3), row: Curr });Dup;\0"; - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type alpha_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D5_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D3_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - evals[0].w[3] = gamma; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&gamma_val, &beta_val](AssignmentType &assignment, component_type::result_type &real_res) { - assert(gamma_val == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_sub) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Alpha;Beta;Cell(Variable { col: Witness(3), row: Curr });Sub;\0"; - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type alpha_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D5_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D3_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - evals[0].w[3] = gamma; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&gamma_val, &beta_val](AssignmentType &assignment, component_type::result_type &real_res) { - assert((beta_val - gamma_val) == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_add) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Alpha;Beta;Cell(Variable { col: Witness(3), row: Curr });Add;\0"; - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type alpha_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D5_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D3_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - evals[0].w[3] = gamma; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&gamma_val, &beta_val](AssignmentType &assignment, component_type::result_type &real_res) { - assert((gamma_val + beta_val) == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_mul) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Alpha;Beta;Cell(Variable { col: Witness(3), row: Curr });Mul;\0"; - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type alpha_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D5_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D3_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - evals[0].w[3] = gamma; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&gamma_val, &beta_val](AssignmentType &assignment, component_type::result_type &real_res) { - assert((gamma_val * beta_val) == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_pow) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Alpha;Beta;Cell(Variable { col: Witness(10), row: Curr });Pow(2);\0"; - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type alpha_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D5_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D3_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - evals[0].w[10] = gamma; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&gamma_val, &beta_val](AssignmentType &assignment, component_type::result_type &real_res) { - assert((gamma_val * gamma_val) == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_load) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Alpha;Store;Beta;Alpha;Pow(20);Add;Alpha;Load(0);Sub;Add;Sub;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;\0"; // - alpha^20 - beta + alpha + 1 - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type alpha_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D5_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8D3_cppui_modular256; - typename BlueprintFieldType::value_type joint_combiner_val = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - typename BlueprintFieldType::value_type expected_result = -alpha_val.pow(20) + alpha_val - beta_val + 1; - - std::vector public_input; - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_val); - var joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations; - std::array evals; - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_complete_add) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Store;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Load(0);Mul;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Dup;Add;Sub;Load(1);Sub;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Load(0);Cell(Variable { col: Witness(8), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(1), row: Curr });Sub;Store;Sub;Mul;Add;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Cell(Variable { col: Witness(4), row: Curr });Add;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Cell(Variable { col: Witness(1), row: Curr });Sub;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(5);Load(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(6);Load(2);Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;\0"; - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type expected_result = 0x0EF5278F0AD55CDE149D4E396A01E9B72A0D73FB4CF033C570B1B7E0C24C5FCE_cppui_modular256; - - std::array - eval0_w = { - 0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256, - 0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256, - 0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256, - 0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256, - 0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256, - 0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256, - 0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256, - 0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256, - 0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256, - 0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256, - 0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256, - 0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256, - 0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256, - 0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256, - 0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval0_z = 0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256; - - std::array eval0_s = { - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256, - 0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256, - 0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256, - 0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256, - 0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256, - 0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256 - }; - - std::array - eval1_w = { - 0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256, - 0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256, - 0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256, - 0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256, - 0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256, - 0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256, - 0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256, - 0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256, - 0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256, - 0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256, - 0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256, - 0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256, - 0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256, - 0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256, - 0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval1_z = 0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256; - - std::array eval1_s = { - 0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256, - 0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256, - 0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256, - 0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256, - 0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256, - 0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256, - }; - - std::array, 2> eval_w = {eval0_w, eval1_w}; - std::array eval_z = {eval0_z, eval1_z}; - std::array, 2> eval_s = {eval0_s, eval1_s}; - - typename BlueprintFieldType::value_type alpha_val = - 0x322D5D64C86AFB168AC57D2D8AB3512647B4802C8DC4DE07DB2C51E094C4D9B7_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x000000000000000000000000000000005D27C70754796C79C9D9958673CF2ABA_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x00000000000000000000000000000000C2278ADB337FA07CDFB689C4651FFD6D_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256; - - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - std::vector public_input; - - public_input.push_back(0); - var zero = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations< - BlueprintFieldType, kimchi_params>; - std::array evals; - - for (std::size_t i = 0; i < 2; i++) { - for (std::size_t j = 0; j < witness_columns; j++) { - public_input.push_back(eval_w[i][j]); - var w = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].w[j] = w; - } - - public_input.push_back(eval_z[i]); - var z = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].z = z; - - for (std::size_t j = 0; j < perm_size; j++) { - public_input.push_back(eval_s[i][j]); - var s = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].s[j] = s; - } - - evals[i].poseidon_selector = zero; - evals[i].generic_selector = zero; - } - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - var joint_combiner = zero; - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_rpn_expression_test_suite_endo_mul) { - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - constexpr const char *s = "Cell(Variable { col: Witness(11), row: Curr });Dup;Mul;Cell(Variable { col: Witness(11), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(12), row: Curr });Dup;Mul;Cell(Variable { col: Witness(12), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(13), row: Curr });Dup;Mul;Cell(Variable { col: Witness(13), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(14), row: Curr });Dup;Mul;Cell(Variable { col: Witness(14), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(11), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(4), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(12), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Dup;Mul;Store;Sub;Load(0);Add;Cell(Variable { col: Witness(4), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Store;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(5), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(5), row: Curr });Dup;Add;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(6);Load(3);Dup;Mul;Load(2);Dup;Mul;Load(1);Load(0);Sub;Cell(Variable { col: Witness(7), row: Curr });Add;Mul;Sub;Mul;Add;Alpha;Pow(7);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(13), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(14), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(7), row: Curr });Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Dup;Mul;Store;Sub;Load(4);Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(4), row: Next });Sub;Store;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(8), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Load(6);Mul;Sub;Mul;Add;Alpha;Pow(9);Load(7);Dup;Mul;Load(6);Dup;Mul;Load(5);Load(4);Sub;Cell(Variable { col: Witness(4), row: Next });Add;Mul;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(6), row: Curr });Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;\0"; - - const std::size_t array_size = zk::components::count_delimiters(s); - const std::size_t N = zk::components::rpn_component_rows(s); - using component_type = zk::components::rpn_expression; - - typename BlueprintFieldType::value_type expected_result = 0x259D030170979C4754D0CEBF9E6AE529563BEB3A27C7003F57CCD4F80F875E4B_cppui_modular256; - - std::array - eval0_w = { - 0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256, - 0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256, - 0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256, - 0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256, - 0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256, - 0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256, - 0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256, - 0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256, - 0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256, - 0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256, - 0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256, - 0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256, - 0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256, - 0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256, - 0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval0_z = 0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256; - - std::array eval0_s = { - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256, - 0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256, - 0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256, - 0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256, - 0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256, - 0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256 - }; - - std::array - eval1_w = { - 0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256, - 0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256, - 0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256, - 0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256, - 0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256, - 0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256, - 0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256, - 0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256, - 0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256, - 0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256, - 0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256, - 0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256, - 0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256, - 0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256, - 0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256 - }; - - typename BlueprintFieldType::value_type eval1_z = 0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256; - - std::array eval1_s = { - 0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256, - 0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256, - 0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256, - 0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256, - 0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256, - 0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256, - }; - - std::array, 2> eval_w = {eval0_w, eval1_w}; - std::array eval_z = {eval0_z, eval1_z}; - std::array, 2> eval_s = {eval0_s, eval1_s}; - - typename BlueprintFieldType::value_type alpha_val = - 0x322D5D64C86AFB168AC57D2D8AB3512647B4802C8DC4DE07DB2C51E094C4D9B7_cppui_modular256; - typename BlueprintFieldType::value_type beta_val = - 0x000000000000000000000000000000005D27C70754796C79C9D9958673CF2ABA_cppui_modular256; - typename BlueprintFieldType::value_type gamma_val = - 0x00000000000000000000000000000000C2278ADB337FA07CDFB689C4651FFD6D_cppui_modular256; - typename BlueprintFieldType::value_type zeta_val = - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256; - - typename BlueprintFieldType::value_type omega_val = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - - std::vector public_input; - - public_input.push_back(0); - var zero = var(0, public_input.size() - 1, false, var::column_type::public_input); - - using evaluations_type = typename zk::components::kimchi_proof_evaluations< - BlueprintFieldType, kimchi_params>; - std::array evals; - - for (std::size_t i = 0; i < 2; i++) { - for (std::size_t j = 0; j < witness_columns; j++) { - public_input.push_back(eval_w[i][j]); - var w = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].w[j] = w; - } - - public_input.push_back(eval_z[i]); - var z = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].z = z; - - for (std::size_t j = 0; j < perm_size; j++) { - public_input.push_back(eval_s[i][j]); - var s = var(0, public_input.size() - 1, false, var::column_type::public_input); - evals[i].s[j] = s; - } - - evals[i].poseidon_selector = zero; - evals[i].generic_selector = zero; - } - - public_input.push_back(alpha_val); - var alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(beta_val); - var beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(gamma_val); - var gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_val); - var zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - - var joint_combiner = zero; - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = {s, zeta, alpha, beta, gamma, joint_combiner, evals, omega, domain_size}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/unnormalized_lagrange_basis.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/unnormalized_lagrange_basis.cpp deleted file mode 100644 index 3dfd436082..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/unnormalized_lagrange_basis.cpp +++ /dev/null @@ -1,140 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_details_vanishes_on_last_4_rows - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_unnormalized_lagrange_basis_positive_power) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 4; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - using component_type = zk::components::unnormalized_lagrange_basis; - - typename BlueprintFieldType::value_type group_gen = 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - int ith = 5; - typename BlueprintFieldType::value_type x = algebra::random_element(); - typename BlueprintFieldType::value_type group_gen_pow = group_gen.pow(ith); - typename BlueprintFieldType::value_type expected_res = (x.pow(domain_size) - 1) * (x - group_gen_pow).inversed(); - - std::vector public_input = {group_gen, x, expected_res}; - - typename component_type::params_type params = { - var(0, 0, false, var::column_type::public_input), domain_size, var(0, 1, false, var::column_type::public_input), ith}; - - auto result_check = [&expected_res](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(expected_res == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "vanishes_on_last_4_rows: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_unnormalized_lagrange_basis_negative_power) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 4; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - using component_type = zk::components::unnormalized_lagrange_basis; - - typename BlueprintFieldType::value_type group_gen = 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - int ith = -5; - typename BlueprintFieldType::value_type x = algebra::random_element(); - typename BlueprintFieldType::value_type group_gen_pow = group_gen.pow(-ith).inversed(); - typename BlueprintFieldType::value_type expected_res = (x.pow(domain_size) - 1) * (x - group_gen_pow).inversed(); - - std::vector public_input = {group_gen, x, expected_res}; - - typename component_type::params_type params = { - var(0, 0, false, var::column_type::public_input), domain_size, var(0, 1, false, var::column_type::public_input), ith}; - - auto result_check = [&expected_res](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(expected_res == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "vanishes_on_last_4_rows: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/vanishes_on_last_4_rows.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/vanishes_on_last_4_rows.cpp deleted file mode 100644 index 4b89dff727..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/constraints/vanishes_on_last_4_rows.cpp +++ /dev/null @@ -1,97 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_details_vanishes_on_last_4_rows - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_zkpm) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 4; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - using component_type = zk::components::vanishes_on_last_4_rows; - - typename BlueprintFieldType::value_type group_gen = algebra::random_element(); - std::size_t domain_size = 1000; - typename BlueprintFieldType::value_type x = algebra::random_element(); - typename BlueprintFieldType::value_type group_gen_pow = group_gen.pow(domain_size - 3 - 1); - typename BlueprintFieldType::value_type expected_res = (x - group_gen_pow) * (x - group_gen_pow * group_gen) * - (x - group_gen_pow * group_gen * group_gen) * - (x - group_gen_pow * group_gen * group_gen * group_gen); - - std::vector public_input = {group_gen, x, expected_res}; - - typename component_type::params_type params = { - var(0, 0, false, var::column_type::public_input), domain_size, var(0, 1, false, var::column_type::public_input)}; - - auto result_check = [&expected_res](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(expected_res == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "vanishes_on_last_4_rows: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/ft_eval.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/ft_eval.cpp deleted file mode 100644 index 770bec958a..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/ft_eval.cpp +++ /dev/null @@ -1,244 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_ft_eval_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -#include "test_plonk_component.hpp" -#include "../proof_data.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_ft_eval_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_ft_eval_test) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 10; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 0; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - constexpr static const std::size_t srs_len = 1; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - zk::components::kimchi_verifier_index_scalar verifier_index; - - using component_type = zk::components:: - ft_eval; - - zk::snark::pickles_proof kimchi_proof = test_proof(); - - typename BlueprintFieldType::value_type omega_value = - 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size_value = 512; - - std::vector shifts = { - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256, - 0x00B9CDC8FD0BD4B27E2A74AF7AEBD5734D52D75BDF85EBF1CAD03413E914A2E3_cppui_modular256, - 0x0033BFCF8112720332825BD83D44D92CADC0C30466E8102C419C30FA2665695A_cppui_modular256, - 0x0087F4BB29954E16960F2DE3A1FA5AC7B62146DB348C7C9F0E8BF10B2C8E8411_cppui_modular256, - 0x00EC71373B9F6CF15ED1949647365DB60B2E26C3A8ABBA5BB06BF23E9DBE5893_cppui_modular256, - 0x00F39197CC4C55084C68D31F64F1A172406B585CB86445F00C248C721C496D10_cppui_modular256, - 0x00B8DD039799DBEE12D2E6A4299A83E067353C0143C5DFD203190C239159EEA3_cppui_modular256, - }; - typename BlueprintFieldType::value_type zeta_value = - 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256; - - typename BlueprintFieldType::value_type joint_combiner_value = 0; - typename BlueprintFieldType::value_type beta_value = 0x000000000000000000000000000000005D27C70754796C79C9D9958673CF2ABA_cppui_modular256; - typename BlueprintFieldType::value_type gamma_value = 0x00000000000000000000000000000000C2278ADB337FA07CDFB689C4651FFD6D_cppui_modular256; - typename BlueprintFieldType::value_type alpha_value = - 0x322D5D64C86AFB168AC57D2D8AB3512647B4802C8DC4DE07DB2C51E094C4D9B7_cppui_modular256; - - std::array, 2> w = {{ - {{ 0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256, - 0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256, - 0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256, - 0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256, - 0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256, - 0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256, - 0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256, - 0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256, - 0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256, - 0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256, - 0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256, - 0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256, - 0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256, - 0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256, - 0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256,}}, - - {{0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256, - 0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256, - 0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256, - 0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256, - 0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256, - 0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256, - 0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256, - 0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256, - 0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256, - 0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256, - 0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256, - 0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256, - 0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256, - 0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256, - 0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256}}, - }}; - - std::array, 2> s = {{ - {{0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256, - 0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256, - 0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256, - 0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256, - 0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256, - 0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256,}}, - - {{0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256, - 0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256, - 0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256, - 0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256, - 0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256, - 0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256,}}, - }}; - - std::array z = { - 0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256, - 0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256, - }; - - typename BlueprintFieldType::value_type expected_result = 0x0C5FFA9CCCAB64B985EB4467CE3933E6F4BFF202AEA53ACD4E27C0C6BBE902B2_cppui_modular256; - - - - std::vector public_input = {}; - - constexpr const std::size_t alpha_powers_n = index_terms_list::alpha_powers_n; - std::array alpha_powers; - for (std::size_t i = 0; i < alpha_powers_n; i++) { - public_input.push_back(power(alpha_value, i)); - alpha_powers[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - public_input.push_back(beta_value); - var beta(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(gamma_value); - var gamma(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(joint_combiner_value); - var joint_combiner(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(omega_value); - var omega(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_value); - var zeta(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_value.pow(domain_size_value)); - var zeta_n(0, public_input.size() - 1, false, var::column_type::public_input); - - std::array public_eval; - - verifier_index.omega = omega; - verifier_index.domain_size = domain_size_value; - - for (std::size_t i = 0; i < shifts.size(); i++) { - public_input.push_back(shifts[i]); - verifier_index.shift[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - std::array, 2> evals; - - for (std::size_t i = 0; i < 2; i++) { - for (std::size_t j = 0; j < witness_columns; j++) { - public_input.push_back(w[i][j]); - evals[i].w[j] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - for (std::size_t j = 0; j < perm_size; j++) { - public_input.push_back(s[i][j]); - evals[i].s[j] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - public_input.push_back(z[i]); - evals[i].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - typename component_type::params_type params = {verifier_index, alpha_powers, - evals, gamma, beta, - zeta, zeta_n, joint_combiner, - public_eval}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component( - params, public_input, result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/lagrange_denominators.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/lagrange_denominators.cpp deleted file mode 100644 index ab1e76c61d..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/lagrange_denominators.cpp +++ /dev/null @@ -1,177 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_lagrange_denominators_test - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include "../../../test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_lagrange_denominators) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 2; - constexpr std::size_t n = 5; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::lagrange_denominators; - - var one(0, 0, false, var::column_type::public_input); - var zeta(0, 1, false, var::column_type::public_input); - var zeta_omega(0, 2, false, var::column_type::public_input); - typename BlueprintFieldType::value_type zeta_value = algebra::random_element(); - typename BlueprintFieldType::value_type omega_value = algebra::random_element(); - typename BlueprintFieldType::value_type zeta_omega_value = zeta_value * omega_value; - - std::vector public_input = {1, zeta_value, zeta_omega_value}; - - std::array omega_powers; - std::array omega_powers_values; - for (std::size_t i = 0; i < n; i++) { - omega_powers_values[i] = power(omega_value, i); - omega_powers[i] = var(0, 3 + i, false, var::column_type::public_input); - public_input.push_back(omega_powers_values[i]); - } - - typename component_type::params_type params = {zeta, zeta_omega, omega_powers, one}; - - std::vector expected_result(2 * n); - for (std::size_t i = 0; i < n; i++) { - expected_result[i] = (zeta_value - omega_powers_values[i]).inversed(); - expected_result[n + i] = (zeta_omega_value - omega_powers_values[i]).inversed(); - } - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - for (std::size_t i = 0; i < n; i++) { - assert(expected_result[i] == assignment.var_value(real_res.output[i])); - assert(expected_result[n + i] == assignment.var_value(real_res.output[n + i])); - } - }; - - test_component( - params, public_input, result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "lagrange_denominators_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_lagrange_denominators_real_data) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 2; - constexpr std::size_t n = 5; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = zk::blueprint_assignment_table; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::lagrange_denominators; - - var one(0, 0, false, var::column_type::public_input); - var zeta(0, 1, false, var::column_type::public_input); - var zeta_omega(0, 2, false, var::column_type::public_input); - typename BlueprintFieldType::value_type zeta_value = 0x2F51244846217BCB9DE92C5903AC022FAD29555920E45344407B680D24D550F1_cppui_modular256; - typename BlueprintFieldType::value_type omega_value = 0x0CC3380DC616F2E1DAF29AD1560833ED3BAEA3393ECEB7BC8FA36376929B78CC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_omega_value = zeta_value * omega_value; - - std::vector public_input = {1, zeta_value, zeta_omega_value}; - - std::array omega_powers; - std::array omega_powers_values; - for (std::size_t i = 0; i < n; i++) { - omega_powers_values[i] = power(omega_value, i); - omega_powers[i] = var(0, 3 + i, false, var::column_type::public_input); - public_input.push_back(omega_powers_values[i]); - } - - typename component_type::params_type params = {zeta, zeta_omega, omega_powers, one}; - - std::vector expected_result = {0x04B51DBD555265C26C890F9356AF30F1EC63AFED99D936BDC3D491BA6A06062C_cppui_modular256, - 0x29E0A0DC50CFA8107324A4C83B2358EFEDBDE840B9C08F5550369CAA41A5A85F_cppui_modular256, - 0x35AF24EA5A46E07C6C1B50C7522A3DF49CD56EC788096049357C1BD58B97C90A_cppui_modular256, - 0x2D3A6A9C66D28D2590A2685AA2957BA6E88A0B4261F8CA691283B12CB8400CD2_cppui_modular256, - 0x0E0ED7C2F3B9C67A4C214B96ADD90D88530FA109C3161B408870B6BB1D585B12_cppui_modular256, - 0x36A1234D72594664479AE1EB7D5E2DC9CC89CD1CAD0DE2F32829432AE7CD2D9E_cppui_modular256, - 0x31D2FDE1CDAC87CCC8D10CAE161DD72C5783E200B8C42D8FB3B7E4E7E8DE1CD4_cppui_modular256, - 0x1031F1E65443D7EE7BF96057030E67B95DE36784C910A58A5B771F0BC9D67FE9_cppui_modular256, - 0x15A16E2EE8DB03DE98FB82AFBDE4018960F2A0FA1CD257C28E8C4160679CA950_cppui_modular256, - 0x0F462B51E39AC7A0BAFF4743144FE5F95EF7C60F7571231ADF708CBD007BD581_cppui_modular256}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - for (std::size_t i = 0; i < n; i++) { - assert(expected_result[i] == assignment.var_value(real_res.output[i])); - assert(expected_result[n + i] == assignment.var_value(real_res.output[n + i])); - } - }; - - test_component( - params, public_input, result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "lagrange_denominators_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/oracles_cip.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/oracles_cip.cpp deleted file mode 100644 index c217b38ad2..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/oracles_cip.cpp +++ /dev/null @@ -1,460 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Ekaterina Chukavina -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_verifiers_kimchi_detail_oracles_cip_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms_cip.hpp" -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -#include "../../../test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_verifiers_kimchi_detail_oracles_cip_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_verifiers_kimchi_detail_oracles_cip_test2) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 0; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 0; - - constexpr static const std::size_t eval_points_amount = 2; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_cip_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = - zk::components::oracles_cip; - - std::vector public_input; - - // component input - var v; - var u; - var ft_eval0; - var ft_eval1; - std::array< - std::array< - std::array, - eval_points_amount>, - kimchi_params::prev_challenges_size> polys; - std::array p_eval; - std::array, - eval_points_amount> evals; - typename BlueprintFieldType::value_type expected_result = 0x354a5816578a0f9d8d9ddb7fa580573882cb771454a716e4838c1b29e24034a2_cppui_modular255; - - public_input.push_back(0x1A27603517D952BB0060BB01DE0DA94CFC587748DD85D4987C14883E3BA51BAB_cppui_modular255);//algebra::random_element()); - v = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0CD95BF326F609A8D27F9CD8CFA5C1A0662C588EEA1E5B84CD517DC5BA09C502_cppui_modular255);//algebra::random_element()); - u = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0C5FFA9CCCAB64B985EB4467CE3933E6F4BFF202AEA53ACD4E27C0C6BBE902B2_cppui_modular255); - ft_eval0 = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x16FE1AE7F56997161DB512632BE7BFA337F47F422E0D01AF06DE298DD8C429D5_cppui_modular255); - ft_eval1 = var(0, public_input.size() - 1, false, var::column_type::public_input); - - - // } - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//x35557EBE9125C357A755F10D90F82A78DE0522FCBA6A3C2039F7F4F95B24F1BC_cppui_modular255);//algebra::random_element()); - p_eval[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//0x175762EC87AE06A44B63D3F5626B76591A06D32BB6A2FCCA8A62A36C1D7A59E7_cppui_modular255);//algebra::random_element()); - p_eval[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular255);//lgebra::random_element()); - evals[0].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular255); - evals[0].s[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular255); - evals[0].s[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular255); - evals[0].s[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular255); - evals[0].s[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular255); - evals[0].s[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular255); - evals[0].s[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - - public_input.push_back(0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular255); - evals[0].w[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular255); - evals[0].w[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular255); - evals[0].w[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular255); - evals[0].w[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular255); - evals[0].w[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular255); - evals[0].w[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular255); - evals[0].w[6] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular255); - evals[0].w[7] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular255); - evals[0].w[8] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular255); - evals[0].w[9] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular255); - evals[0].w[10] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular255); - evals[0].w[11] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular255); - evals[0].w[12] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular255); - evals[0].w[13] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular255); - evals[0].w[14] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular255);//lgebra::random_element()); - evals[1].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular255); - evals[1].s[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular255); - evals[1].s[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular255); - evals[1].s[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular255); - evals[1].s[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular255); - evals[1].s[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular255); - evals[1].s[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - - public_input.push_back(0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular255); - evals[1].w[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular255); - evals[1].w[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular255); - evals[1].w[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular255); - evals[1].w[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular255); - evals[1].w[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular255); - evals[1].w[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular255); - evals[1].w[6] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular255); - evals[1].w[7] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular255); - evals[1].w[8] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular255); - evals[1].w[9] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular255); - evals[1].w[10] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular255); - evals[1].w[11] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular255); - evals[1].w[12] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular255); - evals[1].w[13] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular255); - evals[1].w[14] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//algebra::random_element()); - evals[0].generic_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//algebra::random_element()); - evals[0].poseidon_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//algebra::random_element()); - evals[1].generic_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//algebra::random_element()); - evals[1].poseidon_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - - - typename component_type::params_type params = { - v, - u, - ft_eval0, - ft_eval1, - polys, - p_eval, - evals - }; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_verifiers_kimchi_detail_oracles_cip_test) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 0; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - constexpr static const std::size_t eval_points_amount = 2; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = - zk::components::oracles_cip; - - std::vector public_input; - - // component input - var v; - var u; - var ft_eval0; - var ft_eval1; - std::array< - std::array< - std::array, - eval_points_amount>, - kimchi_params::prev_challenges_size> polys; - std::array p_eval; - std::array, - eval_points_amount> evals; - typename BlueprintFieldType::value_type expected_result = 0x092931C57CBF91630B192C9BB166864F5D3F7E3D2C9217FDB382DB82564D4607_cppui_modular255; - - public_input.push_back(0x0416077232C8D4EFD0D1120ACC756A397EA8DCDCF792E5E0F9CDFF82BDF42D2D_cppui_modular255);//algebra::random_element()); - v = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x2E0BB5E9179A691E51FB7336CB161A330268EE64C745078D6FD460E02A76729D_cppui_modular255);//algebra::random_element()); - u = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x36B33A1266C7DCF380A308055D32978AE1F469723AAEB3EDBC512B18D6C095BD_cppui_modular255); - ft_eval0 = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x30B81DB776FF4C13A0BF7BAB87E9768D7ADE52CD3D29549FB1E08798D6A3EF9E_cppui_modular255); - ft_eval1 = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2C27D4E04141972BE1147405F66D1EBAF82622DC3A0B97AF902988E38E76614F_cppui_modular255);//algebra::random_element()); - polys[0][0][0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2034A41141E8DAFD88D5625DC695D10351CD8DACB545B4D260560DE31EF123EF_cppui_modular255);//algebra::random_element()); - polys[0][0][1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//x35557EBE9125C357A755F10D90F82A78DE0522FCBA6A3C2039F7F4F95B24F1BC_cppui_modular255);//algebra::random_element()); - p_eval[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//0x175762EC87AE06A44B63D3F5626B76591A06D32BB6A2FCCA8A62A36C1D7A59E7_cppui_modular255);//algebra::random_element()); - p_eval[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x3F8D8F25CB5A2D2533B3063716C83ADDBFF999C60BC5DEBC3A633EF82EBE108D_cppui_modular255);//lgebra::random_element()); - evals[0].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x35557EBE9125C357A755F10D90F82A78DE0522FCBA6A3C2039F7F4F95B24F1BC_cppui_modular255); - evals[0].s[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3BD62FADFBC967B2DDE2CD067A531BF158C20BBE1B42BB53BF7EE8EC3834555F_cppui_modular255); - evals[0].s[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1D4D2D839270B2866A00334B3CD86E5B7A759B59329F1662039D6D2124FEE4D4_cppui_modular255); - evals[0].s[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2CA95F70D9D97BD9AB7F633B85556C1ABD1938D49ED2975FE62319951E69A022_cppui_modular255); - evals[0].s[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2601AC11905952B2EFD1BB4BE50AC2E86BBC421876C07312CFCC3AED17556926_cppui_modular255); - evals[0].s[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x16303670383248B3C7D5786C8161EE001848D3D86D98F1069A3E0136E8AF322F_cppui_modular255); - evals[0].s[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - - public_input.push_back(0x30AC247252D0ABAA93BDEEFBF27F4931E8F995D58AE78FC99910719A226ED51E_cppui_modular255); - evals[0].w[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0E22763F6B830A605362663C49102E31FE20AE4A653038C3007B45CC85CBB96A_cppui_modular255); - evals[0].w[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2B98C80C843569161306DD7C9FA11332358E5FBB48C5DAD801134AEBE9289DB7_cppui_modular255); - evals[0].w[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x090F19D99CE7C7CBD2AB54BCF631F8324AB57830230E83D1687E1F1E4C858203_cppui_modular255); - evals[0].w[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x26856BA6B59A2681924FCBFD4CC2DD32822329A106A425E66916243DAFE26650_cppui_modular255); - evals[0].w[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x03FBBD73CE4C853751F4433DA353C232974A4215E0ECCEDFD080F870133F4A9C_cppui_modular255); - evals[0].w[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x21720F40E6FEE3ED1198BA7DF9E4A732CEB7F386C48270F4D118FD8F769C2EE9_cppui_modular255); - evals[0].w[6] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3EE8610DFFB142A2D13D31BE50758C330625A4F7A8181309D1B102AED9F91336_cppui_modular255); - evals[0].w[7] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1C5EB2DB1863A15890E1A8FEA70671331B4CBD6C8260BC03391BD6E13D55F782_cppui_modular255); - evals[0].w[8] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x39D504A83116000E5086203EFD97563352BA6EDD65F65E1839B3DC00A0B2DBCF_cppui_modular255); - evals[0].w[9] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x174B567549C85EC4102A977F54283B3367E18752403F0711A11EB033040FC01B_cppui_modular255); - evals[0].w[10] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x34C1A842627ABD79CFCF0EBFAAB920339F4F38C323D4A926A1B6B552676CA468_cppui_modular255); - evals[0].w[11] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1237FA0F7B2D1C2F8F738600014A0533B4765137FE1D522009218984CAC988B4_cppui_modular255); - evals[0].w[12] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2FAE4BDC93DF7AE54F17FD4057DAEA33EBE402A8E1B2F43509B98EA42E266D01_cppui_modular255); - evals[0].w[13] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0D249DA9AC91D99B0EBC7480AE6BCF34010B1B1DBBFB9D2E712462D69183514D_cppui_modular255); - evals[0].w[14] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0D69C9B3BE918CB3DE88610F89D800916F23984B5BDFB8AE753C34C234BB1407_cppui_modular255);//lgebra::random_element()); - evals[1].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x175762EC87AE06A44B63D3F5626B76591A06D32BB6A2FCCA8A62A36C1D7A59E7_cppui_modular255); - evals[1].s[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1F21634F6AEDCADE3D878584CC9EDBA4DA6A496DA05D824FB7E741305AAD2C45_cppui_modular255); - evals[1].s[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1418CE39644E82C6411C9B3FD878FD781E3438B6B6B1106657AA48AE8F73F977_cppui_modular255); - evals[1].s[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x13D3942A39464ACE1D4D56A687BBC392DCE24392E4CC6F34063C8B1BBC8E3D71_cppui_modular255); - evals[1].s[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x31EFFF757DF39A98EB88BBBB86607EAE2AC1856A6F172BF969178B21975AFF4C_cppui_modular255); - evals[1].s[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x0EBAE7C12211C4631FD3B3B04F112D99393CA706E09B4B98F2502A3720785BBC_cppui_modular255); - evals[1].s[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - - public_input.push_back(0x0EC5173646D6F7F31A1774DFCC7FB5B0EA356EE2275EC698F7BEBE691BB84E06_cppui_modular255); - evals[1].w[0] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x30D45140D88575398696BB4F1FA770B2337A0DDED0586F664DCFDE63334BF64D_cppui_modular255); - evals[1].w[1] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x12E38B4B6A33F27FF31601BE72CF2BB35A7813DF70051F180AB3CD704ADF9E93_cppui_modular255); - evals[1].w[2] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x34F2C555FBE26FC65F95482DC5F6E6B4A3BCB2DC18FEC7E560C4ED6A627346DA_cppui_modular255); - evals[1].w[3] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1701FF608D90ED0CCC148E9D191EA1B5CABAB8DCB8AB77971DA8DC777A06EF20_cppui_modular255); - evals[1].w[4] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3911396B1F3F6A533893D50C6C465CB713FF57D961A5206473B9FC71919A9767_cppui_modular255); - evals[1].w[5] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1B207375B0EDE799A5131B7BBF6E17B83AFD5DDA0151D016309DEB7EA92E3FAD_cppui_modular255); - evals[1].w[6] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x3D2FAD80429C64E0119261EB1295D2B98441FCD6AA4B78E386AF0B78C0C1E7F4_cppui_modular255); - evals[1].w[7] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x1F3EE78AD44AE2267E11A85A65BD8DBAAB4002D749F828954392FA85D855903A_cppui_modular255); - evals[1].w[8] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x014E219565F95F6CEA90EEC9B8E548BBD23E08D7E9A4D8470076E992EFE93880_cppui_modular255); - evals[1].w[9] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x235D5B9FF7A7DCB3571035390C0D03BD1B82A7D4929E81145688098D077CE0C7_cppui_modular255); - evals[1].w[10] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x056C95AA895659F9C38F7BA85F34BEBE4280ADD5324B30C6136BF89A1F10890D_cppui_modular255); - evals[1].w[11] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x277BCFB51B04D740300EC217B25C79BF8BC54CD1DB44D993697D189436A43154_cppui_modular255); - evals[1].w[12] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x098B09BFACB354869C8E0887058434C0B2C352D27AF18945266107A14E37D99A_cppui_modular255); - evals[1].w[13] = var(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(0x2B9A43CA3E61D1CD090D4EF658ABEFC1FC07F1CF23EB32127C72279B65CB81E1_cppui_modular255); - evals[1].w[14] = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x28654BAD9D8CDFD846C0DB23E11CFE750DF683B9AC1F00BD1550778F27B28C70_cppui_modular255);//algebra::random_element()); - evals[0].generic_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//algebra::random_element()); - evals[0].poseidon_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x33018173752351E61F3CE0C02C14FCC1C936E2A9FC8713268ED5871BA404ECAF_cppui_modular255);//algebra::random_element()); - evals[1].generic_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255);//algebra::random_element()); - evals[1].poseidon_selector = var(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = { - v, - u, - ft_eval0, - ft_eval1, - polys, - p_eval, - evals - }; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/prepare_scalars.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/prepare_scalars.cpp deleted file mode 100644 index 8b82572b2f..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/prepare_scalars.cpp +++ /dev/null @@ -1,113 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_prepare_scalars_test - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_prepare_scalars_vesta) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 2; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr std::size_t InputSize = 5; - - using component_type = zk::components::prepare_scalars; - - std::vector scalars; - for (int i = 0; i < InputSize; ++i) { - scalars.push_back(algebra::random_element()); - } - - typename BlueprintFieldType::value_type base = 2; - typename BlueprintFieldType::value_type shift = base.pow(255) + 1; - - std::vector expected_res; - for (int i = 0; i < InputSize; ++i) { - expected_res.push_back((scalars[i] - shift) / 2); - } - - std::vector public_input; - for (int i = 0; i < InputSize; ++i) { - public_input.push_back(scalars[i]); - } - for (int i = 0; i < InputSize; ++i) { - public_input.push_back(expected_res[i]); - } - - typename component_type::params_type params = { - var(0, 0, false, var::column_type::public_input), var(0, 1, false, var::column_type::public_input), var(0, 2, false, var::column_type::public_input), - var(0, 3, false, var::column_type::public_input), var(0, 4, false, var::column_type::public_input)}; - - auto result_check = [&expected_res](AssignmentType &assignment, - component_type::result_type &real_res) { - for (int i = 0; i < InputSize; ++i) { - assert(expected_res[i] == assignment.var_value(real_res.output[i])); - } - }; - - test_component(params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "prepare scalars: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/prev_chal_evals.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/prev_chal_evals.cpp deleted file mode 100644 index 7e9eaa5c87..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/prev_chal_evals.cpp +++ /dev/null @@ -1,165 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_prev_chal_evals_test - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include "../../../test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -template -typename FieldType::value_type b_poly(const std::array &chals, - typename FieldType::value_type x) { - std::vector pow_twos; - pow_twos.push_back(x); - for (int i = 1; i < ChalAmount; ++i) { - pow_twos.push_back(pow_twos[i - 1] * pow_twos[i - 1]); - } - typename FieldType::value_type res = 1; - for (int i = 0; i < ChalAmount; ++i) { - res *= FieldType::value_type::one() + chals[i] * pow_twos[ChalAmount - 1 - i]; - } - return res; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_prev_chal_evals) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 5; - constexpr std::size_t n = 5; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t alpha_powers_n = 5; - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t srs_len = 10; - - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - - using component_type = zk::components:: - prev_chal_evals; - - std::vector public_input = {1, 0}; - var one(0, 0, false, var::column_type::public_input); - var zero(0, 1, false, var::column_type::public_input); - - // typename BlueprintFieldType::value_type zeta_value = algebra::random_element(); - // typename BlueprintFieldType::value_type omega_value = algebra::random_element(); - typename BlueprintFieldType::value_type zeta_value = 0x01751A5CCC6A9B9BDF660296AF5F7C80229DC97F3646FFC3729D827E80DF39DF_cppui_modular256; - //typename BlueprintFieldType::zeta_value * omega_value - typename BlueprintFieldType::value_type zeta_omega_value = 0x11039196D240AC7CC0D1A88749F716B6B025F6BCA2CBBD0B41D2DA46FCC90558_cppui_modular256; - - public_input.push_back(zeta_value); - var zeta(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(power(zeta_value, n)); - var zeta_pow_n(0, public_input.size() - 1, false, var::column_type::public_input); - - public_input.push_back(zeta_omega_value); - var zeta_omega(0, public_input.size() - 1, false, var::column_type::public_input); - public_input.push_back(power(zeta_omega_value, n)); - var zeta_omega_pow_n(0, public_input.size() - 1, false, var::column_type::public_input); - - std::array prev_challenges; - std::array prev_challenges_values; - std::array prev_challenges_values_from_mina; - prev_challenges_values_from_mina[0] = 0x2C0AD1A81FAC9BE59890BEA77119393E3E9EC523A44DF600FE2399C01AA76F70_cppui_modular256; - prev_challenges_values_from_mina[1] = 0x39F31DAAD9FA26835EB1F6ADB2DCE08649061681361B54082C1FA1CD800EEB97_cppui_modular256; - prev_challenges_values_from_mina[2] = 0x07DB69AD9447B12124D32EB3F4A087CE3126CEE2BE9BB8F3C0EE78EDE57667BD_cppui_modular256; - prev_challenges_values_from_mina[3] = 0x15C3B5B04E953BBEEAF466BA36642F163B8E2040506916FAEEEA80FB4ADDE3E4_cppui_modular256; - prev_challenges_values_from_mina[4] = 0x23AC01B308E2C65CB1159EC07827D65E45F5719DE23675021CE68908B045600B_cppui_modular256; - for (std::size_t i = 0; i < eval_rounds; i++) { - prev_challenges_values[i] = prev_challenges_values_from_mina[i]; - } - - - for (std::size_t i = 0; i < eval_rounds; i++) { - // prev_challenges_values[i] = algebra::random_element(); // - public_input.push_back(prev_challenges_values[i]); - prev_challenges[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - std::array evals = {zeta, zeta_omega}; - std::array evals_power = {zeta_pow_n, zeta_omega_pow_n}; - - typename component_type::params_type params = {prev_challenges, evals, evals_power, one, zero}; - - // r[0] = (zeta_pow_n - 1) * domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from 0 to PulicInputSize - // r[1] = (zeta_omega.pow(n) - 1) * index.domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from PulicInputSize to 2 * PulicInputSize - std::array expected_result; - expected_result[0] = b_poly(prev_challenges_values, zeta_value); - expected_result[1] = b_poly(prev_challenges_values, zeta_omega_value); - expected_result[2] = 0x03B060BB64B9D6627C7336873BA524D7B752598E8B3390647BDF6B70B5BB93FF_cppui_modular256; // r[0] from mina, == expected_result[0] - expected_result[3] = 0x39B7CA68618353B26F521A651FE3F9DD365401BC8B68B07FC6D656EB010A541B_cppui_modular256; // r[1] from mina, == expected_result[1] - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result[0] == assignment.var_value(real_res.output[0][0])); - assert(expected_result[1] == assignment.var_value(real_res.output[1][0])); - assert(expected_result[2] == assignment.var_value(real_res.output[0][0])); - assert(expected_result[3] == assignment.var_value(real_res.output[1][0])); - }; - - test_component( - params, public_input, result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "prev_chal_evals_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/public_evaluations.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/public_evaluations.cpp deleted file mode 100644 index 83e5b60893..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/public_evaluations.cpp +++ /dev/null @@ -1,334 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_publuc_evaluations_test - -#include - -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include "../../../test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_publuc_evaluations) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 5; - constexpr std::size_t n = 5; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::public_evaluations; - - var one(0, 0, false, var::column_type::public_input); - var zeta_pow_n(0, 1, false, var::column_type::public_input); - var zeta_omega_pow_n(0, 2, false, var::column_type::public_input); - typename BlueprintFieldType::value_type zeta_value = algebra::random_element(); - typename BlueprintFieldType::value_type omega_value = algebra::random_element(); - typename BlueprintFieldType::value_type zeta_omega_value = zeta_value * omega_value; - constexpr std::size_t domain = 5; - - std::vector public_input = {1, power(zeta_value, domain), - power(zeta_omega_value, domain)}; - - std::array omega_powers; - std::array omega_powers_values; - for (std::size_t i = 0; i < n; i++) { - omega_powers_values[i] = power(omega_value, i); - omega_powers[i] = var(0, 3 + i, false, var::column_type::public_input); - public_input.push_back(omega_powers_values[i]); - } - - std::array lagrange_base; - std::vector lagrange_base_values(2 * n); - for (std::size_t i = 0; i < n; i++) { - lagrange_base_values[i] = (zeta_value - omega_powers_values[i]).inversed(); - lagrange_base_values[n + i] = (zeta_omega_value - omega_powers_values[i]).inversed(); - } - - for (std::size_t i = 0; i < lagrange_base.size(); i++) { - public_input.push_back(lagrange_base_values[i]); - lagrange_base[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - std::array pi; - std::array pi_values; - for (std::size_t i = 0; i < n; i++) { - pi_values[i] = algebra::random_element(); - public_input.push_back(pi_values[i]); - pi[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - typename BlueprintFieldType::value_type domain_size_value = 15; - public_input.push_back(domain_size_value); - var domain_size(0, public_input.size() - 1, false, var::column_type::public_input); - - typename BlueprintFieldType::value_type zero_value = 0; - public_input.push_back(zero_value); - var zero(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = {zeta_pow_n, zeta_omega_pow_n, pi, lagrange_base, - omega_powers, domain_size, one, zero}; - - // r[0] = (zeta_pow_n - 1) * domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from 0 to PulicInputSize - // r[1] = (zeta_omega.pow(n) - 1) * index.domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from PulicInputSize to 2 * PulicInputSize - std::array expected_result = {0, 0}; - for (std::size_t j = 0; j < 2; j++) { - for (std::size_t i = 0; i < n; i++) { - expected_result[j] = - expected_result[j] + (-lagrange_base_values[j * n + i] * pi_values[i] * omega_powers_values[i]); - } - typename BlueprintFieldType::value_type tmp = j == 0 ? power(zeta_value, n) : power(zeta_omega_value, n); - expected_result[j] = expected_result[j] * domain_size_value.inversed() * (tmp - 1); - } - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result[0] == assignment.var_value(real_res.output[0])); - assert(expected_result[1] == assignment.var_value(real_res.output[1])); - }; - - test_component( - params, public_input, result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "public_evaluations_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_real_data) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 5; - constexpr std::size_t n = 5; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = zk::blueprint_assignment_table; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::public_evaluations; - - var one(0, 0, false, var::column_type::public_input); - var zeta_pow_n(0, 1, false, var::column_type::public_input); - var zeta_omega_pow_n(0, 2, false, var::column_type::public_input); - typename BlueprintFieldType::value_type zeta_value = 0x2F51244846217BCB9DE92C5903AC022FAD29555920E45344407B680D24D550F1_cppui_modular256; - typename BlueprintFieldType::value_type omega_value = 0x0CC3380DC616F2E1DAF29AD1560833ED3BAEA3393ECEB7BC8FA36376929B78CC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_omega_value = zeta_value * omega_value; - constexpr std::size_t domain = 32; - - std::vector public_input = {1, power(zeta_value, domain), - power(zeta_omega_value, domain)}; - std::array omega_powers; - std::array omega_powers_values; - for (std::size_t i = 0; i < n; i++) { - omega_powers_values[i] = power(omega_value, i); - omega_powers[i] = var(0, 3 + i, false, var::column_type::public_input); - public_input.push_back(omega_powers_values[i]); - } - - std::array lagrange_base; - std::vector lagrange_base_values(2 * n); - for (std::size_t i = 0; i < n; i++) { - lagrange_base_values[i] = (zeta_value - omega_powers_values[i]).inversed(); - lagrange_base_values[n + i] = (zeta_omega_value - omega_powers_values[i]).inversed(); - } - - for (std::size_t i = 0; i < lagrange_base.size(); i++) { - public_input.push_back(lagrange_base_values[i]); - lagrange_base[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - std::array pi; - std::array pi_values; - for (std::size_t i = 0; i < n; i++) { - pi_values[i] = 0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256; - public_input.push_back(pi_values[i]); - pi[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - typename BlueprintFieldType::value_type domain_size_value = 32; - public_input.push_back(domain_size_value); - var domain_size(0, public_input.size() - 1, false, var::column_type::public_input); - - typename BlueprintFieldType::value_type zero_value = 0; - public_input.push_back(zero_value); - var zero(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = {zeta_pow_n, zeta_omega_pow_n, pi, lagrange_base, - omega_powers, domain_size, one, zero}; - - // r[0] = (zeta_pow_n - 1) * domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from 0 to PulicInputSize - // r[1] = (zeta_omega.pow(n) - 1) * index.domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from PulicInputSize to 2 * PulicInputSize - std::array expected_result = {0x18D62B16440429CDC5B94B8D9DC8A550535487AA7B64822433AD5E762009BD7C_cppui_modular256, - 0x32B7DA94FAF98733D833AFE878FA7775452875BCBC8A953CEF1002C7B3D24033_cppui_modular256}; - - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result[0] == assignment.var_value(real_res.output[0])); - assert(expected_result[1] == assignment.var_value(real_res.output[1])); - }; - - test_component( - params, public_input, result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "public_evaluations_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_no_public_input) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 5; - constexpr std::size_t n = 0; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = zk::blueprint_assignment_table; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::public_evaluations; - - var one(0, 0, false, var::column_type::public_input); - var zeta_pow_n(0, 1, false, var::column_type::public_input); - var zeta_omega_pow_n(0, 2, false, var::column_type::public_input); - typename BlueprintFieldType::value_type zeta_value = 0x2F51244846217BCB9DE92C5903AC022FAD29555920E45344407B680D24D550F1_cppui_modular256; - typename BlueprintFieldType::value_type omega_value = 0x0CC3380DC616F2E1DAF29AD1560833ED3BAEA3393ECEB7BC8FA36376929B78CC_cppui_modular256; - typename BlueprintFieldType::value_type zeta_omega_value = zeta_value * omega_value; - constexpr std::size_t domain = 32; - - std::vector public_input = {1, power(zeta_value, domain), - power(zeta_omega_value, domain)}; - - std::array omega_powers; - std::array omega_powers_values; - for (std::size_t i = 0; i < n; i++) { - omega_powers_values[i] = power(omega_value, i); - omega_powers[i] = var(0, 3 + i, false, var::column_type::public_input); - public_input.push_back(omega_powers_values[i]); - } - - std::array lagrange_base; - std::vector lagrange_base_values(2 * n); - for (std::size_t i = 0; i < n; i++) { - lagrange_base_values[i] = (zeta_value - omega_powers_values[i]).inversed(); - lagrange_base_values[n + i] = (zeta_omega_value - omega_powers_values[i]).inversed(); - } - - for (std::size_t i = 0; i < lagrange_base.size(); i++) { - public_input.push_back(lagrange_base_values[i]); - lagrange_base[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - std::array pi; - std::array pi_values; - for (std::size_t i = 0; i < n; i++) { - pi_values[i] = 0x0_cppui_modular256; - public_input.push_back(pi_values[i]); - pi[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - typename BlueprintFieldType::value_type domain_size_value = 32; - public_input.push_back(domain_size_value); - var domain_size(0, public_input.size() - 1, false, var::column_type::public_input); - - typename BlueprintFieldType::value_type zero_value = 0; - public_input.push_back(zero_value); - var zero(0, public_input.size() - 1, false, var::column_type::public_input); - - typename component_type::params_type params = {zeta_pow_n, zeta_omega_pow_n, pi, lagrange_base, - omega_powers, domain_size, one, zero}; - - // r[0] = (zeta_pow_n - 1) * domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from 0 to PulicInputSize - // r[1] = (zeta_omega.pow(n) - 1) * index.domain.size_inv * SUM(-l * p * w) - // where l from lagrange, p from public, w from omega_powers for l from PulicInputSize to 2 * PulicInputSize - std::array expected_result = {0x0_cppui_modular256, 0x0_cppui_modular256}; - - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result[0] == assignment.var_value(real_res.output[0])); - assert(expected_result[1] == assignment.var_value(real_res.output[1])); - }; - - test_component( - params, public_input, result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "public_evaluations_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/to_group.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/to_group.cpp deleted file mode 100644 index be2751f577..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/to_group.cpp +++ /dev/null @@ -1,94 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_to_group_test - -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include "../../../test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_to_group) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 4; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 1; - - using var = zk::snark::plonk_variable; - - using component_type = - zk::components::to_group; - - typename BlueprintFieldType::value_type t_value = - 0x28B65D3D28EEAB51CE0B9D26B1A801AFF855B82210E18901C47EA3E46F4F3AED_cppui_modular255; - curve_type::template g1_type::value_type - expected_result; - expected_result.X = 0x0DAFF73C33C0C65C641C6780E151E272069F84CFBAB3BA922A2AE640ACB9234A_cppui_modular255; - expected_result.Y = 0x171ADF13662AD137A9D177BEA98605DD9523A570B05C3161AF32C7B2D7ECCC58_cppui_modular255; - - std::vector public_input = {t_value}; - - typename component_type::params_type params = {var(0, 0, false, var::column_type::public_input)}; - - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result.X == assignment.var_value(real_res.output.X)); - assert(expected_result.Y == assignment.var_value(real_res.output.Y)); - }; - - test_component(params, public_input, - result_check); - - auto duration = - std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "to_group_component: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/zk_w3.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/zk_w3.cpp deleted file mode 100644 index ba74afe47b..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/zk_w3.cpp +++ /dev/null @@ -1,119 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_detail_zk_w3_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_detail_zk_w3_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_detail_zk_w3_test_suite) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using component_type = - zk::components::zk_w3; - - zk::components::kimchi_verifier_index_scalar verifier_index; - - typename BlueprintFieldType::value_type omega_val = 0x0CB8102D0128EBB25343154773101EAF1A9DAEF679667EB4BD1E06B973E985E4_cppui_modular256; - std::size_t domain_size = 512; - typename BlueprintFieldType::value_type expected_result = 0x1B1A85952300603BBF8DD3068424B64608658ACBB72CA7D2BB9694ADFA504418_cppui_modular256; - - std::vector public_input; - - public_input.push_back(omega_val); - var omega = var(0, public_input.size() - 1, false, var::column_type::public_input); - - verifier_index.omega = omega; - verifier_index.domain_size = domain_size; - - typename component_type::params_type params = { - verifier_index}; - - auto result_check = [&expected_result](AssignmentType &assignment, component_type::result_type &real_res) { - assert(expected_result == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/zkpm_evaluate.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/detail/zkpm_evaluate.cpp deleted file mode 100644 index 658f18656d..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/detail/zkpm_evaluate.cpp +++ /dev/null @@ -1,95 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_zkpm_evaluate_test - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_zkpm) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 4; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - using component_type = zk::components::zkpm_evaluate; - - typename BlueprintFieldType::value_type group_gen = algebra::random_element(); - std::size_t domain_size = 1000; - typename BlueprintFieldType::value_type x = algebra::random_element(); - typename BlueprintFieldType::value_type group_gen_pow = group_gen.pow(domain_size - 3); - typename BlueprintFieldType::value_type expected_res = (x - group_gen_pow) * (x - group_gen_pow * group_gen) * - (x - group_gen_pow * group_gen * group_gen); - - std::vector public_input = {group_gen, x, expected_res}; - - typename component_type::params_type params = { - var(0, 0, false, var::column_type::public_input), domain_size, var(0, 1, false, var::column_type::public_input)}; - - auto result_check = [&expected_res](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(expected_res == assignment.var_value(real_res.output)); - }; - - test_component(params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "zkpm_evaluate: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/chacha_test.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/chacha_test.hpp deleted file mode 100644 index 2d98bd2e2c..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/chacha_test.hpp +++ /dev/null @@ -1,249 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_BLUEPRINT_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_CHACHA_TEST_HPP -#define CRYPTO3_ZK_BLUEPRINT_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_CHACHA_TEST_HPP - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace components { - - // index terms for ec test - // https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/chacha.rs#L40 - template - class index_terms_scalars_list_chacha_test; - - template - class index_terms_scalars_list_chacha_test< - snark::plonk_constraint_system> { - - typedef snark::plonk_constraint_system - ArithmetizationType; - - constexpr static const std::array argument_types = { - argument_type::Generic, - argument_type::Permutation, - argument_type::Lookup, - argument_type::Generic, - argument_type::Permutation, - }; - - constexpr static const std::array, 5> arguments_values = { - std::make_pair(0, 21), - std::make_pair(21, 3), - std::make_pair(24, 7), - std::make_pair(0, 21), - std::make_pair(21, 3), - }; - - public: - - static std::pair alpha_map(argument_type arg) { - for (std::size_t i = 0; i < argument_types.size(); ++i) { - if (arg == argument_types[i]) { - return arguments_values[i]; - } - } - assert(false); - return std::make_pair(0, 0); - } - - constexpr static const std::size_t lookup_columns = 5; - constexpr static const bool lookup_runtime = false; - constexpr static const bool joint_lookup = false; - - constexpr static const bool poseidon_gate = false; - constexpr static const bool ec_arithmetic_gates = true; - constexpr static const bool generic_gate = true; - constexpr static const bool chacha_gate = true; - - constexpr static const std::size_t poseidon_gates_count = 15; - constexpr static const std::size_t ec_arithmetic_gates_count = 4; - - constexpr static const std::size_t alpha_powers_n = 31; - - constexpr static const std::array coefficient_str = { - "Cell(Variable { col: Index(Poseidon), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(8);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(9);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(10);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(11);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(12);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(13);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(14);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - }; - - constexpr static const char *lookup_gate_str = "Alpha;Pow(24);VanishesOnLast4Rows;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: LookupAggreg, row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Beta;Add;Pow(3);Mul;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Beta;Add;Pow(3);Gamma;JointCombiner;Cell(Variable { col: Witness(2), row: Curr });Mul;Cell(Variable { col: Witness(1), row: Curr });Add;JointCombiner;Pow(2);Cell(Variable { col: Witness(0), row: Curr });Mul;Add;Add;Mul;Gamma;JointCombiner;Cell(Variable { col: Witness(4), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Add;JointCombiner;Pow(2);Cell(Variable { col: Witness(0), row: Curr });Mul;Add;Add;Mul;Gamma;JointCombiner;Cell(Variable { col: Witness(6), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Add;JointCombiner;Pow(2);Cell(Variable { col: Witness(0), row: Curr });Mul;Add;Add;Mul;Add;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupTable, row: Curr });Add;Beta;Cell(Variable { col: LookupTable, row: Next });Mul;Add;Mul;Mul;Mul;Mul;Mul;\0"; - - constexpr static const char *var_base_mul_str = "Cell(Variable { col: Witness(5), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(7), row: Next });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Next });Cell(Variable { col: Witness(7), row: Next });Mul;Store;Cell(Variable { col: Witness(2), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(7), row: Next });Mul;Sub;Store;Load(2);Mul;Load(1);Load(1);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(0);Add;Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Load(1);Mul;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Mul;Cell(Variable { col: Witness(3), row: Next });Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(8), row: Next });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Next });Cell(Variable { col: Witness(8), row: Next });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(8), row: Next });Mul;Sub;Store;Load(5);Mul;Load(4);Load(4);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(3);Add;Mul;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Load(4);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(9), row: Curr });Sub;Load(5);Mul;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Mul;Cell(Variable { col: Witness(4), row: Next });Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Next });Mul;Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(9), row: Next });Cell(Variable { col: Witness(9), row: Next });Mul;Store;Cell(Variable { col: Witness(9), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(9), row: Next });Mul;Sub;Store;Load(8);Mul;Load(7);Load(7);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(6);Add;Mul;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Load(7);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(11), row: Curr });Sub;Load(8);Mul;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Mul;Cell(Variable { col: Witness(5), row: Next });Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Next });Mul;Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(15);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(10), row: Next });Cell(Variable { col: Witness(10), row: Next });Mul;Store;Cell(Variable { col: Witness(11), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(10), row: Next });Mul;Sub;Store;Load(11);Mul;Load(10);Load(10);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(9);Add;Mul;Sub;Mul;Add;Alpha;Pow(16);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Load(10);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(13), row: Curr });Sub;Load(11);Mul;Sub;Mul;Add;Alpha;Pow(17);Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Mul;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;Alpha;Pow(18);Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(11), row: Next });Mul;Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(19);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(11), row: Next });Cell(Variable { col: Witness(11), row: Next });Mul;Store;Cell(Variable { col: Witness(13), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(11), row: Next });Mul;Sub;Store;Load(14);Mul;Load(13);Load(13);Mul;Cell(Variable { col: Witness(0), row: Next });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(12);Add;Mul;Sub;Mul;Add;Alpha;Pow(20);Cell(Variable { col: Witness(1), row: Next });Cell(Variable { col: Witness(14), row: Curr });Add;Load(13);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Next });Sub;Load(14);Mul;Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_str = "Cell(Variable { col: Witness(11), row: Curr });Dup;Mul;Cell(Variable { col: Witness(11), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(12), row: Curr });Dup;Mul;Cell(Variable { col: Witness(12), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(13), row: Curr });Dup;Mul;Cell(Variable { col: Witness(13), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(14), row: Curr });Dup;Mul;Cell(Variable { col: Witness(14), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(11), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(4), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(12), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Dup;Mul;Store;Sub;Load(0);Add;Cell(Variable { col: Witness(4), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Store;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(5), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(5), row: Curr });Dup;Add;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(6);Load(3);Dup;Mul;Load(2);Dup;Mul;Load(1);Load(0);Sub;Cell(Variable { col: Witness(7), row: Curr });Add;Mul;Sub;Mul;Add;Alpha;Pow(7);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(13), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(14), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(7), row: Curr });Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Dup;Mul;Store;Sub;Load(4);Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(4), row: Next });Sub;Store;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(8), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Load(6);Mul;Sub;Mul;Add;Alpha;Pow(9);Load(7);Dup;Mul;Load(6);Dup;Mul;Load(5);Load(4);Sub;Cell(Variable { col: Witness(4), row: Next });Add;Mul;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(6), row: Curr });Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *complete_add_str = "Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Store;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Load(0);Mul;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Dup;Add;Sub;Load(1);Sub;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Load(0);Cell(Variable { col: Witness(8), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(1), row: Curr });Sub;Store;Sub;Mul;Add;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Cell(Variable { col: Witness(4), row: Curr });Add;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Cell(Variable { col: Witness(1), row: Curr });Sub;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(5);Load(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(6);Load(2);Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_scalar_str = "Cell(Variable { col: Witness(0), row: Curr });Dup;Add;Dup;Add;Cell(Variable { col: Witness(6), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(7), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(8), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Curr });Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Store;Add;Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(3), row: Curr });Dup;Add;Load(0);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(6), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(7), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(8), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(9), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(10), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(11), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(12), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(13), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Mul;Add;\0"; - - constexpr static const char *constant_term_str = "Cell(Variable { col: Index(Poseidon), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(0), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(1), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(2), row: Curr });Pow(7);Store;Mul;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Mds { row: 1, col: 0 };Load(0);Mul;Mds { row: 1, col: 1 };Load(1);Mul;Add;Mds { row: 1, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(8), row: Curr });Mds { row: 2, col: 0 };Load(0);Mul;Mds { row: 2, col: 1 };Load(1);Mul;Add;Mds { row: 2, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(9), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(6), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(7), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(8), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(10), row: Curr });Mds { row: 1, col: 0 };Load(3);Mul;Mds { row: 1, col: 1 };Load(4);Mul;Add;Mds { row: 1, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(11), row: Curr });Mds { row: 2, col: 0 };Load(3);Mul;Mds { row: 2, col: 1 };Load(4);Mul;Add;Mds { row: 2, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(12), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(9), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(10), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(11), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(13), row: Curr });Mds { row: 1, col: 0 };Load(6);Mul;Mds { row: 1, col: 1 };Load(7);Mul;Add;Mds { row: 1, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(14), row: Curr });Mds { row: 2, col: 0 };Load(6);Mul;Mds { row: 2, col: 1 };Load(7);Mul;Add;Mds { row: 2, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(3), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(12), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(13), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(14), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(4), row: Curr });Mds { row: 1, col: 0 };Load(9);Mul;Mds { row: 1, col: 1 };Load(10);Mul;Add;Mds { row: 1, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(5), row: Curr });Mds { row: 2, col: 0 };Load(9);Mul;Mds { row: 2, col: 1 };Load(10);Mul;Add;Mds { row: 2, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(0), row: Next });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(3), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(4), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(5), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(1), row: Next });Mds { row: 1, col: 0 };Load(12);Mul;Mds { row: 1, col: 1 };Load(13);Mul;Add;Mds { row: 1, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(2), row: Next });Mds { row: 2, col: 0 };Load(12);Mul;Mds { row: 2, col: 1 };Load(13);Mul;Add;Mds { row: 2, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Mul;Alpha;Pow(24);VanishesOnLast4Rows;Cell(Variable { col: LookupAggreg, row: Next });Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(0), row: Curr });Add;Beta;Cell(Variable { col: LookupSorted(0), row: Next });Mul;Add;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(1), row: Next });Add;Beta;Cell(Variable { col: LookupSorted(1), row: Curr });Mul;Add;Mul;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(2), row: Curr });Add;Beta;Cell(Variable { col: LookupSorted(2), row: Next });Mul;Add;Mul;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(3), row: Next });Add;Beta;Cell(Variable { col: LookupSorted(3), row: Curr });Mul;Add;Mul;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(4), row: Curr });Add;Beta;Cell(Variable { col: LookupSorted(4), row: Next });Mul;Add;Mul;Mul;Cell(Variable { col: LookupAggreg, row: Curr });Gamma;JointCombiner;Pow(3);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Gamma;JointCombiner;Pow(3);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Gamma;JointCombiner;Pow(3);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Gamma;JointCombiner;Pow(3);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Beta;Add;Pow(4);Mul;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupTable, row: Curr });Add;Beta;Cell(Variable { col: LookupTable, row: Next });Mul;Add;Mul;Mul;Sub;Mul;Mul;Alpha;Pow(25);UnnormalizedLagrangeBasis(0);Cell(Variable { col: LookupAggreg, row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Mul;Add;Alpha;Pow(26);UnnormalizedLagrangeBasis(-4);Cell(Variable { col: LookupAggreg, row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Mul;Add;Alpha;Pow(27);UnnormalizedLagrangeBasis(-4);Cell(Variable { col: LookupSorted(0), row: Curr });Cell(Variable { col: LookupSorted(1), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(28);UnnormalizedLagrangeBasis(0);Cell(Variable { col: LookupSorted(1), row: Curr });Cell(Variable { col: LookupSorted(2), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(29);UnnormalizedLagrangeBasis(-4);Cell(Variable { col: LookupSorted(2), row: Curr });Cell(Variable { col: LookupSorted(3), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(30);UnnormalizedLagrangeBasis(0);Cell(Variable { col: LookupSorted(3), row: Curr });Cell(Variable { col: LookupSorted(4), row: Curr });Sub;Mul;Mul;Add;Add;\0"; - - constexpr static const char *chacha0_str = "Cell(Variable { col: Witness(2), row: Next });Dup;Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(8), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(9), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(10), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(7), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(8), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(9), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(10), row: Next });Mul;Add;Cell(Variable { col: Witness(0), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(0), row: Next });Literal 0000000000000000000000000000000000000000000000000000000100000000;Cell(Variable { col: Witness(2), row: Next });Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(11), row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(12), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(13), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(14), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(11), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(12), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(13), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(14), row: Next });Mul;Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(3), row: Next });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(4), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(5), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(6), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(3), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(4), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(5), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(6), row: Curr });Mul;Add;Cell(Variable { col: Witness(1), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *chacha1_str = "Cell(Variable { col: Witness(2), row: Next });Dup;Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(8), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(9), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(10), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(7), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(8), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(9), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(10), row: Next });Mul;Add;Cell(Variable { col: Witness(0), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(0), row: Next });Literal 0000000000000000000000000000000000000000000000000000000100000000;Cell(Variable { col: Witness(2), row: Next });Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(11), row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(12), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(13), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(14), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(11), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(12), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(13), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(14), row: Next });Mul;Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(4), row: Next });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(5), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(6), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(3), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(4), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(5), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(6), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(3), row: Next });Mul;Add;Cell(Variable { col: Witness(1), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *chacha2_str = "Cell(Variable { col: Witness(2), row: Next });Dup;Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(8), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(9), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(10), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(7), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(8), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(9), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(10), row: Next });Mul;Add;Cell(Variable { col: Witness(0), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(0), row: Next });Literal 0000000000000000000000000000000000000000000000000000000100000000;Cell(Variable { col: Witness(2), row: Next });Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(11), row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(12), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(13), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(14), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(11), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(12), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(13), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(14), row: Next });Mul;Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(5), row: Next });Literal 0000000000000000000000000000000000000000000000000000000000000010;Cell(Variable { col: Witness(6), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Cell(Variable { col: Witness(3), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Cell(Variable { col: Witness(4), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Cell(Variable { col: Witness(5), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Cell(Variable { col: Witness(6), row: Curr });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Cell(Variable { col: Witness(3), row: Next });Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Cell(Variable { col: Witness(4), row: Next });Mul;Add;Cell(Variable { col: Witness(1), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *chacha_final_str = "Cell(Variable { col: Witness(5), row: Curr });Dup;Mul;Cell(Variable { col: Witness(5), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(6), row: Curr });Dup;Mul;Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(7), row: Curr });Dup;Mul;Cell(Variable { col: Witness(7), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(8), row: Curr });Dup;Mul;Cell(Variable { col: Witness(8), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(5), row: Next });Dup;Mul;Cell(Variable { col: Witness(5), row: Next });Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(6), row: Next });Dup;Mul;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(7), row: Next });Dup;Mul;Cell(Variable { col: Witness(7), row: Next });Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(8), row: Next });Dup;Mul;Cell(Variable { col: Witness(8), row: Next });Sub;Mul;Add;Alpha;Pow(8);Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(8), row: Next });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(7), row: Next });Sub;Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000010;Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(5), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(8), row: Next });Sub;Mul;Add;Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000000100;Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(1), row: Curr });Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000001000;Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000010000;Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Mul;Add;Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000000100000;Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(5), row: Next });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(4), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Sub;Mul;Add;Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000001000000;Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(6), row: Next });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(1), row: Next });Cell(Variable { col: Witness(5), row: Next });Sub;Mul;Add;Mul;Add;Literal 0000000000000000000000000000000000000000000000000000000010000000;Literal 0000000000000000000000000000000000000000000000000000000000000008;Cell(Variable { col: Witness(7), row: Next });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC96987680000001;Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Sub;Mul;Add;\0"; - - private: - - constexpr static const std::array - coefficient_array_size = { - count_delimiters(coefficient_str[0]), count_delimiters(coefficient_str[1]), - count_delimiters(coefficient_str[2]), count_delimiters(coefficient_str[3]), - count_delimiters(coefficient_str[4]), count_delimiters(coefficient_str[5]), - count_delimiters(coefficient_str[6]), count_delimiters(coefficient_str[7]), - count_delimiters(coefficient_str[8]), count_delimiters(coefficient_str[9]), - count_delimiters(coefficient_str[10]), count_delimiters(coefficient_str[11]), - count_delimiters(coefficient_str[12]), count_delimiters(coefficient_str[13]), - count_delimiters(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_array_size = count_delimiters(var_base_mul_str); - - constexpr static const std::size_t endo_mul_array_size = count_delimiters(endo_mul_str); - - constexpr static const std::size_t complete_add_array_size = count_delimiters(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_array_size = count_delimiters(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_array_size = count_delimiters(constant_term_str); - - constexpr static const std::size_t lookup_gate_array_size = count_delimiters(lookup_gate_str); - - constexpr static const std::size_t chacha0_array_size = count_delimiters(chacha0_str); - - constexpr static const std::size_t chacha1_array_size = count_delimiters(chacha1_str); - - constexpr static const std::size_t chacha2_array_size = count_delimiters(chacha2_str); - - constexpr static const std::size_t chacha_final_array_size = count_delimiters(chacha_final_str); - - constexpr static const std::array - coefficient_rows = { - rpn_component_rows(coefficient_str[0]), - rpn_component_rows(coefficient_str[1]), - rpn_component_rows(coefficient_str[2]), - rpn_component_rows(coefficient_str[3]), - rpn_component_rows(coefficient_str[4]), - rpn_component_rows(coefficient_str[5]), - rpn_component_rows(coefficient_str[6]), - rpn_component_rows(coefficient_str[7]), - rpn_component_rows(coefficient_str[8]), - rpn_component_rows(coefficient_str[9]), - rpn_component_rows(coefficient_str[10]), - rpn_component_rows(coefficient_str[11]), - rpn_component_rows(coefficient_str[12]), - rpn_component_rows(coefficient_str[13]), - rpn_component_rows(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_rows = - rpn_component_rows(var_base_mul_str); - - constexpr static const std::size_t endo_mul_rows = - rpn_component_rows(endo_mul_str); - - constexpr static const std::size_t complete_add_rows = - rpn_component_rows(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_rows = - rpn_component_rows(endo_mul_scalar_str); - - constexpr static const std::size_t constant_term_rows = - rpn_component_rows(constant_term_str); - - constexpr static const std::size_t lookup_gate_rows = - rpn_component_rows(lookup_gate_str); - - constexpr static const std::size_t chacha0_gate_rows = - rpn_component_rows(chacha0_str); - - constexpr static const std::size_t chacha1_gate_rows = - rpn_component_rows(chacha1_str); - - constexpr static const std::size_t chacha2_gate_rows = - rpn_component_rows(chacha2_str); - - constexpr static const std::size_t chacha_final_gate_rows = - rpn_component_rows(chacha_final_str); - - public: - - constexpr static const std::size_t size = 24; - constexpr static const std::array terms = {{ - {column_type::Coefficient, 0, coefficient_str[0], coefficient_rows[0]}, - {column_type::Coefficient, 1, coefficient_str[1], coefficient_rows[1]}, - {column_type::Coefficient, 2, coefficient_str[2], coefficient_rows[2]}, - {column_type::Coefficient, 3, coefficient_str[3], coefficient_rows[3]}, - {column_type::Coefficient, 4, coefficient_str[4], coefficient_rows[4]}, - {column_type::Coefficient, 5, coefficient_str[5], coefficient_rows[5]}, - {column_type::Coefficient, 6, coefficient_str[6], coefficient_rows[6]}, - {column_type::Coefficient, 7, coefficient_str[7], coefficient_rows[7]}, - {column_type::Coefficient, 8, coefficient_str[8], coefficient_rows[8]}, - {column_type::Coefficient, 9, coefficient_str[9], coefficient_rows[9]}, - {column_type::Coefficient, 10, coefficient_str[10], coefficient_rows[10]}, - {column_type::Coefficient, 11, coefficient_str[11], coefficient_rows[11]}, - {column_type::Coefficient, 12, coefficient_str[12], coefficient_rows[12]}, - {column_type::Coefficient, 13, coefficient_str[13], coefficient_rows[13]}, - {column_type::Coefficient, 14, coefficient_str[14], coefficient_rows[14]}, - {column_type::VarBaseMul, 0, var_base_mul_str, var_base_mul_rows}, - {column_type::EndoMul, 0, endo_mul_str, endo_mul_rows}, - {column_type::EndoMulScalar, 0, endo_mul_scalar_str, endo_mul_scalar_rows}, - {column_type::CompleteAdd, 0, complete_add_str, complete_add_rows}, - {column_type::LookupKindIndex, 2, lookup_gate_str, lookup_gate_rows}, - {column_type::ChaCha0, 0, chacha0_str, chacha0_gate_rows}, - {column_type::ChaCha1, 0, chacha1_str, chacha1_gate_rows}, - {column_type::ChaCha2, 0, chacha2_str, chacha2_gate_rows}, - {column_type::ChaChaFinal, 0, chacha_final_str, chacha_final_gate_rows}, - }}; - }; - } // namespace components - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_BLUEPRINT_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_LOOKUP_TEST_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/ec_index_terms.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/ec_index_terms.hpp deleted file mode 100644 index 6d74d7796f..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/ec_index_terms.hpp +++ /dev/null @@ -1,203 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_EC_INDEX_TERMS_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_EC_INDEX_TERMS_HPP - -#include -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace blueprint { - namespace components { - - // index terms for ec test - // https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/ec.rs#L15 - template - class index_terms_scalars_list_ec_test; - - template - class index_terms_scalars_list_ec_test< - snark::plonk_constraint_system> { - - typedef snark::plonk_constraint_system - ArithmetizationType; - - constexpr static const std::array argument_types = { - argument_type::Permutation, - argument_type::Generic, - }; - - constexpr static const std::array, 2> arguments_values = { - std::make_pair(21, 3), - std::make_pair(0, 21) - }; - - public: - - static std::pair alpha_map(argument_type arg) { - for (std::size_t i = 0; i < argument_types.size(); ++i) { - if (arg == argument_types[i]) { - return arguments_values[i]; - } - } - assert(false); - return std::make_pair(0, 0); - } - - constexpr static const std::size_t lookup_columns = 0; - constexpr static const bool lookup_runtime = false; - constexpr static const bool joint_lookup = false; - constexpr static const bool poseidon_gate = false; - constexpr static const bool ec_arithmetic_gates = true; - constexpr static const bool generic_gate = false; - constexpr static const bool chacha_gate = false; - - constexpr static const std::size_t poseidon_gates_count = 15; - constexpr static const std::size_t ec_arithmetic_gates_count = 4; - - constexpr static const std::size_t alpha_powers_n = 24; - - constexpr static const std::array coefficient_str = { - "Cell(Variable { col: Index(Poseidon), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(8);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(9);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(10);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(11);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(12);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(13);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(14);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - }; - - constexpr static const char *var_base_mul_str = "Cell(Variable { col: Witness(5), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(7), row: Next });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Next });Cell(Variable { col: Witness(7), row: Next });Mul;Store;Cell(Variable { col: Witness(2), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(7), row: Next });Mul;Sub;Store;Load(2);Mul;Load(1);Load(1);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(0);Add;Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Load(1);Mul;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Mul;Cell(Variable { col: Witness(3), row: Next });Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(8), row: Next });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Next });Cell(Variable { col: Witness(8), row: Next });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(8), row: Next });Mul;Sub;Store;Load(5);Mul;Load(4);Load(4);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(3);Add;Mul;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Load(4);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(9), row: Curr });Sub;Load(5);Mul;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Mul;Cell(Variable { col: Witness(4), row: Next });Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Next });Mul;Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(9), row: Next });Cell(Variable { col: Witness(9), row: Next });Mul;Store;Cell(Variable { col: Witness(9), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(9), row: Next });Mul;Sub;Store;Load(8);Mul;Load(7);Load(7);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(6);Add;Mul;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Load(7);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(11), row: Curr });Sub;Load(8);Mul;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Mul;Cell(Variable { col: Witness(5), row: Next });Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Next });Mul;Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(15);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(10), row: Next });Cell(Variable { col: Witness(10), row: Next });Mul;Store;Cell(Variable { col: Witness(11), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(10), row: Next });Mul;Sub;Store;Load(11);Mul;Load(10);Load(10);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(9);Add;Mul;Sub;Mul;Add;Alpha;Pow(16);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Load(10);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(13), row: Curr });Sub;Load(11);Mul;Sub;Mul;Add;Alpha;Pow(17);Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Mul;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;Alpha;Pow(18);Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(11), row: Next });Mul;Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(19);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(11), row: Next });Cell(Variable { col: Witness(11), row: Next });Mul;Store;Cell(Variable { col: Witness(13), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(11), row: Next });Mul;Sub;Store;Load(14);Mul;Load(13);Load(13);Mul;Cell(Variable { col: Witness(0), row: Next });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(12);Add;Mul;Sub;Mul;Add;Alpha;Pow(20);Cell(Variable { col: Witness(1), row: Next });Cell(Variable { col: Witness(14), row: Curr });Add;Load(13);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Next });Sub;Load(14);Mul;Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_str = "Cell(Variable { col: Witness(11), row: Curr });Dup;Mul;Cell(Variable { col: Witness(11), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(12), row: Curr });Dup;Mul;Cell(Variable { col: Witness(12), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(13), row: Curr });Dup;Mul;Cell(Variable { col: Witness(13), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(14), row: Curr });Dup;Mul;Cell(Variable { col: Witness(14), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(11), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(4), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(12), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Dup;Mul;Store;Sub;Load(0);Add;Cell(Variable { col: Witness(4), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Store;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(5), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(5), row: Curr });Dup;Add;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(6);Load(3);Dup;Mul;Load(2);Dup;Mul;Load(1);Load(0);Sub;Cell(Variable { col: Witness(7), row: Curr });Add;Mul;Sub;Mul;Add;Alpha;Pow(7);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(13), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(14), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(7), row: Curr });Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Dup;Mul;Store;Sub;Load(4);Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(4), row: Next });Sub;Store;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(8), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Load(6);Mul;Sub;Mul;Add;Alpha;Pow(9);Load(7);Dup;Mul;Load(6);Dup;Mul;Load(5);Load(4);Sub;Cell(Variable { col: Witness(4), row: Next });Add;Mul;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(6), row: Curr });Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *complete_add_str = "Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Store;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Load(0);Mul;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Dup;Add;Sub;Load(1);Sub;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Load(0);Cell(Variable { col: Witness(8), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(1), row: Curr });Sub;Store;Sub;Mul;Add;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Cell(Variable { col: Witness(4), row: Curr });Add;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Cell(Variable { col: Witness(1), row: Curr });Sub;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(5);Load(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(6);Load(2);Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_scalar_str = "Cell(Variable { col: Witness(0), row: Curr });Dup;Add;Dup;Add;Cell(Variable { col: Witness(6), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(7), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(8), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Curr });Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Store;Add;Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(3), row: Curr });Dup;Add;Load(0);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(6), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(7), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(8), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(9), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(10), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(11), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(12), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(13), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Mul;Add;\0"; - - constexpr static const char *constant_term_str = "Cell(Variable { col: Index(Poseidon), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(0), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(1), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(2), row: Curr });Pow(7);Store;Mul;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Mds { row: 1, col: 0 };Load(0);Mul;Mds { row: 1, col: 1 };Load(1);Mul;Add;Mds { row: 1, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(8), row: Curr });Mds { row: 2, col: 0 };Load(0);Mul;Mds { row: 2, col: 1 };Load(1);Mul;Add;Mds { row: 2, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(9), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(6), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(7), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(8), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(10), row: Curr });Mds { row: 1, col: 0 };Load(3);Mul;Mds { row: 1, col: 1 };Load(4);Mul;Add;Mds { row: 1, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(11), row: Curr });Mds { row: 2, col: 0 };Load(3);Mul;Mds { row: 2, col: 1 };Load(4);Mul;Add;Mds { row: 2, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(12), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(9), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(10), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(11), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(13), row: Curr });Mds { row: 1, col: 0 };Load(6);Mul;Mds { row: 1, col: 1 };Load(7);Mul;Add;Mds { row: 1, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(14), row: Curr });Mds { row: 2, col: 0 };Load(6);Mul;Mds { row: 2, col: 1 };Load(7);Mul;Add;Mds { row: 2, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(3), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(12), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(13), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(14), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(4), row: Curr });Mds { row: 1, col: 0 };Load(9);Mul;Mds { row: 1, col: 1 };Load(10);Mul;Add;Mds { row: 1, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(5), row: Curr });Mds { row: 2, col: 0 };Load(9);Mul;Mds { row: 2, col: 1 };Load(10);Mul;Add;Mds { row: 2, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(0), row: Next });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(3), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(4), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(5), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(1), row: Next });Mds { row: 1, col: 0 };Load(12);Mul;Mds { row: 1, col: 1 };Load(13);Mul;Add;Mds { row: 1, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(2), row: Next });Mds { row: 2, col: 0 };Load(12);Mul;Mds { row: 2, col: 1 };Load(13);Mul;Add;Mds { row: 2, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Mul;\0"; - - private: - - constexpr static const std::array - coefficient_array_size = { - count_delimiters(coefficient_str[0]), count_delimiters(coefficient_str[1]), - count_delimiters(coefficient_str[2]), count_delimiters(coefficient_str[3]), - count_delimiters(coefficient_str[4]), count_delimiters(coefficient_str[5]), - count_delimiters(coefficient_str[6]), count_delimiters(coefficient_str[7]), - count_delimiters(coefficient_str[8]), count_delimiters(coefficient_str[9]), - count_delimiters(coefficient_str[10]), count_delimiters(coefficient_str[11]), - count_delimiters(coefficient_str[12]), count_delimiters(coefficient_str[13]), - count_delimiters(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_array_size = count_delimiters(var_base_mul_str); - - constexpr static const std::size_t endo_mul_array_size = count_delimiters(endo_mul_str); - - constexpr static const std::size_t complete_add_array_size = count_delimiters(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_array_size = count_delimiters(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_array_size = count_delimiters(constant_term_str); - - public: - constexpr static const std::array - coefficient_rows = { - rpn_component_rows(coefficient_str[0]), - rpn_component_rows(coefficient_str[1]), - rpn_component_rows(coefficient_str[2]), - rpn_component_rows(coefficient_str[3]), - rpn_component_rows(coefficient_str[4]), - rpn_component_rows(coefficient_str[5]), - rpn_component_rows(coefficient_str[6]), - rpn_component_rows(coefficient_str[7]), - rpn_component_rows(coefficient_str[8]), - rpn_component_rows(coefficient_str[9]), - rpn_component_rows(coefficient_str[10]), - rpn_component_rows(coefficient_str[11]), - rpn_component_rows(coefficient_str[12]), - rpn_component_rows(coefficient_str[13]), - rpn_component_rows(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_rows = - rpn_component_rows(var_base_mul_str); - - constexpr static const std::size_t endo_mul_rows = - rpn_component_rows(endo_mul_str); - - constexpr static const std::size_t complete_add_rows = - rpn_component_rows(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_rows = - rpn_component_rows(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_rows = - rpn_component_rows(constant_term_str); - - constexpr static const std::size_t size = 19; - constexpr static const std::array terms = {{ - {column_type::Coefficient, 0, coefficient_str[0], coefficient_rows[0]}, - {column_type::Coefficient, 1, coefficient_str[1], coefficient_rows[1]}, - {column_type::Coefficient, 2, coefficient_str[2], coefficient_rows[2]}, - {column_type::Coefficient, 3, coefficient_str[3], coefficient_rows[3]}, - {column_type::Coefficient, 4, coefficient_str[4], coefficient_rows[4]}, - {column_type::Coefficient, 5, coefficient_str[5], coefficient_rows[5]}, - {column_type::Coefficient, 6, coefficient_str[6], coefficient_rows[6]}, - {column_type::Coefficient, 7, coefficient_str[7], coefficient_rows[7]}, - {column_type::Coefficient, 8, coefficient_str[8], coefficient_rows[8]}, - {column_type::Coefficient, 9, coefficient_str[9], coefficient_rows[9]}, - {column_type::Coefficient, 10, coefficient_str[10], coefficient_rows[10]}, - {column_type::Coefficient, 11, coefficient_str[11], coefficient_rows[11]}, - {column_type::Coefficient, 12, coefficient_str[12], coefficient_rows[12]}, - {column_type::Coefficient, 13, coefficient_str[13], coefficient_rows[13]}, - {column_type::Coefficient, 14, coefficient_str[14], coefficient_rows[14]}, - {column_type::VarBaseMul, 0, var_base_mul_str, var_base_mul_rows}, - {column_type::EndoMul, 0, endo_mul_str, endo_mul_rows}, - {column_type::EndoMulScalar, 0, endo_mul_scalar_str, endo_mul_scalar_rows}, - {column_type::CompleteAdd, 0, complete_add_str, complete_add_rows}, - }}; - }; - } // namespace components - } // namespace blueprint - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_EC_INDEX_TERMS_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/ec_index_terms_cip.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/ec_index_terms_cip.hpp deleted file mode 100644 index b670478d5f..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/ec_index_terms_cip.hpp +++ /dev/null @@ -1,204 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Ekaterina Chukavina -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_EC_INDEX_TERMS_CIP_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_EC_INDEX_TERMS_CIP_HPP - -#include -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace blueprint { - namespace components { - - // index terms for ec test - // https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/ec.rs#L15 - template - class index_terms_scalars_cip_list_ec_test; - - template - class index_terms_scalars_cip_list_ec_test< - snark::plonk_constraint_system> { - - typedef snark::plonk_constraint_system - ArithmetizationType; - - constexpr static const std::array argument_types = { - argument_type::Permutation, - argument_type::Generic, - }; - - constexpr static const std::array, 2> arguments_values = { - std::make_pair(21, 3), - std::make_pair(0, 21) - }; - - public: - - static std::pair alpha_map(argument_type arg) { - for (std::size_t i = 0; i < argument_types.size(); ++i) { - if (arg == argument_types[i]) { - return arguments_values[i]; - } - } - assert(false); - return std::make_pair(0, 0); - } - - constexpr static const std::size_t lookup_columns = 0; - constexpr static const bool lookup_runtime = false; - constexpr static const bool joint_lookup = false; - constexpr static const bool poseidon_gate = false; - constexpr static const bool ec_arithmetic_gates = false; - constexpr static const bool generic_gate = false; - constexpr static const bool chacha_gate = false; - - constexpr static const std::size_t poseidon_gates_count = 15; - constexpr static const std::size_t ec_arithmetic_gates_count = 4; - - constexpr static const std::size_t alpha_powers_n = 24; - - constexpr static const std::array coefficient_str = { - "Cell(Variable { col: Index(Poseidon), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(8);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(9);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(10);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(11);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(12);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(13);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(14);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - }; - - constexpr static const char *var_base_mul_str = "Cell(Variable { col: Witness(5), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(7), row: Next });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Next });Cell(Variable { col: Witness(7), row: Next });Mul;Store;Cell(Variable { col: Witness(2), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(7), row: Next });Mul;Sub;Store;Load(2);Mul;Load(1);Load(1);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(0);Add;Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Load(1);Mul;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Mul;Cell(Variable { col: Witness(3), row: Next });Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(8), row: Next });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Next });Cell(Variable { col: Witness(8), row: Next });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(8), row: Next });Mul;Sub;Store;Load(5);Mul;Load(4);Load(4);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(3);Add;Mul;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Load(4);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(9), row: Curr });Sub;Load(5);Mul;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Mul;Cell(Variable { col: Witness(4), row: Next });Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Next });Mul;Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(9), row: Next });Cell(Variable { col: Witness(9), row: Next });Mul;Store;Cell(Variable { col: Witness(9), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(9), row: Next });Mul;Sub;Store;Load(8);Mul;Load(7);Load(7);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(6);Add;Mul;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Load(7);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(11), row: Curr });Sub;Load(8);Mul;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Mul;Cell(Variable { col: Witness(5), row: Next });Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Next });Mul;Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(15);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(10), row: Next });Cell(Variable { col: Witness(10), row: Next });Mul;Store;Cell(Variable { col: Witness(11), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(10), row: Next });Mul;Sub;Store;Load(11);Mul;Load(10);Load(10);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(9);Add;Mul;Sub;Mul;Add;Alpha;Pow(16);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Load(10);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(13), row: Curr });Sub;Load(11);Mul;Sub;Mul;Add;Alpha;Pow(17);Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Mul;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;Alpha;Pow(18);Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(11), row: Next });Mul;Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(19);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(11), row: Next });Cell(Variable { col: Witness(11), row: Next });Mul;Store;Cell(Variable { col: Witness(13), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(11), row: Next });Mul;Sub;Store;Load(14);Mul;Load(13);Load(13);Mul;Cell(Variable { col: Witness(0), row: Next });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(12);Add;Mul;Sub;Mul;Add;Alpha;Pow(20);Cell(Variable { col: Witness(1), row: Next });Cell(Variable { col: Witness(14), row: Curr });Add;Load(13);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Next });Sub;Load(14);Mul;Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_str = "Cell(Variable { col: Witness(11), row: Curr });Dup;Mul;Cell(Variable { col: Witness(11), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(12), row: Curr });Dup;Mul;Cell(Variable { col: Witness(12), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(13), row: Curr });Dup;Mul;Cell(Variable { col: Witness(13), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(14), row: Curr });Dup;Mul;Cell(Variable { col: Witness(14), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(11), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(4), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(12), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Dup;Mul;Store;Sub;Load(0);Add;Cell(Variable { col: Witness(4), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Store;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(5), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(5), row: Curr });Dup;Add;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(6);Load(3);Dup;Mul;Load(2);Dup;Mul;Load(1);Load(0);Sub;Cell(Variable { col: Witness(7), row: Curr });Add;Mul;Sub;Mul;Add;Alpha;Pow(7);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(13), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(14), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(7), row: Curr });Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Dup;Mul;Store;Sub;Load(4);Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(4), row: Next });Sub;Store;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(8), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Load(6);Mul;Sub;Mul;Add;Alpha;Pow(9);Load(7);Dup;Mul;Load(6);Dup;Mul;Load(5);Load(4);Sub;Cell(Variable { col: Witness(4), row: Next });Add;Mul;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(6), row: Curr });Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *complete_add_str = "Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Store;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Load(0);Mul;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Dup;Add;Sub;Load(1);Sub;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Load(0);Cell(Variable { col: Witness(8), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(1), row: Curr });Sub;Store;Sub;Mul;Add;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Cell(Variable { col: Witness(4), row: Curr });Add;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Cell(Variable { col: Witness(1), row: Curr });Sub;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(5);Load(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(6);Load(2);Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_scalar_str = "Cell(Variable { col: Witness(0), row: Curr });Dup;Add;Dup;Add;Cell(Variable { col: Witness(6), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(7), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(8), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Curr });Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Store;Add;Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(3), row: Curr });Dup;Add;Load(0);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(6), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(7), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(8), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(9), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(10), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(11), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(12), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(13), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Mul;Add;\0"; - - constexpr static const char *constant_term_str = "Cell(Variable { col: Index(Poseidon), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(0), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(1), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(2), row: Curr });Pow(7);Store;Mul;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Mds { row: 1, col: 0 };Load(0);Mul;Mds { row: 1, col: 1 };Load(1);Mul;Add;Mds { row: 1, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(8), row: Curr });Mds { row: 2, col: 0 };Load(0);Mul;Mds { row: 2, col: 1 };Load(1);Mul;Add;Mds { row: 2, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(9), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(6), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(7), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(8), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(10), row: Curr });Mds { row: 1, col: 0 };Load(3);Mul;Mds { row: 1, col: 1 };Load(4);Mul;Add;Mds { row: 1, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(11), row: Curr });Mds { row: 2, col: 0 };Load(3);Mul;Mds { row: 2, col: 1 };Load(4);Mul;Add;Mds { row: 2, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(12), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(9), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(10), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(11), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(13), row: Curr });Mds { row: 1, col: 0 };Load(6);Mul;Mds { row: 1, col: 1 };Load(7);Mul;Add;Mds { row: 1, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(14), row: Curr });Mds { row: 2, col: 0 };Load(6);Mul;Mds { row: 2, col: 1 };Load(7);Mul;Add;Mds { row: 2, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(3), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(12), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(13), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(14), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(4), row: Curr });Mds { row: 1, col: 0 };Load(9);Mul;Mds { row: 1, col: 1 };Load(10);Mul;Add;Mds { row: 1, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(5), row: Curr });Mds { row: 2, col: 0 };Load(9);Mul;Mds { row: 2, col: 1 };Load(10);Mul;Add;Mds { row: 2, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(0), row: Next });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(3), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(4), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(5), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(1), row: Next });Mds { row: 1, col: 0 };Load(12);Mul;Mds { row: 1, col: 1 };Load(13);Mul;Add;Mds { row: 1, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(2), row: Next });Mds { row: 2, col: 0 };Load(12);Mul;Mds { row: 2, col: 1 };Load(13);Mul;Add;Mds { row: 2, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Mul;\0"; - - private: - - constexpr static const std::array - coefficient_array_size = { - count_delimiters(coefficient_str[0]), count_delimiters(coefficient_str[1]), - count_delimiters(coefficient_str[2]), count_delimiters(coefficient_str[3]), - count_delimiters(coefficient_str[4]), count_delimiters(coefficient_str[5]), - count_delimiters(coefficient_str[6]), count_delimiters(coefficient_str[7]), - count_delimiters(coefficient_str[8]), count_delimiters(coefficient_str[9]), - count_delimiters(coefficient_str[10]), count_delimiters(coefficient_str[11]), - count_delimiters(coefficient_str[12]), count_delimiters(coefficient_str[13]), - count_delimiters(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_array_size = count_delimiters(var_base_mul_str); - - constexpr static const std::size_t endo_mul_array_size = count_delimiters(endo_mul_str); - - constexpr static const std::size_t complete_add_array_size = count_delimiters(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_array_size = count_delimiters(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_array_size = count_delimiters(constant_term_str); - - public: - constexpr static const std::array - coefficient_rows = { - rpn_component_rows(coefficient_str[0]), - rpn_component_rows(coefficient_str[1]), - rpn_component_rows(coefficient_str[2]), - rpn_component_rows(coefficient_str[3]), - rpn_component_rows(coefficient_str[4]), - rpn_component_rows(coefficient_str[5]), - rpn_component_rows(coefficient_str[6]), - rpn_component_rows(coefficient_str[7]), - rpn_component_rows(coefficient_str[8]), - rpn_component_rows(coefficient_str[9]), - rpn_component_rows(coefficient_str[10]), - rpn_component_rows(coefficient_str[11]), - rpn_component_rows(coefficient_str[12]), - rpn_component_rows(coefficient_str[13]), - rpn_component_rows(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_rows = - rpn_component_rows(var_base_mul_str); - - constexpr static const std::size_t endo_mul_rows = - rpn_component_rows(endo_mul_str); - - constexpr static const std::size_t complete_add_rows = - rpn_component_rows(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_rows = - rpn_component_rows(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_rows = - rpn_component_rows(constant_term_str); - - constexpr static const std::size_t size = 19; - constexpr static const std::array terms = {{ - {column_type::Coefficient, 0, coefficient_str[0], coefficient_rows[0]}, - {column_type::Coefficient, 1, coefficient_str[1], coefficient_rows[1]}, - {column_type::Coefficient, 2, coefficient_str[2], coefficient_rows[2]}, - {column_type::Coefficient, 3, coefficient_str[3], coefficient_rows[3]}, - {column_type::Coefficient, 4, coefficient_str[4], coefficient_rows[4]}, - {column_type::Coefficient, 5, coefficient_str[5], coefficient_rows[5]}, - {column_type::Coefficient, 6, coefficient_str[6], coefficient_rows[6]}, - {column_type::Coefficient, 7, coefficient_str[7], coefficient_rows[7]}, - {column_type::Coefficient, 8, coefficient_str[8], coefficient_rows[8]}, - {column_type::Coefficient, 9, coefficient_str[9], coefficient_rows[9]}, - {column_type::Coefficient, 10, coefficient_str[10], coefficient_rows[10]}, - {column_type::Coefficient, 11, coefficient_str[11], coefficient_rows[11]}, - {column_type::Coefficient, 12, coefficient_str[12], coefficient_rows[12]}, - {column_type::Coefficient, 13, coefficient_str[13], coefficient_rows[13]}, - {column_type::Coefficient, 14, coefficient_str[14], coefficient_rows[14]}, - {column_type::VarBaseMul, 0, var_base_mul_str, var_base_mul_rows}, - {column_type::EndoMul, 0, endo_mul_str, endo_mul_rows}, - {column_type::EndoMulScalar, 0, endo_mul_scalar_str, endo_mul_scalar_rows}, - {column_type::CompleteAdd, 0, complete_add_str, complete_add_rows}, - }}; - }; - } // namespace components - } // namespace blueprint - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_EC_INDEX_TERMS_CIP_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/lookup_test.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/lookup_test.hpp deleted file mode 100644 index 3c33efcd5f..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/lookup_test.hpp +++ /dev/null @@ -1,213 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_LOOKUP_TEST_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_LOOKUP_TEST_HPP - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace blueprint { - namespace components { - - // index terms for ec test - // https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/lookup.rs#L102 - template - class index_terms_scalars_list_lookup_test; - - template - class index_terms_scalars_list_lookup_test< - snark::plonk_constraint_system> { - - typedef snark::plonk_constraint_system - ArithmetizationType; - - constexpr static const std::array argument_types = { - argument_type::Permutation, - argument_type::Generic, - argument_type::Lookup, - }; - - constexpr static const std::array, 3> arguments_values = { - std::make_pair(21, 3), - std::make_pair(0, 21), - std::make_pair(24, 6), - }; - - public: - - static std::pair alpha_map(argument_type arg) { - for (std::size_t i = 0; i < argument_types.size(); ++i) { - if (arg == argument_types[i]) { - return arguments_values[i]; - } - } - assert(false); - return std::make_pair(0, 0); - } - - constexpr static const std::size_t lookup_columns = 4; - constexpr static const bool lookup_runtime = false; - constexpr static const bool joint_lookup = true; - - constexpr static const bool poseidon_gate = false; - constexpr static const bool ec_arithmetic_gates = true; - constexpr static const bool generic_gate = false; - constexpr static const bool chacha_gate = false; - - constexpr static const std::size_t poseidon_gates_count = 15; - constexpr static const std::size_t ec_arithmetic_gates_count = 4; - - constexpr static const std::size_t alpha_powers_n = 30; - - constexpr static const std::array coefficient_str = { - "Cell(Variable { col: Index(Poseidon), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(8);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(9);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(10);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(11);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(12);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(13);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(14);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - }; - - constexpr static const char *lookup_gate_str = "Alpha;Pow(24);VanishesOnLast4Rows;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: LookupAggreg, row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Beta;Add;Pow(3);Mul;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Beta;Add;Pow(3);Gamma;JointCombiner;Cell(Variable { col: Witness(2), row: Curr });Mul;Cell(Variable { col: Witness(1), row: Curr });Add;JointCombiner;Pow(2);Cell(Variable { col: Witness(0), row: Curr });Mul;Add;Add;Mul;Gamma;JointCombiner;Cell(Variable { col: Witness(4), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Add;JointCombiner;Pow(2);Cell(Variable { col: Witness(0), row: Curr });Mul;Add;Add;Mul;Gamma;JointCombiner;Cell(Variable { col: Witness(6), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Add;JointCombiner;Pow(2);Cell(Variable { col: Witness(0), row: Curr });Mul;Add;Add;Mul;Add;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupTable, row: Curr });Add;Beta;Cell(Variable { col: LookupTable, row: Next });Mul;Add;Mul;Mul;Mul;Mul;Mul;\0"; - - constexpr static const char *var_base_mul_str = "Cell(Variable { col: Witness(5), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(7), row: Next });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Next });Cell(Variable { col: Witness(7), row: Next });Mul;Store;Cell(Variable { col: Witness(2), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(7), row: Next });Mul;Sub;Store;Load(2);Mul;Load(1);Load(1);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(0);Add;Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Load(1);Mul;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Mul;Cell(Variable { col: Witness(3), row: Next });Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(8), row: Next });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Next });Cell(Variable { col: Witness(8), row: Next });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(8), row: Next });Mul;Sub;Store;Load(5);Mul;Load(4);Load(4);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(3);Add;Mul;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Load(4);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(9), row: Curr });Sub;Load(5);Mul;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Mul;Cell(Variable { col: Witness(4), row: Next });Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Next });Mul;Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(9), row: Next });Cell(Variable { col: Witness(9), row: Next });Mul;Store;Cell(Variable { col: Witness(9), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(9), row: Next });Mul;Sub;Store;Load(8);Mul;Load(7);Load(7);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(6);Add;Mul;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Load(7);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(11), row: Curr });Sub;Load(8);Mul;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Mul;Cell(Variable { col: Witness(5), row: Next });Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Next });Mul;Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(15);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(10), row: Next });Cell(Variable { col: Witness(10), row: Next });Mul;Store;Cell(Variable { col: Witness(11), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(10), row: Next });Mul;Sub;Store;Load(11);Mul;Load(10);Load(10);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(9);Add;Mul;Sub;Mul;Add;Alpha;Pow(16);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Load(10);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(13), row: Curr });Sub;Load(11);Mul;Sub;Mul;Add;Alpha;Pow(17);Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Mul;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;Alpha;Pow(18);Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(11), row: Next });Mul;Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(19);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(11), row: Next });Cell(Variable { col: Witness(11), row: Next });Mul;Store;Cell(Variable { col: Witness(13), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(11), row: Next });Mul;Sub;Store;Load(14);Mul;Load(13);Load(13);Mul;Cell(Variable { col: Witness(0), row: Next });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(12);Add;Mul;Sub;Mul;Add;Alpha;Pow(20);Cell(Variable { col: Witness(1), row: Next });Cell(Variable { col: Witness(14), row: Curr });Add;Load(13);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Next });Sub;Load(14);Mul;Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_str = "Cell(Variable { col: Witness(11), row: Curr });Dup;Mul;Cell(Variable { col: Witness(11), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(12), row: Curr });Dup;Mul;Cell(Variable { col: Witness(12), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(13), row: Curr });Dup;Mul;Cell(Variable { col: Witness(13), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(14), row: Curr });Dup;Mul;Cell(Variable { col: Witness(14), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(11), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(4), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(12), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Dup;Mul;Store;Sub;Load(0);Add;Cell(Variable { col: Witness(4), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Store;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(5), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(5), row: Curr });Dup;Add;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(6);Load(3);Dup;Mul;Load(2);Dup;Mul;Load(1);Load(0);Sub;Cell(Variable { col: Witness(7), row: Curr });Add;Mul;Sub;Mul;Add;Alpha;Pow(7);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(13), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(14), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(7), row: Curr });Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Dup;Mul;Store;Sub;Load(4);Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(4), row: Next });Sub;Store;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(8), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Load(6);Mul;Sub;Mul;Add;Alpha;Pow(9);Load(7);Dup;Mul;Load(6);Dup;Mul;Load(5);Load(4);Sub;Cell(Variable { col: Witness(4), row: Next });Add;Mul;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(6), row: Curr });Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *complete_add_str = "Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Store;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Load(0);Mul;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Dup;Add;Sub;Load(1);Sub;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Load(0);Cell(Variable { col: Witness(8), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(1), row: Curr });Sub;Store;Sub;Mul;Add;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Cell(Variable { col: Witness(4), row: Curr });Add;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Cell(Variable { col: Witness(1), row: Curr });Sub;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(5);Load(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(6);Load(2);Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_scalar_str = "Cell(Variable { col: Witness(0), row: Curr });Dup;Add;Dup;Add;Cell(Variable { col: Witness(6), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(7), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(8), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Curr });Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Store;Add;Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(3), row: Curr });Dup;Add;Load(0);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(6), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(7), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(8), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(9), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(10), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(11), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(12), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(13), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Mul;Add;\0"; - - constexpr static const char *constant_term_str = "Cell(Variable { col: Index(Poseidon), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(0), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(1), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(2), row: Curr });Pow(7);Store;Mul;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Mds { row: 1, col: 0 };Load(0);Mul;Mds { row: 1, col: 1 };Load(1);Mul;Add;Mds { row: 1, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(8), row: Curr });Mds { row: 2, col: 0 };Load(0);Mul;Mds { row: 2, col: 1 };Load(1);Mul;Add;Mds { row: 2, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(9), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(6), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(7), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(8), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(10), row: Curr });Mds { row: 1, col: 0 };Load(3);Mul;Mds { row: 1, col: 1 };Load(4);Mul;Add;Mds { row: 1, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(11), row: Curr });Mds { row: 2, col: 0 };Load(3);Mul;Mds { row: 2, col: 1 };Load(4);Mul;Add;Mds { row: 2, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(12), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(9), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(10), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(11), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(13), row: Curr });Mds { row: 1, col: 0 };Load(6);Mul;Mds { row: 1, col: 1 };Load(7);Mul;Add;Mds { row: 1, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(14), row: Curr });Mds { row: 2, col: 0 };Load(6);Mul;Mds { row: 2, col: 1 };Load(7);Mul;Add;Mds { row: 2, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(3), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(12), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(13), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(14), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(4), row: Curr });Mds { row: 1, col: 0 };Load(9);Mul;Mds { row: 1, col: 1 };Load(10);Mul;Add;Mds { row: 1, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(5), row: Curr });Mds { row: 2, col: 0 };Load(9);Mul;Mds { row: 2, col: 1 };Load(10);Mul;Add;Mds { row: 2, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(0), row: Next });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(3), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(4), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(5), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(1), row: Next });Mds { row: 1, col: 0 };Load(12);Mul;Mds { row: 1, col: 1 };Load(13);Mul;Add;Mds { row: 1, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(2), row: Next });Mds { row: 2, col: 0 };Load(12);Mul;Mds { row: 2, col: 1 };Load(13);Mul;Add;Mds { row: 2, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Mul;Alpha;Pow(24);VanishesOnLast4Rows;Cell(Variable { col: LookupAggreg, row: Next });Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(0), row: Curr });Add;Beta;Cell(Variable { col: LookupSorted(0), row: Next });Mul;Add;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(1), row: Next });Add;Beta;Cell(Variable { col: LookupSorted(1), row: Curr });Mul;Add;Mul;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(2), row: Curr });Add;Beta;Cell(Variable { col: LookupSorted(2), row: Next });Mul;Add;Mul;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupSorted(3), row: Next });Add;Beta;Cell(Variable { col: LookupSorted(3), row: Curr });Mul;Add;Mul;Mul;Cell(Variable { col: LookupAggreg, row: Curr });Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Gamma;JointCombiner;Pow(2);Literal 0000000000000000000000000000000000000000000000000000000000000000;Mul;Add;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Beta;Add;Pow(3);Mul;Gamma;Beta;Literal 0000000000000000000000000000000000000000000000000000000000000001;Add;Mul;Cell(Variable { col: LookupTable, row: Curr });Add;Beta;Cell(Variable { col: LookupTable, row: Next });Mul;Add;Mul;Mul;Sub;Mul;Mul;Alpha;Pow(25);UnnormalizedLagrangeBasis(0);Cell(Variable { col: LookupAggreg, row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Mul;Add;Alpha;Pow(26);UnnormalizedLagrangeBasis(-4);Cell(Variable { col: LookupAggreg, row: Curr });Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Mul;Add;Alpha;Pow(27);UnnormalizedLagrangeBasis(-4);Cell(Variable { col: LookupSorted(0), row: Curr });Cell(Variable { col: LookupSorted(1), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(28);UnnormalizedLagrangeBasis(0);Cell(Variable { col: LookupSorted(1), row: Curr });Cell(Variable { col: LookupSorted(2), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(29);UnnormalizedLagrangeBasis(-4);Cell(Variable { col: LookupSorted(2), row: Curr });Cell(Variable { col: LookupSorted(3), row: Curr });Sub;Mul;Mul;Add;Add;\0"; - - private: - - constexpr static const std::array - coefficient_array_size = { - count_delimiters(coefficient_str[0]), count_delimiters(coefficient_str[1]), - count_delimiters(coefficient_str[2]), count_delimiters(coefficient_str[3]), - count_delimiters(coefficient_str[4]), count_delimiters(coefficient_str[5]), - count_delimiters(coefficient_str[6]), count_delimiters(coefficient_str[7]), - count_delimiters(coefficient_str[8]), count_delimiters(coefficient_str[9]), - count_delimiters(coefficient_str[10]), count_delimiters(coefficient_str[11]), - count_delimiters(coefficient_str[12]), count_delimiters(coefficient_str[13]), - count_delimiters(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_array_size = count_delimiters(var_base_mul_str); - - constexpr static const std::size_t endo_mul_array_size = count_delimiters(endo_mul_str); - - constexpr static const std::size_t complete_add_array_size = count_delimiters(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_array_size = count_delimiters(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_array_size = count_delimiters(constant_term_str); - - constexpr static const std::size_t lookup_gate_array_size = count_delimiters(lookup_gate_str); - - constexpr static const std::array - coefficient_rows = { - rpn_component_rows(coefficient_str[0]), - rpn_component_rows(coefficient_str[1]), - rpn_component_rows(coefficient_str[2]), - rpn_component_rows(coefficient_str[3]), - rpn_component_rows(coefficient_str[4]), - rpn_component_rows(coefficient_str[5]), - rpn_component_rows(coefficient_str[6]), - rpn_component_rows(coefficient_str[7]), - rpn_component_rows(coefficient_str[8]), - rpn_component_rows(coefficient_str[9]), - rpn_component_rows(coefficient_str[10]), - rpn_component_rows(coefficient_str[11]), - rpn_component_rows(coefficient_str[12]), - rpn_component_rows(coefficient_str[13]), - rpn_component_rows(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_rows = - rpn_component_rows(var_base_mul_str); - - constexpr static const std::size_t endo_mul_rows = - rpn_component_rows(endo_mul_str); - - constexpr static const std::size_t complete_add_rows = - rpn_component_rows(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_rows = - rpn_component_rows(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_rows = - rpn_component_rows(constant_term_str); - - constexpr static const std::size_t lookup_gate_rows = - rpn_component_rows(lookup_gate_str); - - public: - - constexpr static const std::size_t size = 20; - constexpr static const std::array terms = {{ - {column_type::Coefficient, 0, coefficient_str[0], coefficient_rows[0]}, - {column_type::Coefficient, 1, coefficient_str[1], coefficient_rows[1]}, - {column_type::Coefficient, 2, coefficient_str[2], coefficient_rows[2]}, - {column_type::Coefficient, 3, coefficient_str[3], coefficient_rows[3]}, - {column_type::Coefficient, 4, coefficient_str[4], coefficient_rows[4]}, - {column_type::Coefficient, 5, coefficient_str[5], coefficient_rows[5]}, - {column_type::Coefficient, 6, coefficient_str[6], coefficient_rows[6]}, - {column_type::Coefficient, 7, coefficient_str[7], coefficient_rows[7]}, - {column_type::Coefficient, 8, coefficient_str[8], coefficient_rows[8]}, - {column_type::Coefficient, 9, coefficient_str[9], coefficient_rows[9]}, - {column_type::Coefficient, 10, coefficient_str[10], coefficient_rows[10]}, - {column_type::Coefficient, 11, coefficient_str[11], coefficient_rows[11]}, - {column_type::Coefficient, 12, coefficient_str[12], coefficient_rows[12]}, - {column_type::Coefficient, 13, coefficient_str[13], coefficient_rows[13]}, - {column_type::Coefficient, 14, coefficient_str[14], coefficient_rows[14]}, - {column_type::VarBaseMul, 0, var_base_mul_str, var_base_mul_rows}, - {column_type::EndoMul, 0, endo_mul_str, endo_mul_rows}, - {column_type::EndoMulScalar, 0, endo_mul_scalar_str, endo_mul_scalar_rows}, - {column_type::CompleteAdd, 0, complete_add_str, complete_add_rows}, - {column_type::LookupKindIndex, 2, lookup_gate_str, lookup_gate_rows}, - }}; - }; - } // namespace components - } // namespace blueprint - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_LOOKUP_TEST_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/recursion_test.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/recursion_test.hpp deleted file mode 100644 index 82515c08ed..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/index_terms_instances/recursion_test.hpp +++ /dev/null @@ -1,210 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_BLUEPRINT_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_RECURSION_TEST_HPP -#define CRYPTO3_ZK_BLUEPRINT_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_RECURSION_TEST_HPP - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace components { - - // index terms for ec test - // https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/recursion.rs#L15 - template - class index_terms_scalars_list_chacha_test; - - template - class index_terms_scalars_list_chacha_test< - snark::plonk_constraint_system> { - - typedef snark::plonk_constraint_system - ArithmetizationType; - - constexpr static const std::array argument_types = { - argument_type::Generic, - argument_type::Permutation, - argument_type::Generic, - argument_type::Permutation, - }; - - constexpr static const std::array, 4> arguments_values = { - std::make_pair(0, 21), - std::make_pair(21, 3), - std::make_pair(0, 21), - std::make_pair(21, 3), - }; - - public: - - static std::pair alpha_map(argument_type arg) { - for (std::size_t i = 0; i < argument_types.size(); ++i) { - if (arg == argument_types[i]) { - return arguments_values[i]; - } - } - assert(false); - return std::make_pair(0, 0); - } - - constexpr static const std::size_t lookup_columns = 5; - constexpr static const bool lookup_runtime = false; - constexpr static const bool joint_lookup = false; - - constexpr static const bool poseidon_gate = false; - constexpr static const bool ec_arithmetic_gates = true; - constexpr static const bool generic_gate = false; - constexpr static const bool chacha_gate = false; - - constexpr static const std::size_t poseidon_gates_count = 15; - constexpr static const std::size_t ec_arithmetic_gates_count = 4; - - constexpr static const std::size_t alpha_powers_n = 24; - - constexpr static const std::array coefficient_str = { - "Cell(Variable { col: Index(Poseidon), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(8);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(9);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(10);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(11);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(12);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(13);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - "Cell(Variable { col: Index(Poseidon), row: Curr });Alpha;Pow(14);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Mul;Mul;\0", - }; - - constexpr static const char *var_base_mul_str = "Cell(Variable { col: Witness(5), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Dup;Add;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Mul;Cell(Variable { col: Witness(2), row: Next });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(7), row: Next });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(2), row: Next });Cell(Variable { col: Witness(2), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Next });Cell(Variable { col: Witness(7), row: Next });Mul;Store;Cell(Variable { col: Witness(2), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(7), row: Next });Mul;Sub;Store;Load(2);Mul;Load(1);Load(1);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(0);Add;Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Curr });Add;Load(1);Mul;Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Mul;Cell(Variable { col: Witness(3), row: Next });Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(8), row: Next });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(3), row: Next });Cell(Variable { col: Witness(3), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Next });Cell(Variable { col: Witness(8), row: Next });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(8), row: Next });Mul;Sub;Store;Load(5);Mul;Load(4);Load(4);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(3);Add;Mul;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Add;Load(4);Mul;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(9), row: Curr });Sub;Load(5);Mul;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Mul;Cell(Variable { col: Witness(4), row: Next });Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Next });Mul;Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(4), row: Next });Cell(Variable { col: Witness(4), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(9), row: Next });Cell(Variable { col: Witness(9), row: Next });Mul;Store;Cell(Variable { col: Witness(9), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(9), row: Next });Mul;Sub;Store;Load(8);Mul;Load(7);Load(7);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(6);Add;Mul;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(10), row: Curr });Add;Load(7);Mul;Cell(Variable { col: Witness(9), row: Curr });Cell(Variable { col: Witness(11), row: Curr });Sub;Load(8);Mul;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Mul;Cell(Variable { col: Witness(5), row: Next });Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Next });Mul;Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(5), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(15);Cell(Variable { col: Witness(12), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(10), row: Next });Cell(Variable { col: Witness(10), row: Next });Mul;Store;Cell(Variable { col: Witness(11), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(10), row: Next });Mul;Sub;Store;Load(11);Mul;Load(10);Load(10);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(9);Add;Mul;Sub;Mul;Add;Alpha;Pow(16);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(12), row: Curr });Add;Load(10);Mul;Cell(Variable { col: Witness(11), row: Curr });Cell(Variable { col: Witness(13), row: Curr });Sub;Load(11);Mul;Sub;Mul;Add;Alpha;Pow(17);Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Mul;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;Alpha;Pow(18);Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Cell(Variable { col: Witness(11), row: Next });Mul;Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(6), row: Next });Cell(Variable { col: Witness(6), row: Next });Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Sub;Sub;Mul;Add;Alpha;Pow(19);Cell(Variable { col: Witness(14), row: Curr });Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(11), row: Next });Cell(Variable { col: Witness(11), row: Next });Mul;Store;Cell(Variable { col: Witness(13), row: Curr });Sub;Cell(Variable { col: Witness(0), row: Curr });Sub;Sub;Store;Cell(Variable { col: Witness(11), row: Next });Mul;Sub;Store;Load(14);Mul;Load(13);Load(13);Mul;Cell(Variable { col: Witness(0), row: Next });Cell(Variable { col: Witness(0), row: Curr });Sub;Load(12);Add;Mul;Sub;Mul;Add;Alpha;Pow(20);Cell(Variable { col: Witness(1), row: Next });Cell(Variable { col: Witness(14), row: Curr });Add;Load(13);Mul;Cell(Variable { col: Witness(13), row: Curr });Cell(Variable { col: Witness(0), row: Next });Sub;Load(14);Mul;Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_str = "Cell(Variable { col: Witness(11), row: Curr });Dup;Mul;Cell(Variable { col: Witness(11), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(12), row: Curr });Dup;Mul;Cell(Variable { col: Witness(12), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(13), row: Curr });Dup;Mul;Cell(Variable { col: Witness(13), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(14), row: Curr });Dup;Mul;Cell(Variable { col: Witness(14), row: Curr });Sub;Mul;Add;Alpha;Pow(4);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(11), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(4), row: Curr });Sub;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(12), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(4), row: Curr });Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Dup;Mul;Store;Sub;Load(0);Add;Cell(Variable { col: Witness(4), row: Curr });Cell(Variable { col: Witness(7), row: Curr });Sub;Store;Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(5), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(5), row: Curr });Dup;Add;Load(2);Mul;Sub;Mul;Add;Alpha;Pow(6);Load(3);Dup;Mul;Load(2);Dup;Mul;Load(1);Load(0);Sub;Cell(Variable { col: Witness(7), row: Curr });Add;Mul;Sub;Mul;Add;Alpha;Pow(7);Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(13), row: Curr });EndoCoefficient;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Mul;Add;Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Cell(Variable { col: Witness(7), row: Curr });Sub;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(14), row: Curr });Dup;Add;Literal 0000000000000000000000000000000000000000000000000000000000000001;Sub;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(8), row: Curr });Sub;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(7), row: Curr });Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Dup;Mul;Store;Sub;Load(4);Add;Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(4), row: Next });Sub;Store;Cell(Variable { col: Witness(10), row: Curr });Mul;Cell(Variable { col: Witness(5), row: Next });Cell(Variable { col: Witness(8), row: Curr });Add;Store;Add;Mul;Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Load(6);Mul;Sub;Mul;Add;Alpha;Pow(9);Load(7);Dup;Mul;Load(6);Dup;Mul;Load(5);Load(4);Sub;Cell(Variable { col: Witness(4), row: Next });Add;Mul;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(6), row: Curr });Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Dup;Add;Cell(Variable { col: Witness(14), row: Curr });Add;Cell(Variable { col: Witness(6), row: Next });Sub;Mul;Add;\0"; - - constexpr static const char *complete_add_str = "Cell(Variable { col: Witness(10), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Sub;Store;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Load(0);Mul;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Dup;Add;Cell(Variable { col: Witness(1), row: Curr });Mul;Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Mul;Store;Dup;Add;Sub;Load(1);Sub;Mul;Literal 0000000000000000000000000000000000000000000000000000000000000001;Cell(Variable { col: Witness(7), row: Curr });Sub;Load(0);Cell(Variable { col: Witness(8), row: Curr });Mul;Cell(Variable { col: Witness(3), row: Curr });Cell(Variable { col: Witness(1), row: Curr });Sub;Store;Sub;Mul;Add;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(2), row: Curr });Add;Cell(Variable { col: Witness(4), row: Curr });Add;Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(8), row: Curr });Mul;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(8), row: Curr });Cell(Variable { col: Witness(0), row: Curr });Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Cell(Variable { col: Witness(1), row: Curr });Sub;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(5);Load(2);Cell(Variable { col: Witness(7), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Mul;Add;Alpha;Pow(6);Load(2);Cell(Variable { col: Witness(9), row: Curr });Mul;Cell(Variable { col: Witness(6), row: Curr });Sub;Mul;Add;\0"; - - constexpr static const char *endo_mul_scalar_str = "Cell(Variable { col: Witness(0), row: Curr });Dup;Add;Dup;Add;Cell(Variable { col: Witness(6), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(7), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(8), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(9), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(10), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(11), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(12), row: Curr });Add;Dup;Add;Dup;Add;Cell(Variable { col: Witness(13), row: Curr });Add;Cell(Variable { col: Witness(1), row: Curr });Sub;Alpha;Pow(1);Cell(Variable { col: Witness(2), row: Curr });Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Store;Add;Dup;Add;Literal 1555555555555555555555555555555560C232FEADC45309330F104F00000001;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Store;Add;Cell(Variable { col: Witness(4), row: Curr });Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(3), row: Curr });Dup;Add;Load(0);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(1);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(2);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(3);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(4);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(5);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(6);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Dup;Add;Load(7);Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 0000000000000000000000000000000000000000000000000000000000000003;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ED00000000;Add;Add;Add;Cell(Variable { col: Witness(5), row: Curr });Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(6), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(6), row: Curr });Mul;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(7), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(7), row: Curr });Mul;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(8), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(8), row: Curr });Mul;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(9), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(9), row: Curr });Mul;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(10), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(10), row: Curr });Mul;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(11), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(11), row: Curr });Mul;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(12), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(12), row: Curr });Mul;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(13), row: Curr });Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 000000000000000000000000000000000000000000000000000000000000000B;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Literal 40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB;Add;Cell(Variable { col: Witness(13), row: Curr });Mul;Mul;Add;\0"; - - constexpr static const char *constant_term_str = "Cell(Variable { col: Index(Poseidon), row: Curr });Cell(Variable { col: Witness(6), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(0), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(1), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(2), row: Curr });Pow(7);Store;Mul;Add;Sub;Alpha;Pow(1);Cell(Variable { col: Witness(7), row: Curr });Mds { row: 1, col: 0 };Load(0);Mul;Mds { row: 1, col: 1 };Load(1);Mul;Add;Mds { row: 1, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(2);Cell(Variable { col: Witness(8), row: Curr });Mds { row: 2, col: 0 };Load(0);Mul;Mds { row: 2, col: 1 };Load(1);Mul;Add;Mds { row: 2, col: 2 };Load(2);Mul;Add;Sub;Mul;Add;Alpha;Pow(3);Cell(Variable { col: Witness(9), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(6), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(7), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(8), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(4);Cell(Variable { col: Witness(10), row: Curr });Mds { row: 1, col: 0 };Load(3);Mul;Mds { row: 1, col: 1 };Load(4);Mul;Add;Mds { row: 1, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(5);Cell(Variable { col: Witness(11), row: Curr });Mds { row: 2, col: 0 };Load(3);Mul;Mds { row: 2, col: 1 };Load(4);Mul;Add;Mds { row: 2, col: 2 };Load(5);Mul;Add;Sub;Mul;Add;Alpha;Pow(6);Cell(Variable { col: Witness(12), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(9), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(10), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(11), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(7);Cell(Variable { col: Witness(13), row: Curr });Mds { row: 1, col: 0 };Load(6);Mul;Mds { row: 1, col: 1 };Load(7);Mul;Add;Mds { row: 1, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(8);Cell(Variable { col: Witness(14), row: Curr });Mds { row: 2, col: 0 };Load(6);Mul;Mds { row: 2, col: 1 };Load(7);Mul;Add;Mds { row: 2, col: 2 };Load(8);Mul;Add;Sub;Mul;Add;Alpha;Pow(9);Cell(Variable { col: Witness(3), row: Curr });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(12), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(13), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(14), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(10);Cell(Variable { col: Witness(4), row: Curr });Mds { row: 1, col: 0 };Load(9);Mul;Mds { row: 1, col: 1 };Load(10);Mul;Add;Mds { row: 1, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(11);Cell(Variable { col: Witness(5), row: Curr });Mds { row: 2, col: 0 };Load(9);Mul;Mds { row: 2, col: 1 };Load(10);Mul;Add;Mds { row: 2, col: 2 };Load(11);Mul;Add;Sub;Mul;Add;Alpha;Pow(12);Cell(Variable { col: Witness(0), row: Next });Mds { row: 0, col: 0 };Cell(Variable { col: Witness(3), row: Curr });Pow(7);Store;Mul;Mds { row: 0, col: 1 };Cell(Variable { col: Witness(4), row: Curr });Pow(7);Store;Mul;Add;Mds { row: 0, col: 2 };Cell(Variable { col: Witness(5), row: Curr });Pow(7);Store;Mul;Add;Sub;Mul;Add;Alpha;Pow(13);Cell(Variable { col: Witness(1), row: Next });Mds { row: 1, col: 0 };Load(12);Mul;Mds { row: 1, col: 1 };Load(13);Mul;Add;Mds { row: 1, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Alpha;Pow(14);Cell(Variable { col: Witness(2), row: Next });Mds { row: 2, col: 0 };Load(12);Mul;Mds { row: 2, col: 1 };Load(13);Mul;Add;Mds { row: 2, col: 2 };Load(14);Mul;Add;Sub;Mul;Add;Mul;\0"; - - private: - - constexpr static const std::array - coefficient_array_size = { - count_delimiters(coefficient_str[0]), count_delimiters(coefficient_str[1]), - count_delimiters(coefficient_str[2]), count_delimiters(coefficient_str[3]), - count_delimiters(coefficient_str[4]), count_delimiters(coefficient_str[5]), - count_delimiters(coefficient_str[6]), count_delimiters(coefficient_str[7]), - count_delimiters(coefficient_str[8]), count_delimiters(coefficient_str[9]), - count_delimiters(coefficient_str[10]), count_delimiters(coefficient_str[11]), - count_delimiters(coefficient_str[12]), count_delimiters(coefficient_str[13]), - count_delimiters(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_array_size = count_delimiters(var_base_mul_str); - - constexpr static const std::size_t endo_mul_array_size = count_delimiters(endo_mul_str); - - constexpr static const std::size_t complete_add_array_size = count_delimiters(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_array_size = count_delimiters(endo_mul_scalar_str); - - constexpr static const std::size_t constatnt_term_array_size = count_delimiters(constant_term_str); - - constexpr static const std::array - coefficient_rows = { - rpn_component_rows(coefficient_str[0]), - rpn_component_rows(coefficient_str[1]), - rpn_component_rows(coefficient_str[2]), - rpn_component_rows(coefficient_str[3]), - rpn_component_rows(coefficient_str[4]), - rpn_component_rows(coefficient_str[5]), - rpn_component_rows(coefficient_str[6]), - rpn_component_rows(coefficient_str[7]), - rpn_component_rows(coefficient_str[8]), - rpn_component_rows(coefficient_str[9]), - rpn_component_rows(coefficient_str[10]), - rpn_component_rows(coefficient_str[11]), - rpn_component_rows(coefficient_str[12]), - rpn_component_rows(coefficient_str[13]), - rpn_component_rows(coefficient_str[14]) - }; - - constexpr static const std::size_t var_base_mul_rows = - rpn_component_rows(var_base_mul_str); - - constexpr static const std::size_t endo_mul_rows = - rpn_component_rows(endo_mul_str); - - constexpr static const std::size_t complete_add_rows = - rpn_component_rows(complete_add_str); - - constexpr static const std::size_t endo_mul_scalar_rows = - rpn_component_rows(endo_mul_scalar_str); - - constexpr static const std::size_t constant_term_rows = - rpn_component_rows(constant_term_str); - - constexpr static const std::size_t lookup_gate_rows = - rpn_component_rows(lookup_gate_str); - - public: - - constexpr static const std::size_t size = 19; - constexpr static const std::array terms = {{ - {column_type::Coefficient, 0, coefficient_str[0], coefficient_rows[0]}, - {column_type::Coefficient, 1, coefficient_str[1], coefficient_rows[1]}, - {column_type::Coefficient, 2, coefficient_str[2], coefficient_rows[2]}, - {column_type::Coefficient, 3, coefficient_str[3], coefficient_rows[3]}, - {column_type::Coefficient, 4, coefficient_str[4], coefficient_rows[4]}, - {column_type::Coefficient, 5, coefficient_str[5], coefficient_rows[5]}, - {column_type::Coefficient, 6, coefficient_str[6], coefficient_rows[6]}, - {column_type::Coefficient, 7, coefficient_str[7], coefficient_rows[7]}, - {column_type::Coefficient, 8, coefficient_str[8], coefficient_rows[8]}, - {column_type::Coefficient, 9, coefficient_str[9], coefficient_rows[9]}, - {column_type::Coefficient, 10, coefficient_str[10], coefficient_rows[10]}, - {column_type::Coefficient, 11, coefficient_str[11], coefficient_rows[11]}, - {column_type::Coefficient, 12, coefficient_str[12], coefficient_rows[12]}, - {column_type::Coefficient, 13, coefficient_str[13], coefficient_rows[13]}, - {column_type::Coefficient, 14, coefficient_str[14], coefficient_rows[14]}, - {column_type::VarBaseMul, 0, var_base_mul_str, var_base_mul_rows}, - {column_type::EndoMul, 0, endo_mul_str, endo_mul_rows}, - {column_type::EndoMulScalar, 0, endo_mul_scalar_str, endo_mul_scalar_rows}, - {column_type::CompleteAdd, 0, complete_add_str, complete_add_rows}, - }}; - }; - } // namespace components - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_BLUEPRINT_PLONK_KIMCHI_DETAIL_CONSTRAINTS_INDEX_TERMS_INSTANCES_LOOKUP_TEST_HPP \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/oracles_scalar.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/oracles_scalar.cpp deleted file mode 100644 index 0640f3b3b0..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/oracles_scalar.cpp +++ /dev/null @@ -1,207 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_oracles_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -#include "test_plonk_component.hpp" -#include "proof_data.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_oracles_test_suite) - -template -void prepare_proof(zk::snark::pickles_proof &original_proof, - zk::components::kimchi_proof_scalar &circuit_proof, - std::vector &public_input) { - using var = zk::snark::plonk_variable; - - // eval_proofs - for (std::size_t point_idx = 0; point_idx < 2; point_idx++) { - // w - for (std::size_t i = 0; i < KimchiParamsType::witness_columns; i++) { - public_input.push_back(original_proof.evals[point_idx].w[i]); - circuit_proof.proof_evals[point_idx].w[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // z - public_input.push_back(original_proof.evals[point_idx].z); - circuit_proof.proof_evals[point_idx].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - // s - for (std::size_t i = 0; i < KimchiParamsType::permut_size - 1; i++) { - public_input.push_back(original_proof.evals[point_idx].s[i]); - circuit_proof.proof_evals[point_idx].s[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // lookup - if (KimchiParamsType::use_lookup) { - // TODO - } - // generic_selector - public_input.push_back(original_proof.evals[point_idx].generic_selector); - circuit_proof.proof_evals[point_idx].generic_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - // poseidon_selector - public_input.push_back(original_proof.evals[point_idx].poseidon_selector); - circuit_proof.proof_evals[point_idx].poseidon_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - // ft_eval - public_input.push_back(algebra::random_element()); - circuit_proof.ft_eval = var(0, public_input.size() - 1, false, var::column_type::public_input); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_oracles_test) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - zk::components::kimchi_verifier_index_scalar verifier_index; - typename BlueprintFieldType::value_type omega = - 0x1B1A85952300603BBF8DD3068424B64608658ACBB72CA7D2BB9694ADFA504418_cppui_modular256; - // verifier_index.zkpm = {0x2C46205451F6C3BBEA4BABACBEE609ECF1039A903C42BFF639EDC5BA33356332_cppui_modular256, - // 0x1764D9CB4C64EBA9A150920807637D458919CB6948821F4D15EB1994EADF9CE3_cppui_modular256, - // 0x0140117C8BBC4CE4644A58F7007148577782213065BB9699BF5C391FBE1B3E6D_cppui_modular256, - // 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256}; - std::size_t domain_size = 128; - verifier_index.domain_size = domain_size; - verifier_index.omega = var(0, 6, false, var::column_type::public_input); - - using component_type = - zk::components::oracles_scalar; - - zk::snark::pickles_proof kimchi_proof = test_proof(); - - typename BlueprintFieldType::value_type joint_combiner = 0; - typename BlueprintFieldType::value_type beta = 0; - typename BlueprintFieldType::value_type gamma = 0; - typename BlueprintFieldType::value_type alpha = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type fq_digest = - 0x01D4E77CCD66755BDDFDBB6E4E8D8D17A6708B9CB56654D12070BD7BF4A5B33B_cppui_modular256; - typename BlueprintFieldType::value_type expected_alpha = - 0x23A8600917236F0E644D49DD5E6CA89537CE3047DA7E29D2A7B8CA6006616092_cppui_modular256; - std::cout << "Expected alpha: " << expected_alpha.data << std::endl; - typename BlueprintFieldType::value_type expected_zeta = - 0x3D0F1F3A3D07DC73FBDF3718FFE270122AA367FB5BA667AD4A4AB81167D21BE4_cppui_modular256; - std::cout << "Expected zeta: " << expected_zeta.data << std::endl; - - zk::components::kimchi_proof_scalar proof; - std::array challenges; - typename zk::components::binding::fq_sponge_output - fq_output = {var(0, 0, false, var::column_type::public_input), - var(0, 1, false, var::column_type::public_input), - var(0, 2, false, var::column_type::public_input), - var(0, 3, false, var::column_type::public_input), - var(0, 4, false, var::column_type::public_input), - var(0, 5, false, var::column_type::public_input), - challenges}; - - std::vector public_input = {joint_combiner, beta, gamma, alpha, - zeta, fq_digest, omega}; - - // TODO prepare real data - for (std::size_t i = 0; i < public_input_size; i++) { - typename BlueprintFieldType::value_type tmp = algebra::random_element(); - public_input.push_back(tmp); - proof.public_input[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - for (std::size_t i = 0; i < kimchi_params::prev_challenges_size; i++) { - for (std::size_t j = 0; j < eval_rounds; j++) { - typename BlueprintFieldType::value_type tmp = algebra::random_element(); - public_input.push_back(tmp); - proof.prev_challenges[i][j] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - } - - prepare_proof(kimchi_proof, proof, public_input); - - typename component_type::params_type params = {verifier_index, proof, fq_output}; - - auto result_check = [](AssignmentType &assignment, component_type::result_type &real_res) {}; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/prepare_batch_scalar.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/prepare_batch_scalar.cpp deleted file mode 100644 index a6db5aee89..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/prepare_batch_scalar.cpp +++ /dev/null @@ -1,203 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Alisa Cherniaeva -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_prepare_batch_scalar_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -#include "test_plonk_component.hpp" -#include "proof_data.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_prepare_batch_scalar_test_suite) - -template -void prepare_proof(zk::snark::pickles_proof &original_proof, - zk::components::kimchi_proof_scalar &circuit_proof, - std::vector &public_input) { - using var = zk::snark::plonk_variable; - - // eval_proofs - for (std::size_t point_idx = 0; point_idx < 2; point_idx++) { - // w - for (std::size_t i = 0; i < KimchiParamsType::witness_columns; i++) { - public_input.push_back(original_proof.evals[point_idx].w[i]); - circuit_proof.proof_evals[point_idx].w[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // z - public_input.push_back(original_proof.evals[point_idx].z); - circuit_proof.proof_evals[point_idx].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - // s - for (std::size_t i = 0; i < KimchiParamsType::permut_size - 1; i++) { - public_input.push_back(original_proof.evals[point_idx].s[i]); - circuit_proof.proof_evals[point_idx].s[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // lookup - if (KimchiParamsType::use_lookup) { - // TODO - } - // generic_selector - public_input.push_back(original_proof.evals[point_idx].generic_selector); - circuit_proof.proof_evals[point_idx].generic_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - // poseidon_selector - public_input.push_back(original_proof.evals[point_idx].poseidon_selector); - circuit_proof.proof_evals[point_idx].poseidon_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // ft_eval - public_input.push_back(algebra::random_element()); - circuit_proof.ft_eval = var(0, public_input.size() - 1, false, var::column_type::public_input); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_prepare_batch_scalar_test_suite) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - zk::components::kimchi_verifier_index_scalar verifier_index; - typename BlueprintFieldType::value_type omega = - 0x1B1A85952300603BBF8DD3068424B64608658ACBB72CA7D2BB9694ADFA504418_cppui_modular256; - // verifier_index.zkpm = {0x2C46205451F6C3BBEA4BABACBEE609ECF1039A903C42BFF639EDC5BA33356332_cppui_modular256, - // 0x1764D9CB4C64EBA9A150920807637D458919CB6948821F4D15EB1994EADF9CE3_cppui_modular256, - // 0x0140117C8BBC4CE4644A58F7007148577782213065BB9699BF5C391FBE1B3E6D_cppui_modular256, - // 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256}; - std::size_t domain_size = 128; - verifier_index.domain_size = domain_size; - verifier_index.omega = var(0, 6, false, var::column_type::public_input); - - using component_type = - zk::components::prepare_batch_scalar; - - zk::snark::pickles_proof kimchi_proof = test_proof(); - - typename BlueprintFieldType::value_type joint_combiner = 0; - typename BlueprintFieldType::value_type beta = 0; - typename BlueprintFieldType::value_type gamma = 0; - typename BlueprintFieldType::value_type alpha = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type fq_digest = - 0x01D4E77CCD66755BDDFDBB6E4E8D8D17A6708B9CB56654D12070BD7BF4A5B33B_cppui_modular256; - - zk::components::kimchi_proof_scalar proof; - std::array challenges; - typename zk::components::binding::fq_sponge_output - fq_output = {var(0, 0, false, var::column_type::public_input), - var(0, 1, false, var::column_type::public_input), - var(0, 2, false, var::column_type::public_input), - var(0, 3, false, var::column_type::public_input), - var(0, 4, false, var::column_type::public_input), - var(0, 5, false, var::column_type::public_input), - challenges}; - - std::vector public_input = {joint_combiner, beta, gamma, alpha, zeta, - fq_digest, - // verifier_index (6+) - omega}; - - // TODO prepare real data - for (std::size_t i = 0; i < public_input_size; i++) { - typename BlueprintFieldType::value_type tmp = algebra::random_element(); - public_input.push_back(tmp); - proof.public_input[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - for (std::size_t i = 0; i < kimchi_params::prev_challenges_size; i++) { - for (std::size_t j = 0; j < eval_rounds; j++) { - typename BlueprintFieldType::value_type tmp = algebra::random_element(); - public_input.push_back(tmp); - proof.prev_challenges[i][j] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - } - - prepare_proof(kimchi_proof, proof, public_input); - - typename component_type::params_type params = {verifier_index, proof, fq_output}; - - auto result_check = [](AssignmentType &assignment, component_type::result_type &real_res) {}; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/proof_data.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/proof_data.hpp deleted file mode 100644 index 4dac84b28f..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/proof_data.hpp +++ /dev/null @@ -1,802 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_PICKLES_VERIFIER_PROOF_TEST_DATA_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_PICKLES_VERIFIER_PROOF_TEST_DATA_HPP - -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -using namespace nil::crypto3; - -nil::crypto3::zk::snark::pickles_proof test_proof() { - - using curve_type = algebra::curves::vesta; - using affine_point_type = algebra::curves::vesta::g1_type; - nil::crypto3::zk::snark::pickles_proof proof; - - std::vector> w_comm_unshifted = { - {{0x29C11510848CF79EA9D58C2E7B2F9EABDE5470AB0C7D8051DB68B6A597844291_cppui_modular256, - 0x29A084D99207EE0ADE9471C2101682E8DB5E470231B1FEB7CDEC1A515447E762_cppui_modular256}}, - {{0x2347E650C19A43EA430EB8EF103F42A98B8BBAB41693BA604E762015C90F6B15_cppui_modular256, - 0x2D5E94480F83FBE47282CBD39A46022B90842A442FBA79002AE6811BAE48ADD7_cppui_modular256}}, - {{0x3A38CC8840CBC1C0E9CB2BE5AEA65569391B35932C4F632208FFB76683FD559D_cppui_modular256, - 0x0F6124FC989DFAAACD41531AB7A75E9F68150C1EC659338FF4E2340DC46591DA_cppui_modular256}}, - {{0x1E86CC275E88EE0EE3384B5D6641A9A6D4E3CF08DCE181D7FF9E2934B6406086_cppui_modular256, - 0x06CF0E315DC60DF5551A872E6C6531706506DB19A6425E1A4803BBDD1074A0C4_cppui_modular256}}, - {{0x0F695898DA469CF121E1E704B4B717AA6BC12EFCEF4F1418B42FE7A5437082B6_cppui_modular256, - 0x3BA7967BE5E834EAD6C4B2D8B7FC9533B1B830DDDCA7305B4EF1F7D1CE6F0EE8_cppui_modular256}}, - {{0x1F15E1FAA6E5A22F3B2DA293E52386FE81792BC7D956F797BEDFB11CD3A1A3D4_cppui_modular256, - 0x184919D8F8AE9E1A81CDF386C65454296917E5A26B5FB0040137AF77D4D6AE14_cppui_modular256}}, - {{0x29844A1A0AA89F411287AD425C3B4B84E1A78F04F888056E4C986242E0289EBB_cppui_modular256, - 0x08A4673C07F4E5F5EEAF76708589B110EAF49B76FB37EDAC5BDE5C29433B9188_cppui_modular256}}, - {{0x364ECE69E21835EAE10B1AA9CCBD74305E29C369ED250C0EE49CCD8F24795D03_cppui_modular256, - 0x1C5A4242982EB6E6D1BA1D5E118C46D758DC2AB6AC3E1ECBFD136B1BF5C7270E_cppui_modular256}}, - {{0x38934EBFC2667F0925DDBF006FBC361FE152FD2CDA59D8E2D9F3CBEDD9F6DC42_cppui_modular256, - 0x0583B9CA4362B661B2A4E78D811690B752564B5B60BB4C7F710D16BD098E5481_cppui_modular256}}, - {{0x3232CC46F6A60E0217926D058728DE33D8331CF44E9D589E8AAFFFEBB2FACDED_cppui_modular256, - 0x1DA9F1A0E3F493F5D873469CCD4A860A8564A3776EFC4C00E80916B5A6663CD7_cppui_modular256}}, - {{0x2F96277B56B8779865BB9CB646D9F2F45EAFFDD32F146B957354922B76944F61_cppui_modular256, - 0x2F49E80702D36688FF505B4E2CD848D461EEDCD7B6DE610A72392E05AE889010_cppui_modular256}}, - {{0x09F20586641CC98E68CF252A59480CE50A8C6C6AECE986A676221CD1E8613BC3_cppui_modular256, - 0x2DCC43E7FE9F1CBE4C2FAF0969D7A788C3636FF65466A2A8E8CAD429CB47BA28_cppui_modular256}}, - {{0x25147529907262C1F67F1C8C62B3136C9FF495727F59A5E534A3E257E9A06DE3_cppui_modular256, - 0x30B8453232FF14019691D8A749BD88D0E2FD1D39FE9A66A01165E71EDBA46411_cppui_modular256}}, - {{0x35B38418B473A631CC399723113765268A1F953D8ED9D41D5DD615026E636421_cppui_modular256, - 0x2BEEDE237F3D3ED3942323AA402318C8866BE8DFA31FE9506580846C284DB4D2_cppui_modular256}}, - {{0x3FFD762B06C4DFB4FD8FED560C84F9E9DE699620B6FB4D0ED3089042FE8127E9_cppui_modular256, - 0x2A7B651BE02C61AF87651107F8F43BE53DD2541CDDBD17BA7B316C939109598E_cppui_modular256}}}; - - std::vector w_comm_shifted = { - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - }; - - // w_comm - for (size_t i = 0; i < w_comm_unshifted.size(); ++i) { - proof.commitments.w_comm[i].unshifted.assign(w_comm_unshifted[i].begin(), w_comm_unshifted[i].end()); - proof.commitments.w_comm[0].shifted = w_comm_shifted[i]; - } - // z_comm - proof.commitments.z_comm.unshifted.emplace_back( - 0x0208422D68D15EBB4DAE8A791B23D93DFB93AC143C7463C0ABB9926E29C5EE9C_cppui_modular256, - 0x1A3706AAC63B05B15DB008736ABABA3A4F91DE35E48CA744AEA5E91C1E2288AA_cppui_modular256); - proof.commitments.z_comm.shifted = {0x0, 0x0}; - - // t_comm - proof.commitments.t_comm.unshifted.emplace_back( - 0x38BF25A7BB7EAEBFB14C570BF554072C2066143E57DAF281D69CE7240B510785_cppui_modular256, - 0x0847BFCDDC69B2EDDA8B03574FF0191B0316202347E19796C313B7E1C20C4363_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x2387EEC5D9F7CEE30CD2B0F2E3F73193B4124F6ACC3D1A19D6FED7B9AAA26563_cppui_modular256, - 0x1EE1F50EF640E86771E56D128A868DC02A5DBF285BA413E7C0FA476CBDC18AEB_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x050A5A157A04D8BE29892D3ABD96FFA1265D6CC6DBEF289F25B30CE51279F5C4_cppui_modular256, - 0x1873C5460334C7A6F8A9C6355BF9A560553A3B373A2887E06C1E4F52F3D76089_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x2DA2C4E34A74D6CA7A008F3179CAD50DED36A6DC811ACB3CAABCF68BD73FBB64_cppui_modular256, - 0x0D9F8F90FB6AF2A482FD45D9881959F4AD070FC8E41AD684FA558FA55FA9F9A1_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x0ACA51C54419CC979C802B466126FF526A17C5DA9463DD0BC76F48903DD7716F_cppui_modular256, - 0x3D0BFEA83E10FAC856AEEA3B04D9F70D25C15F91CE58F9AD6677CAA5BC572CC7_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x32EB3EB9641965E96ADFD72E5D4376DE1B62F604ADEC733ADA3EC5E1BD23A6EB_cppui_modular256, - 0x2C5664C919361E47BC5A8327950045489D0C8552B45510FC04EB7A1AA90505A2_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x3932E79F8E1725C875E4766F71BCA1EF8A0D70709EC997CEDBAF31E205966F2C_cppui_modular256, - 0x3C0A7DC230E8E2B2DD47211540CA4CB77536566548E55A7C9B49244E23CF1900_cppui_modular256); - proof.commitments.t_comm.shifted = {0x0, 0x0}; - // - // proof - // lr - proof.proof.lr.push_back({{0x0FD7D4257B544F7C5F43DEC6DEBD5CA8D075787F00271414948D53B0B62FCD16_cppui_modular256, - 0x232F23AECE45995840357A96FF6F8B0DA1B5F104DC68423D851D91E397140A11_cppui_modular256}, - {0x13D5900730BA64BF3D7F01C2CB5216AEE18ADC465739E99C4CA250A4F5C151A0_cppui_modular256, - 0x1F85E3CFEA859928DED3E452AD5B6DC6C82962AEE319789E4BD3DD8433226F96_cppui_modular256}}); - proof.proof.lr.push_back({{0x0CBF8FC044499ED163BB848EF4D5A221E480437F74641EB8C336D8E80804FC1E_cppui_modular256, - 0x1B993999EBB897518E05D15968355C903FDC7B4F7B31E75B141C8382331462AB_cppui_modular256}, - {0x1C98454CF118690E92591D466AE1E831BE802F2A15AE9E312FA66CE6A7D7C881_cppui_modular256, - 0x2BA05C71334D1ECA8CD03A9D625A0D266A4FD7FF83821F2BB2ACB7E9BE07F741_cppui_modular256}}); - proof.proof.lr.push_back({{0x3B6F4107FF516B58601B7565625C9DF90F6A18C7D7B01EDEBA39A8E0B81BDB24_cppui_modular256, - 0x2E9F1C998E26D4C3144595CD3CC2BCFA26599F2EA6D8B479BB47C85CF2646F80_cppui_modular256}, - {0x1E262782BBABE4624EAD784EDF3D9EC6339FC21037FB3A04938DC84BB5AD0353_cppui_modular256, - 0x223645C7225F920F646CC168E440EC1BE8A3D3BC1218C10A3B631873A4354E9F_cppui_modular256}}); - proof.proof.lr.push_back({{0x3C440D20F4566BAF87213FE86998484496F84833A834548AF0A6E4AC82AA6232_cppui_modular256, - 0x1E43B23D50E6E8B985BC06DD7509928727B1988228F6F1D892B73C07E0BC2B00_cppui_modular256}, - {0x1F0D55EA5526B5EF4F3C7DD207928236462EA45B70272882295E045EDB317220_cppui_modular256, - 0x1FAA58A0B3363A7C3701F1BD08FF173BC4610DAE80CEA3604DD3585D67B61152_cppui_modular256}}); - proof.proof.lr.push_back({{0x10065955B7F214914E735E5BEF85730C7D59F6ECD6B174B896BCF3947EE0FC5D_cppui_modular256, - 0x085932CEFA790133ABBA7ABBAF1CCCB578AA2FE48B6E283C26766B2887485B5E_cppui_modular256}, - {0x1A3CBDC7BC523210BF7F0DF87FF0620DF262056C5256297E5A512058BC73762F_cppui_modular256, - 0x0AE1581243C5974613218668AB43AD0E397BFBF8AEA90D0B3ED70E12EC004C9D_cppui_modular256}}); - proof.proof.lr.push_back({{0x2710EAB6C40BDCB97F436494248A75F472DB617328FC2EE84C1F3EF9DCBD3BFF_cppui_modular256, - 0x38D7AB437DEE337F2D66F00A406AF75782F95E8E74C783CAE2DEF94E19D16EB6_cppui_modular256}, - {0x1AC4B9F9CB2C53139485BFD4F57B9A64E19F63C688BB665E6037B0C98F0270B5_cppui_modular256, - 0x32315C63F461374A7B8ECA540A11A0CF30343F55545F17B7FD82C66DFA81C39C_cppui_modular256}}); - proof.proof.lr.push_back({{0x303836C38F745463E56F8047E984FCAE16AD25BFF13C2287E1C2E0D05E1C2EE7_cppui_modular256, - 0x2D3E3F3F6E8BCF6BDBFFD548800C6AB0DC89338563E7FF6E36AD2CBADB922966_cppui_modular256}, - {0x0243D538765D68B37F752A2CB56A85CAA781306602058AEA2BC0E4AF03FECDBD_cppui_modular256, - 0x190734088DC7F59473F453B08954D296DB532C4E2A1B62F0C59015D88CE69C9F_cppui_modular256}}); - proof.proof.lr.push_back({{0x1EEFAF71B70C0BC39F37B70ABEC7E7BE4328B7D9F98C1488F8C85F5073CD5E9D_cppui_modular256, - 0x182BFFE23FB4AD0C0F80BB129F87DDE0D26B822E2E4BFEDE7906D7FDE1D0E57A_cppui_modular256}, - {0x08CFA49FB087FC96627C1893C062DB06A9D8B4E5D628B26C349CCBE899B4FCA5_cppui_modular256, - 0x195D98E7527E30C5E2490196ECC11A22A14D80337D056CFA16C1E3B8AF29904D_cppui_modular256}}); - proof.proof.lr.push_back({{0x0531094297992B258C51092A991390F1BC63D6079D3AEB315614DD5C9826E47D_cppui_modular256, - 0x2C37CF446FB6539F8399357695E1D0C1B18AD72450A606773085A283182D5A5F_cppui_modular256}, - {0x1B8AB439CDCABF1D690F61782FE5E16352BC72FFA16AEE61760264725A9993FF_cppui_modular256, - 0x1F2C0382E06A42AB35ADC93AE4BE4C4612E411626E5A3888B9B885C2DA0A5D0C_cppui_modular256}}); - - proof.proof.delta = {0x33529C3F6390EB405641B8C12031B64948A6CE7B3B42E7B1168A6E7333D02352_cppui_modular256, - 0x1F7D511DE191BE5F67984802C6EBA85E5CD04CDC2C766A8B76F8F07F69A900BE_cppui_modular256}; - proof.proof.z1 = 0x3CD53D56E5BA440ABA3A534790D47BEDD633E272D3D66E30B66E4AD8ABE01409_cppui_modular256; - proof.proof.z2 = 0x272E221C5F8DAA39D027AA027DD221C25B0492E8E873F351328B3665138A2F7F_cppui_modular256; - proof.proof.sg = {0x03ECC373C543EBC3AFBABBEF616E72A2992866D77307246ABD51DCFCAC2B92CE_cppui_modular256, - 0x069DD6CE0DDF9FA50137922EC11D1E0724AABA5BAB5F6732A37555FF86FC7B50_cppui_modular256}; - - proof.evals[0].w[0] = 0x3375BD8BF491164C3EDB9F74C2B92395F55E0D629FD93F9C905E8B58BCCBE39A_cppui_modular256; - proof.evals[0].w[1] = 0x2BD1D3B3C432B9CBDD09E5A0172AA2AE24142AF767BC535CCA2A27EBE0426E0B_cppui_modular256; - proof.evals[0].w[2] = 0x15AC5253AD0BCC5CCC4BB7A7E8377DB80BF3985E9CF2402758A81A30B9CB541A_cppui_modular256; - proof.evals[0].w[3] = 0x04AE3A51AEC255989C561457BCE8463E411320DEF64C1B0C44538F07F95765A6_cppui_modular256; - proof.evals[0].w[4] = 0x0BD0DD424D799B2EBAA51FB4CDEB01918FA9500DAA956A185006FC573B202F04_cppui_modular256; - proof.evals[0].w[5] = 0x129A8A8695E1754002A044F6075C02015ADC959D2A4AE9D532289603119D17DA_cppui_modular256; - proof.evals[0].w[6] = 0x2BF8320D10669353F296A8A85874860D44D94F96489EEC6579A04FB7AD9D6D15_cppui_modular256; - proof.evals[0].w[7] = 0x124A08D137BFE974AD73E237CAA22380A7B33628360B8F4B57877B4AADA52A9B_cppui_modular256; - proof.evals[0].w[8] = 0x1CB0D03FFCECAB9D2F81E21D059EF259102B217A68AC005C9076925651E05406_cppui_modular256; - proof.evals[0].w[9] = 0x0C881E6295E1E2E62C1A82B7AFC779E78D2E43D539CDE83DDB02816E3D2ADF3C_cppui_modular256; - proof.evals[0].w[10] = 0x31F1380BACBA2EF03E272D3E2967207747A52659840465DD8276B387012760E2_cppui_modular256; - proof.evals[0].w[11] = 0x336DB80B6D3D700A1121AA7FCA04D47D676ECD3609D14B85B817BDE7B09DF27F_cppui_modular256; - proof.evals[0].w[12] = 0x286305CD450E4EB8C60B72B6AF22478C0603E7D950C5C3AA0736900BEC066D66_cppui_modular256; - proof.evals[0].w[13] = 0x122B3903D51228D827A81BB89D73E3AA136A184A35FF90818489087AA9CA18F7_cppui_modular256; - proof.evals[0].w[14] = 0x3A12FABFE97E6F4B54C66AA63020D296E6F43996C424B3C0893EE9DE9627D3C8_cppui_modular256; - proof.evals[0].z = 0x01C2A7D4001B6A1701F2AA2B14C5BF907DF393AD3D8F060DBAE7EEC522A9DBC9_cppui_modular256; - proof.evals[0].s[0] = 0x2469EE646AF7675016F4482081F0D3EE02FCE6BD31AE72BD479CA5F986FEA20A_cppui_modular256; - proof.evals[0].s[1] = 0x35B16444BC168780C67399ADA9813DDF7216AB7E927AA3BF7B71F9FF7DFC4BCF_cppui_modular256; - proof.evals[0].s[2] = 0x3BC85E0DAD2E9B5B8908D280F82E1C269FDEA22A415F7AE7BA5A93A090524BCC_cppui_modular256; - proof.evals[0].s[3] = 0x27039ABC0CDAA83905AAEFE71E26EE10FF971324AA7523AE35BF75E1979F0126_cppui_modular256; - proof.evals[0].s[4] = 0x1FA7277A70731CBA8D28C45F00B6A47C7F89BD4EB1FE5AE509F2A44CB74D76B4_cppui_modular256; - proof.evals[0].s[5] = 0x290E1A5B249C50CDB3DD98415F1AB4EE8C610A4F6B03F3EA5D87E2FD4D3B0BB9_cppui_modular256; - - proof.evals[1].w[0] = 0x14C0EF696971778663B575B2D89B0F4E8967CCE67E95C0C3376C606E18FECB2D_cppui_modular256; - proof.evals[1].w[1] = 0x0A2BA37B20948C9DE8B3F565EB6FB212296B2493B16B4E7236909E1D8D41E053_cppui_modular256; - proof.evals[1].w[2] = 0x2812ADB1DEA9B5B093AD88F080BBDCB40B210F7685C571A20F8EC625220FC931_cppui_modular256; - proof.evals[1].w[3] = 0x3FD84E9DA07AE934596DE0508D9E05CD170AA7767ECC489D4C8FB9F706DF4A4B_cppui_modular256; - proof.evals[1].w[4] = 0x2B3BECF9AAD01BE20D3E26D0A64C0C0D16CB8167E0E63DB8BE918B46CC32F605_cppui_modular256; - proof.evals[1].w[5] = 0x18A9B1F0794F2694A4B1E5664A8ECD8E06497D0CFB27BD6B9267D5A29764087B_cppui_modular256; - proof.evals[1].w[6] = 0x3104BD2759DBC3FF0BFFA3F1C20FED7D231988B29A9246F59868CE01B4F5992B_cppui_modular256; - proof.evals[1].w[7] = 0x1C3CAFA7CBBAC188094016B942092D0B3B72AB519064BFD36CED6C905B480391_cppui_modular256; - proof.evals[1].w[8] = 0x0D17F4FE8B1B2FAA783FC8357B4DF7B7A6C53FC12511C0E16838776875D49446_cppui_modular256; - proof.evals[1].w[9] = 0x2E0C3419383B9D61EF841A78D1606D876B3F88AA8E29E489C8C34F3A07AB2E98_cppui_modular256; - proof.evals[1].w[10] = 0x083AAF8C9AB47A3F89F1CF2A8EDF671F73832182E99C0BCAFB1450AF472CA880_cppui_modular256; - proof.evals[1].w[11] = 0x3FE4A9C99461154DA13BA3433A01E529B14795EC08B8A36F30EE9BD439F2937D_cppui_modular256; - proof.evals[1].w[12] = 0x22958B98F859D135929C88E6258400B5B392AF65D1D6B38C0C36D8D22CF2B7A7_cppui_modular256; - proof.evals[1].w[13] = 0x37EACF6E463248F21442AD54066298F5C3F4247E8E14E7FD6F6D7F58DA4EECC8_cppui_modular256; - proof.evals[1].w[14] = 0x091108301FB7BEB05DF4D8699F6491D1D9FE26E58C16760F980B583F497E49E2_cppui_modular256; - proof.evals[1].z = 0x0913AD25F3BFC7E0505F59EE1123ACC6200ED374E3AA388E1E9674554131283F_cppui_modular256; - proof.evals[1].s[0] = 0x3319BDF89C3E104CACB2BDB7D1355994837001BCF5363930337D9CA9909C813A_cppui_modular256; - proof.evals[1].s[1] = 0x19E60BCD31F3A0866FE4D49B30530DF3F900DB00DD6EF65A62E5A8E9F271EE20_cppui_modular256; - proof.evals[1].s[2] = 0x3BC0548D33BD4DE9C00F269A87AAE4956C061D41B21D56072EA24B9BD8B29A2D_cppui_modular256; - proof.evals[1].s[3] = 0x09044E158A924A1FE7FB4403A4F05AE4A53219123A36FD36345C50250ED25A57_cppui_modular256; - proof.evals[1].s[4] = 0x06FAE70DEF399DE03151CC0FA946AFD1927BFF046A76809C2DE9E729FA18B9FC_cppui_modular256; - proof.evals[1].s[5] = 0x2B849A7D46AED37CE27A68A88F3282A80FF24DBFDDCC3B8590BA54D569837215_cppui_modular256; - - proof.ft_eval1 = 0x14439298A43516169BA9E802FB3EA1145827D2214158298C302022C7C42A14A8_cppui_modular256; - - proof.public_input.resize(3); - proof.public_input[0] = 0x0A2BA37B20948C9DE8B3F565EB6FB212296B2493B16B4E7236909E1D8D41E053_cppui_modular256; - proof.public_input[1] = 0x3104BD2759DBC3FF0BFFA3F1C20FED7D231988B29A9246F59868CE01B4F5992B_cppui_modular256; - proof.public_input[2] = 0x1C3CAFA7CBBAC188094016B942092D0B3B72AB519064BFD36CED6C905B480391_cppui_modular256; - - proof.prev_challenges.resize(1); - proof.prev_challenges[0] = { - {{0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256, - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256, - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256, - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256, - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256}}, - - proof.commitments.z_comm - }; - - return proof; -} - -nil::crypto3::zk::snark::pickles_proof test_proof_ec_test() { - // https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/ec.rs#L15 - - using curve_type = algebra::curves::pallas; - using affine_point_type = algebra::curves::pallas::g1_type; - nil::crypto3::zk::snark::pickles_proof proof; - - std::vector> w_comm_unshifted = { - {{0x3992FC42921BCA5A98D4D4C10406B5111E259E90455A36B1BBB1CF2874BD80B7_cppui_modular256, - 0x033981CF968C0D13A3490F2C1E823AE40B572E37AD352108EC1D416D7FDA6843_cppui_modular256}}, - {{0x35DFC0800543D41BD72F2A180BD5918CF75FA4EDD71CDBBB172C717F275D272B_cppui_modular256, - 0x02AC70B44A58C1D7EE867C9AF46BD051F4AEBDD86387770F6F29A30564E4D75E_cppui_modular256}}, - {{0x02BDC45AE501633547646B6504408F790C3C8331D89CF0A2FBA6B5B6F5A33FCA_cppui_modular256, - 0x247FE1BB300C5C87A21338D1E3B273F5C2E47841A37A09AF88495F00880EA7B3_cppui_modular256}}, - {{0x26FA76D98BF5C432FB94F7AD2BC42AA36ECADCA47F4A592A92BEBC43FC5F93E5_cppui_modular256, - 0x37017857B0B5EA1B976C567307E4FC0BBDA9F3251AA6E469618BCBA2B89A71F0_cppui_modular256}}, - {{0x30F3AE5072AC07B8296583B203C8BA1C0019391786407701EDA5C1509F041F20_cppui_modular256, - 0x2592A5D822B4CA17DF205F74184A26D6880B80BA93488CB7520D5B6764565482_cppui_modular256}}, - {{0x3C7C040B106E1AD672099E4627C940BBA28F8456DE66892934169F866A2BCF2B_cppui_modular256, - 0x17056414EB6011A3A9CE9A4B5252C50DFDAB4B0BA05BB6FC45E5C6522BD8AE89_cppui_modular256}}, - {{0x2196A2907E0E67DB5B403E254594E1A86D4137202D5796DA4025C126B00F737D_cppui_modular256, - 0x154449DA9F1231ABC02E6DA74C7CD31157FC86F9D4EFEA987D17B6C269B5AF4E_cppui_modular256}}, - {{0x34E9DA740C3940491186C715AE5DB194514FB10B64EB0E4861F8174C0895833D_cppui_modular256, - 0x37D118CAA223C625D36F554ADB102A11137FE3B4508C771E17AF84FDEDD9ADAB_cppui_modular256}}, - {{0x36F77E77C07A292E2AADC4E0C0E80732AFD854C1AD3C250D30A17ACEFD9B443D_cppui_modular256, - 0x2CA08E22B289ADB468ADD71AC43663A9980BCBF4D3D216A6D7127ECE7C82C178_cppui_modular256}}, - {{0x294138D3C9B10EC9914DAC6569F1E462E31E16624441847878A1ED40748C4B69_cppui_modular256, - 0x05CBD5705CA29E8AB97A63370A3EBFBC60A0FCF22838E5553F1170B7B8D06BB4_cppui_modular256}}, - {{0x1D1345505D83CC600EF491D5FF7F2804F9D585333E22DDBECA4385B273D34AEA_cppui_modular256, - 0x2468E70D18BCE95AA038E3FEFD3A9CE7681A6B127B8333B32D638B0B82C203E2_cppui_modular256}}, - {{0x09376718CB461320CB3A60E6E6200AE5F826ECF193EB7F444F5388A58780AB77_cppui_modular256, - 0x193E86361EDEC8E92E3EC770545A5DCDAF6FF840D24574EECD66405A1233BBC2_cppui_modular256}}, - {{0x2AF2C37FF57D082642F4B9D5308021E4AB5FD59475ABA38E895C1B39740A03FB_cppui_modular256, - 0x316B90A404D54D2A1619595C893B2D8D5073BD5ED5948C1CC912DE55727CE091_cppui_modular256}}, - {{0x1E5F91CC5D42260ED79525C78391C52FE52583C17520D4F6848FFF8F711A08D5_cppui_modular256, - 0x299719F79AC5A5A58FA292F99701D19A31D884290C315592218C49D52FBDF817_cppui_modular256}}, - {{0x32B3B2D69CFBF8AF77DEC0E1A4177E3553524037776B58C06F39FDB96B9B2A88_cppui_modular256, - 0x3A381FC3874EB297BE27CEF01C21F3E2C27EAED137351E1A9660A731CA58825B_cppui_modular256}}}; - - std::vector w_comm_shifted = { - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - }; - - // w_comm - for (size_t i = 0; i < w_comm_unshifted.size(); ++i) { - proof.commitments.w_comm[i].unshifted.assign(w_comm_unshifted[i].begin(), w_comm_unshifted[i].end()); - proof.commitments.w_comm[0].shifted = w_comm_shifted[i]; - } - // z_comm - proof.commitments.z_comm.unshifted.emplace_back( - 0x10720ABB90B8D7FFECC81D72098988588E5C762EA195BFB0B747B768A352E6B4_cppui_modular256, - 0x1315086C4FD5E5B4A396E4070DFBD4569C54AF3D16908A0031D4671F40D98BA1_cppui_modular256); - proof.commitments.z_comm.shifted = {0x0, 0x0}; - - // t_comm - proof.commitments.t_comm.unshifted.emplace_back( - 0x3FEA0C91875D1BA7FF6E8CDEFB628FE78AF8903F69E9F46FB37D6EEFC3B5BAEC_cppui_modular256, - 0x3BD6777071FD029AAFBD78E2577A9AA02EE9848D5EE74B0394017A418E1382C9_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x0AE07C998702342195177EE53EFD69D554F66F9547D8512841E6F728A136E2B7_cppui_modular256, - 0x157D94A83F54D923D9C2B62217615FBFC1A2557FDE000750ED5D8DAB316DC344_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x0E76E4BB07750108A149020ACB6EDE76BEA39B670DC4A0CA42E7E7071B22AD2B_cppui_modular256, - 0x3C9EF296AB690C721A6434D20F2D93F32F59E9C0240D7FC8BD7E9AC36DB1B46C_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x201B5E1937878B6D4EB6FA896203D5CF52A8C0CEB13C5C77B369366D274A316D_cppui_modular256, - 0x3CD22866CCBBC9C38557AB044CC280FC8E7BF11F45C533B8D5D30243A1375869_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x2D4FA7AA5AEF2B52578F7786342101FFA762E25053E4B6D183F10EEEA1B0F2F0_cppui_modular256, - 0x305A5F41052B58EB5B8B5C14DE0E063784D0022DD59BABC5D726803EBB9664D3_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x1C702FBC0EA5AA3C1F193A88B9EAA5682B23B418445D0B59BC2560BB3F79BE10_cppui_modular256, - 0x3FDDD6A4C7679EADEA5749C2BB837CFD5B1D0BDA61F5728529C9F6DE4289D870_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x1E3A711D443202C9C7DB6E07373632A9B8B2CCA5CE8141AB1A6D95CC3E4F7BF3_cppui_modular256, - 0x3F4A41229D9C09DD8133022F84A095A6F1C16311C31ED58F955305C8B74654DF_cppui_modular256); - proof.commitments.t_comm.shifted = {0x0, 0x0}; - // - // proof - // lr - proof.proof.lr.push_back({{0x36D7AC3D8AF4CE326F42193455F1D9811400FFF87D5DAE91B88E4FC3AAB9FCA0_cppui_modular256, - 0x10CB889861041D2399EB637FF59EBE4EDCA54A8C4C488E972BF5118DA6B60641_cppui_modular256}, - {0x1F94FCFB79A2FD2D14057DC2BA42108F6001A293D90116F6B89903F1A82E759A_cppui_modular256, - 0x13553E6BDE5E5831030C69B05DC5AB82DAB6037D669DC08253F2D5D7646B0269_cppui_modular256}}); - proof.proof.lr.push_back({{0x00E26347431A029C3BD25EF3524F17E554CF1D7BC0ECB10A18A26883B805FF8A_cppui_modular256, - 0x0FD126CABD2824CED6172C148B8E11C60443512CD67168609E0F4A0D108870B1_cppui_modular256}, - {0x06F9C659457425E3826C3837F7276A058C1E63E66E697F168C8BF82C33185163_cppui_modular256, - 0x372D3E2233900C8350E1BAE0CF64FFC6618E70D955244C32CDBF5BFF4761F27A_cppui_modular256}}); - proof.proof.lr.push_back({{0x2E9301A7639C830F633C3B9D8CF3D11C03387A64C8CF593AB23A4FEC20154A6A_cppui_modular256, - 0x1FB092BE7A751A160A0AE9E4270B46A4FC7982EC93C6E8E3977C9E8EC8651882_cppui_modular256}, - {0x0B522423A8A0B9D6460F2919E64A2863F3FD491871011379E0305C037493B5DB_cppui_modular256, - 0x128F519068A8CBA8B1CD18DA8F91F289167B42EF1119B51AB09C3FF9EF53CF7B_cppui_modular256}}); - proof.proof.lr.push_back({{0x02066B4299B7D03CB9D81327D4D289938F2DF2791DEB0E38984908D35DF54EBA_cppui_modular256, - 0x16AF9B779DAD1E7F8E3C9D4AAC9B1CF655471DBB08013AF5DFFA789587B2E972_cppui_modular256}, - {0x063ECFA0F996C25B1E809FDAD4245541CFA744C60A25C9106444921977528A7F_cppui_modular256, - 0x29AE6773F7E0FC6BAFDD0111E45AC3E1384CCB4415B0B0932738A45FEFBED23D_cppui_modular256}}); - proof.proof.lr.push_back({{0x0623C69BDD9055AC867990D4F4272D7C13305AD2AF4074CAEA64244D886ACE01_cppui_modular256, - 0x1DB180D0E2F61D79276565CA5696D1D83C37E52A7C13C9A33CE944CC9B4EB887_cppui_modular256}, - {0x2B92C5E932EC19EAD6432CD1FCAE1DBC5437ACBDB071E3F7DD5E59F4FE31D1A4_cppui_modular256, - 0x1B4FBA7E40611A01B70A1B54A6293E992201A1F8B288F6C9E1958A935F85F674_cppui_modular256}}); - proof.proof.lr.push_back({{0x16F88740A39D6CB6D9E660A39E0B22BFB689D8B5B4BE161D560B9149ABD6521F_cppui_modular256, - 0x25EE0B835BD663441558D0E77F6C1C3B882F68B1117AD154EA098B83E0037266_cppui_modular256}, - {0x216ACE2F7625415215710E37E2C51C25969E992D63FAEF9523C5FC1CBDCFED82_cppui_modular256, - 0x2689C67EB7AEF899425D7D1437892DA7E7579576B9A60462E877C8C44AB38B7E_cppui_modular256}}); - proof.proof.lr.push_back({{0x1D01E7A6A13F09B151349DE4E22499D5DE1002ADD8886452673369857590677B_cppui_modular256, - 0x291F4D79D036E6226FA7FE2028B649E3DD5F8DE91454BEF5EFB4C34BB20FC498_cppui_modular256}, - {0x02BF93F4170A37A286B45BAB325B25D38B5EAD1158D004C9C7E92FE6ED419C14_cppui_modular256, - 0x134E8BF9C47C2ECB32BF3CA63D280F47304F86674C8B21FB63FF1125BEC75AF6_cppui_modular256}}); - proof.proof.lr.push_back({{0x28AF171CD6FC3EBB46E6EE4BA3E646BD8AE0667751F7F5F926C12E69C64C94F6_cppui_modular256, - 0x061A24803FC93052B1A977E2962022EF7DED20B417F2BDAFE9DB91E5F1ECEDFA_cppui_modular256}, - {0x186F78167B5C798DB1BFCBB5908708AA2C18DEA2BF7B4EBCFF5F14A9B6039F84_cppui_modular256, - 0x199B4E5C49F2A3BA1BEA8BB41A8B43A3F5907A5DADD01FD0C014EC7FB74E153A_cppui_modular256}}); - proof.proof.lr.push_back({{0x02919782DF31B4D837C9869B506AAB76F3D77D30D0AE1FEEA2B774687C8F40D5_cppui_modular256, - 0x2D344EAB35BB04A6C514910D0E981ED01E74BF31D7F684F5EE5D1C71A620F1C6_cppui_modular256}, - {0x3FE7D1FF6DB1B3E20A3A7DAD868EA19C6F018DB49E3AEB5460A92CFC32EE4949_cppui_modular256, - 0x2308667C08B1990F1A4E623F8FEC00B9AEC5734491EB8792DC07B4B967FCA8F2_cppui_modular256}}); - - proof.proof.delta = {0x1720017815E8FF68157836C6682D4C35F4D484B19FC73C0B4C26198DB6FB0140_cppui_modular256, - 0x38491699E96B59E51EF9F87F8AFE925B59AFBD357488CFD913928F6E238B5476_cppui_modular256}; - proof.proof.z1 = 0x1ACA51C81FE95DA0073BA8FFA4517F8696C525B493BD0D5012156F1232D4BAC6_cppui_modular256; - proof.proof.z2 = 0x3FC59290B3A6E7549D14CC78732B5AE10A90B958CF2543875057DCA3D2E21E25_cppui_modular256; - proof.proof.sg = {0x20BCBCB6258D8B9C48A97AB7A1864971981D6CF56FD525DC5E4023C03ACFB8C7_cppui_modular256, - 0x011A5FF465BEC039D22CFE481A967E225962639614D1D40C90A716CD7F24458C_cppui_modular256}; - - proof.evals[0].w[0] = 0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256; - proof.evals[0].w[1] = 0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256; - proof.evals[0].w[2] = 0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256; - proof.evals[0].w[3] = 0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256; - proof.evals[0].w[4] = 0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256; - proof.evals[0].w[5] = 0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256; - proof.evals[0].w[6] = 0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256; - proof.evals[0].w[7] = 0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256; - proof.evals[0].w[8] = 0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256; - proof.evals[0].w[9] = 0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256; - proof.evals[0].w[10] = 0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256; - proof.evals[0].w[11] = 0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256; - proof.evals[0].w[12] = 0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256; - proof.evals[0].w[13] = 0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256; - proof.evals[0].w[14] = 0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256; - proof.evals[0].z = 0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256; - proof.evals[0].s[0] = 0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256; - proof.evals[0].s[1] = 0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256; - proof.evals[0].s[2] = 0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256; - proof.evals[0].s[3] = 0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256; - proof.evals[0].s[4] = 0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256; - proof.evals[0].s[5] = 0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256; - - proof.evals[1].w[0] = 0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256; - proof.evals[1].w[1] = 0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256; - proof.evals[1].w[2] = 0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256; - proof.evals[1].w[3] = 0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256; - proof.evals[1].w[4] = 0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256; - proof.evals[1].w[5] = 0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256; - proof.evals[1].w[6] = 0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256; - proof.evals[1].w[7] = 0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256; - proof.evals[1].w[8] = 0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256; - proof.evals[1].w[9] = 0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256; - proof.evals[1].w[10] = 0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256; - proof.evals[1].w[11] = 0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256; - proof.evals[1].w[12] = 0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256; - proof.evals[1].w[13] = 0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256; - proof.evals[1].w[14] = 0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256; - proof.evals[1].z = 0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256; - proof.evals[1].s[0] = 0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256; - proof.evals[1].s[1] = 0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256; - proof.evals[1].s[2] = 0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256; - proof.evals[1].s[3] = 0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256; - proof.evals[1].s[4] = 0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256; - proof.evals[1].s[5] = 0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256; - - proof.ft_eval1 = 0x16FE1AE7F56997161DB512632BE7BFA337F47F422E0D01AF06DE298DD8C429D5_cppui_modular256; - - return proof; -} - -nil::crypto3::zk::snark::pickles_proof test_proof_chacha() { - //from test https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/chacha.rs#L40 - - using curve_type = algebra::curves::vesta; - using affine_point_type = algebra::curves::vesta::g1_type; - nil::crypto3::zk::snark::pickles_proof proof; - - std::vector> w_comm_unshifted = { - {{0x0D907C081D3359118A5E478BFCC88DDAD869FD50100838716ED04567BAA33FDC_cppui_modular256, - 0x199EFC218D385BCF2CBA3C51B4680FE89731F0C988F439AACBB208D3400D80C5_cppui_modular256}}, - {{0x08A18A9708983882B615505E3DA102163F7F76F69EF417A4B4417EEC5E00B80B_cppui_modular256, - 0x078D4CFB021A87188BB224F6EF9C823F494D2E56D1E57606EDE06473D79A8CCE_cppui_modular256}}, - {{0x2944BF7129EEC430005C0EDA0B903ED722C86E05CC04292FE084FEE760FD82BF_cppui_modular256, - 0x1DD04BD57C026FBA7123B4DCD82FAF9B2C05589675F348D5943E2FAA0A92DC87_cppui_modular256}}, - {{0x27729DAEB5BDF9CF755D600517EFA3E204705F28C0CDDB889B5435034D541902_cppui_modular256, - 0x0E5F7F8069AC0F130A14C555BAA464CA0A081E283C1C3AC53017C60BBA4ECB57_cppui_modular256}}, - {{0x064CFBD0B163449D04902AC4FFB09D3EA3A72CC8B334B1DA4375B0FC75FB25A8_cppui_modular256, - 0x35CF294F1E13BA90AA8C74762D40DE0E59DCE6914E643DC1D18E4FCC035C285D_cppui_modular256}}, - {{0x07B2F882DA399E1BED7BACE6F99C6115B08968A868213430090F481B7A638108_cppui_modular256, - 0x00BBDB1CA3C8DFCFAD7C90D9DFAA7967374C9B99135CD6B21683AEB440BDA088_cppui_modular256}}, - {{0x1207F4C62F9CEA36FF582F6AC59114AE99B294A50D8968284CE5EC72C3F69185_cppui_modular256, - 0x29B160C5C45B5688F9EF8E90A0F990AE59FEB83B77BD4CE364A320010F2AD2AA_cppui_modular256}}, - {{0x10E774D4C3398E6C41559F33C20F58A1A49380FCA39624654DDFB5DA28358080_cppui_modular256, - 0x378EC7B1439AB7EA73A86DCC3DDFBBCA1133B335B07CC3BD8CEFDE3040D1BDDE_cppui_modular256}}, - {{0x358BF013A8F51D5DEA2653574E146ABD5D6E854F5ACB9ECF67C5DBB0AC73E1E0_cppui_modular256, - 0x01EE00512CFA85115782AF671DE135052E7460CDDB25E6D38243F78A92930160_cppui_modular256}}, - {{0x19699D87F672F27129E3DBBBF87A39C2699E5CC5056E26E1B8C8F74A17F89FFA_cppui_modular256, - 0x2A5CB241A09940A2A989500F511B980216BD610BCDDCA3A4E6206ABCC9A02AB6_cppui_modular256}}, - {{0x0AB47B8B2AE32661D556855B29E6CDF5D0D166C1DAA6AD4C8E234954C87C4B26_cppui_modular256, - 0x286B1D54C945B309FB6192CDBE8D1E54656CE66885ADCB46FF46188EAEED4B80_cppui_modular256}}, - {{0x37E09A88844FF75DC337A74E15AA71FC45E6B2B8986F1038E8628B715161A205_cppui_modular256, - 0x0B4CD3CDCE9EC4E73E88C5613ED290A5417F86C618737E86BF7D945ABE8B93C3_cppui_modular256}}, - {{0x2D1F5A5E3141E4CC44619445BFC27075AD39BC47B168069E6FA15BC327D00B79_cppui_modular256, - 0x2F2B377BA8D7BCEB3F25E3D97BCDB0F01DA7C06351AAC19129BF2895C1B798C7_cppui_modular256}}, - {{0x39B6E743A1CCC0F94ABAB2079AAEBA5B402F568F394AA35337D14C4302A70821_cppui_modular256, - 0x09B0D8363FD8EF85113FCCCE4756FEF2D35F715FC5898CC6FC0BB7D8059E3D10_cppui_modular256}}, - {{0x3AB9777571999A038E1D00DE3B4B50C7C49BE9DE7F577C170BE3086293A64981_cppui_modular256, - 0x076552C4118AAE605ECE125CCDBC09EF70DFF9C718B24888E2CA6259DB5146B7_cppui_modular256}}}; - - std::vector w_comm_shifted = { - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - }; - - // w_comm - for (size_t i = 0; i < w_comm_unshifted.size(); ++i) { - proof.commitments.w_comm[i].unshifted.assign(w_comm_unshifted[i].begin(), w_comm_unshifted[i].end()); - proof.commitments.w_comm[0].shifted = w_comm_shifted[i]; - } - // z_comm - proof.commitments.z_comm.unshifted.emplace_back( - 0x168D1F61027A5C68D96128563D7D9BD4A8D5FD57D7623EF27619C9ADA28BAD02_cppui_modular256, - 0x013192C269F19B5EB0B95EE81907FF99798E8C42842C92180D4677DF3C8F73FD_cppui_modular256); - proof.commitments.z_comm.shifted = {0x0, 0x0}; - - // t_comm - proof.commitments.t_comm.unshifted.emplace_back( - 0x09F6972A79CF32EC6DF0A09D9ED75BEEC83DDA964A0E455966C46CA264C1FCBB_cppui_modular256, - 0x30447ACEA7AB34916BF855F68154AA6FA0FFAC405997CFF9EB327CF51947F235_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x1AB98CB40B97BC5A990960BFF0F0AA15417283D677DFBDDE225C431702CD7CF9_cppui_modular256, - 0x0F0155034568524BC1F06CDC280479FE0BCDF12F68B45E27D751A97997A9E3EB_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x2BD6941040227B2836A7735F1404A70F2AC2524181E2777CB89B682B767E0D30_cppui_modular256, - 0x290078CF248BD32BA4B2F53AA8FA2FBEEAE5C0DB09CE7D4B4ED61BBCBBB4718A_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x059FACB38DF9304AA37C79B9E7AE7669B519427BF6908314446B29E37A789B98_cppui_modular256, - 0x07D91AC73E15EC178717892C780F79237B903DA6289B50713FA6384F52E43862_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x190E9E91E941CC72B4A8F0A6A1F70FA79693CF6379DF9C4EE51B417A1B3B6CE9_cppui_modular256, - 0x2595DEEE386331BB5E515E6442BB5C9977A385C1FD40A17067B312A1C2FC808D_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x0ABC55CC82653EB6E8C4E511601CECB56FCEB47CD6ECD6BAADA9C92AA84907A2_cppui_modular256, - 0x3582678A760BEAEF57656A0C0390B584D97F64955609B30C26A537909047FA97_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x311C909605336FCF3DB3123B5F21A3D15EBEBAFED8EA896F1730EA78E2907FC3_cppui_modular256, - 0x27CD369BB1A98E95218E56B4B2ADC01BAD9F2C589F5A7F9BF213C2FA156E3BBC_cppui_modular256); - proof.commitments.t_comm.shifted = {0x0, 0x0}; - // - // proof - // lr - proof.proof.lr.push_back({{0x28B4284D06BC217B3FDFA8E15E0037E5809560C251FB336CB8A995F62CA6C5D4_cppui_modular256, - 0x3E0121EAAC28019F6321E9B8CC0CB611658115C87F8215544EFE891FB1DD3764_cppui_modular256}, - {0x232A3F9ADC67699D5798826159BF19162155C7E61C20A85A264A3DE0D165F0E6_cppui_modular256, - 0x313F74DA378E906EB1ECF5F2F8C8DD6124CCC63DBCFB1263B75CED59464035B8_cppui_modular256}}); - proof.proof.lr.push_back({{0x1B91D703280F7C53C374320A34EF2F13F7DFA0F4A5CA1957D7FE462530CB775C_cppui_modular256, - 0x15D019278BE5980D8D4ADF9670064627DEA83A41BA211CC1224C0EA16F5FD6DD_cppui_modular256}, - {0x1044A3A79383C9C8C969582927F258A41D39AA2FC56EF221BFCF1B7229C13BCB_cppui_modular256, - 0x10C2AA39603006CBB7913FCDBCD3A03BAA838EB6454478DA0974D24A4364FACA_cppui_modular256}}); - proof.proof.lr.push_back({{0x1846C6CBE29E7B8E2568D16168B6235ED2A62BF72E127344A3D5B2BC641EA028_cppui_modular256, - 0x09EB5BA1F288CA729A7152F50494A37779C6BDE4BDD82EA1F8DAA3D378D60C03_cppui_modular256}, - {0x0268F5650FBF4DD7A65C7AB3DF66754C89E6070A21D849E6BBA94DC4631CE0AF_cppui_modular256, - 0x31C6B6EED55E9FD96B6ED57928024F01949AD14F1ACF0385DE14A1520AA8CDF4_cppui_modular256}}); - proof.proof.lr.push_back({{0x1C5020E9A7BDB8C55737C2F54EC17E9E547ADF4D08D8654E2B062FD8CCDAF334_cppui_modular256, - 0x20A2DA59B94FA9F6EFB8E712D6123A739BB1832E769B581546865989CE0D03E7_cppui_modular256}, - {0x32E91D83B44B71BB9489F2428555D5C0CF7F52B2D526522DBF42C024DDC93105_cppui_modular256, - 0x3ADB189B2C5AC29EA41CA89F1E6D2065BB288CAC9A14114D2E0D3375D47B1649_cppui_modular256}}); - proof.proof.lr.push_back({{0x34D8D309EC9062FF72FDD3D7943E0BC9F2D18374986844EFA3400E0381A6601B_cppui_modular256, - 0x061EF75A6DD5A145BDD56BA772E7B3F13973BC071EC5FE8B155CDF74C7F0A81C_cppui_modular256}, - {0x1A14ED1E569E6A84366DD94DBEE5BA059777D03C338E39FEFE2A691593019F8E_cppui_modular256, - 0x25033131A7B7E63C98A3C9713FF645640947B63B25857AD694D918B3F6962C7D_cppui_modular256}}); - proof.proof.lr.push_back({{0x06A0A1F0724A99909AA80B28CC0893F62CF2C0A980EB9073F74F934D3B3F0CA0_cppui_modular256, - 0x07014B84B80D4CC17FA8F5D5FED4777C8843344122AFC95F8F992189A3774379_cppui_modular256}, - {0x003FD2DF69EC938BBBD5F74BF279C57DED0F9E5E820266BBEAF84BD12496261C_cppui_modular256, - 0x2E8FE7EED8DE629B618236451B26EF5017FD107D60B87AE6297A2CC8F0FCC03C_cppui_modular256}}); - proof.proof.lr.push_back({{0x2A861FA45AD74E6F787B352261EE9E6A156D44D16D368787FD1653D5FAF980D0_cppui_modular256, - 0x22E597450A6A73F7C6495F68F10EAF44FA7816AF25F6ECE9980D6C19B299FAA7_cppui_modular256}, - {0x031AA3F44305C3B44DEA4055D28B8AECE2CC8E5CF7AC18D22682A6B103E96D56_cppui_modular256, - 0x2EB01C4E72E61A5A969B4839B64687AEABD92D695ED288B7EA1EA0B018DEA0D9_cppui_modular256}}); - proof.proof.lr.push_back({{0x2CD79844871E9A2FD55E5E2A3DC5C4F1BB7B024B5B62C6B1F769E7B1421C3CBF_cppui_modular256, - 0x1FB7A12151416ABD40713AA195F578506445E69ADC640C0B07C60E830801476E_cppui_modular256}, - {0x1B7CB5CC78DFB297EC0DB343F227DDE8EC3DFBFB60558C63F5A4769D7FAEEC56_cppui_modular256, - 0x3730403A5983BA55B67BC0E57968CE454E89DE314527223333629DF233B4E4C9_cppui_modular256}}); - proof.proof.lr.push_back({{0x0E38EC8F81BE09BD4E06D7D17843AD402E24B44C8C58715C0215D8E8A256F121_cppui_modular256, - 0x32EC15229BFE5E19D3995922C0F2E6FC2850959B12CE206336D0301EA9537E16_cppui_modular256}, - {0x0CCE539E544C5A4E6BD795E66136C56B312D695E9B70493DDF94265BB3A93B5D_cppui_modular256, - 0x2888ACFF90475257C2B0FA8280F66262971E894F4F90091ACB55EC7A7D750498_cppui_modular256}}); - proof.proof.lr.push_back({{0x2A6E12EC58078B188573541FF00C0FB467FE0E107323F936B1F3058B14444DF4_cppui_modular256, - 0x04FDDA5B7E9FAF8493C194A5309589677695B84FC86681F87AD7712EEF65CA40_cppui_modular256}, - {0x23215F196EE69E20B1150DADCF393E680CD50105444DAE73A4C35CF49B072DD8_cppui_modular256, - 0x02506994B266E1F967587D3B7C36B7F5AD181EF32420FDFC41F540E2326B7D0C_cppui_modular256}}); - proof.proof.lr.push_back({{0x00D2311D1B8D96AEE714ED203594D2A09536A77E92F9E62A0B999E5402A55AF2_cppui_modular256, - 0x1DB7BE1192A7DA3D8587248DFB2764595DE2CFDC3D98D11811D84518A7966268_cppui_modular256}, - {0x0967F9851E3EA380D6F06B1ADCD317879641CC7300255E031D5F55D56DBADF71_cppui_modular256, - 0x32FFC3179C1E87E315C7D85CF1337EEF47C09940DF79AF7FD20E8CA115417999_cppui_modular256}}); - proof.proof.lr.push_back({{0x1E2C34E6F1403CF50F7920F6004F02158152E852C011AAC7E0BC38D9C5DB8F70_cppui_modular256, - 0x0AFE06BDB5C30345D3FE38733E6E823030500EC79C15D6C86EEA74CE9E98EEA6_cppui_modular256}, - {0x22D608813B98FEDBAB1650266627830099FB71B2DFE166610BDD38DB635FE22A_cppui_modular256, - 0x12FBBC5B5D146742C2DA1F7DF5E009530244A0EC52FCC483D51BB614B50879E7_cppui_modular256}}); - proof.proof.lr.push_back({{0x155318C000536B442DBDFA291340303D0C68E88B672B36103E5B880EF5927BA2_cppui_modular256, - 0x127B3BFE72F1F91E23EBA11485C9D18CEDF4B2E68EEE6075877ADD2208D31457_cppui_modular256}, - {0x0A4F35D241BE94120EC270A185338ADDEE39D1B8C6347D00F52AB0BCB5EEFB84_cppui_modular256, - 0x024DA534C948296B2FC300D614BBAE6A6DDF3C8368D82AD19A0AA48AB00AE40E_cppui_modular256}}); - - proof.proof.delta = {0x115EAC7ED8BA81AF66035A71BAE91E4E17E6345116DD6079A150D2D0949AAE21_cppui_modular256, - 0x1725882EE5AE967351A149954838CF76CEC484F78D1E8647047005154B06B6D2_cppui_modular256}; - proof.proof.z1 = 0x2D28876CCE213A643F6B67644AB185C2E3B4CB4010F74164018324F824A2171D_cppui_modular256; - proof.proof.z2 = 0x33D9651E658C71EC2A328CB17FE418AFDC4411663F30765A23F9F01206027ABF_cppui_modular256; - proof.proof.sg = {0x35B909072B9056F403B86BCE1ABFA1929480926339626AF31CB9EB007C673106_cppui_modular256, - 0x26E5173B2991DFB736D8F0031C75720759ED223BB2EF50E7DBF7011877BCF778_cppui_modular256}; - - proof.evals[0].w[0] = 0x36A58617D950326D48393CFFD8391F4326F03E00A8EEEB6CCA939ABC2E08BC36_cppui_modular256; - proof.evals[0].w[1] = 0x337B1390AA4C9206349F9315A17029713A2E7252B70858B2D580055DAA1396D6_cppui_modular256; - proof.evals[0].w[2] = 0x3359B795F51F6ABC6D0278EEF21015D8E896BE80B206F61A35C1DCE9251F2DBA_cppui_modular256; - proof.evals[0].w[3] = 0x13B791055EB946F731A698850643D2F3AC611586D85FEF2C64733058DACC1C2C_cppui_modular256; - proof.evals[0].w[4] = 0x37A9ED11B3B74C1E145B0223534D0957EE9F598DC42449FE5D53232A9562FE33_cppui_modular256; - proof.evals[0].w[5] = 0x063DCD5BA6F3ECEE0D8C39FF59D9D4BAA8FFCFF7594303B21A9A1C938709DD12_cppui_modular256; - proof.evals[0].w[6] = 0x1E2A687D3908CE6A817F8F371ED5A43776E99C076F302FE03070382647F759FB_cppui_modular256; - proof.evals[0].w[7] = 0x2D39CEA0A5F36E136C04F94995B3B21DD6C0901B6B70AAFE5F689634DEE0E362_cppui_modular256; - proof.evals[0].w[8] = 0x1F29B60CFEB5FD178B102D1F25F93D1F5D5ADDB1F43FE2EA5F46657A20523BE1_cppui_modular256; - proof.evals[0].w[9] = 0x1F2AF24D824BCA78584074489DC5E0F09C0494BE5BFD63617188621FE94EF292_cppui_modular256; - proof.evals[0].w[10] = 0x24794F0F5141E2BC3210697D6AE5F578F92851625424C840D8FE8EDEB8D2BD3C_cppui_modular256; - proof.evals[0].w[11] = 0x1DC7CE590CF5C0FC4FE9486AB592FD252DC4F2A2868570995411B4A363CF1F26_cppui_modular256; - proof.evals[0].w[12] = 0x01226914F47C85ED74C543B243EF6F08E051E817044AE091E55484433BCC003A_cppui_modular256; - proof.evals[0].w[13] = 0x30D2CEBC3CCD34EFFD5376AF1B62DE0BAFA730DA0B3E5253EE2ACB995E15A461_cppui_modular256; - proof.evals[0].w[14] = 0x02EC33D72F2525DE6DB847F1CF4F8A339DC8C8F59EF0870F5745B7D94A7AD100_cppui_modular256; - proof.evals[0].z = 0x2D49B1BC83C64DE87897535CEDCA5D01AF50C9BFEEB443D55E34A2F91E248D2D_cppui_modular256; - proof.evals[0].s[0] = 0x35ABB5BAFCAFF26391BB9A23EA996222FD0D4B0F392A78E4AFD5610ECE614E49_cppui_modular256; - proof.evals[0].s[1] = 0x320275D98E5CD6EA5E69432D59BF0E7CE619B28A5380C32D6D6772EE43B644D4_cppui_modular256; - proof.evals[0].s[2] = 0x1A16833874A16A00259130DE12C94508B2973BB4A2FE94D63CD61A5C85623805_cppui_modular256; - proof.evals[0].s[3] = 0x0E3F065C0D23E0D956D1277A2682F783DC0FE874C66C9C5E614A1D08919FF763_cppui_modular256; - proof.evals[0].s[4] = 0x2EFC04192BE242B78FF127BEDF1C95645AA6E392E838D9D178DF996E23A26A36_cppui_modular256; - proof.evals[0].s[5] = 0x216980C9F60FC4CACD6E49840C06D721285F0D7B216B215E0378E07A2DE08095_cppui_modular256; - proof.evals[0].lookup.sorted.push_back(0x0589F2A3E467EB48534C6BCB16F8DE87E8680679F9C6635C875FC146C7EC158E_cppui_modular256); - proof.evals[0].lookup.sorted.push_back(0x1FE50DD4D49E3457458A6EEAAC8F2FE0A1E45C951BC44ABEDBCBC327B651C6AD_cppui_modular256); - proof.evals[0].lookup.sorted.push_back(0x0811A77810337D203A13A6BDF3DE1C0EF8DDBBAECEEE2BFCF91F6F622285B8B4_cppui_modular256); - proof.evals[0].lookup.sorted.push_back(0x303E411B4BC8C5E92E9CDE913B2D083D721DB3C48B650656AFA04C898EB9AABC_cppui_modular256); - proof.evals[0].lookup.sorted.push_back(0x3B9A81860E30C68AB22BBCE0E05504FD20311889A99FA6DB25F9149668A5C44F_cppui_modular256); - proof.evals[0].lookup.aggreg = 0x22544EADAC2D44213B1106487BB7DF7EE011A3E0651C5E66B1C5523290A1A70E_cppui_modular256; - proof.evals[0].lookup.table = 0x0138A52EF62E016895365E2E28816A73796F26D1E546762B8DBE2F6207E135C5_cppui_modular256; - proof.evals[0].generic_selector = 0x21C56FFA8E36D3C79E57963E9DEB0465EFEEF42154596996DA1E1F7C10090419_cppui_modular256; - proof.evals[0].poseidon_selector = 0; - - proof.evals[1].w[0] = 0x3F1EE665939D1A669C02A5581478F0690BA3B6B43B561310B3244B222676F0D1_cppui_modular256; - proof.evals[1].w[1] = 0x22C1B531B5C7AE8F221F3FE9FF6AC3A99759ECACDA732A664BB607BF4F9AEBC0_cppui_modular256; - proof.evals[1].w[2] = 0x22CB8E2356A0BDA25C10FD7319BEB3E6B58D27BB4B306DB5938128088DE87608_cppui_modular256; - proof.evals[1].w[3] = 0x1BE6C3FAD4E00E57B35EE3657E728234F41116FF8A0A888022BE6986587699D2_cppui_modular256; - proof.evals[1].w[4] = 0x2A251331B450223F6C45DD64A84A3BF9E57A30ACDC154AA2DE22E2DFF60E4410_cppui_modular256; - proof.evals[1].w[5] = 0x14C2D1D23B12DB0906E8B60B01DD5B82F263A0E98ED9BDFB6DD45CF9A58762A4_cppui_modular256; - proof.evals[1].w[6] = 0x152F57BFF5F199110663AB0DAB3ACC6555175E44FE003FAD1A64F20EC1DACE99_cppui_modular256; - proof.evals[1].w[7] = 0x11F70235BFC5FA95479530E5756472A11C6A266CFF304C0C8C6BD1D9548A357B_cppui_modular256; - proof.evals[1].w[8] = 0x1A8763B700BCD9B866A0BA769A86C4AA2D6514957FC96EFE84CF0AD68F45EF89_cppui_modular256; - proof.evals[1].w[9] = 0x1FD5F84D2C212487BCE2BC38FAACE5B19E86679CB8CF0AA1CEAC222C5C139BC1_cppui_modular256; - proof.evals[1].w[10] = 0x0F974A421D2D60BB9F640AEDD3AE306B2AECACD3AD4C93BC9A74790D0C552543_cppui_modular256; - proof.evals[1].w[11] = 0x2AFB8BB329C45C8C1211D5317AFA287AAFFB7E5432B85744195EEDF6939E9C11_cppui_modular256; - proof.evals[1].w[12] = 0x253F49DBE48F4EDADA1DF2B3378D5DFE1726121EC58ADEF548B55682832E62FE_cppui_modular256; - proof.evals[1].w[13] = 0x0854DEEDDA38E8644A0499400A7DA4B2C9A8CA88700B9076A2B3EDC59F3B004A_cppui_modular256; - proof.evals[1].w[14] = 0x0A4EE15CAE012AB93FD856EC5A3C56DED6B94D2E8B1CF60047F4E4CA98E7F812_cppui_modular256; - proof.evals[1].z = 0x222E34FD7A0C9FCE6035D4F1EED9C61709AC3E2A731A4E31BE1A035B02D6C01D_cppui_modular256; - proof.evals[1].s[0] = 0x3B5911C2E740C8C14ED1AA6DE363DF8594B538A770913AD8A4D22210D8157733_cppui_modular256; - proof.evals[1].s[1] = 0x0753415109557403B0EB8EFCFED4D9F7FCBC2E64D4E1D588A6F540B40033DD78_cppui_modular256; - proof.evals[1].s[2] = 0x2223B07F6C7FD4290767A74B487DF859869E3FE36840CE67B542A811211F2A12_cppui_modular256; - proof.evals[1].s[3] = 0x1C34D811C8D8CC38F512A0C5F30AF18A9CCC9E6A835AFEB194C7A9A8B74DD754_cppui_modular256; - proof.evals[1].s[4] = 0x16653CB32D4A79F69092822DEE011255EA8498C87A27EC7E41A5F70BBBC01E42_cppui_modular256; - proof.evals[1].s[5] = 0x1E478EC67BB95466B79D4BEC7DF2FFF190022138A96A7DC2EEC16978DAC8746F_cppui_modular256; - proof.evals[1].lookup.sorted.push_back(0x1F48D940BEFE256DC863344D727C30FB0B64AD89CF048603C1074311EAFDAE44_cppui_modular256); - proof.evals[1].lookup.sorted.push_back(0x2DB3F15673C1B57B88C37D32677540886FE4FA9EF12B8EA3DF5F37275D34E3E5_cppui_modular256); - proof.evals[1].lookup.sorted.push_back(0x25C08A38EAC9F9615CA9C8F31DA54CFA69E489E65BD2854A0C0D2E4A08055FC9_cppui_modular256); - proof.evals[1].lookup.sorted.push_back(0x1DCD231B61D23D47309014B3D3D5596C63E4192DC6797BF038BB256CB2D5DBAD_cppui_modular256); - proof.evals[1].lookup.sorted.push_back(0x379C4A63CBE9C63A7615AA38D0660FDE88A1B062B977D6418E1097FE420C0C9C_cppui_modular256); - proof.evals[1].lookup.aggreg = 0x1170011D895C7106BB5BDDB6CE139785E23F76F89E417D4E5E6F6E72E7C87F75_cppui_modular256; - proof.evals[1].lookup.table = 0x24563CBB92D71A7914CB7075280E599E877145427119DBABEF650E1C56E51440_cppui_modular256; - proof.evals[1].generic_selector = 0x376A880B64CE6148620454A0C0FA134C80B9158F5D594E4B91D75501939895EC_cppui_modular256; - proof.evals[1].poseidon_selector = 0; - - proof.ft_eval1 = 0x3D4B1D1398F64294509994EBFA16CA0DC75C2AB5460D7B01DC6DBBFD30DA65EA_cppui_modular256; - - return proof; -} - -nil::crypto3::zk::snark::pickles_proof test_proof_recursion() { - //from test https://github.com/o1-labs/proof-systems/blob/1f8532ec1b8d43748a372632bd854be36b371afe/kimchi/src/tests/recursion.rs#L15 - - using curve_type = algebra::curves::vesta; - using affine_point_type = algebra::curves::vesta::g1_type; - nil::crypto3::zk::snark::pickles_proof proof; - - std::vector> w_comm_unshifted = { - {{0x000CB3CEDC0D40901A28D13E576FD8C91E7C8AF929CAA9E701E5AD030D2B6A4D_cppui_modular256, - 0x235ED1712D7D04EB9CE37923AEE0AF15374C8585235BC532E7C22EDB3FECD5E3_cppui_modular256}}, - {{0x3275991D0BC36798B8C9653827CD75975F2DC8382E40E205E562D7B8D98BD83C_cppui_modular256, - 0x2492F140A6C4342A8DD94379C50932BF964E343604463BC087AF0D3BE6286D17_cppui_modular256}}, - {{0x01C17D06707CE85F2BC84EFAC3E24956AE8A2541C7CB5F520F462538CC68CAB7_cppui_modular256, - 0x3606EB2291FE297730C003E34F3EB0E2B595C70AA1AADDE1DE7AA627E8105400_cppui_modular256}}, - {{0x06BBECCC5DC4E4544FDC73DE1B3D1C036216F7A09E520C9F9CDC26CE723081DF_cppui_modular256, - 0x321C333169A02BA1EA53AC96FA09763A3DD9C67E11FA026FFD55280E9F41DB8C_cppui_modular256}}, - {{0x20469D761E84D4EBBD272336C35AB925CDFB6CE9A96F9B6334ADBD99901632AD_cppui_modular256, - 0x33EFCD16ED2994A99C4714F311AEAF6FBC318DDE096E124B2AC5DA8F5697B0B1_cppui_modular256}}, - {{0x0EE28963DD2BFED601D6190B1A8ACAB3C0BD7A48BA3CE0DC3953C597EAD38F60_cppui_modular256, - 0x2986AD19B8E776B714C161FB27D543A516CB19F34571C27C0D971FB8BEFC5200_cppui_modular256}}, - {{0x0B1D36795958F1AF584E7D839FC5AB0932B341C873A8F14E4CC7C0DBC60E14C0_cppui_modular256, - 0x26A4699FEC12BC3F28E09D9383083BC6E8DCC6160244BB2ACC615BD526676430_cppui_modular256}}, - {{0x1E143FB20689F774780EFAD9E198FFA0F82930E90282022853E86959D4524990_cppui_modular256, - 0x2F0828603D6A58821F43D2F0DE75EB992849F2FDCB33C854BFD9CC00F038B29B_cppui_modular256}}, - {{0x2453FAA0ED474210B25D1131D075963DFF2086F3993902F50280B078C054DC22_cppui_modular256, - 0x06695D5D68BB67E5314B84233CE09DAAE998EDE03A711A8CB9D9C8FF72359304_cppui_modular256}}, - {{0x19BCD57208BCF2CB94D9AD7C04DDD0AEDAE680DF5C160CC41FCAB6322E2922B5_cppui_modular256, - 0x014DB3B97C439C25B5F265F277143C8030014DF3AFCA6153BC86197415D8E74D_cppui_modular256}}, - {{0x330CE397F026A466E89DA13F31525978A8BE2604EFC1954D64FA989DA3A0A515_cppui_modular256, - 0x3EC89B71C0FE64E1517C5E91D2F722577A6EA18A262E37DE1A5BCBBE3DA39C0D_cppui_modular256}}, - {{0x1550CEF977AFB848630EADAA5D1109961C980C026CCDAECBCDCE65D44A686ACA_cppui_modular256, - 0x343FB3192B5E16C468749EA87DA2AFAB02EA6D8B84EE4DBE3D501AD7720F1A5A_cppui_modular256}}, - {{0x118D4542A95F64F628A18897F1618F6FBA930BB69E2211FE6B87D7D57964E515_cppui_modular256, - 0x09BED30175068832797E00D54C9C41FD20B95CE7C85772D7A88F7CB0EC21205E_cppui_modular256}}, - {{0x3EA9A0A449F3D480AAB91D16966928C9333A51498673CB8DC2D2C4BE45C60529_cppui_modular256, - 0x315750C943269EE304319CF5EADE5CF89CB119E614D3558A9268151CBDDA0CF1_cppui_modular256}}, - {{0x3F10748D4451468AA1EBB78CDE1167A734F22AF23C66F2F6C123F77C19D0D040_cppui_modular256, - 0x353598903C926F9EFD8F0212EDA038ED7A92E3ABA1294963E4ABFBA269C1EE3A_cppui_modular256}}}; - - std::vector w_comm_shifted = { - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, {0x0, 0x0}, - }; - - // w_comm - for (size_t i = 0; i < w_comm_unshifted.size(); ++i) { - proof.commitments.w_comm[i].unshifted.assign(w_comm_unshifted[i].begin(), w_comm_unshifted[i].end()); - proof.commitments.w_comm[0].shifted = w_comm_shifted[i]; - } - // z_comm - proof.commitments.z_comm.unshifted.emplace_back( - 0x085220F8668A7789843F474CA2AC22C37D8B8683257D13674EFB206A360D0AF6_cppui_modular256, - 0x3A30BC2478885903A20DEB3140488E871F65A68F2FAED91731D5290381D739F1_cppui_modular256); - proof.commitments.z_comm.shifted = {0x0, 0x0}; - - // t_comm - proof.commitments.t_comm.unshifted.emplace_back( - 0x1A41BFC9814D0A2014AEB92F1735FF599FA8B1D1421A3316F7E1ACFCF5C405F5_cppui_modular256, - 0x0CCB8A5EE6E665BD43A6C7735DE6834C32DB6DF2F0A61547665C0160FD436371_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x0FAC1CB76436BC2C72E96D01D5F1EDF077A84AC680E48AAED040046E1EC4CB51_cppui_modular256, - 0x19C4C61772C83577CB7924C2A58AF314CEF223DAF6AC2EF5B467CB076F009D40_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x1646873C1CF57D2766FCDD3FCEC68B1235CDE020D07187F878A4D109D9F1B6CA_cppui_modular256, - 0x3A8F6A4B50129F6ADA8A3CCEC7FF6690DBF1DDE4B3A762F63E145357EA2ECDCF_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x326AD38B0ABD5DF109E9B783F5940D1D9EECBDAD5B45297F4F941603478DB951_cppui_modular256, - 0x2ABAA4BB678E1202BCD62E08764EE5D27E38E2E1011561063E989A8C486C9B2A_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x3BAB30EA9964F453A7EE5EBB9C7914A7C2BEEE56EBB3988BC23165CBF3250D44_cppui_modular256, - 0x35E01ACB62CBCDC7546BB1327A47DD182BB5DC8CE3C31E876EBCCFF58DB1D189_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x11DEFAA969DD3F8DB78C4628814B59DFE4D8D7CF53871EFC7405BFA4D76A020A_cppui_modular256, - 0x17AE3F3518DBFBCE951BF94394D4F87936C529C0A1C9BA5C86329E36F54400A1_cppui_modular256); - proof.commitments.t_comm.unshifted.emplace_back( - 0x16473BA3DFF201C8B4620834AF90292137E1FDB6EF9DACC64EC6A3B7C24A2A15_cppui_modular256, - 0x1ADB205AADF1B55E594D704F11C415AEB63A65F2AD7296A6B4EB8D1A6441CC0A_cppui_modular256); - proof.commitments.t_comm.shifted = {0x0, 0x0}; - // - // proof - // lr - proof.proof.lr.push_back({{0x2827A5B66FC81CB3A28586C66731CE44953E68A7D1EE3FB5F828279BF43D3D8E_cppui_modular256, - 0x2A7CEF5A6569F691DE3DD0111949740FC64F7361069D09D54201B9AF36B98CD6_cppui_modular256}, - {0x05F2EDBE885A991ABD8D131E6B230133414E9BAEFA3CDF7132E536D5D300F754_cppui_modular256, - 0x1911AF60E5BF6F1D3A390A6CFEFE15066E04B17EB24B6305CD3C3308E47849AF_cppui_modular256}}); - proof.proof.lr.push_back({{0x3459151D7C79466FD7C8291BAC6B330FC66F65A121D9478634E43701AFECDF92_cppui_modular256, - 0x07AB9545D8305EBD5182A4DF7FFD4498737C574B8CF4DB8E0033058D0E2AA83D_cppui_modular256}, - {0x32782C9072D797C83B384D19323086FD3841AE9C1C1244D949A21EF3E036BD1B_cppui_modular256, - 0x2ED0514DB86F8DE544845979224926FDE5DBA2FBAE792E300A5F684419DB8808_cppui_modular256}}); - proof.proof.lr.push_back({{0x2E0CFBB75233CD34A690F73205B6934ED718C9688206E9EF33B2C2C1BF98C4CD_cppui_modular256, - 0x14CD8D00F0E063DA4190DC93010448DF1D4BE9F5A2B60F89C4D574611F58A588_cppui_modular256}, - {0x29C594585650CA82EEA28A74CAF8442AE9E182FE9A372240DA1DA33427872A23_cppui_modular256, - 0x1DF2DDA2763EE650CFB683D40C9CBCB767B83B7AF4AFBEB213C4C651EC16E0CF_cppui_modular256}}); - proof.proof.lr.push_back({{0x291254F14421542DF870729E68165B995858901FF5730705DC1B9298DD7F54BE_cppui_modular256, - 0x2E63F4904403C2366936A3919DCC19388E5446F1044417E73ED73055030B3E77_cppui_modular256}, - {0x1998074EA9846B67AD3E8F0417CA986F59F9C44D6C521D159F9B92EDF0A5ECC2_cppui_modular256, - 0x1BA3999B102FE06AA9CEE88739A7566DAF89AECCEF5AF735C6020E3BB4CF2414_cppui_modular256}}); - proof.proof.lr.push_back({{0x3DFF73C9052B999982DC03165148A1F6A1FFBD804599C510354A97C40F5A429E_cppui_modular256, - 0x302FFD54472D75A939158A9B06FE826F205E8B2069EF29E7E6AF2D17D2531F94_cppui_modular256}, - {0x101F315D1D542EB0E1A1C09C77BBCDCB8E09D40D46FC22F790BFFC09E669D755_cppui_modular256, - 0x05931993697FAC6F06998D844C06D4E424BF70C870745A86EF6801788A3FB17A_cppui_modular256}}); - - proof.proof.delta = {0x343861E35CF469E5E793B7C2856EF61A26A811634AC42C1864EB8A9DA2DB8D15_cppui_modular256, - 0x321143F97752F3DD1DC2228C51D79FDA0977CA2457C45AC233E942ED3E19CD13_cppui_modular256}; - proof.proof.z1 = 0x30A443EF808B43C465C3E1E4DC5638A268E2408DC90B231BA27D4AB23A7C4DBE_cppui_modular256; - proof.proof.z2 = 0x24E4059E049476634417FB5FE0B069B028F5BFEDF120C44F80FE47FF6DA6C101_cppui_modular256; - proof.proof.sg = {0x081439C973E43419FAB2E7FD259925C57FAE9E0BF66F65F0F3C16387FF95295B_cppui_modular256, - 0x1FBCFA7FB3E3C27016F25966E10F79847E626ADD43DA413B7A8F055C88A6FAEC_cppui_modular256}; - - proof.evals[0].w[0] = 0x2A016E5F91F6C33552FC86A7A88C034E5CF1301E4982545A15AB709ECE150E09_cppui_modular256; - proof.evals[0].w[1] = 0x1D1B8F16A3DF52F90BA4856A11D397FDD175DEBBDC84F9D9FD71C46E5CB311CC_cppui_modular256; - proof.evals[0].w[2] = 0x034EB5403A85D023EFD87CE7E37CD027921DBC8F5A59C6338A12965B2E1D2D9B_cppui_modular256; - proof.evals[0].w[3] = 0x3D708DC37C2985BD9E8F39D40FFB35A8C1D1D4106AC17CEA1668C944007FE789_cppui_modular256; - proof.evals[0].w[4] = 0x23ACD65BE15FC86FB7FC4FD45701CF7F348C13DD6DFF400DF808BE97006E06C8_cppui_modular256; - proof.evals[0].w[5] = 0x3F6D999688174F2CC9C37FBFDA241825F50505E56EF660E29FBC52F06008F2EF_cppui_modular256; - proof.evals[0].w[6] = 0x054FF59489820600DB800466FDF3063D387CAFC5464741417FAD07A00E2B558A_cppui_modular256; - proof.evals[0].w[7] = 0x078062AB9E022D286A47F28A6A57C368598416D076C558A8288A05AD9A1451DE_cppui_modular256; - proof.evals[0].w[8] = 0x09B0CFC2B282544FF90FE0ADD6BC80937A8B7DDBA743700ED16703BB25FD4E32_cppui_modular256; - proof.evals[0].w[9] = 0x0BE13CD9C7027B7787D7CED143213DBE9B92E4E6D7C187757A4401C8B1E64A86_cppui_modular256; - proof.evals[0].w[10] = 0x0E11A9F0DB82A29F169FBCF4AF85FAE9BC9A4BF2083F9EDC2320FFD63DCF46DA_cppui_modular256; - proof.evals[0].w[11] = 0x10421707F002C9C6A567AB181BEAB814DDA1B2FD38BDB642CBFDFDE3C9B8432E_cppui_modular256; - proof.evals[0].w[12] = 0x1272841F0482F0EE342F993B884F753FFEA91A08693BCDA974DAFBF155A13F82_cppui_modular256; - proof.evals[0].w[13] = 0x14A2F13619031815C2F7875EF4B4326B1FB0811399B9E5101DB7F9FEE18A3BD6_cppui_modular256; - proof.evals[0].w[14] = 0x16D35E4D2D833F3D51BF75826118EF9640B7E81ECA37FC76C694F80C6D73382A_cppui_modular256; - proof.evals[0].z = 0x38C5D08C61572A0F233A3732575F3A07AD484107EC7366FEB0903FCC30253C1A_cppui_modular256; - proof.evals[0].s[0] = 0x01751A5CCC6A9B9BDF660296AF5F7C80229DC97F3646FFC3729D827E80DF39DF_cppui_modular256; - proof.evals[0].s[1] = 0x264CBA1EFD870553869EC32E652FE2FC5DB4DF0C8B8550816F1947F66858B238_cppui_modular256; - proof.evals[0].s[2] = 0x21D7D3F53426BA3024217C852D5B1944031F52E784E95CA0539A9F88FB3F3FBE_cppui_modular256; - proof.evals[0].s[3] = 0x260E6148F06FA79CD3C8C4A379955A8823017E730AD3624A578304A44B5113AC_cppui_modular256; - proof.evals[0].s[4] = 0x2E901B006A7D080B6566A472AC9DEA73BB53A57A190B1A21ECEB698A869374BA_cppui_modular256; - proof.evals[0].s[5] = 0x2E70F1D4AE3E1DE24337D33C4F61C88A628368CA7FBE9BF67C16F0944C64B7DE_cppui_modular256; - proof.evals[0].generic_selector = 0x2C1E20B5D662CE38070228313FD0D968116779CC3CD2FFF662707412EEBD04C7_cppui_modular256; - proof.evals[0].poseidon_selector = 0x0; - - proof.evals[1].w[0] = 0x119301E40E2E7C7D465D44663295D7EA620FBCC1F53517ABDD2ECF5C944C5CA1_cppui_modular256; - proof.evals[1].w[1] = 0x2796DF6969578BE116556794B60EFDD9D3686F8BFE336F0309CA3AA73393C8A0_cppui_modular256; - proof.evals[1].w[2] = 0x06A9EE581EC0C7F41B9E54F192948200F0045C21B4BA021DBCB6C8EBA3BFF30C_cppui_modular256; - proof.evals[1].w[3] = 0x0EA289935EE95E8D771A681893AC0E4C33CB9BB88A2D0DB18F3C0CED5D37EBAA_cppui_modular256; - proof.evals[1].w[4] = 0x244FF116C46C3E79427E298089212A35DFB57750BDCD97A159A98DC014870F83_cppui_modular256; - proof.evals[1].w[5] = 0x3F04F2BDEBB8E5E732AB024C699E2481A82CA6205E3E34481A0D57BA0AEB997E_cppui_modular256; - proof.evals[1].w[6] = 0x014FCC504DEC8FE403ED2DB233134CD28CAD4F9E54DEE00C3384740355203132_cppui_modular256; - proof.evals[1].w[7] = 0x2AE2D234C19E20C167FAC3AB796EB0F1524B62DD459AE8FE0997B0544AC69E29_cppui_modular256; - proof.evals[1].w[8] = 0x1475D819354FB19ECC0859A4BFCA150FF5A2DD202D09F8D4467DBBB8406D0B1F_cppui_modular256; - proof.evals[1].w[9] = 0x3E08DDFDA901427C3015EF9E0625792EBB40F05F1DC601C61C90F80936137816_cppui_modular256; - proof.evals[1].w[10] = 0x279BE3E21CB2D359942385974C80DD4D5E986AA20535119C5977036D2BB9E50C_cppui_modular256; - proof.evals[1].w[11] = 0x112EE9C690646436F8311B9092DC416C01EFE4E4ECA42172965D0ED121605202_cppui_modular256; - proof.evals[1].w[12] = 0x3AC1EFAB0415F5145C3EB189D937A58AC78DF823DD602A646C704B221706BEF9_cppui_modular256; - proof.evals[1].w[13] = 0x2454F58F77C785F1C04C47831F9309A96AE57266C4CF3A3AA95656860CAD2BEF_cppui_modular256; - proof.evals[1].w[14] = 0x0DE7FB73EB7916CF2459DD7C65EE6DC80E3CECA9AC3E4A10E63C61EA025398E5_cppui_modular256; - proof.evals[1].z = 0x2DEFB3CFB41140464BF709B147777123731468F528CF8F14C032CA136A477469_cppui_modular256; - proof.evals[1].s[0] = 0x11039196D240AC7CC0D1A88749F716B6B025F6BCA2CBBD0B41D2DA46FCC90558_cppui_modular256; - proof.evals[1].s[1] = 0x022CE995D1CA16666888BED84A062994F864C180A393E76F3C2D14786D3FF82E_cppui_modular256; - proof.evals[1].s[2] = 0x3B4C505BF9C0962541FA4597D037BF217AF2B2CD893239A05FC64E8674967F83_cppui_modular256; - proof.evals[1].s[3] = 0x02F194EC301411C828DAC6A83F90299F99441F0EDEAB5A2D0700C32553C5A10B_cppui_modular256; - proof.evals[1].s[4] = 0x2AA071813813CCB09C5C6F5BB6E3F6BEDA421DC5E30A71518BCB05AFDFB4DDA9_cppui_modular256; - proof.evals[1].s[5] = 0x3F82F6EF12DD276FAF8BC01CE8477BC9AF5B81D28586B8EF56CB0E025FA97276_cppui_modular256; - proof.evals[1].generic_selector = 0x23EA1BB94CD1D2E0E13048E0888501151308AD086CCD0D8E7DED12FF54734259_cppui_modular256; - proof.evals[1].poseidon_selector = 0x0; - - proof.ft_eval1 = 0x0BEEA8845F1FD21B0057ACEA23ADFEB71A4922C0A579A57FA221BFF73BE63511_cppui_modular256; - - proof.prev_challenges.resize(1); - proof.prev_challenges[0] = { - {{0x2C0AD1A81FAC9BE59890BEA77119393E3E9EC523A44DF600FE2399C01AA76F70_cppui_modular256, - 0x39F31DAAD9FA26835EB1F6ADB2DCE08649061681361B54082C1FA1CD800EEB97_cppui_modular256, - 0x07DB69AD9447B12124D32EB3F4A087CE3126CEE2BE9BB8F3C0EE78EDE57667BD_cppui_modular256, - 0x15C3B5B04E953BBEEAF466BA36642F163B8E2040506916FAEEEA80FB4ADDE3E4_cppui_modular256, - 0x23AC01B308E2C65CB1159EC07827D65E45F5719DE23675021CE68908B045600B_cppui_modular256}}, - - proof.commitments.z_comm - }; - - return proof; -} - -#endif // CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_VERIFIER_PROOF_TEST_DATA_HPP diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_sponge.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_sponge.hpp deleted file mode 100644 index 1c27c30e17..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_sponge.hpp +++ /dev/null @@ -1,167 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// -// @file Declaration of interfaces for auxiliary components for the SHA256 component. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_AUXILIARY_SPONGE_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_AUXILIARY_SPONGE_HPP - -#include - -#include - -#include - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace blueprint { - namespace components { - - template - class aux; - - template - class aux< - num_squeezes, - snark::plonk_constraint_system, - CurveType, - W0, W1, W2, W3, - W4, W5, W6, W7, - W8, W9, W10, W11, - W12, W13, W14> { - - typedef snark::plonk_constraint_system ArithmetizationType; - - using var = snark::plonk_variable; - using sponge_type = - zk::components::kimchi_sponge; - sponge_type sponge; - - public: - constexpr static const std::size_t selector_seed = 0x0fd2; - constexpr static const std::size_t rows_amount = 200; - constexpr static const std::size_t gates_amount = 0; - - struct params_type { - std::vector input; - var zero; - }; - - struct result_type { - var squeezed = var(0, 0, false); - result_type(var &input) : squeezed(input) {} - result_type(const params_type ¶ms, const std::size_t &start_row_index) { - squeezed = var(W6, start_row_index + rows_amount - 1, false, var::column_type::witness); - } - }; - - static result_type generate_circuit(blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t start_row_index){ - - std::size_t row = start_row_index; - sponge_type sponge; - sponge.init_circuit(bp, assignment, params.zero, row); - row += sponge_type::init_rows; - for (std::size_t i = 0; i < params.input.size(); ++i) { - sponge.absorb_circuit(bp, assignment, params.input[i], row); - row += sponge_type::absorb_rows; - } - var sq; - for (size_t i = 0; i < num_squeezes; ++i) { - sq = sponge.squeeze_circuit(bp, assignment, row); - row += sponge_type::squeeze_rows; - } - return {sq}; - } - - static result_type generate_assignments( - blueprint_assignment_table - &assignment, - const params_type ¶ms, - const std::size_t start_row_index){ - std::size_t row = start_row_index; - - sponge_type sponge; - sponge.init_assignment(assignment, params.zero, row); - row += sponge_type::init_rows; - for (std::size_t i = 0; i < params.input.size(); ++i) { - sponge.absorb_assignment(assignment, params.input[i], row); - row += sponge_type::absorb_rows; - } - var sq; - for (size_t i = 0; i < num_squeezes; ++i) { - sq = sponge.squeeze_assignment(assignment, row); - row += sponge_type::squeeze_rows; - } - return {sq}; - } - - static void generate_gates( - blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t first_selector_index) {} - - static void generate_copy_constraints( - blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t start_row_index) {} - }; - } // namespace components - } // namespace blueprint - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_CURVE_ELEMENT_ENDO_SCALAR_COMPONENT_15_WIRES_HPP diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_transcript_fq.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_transcript_fq.hpp deleted file mode 100644 index fb1fe8d5dc..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_transcript_fq.hpp +++ /dev/null @@ -1,216 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// -// @file Declaration of interfaces for auxiliary components for the SHA256 component. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_AUXILIARY_SPONGE_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_AUXILIARY_SPONGE_HPP - -#include - -#include - -#include - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace blueprint { - namespace components { - - template - class aux_fq; - - template - class aux_fq< - num_absorb, - num_challenges, - num_challenges_fq, - digest, - snark::plonk_constraint_system, - CurveType, - W0, W1, W2, W3, - W4, W5, W6, W7, - W8, W9, W10, W11, - W12, W13, W14> { - - typedef snark::plonk_constraint_system ArithmetizationType; - - using var = snark::plonk_variable; - using transcript_type = - zk::components::kimchi_transcript_fq; - - public: - constexpr static const std::size_t selector_seed = 0x0fd8; - constexpr static const std::size_t rows_amount = transcript_type::init_rows + num_absorb * transcript_type::absorb_group_rows + - num_challenges * transcript_type::challenge_rows + - num_challenges_fq * transcript_type::challenge_fq_rows + - static_cast(digest) * transcript_type::digest_rows; - constexpr static const std::size_t gates_amount = 0; - - struct params_type { - std::vector input_fr; - std::vector> input_g; - }; - - struct result_type { - var squeezed = var(0, 0, false); - result_type(var &input) : squeezed(input) {} - }; - - static result_type generate_circuit(blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t start_row_index){ - - generate_assignments_constants(bp, assignment, params, start_row_index); - generate_copy_constraints(bp, assignment, params, start_row_index); - - var zero(0, start_row_index, false, var::column_type::constant); - - std::size_t row = start_row_index; - - transcript_type transcript; - transcript.init_circuit(bp, assignment, zero, row); - row += transcript_type::init_rows; - for (std::size_t i = 0; i < params.input_fr.size(); ++i) { - transcript.absorb_fr_circuit(bp, assignment, {params.input_fr[i]}, row); - row += transcript_type::absorb_fr_rows; - } - for (std::size_t i = 0; i < params.input_g.size(); ++i) { - transcript.absorb_g_circuit(bp, assignment, {params.input_g[i][0], params.input_g[i][1]}, row); - row += transcript_type::absorb_group_rows; - } - var sq; - for (size_t i = 0; i < num_challenges; ++i) { - sq = transcript.challenge_circuit(bp, assignment, row); - row += transcript_type::challenge_rows; - } - for (size_t i = 0; i < num_challenges_fq; ++i) { - sq = transcript.challenge_fq_circuit(bp, assignment, row); - row += transcript_type::challenge_fq_rows; - } - if (digest) { - sq = transcript.digest_circuit(bp, assignment, row); - row += transcript_type::digest_rows; - } - return {sq}; - } - - static result_type generate_assignments( - blueprint_assignment_table - &assignment, - const params_type ¶ms, - const std::size_t start_row_index){ - - std::size_t row = start_row_index; - - var zero = var(0, start_row_index, false, var::column_type::constant); - - transcript_type transcript; - transcript.init_assignment(assignment, zero, row); - row += transcript_type::init_rows; - for (std::size_t i = 0; i < params.input_fr.size(); ++i) { - transcript.absorb_fr_assignment(assignment, {params.input_fr[i]}, row); - row += transcript_type::absorb_fr_rows; - } - for (std::size_t i = 0; i < params.input_g.size(); ++i) { - transcript.absorb_g_assignment(assignment, {params.input_g[i][0], params.input_g[i][1]}, row); - row += transcript_type::absorb_group_rows; - } - var sq; - for (size_t i = 0; i < num_challenges; ++i) { - sq = transcript.challenge_assignment(assignment, row); - row += transcript_type::challenge_rows; - } - for (size_t i = 0; i < num_challenges_fq; ++i) { - sq = transcript.challenge_fq_assignment(assignment, row); - row += transcript_type::challenge_fq_rows; - } - if (digest) { - sq = transcript.digest_assignment(assignment, row); - row += transcript_type::digest_rows; - } - return {sq}; - } - - static void generate_gates( - blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t first_selector_index) {} - - static void generate_copy_constraints( - blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t start_row_index) {} - - static void generate_assignments_constants(blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t component_start_row) { - std::size_t row = component_start_row; - assignment.constant(0)[row] = 0; - } - }; - } // namespace components - } // namespace blueprint - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_CURVE_ELEMENT_ENDO_SCALAR_COMPONENT_15_WIRES_HPP diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_transcript_fr.hpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_transcript_fr.hpp deleted file mode 100644 index 2251a58738..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/aux_transcript_fr.hpp +++ /dev/null @@ -1,192 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// -// @file Declaration of interfaces for auxiliary components for the SHA256 component. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_AUXILIARY_SPONGE_HPP -#define CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_AUXILIARY_SPONGE_HPP - -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -namespace nil { - namespace crypto3 { - namespace blueprint { - namespace components { - - template - class aux_fr; - - template - class aux_fr< - num_squeezes, - snark::plonk_constraint_system, - CurveType, - W0, W1, W2, W3, - W4, W5, W6, W7, - W8, W9, W10, W11, - W12, W13, W14> { - - typedef snark::plonk_constraint_system ArithmetizationType; - - constexpr static std::size_t public_input_size = 3; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static const std::size_t eval_rounds = 1; - constexpr static const std::size_t max_poly_size = 1; - constexpr static const std::size_t srs_len = 1; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using var = snark::plonk_variable; - using transcript_type = - zk::components::kimchi_transcript_fr; - - public: - constexpr static const std::size_t selector_seed = 0x0fd7; - constexpr static const std::size_t rows_amount = 100; - constexpr static const std::size_t gates_amount = 0; - - struct params_type { - std::vector input; - var zero; - }; - - struct result_type { - var squeezed = var(0, 0, false); - result_type(var &input) : squeezed(input) {} - // result_type(const params_type ¶ms, const std::size_t &start_row_index) { - // squeezed = var(W6, start_row_index + rows_amount - 1, false, var::column_type::witness); - // } - }; - - static result_type generate_circuit(blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t start_row_index){ - - std::size_t row = start_row_index; - - transcript_type transcript; - transcript.init_circuit(bp, assignment, params.zero, row); - row += transcript_type::init_rows; - for (std::size_t i = 0; i < params.input.size(); ++i) { - transcript.absorb_circuit(bp, assignment, params.input[i], row); - row += transcript_type::absorb_rows; - } - var sq; - for (size_t i = 0; i < num_squeezes; ++i) { - sq = transcript.challenge_circuit(bp, assignment, row); - row += transcript_type::challenge_rows; - } - return {sq}; - } - - static result_type generate_assignments( - blueprint_assignment_table - &assignment, - const params_type ¶ms, - const std::size_t start_row_index){ - std::size_t row = start_row_index; - - transcript_type transcript; - transcript.init_assignment(assignment, params.zero, row); - row += transcript_type::init_rows; - for (std::size_t i = 0; i < params.input.size(); ++i) { - transcript.absorb_assignment(assignment, params.input[i], row); - row += transcript_type::absorb_rows; - } - var sq; - for (size_t i = 0; i < num_squeezes; ++i) { - sq = transcript.challenge_assignment(assignment, row); - row += transcript_type::challenge_rows; - } - return {sq}; - } - - static void generate_gates( - blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t first_selector_index) {} - - static void generate_copy_constraints( - blueprint &bp, - blueprint_public_assignment_table &assignment, - const params_type ¶ms, - const std::size_t start_row_index) { - - } - }; - } // namespace components - } // namespace blueprint - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLUEPRINT_COMPONENTS_PLONK_CURVE_ELEMENT_ENDO_SCALAR_COMPONENT_15_WIRES_HPP diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/compare.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/compare.cpp deleted file mode 100644 index 5675bbec6d..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/compare.cpp +++ /dev/null @@ -1,123 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_compare_with_constant_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_compare_0) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 3; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 5; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - using component_type = zk::components::compare_with_const; - - typename component_type::params_type params = {var(0, 0, false, var::column_type::public_input)}; - typename BlueprintFieldType::value_type value = 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000002_cppui_modular255; - std::vector public_input = {value}; - typename BlueprintFieldType::value_type result = 0; - if (value < 0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001_cppui_modular255) { - result = 1; - } - - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.output)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "compare with constant: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_compare_1) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 3; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 5; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - using component_type = zk::components::compare_with_const; - - typename component_type::params_type params = {var(0, 0, false, var::column_type::public_input)}; - std::vector public_input = {0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000_cppui_modular255}; - typename BlueprintFieldType::value_type result = 1; - - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.output)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "compare with constant: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/oracles.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/oracles.cpp deleted file mode 100644 index 20bcc9c038..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/oracles.cpp +++ /dev/null @@ -1,210 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_oracles_test - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include "../../../test_plonk_component.hpp" - -template -void test_from_limbs(std::vector public_input, - typename BlueprintFieldType::value_type expected_res){ - constexpr std::size_t WitnessColumns = 3; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 0; - constexpr std::size_t SelectorColumns = 1; - zk::snark::plonk_table_description desc( - WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); - using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; - using AssignmentType = nil::blueprint::assignment>; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using component_type = nil::blueprint::components::from_limbs; - using var = nil::crypto3::zk::snark::plonk_variable; - - var x(0, 0, false, var::column_type::public_input); - var y(0, 1, false, var::column_type::public_input); - - typename component_type::input_type instance_input = {x, y}; - - auto result_check = [&expected_res, public_input](AssignmentType &assignment, - typename component_type::result_type &real_res) { - #ifdef BLUEPRINT_PLONK_PROFILING_ENABLED - std::cout << "from_limbs input: " << std::hex << public_input[0].data << " " << public_input[1].data << std::endl; - std::cout << "expected_res: " << std::hex << expected_res.data << std::endl; - std::cout << "real res: " << std::hex << var_value(assignment, real_res.result).data << "\n" << std::endl; - #endif - assert(expected_res == var_value(assignment, real_res.result)); - }; - - component_type component_instance({0, 1, 2}, {}, {}); - - - nil::crypto3::test_component (component_instance, desc, public_input, result_check, instance_input); - -} - -template -void test_to_limbs(const std::vector &public_input, - const std::vector &expected_res){ - constexpr std::size_t WitnessColumns = 15 * (Stretched ? 2 : 1); - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 2; - zk::snark::plonk_table_description desc( - WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); - using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; - using AssignmentType = nil::blueprint::assignment>; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using component_type = nil::blueprint::components::to_limbs; - using var = nil::crypto3::zk::snark::plonk_variable; - - var x(0, 0, false, var::column_type::public_input); - - typename component_type::input_type instance_input = {x}; - - auto result_check = [&expected_res, public_input](AssignmentType &assignment, - typename component_type::result_type &real_res) { - #ifdef BLUEPRINT_PLONK_PROFILING_ENABLED - std::cout << "to_limbs input: " << std::hex << public_input[0].data << std::endl; - std::cout << "expexted: " << std::hex << expected_res[3].data << " " << expected_res[2].data << " " << expected_res[1].data << " " << expected_res[0].data << std::endl; - std::cout << "real : " << std::hex << var_value(assignment, real_res.result[3]).data << " " << var_value(assignment, real_res.result[2]).data << " " << var_value(assignment, real_res.result[1]).data << " " << var_value(assignment, real_res.result[0]).data << "\n" <; - - stretched_component_type stretched_instance(component_instance, WitnessColumns / 2, WitnessColumns); - - nil::crypto3::test_component - (stretched_instance, desc, public_input, result_check, instance_input); - } else { - nil::crypto3::test_component - (component_instance, desc, public_input, result_check, instance_input); - } -} - -template -void test_to_limbs_with_stretching(const std::vector &public_input, - const std::vector &expected_res) { - test_to_limbs(public_input, expected_res); - test_to_limbs(public_input, expected_res); -} - - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -template -void test_from_limbs_specific_data(){ - test_from_limbs({0, 0}, 0); - test_from_limbs({5, 12}, 0xC0000000000000005_cppui_modular255); - test_from_limbs({0, 0xFFFFFFFFFFFFFFFF_cppui_modular255}, 0xFFFFFFFFFFFFFFFF0000000000000000_cppui_modular255); - test_from_limbs({0xFFFFFFFFFFFFFFFF_cppui_modular255, 0}, 0xFFFFFFFFFFFFFFFF_cppui_modular255); - test_from_limbs({0xFFFFFFFFFFFFFFFF_cppui_modular255, 0xFFFFFFFFFFFFFFFF_cppui_modular255}, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular255); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_from_limbs_vesta) { - using field_type = nil::crypto3::algebra::curves::vesta::scalar_field_type; - test_from_limbs_specific_data(); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_from_limbs_bls12) { - using field_type = nil::crypto3::algebra::fields::bls12_fr<381>; - test_from_limbs_specific_data(); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_from_limbs_pallas) { - using field_type = nil::crypto3::algebra::curves::pallas::scalar_field_type; - test_from_limbs_specific_data(); -} - -template -void test_to_limbs_specific_data(){ - test_to_limbs_with_stretching({0x1D42ED837696F2A777E7C1FF0436D46E96878B624ECDE039732E37AFCD409C88_cppui_modular256}, - {0x732E37AFCD409C88_cppui_modular256, 0x96878B624ECDE039_cppui_modular256, 0x77E7C1FF0436D46E_cppui_modular256, 0x1D42ED837696F2A7_cppui_modular256}); - - test_to_limbs_with_stretching({0xE826DABA538B6DF0000000000000000FB812F513D0FCC04106CB4BD3F32FAD3_cppui_modular256}, - {0x106CB4BD3F32FAD3_cppui_modular256, 0xFB812F513D0FCC04_cppui_modular256, 0x0_cppui_modular256, 0xE826DABA538B6DF_cppui_modular256}); - - test_to_limbs_with_stretching({0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui_modular256}, - {0xFFFFFFFFFFFFFFFF_cppui_modular256, 0xFFFFFFFFFFFFFFFF_cppui_modular256, 0xFFFFFFFFFFFFFFFF_cppui_modular256, 0x3FFFFFFFFFFFFFFF_cppui_modular256}); - -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_to_limbs_vesta) { - using field_type = nil::crypto3::algebra::curves::vesta::scalar_field_type; - test_to_limbs_specific_data(); - - test_to_limbs_with_stretching({0x40000000000000000000000000000000224698fc094cf91b992d30ed00000000_cppui_modular255}, //-1 vesta - {0x992d30ed00000000_cppui_modular256, 0x224698fc094cf91b_cppui_modular256, 0x0000000000000000_cppui_modular256, 0x4000000000000000_cppui_modular256}); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_to_limbs_pallas) { - using field_type = nil::crypto3::algebra::curves::pallas::scalar_field_type; - test_to_limbs_specific_data(); - - test_to_limbs_with_stretching({0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000000_cppui_modular256}, //-1 pallas - {0x8c46eb2100000000_cppui_modular256, 0x224698fc0994a8dd_cppui_modular256, 0x0000000000000000_cppui_modular256, 0x4000000000000000_cppui_modular256}); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_to_limbs_bls12) { - using field_type = nil::crypto3::algebra::fields::bls12_fr<381>; - test_to_limbs_specific_data(); - - test_to_limbs_with_stretching({0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_cppui_modular256}, //-1 bls12<381> - {0xffffffff00000000_cppui_modular256, 0x53bda402fffe5bfe_cppui_modular256, 0x3339d80809a1d805_cppui_modular256, 0x73eda753299d7d48_cppui_modular256}); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/sponge.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/sponge.cpp deleted file mode 100644 index 99e84ddd10..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/sponge.cpp +++ /dev/null @@ -1,342 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_auxiliary_sponge_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include <../test/verifiers/kimchi/sponge/aux_sponge.hpp> - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_sponge_0) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 15; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_squeezes = 1; - using component_type = zk::components::aux; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - std::vector public_input = {0}; - typename BlueprintFieldType::value_type result = 0x2FADBE2852044D028597455BC2ABBD1BC873AF205DFABB8A304600F3E09EEBA8_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi sponge: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_sponge_1) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 15; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_squeezes = 1; - using component_type = zk::components::aux; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input = {{0, 1, false, var::column_type::public_input}}; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - - std::vector public_input = {0, 0x36FB00AD544E073B92B4E700D9C49DE6FC93536CAE0C612C18FBE5F6D8E8EEF2_cppui_modular256}; - - typename BlueprintFieldType::value_type result = 0x3D4F050775295C04619E72176746AD1290D391D73FF4955933F9075CF69259FB_cppui_modular256; - std::cout<<"Result: "< (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi sponge: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_sponge_2) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 15; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_squeezes = 1; - using component_type = zk::components::aux; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input = {{0, 1, false, var::column_type::public_input}, {0, 2, false, var::column_type::public_input}}; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - - std::vector public_input = {0, 0x3793E30AC691700012BAF26BB813D6D70BD379BEED8050A1DEEE3C188F1C3FBD_cppui_modular256, - 0x2FC4C98E50E0B1AAE6ECB468E28C0B7D80A7E0EEC7136DB0BA0677B84AF0E465_cppui_modular256}; - - typename BlueprintFieldType::value_type result = 0x336C73D08AD408CEB7D1264867096F0817A1D0558B313312A1207602F23624FE_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi sponge: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_sponge_3) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 15; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_squeezes = 1; - using component_type = zk::components::aux; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input = {{0, 1, false, var::column_type::public_input}, - {0, 2, false, var::column_type::public_input}, {0, 3, false, var::column_type::public_input}}; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - - std::vector public_input = {0, 0x0024FB5773CAC987CF3A17DDD6134BA12D3E1CA4F6C43D3695347747CE61EAF5_cppui_modular256, - 0x18E0ED2B46ED1EC258DF721A1D3145B0AA6ABDD02EE851A14B8B659CF47385F2_cppui_modular256, - 0x1A842A688E600F012637FE181292F70C4347B5AE0D9EA9CE7CF18592C345CF73_cppui_modular256}; - - typename BlueprintFieldType::value_type result = 0x3F4B0EABB64E025F920457AF8D090A9F6472CAE11F3D62A749AF544A44941B9B_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi sponge: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_sponge_4) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 15; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_squeezes = 1; - using component_type = zk::components::aux; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input = {{0, 1, false, var::column_type::public_input}, - {0, 2, false, var::column_type::public_input}, {0, 3, false, var::column_type::public_input}, {0, 4, false, var::column_type::public_input}}; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - - std::vector public_input = {0, 0x2059462D60621F70620EA697FA1382EC5553A3DADB3CF9072201E09871B8284C_cppui_modular256, - 0x2747337D1C4F9894747074C771E8EC7F570640E5D0CAF30FDDC446C00FA48707_cppui_modular256, - 0x2DD5047C3EEEF37930E8FA4AD9691B27CF86D3ED39D4DEC4FC6D4E8EE4FF0415_cppui_modular256, - 0x12C387C69BDD436F65AB607A4ED7C62714872EDBF800518B58E76F5106650B29_cppui_modular256}; - - typename BlueprintFieldType::value_type result = 0x165A8CECF6660C6E0054CB9B4DBA9D68047166D7F3CED2F8DC86ED2EBFD3EC47_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi sponge: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_sponge_5) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 15; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_squeezes = 1; - using component_type = zk::components::aux; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input = {{0, 1, false, var::column_type::public_input}, - {0, 2, false, var::column_type::public_input}, {0, 3, false, var::column_type::public_input}, {0, 4, false, var::column_type::public_input}, - {0, 5, false, var::column_type::public_input}}; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - - std::vector public_input = {0, 0x3CF70C3A89749A45DB5236B8DE167A37762526C45270138A9FCDF2352B1899DA_cppui_modular256, - 0x1BDF55BC84C1A0E0F7F6834949FCF90279B9D21C17DBC9928202C49039570598_cppui_modular256, - 0x09441E95A82199EFC390152C5039C0D0566A90B7F6D1AA5813B2DAB90110FF90_cppui_modular256, - 0x375B4A9785503C24531723DB1F31B50B79C3D1EC9F95DB7645A3EDA03862B588_cppui_modular256, - 0x12688FE351ED01F3BB2EB6B0FA2A70FB232654F32B08990DC3A411E527776A89_cppui_modular256}; - - typename BlueprintFieldType::value_type result = 0x0CA2C3342C2959D7CD94B5C9D4DC55900F5F60B345F714827C8B907752D5A209_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi sponge: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_sponge_double_squeeze) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 15; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr static const size_t num_squeezes = 2; - using component_type = zk::components::aux; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - - std::vector public_input; - - typename BlueprintFieldType::value_type result = 0x160A4D666FF9427DC907A5358B16C6966EB386213CE7994F87C8970F7DB8CDC3_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi sponge: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/transcript_fq.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/transcript_fq.cpp deleted file mode 100644 index 8117cc3521..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/transcript_fq.cpp +++ /dev/null @@ -1,280 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_auxiliary_transcript_test - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include <../test/verifiers/kimchi/sponge/aux_transcript_fq.hpp> - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_transcript_0) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 17; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_absorb = 15; - constexpr size_t num_challenges = 1; //works - constexpr size_t num_challenges_fq = 0; //works - constexpr bool digest = false; //works - using component_type = zk::components::aux_fq; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input_fr; - std::vector> input_g = {{var(0, 0, false, var::column_type::public_input), - var(0, 1, false, var::column_type::public_input)}, - {var(0, 2, false, var::column_type::public_input), - var(0, 3, false, var::column_type::public_input)}, - {var(0, 4, false, var::column_type::public_input), - var(0, 5, false, var::column_type::public_input)}, - {var(0, 6, false, var::column_type::public_input), - var(0, 7, false, var::column_type::public_input)}, - {var(0, 8, false, var::column_type::public_input), - var(0, 9, false, var::column_type::public_input)}, - {var(0, 10, false, var::column_type::public_input), - var(0, 11, false, var::column_type::public_input)}, - {var(0, 12, false, var::column_type::public_input), - var(0, 13, false, var::column_type::public_input)}, - {var(0, 14, false, var::column_type::public_input), - var(0, 15, false, var::column_type::public_input)}, - {var(0, 16, false, var::column_type::public_input), - var(0, 17, false, var::column_type::public_input)}, - {var(0, 18, false, var::column_type::public_input), - var(0, 19, false, var::column_type::public_input)}, - {var(0, 20, false, var::column_type::public_input), - var(0, 21, false, var::column_type::public_input)}, - {var(0, 22, false, var::column_type::public_input), - var(0, 23, false, var::column_type::public_input)}, - {var(0, 24, false, var::column_type::public_input), - var(0, 25, false, var::column_type::public_input)}, - {var(0, 26, false, var::column_type::public_input), - var(0, 27, false, var::column_type::public_input)}, - {var(0, 28, false, var::column_type::public_input), - var(0, 29, false, var::column_type::public_input)}}; - typename component_type::params_type params = {input_fr, input_g}; - std::vector public_input = {0x1CF10D1482EB88632AEFED15C16082007B38DDC528626195CF6B040E2C7D5914_cppui_modular256, - 0x15A406A92FA16DB6E24D125C8EC5365D76DD8BB188106C0063BA9EC51E0FB8E7_cppui_modular256, - 0x3B38AC47170B2DB158AE7C02E939B2877139040D240171F6A6BB01183902566E_cppui_modular256, - 0x05AAC7FD92471BBFF23D5E4F9AD0B64783467A4809940FEBB7BD6C91A9E9E1C0_cppui_modular256, - 0x281BD2B891CF0795B1439B3AB149ED2A535B8E08C4430112D7D4BF53F3789BEF_cppui_modular256, - 0x10B2FA452CAC5D11CC8040D5DD504222A2621FC378EFD7D08A01BAB3A3DE28DF_cppui_modular256, - 0x0158FEA0E6586A75F36FB621E9C9FC7A38970812F0F1753D3BB716655E3B9D79_cppui_modular256, - 0x2A9688F370DCC43130D38AB7AD2B3FF2A925791F587B55AD138B1F067E874C59_cppui_modular256, - 0x0CA7898337AB528838EAD23D7CBCD4861F1E5E2E5D3B1BD3B733A832C7931547_cppui_modular256, - 0x351C82EC1D20E977ABFC632BBA2330AF61270A00BC2D32B6F2E1DA93AA0D51F1_cppui_modular256, - 0x00DCE7DC20642A850002731F9B3820327CF5856B1D8C3B0EE6BD7BC03BC85FFD_cppui_modular256, - 0x3B1BCBA06B0D33F08123EDD6DF725CC1F8CD2213EA867FF4020C2D18619BB2DB_cppui_modular256, - 0x0F7C2FF92D8F0776629F87BBF25702CEAA45B1893617F7C9AC10AACB080B6E10_cppui_modular256, - 0x16E7207D6596C7FAFF46FB335E14DC57E08E150AB7F692607F3B8DCC9E6CDA93_cppui_modular256, - 0x2CD748E8C8806196ABE34DF032864491CADCF205AF70CB9152507BD16B912BEC_cppui_modular256, - 0x2219EC3C1873373A6717E7BFA24827AD89BF949B0F240D7B9D8981C2006E400F_cppui_modular256, - 0x027E878BD478FC5DE36CA783CB60297C5F75CB638C71615A04714C52E9B15E8E_cppui_modular256, - 0x2CCE580022C7D44E72BA8E7E608C3733A3F3EDC0304566097C07D6CCA172A1B4_cppui_modular256, - 0x0DC7C8FE3A9007F09283D29C5BE99AACEB9DA6996CD691BBAC5D075BDD6DA223_cppui_modular256, - 0x1FA4B95451090B8A36D503BFDBF086D4462745626B4BA4490AF42A7A6B5FD449_cppui_modular256, - 0x20254A64C61A3C1882EC3E9FCA0ABAE814B0EB0477C3396E562C1006054347F3_cppui_modular256, - 0x23CDCBDE9DCBD33AD86BF48181B1616FC76D24A18711A3953D184E772D936418_cppui_modular256, - 0x00DB22BCFC9A1D1A10A53716A7E7D4022DBF101B8767B68E78837CB8263BE097_cppui_modular256, - 0x3E283D2F0D90CAC87B3FCD95E7A8933FB2B2B43EF07FA577CA566527481AB6C9_cppui_modular256, - 0x0D24814B6FE1C8C42FC05834B95212E473B76C8B9588D1272BFAE8FA0E2B9384_cppui_modular256, - 0x11C75275709440AC01B74C4E64E2606F7826294F868F6B0265008E758C148369_cppui_modular256, - 0x007997CB753B919B586243FCAF6E5886676F180C2220BAC055AE9739CA4A1B4B_cppui_modular256, - 0x166859AE2ECE3520D33C2D146F6DBCFC819779C288E9D81C3F7369DF5642EF31_cppui_modular256, - 0x04E774B3DE1A78D6C9408D7B10D9E4614FC8AE4DFE4BFE6762278EE72BB9E25D_cppui_modular256, - 0x178AC19F836752BAF356D9E9C3C35470F27A52C16B7572EEF2C61A43B4D0499B_cppui_modular256}; - typename BlueprintFieldType::value_type result = 0x0000000000000000000000000000000006906F18EE1C02C944C3186D54A8D03E_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi transcript_fq: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_transcript_1) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 20; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_absorb = 0; - constexpr size_t num_challenges = 0; //works - constexpr size_t num_challenges_fq = 0; //works - constexpr bool digest = true; //works - using component_type = zk::components::aux_fq; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input_fr; - std::vector> input_g; - typename component_type::params_type params = {input_fr, input_g}; - std::vector public_input; - typename BlueprintFieldType::value_type result = 0x3A3374A061464EC0AAC7E0FF04346926C579D542F9D205A670CE4C18C004E5C1_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi transcript_fq: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_transcript_2) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 20; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_absorb = 0; - constexpr size_t num_challenges = 3; //works - constexpr size_t num_challenges_fq = 0; //works - constexpr bool digest = false; //works - using component_type = zk::components::aux_fq; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input_fr; - std::vector> input_g; - typename component_type::params_type params = {input_fr, input_g}; - std::vector public_input = - {}; - typename BlueprintFieldType::value_type result = 0x00000000000000000000000000000000AFEB6EEE7D0BD8B45C33CA8DDFC9DFE9_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi transcript_fq: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_transcript_3) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::base_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 20; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_absorb = 1; - constexpr size_t num_challenges = 1; //works - constexpr size_t num_challenges_fq = 0; //works - constexpr bool digest = false; //works - using component_type = zk::components::aux_fq; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - - std::vector public_input; - typename BlueprintFieldType::value_type result = 0x000000000000000000000000000000003972C78FB41D347300A463E54826F2AB_cppui_modular256; - std::vector input_fr; - std::vector> input_g; - - public_input.push_back(1); - input_fr.push_back(var(0, 0, false, var::column_type::public_input)); - - typename component_type::params_type params = {input_fr, input_g}; - - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi transcript_fq: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/transcript_fr.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/transcript_fr.cpp deleted file mode 100644 index 17d64f180b..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/sponge/transcript_fr.cpp +++ /dev/null @@ -1,87 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_auxiliary_transcript_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include <../test/verifiers/kimchi/sponge/aux_transcript_fr.hpp> - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_transcript_0) { - auto start = std::chrono::high_resolution_clock::now(); - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 16; - using ArithmetizationParams = zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - - constexpr size_t num_squeezes = 1; - using component_type = zk::components::aux_fr; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - std::vector input; - var zero(0, 0, false, var::column_type::public_input); - typename component_type::params_type params = {input, zero}; - std::vector public_input = {0}; - typename BlueprintFieldType::value_type result = 0x00000000000000000000000000000000C873AF205DFABB8A304600F3E09EEBA8_cppui_modular256; - auto result_check = [&result](AssignmentType &assignment, - component_type::result_type &real_res) { - assert(result == assignment.var_value(real_res.squeezed)); - }; - test_component (params, public_input, result_check); - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "kimchi transcript_fr: " << duration.count() << "ms" << std::endl; -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/table_commitment.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/table_commitment.cpp deleted file mode 100644 index 0e38e1921e..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/table_commitment.cpp +++ /dev/null @@ -1,169 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Alisa Cherniaeva -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_batch_verify_base_field_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include -//#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/lookup_test.hpp" - -#include "test_plonk_component.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_table_commitment_test_suite) - -BOOST_AUTO_TEST_CASE(blueprint_plonk_table_commitment_test) { - - using curve_type = algebra::curves::pallas; - using BlueprintFieldType = typename curve_type::base_field_type; - using ScalarFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 25; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = zk::blueprint_assignment_table; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - constexpr static const std::size_t batch_size = 1; - constexpr static const std::size_t eval_rounds = 1; - constexpr static const std::size_t comm_size = 1; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - - constexpr static std::size_t witness_columns = 5; - constexpr static std::size_t perm_size = 5; - - constexpr static std::size_t srs_len = 1; - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_lookup_test; - using circuit_description = zk::components::kimchi_circuit_description; - using KimchiParamsType = zk::components::kimchi_params_type; - - using commitment_type = typename - zk::components::kimchi_commitment_type; - using kimchi_constants = zk::components::kimchi_inner_constants; - - using component_type = zk::components::table_commitment; - using var_ec_point = typename zk::components::var_ec_point; - using var = zk::snark::plonk_variable; - - constexpr static const std::size_t lookup_columns = KimchiParamsType::circuit_params::lookup_columns; - - constexpr std::size_t use_lookup_runtime = KimchiParamsType::circuit_params::lookup_runtime ? 1 : 0; - - // zk::snark::pickles_proof kimchi_proof = test_proof(); - - std::vector public_input; - std::vector lookup_columns_var; - std::array lookup_scalars_var; - commitment_type runtime_var; - std::size_t j = 0; - std::size_t size = KimchiParamsType::commitment_params_type::shifted_commitment_split; - for (std::size_t i = j; i < lookup_columns; i++){ - commitment_type column_var; - for (std::size_t k = 0; k < size; k++) { - public_input.push_back(algebra::random_element>().X); - public_input.push_back(algebra::random_element>().Y); - column_var.parts[k] = {var(0, i*k*2 + k*2, false, var::column_type::public_input), - var(0, i*k*2 + k*2 + 1, false, var::column_type::public_input)}; - j+=2; - } - lookup_columns_var.push_back(column_var); - } - - if (KimchiParamsType::circuit_params::lookup_runtime){ - for (std::size_t k = 0; k < size; k++) { - public_input.push_back(algebra::random_element>().X); - public_input.push_back(algebra::random_element>().Y); - runtime_var.parts[k] = {var(0, j + k*2, false, var::column_type::public_input), - var(0, j + k*2 + 1, false, var::column_type::public_input)}; - j+=2; - } - } - std::size_t s = lookup_columns + j; - for (std::size_t i = j; i < s; i++){ - for (std::size_t k = 0; k < size; k++) { - public_input.push_back(algebra::random_element()); - lookup_scalars_var[i - j] = (var(0, i, false, var::column_type::public_input)); - j++; - } - } - - typename component_type::params_type params = {lookup_columns_var, lookup_scalars_var, runtime_var}; - - auto result_check = [](AssignmentType &assignment, component_type::result_type &real_res) {}; - - test_component( - params, public_input, result_check); -}; -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/kimchi/verify_scalar.cpp b/crypto3/libs/blueprint/test/verifiers/kimchi/verify_scalar.cpp deleted file mode 100644 index 60f2207a59..0000000000 --- a/crypto3/libs/blueprint/test/verifiers/kimchi/verify_scalar.cpp +++ /dev/null @@ -1,237 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021-2022 Mikhail Komarov -// Copyright (c) 2021-2022 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// Copyright (c) 2022 Alisa Cherniaeva -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blueprint_plonk_kimchi_verifier_scalar_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include "verifiers/kimchi/index_terms_instances/ec_index_terms.hpp" - -#include "test_plonk_component.hpp" -#include "proof_data.hpp" - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(blueprint_plonk_kimchi_verify_scalar_field_test_suite) - -template -void prepare_proof(zk::snark::pickles_proof &original_proof, - zk::components::kimchi_proof_scalar &circuit_proof, - std::vector &public_input) { - using var = zk::snark::plonk_variable; - - // eval_proofs - for (std::size_t point_idx = 0; point_idx < 2; point_idx++) { - // w - for (std::size_t i = 0; i < KimchiParamsType::witness_columns; i++) { - public_input.push_back(original_proof.evals[point_idx].w[i]); - circuit_proof.proof_evals[point_idx].w[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // z - public_input.push_back(original_proof.evals[point_idx].z); - circuit_proof.proof_evals[point_idx].z = var(0, public_input.size() - 1, false, var::column_type::public_input); - // s - for (std::size_t i = 0; i < KimchiParamsType::permut_size - 1; i++) { - public_input.push_back(original_proof.evals[point_idx].s[i]); - circuit_proof.proof_evals[point_idx].s[i] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - // lookup - if (KimchiParamsType::use_lookup) { - // TODO - } - // generic_selector - public_input.push_back(original_proof.evals[point_idx].generic_selector); - circuit_proof.proof_evals[point_idx].generic_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - // poseidon_selector - public_input.push_back(original_proof.evals[point_idx].poseidon_selector); - circuit_proof.proof_evals[point_idx].poseidon_selector = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - for (std::size_t i = 0; i < KimchiParamsType::public_input_size; i++) { - public_input.push_back(original_proof.public_input[i]); - circuit_proof.public_input[i] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - - for (std::size_t i = 0; i < KimchiParamsType::prev_challenges_size; i++) { - for (std::size_t j = 0; j < EvalRounds; j++) { - public_input.push_back(original_proof.prev_challenges[i].first[j]); - circuit_proof.prev_challenges[i][j] = - var(0, public_input.size() - 1, false, var::column_type::public_input); - } - } - - // ft_eval - public_input.push_back(original_proof.ft_eval1); - circuit_proof.ft_eval = var(0, public_input.size() - 1, false, var::column_type::public_input); -} - -BOOST_AUTO_TEST_CASE(blueprint_plonk_kimchi_verify_scalar_field_test_suite) { - - using curve_type = algebra::curves::vesta; - using BlueprintFieldType = typename curve_type::scalar_field_type; - constexpr std::size_t WitnessColumns = 15; - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 1; - constexpr std::size_t SelectorColumns = 30; - using ArithmetizationParams = - zk::snark::plonk_arithmetization_params; - using ArithmetizationType = zk::snark::plonk_constraint_system; - using AssignmentType = blueprint::assignment; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 40; - - using var = zk::snark::plonk_variable; - - constexpr static std::size_t public_input_size = 3; - constexpr static std::size_t max_poly_size = 32; - constexpr static std::size_t eval_rounds = 5; - - constexpr static std::size_t witness_columns = 15; - constexpr static std::size_t perm_size = 7; - - constexpr static std::size_t srs_len = 10; - constexpr static std::size_t batch_size = 2; - - constexpr static const std::size_t prev_chal_size = 1; - - using commitment_params = zk::components::kimchi_commitment_params_type; - using index_terms_list = zk::components::index_terms_scalars_list_ec_test; - using circuit_description = zk::components::kimchi_circuit_description; - using kimchi_params = zk::components::kimchi_params_type; - - using fq_output_type = - typename zk::components::binding::fq_sponge_output; - - using fr_data_type = typename zk::components::binding::fr_data; - - using fq_data_type = - typename zk::components::binding::fq_data; - - zk::components::kimchi_verifier_index_scalar verifier_index; - typename BlueprintFieldType::value_type omega = - 0x1B1A85952300603BBF8DD3068424B64608658ACBB72CA7D2BB9694ADFA504418_cppui_modular256; - std::size_t domain_size = 128; - verifier_index.domain_size = domain_size; - verifier_index.omega = var(0, 0, false, var::column_type::public_input); - - using component_type = - zk::components::verify_scalar; - - typename BlueprintFieldType::value_type joint_combiner = 0; - typename BlueprintFieldType::value_type beta = 0; - typename BlueprintFieldType::value_type gamma = 0; - typename BlueprintFieldType::value_type alpha = - 0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256; - typename BlueprintFieldType::value_type zeta = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; - typename BlueprintFieldType::value_type fq_digest = - 0x01D4E77CCD66755BDDFDBB6E4E8D8D17A6708B9CB56654D12070BD7BF4A5B33B_cppui_modular256; - - std::vector public_input = {omega}; - - std::array, batch_size> proofs; - - std::array fq_outputs; - - for (std::size_t batch_id = 0; batch_id < batch_size; batch_id++) { - zk::snark::pickles_proof kimchi_proof = test_proof(); - - zk::components::kimchi_proof_scalar proof; - - prepare_proof(kimchi_proof, proof, public_input); - - fq_output_type fq_output; - std::array challenges; - for (std::size_t j = 0; j < eval_rounds; j++) { - public_input.emplace_back(10); - challenges[j] = var(0, public_input.size() - 1, false, var::column_type::public_input); - } - fq_output.challenges = challenges; - - // joint_combiner - public_input.emplace_back(0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256); - fq_output.joint_combiner = var(0, public_input.size() - 1, false, var::column_type::public_input); - // beta - public_input.emplace_back(0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256); - fq_output.beta = var(0, public_input.size() - 1, false, var::column_type::public_input); - // gamma - public_input.emplace_back(0x0000000000000000000000000000000005321CB83A4BCD5C63F489B5BF95A8DC_cppui_modular256); - fq_output.gamma = var(0, public_input.size() - 1, false, var::column_type::public_input); - // alpha - public_input.push_back(alpha); - fq_output.alpha = var(0, public_input.size() - 1, false, var::column_type::public_input); - // zeta - public_input.push_back(zeta); - fq_output.zeta = var(0, public_input.size() - 1, false, var::column_type::public_input); - // fq_digest - public_input.push_back(fq_digest); - fq_output.fq_digest = var(0, public_input.size() - 1, false, var::column_type::public_input); - // c - public_input.emplace_back(250); - fq_output.c = var(0, public_input.size() - 1, false, var::column_type::public_input); - - fq_outputs[batch_id] = fq_output; - } - - fr_data_type fr_data_public; - fq_data_type fq_data_public; - - typename component_type::params_type params = {fr_data_public, fq_data_public, verifier_index, proofs, fq_outputs}; - - auto result_check = [](AssignmentType &assignment, component_type::result_type &real_res) {}; - - test_component(params, public_input, - result_check); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/verifiers/pickles/scalar_details/evals_of_split_evals.cpp b/crypto3/libs/blueprint/test/verifiers/pickles/scalar_details/evals_of_split_evals.cpp index 39e6b9819f..3a3f8cddd2 100644 --- a/crypto3/libs/blueprint/test/verifiers/pickles/scalar_details/evals_of_split_evals.cpp +++ b/crypto3/libs/blueprint/test/verifiers/pickles/scalar_details/evals_of_split_evals.cpp @@ -136,7 +136,7 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_oracles_test) { zk::snark::pickles_proof kimchi_proof = test_proof(); typename BlueprintFieldType::value_type zeta_val = - 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_cppui_modular256; + 0x0000000000000000000000000000000062F9AE3696EA8F0A85043221DE133E32_big_uint256; zk::components::kimchi_proof_scalar proof; diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/f1_loop.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/f1_loop.cpp index d0771e5598..41b9722a84 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/f1_loop.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/f1_loop.cpp @@ -105,18 +105,18 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test0) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x343841a32c928eb4e2ae534f59cc5cf1e25c53e307a5b81b75c131c73b6fc7a0_cppui_modular255, // gamma - 0x69e9e35f0c0f9c2c99fa7d570a5c269a886544f6708a4d2bb1e6f227c44ac62_cppui_modular255, // beta - 0x3ed0f74ff54a53257fc6836fec09caef8293a302ea145f6aa536b1c1eea3ab46_cppui_modular255, - 0x1acd7d04aa7b58b4eece036b22952608b6d36426fb7b6886580f0b94fba78027_cppui_modular255, - 0xff593d0141cbe02fec2f5a6423c83388c61787ac53ba0bf30c7176b21e93004_cppui_modular255, - 0x27a5ffbc960919dd52e5e701d1cbf1b34bca1178031bc6a669c4d569234397d7_cppui_modular255, - 0x3e1bdecdd496459ee5a11c2665460a832d084d28c68f98eeb035f2549e994be4_cppui_modular255, - 0x39786922cdb8e0f0e8338bd6796833d3c653e5ef7b22478a01b24f3c0ff43402_cppui_modular255, + 0x343841a32c928eb4e2ae534f59cc5cf1e25c53e307a5b81b75c131c73b6fc7a0_big_uint255, // gamma + 0x69e9e35f0c0f9c2c99fa7d570a5c269a886544f6708a4d2bb1e6f227c44ac62_big_uint255, // beta + 0x3ed0f74ff54a53257fc6836fec09caef8293a302ea145f6aa536b1c1eea3ab46_big_uint255, + 0x1acd7d04aa7b58b4eece036b22952608b6d36426fb7b6886580f0b94fba78027_big_uint255, + 0xff593d0141cbe02fec2f5a6423c83388c61787ac53ba0bf30c7176b21e93004_big_uint255, + 0x27a5ffbc960919dd52e5e701d1cbf1b34bca1178031bc6a669c4d569234397d7_big_uint255, + 0x3e1bdecdd496459ee5a11c2665460a832d084d28c68f98eeb035f2549e994be4_big_uint255, + 0x39786922cdb8e0f0e8338bd6796833d3c653e5ef7b22478a01b24f3c0ff43402_big_uint255, }; typename BlueprintFieldType::value_type expected_res = - 0x29edab3fc33b0e6d6a75f53dac8612ac902a363340da6f1e5f0f91af80ff9e5e_cppui_modular255; + 0x29edab3fc33b0e6d6a75f53dac8612ac902a363340da6f1e5f0f91af80ff9e5e_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -132,25 +132,25 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test1) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x13d38859e00f79df76e547b36dee3c0d19c5a4c6b7bc33ae284ec653e2db0e66_cppui_modular255, // gamma - 0x2d05f8356617f5060a8c5593d0bcbf5e15c74eb5fd681140b018139c0b453e48_cppui_modular255, // beta - 0xf7436a0e17af4814bd5da359d8b3c3c01bd2dd85d67ba4eb66e73a6852f694b_cppui_modular255, - 0x3fd11cbab87d551cc8b10411f1ee2abfbc68cc27e9fe275912670a794ebc6b06_cppui_modular255, - 0x366217783833274a413583bb6fcfaa3de8dfee3c2885526255a28302bb93231_cppui_modular255, - 0x3b5e28af60706486205ddb4f197e3b8923199c89e043392d36489b299a5ac600_cppui_modular255, - 0xec45e2ee30419aa67682743019246bb630a2d35abcc64ef51295b1dabc9cc4f_cppui_modular255, - 0x1a0f8fdb5e646f277cd13d360a1238a0bcfc13b2dc1acb89dc4cbe90a0e296b9_cppui_modular255, - 0x3f479ebb49bb54c6e7bedf53b04ab68682de35c188ab61096fc433991c567186_cppui_modular255, - 0x2ad86697004fb86c9ff21eefb5a5302ee93a5af6d66e9177039070e0d9008b08_cppui_modular255, - 0x2fbb8c6fa08d8deff7dede25f772a7660e7f3d6214a9924ea6401086b218c21a_cppui_modular255, - 0x2c7bcd2773ec55c8f5833ff46e1542c5390746e05185b379f19d00c5248adb56_cppui_modular255, - 0xf4c65e93df2d11107677b1096c1177c0acb9a3b373cda815b5c5b739862abf2_cppui_modular255, - 0xf163e52958ab4026cc78a067a636cd7c9c358354c747829e0706a77267fe32a_cppui_modular255, - 0x3147dc26cd071216a5cceb16291d35c68ce3e01505adff83b690bd3f82655ae3_cppui_modular255, - 0x39354121b4b606762eb088e4fed35a3aedd44feecfaebd6aecb0e508da13f0f3_cppui_modular255}; + 0x13d38859e00f79df76e547b36dee3c0d19c5a4c6b7bc33ae284ec653e2db0e66_big_uint255, // gamma + 0x2d05f8356617f5060a8c5593d0bcbf5e15c74eb5fd681140b018139c0b453e48_big_uint255, // beta + 0xf7436a0e17af4814bd5da359d8b3c3c01bd2dd85d67ba4eb66e73a6852f694b_big_uint255, + 0x3fd11cbab87d551cc8b10411f1ee2abfbc68cc27e9fe275912670a794ebc6b06_big_uint255, + 0x366217783833274a413583bb6fcfaa3de8dfee3c2885526255a28302bb93231_big_uint255, + 0x3b5e28af60706486205ddb4f197e3b8923199c89e043392d36489b299a5ac600_big_uint255, + 0xec45e2ee30419aa67682743019246bb630a2d35abcc64ef51295b1dabc9cc4f_big_uint255, + 0x1a0f8fdb5e646f277cd13d360a1238a0bcfc13b2dc1acb89dc4cbe90a0e296b9_big_uint255, + 0x3f479ebb49bb54c6e7bedf53b04ab68682de35c188ab61096fc433991c567186_big_uint255, + 0x2ad86697004fb86c9ff21eefb5a5302ee93a5af6d66e9177039070e0d9008b08_big_uint255, + 0x2fbb8c6fa08d8deff7dede25f772a7660e7f3d6214a9924ea6401086b218c21a_big_uint255, + 0x2c7bcd2773ec55c8f5833ff46e1542c5390746e05185b379f19d00c5248adb56_big_uint255, + 0xf4c65e93df2d11107677b1096c1177c0acb9a3b373cda815b5c5b739862abf2_big_uint255, + 0xf163e52958ab4026cc78a067a636cd7c9c358354c747829e0706a77267fe32a_big_uint255, + 0x3147dc26cd071216a5cceb16291d35c68ce3e01505adff83b690bd3f82655ae3_big_uint255, + 0x39354121b4b606762eb088e4fed35a3aedd44feecfaebd6aecb0e508da13f0f3_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x10fdfb2f515ec48c32c7b31b7e3039739bb22cd7bee475b5a74327ccd0dd0f6d_cppui_modular255; + 0x10fdfb2f515ec48c32c7b31b7e3039739bb22cd7bee475b5a74327ccd0dd0f6d_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -164,25 +164,25 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test2) { std::vector public_input = { /*beta: */ - 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_cppui_modular255, + 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_big_uint255, /*gamma: */ - 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_cppui_modular255, - 0x3d08d7113ec5ad138d4d720b44f3a8839a8541ee8f677bd6b688a821e34c2df6_cppui_modular255, - 0x130b302c3079f281cef9b0082567fb0a5504ae46546dbe46a6a0c1a217148bd1_cppui_modular255, - 0x1601b0e7bc9d588bfd28ebc94bc310654ab24669f26645d575cbfb1423cb0f90_cppui_modular255, - 0x3cd9714e6b5440733518b80c64a3aaa050516c848b3a09c456d2c99112f396c3_cppui_modular255, - 0x20e9e41aa6d693d979e31d4cd3426d1ba1138f59b18f3e354758343ba6e857d9_cppui_modular255, - 0x3f48aa78bdb07bc9dea0e8b9c5050f653a3e883061fb3e7242975c11cfafa9bc_cppui_modular255, 0x0_cppui_modular255, 0x0_cppui_modular255, - 0x0_cppui_modular255, 0x18582466937834d434ceff70fa27ea4a1486d5c835080ebc13cb1f7b5bbd4850_cppui_modular255, - 0x1979a1d3b8e9bfc29212140b1f38ea9120aa47febf6a0df823348102f783be15_cppui_modular255, - 0x7d60e5c26d15b2aa293d72a00194e20e533fc3f38aa259ac899b4e82b0b3a3b_cppui_modular255, - 0x3a3c06a35de362be982b6bd008c05efce84f297d4893cb61faee0e230e465502_cppui_modular255, - 0x51a74265a7a5c53a24d9d461403d93aba9c5151e77a4da184dab3c417f687f6_cppui_modular255, - 0xae1137ab4cd9d26666d9dbc0ee2f21a1f1692730311f89f97a5f825992e0f26_cppui_modular255, 0x0_cppui_modular255, 0x0_cppui_modular255, - 0x0_cppui_modular255}; + 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_big_uint255, + 0x3d08d7113ec5ad138d4d720b44f3a8839a8541ee8f677bd6b688a821e34c2df6_big_uint255, + 0x130b302c3079f281cef9b0082567fb0a5504ae46546dbe46a6a0c1a217148bd1_big_uint255, + 0x1601b0e7bc9d588bfd28ebc94bc310654ab24669f26645d575cbfb1423cb0f90_big_uint255, + 0x3cd9714e6b5440733518b80c64a3aaa050516c848b3a09c456d2c99112f396c3_big_uint255, + 0x20e9e41aa6d693d979e31d4cd3426d1ba1138f59b18f3e354758343ba6e857d9_big_uint255, + 0x3f48aa78bdb07bc9dea0e8b9c5050f653a3e883061fb3e7242975c11cfafa9bc_big_uint255, 0x0_big_uint255, 0x0_big_uint255, + 0x0_big_uint255, 0x18582466937834d434ceff70fa27ea4a1486d5c835080ebc13cb1f7b5bbd4850_big_uint255, + 0x1979a1d3b8e9bfc29212140b1f38ea9120aa47febf6a0df823348102f783be15_big_uint255, + 0x7d60e5c26d15b2aa293d72a00194e20e533fc3f38aa259ac899b4e82b0b3a3b_big_uint255, + 0x3a3c06a35de362be982b6bd008c05efce84f297d4893cb61faee0e230e465502_big_uint255, + 0x51a74265a7a5c53a24d9d461403d93aba9c5151e77a4da184dab3c417f687f6_big_uint255, + 0xae1137ab4cd9d26666d9dbc0ee2f21a1f1692730311f89f97a5f825992e0f26_big_uint255, 0x0_big_uint255, 0x0_big_uint255, + 0x0_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x1fe0cedb4028c10c6fbb7984040bacd33a3644a3df6c157a7d253af03168ee8b_cppui_modular255; + 0x1fe0cedb4028c10c6fbb7984040bacd33a3644a3df6c157a7d253af03168ee8b_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -196,14 +196,14 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test3) { std::vector public_input = { /*beta: */ - 0x815e5816cf879a118c629f6f724e75486494f53371ad59a031e8acf03199b88_cppui_modular255, + 0x815e5816cf879a118c629f6f724e75486494f53371ad59a031e8acf03199b88_big_uint255, /*gamma: */ - 0x257158c4ad84265ed8011284ea62f8d24834881034b1d1bf2bdf6dfd0d87aab6_cppui_modular255, - 0x1b5ed497136f6e508532fd859a0cb4fdad54c84549a665d5d580943fa88bb5de_cppui_modular255, - 0x45d83c89ccb02eceedf188623a5cc960fe523678bb70567bcfcada4a8f1d7aa_cppui_modular255}; + 0x257158c4ad84265ed8011284ea62f8d24834881034b1d1bf2bdf6dfd0d87aab6_big_uint255, + 0x1b5ed497136f6e508532fd859a0cb4fdad54c84549a665d5d580943fa88bb5de_big_uint255, + 0x45d83c89ccb02eceedf188623a5cc960fe523678bb70567bcfcada4a8f1d7aa_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x3df91b519c56c1661226abe86c59cd26f3a63c2dbaac2cdeecb286d4735dcbf2_cppui_modular255; + 0x3df91b519c56c1661226abe86c59cd26f3a63c2dbaac2cdeecb286d4735dcbf2_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -217,16 +217,16 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test4) { std::vector public_input = { /*beta: */ - 0x815e5816cf879a118c629f6f724e75486494f53371ad59a031e8acf03199b88_cppui_modular255, + 0x815e5816cf879a118c629f6f724e75486494f53371ad59a031e8acf03199b88_big_uint255, /*gamma: */ - 0x257158c4ad84265ed8011284ea62f8d24834881034b1d1bf2bdf6dfd0d87aab6_cppui_modular255, - 0x1b5ed497136f6e508532fd859a0cb4fdad54c84549a665d5d580943fa88bb5de_cppui_modular255, - 0x45d83c89ccb02eceedf188623a5cc960fe523678bb70567bcfcada4a8f1d7aa_cppui_modular255, - 0x1601b0e7bc9d588bfd28ebc94bc310654ab24669f26645d575cbfb1423cb0f90_cppui_modular255, - 0x3cd9714e6b5440733518b80c64a3aaa050516c848b3a09c456d2c99112f396c3_cppui_modular255}; + 0x257158c4ad84265ed8011284ea62f8d24834881034b1d1bf2bdf6dfd0d87aab6_big_uint255, + 0x1b5ed497136f6e508532fd859a0cb4fdad54c84549a665d5d580943fa88bb5de_big_uint255, + 0x45d83c89ccb02eceedf188623a5cc960fe523678bb70567bcfcada4a8f1d7aa_big_uint255, + 0x1601b0e7bc9d588bfd28ebc94bc310654ab24669f26645d575cbfb1423cb0f90_big_uint255, + 0x3cd9714e6b5440733518b80c64a3aaa050516c848b3a09c456d2c99112f396c3_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x3368f12ac6c75aceaed6f7f2e9af9926674370ddb3d12c00c83c225cc6b88380_cppui_modular255; + 0x3368f12ac6c75aceaed6f7f2e9af9926674370ddb3d12c00c83c225cc6b88380_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -241,18 +241,18 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test5) { std::vector public_input = { /*beta: */ - 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_cppui_modular255, + 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_big_uint255, /*gamma: */ - 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_cppui_modular255, - 0x29566d61a92beabbe4124f3c1140e1621e6dbf40685efcdd3654ebb4a120936f_cppui_modular255, - 0x371ed596cbfbef3fb137c07f7387f0694fb9df229725ecbfa7275460091e5292_cppui_modular255, - 0x5b880339bcbe06aad36ac71638d5d3e831f1dec5ca6f97a456f9936b6690c4c_cppui_modular255, - 0x29566d61a92beabbe4124f3c1140e1621e6dbf40685efcdd3654ebb4a120936f_cppui_modular255, - 0x371ed596cbfbef3fb137c07f7387f0694fb9df229725ecbfa7275460091e5292_cppui_modular255, - 0x5b880339bcbe06aad36ac71638d5d3e831f1dec5ca6f97a456f9936b6690c4c_cppui_modular255}; + 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_big_uint255, + 0x29566d61a92beabbe4124f3c1140e1621e6dbf40685efcdd3654ebb4a120936f_big_uint255, + 0x371ed596cbfbef3fb137c07f7387f0694fb9df229725ecbfa7275460091e5292_big_uint255, + 0x5b880339bcbe06aad36ac71638d5d3e831f1dec5ca6f97a456f9936b6690c4c_big_uint255, + 0x29566d61a92beabbe4124f3c1140e1621e6dbf40685efcdd3654ebb4a120936f_big_uint255, + 0x371ed596cbfbef3fb137c07f7387f0694fb9df229725ecbfa7275460091e5292_big_uint255, + 0x5b880339bcbe06aad36ac71638d5d3e831f1dec5ca6f97a456f9936b6690c4c_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x37b68c62a05782ebfe610897109adc5e0c343a4468372c305e050b4a133860d5_cppui_modular255; + 0x37b68c62a05782ebfe610897109adc5e0c343a4468372c305e050b4a133860d5_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -267,24 +267,24 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test6) { std::vector public_input = { /*beta: */ - 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_cppui_modular255, + 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_big_uint255, /*gamma: */ - 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_cppui_modular255, - 0x3a7580268e270952e70bf455392b34d33608d4291f37c778edf18a1df79b3d02_cppui_modular255, - 0x12cc7a905f5ba0f349772eccf0a4f893255895eab99b4654971beb32c3d18e4c_cppui_modular255, - 0x233de57bb49faf3747f8065836f6e150326ffbcec7f5ff84ab3ed517dff9f782_cppui_modular255, - 0x46ac9a0a0a61d85811114d1b5a59055a1476d224220100ea28aef3ff5057b36_cppui_modular255, - 0x19527a8b49c446bf75b243da6ac78d7c48e4b60c1071a4e5d369c3b46ab184d8_cppui_modular255, - 0xbfdd514782dd17a99538aab6f7c447bb39607098ff684d907d05c4ee6b47364_cppui_modular255, - 0x3cfd22f42d7f4bb00884f12035ac3b507bb19e482dd2e7787754e5cf67dd72a1_cppui_modular255, - 0x1e0fb613aca0c659711bd4c889a691aa78953f8738d6005673123c2667c3cd50_cppui_modular255, - 0x218014cf84950736b0d9c62ccb68ee90f755fc6dd0ed60a208d09da39e64bfd2_cppui_modular255, - 0x237428f92e0be38a22c6220ea2cf7b010a2eae8670f062647bebcab8506fdddc_cppui_modular255, - 0xc0af31fd4848be3dd24df1eb1681e13cb4de4395df9a3c1c8835270e4ae1699_cppui_modular255, - 0x2708b8c59416e906abec12349b0aa4bd8e4e22dfc216b1a78f82daf83aa219df_cppui_modular255}; + 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_big_uint255, + 0x3a7580268e270952e70bf455392b34d33608d4291f37c778edf18a1df79b3d02_big_uint255, + 0x12cc7a905f5ba0f349772eccf0a4f893255895eab99b4654971beb32c3d18e4c_big_uint255, + 0x233de57bb49faf3747f8065836f6e150326ffbcec7f5ff84ab3ed517dff9f782_big_uint255, + 0x46ac9a0a0a61d85811114d1b5a59055a1476d224220100ea28aef3ff5057b36_big_uint255, + 0x19527a8b49c446bf75b243da6ac78d7c48e4b60c1071a4e5d369c3b46ab184d8_big_uint255, + 0xbfdd514782dd17a99538aab6f7c447bb39607098ff684d907d05c4ee6b47364_big_uint255, + 0x3cfd22f42d7f4bb00884f12035ac3b507bb19e482dd2e7787754e5cf67dd72a1_big_uint255, + 0x1e0fb613aca0c659711bd4c889a691aa78953f8738d6005673123c2667c3cd50_big_uint255, + 0x218014cf84950736b0d9c62ccb68ee90f755fc6dd0ed60a208d09da39e64bfd2_big_uint255, + 0x237428f92e0be38a22c6220ea2cf7b010a2eae8670f062647bebcab8506fdddc_big_uint255, + 0xc0af31fd4848be3dd24df1eb1681e13cb4de4395df9a3c1c8835270e4ae1699_big_uint255, + 0x2708b8c59416e906abec12349b0aa4bd8e4e22dfc216b1a78f82daf83aa219df_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x3a204699d97747058b03b75350f8969b7022230a7b6a46bb764050759b6a7363_cppui_modular255; + 0x3a204699d97747058b03b75350f8969b7022230a7b6a46bb764050759b6a7363_big_uint255; test(public_input, expected_res); test(public_input, expected_res); diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/f3_loop.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/f3_loop.cpp index 5ec0601eab..0e22ec1c93 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/f3_loop.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/f3_loop.cpp @@ -106,18 +106,18 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test0) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x343841a32c928eb4e2ae534f59cc5cf1e25c53e307a5b81b75c131c73b6fc7a0_cppui_modular255, - 0x69e9e35f0c0f9c2c99fa7d570a5c269a886544f6708a4d2bb1e6f227c44ac62_cppui_modular255, - 0x3ed0f74ff54a53257fc6836fec09caef8293a302ea145f6aa536b1c1eea3ab46_cppui_modular255, - 0x1acd7d04aa7b58b4eece036b22952608b6d36426fb7b6886580f0b94fba78027_cppui_modular255, - 0xff593d0141cbe02fec2f5a6423c83388c61787ac53ba0bf30c7176b21e93004_cppui_modular255, - 0x27a5ffbc960919dd52e5e701d1cbf1b34bca1178031bc6a669c4d569234397d7_cppui_modular255, - 0x3e1bdecdd496459ee5a11c2665460a832d084d28c68f98eeb035f2549e994be4_cppui_modular255, - 0x39786922cdb8e0f0e8338bd6796833d3c653e5ef7b22478a01b24f3c0ff43402_cppui_modular255, - 0x29edab3fc33b0e6d6a75f53dac8612ac902a363340da6f1e5f0f91af80ff9e5e_cppui_modular255}; + 0x343841a32c928eb4e2ae534f59cc5cf1e25c53e307a5b81b75c131c73b6fc7a0_big_uint255, + 0x69e9e35f0c0f9c2c99fa7d570a5c269a886544f6708a4d2bb1e6f227c44ac62_big_uint255, + 0x3ed0f74ff54a53257fc6836fec09caef8293a302ea145f6aa536b1c1eea3ab46_big_uint255, + 0x1acd7d04aa7b58b4eece036b22952608b6d36426fb7b6886580f0b94fba78027_big_uint255, + 0xff593d0141cbe02fec2f5a6423c83388c61787ac53ba0bf30c7176b21e93004_big_uint255, + 0x27a5ffbc960919dd52e5e701d1cbf1b34bca1178031bc6a669c4d569234397d7_big_uint255, + 0x3e1bdecdd496459ee5a11c2665460a832d084d28c68f98eeb035f2549e994be4_big_uint255, + 0x39786922cdb8e0f0e8338bd6796833d3c653e5ef7b22478a01b24f3c0ff43402_big_uint255, + 0x29edab3fc33b0e6d6a75f53dac8612ac902a363340da6f1e5f0f91af80ff9e5e_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x10f04580466164e2155d833e6489f63f259071438925993668473cf36d4e3826_cppui_modular255; + 0x10f04580466164e2155d833e6489f63f259071438925993668473cf36d4e3826_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -130,24 +130,24 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test1) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x13d38859e00f79df76e547b36dee3c0d19c5a4c6b7bc33ae284ec653e2db0e66_cppui_modular255, - 0x2d05f8356617f5060a8c5593d0bcbf5e15c74eb5fd681140b018139c0b453e48_cppui_modular255, - 0xf7436a0e17af4814bd5da359d8b3c3c01bd2dd85d67ba4eb66e73a6852f694b_cppui_modular255, - 0x3fd11cbab87d551cc8b10411f1ee2abfbc68cc27e9fe275912670a794ebc6b06_cppui_modular255, - 0x366217783833274a413583bb6fcfaa3de8dfee3c2885526255a28302bb93231_cppui_modular255, - 0x3b5e28af60706486205ddb4f197e3b8923199c89e043392d36489b299a5ac600_cppui_modular255, - 0xec45e2ee30419aa67682743019246bb630a2d35abcc64ef51295b1dabc9cc4f_cppui_modular255, - 0x1a0f8fdb5e646f277cd13d360a1238a0bcfc13b2dc1acb89dc4cbe90a0e296b9_cppui_modular255, - 0x3f479ebb49bb54c6e7bedf53b04ab68682de35c188ab61096fc433991c567186_cppui_modular255, - 0x2ad86697004fb86c9ff21eefb5a5302ee93a5af6d66e9177039070e0d9008b08_cppui_modular255, - 0x2fbb8c6fa08d8deff7dede25f772a7660e7f3d6214a9924ea6401086b218c21a_cppui_modular255, - 0x2c7bcd2773ec55c8f5833ff46e1542c5390746e05185b379f19d00c5248adb56_cppui_modular255, - 0xf4c65e93df2d11107677b1096c1177c0acb9a3b373cda815b5c5b739862abf2_cppui_modular255, - 0xf163e52958ab4026cc78a067a636cd7c9c358354c747829e0706a77267fe32a_cppui_modular255, - 0x3147dc26cd071216a5cceb16291d35c68ce3e01505adff83b690bd3f82655ae3_cppui_modular255}; + 0x13d38859e00f79df76e547b36dee3c0d19c5a4c6b7bc33ae284ec653e2db0e66_big_uint255, + 0x2d05f8356617f5060a8c5593d0bcbf5e15c74eb5fd681140b018139c0b453e48_big_uint255, + 0xf7436a0e17af4814bd5da359d8b3c3c01bd2dd85d67ba4eb66e73a6852f694b_big_uint255, + 0x3fd11cbab87d551cc8b10411f1ee2abfbc68cc27e9fe275912670a794ebc6b06_big_uint255, + 0x366217783833274a413583bb6fcfaa3de8dfee3c2885526255a28302bb93231_big_uint255, + 0x3b5e28af60706486205ddb4f197e3b8923199c89e043392d36489b299a5ac600_big_uint255, + 0xec45e2ee30419aa67682743019246bb630a2d35abcc64ef51295b1dabc9cc4f_big_uint255, + 0x1a0f8fdb5e646f277cd13d360a1238a0bcfc13b2dc1acb89dc4cbe90a0e296b9_big_uint255, + 0x3f479ebb49bb54c6e7bedf53b04ab68682de35c188ab61096fc433991c567186_big_uint255, + 0x2ad86697004fb86c9ff21eefb5a5302ee93a5af6d66e9177039070e0d9008b08_big_uint255, + 0x2fbb8c6fa08d8deff7dede25f772a7660e7f3d6214a9924ea6401086b218c21a_big_uint255, + 0x2c7bcd2773ec55c8f5833ff46e1542c5390746e05185b379f19d00c5248adb56_big_uint255, + 0xf4c65e93df2d11107677b1096c1177c0acb9a3b373cda815b5c5b739862abf2_big_uint255, + 0xf163e52958ab4026cc78a067a636cd7c9c358354c747829e0706a77267fe32a_big_uint255, + 0x3147dc26cd071216a5cceb16291d35c68ce3e01505adff83b690bd3f82655ae3_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x3627e4bec2ef12578906bbc3d1820ad3e351949cbff1a8cf4783e82caaa4a225_cppui_modular255; + 0x3627e4bec2ef12578906bbc3d1820ad3e351949cbff1a8cf4783e82caaa4a225_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -160,27 +160,27 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_loop_test2) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x3ac916e994eb085e73928ffcf7349bd78232597abe727e5419efca5da3352762_cppui_modular255, - 0x28c5329493df6684237fe29b099bd63b8e308890d824cc22e1cae645ca74d16e_cppui_modular255, - 0x20850cee63944d67e20b3a7bbb287445d56d896b21dfad679371f92d7c8cfdde_cppui_modular255, - 0x733d8c425ee853f86e19b732693e23fb0b3455e4716461232558a95c507edc7_cppui_modular255, - 0x10107a265a3e1c84a7bfba1098d21f8c454e7b924dbd1da5ac8b3aab636c6a0c_cppui_modular255, - 0x350d9495311fef9a4b0209edb4a3c4bddd5ffb56ce2f191ef970ab9c0ed0ea89_cppui_modular255, - 0x4f4a9468effe3b8b593752aa6ca4076d9548e7ad0db0dd4db34775c4806d44f_cppui_modular255, - 0x3f3c910aa039f6a9c696978cffd810099023bac4778c6a25df3e7cc4882e249f_cppui_modular255, - 0x362a6fe7cda76313effd4f422c2aa30517af2e8cf75cbd6cacd18592f8504465_cppui_modular255, - 0x2a6d49e1c07f61f3356cde688fb9807c7efa8120c1357b768292038c29c33ca1_cppui_modular255, - 0x2fc44c30d66a005631bab5e36186f6f2df3d82695bb41025d12706204a8e98fa_cppui_modular255, - 0x34aa8f0b44149c23df98d0a7950f11945bcaf1588a589d8442fcf6a4551ff475_cppui_modular255, - 0x384d6cead91ac3c0ae1a8acc9f4d753121afe02066774dd10a381ce3f30649f9_cppui_modular255, - 0x181e07ef1cacc19be824f2d02109b1863ab1740bdc82e0e184b3246af28f8773_cppui_modular255, - 0x17a9cdd5c4c1fe3143318316c5a9b18d879813ebda0c56f2b3ab5faaf8e530af_cppui_modular255, - 0x1df2aafa1674d30190d7e9fc28bb72263c0e73ff16f4558736d45836e45de71a_cppui_modular255, - 0x1c397b8d8e0b71e74a95b05b6769850aa0cff9c3d29bf0e48c7df205c571f7ab_cppui_modular255, - 0x3fc816df5e71c581a52cdbbd4cee972b9b56cb08b5d838dfe317b93e0243e11a_cppui_modular255}; + 0x3ac916e994eb085e73928ffcf7349bd78232597abe727e5419efca5da3352762_big_uint255, + 0x28c5329493df6684237fe29b099bd63b8e308890d824cc22e1cae645ca74d16e_big_uint255, + 0x20850cee63944d67e20b3a7bbb287445d56d896b21dfad679371f92d7c8cfdde_big_uint255, + 0x733d8c425ee853f86e19b732693e23fb0b3455e4716461232558a95c507edc7_big_uint255, + 0x10107a265a3e1c84a7bfba1098d21f8c454e7b924dbd1da5ac8b3aab636c6a0c_big_uint255, + 0x350d9495311fef9a4b0209edb4a3c4bddd5ffb56ce2f191ef970ab9c0ed0ea89_big_uint255, + 0x4f4a9468effe3b8b593752aa6ca4076d9548e7ad0db0dd4db34775c4806d44f_big_uint255, + 0x3f3c910aa039f6a9c696978cffd810099023bac4778c6a25df3e7cc4882e249f_big_uint255, + 0x362a6fe7cda76313effd4f422c2aa30517af2e8cf75cbd6cacd18592f8504465_big_uint255, + 0x2a6d49e1c07f61f3356cde688fb9807c7efa8120c1357b768292038c29c33ca1_big_uint255, + 0x2fc44c30d66a005631bab5e36186f6f2df3d82695bb41025d12706204a8e98fa_big_uint255, + 0x34aa8f0b44149c23df98d0a7950f11945bcaf1588a589d8442fcf6a4551ff475_big_uint255, + 0x384d6cead91ac3c0ae1a8acc9f4d753121afe02066774dd10a381ce3f30649f9_big_uint255, + 0x181e07ef1cacc19be824f2d02109b1863ab1740bdc82e0e184b3246af28f8773_big_uint255, + 0x17a9cdd5c4c1fe3143318316c5a9b18d879813ebda0c56f2b3ab5faaf8e530af_big_uint255, + 0x1df2aafa1674d30190d7e9fc28bb72263c0e73ff16f4558736d45836e45de71a_big_uint255, + 0x1c397b8d8e0b71e74a95b05b6769850aa0cff9c3d29bf0e48c7df205c571f7ab_big_uint255, + 0x3fc816df5e71c581a52cdbbd4cee972b9b56cb08b5d838dfe317b93e0243e11a_big_uint255}; typename BlueprintFieldType::value_type expected_res = - 0x2cc334d4e4f1ba642074f6700758d854b5ae4862b5a9cb4b8f8e1fb814b767df_cppui_modular255; + 0x2cc334d4e4f1ba642074f6700758d854b5ae4862b5a9cb4b8f8e1fb814b767df_big_uint255; test(public_input, expected_res); test(public_input, expected_res); diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/fri_cosets.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/fri_cosets.cpp index 0d2c301cb9..f4810b61b3 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/fri_cosets.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/fri_cosets.cpp @@ -135,8 +135,8 @@ void field_operations_test() { test_fri_cosets({46744073709551615}, 3, 2); test_fri_cosets({46744073709551615}, 5, 2); // more realistic data - test_fri_cosets({0xa53a16c34fb833b5_cppui_modular255}, 4, - 0x1ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd_cppui_modular255 + test_fri_cosets({0xa53a16c34fb833b5_big_uint255}, 4, + 0x1ff2863fd35bfc59e51f3693bf37e2d841d1b5fbed4138f755a638bec8750abd_big_uint255 ); } diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/gate_argument_verifier.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/gate_argument_verifier.cpp index c8fee7131a..4db2e59fa1 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/gate_argument_verifier.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/gate_argument_verifier.cpp @@ -105,12 +105,12 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x3c670eabac71e05f3e29255748e080b2ec288a774fdf4c3b6b7685183f2186c0_cppui_modular255, // theta - 0x6e152a2ee7cd62e55993e72b0c32aeb48241c792f48d789cbe35606a72f3c45_cppui_modular255, // C_1_0 - 0x30457a793c861dd0044f6f5bcfb8775b99dd2313c7686f120f1f334997fcbea0_cppui_modular255}; // q_2 + 0x3c670eabac71e05f3e29255748e080b2ec288a774fdf4c3b6b7685183f2186c0_big_uint255, // theta + 0x6e152a2ee7cd62e55993e72b0c32aeb48241c792f48d789cbe35606a72f3c45_big_uint255, // C_1_0 + 0x30457a793c861dd0044f6f5bcfb8775b99dd2313c7686f120f1f334997fcbea0_big_uint255}; // q_2 typename BlueprintFieldType::value_type expected_res = - 0x274f55a187ab99ed7946f85953dc499dee73941bbfeefe80a74c0fe42d254fb4_cppui_modular255; // F + 0x274f55a187ab99ed7946f85953dc499dee73941bbfeefe80a74c0fe42d254fb4_big_uint255; // F test(public_input, expected_res, {1}); test(public_input, expected_res, {1}); @@ -122,14 +122,14 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test0) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x3b68a611d0a4896cf54a3130a166367ce9e3c02584842d117ceca4e7e5100e00_cppui_modular255, // theta - 0x775559d0e51d93ff23e78cfb5b51b797225769e058e37729fb8ed291234d62_cppui_modular255, // C_1_0 - 0x1c454f840f62d7deb28c1161f420930ccc521572e68af58150fe9fdd42246b7c_cppui_modular255, // q_1 - 0x3713eddbd6e7723d5ec49d4865af9a764ba0877d4d54659b1ad2ee3ae0efe344_cppui_modular255, // C_2_0 - 0x1e251c5521af2a481096841a65deb34bfac8a09a05096b6f83db060bbf823217_cppui_modular255}; // q_2 + 0x3b68a611d0a4896cf54a3130a166367ce9e3c02584842d117ceca4e7e5100e00_big_uint255, // theta + 0x775559d0e51d93ff23e78cfb5b51b797225769e058e37729fb8ed291234d62_big_uint255, // C_1_0 + 0x1c454f840f62d7deb28c1161f420930ccc521572e68af58150fe9fdd42246b7c_big_uint255, // q_1 + 0x3713eddbd6e7723d5ec49d4865af9a764ba0877d4d54659b1ad2ee3ae0efe344_big_uint255, // C_2_0 + 0x1e251c5521af2a481096841a65deb34bfac8a09a05096b6f83db060bbf823217_big_uint255}; // q_2 typename BlueprintFieldType::value_type expected_res = - 0x1196613de39bdeef57744700e540ba900d8be069a0dc963bce25ae3b550c2a37_cppui_modular255; // F + 0x1196613de39bdeef57744700e540ba900d8be069a0dc963bce25ae3b550c2a37_big_uint255; // F test(public_input, expected_res, {1, 1}); test(public_input, expected_res, {1, 1}); @@ -141,19 +141,19 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test1) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x107af4ffd5e6a759be7c279d5eac2d5e893a89d703e52a3184b2331d3acbdfc1_cppui_modular255, // theta - 0x815ea6af6ba30435bfe42b04942a42354b7ac5bcb970d2c7fd29600afba4c76_cppui_modular255, // C_3_0 - 0xca85be77a54d63ae5d08aa369c21df7cc559803fa92d44cf06ad801165ba0eb_cppui_modular255, // C_3_1 - 0x11ee26b867cf7bce6b41152282cadb4bf8044b9e2722acf91c8fa01fa634bafb_cppui_modular255, // C_3_2 - 0x32df974641fa733bfafde92e7f86e0f967af2744d6b1d239530419921f8460be_cppui_modular255, // q_3 - 0x2c3c7fd7ad540677c20238e931ab15eec3f30b0d19c0465dcbb2c79500f52959_cppui_modular255, // C_1_0 - 0x39d9d3ce89500f9bbaeefb254fff8d0c25c17cebe2a1c4586630b3c168622e8c_cppui_modular255, // q_1 - 0x37fb8feeafe97cc91109beeda57125d20266990bbbeff2d0f206e51fa447d72_cppui_modular255, // C_2_0 - 0x2b673c52209b43e4735ecb7fe0ba59f4b5cce80ccc1643f56a067ecbbeeba8c3_cppui_modular255 // q_2 + 0x107af4ffd5e6a759be7c279d5eac2d5e893a89d703e52a3184b2331d3acbdfc1_big_uint255, // theta + 0x815ea6af6ba30435bfe42b04942a42354b7ac5bcb970d2c7fd29600afba4c76_big_uint255, // C_3_0 + 0xca85be77a54d63ae5d08aa369c21df7cc559803fa92d44cf06ad801165ba0eb_big_uint255, // C_3_1 + 0x11ee26b867cf7bce6b41152282cadb4bf8044b9e2722acf91c8fa01fa634bafb_big_uint255, // C_3_2 + 0x32df974641fa733bfafde92e7f86e0f967af2744d6b1d239530419921f8460be_big_uint255, // q_3 + 0x2c3c7fd7ad540677c20238e931ab15eec3f30b0d19c0465dcbb2c79500f52959_big_uint255, // C_1_0 + 0x39d9d3ce89500f9bbaeefb254fff8d0c25c17cebe2a1c4586630b3c168622e8c_big_uint255, // q_1 + 0x37fb8feeafe97cc91109beeda57125d20266990bbbeff2d0f206e51fa447d72_big_uint255, // C_2_0 + 0x2b673c52209b43e4735ecb7fe0ba59f4b5cce80ccc1643f56a067ecbbeeba8c3_big_uint255 // q_2 }; typename BlueprintFieldType::value_type expected_res = - 0x33ceac2f8ef925e1f95a6d60334a8e4e3a9c5a925ecd73d6f8a676a5e56efc6c_cppui_modular255; // F + 0x33ceac2f8ef925e1f95a6d60334a8e4e3a9c5a925ecd73d6f8a676a5e56efc6c_big_uint255; // F test(public_input, expected_res, {3, 1, 1}); test(public_input, expected_res, {3, 1, 1}); @@ -165,19 +165,19 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test2) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x107af4ffd5e6a759be7c279d5eac2d5e893a89d703e52a3184b2331d3acbdfc1_cppui_modular255, // theta - 0x2c3c7fd7ad540677c20238e931ab15eec3f30b0d19c0465dcbb2c79500f52959_cppui_modular255, // C_1_0 - 0x39d9d3ce89500f9bbaeefb254fff8d0c25c17cebe2a1c4586630b3c168622e8c_cppui_modular255, // q_1 - 0x37fb8feeafe97cc91109beeda57125d20266990bbbeff2d0f206e51fa447d72_cppui_modular255, // C_2_0 - 0x2b673c52209b43e4735ecb7fe0ba59f4b5cce80ccc1643f56a067ecbbeeba8c3_cppui_modular255, // q_2 - 0x815ea6af6ba30435bfe42b04942a42354b7ac5bcb970d2c7fd29600afba4c76_cppui_modular255, // C_3_0 - 0xca85be77a54d63ae5d08aa369c21df7cc559803fa92d44cf06ad801165ba0eb_cppui_modular255, // C_3_1 - 0x11ee26b867cf7bce6b41152282cadb4bf8044b9e2722acf91c8fa01fa634bafb_cppui_modular255, // C_3_2 - 0x32df974641fa733bfafde92e7f86e0f967af2744d6b1d239530419921f8460be_cppui_modular255 // q_3 + 0x107af4ffd5e6a759be7c279d5eac2d5e893a89d703e52a3184b2331d3acbdfc1_big_uint255, // theta + 0x2c3c7fd7ad540677c20238e931ab15eec3f30b0d19c0465dcbb2c79500f52959_big_uint255, // C_1_0 + 0x39d9d3ce89500f9bbaeefb254fff8d0c25c17cebe2a1c4586630b3c168622e8c_big_uint255, // q_1 + 0x37fb8feeafe97cc91109beeda57125d20266990bbbeff2d0f206e51fa447d72_big_uint255, // C_2_0 + 0x2b673c52209b43e4735ecb7fe0ba59f4b5cce80ccc1643f56a067ecbbeeba8c3_big_uint255, // q_2 + 0x815ea6af6ba30435bfe42b04942a42354b7ac5bcb970d2c7fd29600afba4c76_big_uint255, // C_3_0 + 0xca85be77a54d63ae5d08aa369c21df7cc559803fa92d44cf06ad801165ba0eb_big_uint255, // C_3_1 + 0x11ee26b867cf7bce6b41152282cadb4bf8044b9e2722acf91c8fa01fa634bafb_big_uint255, // C_3_2 + 0x32df974641fa733bfafde92e7f86e0f967af2744d6b1d239530419921f8460be_big_uint255 // q_3 }; typename BlueprintFieldType::value_type expected_res = - 0x1c347e1b881df3bce20b36de4249336d1e650ec283955b9d5ec16c0ab319e51a_cppui_modular255; // F + 0x1c347e1b881df3bce20b36de4249336d1e650ec283955b9d5ec16c0ab319e51a_big_uint255; // F test(public_input, expected_res, {1, 1, 3}); test(public_input, expected_res, {1, 1, 3}); @@ -189,19 +189,19 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test3) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x107af4ffd5e6a759be7c279d5eac2d5e893a89d703e52a3184b2331d3acbdfc1_cppui_modular255, // theta - 0x2c3c7fd7ad540677c20238e931ab15eec3f30b0d19c0465dcbb2c79500f52959_cppui_modular255, // C_1_0 - 0x39d9d3ce89500f9bbaeefb254fff8d0c25c17cebe2a1c4586630b3c168622e8c_cppui_modular255, // q_1 - 0x815ea6af6ba30435bfe42b04942a42354b7ac5bcb970d2c7fd29600afba4c76_cppui_modular255, // C_3_0 - 0xca85be77a54d63ae5d08aa369c21df7cc559803fa92d44cf06ad801165ba0eb_cppui_modular255, // C_3_1 - 0x11ee26b867cf7bce6b41152282cadb4bf8044b9e2722acf91c8fa01fa634bafb_cppui_modular255, // C_3_2 - 0x32df974641fa733bfafde92e7f86e0f967af2744d6b1d239530419921f8460be_cppui_modular255, // q_3 - 0x37fb8feeafe97cc91109beeda57125d20266990bbbeff2d0f206e51fa447d72_cppui_modular255, // C_2_0 - 0x2b673c52209b43e4735ecb7fe0ba59f4b5cce80ccc1643f56a067ecbbeeba8c3_cppui_modular255 // q_2 + 0x107af4ffd5e6a759be7c279d5eac2d5e893a89d703e52a3184b2331d3acbdfc1_big_uint255, // theta + 0x2c3c7fd7ad540677c20238e931ab15eec3f30b0d19c0465dcbb2c79500f52959_big_uint255, // C_1_0 + 0x39d9d3ce89500f9bbaeefb254fff8d0c25c17cebe2a1c4586630b3c168622e8c_big_uint255, // q_1 + 0x815ea6af6ba30435bfe42b04942a42354b7ac5bcb970d2c7fd29600afba4c76_big_uint255, // C_3_0 + 0xca85be77a54d63ae5d08aa369c21df7cc559803fa92d44cf06ad801165ba0eb_big_uint255, // C_3_1 + 0x11ee26b867cf7bce6b41152282cadb4bf8044b9e2722acf91c8fa01fa634bafb_big_uint255, // C_3_2 + 0x32df974641fa733bfafde92e7f86e0f967af2744d6b1d239530419921f8460be_big_uint255, // q_3 + 0x37fb8feeafe97cc91109beeda57125d20266990bbbeff2d0f206e51fa447d72_big_uint255, // C_2_0 + 0x2b673c52209b43e4735ecb7fe0ba59f4b5cce80ccc1643f56a067ecbbeeba8c3_big_uint255 // q_2 }; typename BlueprintFieldType::value_type expected_res = - 0x160e3212397bc43fab22922a46f77280c614ab11fc9567c4659b035d46c29827_cppui_modular255; // F + 0x160e3212397bc43fab22922a46f77280c614ab11fc9567c4659b035d46c29827_big_uint255; // F test(public_input, expected_res, {1, 3, 1}); test(public_input, expected_res, {1, 3, 1}); diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/gate_component.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/gate_component.cpp index 85acc301da..5250a032c9 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/gate_component.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/gate_component.cpp @@ -102,13 +102,13 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_component_test1) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_cppui_modular255, // theta - 0x38e1a856aae5cf012d142449cfe878b1a827f08fec4ac2d1724b7ebf37d3a637_cppui_modular255, // c0 - 0x854a9d175f7eece4dd7bb82babe799b2369571e75d2386264b512bc4f049ee6_cppui_modular255, // c1 - 0x393d97b04bc5d4490ae53903974c1d0aa65e11b4e9ae487a1d3aede2f6edec92_cppui_modular255}; // q + 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_big_uint255, // theta + 0x38e1a856aae5cf012d142449cfe878b1a827f08fec4ac2d1724b7ebf37d3a637_big_uint255, // c0 + 0x854a9d175f7eece4dd7bb82babe799b2369571e75d2386264b512bc4f049ee6_big_uint255, // c1 + 0x393d97b04bc5d4490ae53903974c1d0aa65e11b4e9ae487a1d3aede2f6edec92_big_uint255}; // q typename BlueprintFieldType::value_type expected_res = - 0xf60c8e3799f676371137e184244aaf6859123322600128b05aed7e26223cfd1_cppui_modular255; + 0xf60c8e3799f676371137e184244aaf6859123322600128b05aed7e26223cfd1_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -120,14 +120,14 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_component_test2) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_cppui_modular255, // theta - 0x38e1a856aae5cf012d142449cfe878b1a827f08fec4ac2d1724b7ebf37d3a637_cppui_modular255, // c0 - 0x854a9d175f7eece4dd7bb82babe799b2369571e75d2386264b512bc4f049ee6_cppui_modular255, // c1 - 0xf60c8e3799f676371137e184244aaf6859123322600128b05aed7e26223cfd1_cppui_modular255, // c2 - 0x393d97b04bc5d4490ae53903974c1d0aa65e11b4e9ae487a1d3aede2f6edec92_cppui_modular255}; // q + 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_big_uint255, // theta + 0x38e1a856aae5cf012d142449cfe878b1a827f08fec4ac2d1724b7ebf37d3a637_big_uint255, // c0 + 0x854a9d175f7eece4dd7bb82babe799b2369571e75d2386264b512bc4f049ee6_big_uint255, // c1 + 0xf60c8e3799f676371137e184244aaf6859123322600128b05aed7e26223cfd1_big_uint255, // c2 + 0x393d97b04bc5d4490ae53903974c1d0aa65e11b4e9ae487a1d3aede2f6edec92_big_uint255}; // q typename BlueprintFieldType::value_type expected_res = - 0x1ab9e0ab4db80e2649fe1c44791b231a165329cb8e1cb3186fd42311dfb96ba7_cppui_modular255; + 0x1ab9e0ab4db80e2649fe1c44791b231a165329cb8e1cb3186fd42311dfb96ba7_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -141,15 +141,15 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_component_test3) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_cppui_modular255, // theta - 0x38e1a856aae5cf012d142449cfe878b1a827f08fec4ac2d1724b7ebf37d3a637_cppui_modular255, // c0 - 0x854a9d175f7eece4dd7bb82babe799b2369571e75d2386264b512bc4f049ee6_cppui_modular255, // c1 - 0xf60c8e3799f676371137e184244aaf6859123322600128b05aed7e26223cfd1_cppui_modular255, // c2 - 0x42d09cbf0dbb3ec8e566f3835b8c70cdc6ffb4ee160b7e974174cb84b656c94_cppui_modular255, // c3 - 0x393d97b04bc5d4490ae53903974c1d0aa65e11b4e9ae487a1d3aede2f6edec92_cppui_modular255}; // q + 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_big_uint255, // theta + 0x38e1a856aae5cf012d142449cfe878b1a827f08fec4ac2d1724b7ebf37d3a637_big_uint255, // c0 + 0x854a9d175f7eece4dd7bb82babe799b2369571e75d2386264b512bc4f049ee6_big_uint255, // c1 + 0xf60c8e3799f676371137e184244aaf6859123322600128b05aed7e26223cfd1_big_uint255, // c2 + 0x42d09cbf0dbb3ec8e566f3835b8c70cdc6ffb4ee160b7e974174cb84b656c94_big_uint255, // c3 + 0x393d97b04bc5d4490ae53903974c1d0aa65e11b4e9ae487a1d3aede2f6edec92_big_uint255}; // q typename BlueprintFieldType::value_type expected_res = - 0x1d8aaff35b7c1a8afe535c508bda43c907bc059ced7720df45cb83fcce35d632_cppui_modular255; + 0x1d8aaff35b7c1a8afe535c508bda43c907bc059ced7720df45cb83fcce35d632_big_uint255; test(public_input, expected_res); test(public_input, expected_res); @@ -163,19 +163,19 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_component_test4) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - 0x1f91750ec43107c824e1b79cb0e5b0ce2d5a99ee4d931726955dd619926b3ac8_cppui_modular255, // theta + 0x1f91750ec43107c824e1b79cb0e5b0ce2d5a99ee4d931726955dd619926b3ac8_big_uint255, // theta 1, // c0 - 0x1b058d4ad7a64a076158339af0f28f31b92d727545c3d63fc2d682721d7849fc_cppui_modular255, // c1 - 0x13c8cbb50c4a86600d432cc5340ef1bfa78bb5a35c9381e67b1fe23584a5c12_cppui_modular255, // c2 - 0x3628c1c830ae70a28bf4129c6a01662df74ded3b0529e820fdc3ccf8377ee0e2_cppui_modular255, // c3 - 0x1f36ae1c91b093f88ab05c97230c85bdd79c4d791ac2b0e8bf5c7889bb80aafd_cppui_modular255, // c4 - 0x27b1ece6c803fcf6de3fd9aa5207378466f574a6e9b30e188b1158962fec34cf_cppui_modular255, // c5 - 0x31acc41a65db47a663c27d691157e2f9dcf92de98d482f347c6fa0a78e67d988_cppui_modular255, // c6 - 0x2f971ec81c0309f69e82434a3c6596a509f586fa36712e7fd965ab31ce83b8c2_cppui_modular255, // c7 - 0xcb0e17a777c9ade431b8751afd8057cdd15f74a6795dedd6c1f56bdcdfcff41_cppui_modular255}; // q + 0x1b058d4ad7a64a076158339af0f28f31b92d727545c3d63fc2d682721d7849fc_big_uint255, // c1 + 0x13c8cbb50c4a86600d432cc5340ef1bfa78bb5a35c9381e67b1fe23584a5c12_big_uint255, // c2 + 0x3628c1c830ae70a28bf4129c6a01662df74ded3b0529e820fdc3ccf8377ee0e2_big_uint255, // c3 + 0x1f36ae1c91b093f88ab05c97230c85bdd79c4d791ac2b0e8bf5c7889bb80aafd_big_uint255, // c4 + 0x27b1ece6c803fcf6de3fd9aa5207378466f574a6e9b30e188b1158962fec34cf_big_uint255, // c5 + 0x31acc41a65db47a663c27d691157e2f9dcf92de98d482f347c6fa0a78e67d988_big_uint255, // c6 + 0x2f971ec81c0309f69e82434a3c6596a509f586fa36712e7fd965ab31ce83b8c2_big_uint255, // c7 + 0xcb0e17a777c9ade431b8751afd8057cdd15f74a6795dedd6c1f56bdcdfcff41_big_uint255}; // q typename BlueprintFieldType::value_type expected_res = - 0xa98684e2e2f94ea94934ca0cf06778ccda845b247f2eb226eff63171181a160_cppui_modular255; + 0xa98684e2e2f94ea94934ca0cf06778ccda845b247f2eb226eff63171181a160_big_uint255; test(public_input, expected_res); test(public_input, expected_res); diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/lookup_argument_verifier.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/lookup_argument_verifier.cpp index 6625952b45..60fc1b40de 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/lookup_argument_verifier.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/lookup_argument_verifier.cpp @@ -199,111 +199,111 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test) { std::vector public_input = { /*theta: */ - 0x1f91750ec43107c824e1b79cb0e5b0ce2d5a99ee4d931726955dd619926b3ac8_cppui_modular255, + 0x1f91750ec43107c824e1b79cb0e5b0ce2d5a99ee4d931726955dd619926b3ac8_big_uint255, /*beta: */ - 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_cppui_modular255, + 0x181227226c1423739b9ac923321ed2f09ed6b194314f01fa63cf06a993087d47_big_uint255, /*gamma: */ - 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_cppui_modular255, + 0x2e42a7ce383a60b4a57ead1d59609e3c77d54efdbc3fb3b78df45906b61fa26c_big_uint255, /*alpha: */ - 0x12c35108408002e011a77b1385fafa519b0c049dda69edeec76a5582aefdf679_cppui_modular255, - 0x3c43857ea745aebffbf5b5a15c1f19f6c544fc6f4c058200e8c1fcfc94be97a2_cppui_modular255, - 0xed5489c9d40c4d8a7214f245430ca28651cf789957e34a192e5a25bbe99a36f_cppui_modular255, - 0x24a490b07a66d4d3c7889869f50b54b7d45e049c959d2c7b3908127cc0166736_cppui_modular255, - 0x20082215dffd067489b93a647a77e2d063a0a020b1d1c833fac1d38127789a52_cppui_modular255, - 0x2535b195a0c7d604ab78762b644abe5eb3ce5bb9bf637954b073753c08b913ed_cppui_modular255, - 0xb4959a45c71c0be90a8a6df21b547679746452337f85337087f18498e96b39f_cppui_modular255, - 0x1009604828f0b005c222820f19d2586ce28ff73d888558ea1bae36dc10923fe4_cppui_modular255, + 0x12c35108408002e011a77b1385fafa519b0c049dda69edeec76a5582aefdf679_big_uint255, + 0x3c43857ea745aebffbf5b5a15c1f19f6c544fc6f4c058200e8c1fcfc94be97a2_big_uint255, + 0xed5489c9d40c4d8a7214f245430ca28651cf789957e34a192e5a25bbe99a36f_big_uint255, + 0x24a490b07a66d4d3c7889869f50b54b7d45e049c959d2c7b3908127cc0166736_big_uint255, + 0x20082215dffd067489b93a647a77e2d063a0a020b1d1c833fac1d38127789a52_big_uint255, + 0x2535b195a0c7d604ab78762b644abe5eb3ce5bb9bf637954b073753c08b913ed_big_uint255, + 0xb4959a45c71c0be90a8a6df21b547679746452337f85337087f18498e96b39f_big_uint255, + 0x1009604828f0b005c222820f19d2586ce28ff73d888558ea1bae36dc10923fe4_big_uint255, /*V_L: */ - 0x2f067360ee454281ed80c4bfd37b9e0140071ed383651858abb37d0d868238a2_cppui_modular255, - 0xd079c9f0f66462d4dcf74077bcf5d4e1fb62214198a22d789637d6651d840de_cppui_modular255, + 0x2f067360ee454281ed80c4bfd37b9e0140071ed383651858abb37d0d868238a2_big_uint255, + 0xd079c9f0f66462d4dcf74077bcf5d4e1fb62214198a22d789637d6651d840de_big_uint255, /*q_last_0: */ - 0x2fe713a78f776121b2d68cfe5d35db3f34ca42b4973228a520617b5d92e8e449_cppui_modular255, - 0x36041a6ee4c9d83ca3b8f282a8212e5ecd3a1304f01aeb6fc81dd055c30a115d_cppui_modular255, + 0x2fe713a78f776121b2d68cfe5d35db3f34ca42b4973228a520617b5d92e8e449_big_uint255, + 0x36041a6ee4c9d83ca3b8f282a8212e5ecd3a1304f01aeb6fc81dd055c30a115d_big_uint255, /*q_blind_0: */ - 0x143ef00c6cd28361b04c9c9e3782c1cb5e4543f1faea52c9b22a93803bed7f9d_cppui_modular255, - 0x2fe713a78f776121b2d68cfe5d35db3f34ca42b4973228a520617b5d92e8e449_cppui_modular255, + 0x143ef00c6cd28361b04c9c9e3782c1cb5e4543f1faea52c9b22a93803bed7f9d_big_uint255, + 0x2fe713a78f776121b2d68cfe5d35db3f34ca42b4973228a520617b5d92e8e449_big_uint255, /*L_0: */ - 0x3c8519a916c0ddd81a0992eeb1fc91bc33674d02900ba9977478c89af7e5fd37_cppui_modular255, + 0x3c8519a916c0ddd81a0992eeb1fc91bc33674d02900ba9977478c89af7e5fd37_big_uint255, /*gate selectors: */ - 0x31269dc016cbeeb0720063dcd5494f9eb9348c5dd1d03c98a7ea90340c6cf4e3_cppui_modular255, - 0x3bd9fc4c03b61b7c9cdcd6636b4762f5b17dab51807d76c85fce52fc31299c1d_cppui_modular255, - 0x3f54e2a2ecf53da482d34374b94ad139a05cf74af9bec64c8482bb4e39439ee7_cppui_modular255, + 0x31269dc016cbeeb0720063dcd5494f9eb9348c5dd1d03c98a7ea90340c6cf4e3_big_uint255, + 0x3bd9fc4c03b61b7c9cdcd6636b4762f5b17dab51807d76c85fce52fc31299c1d_big_uint255, + 0x3f54e2a2ecf53da482d34374b94ad139a05cf74af9bec64c8482bb4e39439ee7_big_uint255, /*table_ids: */ 1, 2, 3, /*lookup gate constraint lookup inputs: */ - 0x124971c6cce767192245d6688a4af4482b1c5e935bbdec7825da26763c93e6fc_cppui_modular255, - 0x3a57f30b24c9aec7984dd8bed4f52cf9497665344886c51d9bb9821309c4623b_cppui_modular255, - 0x3ebc055241d36e5d1c8afb9ef7466f8e5d01ac3d16ce2c707d78a92820e61a1c_cppui_modular255, - 0x32da319a20e51a7808c32e35c73434b5f72e0f5031e8c10cdce4b218fc87781a_cppui_modular255, - 0x186be39596fdb9314fbb1f081dcd7056eefe8beec42a1cf745a42863028325c2_cppui_modular255, - 0x9ea111bf6543ac23f0cb51d9ec6a57265709bf3d294df922d7b6841348c255c_cppui_modular255, - 0x2d93a78ddc155e05f452fbf35778c89283dc93503bed266bda527150a440a17b_cppui_modular255, - 0x32da319a20e51a7808c32e35c73434b5f72e0f5031e8c10cdce4b218fc87781a_cppui_modular255, - 0x10e3d915ddd49ca40f1011a754ef3e1e3fa146fed50413be1d8b0c2c9b1a6484_cppui_modular255, - 0x2fddfd79e3de586bd5a03b21b6592cae2ef255e993a07c77dd51d26a6afbfaa8_cppui_modular255, + 0x124971c6cce767192245d6688a4af4482b1c5e935bbdec7825da26763c93e6fc_big_uint255, + 0x3a57f30b24c9aec7984dd8bed4f52cf9497665344886c51d9bb9821309c4623b_big_uint255, + 0x3ebc055241d36e5d1c8afb9ef7466f8e5d01ac3d16ce2c707d78a92820e61a1c_big_uint255, + 0x32da319a20e51a7808c32e35c73434b5f72e0f5031e8c10cdce4b218fc87781a_big_uint255, + 0x186be39596fdb9314fbb1f081dcd7056eefe8beec42a1cf745a42863028325c2_big_uint255, + 0x9ea111bf6543ac23f0cb51d9ec6a57265709bf3d294df922d7b6841348c255c_big_uint255, + 0x2d93a78ddc155e05f452fbf35778c89283dc93503bed266bda527150a440a17b_big_uint255, + 0x32da319a20e51a7808c32e35c73434b5f72e0f5031e8c10cdce4b218fc87781a_big_uint255, + 0x10e3d915ddd49ca40f1011a754ef3e1e3fa146fed50413be1d8b0c2c9b1a6484_big_uint255, + 0x2fddfd79e3de586bd5a03b21b6592cae2ef255e993a07c77dd51d26a6afbfaa8_big_uint255, /*lookup tables selcetors: */ - 0xcb0e17a777c9ade431b8751afd8057cdd15f74a6795dedd6c1f56bdcdfcff41_cppui_modular255, - 0x32a401287578a2c63fb7bc230972cbbcc34700009228e76f186364906b469fa6_cppui_modular255, - 0x32a401287578a2c63fb7bc230972cbbcc34700009228e76f186364906b469fa6_cppui_modular255, + 0xcb0e17a777c9ade431b8751afd8057cdd15f74a6795dedd6c1f56bdcdfcff41_big_uint255, + 0x32a401287578a2c63fb7bc230972cbbcc34700009228e76f186364906b469fa6_big_uint255, + 0x32a401287578a2c63fb7bc230972cbbcc34700009228e76f186364906b469fa6_big_uint255, /* lookup tables lookup option: */ - 0x1b058d4ad7a64a076158339af0f28f31b92d727545c3d63fc2d682721d7849fc_cppui_modular255, - 0x13c8cbb50c4a86600d432cc5340ef1bfa78bb5a35c9381e67b1fe23584a5c12_cppui_modular255, - 0x3628c1c830ae70a28bf4129c6a01662df74ded3b0529e820fdc3ccf8377ee0e2_cppui_modular255, - 0x1f36ae1c91b093f88ab05c97230c85bdd79c4d791ac2b0e8bf5c7889bb80aafd_cppui_modular255, - 0x27b1ece6c803fcf6de3fd9aa5207378466f574a6e9b30e188b1158962fec34cf_cppui_modular255, - 0x31acc41a65db47a663c27d691157e2f9dcf92de98d482f347c6fa0a78e67d988_cppui_modular255, - 0x2f971ec81c0309f69e82434a3c6596a509f586fa36712e7fd965ab31ce83b8c2_cppui_modular255, - 0x1b058d4ad7a64a076158339af0f28f31b92d727545c3d63fc2d682721d7849fc_cppui_modular255, - 0x13c8cbb50c4a86600d432cc5340ef1bfa78bb5a35c9381e67b1fe23584a5c12_cppui_modular255, - 0x3628c1c830ae70a28bf4129c6a01662df74ded3b0529e820fdc3ccf8377ee0e2_cppui_modular255, - 0x1f36ae1c91b093f88ab05c97230c85bdd79c4d791ac2b0e8bf5c7889bb80aafd_cppui_modular255, - 0x27b1ece6c803fcf6de3fd9aa5207378466f574a6e9b30e188b1158962fec34cf_cppui_modular255, - 0x31acc41a65db47a663c27d691157e2f9dcf92de98d482f347c6fa0a78e67d988_cppui_modular255, - 0x2f971ec81c0309f69e82434a3c6596a509f586fa36712e7fd965ab31ce83b8c2_cppui_modular255, + 0x1b058d4ad7a64a076158339af0f28f31b92d727545c3d63fc2d682721d7849fc_big_uint255, + 0x13c8cbb50c4a86600d432cc5340ef1bfa78bb5a35c9381e67b1fe23584a5c12_big_uint255, + 0x3628c1c830ae70a28bf4129c6a01662df74ded3b0529e820fdc3ccf8377ee0e2_big_uint255, + 0x1f36ae1c91b093f88ab05c97230c85bdd79c4d791ac2b0e8bf5c7889bb80aafd_big_uint255, + 0x27b1ece6c803fcf6de3fd9aa5207378466f574a6e9b30e188b1158962fec34cf_big_uint255, + 0x31acc41a65db47a663c27d691157e2f9dcf92de98d482f347c6fa0a78e67d988_big_uint255, + 0x2f971ec81c0309f69e82434a3c6596a509f586fa36712e7fd965ab31ce83b8c2_big_uint255, + 0x1b058d4ad7a64a076158339af0f28f31b92d727545c3d63fc2d682721d7849fc_big_uint255, + 0x13c8cbb50c4a86600d432cc5340ef1bfa78bb5a35c9381e67b1fe23584a5c12_big_uint255, + 0x3628c1c830ae70a28bf4129c6a01662df74ded3b0529e820fdc3ccf8377ee0e2_big_uint255, + 0x1f36ae1c91b093f88ab05c97230c85bdd79c4d791ac2b0e8bf5c7889bb80aafd_big_uint255, + 0x27b1ece6c803fcf6de3fd9aa5207378466f574a6e9b30e188b1158962fec34cf_big_uint255, + 0x31acc41a65db47a663c27d691157e2f9dcf92de98d482f347c6fa0a78e67d988_big_uint255, + 0x2f971ec81c0309f69e82434a3c6596a509f586fa36712e7fd965ab31ce83b8c2_big_uint255, /*lookup tables shifted selcetors: */ - 0xb9481d2c72ffdac988d67079b8eeb9a17a0883db91507b650af1fb2992cdd7d_cppui_modular255, - 0x3a41600a57bc459360967cd9279748fceee9a90ae09a7cbde02e93e0d4f2ad44_cppui_modular255, - 0x3a41600a57bc459360967cd9279748fceee9a90ae09a7cbde02e93e0d4f2ad44_cppui_modular255, + 0xb9481d2c72ffdac988d67079b8eeb9a17a0883db91507b650af1fb2992cdd7d_big_uint255, + 0x3a41600a57bc459360967cd9279748fceee9a90ae09a7cbde02e93e0d4f2ad44_big_uint255, + 0x3a41600a57bc459360967cd9279748fceee9a90ae09a7cbde02e93e0d4f2ad44_big_uint255, /* lookup tables shifted lookup option: */ - 0x1db8ba9b27956295bdf26c4b9502d384ce2447fa7d596fc62263314822fec898_cppui_modular255, - 0x342b0f9fb517871584711bfbefe1ffa3e79d7bdf47980a15f6954402d5e7d8a2_cppui_modular255, - 0x1ed54bb4ec015e30fe0bef1cfc7e702391b1d73dc45f4289b67b04acd2dcf2e9_cppui_modular255, - 0x139c294a0d36efa023e4a91d157774ce8e78f8da9172c90915184b683eaa93d2_cppui_modular255, - 0x4e7594148540be9d7608b428fc578288bb480844be045c03bf67bb63a6425df_cppui_modular255, - 0x14d6b4ef9917aa59be762b845f2befa11a438bc9b52548b1e1a50649c0f3be7a_cppui_modular255, - 0x6042e08d361d89c0d0344212ae9043ba052d5708398387d0e911392a2f3d340_cppui_modular255, - 0x1db8ba9b27956295bdf26c4b9502d384ce2447fa7d596fc62263314822fec898_cppui_modular255, - 0x342b0f9fb517871584711bfbefe1ffa3e79d7bdf47980a15f6954402d5e7d8a2_cppui_modular255, - 0x1ed54bb4ec015e30fe0bef1cfc7e702391b1d73dc45f4289b67b04acd2dcf2e9_cppui_modular255, - 0x139c294a0d36efa023e4a91d157774ce8e78f8da9172c90915184b683eaa93d2_cppui_modular255, - 0x4e7594148540be9d7608b428fc578288bb480844be045c03bf67bb63a6425df_cppui_modular255, - 0x14d6b4ef9917aa59be762b845f2befa11a438bc9b52548b1e1a50649c0f3be7a_cppui_modular255, - 0x6042e08d361d89c0d0344212ae9043ba052d5708398387d0e911392a2f3d340_cppui_modular255, + 0x1db8ba9b27956295bdf26c4b9502d384ce2447fa7d596fc62263314822fec898_big_uint255, + 0x342b0f9fb517871584711bfbefe1ffa3e79d7bdf47980a15f6954402d5e7d8a2_big_uint255, + 0x1ed54bb4ec015e30fe0bef1cfc7e702391b1d73dc45f4289b67b04acd2dcf2e9_big_uint255, + 0x139c294a0d36efa023e4a91d157774ce8e78f8da9172c90915184b683eaa93d2_big_uint255, + 0x4e7594148540be9d7608b428fc578288bb480844be045c03bf67bb63a6425df_big_uint255, + 0x14d6b4ef9917aa59be762b845f2befa11a438bc9b52548b1e1a50649c0f3be7a_big_uint255, + 0x6042e08d361d89c0d0344212ae9043ba052d5708398387d0e911392a2f3d340_big_uint255, + 0x1db8ba9b27956295bdf26c4b9502d384ce2447fa7d596fc62263314822fec898_big_uint255, + 0x342b0f9fb517871584711bfbefe1ffa3e79d7bdf47980a15f6954402d5e7d8a2_big_uint255, + 0x1ed54bb4ec015e30fe0bef1cfc7e702391b1d73dc45f4289b67b04acd2dcf2e9_big_uint255, + 0x139c294a0d36efa023e4a91d157774ce8e78f8da9172c90915184b683eaa93d2_big_uint255, + 0x4e7594148540be9d7608b428fc578288bb480844be045c03bf67bb63a6425df_big_uint255, + 0x14d6b4ef9917aa59be762b845f2befa11a438bc9b52548b1e1a50649c0f3be7a_big_uint255, + 0x6042e08d361d89c0d0344212ae9043ba052d5708398387d0e911392a2f3d340_big_uint255, /* sorted :*/ - 0x3d08d7113ec5ad138d4d720b44f3a8839a8541ee8f677bd6b688a821e34c2df6_cppui_modular255, - 0x130b302c3079f281cef9b0082567fb0a5504ae46546dbe46a6a0c1a217148bd1_cppui_modular255, - 0x1601b0e7bc9d588bfd28ebc94bc310654ab24669f26645d575cbfb1423cb0f90_cppui_modular255, - 0x3cd9714e6b5440733518b80c64a3aaa050516c848b3a09c456d2c99112f396c3_cppui_modular255, - 0x20e9e41aa6d693d979e31d4cd3426d1ba1138f59b18f3e354758343ba6e857d9_cppui_modular255, - 0x3f48aa78bdb07bc9dea0e8b9c5050f653a3e883061fb3e7242975c11cfafa9bc_cppui_modular255, 0x0_cppui_modular255, 0x0_cppui_modular255, - 0x0_cppui_modular255, 0x18582466937834d434ceff70fa27ea4a1486d5c835080ebc13cb1f7b5bbd4850_cppui_modular255, - 0x1979a1d3b8e9bfc29212140b1f38ea9120aa47febf6a0df823348102f783be15_cppui_modular255, - 0x7d60e5c26d15b2aa293d72a00194e20e533fc3f38aa259ac899b4e82b0b3a3b_cppui_modular255, - 0x3a3c06a35de362be982b6bd008c05efce84f297d4893cb61faee0e230e465502_cppui_modular255, - 0x51a74265a7a5c53a24d9d461403d93aba9c5151e77a4da184dab3c417f687f6_cppui_modular255, - 0xae1137ab4cd9d26666d9dbc0ee2f21a1f1692730311f89f97a5f825992e0f26_cppui_modular255, 0x0_cppui_modular255, 0x0_cppui_modular255, - 0x0_cppui_modular255, 0x2187d355d7ebd8be30402d16877e181cca486f51fad291095b33096277e13e_cppui_modular255, - 0x1ef8272e914c2ccd659341031794f603a21dcf3ac35d2e0a9c26bf8881c1ea18_cppui_modular255, - 0x36954d713e9209b0975b87b6b3d51d89ddf76338178177a0b5a503dad5bebd9c_cppui_modular255, - 0x169244a31230525091fa126d82a977e8a7c65705d7aacf73cc28732ed1447f71_cppui_modular255, - 0x28395c6c442a250e83922de639e4296d8925f96f2f0ac1fcd6c129391c76b423_cppui_modular255, - 0x189d2fbb6f71ef06571eeed614cbd374257fb5205ca63b28a5414d3997c1ae4e_cppui_modular255, 0x0_cppui_modular255, 0x0_cppui_modular255}; + 0x3d08d7113ec5ad138d4d720b44f3a8839a8541ee8f677bd6b688a821e34c2df6_big_uint255, + 0x130b302c3079f281cef9b0082567fb0a5504ae46546dbe46a6a0c1a217148bd1_big_uint255, + 0x1601b0e7bc9d588bfd28ebc94bc310654ab24669f26645d575cbfb1423cb0f90_big_uint255, + 0x3cd9714e6b5440733518b80c64a3aaa050516c848b3a09c456d2c99112f396c3_big_uint255, + 0x20e9e41aa6d693d979e31d4cd3426d1ba1138f59b18f3e354758343ba6e857d9_big_uint255, + 0x3f48aa78bdb07bc9dea0e8b9c5050f653a3e883061fb3e7242975c11cfafa9bc_big_uint255, 0x0_big_uint255, 0x0_big_uint255, + 0x0_big_uint255, 0x18582466937834d434ceff70fa27ea4a1486d5c835080ebc13cb1f7b5bbd4850_big_uint255, + 0x1979a1d3b8e9bfc29212140b1f38ea9120aa47febf6a0df823348102f783be15_big_uint255, + 0x7d60e5c26d15b2aa293d72a00194e20e533fc3f38aa259ac899b4e82b0b3a3b_big_uint255, + 0x3a3c06a35de362be982b6bd008c05efce84f297d4893cb61faee0e230e465502_big_uint255, + 0x51a74265a7a5c53a24d9d461403d93aba9c5151e77a4da184dab3c417f687f6_big_uint255, + 0xae1137ab4cd9d26666d9dbc0ee2f21a1f1692730311f89f97a5f825992e0f26_big_uint255, 0x0_big_uint255, 0x0_big_uint255, + 0x0_big_uint255, 0x2187d355d7ebd8be30402d16877e181cca486f51fad291095b33096277e13e_big_uint255, + 0x1ef8272e914c2ccd659341031794f603a21dcf3ac35d2e0a9c26bf8881c1ea18_big_uint255, + 0x36954d713e9209b0975b87b6b3d51d89ddf76338178177a0b5a503dad5bebd9c_big_uint255, + 0x169244a31230525091fa126d82a977e8a7c65705d7aacf73cc28732ed1447f71_big_uint255, + 0x28395c6c442a250e83922de639e4296d8925f96f2f0ac1fcd6c129391c76b423_big_uint255, + 0x189d2fbb6f71ef06571eeed614cbd374257fb5205ca63b28a5414d3997c1ae4e_big_uint255, 0x0_big_uint255, 0x0_big_uint255}; std::array expected_res = { - 0x3fb663ded7ac8eb4b399cf60ec20e4a5e51e1d2fe3fc28759f012f13fac238a7_cppui_modular255, - 0x5f511600d82c0f86b86133984c868d32994819f499e0403b5eb708129de72ae_cppui_modular255, - 0x19278da4bf5d19e98a445ebadc0910733d4ad48527b3417af89b9571a7b886c4_cppui_modular255, - 0x20faeea92ea55a96f57dea87d5ce112778185cb59ef6a1252242d571d1a3f3aa_cppui_modular255}; // F + 0x3fb663ded7ac8eb4b399cf60ec20e4a5e51e1d2fe3fc28759f012f13fac238a7_big_uint255, + 0x5f511600d82c0f86b86133984c868d32994819f499e0403b5eb708129de72ae_big_uint255, + 0x19278da4bf5d19e98a445ebadc0910733d4ad48527b3417af89b9571a7b886c4_big_uint255, + 0x20faeea92ea55a96f57dea87d5ce112778185cb59ef6a1252242d571d1a3f3aa_big_uint255}; // F test(public_input, expected_res, lookup_gates_size, gate_constraints_sizes, gate_constraint_lookup_input_sizes, lookup_tables_size, @@ -332,81 +332,81 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test1) { std::vector public_input = { /*theta: */ - 0x1bfbff1c2f23e10837c97d97f72c907607f1bcfd3b4700ee2b6781dfc732fbca_cppui_modular255, + 0x1bfbff1c2f23e10837c97d97f72c907607f1bcfd3b4700ee2b6781dfc732fbca_big_uint255, /*beta: */ - 0x314d7748efea79faaa93c1b943ce278d30e412a8a293df7f21674ac0da207ddf_cppui_modular255, + 0x314d7748efea79faaa93c1b943ce278d30e412a8a293df7f21674ac0da207ddf_big_uint255, /*gamma: */ - 0xc4b0a8e57586aeb49fa3282f7d4584da1b8c127ae316a599a37654c83577aac_cppui_modular255, + 0xc4b0a8e57586aeb49fa3282f7d4584da1b8c127ae316a599a37654c83577aac_big_uint255, /*alpha: */ - 0x3ac916e994eb085e73928ffcf7349bd78232597abe727e5419efca5da3352762_cppui_modular255, - 0x28c5329493df6684237fe29b099bd63b8e308890d824cc22e1cae645ca74d16e_cppui_modular255, - 0x20850cee63944d67e20b3a7bbb287445d56d896b21dfad679371f92d7c8cfdde_cppui_modular255, - 0x733d8c425ee853f86e19b732693e23fb0b3455e4716461232558a95c507edc7_cppui_modular255, - 0x10107a265a3e1c84a7bfba1098d21f8c454e7b924dbd1da5ac8b3aab636c6a0c_cppui_modular255, - 0x350d9495311fef9a4b0209edb4a3c4bddd5ffb56ce2f191ef970ab9c0ed0ea89_cppui_modular255, + 0x3ac916e994eb085e73928ffcf7349bd78232597abe727e5419efca5da3352762_big_uint255, + 0x28c5329493df6684237fe29b099bd63b8e308890d824cc22e1cae645ca74d16e_big_uint255, + 0x20850cee63944d67e20b3a7bbb287445d56d896b21dfad679371f92d7c8cfdde_big_uint255, + 0x733d8c425ee853f86e19b732693e23fb0b3455e4716461232558a95c507edc7_big_uint255, + 0x10107a265a3e1c84a7bfba1098d21f8c454e7b924dbd1da5ac8b3aab636c6a0c_big_uint255, + 0x350d9495311fef9a4b0209edb4a3c4bddd5ffb56ce2f191ef970ab9c0ed0ea89_big_uint255, /*V_L: */ - 0x2f9124776b548d7c11e42c640a80bac1629a259098c027712ac5c8d03861f9a1_cppui_modular255, - 0x26e20a54731d9020cd3a49f4f93647a9fc6c4220c04c12252381b38822bde8ff_cppui_modular255, + 0x2f9124776b548d7c11e42c640a80bac1629a259098c027712ac5c8d03861f9a1_big_uint255, + 0x26e20a54731d9020cd3a49f4f93647a9fc6c4220c04c12252381b38822bde8ff_big_uint255, /*q_last_0: */ - 0x3e4be0f60a0892de53ce64e30dbeeb2ad97a4a9f48f8d0de90179dff9b655ee_cppui_modular255, - 0x55b0e97fa86bdb951a6f982ebb8e625911af5d675ae321772de8859ef16759_cppui_modular255, + 0x3e4be0f60a0892de53ce64e30dbeeb2ad97a4a9f48f8d0de90179dff9b655ee_big_uint255, + 0x55b0e97fa86bdb951a6f982ebb8e625911af5d675ae321772de8859ef16759_big_uint255, /*q_blind_0: */ - 0x15cb10dc31dd9dd99205932dc89d5f4cc9d516dd93c82c005e49eb276a565fc3_cppui_modular255, - 0x3e4be0f60a0892de53ce64e30dbeeb2ad97a4a9f48f8d0de90179dff9b655ee_cppui_modular255, + 0x15cb10dc31dd9dd99205932dc89d5f4cc9d516dd93c82c005e49eb276a565fc3_big_uint255, + 0x3e4be0f60a0892de53ce64e30dbeeb2ad97a4a9f48f8d0de90179dff9b655ee_big_uint255, /*L_0: */ - 0x3e480b88f7e13e682fbd0e71b75ae9b7e779f1e5513868152c6cacece130159_cppui_modular255, + 0x3e480b88f7e13e682fbd0e71b75ae9b7e779f1e5513868152c6cacece130159_big_uint255, /*gate selectors: */ - 0x265031146d81d8f888bd86840686b200aad9dd7480f5400d51e1cbe59bf34a51_cppui_modular255, - 0x226bb05bde03c51205c1b59ceb1103652c623e562be1b98bff1b0116cde048f8_cppui_modular255, + 0x265031146d81d8f888bd86840686b200aad9dd7480f5400d51e1cbe59bf34a51_big_uint255, + 0x226bb05bde03c51205c1b59ceb1103652c623e562be1b98bff1b0116cde048f8_big_uint255, /*table_ids: */ 1, 2, 2, /*lookup gate constraint lookup inputs: */ - 0x38cf0677a1def0c0aebaa6d9df9a338e213824e22eaae2279d8e824189bcc666_cppui_modular255, - 0x1bc6cc84db93e32cdcb39fcf0b737ce973ec99e2139941a1eaf10e1f4358f9bb_cppui_modular255, - 0x277581609fba694550ec7d87c8d3c92fdaf392f7303ff5e4d26ad9e187c2a4af_cppui_modular255, + 0x38cf0677a1def0c0aebaa6d9df9a338e213824e22eaae2279d8e824189bcc666_big_uint255, + 0x1bc6cc84db93e32cdcb39fcf0b737ce973ec99e2139941a1eaf10e1f4358f9bb_big_uint255, + 0x277581609fba694550ec7d87c8d3c92fdaf392f7303ff5e4d26ad9e187c2a4af_big_uint255, /*lookup tables selcetors: */ - 0x226bb05bde03c51205c1b59ceb1103652c623e562be1b98bff1b0116cde048f8_cppui_modular255, - 0x226bb05bde03c51205c1b59ceb1103652c623e562be1b98bff1b0116cde048f8_cppui_modular255, + 0x226bb05bde03c51205c1b59ceb1103652c623e562be1b98bff1b0116cde048f8_big_uint255, + 0x226bb05bde03c51205c1b59ceb1103652c623e562be1b98bff1b0116cde048f8_big_uint255, /* lookup tables lookup option: */ - 0x13b142d74d5d6ce3355ef3c65e9809d91eb69e0ad2deea4197761e3e3361dc16_cppui_modular255, - 0x13b142d74d5d6ce3355ef3c65e9809d91eb69e0ad2deea4197761e3e3361dc16_cppui_modular255, - 0x3fcbb4a2a370463d52277fd6f5ed1ad2b814a3c19bad97c660a2c1d638c348ec_cppui_modular255, - 0x1d0c444e682d3cd84514835b04cc28bd46f35621d6c6dbea5e34e783a6836b9a_cppui_modular255, + 0x13b142d74d5d6ce3355ef3c65e9809d91eb69e0ad2deea4197761e3e3361dc16_big_uint255, + 0x13b142d74d5d6ce3355ef3c65e9809d91eb69e0ad2deea4197761e3e3361dc16_big_uint255, + 0x3fcbb4a2a370463d52277fd6f5ed1ad2b814a3c19bad97c660a2c1d638c348ec_big_uint255, + 0x1d0c444e682d3cd84514835b04cc28bd46f35621d6c6dbea5e34e783a6836b9a_big_uint255, /*lookup tables shifted selcetors: */ - 0x25fa802aedd96d1cf3a316ebd7cb239e51c82e17199a5cebdab3e35ffd01e2f8_cppui_modular255, - 0x25fa802aedd96d1cf3a316ebd7cb239e51c82e17199a5cebdab3e35ffd01e2f8_cppui_modular255, + 0x25fa802aedd96d1cf3a316ebd7cb239e51c82e17199a5cebdab3e35ffd01e2f8_big_uint255, + 0x25fa802aedd96d1cf3a316ebd7cb239e51c82e17199a5cebdab3e35ffd01e2f8_big_uint255, /* lookup tables shifted lookup option: */ - 0x3b8e1e41ccc266c12d5f3e08397385c4d88c4f0fd56b7ae5f9dd594b44ce5451_cppui_modular255, - 0x3b8e1e41ccc266c12d5f3e08397385c4d88c4f0fd56b7ae5f9dd594b44ce5451_cppui_modular255, - 0x39729f1872018851ef8eb0a3706b37dc0aa16a8f3988602e73d9376435d7c326_cppui_modular255, - 0x7be020326311d5b6ba5130e1d85ab6ae573fa30f2218b4d10325204dc16a399_cppui_modular255, + 0x3b8e1e41ccc266c12d5f3e08397385c4d88c4f0fd56b7ae5f9dd594b44ce5451_big_uint255, + 0x3b8e1e41ccc266c12d5f3e08397385c4d88c4f0fd56b7ae5f9dd594b44ce5451_big_uint255, + 0x39729f1872018851ef8eb0a3706b37dc0aa16a8f3988602e73d9376435d7c326_big_uint255, + 0x7be020326311d5b6ba5130e1d85ab6ae573fa30f2218b4d10325204dc16a399_big_uint255, /* sorted :*/ - 0x144cf6b94befcde04ca399aa28f7c19b9c7abe4516b149d51c979578c26132aa_cppui_modular255, - 0x4f4a9468effe3b8b593752aa6ca4076d9548e7ad0db0dd4db34775c4806d44f_cppui_modular255, - 0x3f3c910aa039f6a9c696978cffd810099023bac4778c6a25df3e7cc4882e249f_cppui_modular255, - 0x362a6fe7cda76313effd4f422c2aa30517af2e8cf75cbd6cacd18592f8504465_cppui_modular255, - 0x2a6d49e1c07f61f3356cde688fb9807c7efa8120c1357b768292038c29c33ca1_cppui_modular255, - 0x2fc44c30d66a005631bab5e36186f6f2df3d82695bb41025d12706204a8e98fa_cppui_modular255, - 0x34aa8f0b44149c23df98d0a7950f11945bcaf1588a589d8442fcf6a4551ff475_cppui_modular255, - 0x2be0a5cb81a428769c7a00a5c286d190daa41649ce8cc80dd48da8ddb6541ff4_cppui_modular255, - 0x37822189c5f080b02ce93fd126be0cd976149faf2c698a05f8e67716c95fff2c_cppui_modular255, - 0x3c107fd152981cf471acbcec2bc52731776ee7572a0358668751955be7ebe5e3_cppui_modular255, - 0x20a347ef86111d08804823c1e81f6c7bffa4c768533e19f86bbd4dacb9539fb5_cppui_modular255, - 0x22e3fb00764626ac8e7f5765869236b03c60e073c00bfd01e63a662ab7a66199_cppui_modular255, - 0x3f4bda0c68abd98d7b543381553ac4523dc3510eb347a1072a08246a7a454491_cppui_modular255, - 0x44ac8e5824fe8aa17842a4a4fe23aadcbbc09f07b02c60df78e22fcb4bcec46_cppui_modular255, - 0x384d6cead91ac3c0ae1a8acc9f4d753121afe02066774dd10a381ce3f30649f9_cppui_modular255, - 0x181e07ef1cacc19be824f2d02109b1863ab1740bdc82e0e184b3246af28f8773_cppui_modular255, - 0x17a9cdd5c4c1fe3143318316c5a9b18d879813ebda0c56f2b3ab5faaf8e530af_cppui_modular255, - 0x1df2aafa1674d30190d7e9fc28bb72263c0e73ff16f4558736d45836e45de71a_cppui_modular255, - 0x1c397b8d8e0b71e74a95b05b6769850aa0cff9c3d29bf0e48c7df205c571f7ab_cppui_modular255, - 0x3fc816df5e71c581a52cdbbd4cee972b9b56cb08b5d838dfe317b93e0243e11a_cppui_modular255}; + 0x144cf6b94befcde04ca399aa28f7c19b9c7abe4516b149d51c979578c26132aa_big_uint255, + 0x4f4a9468effe3b8b593752aa6ca4076d9548e7ad0db0dd4db34775c4806d44f_big_uint255, + 0x3f3c910aa039f6a9c696978cffd810099023bac4778c6a25df3e7cc4882e249f_big_uint255, + 0x362a6fe7cda76313effd4f422c2aa30517af2e8cf75cbd6cacd18592f8504465_big_uint255, + 0x2a6d49e1c07f61f3356cde688fb9807c7efa8120c1357b768292038c29c33ca1_big_uint255, + 0x2fc44c30d66a005631bab5e36186f6f2df3d82695bb41025d12706204a8e98fa_big_uint255, + 0x34aa8f0b44149c23df98d0a7950f11945bcaf1588a589d8442fcf6a4551ff475_big_uint255, + 0x2be0a5cb81a428769c7a00a5c286d190daa41649ce8cc80dd48da8ddb6541ff4_big_uint255, + 0x37822189c5f080b02ce93fd126be0cd976149faf2c698a05f8e67716c95fff2c_big_uint255, + 0x3c107fd152981cf471acbcec2bc52731776ee7572a0358668751955be7ebe5e3_big_uint255, + 0x20a347ef86111d08804823c1e81f6c7bffa4c768533e19f86bbd4dacb9539fb5_big_uint255, + 0x22e3fb00764626ac8e7f5765869236b03c60e073c00bfd01e63a662ab7a66199_big_uint255, + 0x3f4bda0c68abd98d7b543381553ac4523dc3510eb347a1072a08246a7a454491_big_uint255, + 0x44ac8e5824fe8aa17842a4a4fe23aadcbbc09f07b02c60df78e22fcb4bcec46_big_uint255, + 0x384d6cead91ac3c0ae1a8acc9f4d753121afe02066774dd10a381ce3f30649f9_big_uint255, + 0x181e07ef1cacc19be824f2d02109b1863ab1740bdc82e0e184b3246af28f8773_big_uint255, + 0x17a9cdd5c4c1fe3143318316c5a9b18d879813ebda0c56f2b3ab5faaf8e530af_big_uint255, + 0x1df2aafa1674d30190d7e9fc28bb72263c0e73ff16f4558736d45836e45de71a_big_uint255, + 0x1c397b8d8e0b71e74a95b05b6769850aa0cff9c3d29bf0e48c7df205c571f7ab_big_uint255, + 0x3fc816df5e71c581a52cdbbd4cee972b9b56cb08b5d838dfe317b93e0243e11a_big_uint255}; std::array expected_res = { - 0x35e69c5ddd12ba21112c825dbece7df98c7e250b0c4e4517a8aa79f0925499b0_cppui_modular255, - 0x246009173489a2c898257f798838fbbf15099b5e311b765e0114cbb017472baa_cppui_modular255, - 0x1f4800182b9b832ceaca69367a60809745976e7793157079f305358ecc0d1034_cppui_modular255, - 0x3784c3bbe15ea3db50780f6d73698cd40e98f82aafdc6dfd62f7d3f29aa4f1ff_cppui_modular255}; // F + 0x35e69c5ddd12ba21112c825dbece7df98c7e250b0c4e4517a8aa79f0925499b0_big_uint255, + 0x246009173489a2c898257f798838fbbf15099b5e311b765e0114cbb017472baa_big_uint255, + 0x1f4800182b9b832ceaca69367a60809745976e7793157079f305358ecc0d1034_big_uint255, + 0x3784c3bbe15ea3db50780f6d73698cd40e98f82aafdc6dfd62f7d3f29aa4f1ff_big_uint255}; // F test(public_input, expected_res, lookup_gates_size, gate_constraints_sizes, gate_constraint_lookup_input_sizes, lookup_tables_size, @@ -435,54 +435,54 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test2) { std::vector public_input = { /*theta: */ - 0x1d7f68089e58314bd0fd09de62903aa5ec3268b574f97bf7cad8e1af15952f05_cppui_modular255, + 0x1d7f68089e58314bd0fd09de62903aa5ec3268b574f97bf7cad8e1af15952f05_big_uint255, /*beta: */ - 0x815e5816cf879a118c629f6f724e75486494f53371ad59a031e8acf03199b88_cppui_modular255, + 0x815e5816cf879a118c629f6f724e75486494f53371ad59a031e8acf03199b88_big_uint255, /*gamma: */ - 0x257158c4ad84265ed8011284ea62f8d24834881034b1d1bf2bdf6dfd0d87aab6_cppui_modular255, + 0x257158c4ad84265ed8011284ea62f8d24834881034b1d1bf2bdf6dfd0d87aab6_big_uint255, /*alpha: */ - 0xc5f37c144b3d9a3727c15cb2860927aa1852b09741fa40473fc9eb1787dc89e_cppui_modular255, + 0xc5f37c144b3d9a3727c15cb2860927aa1852b09741fa40473fc9eb1787dc89e_big_uint255, /*V_L: */ - 0x3d71d8822355d24ec28a4689490af52a0edec77b1a1e1a336b00136ca5b2aa55_cppui_modular255, - 0x39bfbccba576b46aadd07a1269e2167a8af30ee2f5b63d18da633976f8d39b90_cppui_modular255, + 0x3d71d8822355d24ec28a4689490af52a0edec77b1a1e1a336b00136ca5b2aa55_big_uint255, + 0x39bfbccba576b46aadd07a1269e2167a8af30ee2f5b63d18da633976f8d39b90_big_uint255, /*q_last_0: */ - 0x289716269efe8d211ed1c4b73cf3a1a8a92c4f35b60c88610e2a2274a9462e4d_cppui_modular255, - 0x3938ee6f665648111b1fb38692685fc58d13dd96eb282fa132df606fc13c24ff_cppui_modular255, + 0x289716269efe8d211ed1c4b73cf3a1a8a92c4f35b60c88610e2a2274a9462e4d_big_uint255, + 0x3938ee6f665648111b1fb38692685fc58d13dd96eb282fa132df606fc13c24ff_big_uint255, /*q_blind_0: */ - 0x2ce4873d86986fd9fd9f80e3d17f77086d77fa3600ffcc14a5b151735026659_cppui_modular255, - 0x1d9d793626a197fb1ca1b02a9283241f3de2f6291d8e3009ef5c5a2f90ccb87b_cppui_modular255, + 0x2ce4873d86986fd9fd9f80e3d17f77086d77fa3600ffcc14a5b151735026659_big_uint255, + 0x1d9d793626a197fb1ca1b02a9283241f3de2f6291d8e3009ef5c5a2f90ccb87b_big_uint255, /*L_0: */ - 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_cppui_modular255, + 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_big_uint255, /*gate selectors: */ - 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_cppui_modular255, + 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_big_uint255, /*table_ids: */ 1, /*lookup gate constraint lookup inputs: */ - 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_cppui_modular255, 0x0_cppui_modular255, 0x0_cppui_modular255, + 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_big_uint255, 0x0_big_uint255, 0x0_big_uint255, /*lookup tables selcetors: */ - 0x1835a3d6c64d2cbc4854ed08838c5cb178c38be251bc63a735bc4624ef775382_cppui_modular255, + 0x1835a3d6c64d2cbc4854ed08838c5cb178c38be251bc63a735bc4624ef775382_big_uint255, /* lookup tables lookup option: */ - 0x3d3c325d1c415801ca4b9f57fe82a5e5ee1dd4f0cd544d2bac86cf6507d1411b_cppui_modular255, - 0x1af97179aa0bd4ba7e094db08509b6cbacec4fed8db50f972262a7ace7a61268_cppui_modular255, - 0x40343edb5eb0ff0af2bebd16c1a46206109f759e22c1d8a79a76ef546951c1c_cppui_modular255, + 0x3d3c325d1c415801ca4b9f57fe82a5e5ee1dd4f0cd544d2bac86cf6507d1411b_big_uint255, + 0x1af97179aa0bd4ba7e094db08509b6cbacec4fed8db50f972262a7ace7a61268_big_uint255, + 0x40343edb5eb0ff0af2bebd16c1a46206109f759e22c1d8a79a76ef546951c1c_big_uint255, /*lookup tables shifted selcetors: */ - 0x1b61b2f62241a3d026348fb3f38c07218775858811553d73a6f5c9de607b465e_cppui_modular255, + 0x1b61b2f62241a3d026348fb3f38c07218775858811553d73a6f5c9de607b465e_big_uint255, /* lookup tables shifted lookup option: */ - 0x175e6f086c5693df7708a3e28771c101266b8e2e2f291fe92d4e5ae919e62a42_cppui_modular255, - 0x40343edb5eb0ff0af2bebd16c1a46206109f759e22c1d8a79a76ef546951c1c_cppui_modular255, - 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_cppui_modular255, + 0x175e6f086c5693df7708a3e28771c101266b8e2e2f291fe92d4e5ae919e62a42_big_uint255, + 0x40343edb5eb0ff0af2bebd16c1a46206109f759e22c1d8a79a76ef546951c1c_big_uint255, + 0x3c64fd8ec24abf24f8ff563202680a359bc5d73caac1096da418e429324017db_big_uint255, /* sorted :*/ - 0xaae87d4c1a9c5f67fd8d128e52c19df71cae8ae988616ccdf64469b1f622167_cppui_modular255, - 0x88ac88639b105ff6b4c74b858b9a6956b54ec13dc00aa5db193d934078a6744_cppui_modular255, - 0x22cf6baa70e28b08de79a41bffe3ba33dff26ef9269dee9488688f53652a3f6c_cppui_modular255, - 0x3ad0b47143a7797996a7583b7b976d1d65dd0dfb82c24e3095d5ad597451ebd8_cppui_modular255, - 0x2882c884e7588cb74da62fb359b02d5143f2eff9d3e475112caee5f237f5265c_cppui_modular255}; + 0xaae87d4c1a9c5f67fd8d128e52c19df71cae8ae988616ccdf64469b1f622167_big_uint255, + 0x88ac88639b105ff6b4c74b858b9a6956b54ec13dc00aa5db193d934078a6744_big_uint255, + 0x22cf6baa70e28b08de79a41bffe3ba33dff26ef9269dee9488688f53652a3f6c_big_uint255, + 0x3ad0b47143a7797996a7583b7b976d1d65dd0dfb82c24e3095d5ad597451ebd8_big_uint255, + 0x2882c884e7588cb74da62fb359b02d5143f2eff9d3e475112caee5f237f5265c_big_uint255}; std::array expected_res = { - 0x1d38affafcaea87529bfbd1eecfb8bdfec63c8477ef34d81ed7524a4b3dfd0ee_cppui_modular255, - 0x1517c78abe81de6b6ab6cea789d87b139ae198de67059be4da160d4eef47a120_cppui_modular255, - 0x1c6d84769c65a19b6291825efc7e31c970629504b4c88816a90e7d339ebe2252_cppui_modular255, - 0x3c74bf9104f97f4019d75b317c1df2629f1f421002b7abc02344d53707b21de2_cppui_modular255}; // F + 0x1d38affafcaea87529bfbd1eecfb8bdfec63c8477ef34d81ed7524a4b3dfd0ee_big_uint255, + 0x1517c78abe81de6b6ab6cea789d87b139ae198de67059be4da160d4eef47a120_big_uint255, + 0x1c6d84769c65a19b6291825efc7e31c970629504b4c88816a90e7d339ebe2252_big_uint255, + 0x3c74bf9104f97f4019d75b317c1df2629f1f421002b7abc02344d53707b21de2_big_uint255}; // F test(public_input, expected_res, lookup_gates_size, gate_constraints_sizes, gate_constraint_lookup_input_sizes, lookup_tables_size, @@ -511,54 +511,54 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test3) { std::vector public_input = { /*theta: */ - 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_cppui_modular255, + 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_big_uint255, /*beta: */ - 0x234beb2f67e10c0b52a8162be56be6d0b441bfb15b18ea41167ff3eb6f07160e_cppui_modular255, + 0x234beb2f67e10c0b52a8162be56be6d0b441bfb15b18ea41167ff3eb6f07160e_big_uint255, /*gamma: */ - 0x1855e317848ad8aa18904176c2af32d853dfc7698d97dc19b608992e6bdaa052_cppui_modular255, + 0x1855e317848ad8aa18904176c2af32d853dfc7698d97dc19b608992e6bdaa052_big_uint255, /*alpha: */ - 0x17f36241082dc5dc4e12968736300a389c2cbab471ace605aa7eb8d1cc91016f_cppui_modular255, + 0x17f36241082dc5dc4e12968736300a389c2cbab471ace605aa7eb8d1cc91016f_big_uint255, /*V_L: */ - 0x2aad0ea7357d6d6bc3e696cb9f53a669b36ef1888fd3daefda299547d5222873_cppui_modular255, - 0x20d25dca706ce16e69797886802260ca4dbfbde1dbc488d97c44af1b752dc2cb_cppui_modular255, + 0x2aad0ea7357d6d6bc3e696cb9f53a669b36ef1888fd3daefda299547d5222873_big_uint255, + 0x20d25dca706ce16e69797886802260ca4dbfbde1dbc488d97c44af1b752dc2cb_big_uint255, /*q_last_0: */ - 0x30895ee54f09f37d02e99a406c6c8af394e4dd638575bb48bb97498bea211940_cppui_modular255, - 0x2afc6ee2bd64a76ce5d5a2345bed6c99dd4452d7d1712321e497c67b3906a86c_cppui_modular255, + 0x30895ee54f09f37d02e99a406c6c8af394e4dd638575bb48bb97498bea211940_big_uint255, + 0x2afc6ee2bd64a76ce5d5a2345bed6c99dd4452d7d1712321e497c67b3906a86c_big_uint255, /*q_blind_0: */ - 0x31849db7e2ccf46d25b15a478e4da18972e88efdeccd4525110e636f945a2b3c_cppui_modular255, - 0x16c598e3d182c4be8e8c706fd77a79e03918b7cd335d74768864041a54a195eb_cppui_modular255, + 0x31849db7e2ccf46d25b15a478e4da18972e88efdeccd4525110e636f945a2b3c_big_uint255, + 0x16c598e3d182c4be8e8c706fd77a79e03918b7cd335d74768864041a54a195eb_big_uint255, /*L_0: */ - 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_cppui_modular255, + 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_big_uint255, /*gate selectors: */ - 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_cppui_modular255, + 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_big_uint255, /*table_ids: */ 1, /*lookup gate constraint lookup inputs: */ - 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_cppui_modular255, 0x0_cppui_modular255, 0x0_cppui_modular255, + 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_big_uint255, 0x0_big_uint255, 0x0_big_uint255, /*lookup tables selcetors: */ - 0x3aafabf9cb4dee6fcf3597fa74684696bc5c1e6e64ebc113875c558ab7822c55_cppui_modular255, + 0x3aafabf9cb4dee6fcf3597fa74684696bc5c1e6e64ebc113875c558ab7822c55_big_uint255, /* lookup tables lookup option: */ - 0x334125c610355fc7c5f126ca247e9a5233590241e3050c6a97c4f3c942db3c7a_cppui_modular255, - 0x76e8633bb188ea8094471304fe9ac4489031c2c81e6b4a8ef9761c174a6efdb_cppui_modular255, - 0x844b6e352d0b85ae01b8495c8912db85614af6a1193e948b32d2d4e09d4940e_cppui_modular255, + 0x334125c610355fc7c5f126ca247e9a5233590241e3050c6a97c4f3c942db3c7a_big_uint255, + 0x76e8633bb188ea8094471304fe9ac4489031c2c81e6b4a8ef9761c174a6efdb_big_uint255, + 0x844b6e352d0b85ae01b8495c8912db85614af6a1193e948b32d2d4e09d4940e_big_uint255, /*lookup tables shifted selcetors: */ - 0x32f5948010c470a8f18f6943a95866e981c20bbad832c7c31a4a1f50487e131c_cppui_modular255, + 0x32f5948010c470a8f18f6943a95866e981c20bbad832c7c31a4a1f50487e131c_big_uint255, /* lookup tables shifted lookup option: */ - 0x2ab0dd9cbdf3b84e1173e4ade0c739312bad5c50c69ede7a671cf2023ea97f0e_cppui_modular255, - 0x844b6e352d0b85ae01b8495c8912db85614af6a1193e948b32d2d4e09d4940e_cppui_modular255, - 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_cppui_modular255, + 0x2ab0dd9cbdf3b84e1173e4ade0c739312bad5c50c69ede7a671cf2023ea97f0e_big_uint255, + 0x844b6e352d0b85ae01b8495c8912db85614af6a1193e948b32d2d4e09d4940e_big_uint255, + 0x2342576902db29a6082f737d90dd8ceca2aa402444b829d177859040ca028f33_big_uint255, /* sorted :*/ - 0x309c3f5b27a9decbc857a77c4de0dcf924ab52beef5f1fe1478b4d5f0cdea83d_cppui_modular255, - 0x2f84548fee17235fa8b337133a77b4325accc997229273a513d7eeb2c26d8c72_cppui_modular255, - 0x3c3a027f046e121eb28f3f3a8c595f722b5711aca301ac25563a0bc13f600a8c_cppui_modular255, - 0x3aa7d1881a22a4408949c2b9e4ad31bba1329e386882f6454c8070c3673f2783_cppui_modular255, - 0xf47f8092f969b60daabd4cb1ef68b595a76c42fdc9e217912e4ced2f7dcad3a_cppui_modular255}; + 0x309c3f5b27a9decbc857a77c4de0dcf924ab52beef5f1fe1478b4d5f0cdea83d_big_uint255, + 0x2f84548fee17235fa8b337133a77b4325accc997229273a513d7eeb2c26d8c72_big_uint255, + 0x3c3a027f046e121eb28f3f3a8c595f722b5711aca301ac25563a0bc13f600a8c_big_uint255, + 0x3aa7d1881a22a4408949c2b9e4ad31bba1329e386882f6454c8070c3673f2783_big_uint255, + 0xf47f8092f969b60daabd4cb1ef68b595a76c42fdc9e217912e4ced2f7dcad3a_big_uint255}; std::array expected_res = { - 0xed0fd5a4c7353bbe05c6b605c83fbec891cdf62c9e137b630aea8fc23eba213_cppui_modular255, - 0x2730aed0d40e486fefa62d17dceffdd430ddd4e1129876f1be75b0440887f59a_cppui_modular255, - 0x509b68f48912d1abc42fead48c7aae0adc49dfc05aafcabbcd1b4a84a81822b_cppui_modular255, - 0x126cb3995ab0d911bb988e50df2ece7ba3d22d3fd272421c29579d7c091bbea4_cppui_modular255}; // F + 0xed0fd5a4c7353bbe05c6b605c83fbec891cdf62c9e137b630aea8fc23eba213_big_uint255, + 0x2730aed0d40e486fefa62d17dceffdd430ddd4e1129876f1be75b0440887f59a_big_uint255, + 0x509b68f48912d1abc42fead48c7aae0adc49dfc05aafcabbcd1b4a84a81822b_big_uint255, + 0x126cb3995ab0d911bb988e50df2ece7ba3d22d3fd272421c29579d7c091bbea4_big_uint255}; // F test(public_input, expected_res, lookup_gates_size, gate_constraints_sizes, gate_constraint_lookup_input_sizes, lookup_tables_size, @@ -587,56 +587,56 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test4) { std::vector public_input = { /*theta: */ - 0x3570e3894c1215e257f32b60a2506ab1bb838dd71e5bdd070aeea75eef5c04e1_cppui_modular255, + 0x3570e3894c1215e257f32b60a2506ab1bb838dd71e5bdd070aeea75eef5c04e1_big_uint255, /*beta: */ - 0x4110a75d7bb3b6119d90555bef2ef98a5cc6d02b863d166a8478e7db7d097b7_cppui_modular255, + 0x4110a75d7bb3b6119d90555bef2ef98a5cc6d02b863d166a8478e7db7d097b7_big_uint255, /*gamma: */ - 0xd8c6a785dd97b0298dec35c05b9a644434fb8ffb8fd571b0efa28269166320f_cppui_modular255, + 0xd8c6a785dd97b0298dec35c05b9a644434fb8ffb8fd571b0efa28269166320f_big_uint255, /*alpha: */ - 0x22c705f52e10b6f5c581348c05068b813972db6286d46fe377bc0e5cd43b6986_cppui_modular255, + 0x22c705f52e10b6f5c581348c05068b813972db6286d46fe377bc0e5cd43b6986_big_uint255, /*V_L: */ - 0xfed12cbd566c5b8f2643428652eb43c7bc927475b69c7a4e24deacb830e18b2_cppui_modular255, - 0x19e5f35744d2e897dc93a79eb0ad4840205abcb9f75a7bbc25c82c09d7d12b86_cppui_modular255, + 0xfed12cbd566c5b8f2643428652eb43c7bc927475b69c7a4e24deacb830e18b2_big_uint255, + 0x19e5f35744d2e897dc93a79eb0ad4840205abcb9f75a7bbc25c82c09d7d12b86_big_uint255, /*q_last_0: */ - 0x25f7509bea7b2d56c9ff4f491e4414772c978dca237a1fae98d9f51bf31ae22d_cppui_modular255, - 0x349f44e2ae4743a2763ccf01c567c9b869a176070df81d96a490c496cad8c2c4_cppui_modular255, + 0x25f7509bea7b2d56c9ff4f491e4414772c978dca237a1fae98d9f51bf31ae22d_big_uint255, + 0x349f44e2ae4743a2763ccf01c567c9b869a176070df81d96a490c496cad8c2c4_big_uint255, /*q_blind_0: */ - 0x23b533ff1c373758f4acbd22122f1c0262a368e2b7fe16da8407f08650e476b3_cppui_modular255, - 0x36b42752f807b80ecc9b48c46f7af88581f8a1d01062d7b6599c88e22cfde5d1_cppui_modular255, + 0x23b533ff1c373758f4acbd22122f1c0262a368e2b7fe16da8407f08650e476b3_big_uint255, + 0x36b42752f807b80ecc9b48c46f7af88581f8a1d01062d7b6599c88e22cfde5d1_big_uint255, /*L_0: */ - 0x3b34f6cecb7a7e839ae09301afc44b95407a20905b8a14be97abd9f4d8d9173e_cppui_modular255, + 0x3b34f6cecb7a7e839ae09301afc44b95407a20905b8a14be97abd9f4d8d9173e_big_uint255, /*gate selectors: */ - 0x2b041988e0bcf922cb877fb2c7b9c78f089b71c49697abfb91c120c7c2eba5a3_cppui_modular255, + 0x2b041988e0bcf922cb877fb2c7b9c78f089b71c49697abfb91c120c7c2eba5a3_big_uint255, /*table_ids: */ 1, /*lookup gate constraint lookup inputs: */ - 0x216a008a9b4cb540a650f5b8ce4ffa32ed13b0b36d772aa4b44c34e7089b30ec_cppui_modular255, - 0xf34378a7a7d68ec55dc448195fe4d8230e3e586f8d33e253fa06b55c9bb2c81_cppui_modular255, - 0x3f89dc06cbc9ed36f7c9eb31a5ba50c08c81b20e3cc6df6392088d3e70560457_cppui_modular255, + 0x216a008a9b4cb540a650f5b8ce4ffa32ed13b0b36d772aa4b44c34e7089b30ec_big_uint255, + 0xf34378a7a7d68ec55dc448195fe4d8230e3e586f8d33e253fa06b55c9bb2c81_big_uint255, + 0x3f89dc06cbc9ed36f7c9eb31a5ba50c08c81b20e3cc6df6392088d3e70560457_big_uint255, /*lookup tables selcetors: */ - 0x3b1e84962dd31ccca67360931fc883f1971eb3b6e4e4a00b16f9d32fe3278fe6_cppui_modular255, + 0x3b1e84962dd31ccca67360931fc883f1971eb3b6e4e4a00b16f9d32fe3278fe6_big_uint255, /* lookup tables lookup option: */ - 0x2270b42c8a18543699ab4604e78e1fa874b8bbd2921a33b51ec991ce9917dc3c_cppui_modular255, - 0x3feea6bec6d7e5cfec0942e3cd3ad1b016583f8dae822d4928482006c3edc444_cppui_modular255, - 0x349f44e2ae4743a2763ccf01c567c9b869a176070df81d96a490c496cad8c2c4_cppui_modular255, + 0x2270b42c8a18543699ab4604e78e1fa874b8bbd2921a33b51ec991ce9917dc3c_big_uint255, + 0x3feea6bec6d7e5cfec0942e3cd3ad1b016583f8dae822d4928482006c3edc444_big_uint255, + 0x349f44e2ae4743a2763ccf01c567c9b869a176070df81d96a490c496cad8c2c4_big_uint255, /*lookup tables shifted selcetors: */ - 0x1b436824b0657adcb1724930a2505ce4bb0c54429299e1770e7b7a0f127e45f_cppui_modular255, + 0x1b436824b0657adcb1724930a2505ce4bb0c54429299e1770e7b7a0f127e45f_big_uint255, /* lookup tables shifted lookup option: */ - 0x3920d125f461b2c1993aeae529f95de7da14a84e2df91eec971d5994c7541af9_cppui_modular255, - 0x3b2fddd766fb36fcba6a1daf528db241a30d0d253faf6bdd87dee4161f39cba3_cppui_modular255, - 0x2dd16f49dbd11094236e7703222655f02d5ddec78d6f0f3a1365fe24ce3f1979_cppui_modular255, + 0x3920d125f461b2c1993aeae529f95de7da14a84e2df91eec971d5994c7541af9_big_uint255, + 0x3b2fddd766fb36fcba6a1daf528db241a30d0d253faf6bdd87dee4161f39cba3_big_uint255, + 0x2dd16f49dbd11094236e7703222655f02d5ddec78d6f0f3a1365fe24ce3f1979_big_uint255, /* sorted :*/ - 0x29caaf2bb1ed8d76799585de1615640b5e860512b975eddc1ccc07f3c98b7020_cppui_modular255, - 0x3dec9024d47503f3c555ecc92ff68f5341be354cfb6f996d3891259b01f9b447_cppui_modular255, - 0x2f5a6a904d8e435c78790bc85d1451d353480bbca304a67878b4d130098d7faa_cppui_modular255, - 0x3a5fb8b401914e92a328bc1f72fb8671d39432059ed0b4b17e457899ae244e47_cppui_modular255, - 0x561e67687c658bf77f8a1bac00def678dcd280cd0e94cb52cb4870589541c9e_cppui_modular255}; + 0x29caaf2bb1ed8d76799585de1615640b5e860512b975eddc1ccc07f3c98b7020_big_uint255, + 0x3dec9024d47503f3c555ecc92ff68f5341be354cfb6f996d3891259b01f9b447_big_uint255, + 0x2f5a6a904d8e435c78790bc85d1451d353480bbca304a67878b4d130098d7faa_big_uint255, + 0x3a5fb8b401914e92a328bc1f72fb8671d39432059ed0b4b17e457899ae244e47_big_uint255, + 0x561e67687c658bf77f8a1bac00def678dcd280cd0e94cb52cb4870589541c9e_big_uint255}; std::array expected_res = { - 0x304cec1d36435a3e6b2b0d8a03d7ca470fe20f1e0664b0a87b330020abeb7790_cppui_modular255, - 0xc87379013fea37f144c3272f082dd7687a98f7531d6ecd8030e58ebe38bb21d_cppui_modular255, - 0x2db7784e371e44e5a2c8bd73f52edf1a0e24801444f312c67a41054f4367cfe4_cppui_modular255, - 0x1300ba94cabf85c2f178f39aa3322edf9db9fb27e284fd75f03fdc0f5ba3711a_cppui_modular255}; // F + 0x304cec1d36435a3e6b2b0d8a03d7ca470fe20f1e0664b0a87b330020abeb7790_big_uint255, + 0xc87379013fea37f144c3272f082dd7687a98f7531d6ecd8030e58ebe38bb21d_big_uint255, + 0x2db7784e371e44e5a2c8bd73f52edf1a0e24801444f312c67a41054f4367cfe4_big_uint255, + 0x1300ba94cabf85c2f178f39aa3322edf9db9fb27e284fd75f03fdc0f5ba3711a_big_uint255}; // F test(public_input, expected_res, lookup_gates_size, gate_constraints_sizes, gate_constraint_lookup_input_sizes, lookup_tables_size, @@ -665,56 +665,56 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_gate_argument_verifier_test5) { std::vector public_input = { /*theta: */ - 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_cppui_modular255, + 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_big_uint255, /*beta: */ - 0x3e13fbff8a3e86fd9f2008fad7038a4cd7f131714459e26db3dcd6d4ade21176_cppui_modular255, + 0x3e13fbff8a3e86fd9f2008fad7038a4cd7f131714459e26db3dcd6d4ade21176_big_uint255, /*gamma: */ - 0x3812204b2d8a8231ea5b286ba560cb5f81d79413f41da18e1e46864c4b4f8d91_cppui_modular255, + 0x3812204b2d8a8231ea5b286ba560cb5f81d79413f41da18e1e46864c4b4f8d91_big_uint255, /*alpha: */ - 0x248372a47839f741d202d4c85de0073259242acc0d885a2d6bde0962fa8a6a10_cppui_modular255, + 0x248372a47839f741d202d4c85de0073259242acc0d885a2d6bde0962fa8a6a10_big_uint255, /*V_L: */ - 0x4e37933c31782d66c0562d7d9cb454160e1978332bd5bd21e5ea353b5683e17_cppui_modular255, - 0xe6354934aa089780f37b58f2a1e06d3e86abe87b914e9fd570874bb50b7d824_cppui_modular255, + 0x4e37933c31782d66c0562d7d9cb454160e1978332bd5bd21e5ea353b5683e17_big_uint255, + 0xe6354934aa089780f37b58f2a1e06d3e86abe87b914e9fd570874bb50b7d824_big_uint255, /*q_last_0: */ - 0x27e2f5b264645452ea918502e707d6bfbd367964a9941a43c60b4c3a1cf07a6d_cppui_modular255, - 0x185ff7f1d1095cb5afd3453b60b94979e86bae25d109aebe649b37f686a5166e_cppui_modular255, + 0x27e2f5b264645452ea918502e707d6bfbd367964a9941a43c60b4c3a1cf07a6d_big_uint255, + 0x185ff7f1d1095cb5afd3453b60b94979e86bae25d109aebe649b37f686a5166e_big_uint255, /*q_blind_0: */ - 0x207dc1c6703c47f4d2677a9d22b5067a0286f863e7d111d36141ab7c2c47cf95_cppui_modular255, - 0x640e57a8467b4ac8c5f28df2de4c22e9bfe4ebe2a38d9463c88af718fe8eff9_cppui_modular255, + 0x207dc1c6703c47f4d2677a9d22b5067a0286f863e7d111d36141ab7c2c47cf95_big_uint255, + 0x640e57a8467b4ac8c5f28df2de4c22e9bfe4ebe2a38d9463c88af718fe8eff9_big_uint255, /*L_0: */ - 0x216c498e3d3ac1475457bdf32d60392f8c5ba174e750103cdecad98748c8f76f_cppui_modular255, + 0x216c498e3d3ac1475457bdf32d60392f8c5ba174e750103cdecad98748c8f76f_big_uint255, /*gate selectors: */ - 0x1be57e68b61a28070b21d2c655643b1ba0f3ac40f1b420dae429069f370284f4_cppui_modular255, + 0x1be57e68b61a28070b21d2c655643b1ba0f3ac40f1b420dae429069f370284f4_big_uint255, /*table_ids: */ 1, /*lookup gate constraint lookup inputs: */ - 0x286d7641832338fb96156dc92b252e9373ebf6467885af29d34af6eeaa3f4d0f_cppui_modular255, - 0x172b41321a52e33fbc0dc04bafc25ddd93b28d1dafa4769e9a2c3e17bddbf593_cppui_modular255, - 0x66e1ce661dd815a11bad6d33497ff7c90a77ab56c90fc777203287884102451_cppui_modular255, + 0x286d7641832338fb96156dc92b252e9373ebf6467885af29d34af6eeaa3f4d0f_big_uint255, + 0x172b41321a52e33fbc0dc04bafc25ddd93b28d1dafa4769e9a2c3e17bddbf593_big_uint255, + 0x66e1ce661dd815a11bad6d33497ff7c90a77ab56c90fc777203287884102451_big_uint255, /*lookup tables selcetors: */ - 0x1632fef8ee24a270eeaf426cc8e2e996f8741eba99e4b5e32c42909c6dfebe92_cppui_modular255, + 0x1632fef8ee24a270eeaf426cc8e2e996f8741eba99e4b5e32c42909c6dfebe92_big_uint255, /* lookup tables lookup option: */ - 0x3827f3dafcadebcc13addd89f6e1fb57f23d5371cc843d18dfea03bde8f33af5_cppui_modular255, - 0x3419c210464e9866e7b872d501983124cc47c214608a54038b7f9b7b066a477b_cppui_modular255, - 0x185ff7f1d1095cb5afd3453b60b94979e86bae25d109aebe649b37f686a5166e_cppui_modular255, + 0x3827f3dafcadebcc13addd89f6e1fb57f23d5371cc843d18dfea03bde8f33af5_big_uint255, + 0x3419c210464e9866e7b872d501983124cc47c214608a54038b7f9b7b066a477b_big_uint255, + 0x185ff7f1d1095cb5afd3453b60b94979e86bae25d109aebe649b37f686a5166e_big_uint255, /*lookup tables shifted selcetors: */ - 0x1f3f50955a5607029333bb249589d94c9c641209b02b1761a672322d30229f93_cppui_modular255, + 0x1f3f50955a5607029333bb249589d94c9c641209b02b1761a672322d30229f93_big_uint255, /* lookup tables shifted lookup option: */ - 0x3b81c607a0e9cac79bbfc5e837079988edadb93a8afb339fa2332f4be2135594_cppui_modular255, - 0x22193ce8a7d60a0a06f6cf97c74ab8724e72f5a242a75afb39f0260e67947718_cppui_modular255, - 0x1fc7fbe92ba48f1663da984e9628b1de09d1a54bfb7a8e5a7b4ecbc7624e2487_cppui_modular255, + 0x3b81c607a0e9cac79bbfc5e837079988edadb93a8afb339fa2332f4be2135594_big_uint255, + 0x22193ce8a7d60a0a06f6cf97c74ab8724e72f5a242a75afb39f0260e67947718_big_uint255, + 0x1fc7fbe92ba48f1663da984e9628b1de09d1a54bfb7a8e5a7b4ecbc7624e2487_big_uint255, /* sorted :*/ - 0x1ad4c042735d793d01537bad9f89a0f1dacacdc47495cd16a638e9ddf74b7f90_cppui_modular255, - 0xeef4260e7f2f40ebcf749089fb3bcc22a0d504a0c4b0b0bb581832fb8597e3d_cppui_modular255, - 0x263a119ae0c496c4a6a289302d2eb77f1acbb3cf11c71b7594b8102060192c5_cppui_modular255, - 0x3c6db664b0ff67f755a19001fdd120088a06e162e3ef0cb16dfe35095040147b_cppui_modular255, - 0x3d35e0079956b46536464e7edd6e72c1cfd8c58c07d9127ef7c79b03776e5ee3_cppui_modular255}; + 0x1ad4c042735d793d01537bad9f89a0f1dacacdc47495cd16a638e9ddf74b7f90_big_uint255, + 0xeef4260e7f2f40ebcf749089fb3bcc22a0d504a0c4b0b0bb581832fb8597e3d_big_uint255, + 0x263a119ae0c496c4a6a289302d2eb77f1acbb3cf11c71b7594b8102060192c5_big_uint255, + 0x3c6db664b0ff67f755a19001fdd120088a06e162e3ef0cb16dfe35095040147b_big_uint255, + 0x3d35e0079956b46536464e7edd6e72c1cfd8c58c07d9127ef7c79b03776e5ee3_big_uint255}; std::array expected_res = { - 0x2413f12ba244014bb6d17827fdf209681c9f3a27fbce3708282075180377399d_cppui_modular255, - 0x1b8893815550e740989d0307c537ee686917e97aeedc6373cf074bb385d4b1bc_cppui_modular255, - 0x3b6b19adb84d93d44f6d20a4d2e7318130609cf9d0dbcf032265e31b92dd20ec_cppui_modular255, - 0x39ee0a3ffd9389e182c7918896bc78ba74b7af4fc8e2ae5e585b4566b0ea183_cppui_modular255}; // F + 0x2413f12ba244014bb6d17827fdf209681c9f3a27fbce3708282075180377399d_big_uint255, + 0x1b8893815550e740989d0307c537ee686917e97aeedc6373cf074bb385d4b1bc_big_uint255, + 0x3b6b19adb84d93d44f6d20a4d2e7318130609cf9d0dbcf032265e31b92dd20ec_big_uint255, + 0x39ee0a3ffd9389e182c7918896bc78ba74b7af4fc8e2ae5e585b4566b0ea183_big_uint255}; // F test(public_input, expected_res, lookup_gates_size, gate_constraints_sizes, gate_constraint_lookup_input_sizes, lookup_tables_size, diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/permutation_argument_verifier.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/permutation_argument_verifier.cpp index d094704e51..dd1505b7c3 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/permutation_argument_verifier.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/permutation_argument_verifier.cpp @@ -110,30 +110,30 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_argument_verifier_test0) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - /*.f = */ 0xad2bcf3656123a451e5ae737a10600efd60eb61a019329f54336e570a35ab9_cppui_modular255, - 0x3a229abbe186e216f2c24d215d3a14ec65f213fda941f5d4ee6894ea0f20331e_cppui_modular255, - 0x314564d4bb2dc124ebe6977105d2a16a70e5bc0a100095e28a9931be6a37770a_cppui_modular255, - 0x20b742463ddb6422a9638a1e1e024b97f67786fded20e091254f2d6a0476f847_cppui_modular255, - /*.Se = */ 0xd76a2e28c1a0d640b40187154c48effa28452984730b0a7a0eb15e5ce281546_cppui_modular255, - 0x3512e6cbc8242f438407a36a7d6cafe0a4f03fd5aa67a2a8b6a3c9006c86a5d_cppui_modular255, - 0x1095e81fae8b4ec5194263114731f6f6338b13f2c54062d4b9132ed021ea13d1_cppui_modular255, - 0x12ed889e68b889d97e4bef5663f9d2cedf70cac1d0f4f50c0432b923a9926314_cppui_modular255, - /*.Ssigma = */ 0xd76a2e28c1a0d640b40187154c48effa28452984730b0a7a0eb15e5ce281546_cppui_modular255, - 0x740745f98a84b4a006f567611871547c31fc448c6a32fd0b31e2ae2cb614ef6_cppui_modular255, - 0x2a966cffe76f3bf716c6f0abfb15f48472f34b3284e716a4c52108f4e1a9365b_cppui_modular255, - 0x3c814ce925e32a65c269304816c7e0114dfe0cf6a234ca8140fd133f2c19cf2c_cppui_modular255, - /*.L0_y = */ 0x22e9429d6b3f5e7b775dab62879dbaf184cbd89c713ee99e165040d7052d550d_cppui_modular255, - /*.Vsigma_y = */ 0xb69213d83fd8da544645b1bcf69e827f5327ee15437632222676104ad1b08a3_cppui_modular255, - /*.Vsigma_zetay = */ 0x1d4e3ecd39d89a37045c909602e88968d376bc444b6c8976ff0d2d0d407a4ac5_cppui_modular255, - /*.q_last_y = */ 0x22e9429d6b3f5e7b775dab62879dbaf184cbd89c713ee99e165040d7052d550d_cppui_modular255, - /*.q_pad_y = */ 0xeae8e9652b38b988bfcd8e9ef1a418990021cd4fa6981461d0e1c50049b76f2_cppui_modular255, - /*.theta = {*/ 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_cppui_modular255, - 0x3301d234398523d96772d81b9b06b066888f67fcc3f1d0af919bbc7b856cf854_cppui_modular255}; + /*.f = */ 0xad2bcf3656123a451e5ae737a10600efd60eb61a019329f54336e570a35ab9_big_uint255, + 0x3a229abbe186e216f2c24d215d3a14ec65f213fda941f5d4ee6894ea0f20331e_big_uint255, + 0x314564d4bb2dc124ebe6977105d2a16a70e5bc0a100095e28a9931be6a37770a_big_uint255, + 0x20b742463ddb6422a9638a1e1e024b97f67786fded20e091254f2d6a0476f847_big_uint255, + /*.Se = */ 0xd76a2e28c1a0d640b40187154c48effa28452984730b0a7a0eb15e5ce281546_big_uint255, + 0x3512e6cbc8242f438407a36a7d6cafe0a4f03fd5aa67a2a8b6a3c9006c86a5d_big_uint255, + 0x1095e81fae8b4ec5194263114731f6f6338b13f2c54062d4b9132ed021ea13d1_big_uint255, + 0x12ed889e68b889d97e4bef5663f9d2cedf70cac1d0f4f50c0432b923a9926314_big_uint255, + /*.Ssigma = */ 0xd76a2e28c1a0d640b40187154c48effa28452984730b0a7a0eb15e5ce281546_big_uint255, + 0x740745f98a84b4a006f567611871547c31fc448c6a32fd0b31e2ae2cb614ef6_big_uint255, + 0x2a966cffe76f3bf716c6f0abfb15f48472f34b3284e716a4c52108f4e1a9365b_big_uint255, + 0x3c814ce925e32a65c269304816c7e0114dfe0cf6a234ca8140fd133f2c19cf2c_big_uint255, + /*.L0_y = */ 0x22e9429d6b3f5e7b775dab62879dbaf184cbd89c713ee99e165040d7052d550d_big_uint255, + /*.Vsigma_y = */ 0xb69213d83fd8da544645b1bcf69e827f5327ee15437632222676104ad1b08a3_big_uint255, + /*.Vsigma_zetay = */ 0x1d4e3ecd39d89a37045c909602e88968d376bc444b6c8976ff0d2d0d407a4ac5_big_uint255, + /*.q_last_y = */ 0x22e9429d6b3f5e7b775dab62879dbaf184cbd89c713ee99e165040d7052d550d_big_uint255, + /*.q_pad_y = */ 0xeae8e9652b38b988bfcd8e9ef1a418990021cd4fa6981461d0e1c50049b76f2_big_uint255, + /*.theta = {*/ 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_big_uint255, + 0x3301d234398523d96772d81b9b06b066888f67fcc3f1d0af919bbc7b856cf854_big_uint255}; std::array expected_res = { - 0x164cd4eb4883a25e30db9cf84de858ae429a9e8bc1cc6afa78610548c0455b69_cppui_modular255, - 0x644e8375bddf7d18597aab619542335c0767f3398461c70b3ca1ad73c9a89c1_cppui_modular255, - 0x34bbaf6e1e85fef1a66b63e96f343e34c02cbcfc8531d7f18dea0e1c9425ca24_cppui_modular255, + 0x164cd4eb4883a25e30db9cf84de858ae429a9e8bc1cc6afa78610548c0455b69_big_uint255, + 0x644e8375bddf7d18597aab619542335c0767f3398461c70b3ca1ad73c9a89c1_big_uint255, + 0x34bbaf6e1e85fef1a66b63e96f343e34c02cbcfc8531d7f18dea0e1c9425ca24_big_uint255, }; test(public_input, expected_res); @@ -144,27 +144,27 @@ BOOST_AUTO_TEST_CASE(blueprint_plonk_permutation_argument_verifier_test1) { using BlueprintFieldType = typename crypto3::algebra::curves::pallas::base_field_type; std::vector public_input = { - /*.f = */ 0x15d6ac6a26ba0bf2d81357fc2009ca5c8df2ee41a3442fdb40f9ef7d31d2968f_cppui_modular255, - 0x0_cppui_modular255, - 0x15d6ac6a26ba0bf2d81357fc2009ca5c8df2ee41a3442fdb40f9ef7d31d2968f_cppui_modular255, - /*.Se = */ 0x3b96bf475105236e888b56379c4a37e56e694e4778d96480b2bff231b3448fd8_cppui_modular255, - 0x29f1bc649519b128aab8af160d73177a9ef42375370b1215190af7448056cf34_cppui_modular255, - 0x11b8adf6e98075cb559b6b6e433f7564b3f0e655f7506f16b1af418f81b20c01_cppui_modular255, - /*.Ssigma = */ 0x3b96bf475105236e888b56379c4a37e56e694e4778d96480b2bff231b3448fd8_cppui_modular255, - 0x29f1bc649519b128aab8af160d73177a9ef42375370b1215190af7448056cf34_cppui_modular255, - 0x11b8adf6e98075cb559b6b6e433f7564b3f0e655f7506f16b1af418f81b20c01_cppui_modular255, - /*.L0_y = */ 0x2a37d8915b58f641a50e3d4e43869c2987f7988f0ff7dac56a285ee684e53af3_cppui_modular255, - /*.Vsigma_y = */ 0x1_cppui_modular255, - /*.Vsigma_zetay = */ 0x1_cppui_modular255, - /*.q_last_y = */ 0x2a37d8915b58f641a50e3d4e43869c2987f7988f0ff7dac56a285ee684e53af3_cppui_modular255, - /*.q_pad_y = */ 0x362c09c9697f3d477eee786396c2e690cc2f73d44a5650e351b2b844dba3fb73_cppui_modular255, - /*.theta = {*/ 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_cppui_modular255, - 0x3301d234398523d96772d81b9b06b066888f67fcc3f1d0af919bbc7b856cf854_cppui_modular255}; + /*.f = */ 0x15d6ac6a26ba0bf2d81357fc2009ca5c8df2ee41a3442fdb40f9ef7d31d2968f_big_uint255, + 0x0_big_uint255, + 0x15d6ac6a26ba0bf2d81357fc2009ca5c8df2ee41a3442fdb40f9ef7d31d2968f_big_uint255, + /*.Se = */ 0x3b96bf475105236e888b56379c4a37e56e694e4778d96480b2bff231b3448fd8_big_uint255, + 0x29f1bc649519b128aab8af160d73177a9ef42375370b1215190af7448056cf34_big_uint255, + 0x11b8adf6e98075cb559b6b6e433f7564b3f0e655f7506f16b1af418f81b20c01_big_uint255, + /*.Ssigma = */ 0x3b96bf475105236e888b56379c4a37e56e694e4778d96480b2bff231b3448fd8_big_uint255, + 0x29f1bc649519b128aab8af160d73177a9ef42375370b1215190af7448056cf34_big_uint255, + 0x11b8adf6e98075cb559b6b6e433f7564b3f0e655f7506f16b1af418f81b20c01_big_uint255, + /*.L0_y = */ 0x2a37d8915b58f641a50e3d4e43869c2987f7988f0ff7dac56a285ee684e53af3_big_uint255, + /*.Vsigma_y = */ 0x1_big_uint255, + /*.Vsigma_zetay = */ 0x1_big_uint255, + /*.q_last_y = */ 0x2a37d8915b58f641a50e3d4e43869c2987f7988f0ff7dac56a285ee684e53af3_big_uint255, + /*.q_pad_y = */ 0x362c09c9697f3d477eee786396c2e690cc2f73d44a5650e351b2b844dba3fb73_big_uint255, + /*.theta = {*/ 0xc51d84f8427d67ce47566fb043b6415f91196129cb6fd0ea3362f213a0e8cc8_big_uint255, + 0x3301d234398523d96772d81b9b06b066888f67fcc3f1d0af919bbc7b856cf854_big_uint255}; std::array expected_res = { - 0x0_cppui_modular255, - 0x0_cppui_modular255, - 0x0_cppui_modular255, + 0x0_big_uint255, + 0x0_big_uint255, + 0x0_big_uint255, }; test(public_input, expected_res); diff --git a/crypto3/libs/blueprint/test/verifiers/placeholder/verifier.cpp b/crypto3/libs/blueprint/test/verifiers/placeholder/verifier.cpp index 29eec06638..c35189c3b0 100644 --- a/crypto3/libs/blueprint/test/verifiers/placeholder/verifier.cpp +++ b/crypto3/libs/blueprint/test/verifiers/placeholder/verifier.cpp @@ -91,8 +91,8 @@ struct default_zkllvm_params { nil::crypto3::zk::snark::plonk_constraint_system; using table_description_type = nil::crypto3::zk::snark::plonk_table_description; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using ColumnType = nil::crypto3::zk::snark::plonk_column; using assignment_table_type = @@ -175,8 +175,8 @@ template static nil::crypto3::zk::snark::placeholder_proof load_proof(std::string filename) { std::cout << "Loading proof from " << filename << std::endl; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; std::ifstream iproof; iproof.open(filename); @@ -193,7 +193,7 @@ template proof_marshalling_type marshalled_proof_data; auto read_iter = v.begin(); auto status = marshalled_proof_data.read(read_iter, v.size()); - if (status != nil::marshalling::status_type::success) { + if (status != nil::crypto3::marshalling::status_type::success) { std::cerr << "Status is " << make_error_code(status) << std::endl; throw "Reading a marshalled object from buffer failed."; } @@ -221,7 +221,7 @@ static typename nil::crypto3::zk::snark::placeholder_public_preprocessor marshalled_data; auto read_iter = v.begin(); auto status = marshalled_data.read(read_iter, v.size()); - return nil::crypto3::marshalling::types::make_placeholder_common_data( + return nil::crypto3::marshalling::types::make_placeholder_common_data( marshalled_data ); } @@ -239,8 +239,8 @@ struct dst_params{ nil::crypto3::zk::snark::plonk_constraint_system; using table_description_type = nil::crypto3::zk::snark::plonk_table_description; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using ColumnType = nil::crypto3::zk::snark::plonk_column; using assignment_table_type = @@ -294,14 +294,14 @@ gen_test_proof( typename nil::crypto3::zk::snark::placeholder_public_preprocessor< field_type, src_placeholder_params>::preprocessed_data_type public_preprocessed_data = nil::crypto3::zk::snark::placeholder_public_preprocessor::process( - constraint_system, assignment_table.move_public_table(), table_description, lpc_scheme + constraint_system, assignment_table.public_table(), table_description, lpc_scheme ); std::cout <<"Preprocess private data" << std::endl; typename nil::crypto3::zk::snark::placeholder_private_preprocessor< field_type, src_placeholder_params>::preprocessed_data_type private_preprocessed_data = nil::crypto3::zk::snark::placeholder_private_preprocessor::process( - constraint_system, assignment_table.move_private_table(), table_description + constraint_system, assignment_table.private_table(), table_description ); std::cout <<"Generate proof" << std::endl; diff --git a/crypto3/libs/blueprint/test/zkevm/bytecode.cpp b/crypto3/libs/blueprint/test/zkevm/bytecode.cpp index b354cab0fc..f2add076eb 100644 --- a/crypto3/libs/blueprint/test/zkevm/bytecode.cpp +++ b/crypto3/libs/blueprint/test/zkevm/bytecode.cpp @@ -32,6 +32,8 @@ #include #include #include +#include +#include #include #include @@ -48,9 +50,11 @@ #include "../test_plonk_component.hpp" using namespace nil; +using namespace nil::blueprint; std::string bytecode_for = "0x60806040523480156100195760008061001661001f565b50505b5061008d565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561005a57808601518160408401015260208101905061003c565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6103188061009c6000396000f3fe6080604052348015610019576000806100166100bb565b50505b50600436106100345760003560e01c806347b0b31c14610042575b60008061003f6100bb565b50505b61005c600480360381019061005791906101a3565b610072565b60405161006991906101f7565b60405180910390f35b60006001905060005b828110156100a457838261008f9190610212565b9150808061009c90610276565b91505061007b565b5080600081906100b2610129565b50505092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156100f65780860151816040840101526020810190506100d8565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b60408110156101895760008183015260208101905061016f565b505050565b60008135905061019d816102f8565b92915050565b600080604083850312156101bf576000806101bc6100bb565b50505b60006101cd8582860161018e565b92505060206101de8582860161018e565b9150509250929050565b6101f18161026c565b82525050565b600060208201905061020c60008301846101e8565b92915050565b600061021d8261026c565b91506102288361026c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610261576102606102bf565b5b828202905092915050565b6000819050919050565b60006102818261026c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156102b4576102b36102bf565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000006000526011600452602460006102f46100bb565b5050565b6103018161026c565b8114610315576000806103126100bb565b50505b5056"; std::string bytecode_addition = "0x60806040523480156100195760008061001661001f565b50505b5061008d565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561005a57808601518160408401015260208101905061003c565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6102b38061009c6000396000f3fe6080604052348015610019576000806100166100a3565b50505b50600436106100345760003560e01c8063f080118c14610042575b60008061003f6100a3565b50505b61005c6004803603810190610057919061018b565b610072565b60405161006991906101df565b60405180910390f35b6000818361008091906101fa565b6000819061008c610111565b505050818361009b91906101fa565b905092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156100de5780860151816040840101526020810190506100c0565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b604081101561017157600081830152602081019050610157565b505050565b60008135905061018581610293565b92915050565b600080604083850312156101a7576000806101a46100a3565b50505b60006101b585828601610176565b92505060206101c685828601610176565b9150509250929050565b6101d981610250565b82525050565b60006020820190506101f460008301846101d0565b92915050565b600061020582610250565b915061021083610250565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156102455761024461025a565b5b828201905092915050565b6000819050919050565b7f4e487b710000000000000000000000000000000000000000000000000000000060005260116004526024600061028f6100a3565b5050565b61029c81610250565b81146102b0576000806102ad6100a3565b50505b5056"; +std::string bytecode_mstore8 = "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ec66f8b914610030575b600080fd5b61003861004a565b60405190815260200160405180910390f35b60408051602080825281830190925260009160609190602082018180368337019050509050600160005461007e91906106b4565b60008190555060005460ff1660f81b816000815181106100a0576100a06106cd565b60200101906001600160f81b031916908160001a905350600860005461ff0016901c60f81b816001815181106100d8576100d86106cd565b60200101906001600160f81b031916908160001a905350601060005462ff000016901c60f81b81600281518110610111576101116106cd565b60200101906001600160f81b031916908160001a905350601860005463ff00000016901c60f81b8160038151811061014b5761014b6106cd565b60200101906001600160f81b031916908160001a905350602060005464ff0000000016901c60f81b81600481518110610186576101866106cd565b60200101906001600160f81b031916908160001a905350602860005465ff000000000016901c60f81b816005815181106101c2576101c26106cd565b60200101906001600160f81b031916908160001a905350603060005466ff00000000000016901c60f81b816006815181106101ff576101ff6106cd565b60200101906001600160f81b031916908160001a905350603860005467ff0000000000000016901c60f81b8160078151811061023d5761023d6106cd565b60200101906001600160f81b031916908160001a905350604060005468ff000000000000000016901c60f81b8160088151811061027c5761027c6106cd565b60200101906001600160f81b031916908160001a905350604860005469ff00000000000000000016901c60f81b816009815181106102bc576102bc6106cd565b60200101906001600160f81b031916908160001a905350605060005460ff604c1b16901c60f81b81600a815181106102f6576102f66106cd565b60200101906001600160f81b031916908160001a905350605860005460ff60541b16901c60f81b81600b81518110610330576103306106cd565b60200101906001600160f81b031916908160001a905350606060005460ff605c1b16901c60f81b81600c8151811061036a5761036a6106cd565b60200101906001600160f81b031916908160001a905350606860005460ff60641b16901c60f81b81600d815181106103a4576103a46106cd565b60200101906001600160f81b031916908160001a905350607060005460ff606c1b16901c60f81b81600e815181106103de576103de6106cd565b60200101906001600160f81b031916908160001a905350607860005460ff60741b16901c60f81b81600f81518110610418576104186106cd565b60200101906001600160f81b031916908160001a90535080600081518110610442576104426106cd565b0160200151815160f89190911c925081906001908110610464576104646106cd565b01602001516104769060f81c836106e3565b91508060028151811061048b5761048b6106cd565b016020015161049d9060f81c836106e3565b9150806003815181106104b2576104b26106cd565b01602001516104c49060f81c836106e3565b9150806004815181106104d9576104d96106cd565b01602001516104eb9060f81c836106e3565b915080600581518110610500576105006106cd565b01602001516105129060f81c836106e3565b915080600681518110610527576105276106cd565b01602001516105399060f81c836106e3565b91508060078151811061054e5761054e6106cd565b01602001516105609060f81c836106e3565b915080600881518110610575576105756106cd565b01602001516105879060f81c836106e3565b91508060098151811061059c5761059c6106cd565b01602001516105ae9060f81c836106e3565b915080600a815181106105c3576105c36106cd565b01602001516105d59060f81c836106e3565b915080600b815181106105ea576105ea6106cd565b01602001516105fc9060f81c836106e3565b915080600c81518110610611576106116106cd565b01602001516106239060f81c836106e3565b915080600d81518110610638576106386106cd565b016020015161064a9060f81c836106e3565b915080600e8151811061065f5761065f6106cd565b01602001516106719060f81c836106e3565b915080600f81518110610686576106866106cd565b01602001516106989060f81c836106e3565b91505090565b634e487b7160e01b600052601160045260246000fd5b818103818111156106c7576106c761069e565b92915050565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176106c7576106c761069e56fea2646970667358221220e19e1413fa17873cfdeb4c5daf6c8c49164003773104fb5b623500569fb568c164736f6c63430008190033"; std::vector hex_string_to_bytes(std::string const &hex_string) { std::vector bytes; @@ -61,196 +65,164 @@ std::vector hex_string_to_bytes(std::string const &hex_string) { return bytes; } -template +template void test_zkevm_bytecode( - std::vector> bytecodes + const components::bytecode_input_type::data_type& bytecode_input, + typename components::plonk_keccak_table::input_type& keccak_input, + std::size_t max_rows_amount, + std::size_t max_keccak_blocks ){ - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 6; - constexpr std::size_t SelectorColumns = 3; - zk::snark::plonk_table_description desc( - WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); using ArithmetizationType = crypto3::zk::snark::plonk_constraint_system; using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 5; using AssignmentType = nil::blueprint::assignment; - + using CircuitType = circuit; using value_type = typename BlueprintFieldType::value_type; using var = crypto3::zk::snark::plonk_variable; + using table_type = nil::blueprint::components::zkevm_bytecode_table; + using component_type = nil::blueprint::components::zkevm_bytecode; - using component_type = blueprint::components::zkevm_bytecode; - - std::vector> bytecode_vars; - std::size_t cur = 0; - for (std::size_t i = 0; i < bytecodes.size(); i++) { - std::vector bytecode; - bytecode.push_back(var(0, cur, false, var::column_type::public_input)); // length - cur++; - for (std::size_t j = 0; j < bytecodes[i].size(); j++, cur++) { - bytecode.push_back(var(0, cur, false, var::column_type::public_input)); - } - bytecode_vars.push_back(bytecode); - } - std::vector> bytecode_hash_vars; - for( std::size_t i = 0; i < bytecodes.size(); i++, cur+=2){ - bytecode_hash_vars.push_back({var(0, cur, false, var::column_type::public_input), var(0, cur+1, false, var::column_type::public_input)}); - } - var rlc_challenge_var = var(0, cur, false, var::column_type::public_input); - typename component_type::input_type instance_input(bytecode_vars, bytecode_hash_vars, rlc_challenge_var); - - std::vector public_input; - cur = 0; - for( std::size_t i = 0; i < bytecodes.size(); i++){ - public_input.push_back(bytecodes[i].size()); - cur++; - for( std::size_t j = 0; j < bytecodes[i].size(); j++, cur++){ - public_input.push_back(bytecodes[i][j]); - } - } - for( std::size_t i = 0; i < bytecodes.size(); i++){ - std::string hash = nil::crypto3::hash>(bytecodes[i].begin(), bytecodes[i].end()); - std::string str_hi = hash.substr(0, hash.size()-32); - std::string str_lo = hash.substr(hash.size()-32, 32); - value_type hash_hi; - value_type hash_lo; - for( std::size_t j = 0; j < str_hi.size(); j++ ){hash_hi *=16; hash_hi += str_hi[j] >= '0' && str_hi[j] <= '9'? str_hi[j] - '0' : str_hi[j] - 'a' + 10;} - for( std::size_t j = 0; j < str_lo.size(); j++ ){hash_lo *=16; hash_lo += str_lo[j] >= '0' && str_lo[j] <= '9'? str_lo[j] - '0' : str_lo[j] - 'a' + 10;} - public_input.push_back(hash_hi); - public_input.push_back(hash_lo); - } - nil::crypto3::random::algebraic_engine rnd(0); - value_type rlc_challenge = rnd(); - public_input.push_back(rlc_challenge); + value_type rlc_challenge = 7; //TODO:modify it + constexpr std::size_t WitnessColumns = 10; - auto result_check = [](AssignmentType &assignment, - typename component_type::result_type &real_res) { - }; + AssignmentType assignment(WitnessColumns, 1, 7, 5); // witness, public input, constant, selectors + CircuitType circuit; + assignment.public_input(0, 0) = rlc_challenge; - std::array witnesses; + typename component_type::input_type input_obj(var(0, 0, false, var::column_type::public_input)); + keccak_input.rlc_challenge = var(0, 0, false, var::column_type::public_input); + + std::vector witnesses(WitnessColumns); for (std::uint32_t i = 0; i < WitnessColumns; i++) { witnesses[i] = i; } - component_type component_instance = component_type(witnesses, std::array{0}, - std::array{0}, 2046); - nil::crypto3::test_component - (component_instance, desc, public_input, result_check, instance_input, - nil::blueprint::connectedness_check_type::type::NONE, 2046); -} - -template -void test_zkevm_bytecode_dynamic_table( - std::vector> bytecodes -){ - constexpr std::size_t PublicInputColumns = 1; - constexpr std::size_t ConstantColumns = 4; - constexpr std::size_t SelectorColumns = 6; - zk::snark::plonk_table_description desc( - WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); - using ArithmetizationType = crypto3::zk::snark::plonk_constraint_system; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - constexpr std::size_t Lambda = 5; - using AssignmentType = nil::blueprint::assignment; - - using value_type = typename BlueprintFieldType::value_type; - using var = crypto3::zk::snark::plonk_variable; + component_type component_instance = component_type( + witnesses, {}, {}, max_rows_amount, max_keccak_blocks + ); + generate_circuit(component_instance, circuit, assignment, input_obj, 1); - using component_type = blueprint::components::bytecode_table_tester; - - std::vector> bytecode_vars; - std::size_t cur = 0; - for (std::size_t i = 0; i < bytecodes.size(); i++) { - std::vector bytecode; - bytecode.push_back(var(0, cur, false, var::column_type::public_input)); // length - cur++; - for (std::size_t j = 0; j < bytecodes[i].size(); j++, cur++) { - bytecode.push_back(var(0, cur, false, var::column_type::public_input)); - } - bytecode_vars.push_back(bytecode); + std::vector lookup_columns_indices; + for(std::size_t i = 0; i < assignment.constants_amount(); i++) { + lookup_columns_indices.push_back(i); } - std::vector> bytecode_hash_vars; - for( std::size_t i = 0; i < bytecodes.size(); i++, cur+=2){ - bytecode_hash_vars.push_back({var(0, cur, false, var::column_type::public_input), var(0, cur+1, false, var::column_type::public_input)}); - } - typename component_type::input_type instance_input(bytecode_vars, bytecode_hash_vars); - - std::vector public_input; - cur = 0; - for( std::size_t i = 0; i < bytecodes.size(); i++){ - public_input.push_back(bytecodes[i].size()); - cur++; - for( std::size_t j = 0; j < bytecodes[i].size(); j++, cur++){ - public_input.push_back(bytecodes[i][j]); - } - } - for( std::size_t i = 0; i < bytecodes.size(); i++){ - std::string hash = nil::crypto3::hash>(bytecodes[i].begin(), bytecodes[i].end()); - std::string str_hi = hash.substr(0, hash.size()-32); - std::string str_lo = hash.substr(hash.size()-32, 32); - value_type hash_hi; - value_type hash_lo; - for( std::size_t j = 0; j < str_hi.size(); j++ ){hash_hi *=16; hash_hi += str_hi[j] >= '0' && str_hi[j] <= '9'? str_hi[j] - '0' : str_hi[j] - 'a' + 10;} - for( std::size_t j = 0; j < str_lo.size(); j++ ){hash_lo *=16; hash_lo += str_lo[j] >= '0' && str_lo[j] <= '9'? str_lo[j] - '0' : str_lo[j] - 'a' + 10;} - public_input.push_back(hash_hi); - public_input.push_back(hash_lo); - } - nil::crypto3::random::algebraic_engine rnd(0); - value_type rlc_challenge = rnd(); - public_input.push_back(rlc_challenge); - auto result_check = [](AssignmentType &assignment, - typename component_type::result_type &real_res) { - }; + zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 1000 + ); - std::array witnesses; - for (std::uint32_t i = 0; i < WitnessColumns; i++) { - witnesses[i] = i; - } + input_obj.fill_bytecodes(bytecode_input); + generate_basic_assignments(component_instance, assignment, input_obj, 1); - component_type component_instance = component_type(witnesses, std::array{0}, - std::array{0}, 2046); - nil::crypto3::test_component - (component_instance, desc, public_input, result_check, instance_input, - nil::blueprint::connectedness_check_type::type::NONE, 2046); -} + // Keccak table may be filled after bytecode table, zkevm circuit, mpt table e t.c. + input_obj.fill_dynamic_table_inputs(keccak_input); + generate_dynamic_tables_assignments(component_instance, assignment, input_obj, 1); -BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) - using field_type = typename crypto3::algebra::curves::vesta::base_field_type; -BOOST_AUTO_TEST_CASE(one_small_contract){ - test_zkevm_bytecode({hex_string_to_bytes(bytecode_addition)}); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); } -BOOST_AUTO_TEST_CASE(two_small_contracts){ - test_zkevm_bytecode({hex_string_to_bytes(bytecode_addition), hex_string_to_bytes(bytecode_for)}); + +BOOST_AUTO_TEST_SUITE(blueprint_bytecode_input_test_suite) +BOOST_AUTO_TEST_CASE(input_test){ + nil::blueprint::components::bytecode_input_type input; + input.new_bytecode(hex_string_to_bytes(bytecode_for)); + input.new_bytecode({hex_string_to_bytes(bytecode_addition), zkevm_word_type(0x1234ab000_big_uint257)}); + auto ind = input.new_bytecode(); + input.push_byte(ind, 0x60); + input.push_byte(ind, 0x40); + input.push_byte(ind, 0x60); + input.push_byte(ind, 0x80); + input.push_byte(ind, 0xf3); + + const auto &data = input.get_bytecodes(); } BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(blueprint_plonk_pallas_test_suite) - using field_type = typename crypto3::algebra::curves::pallas::base_field_type; +BOOST_AUTO_TEST_SUITE(blueprint_bn_test_suite) + using field_type = nil::crypto3::algebra::curves::alt_bn128_254::base_field_type; BOOST_AUTO_TEST_CASE(one_small_contract){ - test_zkevm_bytecode({hex_string_to_bytes(bytecode_addition)}); + nil::blueprint::components::bytecode_input_type input; + input.new_bytecode(hex_string_to_bytes(bytecode_for)); + + nil::blueprint::components::plonk_keccak_table::input_type keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + keccak_input.new_buffer(hex_string_to_bytes("0x00ed")); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + test_zkevm_bytecode(input.get_bytecodes(), keccak_input, 1000, 30); } BOOST_AUTO_TEST_CASE(two_small_contracts){ - test_zkevm_bytecode({hex_string_to_bytes(bytecode_addition), hex_string_to_bytes(bytecode_for)}); + nil::blueprint::components::bytecode_input_type input; + input.new_bytecode(hex_string_to_bytes(bytecode_for)); + input.new_bytecode(hex_string_to_bytes(bytecode_addition)); + input.new_bytecode(hex_string_to_bytes(bytecode_addition)); + + nil::blueprint::components::plonk_keccak_table::input_type keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes(bytecode_addition)); + + test_zkevm_bytecode(input.get_bytecodes(), keccak_input, 2046, 30); } BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(blueprint_plonk_bls_test_suite) - using field_type = typename crypto3::algebra::fields::bls12_fr<381>; +BOOST_AUTO_TEST_SUITE(blueprint_vesta_test_suite) + using field_type = typename crypto3::algebra::curves::vesta::base_field_type; BOOST_AUTO_TEST_CASE(one_small_contract){ - test_zkevm_bytecode({hex_string_to_bytes(bytecode_addition)}); + nil::blueprint::components::bytecode_input_type input; + input.new_bytecode(hex_string_to_bytes(bytecode_for)); + + nil::blueprint::components::plonk_keccak_table::input_type keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + keccak_input.new_buffer(hex_string_to_bytes("0x00ed")); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + test_zkevm_bytecode(input.get_bytecodes(), keccak_input, 1000, 30); } + BOOST_AUTO_TEST_CASE(two_small_contracts){ - test_zkevm_bytecode({hex_string_to_bytes(bytecode_addition),hex_string_to_bytes(bytecode_for)}); + nil::blueprint::components::bytecode_input_type input; + input.new_bytecode(hex_string_to_bytes(bytecode_for)); + input.new_bytecode(hex_string_to_bytes(bytecode_addition)); + + nil::blueprint::components::plonk_keccak_table::input_type keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes(bytecode_addition)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa129870189274891702983470189234701829347123948710293874091872310192329140879210")); + + test_zkevm_bytecode(input.get_bytecodes(), keccak_input, 2046, 30); } BOOST_AUTO_TEST_SUITE_END() -BOOST_AUTO_TEST_SUITE(dynamic_table_test_suite) - using field_type = typename crypto3::algebra::curves::vesta::base_field_type; +BOOST_AUTO_TEST_SUITE(blueprint_pallas_test_suite) + using field_type = typename crypto3::algebra::curves::pallas::base_field_type; BOOST_AUTO_TEST_CASE(one_small_contract){ - test_zkevm_bytecode_dynamic_table({hex_string_to_bytes(bytecode_addition)}); + nil::blueprint::components::bytecode_input_type input; + input.new_bytecode(hex_string_to_bytes(bytecode_for)); + + nil::blueprint::components::plonk_keccak_table::input_type keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + keccak_input.new_buffer(hex_string_to_bytes("0x00ed")); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + test_zkevm_bytecode(input.get_bytecodes(), keccak_input, 1000, 30); } + BOOST_AUTO_TEST_CASE(two_small_contracts){ - test_zkevm_bytecode_dynamic_table({hex_string_to_bytes(bytecode_addition), hex_string_to_bytes(bytecode_for)}); + nil::blueprint::components::bytecode_input_type input; + input.new_bytecode(hex_string_to_bytes(bytecode_for)); + input.new_bytecode(hex_string_to_bytes(bytecode_addition)); + input.new_bytecode(hex_string_to_bytes(bytecode_mstore8)); + + + nil::blueprint::components::plonk_keccak_table::input_type keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes(bytecode_addition)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa129870189274891702983470189234701829347123948710293874091872310192329140879210")); + + test_zkevm_bytecode(input.get_bytecodes(), keccak_input, 10000, 30); } BOOST_AUTO_TEST_SUITE_END() - diff --git a/crypto3/libs/blueprint/test/zkevm/connections.cpp b/crypto3/libs/blueprint/test/zkevm/connections.cpp new file mode 100644 index 0000000000..3df301e04f --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/connections.cpp @@ -0,0 +1,295 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE zkevm_connections_test + +#include + +//#include +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" + +#include +#include + +#include +#include +#include +#include "./opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +// This is circuit connection test +// How it'll work. + +// It will have Ethereum RPC trace, parse it and generate RW and EVM circuit +// We have bytecode -- so can generate bytecode circuit +// And then check connections + +zkevm_opcode opcode_from_str(const std::string &str){ + if(str == "STOP") return zkevm_opcode::STOP; else + if(str == "ADD") return zkevm_opcode::ADD; else + if(str == "MUL") return zkevm_opcode::MUL; else + if(str == "SUB") return zkevm_opcode::SUB; else + if(str == "DIV") return zkevm_opcode::DIV; else + if(str == "SDIV") return zkevm_opcode::SDIV; else + if(str == "MOD") return zkevm_opcode::MOD; else + if(str == "SMOD") return zkevm_opcode::SMOD; else + if(str == "ADDMOD") return zkevm_opcode::ADDMOD; else + if(str == "MULMOD") return zkevm_opcode::MULMOD; else + if(str == "EXP") return zkevm_opcode::EXP; else + if(str == "SIGNEXTEND") return zkevm_opcode::SIGNEXTEND; else + if(str == "LT") return zkevm_opcode::LT; else + if(str == "GT") return zkevm_opcode::GT; else + if(str == "SLT") return zkevm_opcode::SLT; else + if(str == "SGT") return zkevm_opcode::SGT; else + if(str == "EQ") return zkevm_opcode::EQ; else + if(str == "ISZERO") return zkevm_opcode::ISZERO; else + if(str == "AND") return zkevm_opcode::AND; else + if(str == "OR") return zkevm_opcode::OR; else + if(str == "XOR") return zkevm_opcode::XOR; else + if(str == "NOT") return zkevm_opcode::NOT; else + if(str == "BYTE") return zkevm_opcode::BYTE; else + if(str == "SHL") return zkevm_opcode::SHL; else + if(str == "SHR") return zkevm_opcode::SHR; else + if(str == "SAR") return zkevm_opcode::SAR; else + if(str == "KECCAK256") return zkevm_opcode::KECCAK256; else + if(str == "ADDRESS") return zkevm_opcode::ADDRESS; else + if(str == "BALANCE") return zkevm_opcode::BALANCE; else + if(str == "ORIGIN") return zkevm_opcode::ORIGIN; else + if(str == "CALLER") return zkevm_opcode::CALLER; else + if(str == "CALLVALUE") return zkevm_opcode::CALLVALUE; else + if(str == "CALLDATALOAD") return zkevm_opcode::CALLDATALOAD; else + if(str == "CALLDATASIZE") return zkevm_opcode::CALLDATASIZE; else + if(str == "CALLDATACOPY") return zkevm_opcode::CALLDATACOPY; else + if(str == "CODESIZE") return zkevm_opcode::CODESIZE; else + if(str == "CODECOPY") return zkevm_opcode::CODECOPY; else + if(str == "GASPRICE") return zkevm_opcode::GASPRICE; else + if(str == "EXTCODESIZE") return zkevm_opcode::EXTCODESIZE; else + if(str == "EXTCODECOPY") return zkevm_opcode::EXTCODECOPY; else + if(str == "RETURNDATASIZE") return zkevm_opcode::RETURNDATASIZE; else + if(str == "RETURNDATACOPY") return zkevm_opcode::RETURNDATACOPY; else + if(str == "EXTCODEHASH") return zkevm_opcode::EXTCODEHASH; else + if(str == "BLOCKHASH") return zkevm_opcode::BLOCKHASH; else + if(str == "COINBASE") return zkevm_opcode::COINBASE; else + if(str == "TIMESTAMP") return zkevm_opcode::TIMESTAMP; else + if(str == "NUMBER") return zkevm_opcode::NUMBER; else + if(str == "PREVRANDAO") return zkevm_opcode::PREVRANDAO; else + if(str == "GASLIMIT") return zkevm_opcode::GASLIMIT; else + if(str == "CHAINID") return zkevm_opcode::CHAINID; else + if(str == "SELFBALANCE") return zkevm_opcode::SELFBALANCE; else + if(str == "BASEFEE") return zkevm_opcode::BASEFEE; else + if(str == "BLOBHASH") return zkevm_opcode::BLOBHASH; else + if(str == "BLOBBASEFEE") return zkevm_opcode::BLOBBASEFEE; else + if(str == "POP") return zkevm_opcode::POP; else + if(str == "MLOAD") return zkevm_opcode::MLOAD; else + if(str == "MSTORE") return zkevm_opcode::MSTORE; else + if(str == "MSTORE8") return zkevm_opcode::MSTORE8; else + if(str == "SLOAD") return zkevm_opcode::SLOAD; else + if(str == "SSTORE") return zkevm_opcode::SSTORE; else + if(str == "JUMP") return zkevm_opcode::JUMP; else + if(str == "JUMPI") return zkevm_opcode::JUMPI; else + if(str == "PC") return zkevm_opcode::PC; else + if(str == "MSIZE") return zkevm_opcode::MSIZE; else + if(str == "GAS") return zkevm_opcode::GAS; else + if(str == "JUMPDEST") return zkevm_opcode::JUMPDEST; else + if(str == "TLOAD") return zkevm_opcode::TLOAD; else + if(str == "TSTORE") return zkevm_opcode::TSTORE; else + if(str == "MCOPY") return zkevm_opcode::JUMPDEST; else + if(str == "PUSH0") return zkevm_opcode::PUSH0; else + if(str == "PUSH1") return zkevm_opcode::PUSH1; else + if(str == "PUSH2") return zkevm_opcode::PUSH2; else + if(str == "PUSH3") return zkevm_opcode::PUSH3; else + if(str == "PUSH4") return zkevm_opcode::PUSH4; else + if(str == "PUSH5") return zkevm_opcode::PUSH5; else + if(str == "PUSH6") return zkevm_opcode::PUSH6; else + if(str == "PUSH7") return zkevm_opcode::PUSH7; else + if(str == "PUSH8") return zkevm_opcode::PUSH8; else + if(str == "PUSH9") return zkevm_opcode::PUSH9; else + if(str == "PUSH10") return zkevm_opcode::PUSH10; else + if(str == "PUSH11") return zkevm_opcode::PUSH11; else + if(str == "PUSH12") return zkevm_opcode::PUSH12; else + if(str == "PUSH13") return zkevm_opcode::PUSH13; else + if(str == "PUSH14") return zkevm_opcode::PUSH14; else + if(str == "PUSH15") return zkevm_opcode::PUSH15; else + if(str == "PUSH16") return zkevm_opcode::PUSH16; else + if(str == "PUSH17") return zkevm_opcode::PUSH17; else + if(str == "PUSH18") return zkevm_opcode::PUSH18; else + if(str == "PUSH19") return zkevm_opcode::PUSH19; else + if(str == "PUSH20") return zkevm_opcode::PUSH20; else + if(str == "PUSH21") return zkevm_opcode::PUSH21; else + if(str == "PUSH22") return zkevm_opcode::PUSH22; else + if(str == "PUSH23") return zkevm_opcode::PUSH23; else + if(str == "PUSH24") return zkevm_opcode::PUSH24; else + if(str == "PUSH25") return zkevm_opcode::PUSH25; else + if(str == "PUSH26") return zkevm_opcode::PUSH26; else + if(str == "PUSH27") return zkevm_opcode::PUSH27; else + if(str == "PUSH28") return zkevm_opcode::PUSH28; else + if(str == "PUSH29") return zkevm_opcode::PUSH29; else + if(str == "PUSH30") return zkevm_opcode::PUSH30; else + if(str == "PUSH31") return zkevm_opcode::PUSH31; else + if(str == "PUSH32") return zkevm_opcode::PUSH32; else + if(str == "DUP1") return zkevm_opcode::DUP1; else + if(str == "DUP2") return zkevm_opcode::DUP2; else + if(str == "DUP3") return zkevm_opcode::DUP3; else + if(str == "DUP4") return zkevm_opcode::DUP4; else + if(str == "DUP5") return zkevm_opcode::DUP5; else + if(str == "DUP6") return zkevm_opcode::DUP6; else + if(str == "DUP7") return zkevm_opcode::DUP7; else + if(str == "DUP8") return zkevm_opcode::DUP8; else + if(str == "DUP9") return zkevm_opcode::DUP9; else + if(str == "DUP10") return zkevm_opcode::DUP10; else + if(str == "DUP11") return zkevm_opcode::DUP11; else + if(str == "DUP12") return zkevm_opcode::DUP12; else + if(str == "DUP13") return zkevm_opcode::DUP13; else + if(str == "DUP14") return zkevm_opcode::DUP14; else + if(str == "DUP15") return zkevm_opcode::DUP15; else + if(str == "DUP16") return zkevm_opcode::DUP16; else + if(str == "SWAP1") return zkevm_opcode::SWAP1; else + if(str == "SWAP2") return zkevm_opcode::SWAP2; else + if(str == "SWAP3") return zkevm_opcode::SWAP3; else + if(str == "SWAP4") return zkevm_opcode::SWAP4; else + if(str == "SWAP5") return zkevm_opcode::SWAP5; else + if(str == "SWAP6") return zkevm_opcode::SWAP6; else + if(str == "SWAP7") return zkevm_opcode::SWAP7; else + if(str == "SWAP8") return zkevm_opcode::SWAP8; else + if(str == "SWAP9") return zkevm_opcode::SWAP9; else + if(str == "SWAP10") return zkevm_opcode::SWAP10; else + if(str == "SWAP11") return zkevm_opcode::SWAP11; else + if(str == "SWAP12") return zkevm_opcode::SWAP12; else + if(str == "SWAP13") return zkevm_opcode::SWAP13; else + if(str == "SWAP14") return zkevm_opcode::SWAP14; else + if(str == "SWAP15") return zkevm_opcode::SWAP15; else + if(str == "SWAP16") return zkevm_opcode::SWAP16; else + if(str == "LOG0") return zkevm_opcode::LOG0; else + if(str == "LOG1") return zkevm_opcode::LOG1; else + if(str == "LOG2") return zkevm_opcode::LOG2; else + if(str == "LOG3") return zkevm_opcode::LOG3; else + if(str == "LOG4") return zkevm_opcode::LOG4; else + if(str == "CREATE") return zkevm_opcode::CREATE; else + if(str == "CALL") return zkevm_opcode::CALL; else + if(str == "CALLCODE") return zkevm_opcode::CALLCODE; else + if(str == "RETURN") return zkevm_opcode::RETURN; else + if(str == "DELEGATECALL") return zkevm_opcode::DELEGATECALL; else + if(str == "CREATE2") return zkevm_opcode::CREATE2; else + if(str == "STATICCALL") return zkevm_opcode::STATICCALL; else + if(str == "REVERT") return zkevm_opcode::REVERT; else + if(str == "INVALID") return zkevm_opcode::INVALID; else + if(str == "SELFDESTRUCT") return zkevm_opcode::SELFDESTRUCT; + // these are not real opcodes, they are for exception processing + std::cout << "Unknown opcode " << str << std::endl; + return zkevm_opcode::err0; // not enough static gas or incorrect stack size +} + +template +void test_zkevm(std::string path){ + std::ifstream ss; + ss.open(path + "/trace0.json"); + boost::property_tree::ptree trace; + boost::property_tree::read_json(ss, trace); + ss.close(); + + ss.open(path + "/contract0.json"); + boost::property_tree::ptree bytecode_json; + boost::property_tree::read_json(ss, bytecode_json); + std::vector bytecode0 = hex_string_to_bytes(std::string(bytecode_json.get_child("bytecode").data().c_str())); + ss.close(); + + // using field_type = fields::goldilocks64; + using field_type = BlueprintFieldType; + using arithmetization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 499, 300); + zkevm_table evm_table(evm_circuit, assignment); + + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_machine_type machine = get_empty_machine(bytecode0, zkevm_keccak_hash(bytecode0)); + + boost::property_tree::ptree ptrace = trace.get_child("result.structLogs"); + std::cout << "PT = " << ptrace.size() << std::endl; + + std::vector stack = zkevm_word_vector_from_ptree(ptrace.begin()->second.get_child("stack")); + std::vector memory = byte_vector_from_ptree(ptrace.begin()->second.get_child("memory")); + std::vector memory_next; + std::vector stack_next; + std::map storage = key_value_storage_from_ptree(ptrace.begin()->second.get_child("storage")); + std::map storage_next; + + for( auto it = ptrace.begin(); it!=ptrace.end(); it++){ + std::string opcode_str = it->second.get_child("op").data(); + if(std::distance(it, ptrace.end()) != 1){ + stack_next = zkevm_word_vector_from_ptree(std::next(it)->second.get_child("stack")); + memory_next = byte_vector_from_ptree(std::next(it)->second.get_child("memory")); + storage_next = key_value_storage_from_ptree(it->second.get_child("storage")); + } + machine.update_state( + opcode_from_str(opcode_str), + stack, + memory, + atoi(it->second.get_child("gas").data().c_str()), + atoi(it->second.get_child("pc").data().c_str()), + opcode_str.substr(0,4) == "PUSH"? stack_next[stack_next.size() - 1]: 0 + ); + evm_table.assign_opcode(machine); + + storage = storage_next; + stack = stack_next; + memory = memory_next; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(bytecode0); + + evm_table.finalize_test(bytecode_input); + +// std::ofstream myfile; +// myfile.open("test_assignment.txt"); +// assignment.export_table(myfile); +// myfile.close(); + + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_SUITE(zkevm_connections_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_minimal_math_test) { + test_zkevm(std::string(TEST_DATA_DIR) + "minimal_math"); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/copy.cpp b/crypto3/libs/blueprint/test/zkevm/copy.cpp new file mode 100644 index 0000000000..5af7eeec88 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/copy.cpp @@ -0,0 +1,164 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_zkevm_copy_test + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "../test_plonk_component.hpp" + +using namespace nil; + +std::vector hex_string_to_bytes(std::string const &hex_string) { + std::vector bytes; + for (std::size_t i = 2; i < hex_string.size(); i += 2) { + std::string byte_string = hex_string.substr(i, 2); + bytes.push_back(std::stoi(byte_string, nullptr, 16)); + } + return bytes; +} + +template +void test_zkevm_copy( + std::vector paths, + std::size_t max_copy_size +){ + constexpr std::size_t WitnessColumns = 20; + std::cout << "Copy circuit test with "<< WitnessColumns << " witnesses" << std::endl; + std::vector copy_events; + std::size_t rw_counter = 0; + for( std::size_t call_id = 0; call_id < paths.size(); call_id++){ + auto path = paths[call_id]; + std::cout << "\tpath = " << path << std::endl; + + std::ifstream ss; + ss.open(path); + + boost::property_tree::ptree pt; + boost::property_tree::read_json(ss, pt); + ss.close(); + + rw_counter = nil::blueprint::components::copy_events_from_trace(copy_events, pt, max_copy_size, call_id, rw_counter); + } + + constexpr std::size_t PublicInputColumns = 0; + constexpr std::size_t ConstantColumns = 4; + constexpr std::size_t SelectorColumns = 5; + zk::snark::plonk_table_description desc( + WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); + using ArithmetizationType = crypto3::zk::snark::plonk_constraint_system; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 40; + using AssignmentType = nil::blueprint::assignment; + + using value_type = typename BlueprintFieldType::value_type; + using var = crypto3::zk::snark::plonk_variable; + + using component_type = blueprint::components::zkevm_copy; + + typename component_type::input_type instance_input(copy_events); + + auto result_check = [](AssignmentType &assignment, + typename component_type::result_type &real_res) { + }; + + std::array witnesses; + for (std::uint32_t i = 0; i < WitnessColumns; i++) { + witnesses[i] = i; + } + component_type component_instance = component_type(witnesses, std::array{0}, + std::array{0}, max_copy_size); + + std::vector public_input; + nil::crypto3::test_component + (component_instance, desc, public_input, result_check, instance_input, + nil::blueprint::connectedness_check_type::type::NONE, max_copy_size); +} + +constexpr static const std::size_t random_tests_amount = 10; + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) + using field_type = typename crypto3::algebra::curves::vesta::base_field_type; +BOOST_AUTO_TEST_CASE(small_storage_contract){ + test_zkevm_copy({"../crypto3/libs/blueprint/test/zkevm/data/small_stack_storage.json"}, 3000); +} + +BOOST_AUTO_TEST_CASE(mstore8_contract){ + test_zkevm_copy({"../crypto3/libs/blueprint/test/zkevm/data/mstore8.json"}, 3000); +} + +BOOST_AUTO_TEST_CASE(meminit_contract){ + test_zkevm_copy({"../crypto3/libs/blueprint/test/zkevm/data/mem_init.json"}, 3000); +} + +BOOST_AUTO_TEST_CASE(calldatacopy_contract){ + test_zkevm_copy({"../crypto3/libs/blueprint/test/zkevm/data/calldatacopy.json"}, 3000); +} + +BOOST_AUTO_TEST_CASE(multiple_contracts_test){ + test_zkevm_copy({ + "../crypto3/libs/blueprint/test/zkevm/data/small_stack_storage.json", + "../crypto3/libs/blueprint/test/zkevm/data/mstore8.json", + "../crypto3/libs/blueprint/test/zkevm/data/mem_init.json", + "../crypto3/libs/blueprint/test/zkevm/data/calldatacopy.json" + }, 3000); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_pallas_test_suite) + using field_type = typename crypto3::algebra::curves::pallas::base_field_type; +BOOST_AUTO_TEST_CASE(small_storage_contract){ + test_zkevm_copy({"../crypto3/libs/blueprint/test/zkevm/data/small_stack_storage.json"}, 3000); +} +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_bls_test_suite) + using field_type = typename crypto3::algebra::fields::bls12_fr<381>; +BOOST_AUTO_TEST_CASE(small_storage_contract){ + test_zkevm_copy({"../crypto3/libs/blueprint/test/zkevm/data/small_stack_storage.json"}, 3000); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/data/calldatacopy/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/calldatacopy/contract0.json new file mode 100644 index 0000000000..50aafdbaae --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/calldatacopy/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063caf118f114610030575b600080fd5b61004361003e36600461007d565b610055565b60405190815260200160405180910390f35b600082600a816080375050608051600080549080610072836100ef565b919050555092915050565b6000806020838503121561009057600080fd5b823567ffffffffffffffff808211156100a857600080fd5b818501915085601f8301126100bc57600080fd5b8135818111156100cb57600080fd5b8660208285010111156100dd57600080fd5b60209290920196919550909350505050565b60006001820161010f57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358"} diff --git a/crypto3/libs/blueprint/test/zkevm/data/calldatacopy/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/calldatacopy/trace0.json new file mode 100644 index 0000000000..a38434ad3c --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/calldatacopy/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"gas":27141,"failed":false,"returnValue":"0011223344556677889900000000000000000000000000000000000000000000","structLogs":[{"pc":0,"op":"PUSH1","gas":30478408,"gasCost":3,"depth":1,"stack":[],"memory":[],"storage":{}},{"pc":2,"op":"PUSH1","gas":30478405,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"memory":[],"storage":{}},{"pc":4,"op":"MSTORE","gas":30478402,"gasCost":12,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":5,"op":"CALLVALUE","gas":30478390,"gasCost":2,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":6,"op":"DUP1","gas":30478388,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":7,"op":"ISZERO","gas":30478385,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":8,"op":"PUSH2","gas":30478382,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":11,"op":"JUMPI","gas":30478379,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":16,"op":"JUMPDEST","gas":30478369,"gasCost":1,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":17,"op":"POP","gas":30478368,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":18,"op":"PUSH1","gas":30478366,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":20,"op":"CALLDATASIZE","gas":30478363,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":21,"op":"LT","gas":30478361,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000064"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":22,"op":"PUSH2","gas":30478358,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":25,"op":"JUMPI","gas":30478355,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000002b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":26,"op":"PUSH1","gas":30478345,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":28,"op":"CALLDATALOAD","gas":30478342,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":29,"op":"PUSH1","gas":30478339,"gasCost":3,"depth":1,"stack":["caf118f100000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":31,"op":"SHR","gas":30478336,"gasCost":3,"depth":1,"stack":["caf118f100000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":32,"op":"DUP1","gas":30478333,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":33,"op":"PUSH4","gas":30478330,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","00000000000000000000000000000000000000000000000000000000caf118f1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":38,"op":"EQ","gas":30478327,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","00000000000000000000000000000000000000000000000000000000caf118f1","00000000000000000000000000000000000000000000000000000000caf118f1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":39,"op":"PUSH2","gas":30478324,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":42,"op":"JUMPI","gas":30478321,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000030"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":48,"op":"JUMPDEST","gas":30478311,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":49,"op":"PUSH2","gas":30478310,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":52,"op":"PUSH2","gas":30478307,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":55,"op":"CALLDATASIZE","gas":30478304,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":56,"op":"PUSH1","gas":30478302,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":58,"op":"PUSH2","gas":30478299,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":61,"op":"JUMP","gas":30478296,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000007d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":125,"op":"JUMPDEST","gas":30478288,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":126,"op":"PUSH1","gas":30478287,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":128,"op":"DUP1","gas":30478284,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":129,"op":"PUSH1","gas":30478281,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":131,"op":"DUP4","gas":30478278,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":132,"op":"DUP6","gas":30478275,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":133,"op":"SUB","gas":30478272,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000064"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":134,"op":"SLT","gas":30478269,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000060"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":135,"op":"ISZERO","gas":30478266,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":136,"op":"PUSH2","gas":30478263,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":139,"op":"JUMPI","gas":30478260,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000090"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":144,"op":"JUMPDEST","gas":30478250,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":145,"op":"DUP3","gas":30478249,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":146,"op":"CALLDATALOAD","gas":30478246,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":147,"op":"PUSH8","gas":30478243,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":156,"op":"DUP1","gas":30478240,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":157,"op":"DUP3","gas":30478237,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":158,"op":"GT","gas":30478234,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":159,"op":"ISZERO","gas":30478231,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":160,"op":"PUSH2","gas":30478228,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":163,"op":"JUMPI","gas":30478225,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":168,"op":"JUMPDEST","gas":30478215,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":169,"op":"DUP2","gas":30478214,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":170,"op":"DUP6","gas":30478211,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":171,"op":"ADD","gas":30478208,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":172,"op":"SWAP2","gas":30478205,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":173,"op":"POP","gas":30478202,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":174,"op":"DUP6","gas":30478200,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":175,"op":"PUSH1","gas":30478197,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":177,"op":"DUP4","gas":30478194,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064","000000000000000000000000000000000000000000000000000000000000001f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":178,"op":"ADD","gas":30478191,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064","000000000000000000000000000000000000000000000000000000000000001f","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":179,"op":"SLT","gas":30478188,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000043"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":180,"op":"PUSH2","gas":30478185,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":183,"op":"JUMPI","gas":30478182,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000bc"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":188,"op":"JUMPDEST","gas":30478172,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":189,"op":"DUP2","gas":30478171,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":190,"op":"CALLDATALOAD","gas":30478168,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":191,"op":"DUP2","gas":30478165,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":192,"op":"DUP2","gas":30478162,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":193,"op":"GT","gas":30478159,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":194,"op":"ISZERO","gas":30478156,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":195,"op":"PUSH2","gas":30478153,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":198,"op":"JUMPI","gas":30478150,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000cb"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":203,"op":"JUMPDEST","gas":30478140,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":204,"op":"DUP7","gas":30478139,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":205,"op":"PUSH1","gas":30478136,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000064"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":207,"op":"DUP3","gas":30478133,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":208,"op":"DUP6","gas":30478130,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":209,"op":"ADD","gas":30478127,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":210,"op":"ADD","gas":30478124,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000002f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":211,"op":"GT","gas":30478121,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000064","000000000000000000000000000000000000000000000000000000000000004f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":212,"op":"ISZERO","gas":30478118,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":213,"op":"PUSH2","gas":30478115,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":216,"op":"JUMPI","gas":30478112,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000dd"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":221,"op":"JUMPDEST","gas":30478102,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":222,"op":"PUSH1","gas":30478101,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":224,"op":"SWAP3","gas":30478098,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":225,"op":"SWAP1","gas":30478095,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":226,"op":"SWAP3","gas":30478092,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":227,"op":"ADD","gas":30478089,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":228,"op":"SWAP7","gas":30478086,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":229,"op":"SWAP2","gas":30478083,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000003e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":230,"op":"SWAP6","gas":30478080,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003e","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":231,"op":"POP","gas":30478077,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003e","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":232,"op":"SWAP1","gas":30478075,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003e","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":233,"op":"SWAP4","gas":30478072,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000003e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":234,"op":"POP","gas":30478069,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":235,"op":"POP","gas":30478067,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000ffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":236,"op":"POP","gas":30478065,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":237,"op":"POP","gas":30478063,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":238,"op":"JUMP","gas":30478061,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000003e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":62,"op":"JUMPDEST","gas":30478053,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":63,"op":"PUSH2","gas":30478052,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":66,"op":"JUMP","gas":30478049,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000055"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":85,"op":"JUMPDEST","gas":30478041,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":86,"op":"PUSH1","gas":30478040,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":88,"op":"DUP3","gas":30478037,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":89,"op":"PUSH1","gas":30478034,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":91,"op":"DUP2","gas":30478031,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":92,"op":"PUSH1","gas":30478028,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":94,"op":"CALLDATACOPY","gas":30478025,"gasCost":12,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":95,"op":"POP","gas":30478013,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{}},{"pc":96,"op":"POP","gas":30478011,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{}},{"pc":97,"op":"PUSH1","gas":30478009,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{}},{"pc":99,"op":"MLOAD","gas":30478006,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{}},{"pc":100,"op":"PUSH1","gas":30478003,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{}},{"pc":102,"op":"DUP1","gas":30478000,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{}},{"pc":103,"op":"SLOAD","gas":30477997,"gasCost":2100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":104,"op":"SWAP1","gas":30475897,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":105,"op":"DUP1","gas":30475894,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":106,"op":"PUSH2","gas":30475891,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":109,"op":"DUP4","gas":30475888,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":110,"op":"PUSH2","gas":30475885,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":113,"op":"JUMP","gas":30475882,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ef"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":239,"op":"JUMPDEST","gas":30475874,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":240,"op":"PUSH1","gas":30475873,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":242,"op":"PUSH1","gas":30475870,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":244,"op":"DUP3","gas":30475867,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":245,"op":"ADD","gas":30475864,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":246,"op":"PUSH2","gas":30475861,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":249,"op":"JUMPI","gas":30475858,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000010f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":271,"op":"JUMPDEST","gas":30475848,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":272,"op":"POP","gas":30475847,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":273,"op":"PUSH1","gas":30475845,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":275,"op":"ADD","gas":30475842,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":276,"op":"SWAP1","gas":30475839,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000072","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":277,"op":"JUMP","gas":30475836,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000072"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":114,"op":"JUMPDEST","gas":30475828,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":115,"op":"SWAP2","gas":30475827,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":116,"op":"SWAP1","gas":30475824,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":117,"op":"POP","gas":30475821,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"pc":118,"op":"SSTORE","gas":30475819,"gasCost":2900,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":119,"op":"POP","gas":30472919,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":120,"op":"SWAP3","gas":30472917,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0011223344556677889900000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":121,"op":"SWAP2","gas":30472914,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000043"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":122,"op":"POP","gas":30472911,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":123,"op":"POP","gas":30472909,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":124,"op":"JUMP","gas":30472907,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000043"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":67,"op":"JUMPDEST","gas":30472899,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":68,"op":"PUSH1","gas":30472898,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":70,"op":"MLOAD","gas":30472895,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":71,"op":"SWAP1","gas":30472892,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":72,"op":"DUP2","gas":30472889,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000080","0011223344556677889900000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":73,"op":"MSTORE","gas":30472886,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000080","0011223344556677889900000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":74,"op":"PUSH1","gas":30472883,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":76,"op":"ADD","gas":30472880,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":77,"op":"PUSH1","gas":30472877,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":79,"op":"MLOAD","gas":30472874,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":80,"op":"DUP1","gas":30472871,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":81,"op":"SWAP2","gas":30472868,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":82,"op":"SUB","gas":30472865,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":83,"op":"SWAP1","gas":30472862,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}},{"pc":84,"op":"RETURN","gas":30472859,"gasCost":0,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000caf118f1","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0011223344556677889900000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000002"}}]}} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/exp/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/exp/contract0.json new file mode 100644 index 0000000000..a664a7d4ad --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/exp/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80632c72328b14610030575b600080fd5b61004361003e3660046100ab565b610045565b005b6000805b60ff81168311156100a457600084848360ff1681811061006b5761006b61012a565b90506020020135905080860a92508260008082825461008a9190610156565b9091555082915061009c90508161016f565b915050610049565b5050505050565b6000806000604084860312156100c057600080fd5b83359250602084013567ffffffffffffffff808211156100df57600080fd5b818601915086601f8301126100f357600080fd5b81358181111561010257600080fd5b8760208260051b850101111561011757600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561016957610169610140565b92915050565b600060ff821660ff810361018557610185610140565b6001019291505056"} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/exp/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/exp/trace0.json new file mode 100644 index 0000000000..557c633f4f --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/exp/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"failed":false,"gas":46759,"returnValue":"","structLogs":[{"depth":1,"gas":30477944,"gasCost":3,"op":"PUSH1","pc":0,"memory":[],"stack":[],"storage":{}},{"depth":1,"gas":30477941,"gasCost":3,"op":"PUSH1","pc":2,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477938,"gasCost":12,"op":"MSTORE","pc":4,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477926,"gasCost":2,"op":"CALLVALUE","pc":5,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30477924,"gasCost":3,"op":"DUP1","pc":6,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477921,"gasCost":3,"op":"ISZERO","pc":7,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477918,"gasCost":3,"op":"PUSH2","pc":8,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477915,"gasCost":10,"op":"JUMPI","pc":11,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30477905,"gasCost":1,"op":"JUMPDEST","pc":16,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477904,"gasCost":2,"op":"POP","pc":17,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477902,"gasCost":3,"op":"PUSH1","pc":18,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30477899,"gasCost":2,"op":"CALLDATASIZE","pc":20,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477897,"gasCost":3,"op":"LT","pc":21,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30477894,"gasCost":3,"op":"PUSH2","pc":22,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477891,"gasCost":10,"op":"JUMPI","pc":25,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000002b"],"storage":{}},{"depth":1,"gas":30477881,"gasCost":3,"op":"PUSH1","pc":26,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30477878,"gasCost":3,"op":"CALLDATALOAD","pc":28,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477875,"gasCost":3,"op":"PUSH1","pc":29,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["2c72328b00000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477872,"gasCost":3,"op":"SHR","pc":31,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["2c72328b00000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30477869,"gasCost":3,"op":"DUP1","pc":32,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b"],"storage":{}},{"depth":1,"gas":30477866,"gasCost":3,"op":"PUSH4","pc":33,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","000000000000000000000000000000000000000000000000000000002c72328b"],"storage":{}},{"depth":1,"gas":30477863,"gasCost":3,"op":"EQ","pc":38,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","000000000000000000000000000000000000000000000000000000002c72328b","000000000000000000000000000000000000000000000000000000002c72328b"],"storage":{}},{"depth":1,"gas":30477860,"gasCost":3,"op":"PUSH2","pc":39,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477857,"gasCost":10,"op":"JUMPI","pc":42,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000030"],"storage":{}},{"depth":1,"gas":30477847,"gasCost":1,"op":"JUMPDEST","pc":48,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b"],"storage":{}},{"depth":1,"gas":30477846,"gasCost":3,"op":"PUSH2","pc":49,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b"],"storage":{}},{"depth":1,"gas":30477843,"gasCost":3,"op":"PUSH2","pc":52,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{}},{"depth":1,"gas":30477840,"gasCost":2,"op":"CALLDATASIZE","pc":55,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30477838,"gasCost":3,"op":"PUSH1","pc":56,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30477835,"gasCost":3,"op":"PUSH2","pc":58,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477832,"gasCost":8,"op":"JUMP","pc":61,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ab"],"storage":{}},{"depth":1,"gas":30477824,"gasCost":1,"op":"JUMPDEST","pc":171,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477823,"gasCost":3,"op":"PUSH1","pc":172,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477820,"gasCost":3,"op":"DUP1","pc":174,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477817,"gasCost":3,"op":"PUSH1","pc":175,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477814,"gasCost":3,"op":"PUSH1","pc":177,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477811,"gasCost":3,"op":"DUP5","pc":179,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477808,"gasCost":3,"op":"DUP7","pc":180,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477805,"gasCost":3,"op":"SUB","pc":181,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30477802,"gasCost":3,"op":"SLT","pc":182,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30477799,"gasCost":3,"op":"ISZERO","pc":183,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477796,"gasCost":3,"op":"PUSH2","pc":184,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477793,"gasCost":10,"op":"JUMPI","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30477783,"gasCost":1,"op":"JUMPDEST","pc":192,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477782,"gasCost":3,"op":"DUP4","pc":193,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477779,"gasCost":3,"op":"CALLDATALOAD","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477776,"gasCost":3,"op":"SWAP3","pc":195,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30477773,"gasCost":2,"op":"POP","pc":196,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477771,"gasCost":3,"op":"PUSH1","pc":197,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477768,"gasCost":3,"op":"DUP5","pc":199,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477765,"gasCost":3,"op":"ADD","pc":200,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477762,"gasCost":3,"op":"CALLDATALOAD","pc":201,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30477759,"gasCost":3,"op":"PUSH8","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477756,"gasCost":3,"op":"DUP1","pc":211,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477753,"gasCost":3,"op":"DUP3","pc":212,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477750,"gasCost":3,"op":"GT","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477747,"gasCost":3,"op":"ISZERO","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477744,"gasCost":3,"op":"PUSH2","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477741,"gasCost":10,"op":"JUMPI","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000df"],"storage":{}},{"depth":1,"gas":30477731,"gasCost":1,"op":"JUMPDEST","pc":223,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477730,"gasCost":3,"op":"DUP2","pc":224,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477727,"gasCost":3,"op":"DUP7","pc":225,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477724,"gasCost":3,"op":"ADD","pc":226,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477721,"gasCost":3,"op":"SWAP2","pc":227,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30477718,"gasCost":2,"op":"POP","pc":228,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477716,"gasCost":3,"op":"DUP7","pc":229,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477713,"gasCost":3,"op":"PUSH1","pc":230,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30477710,"gasCost":3,"op":"DUP4","pc":232,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","00000000000000000000000000000000000000000000000000000000000000e4","000000000000000000000000000000000000000000000000000000000000001f"],"storage":{}},{"depth":1,"gas":30477707,"gasCost":3,"op":"ADD","pc":233,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","00000000000000000000000000000000000000000000000000000000000000e4","000000000000000000000000000000000000000000000000000000000000001f","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30477704,"gasCost":3,"op":"SLT","pc":234,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000063"],"storage":{}},{"depth":1,"gas":30477701,"gasCost":3,"op":"PUSH2","pc":235,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477698,"gasCost":10,"op":"JUMPI","pc":238,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f3"],"storage":{}},{"depth":1,"gas":30477688,"gasCost":1,"op":"JUMPDEST","pc":243,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477687,"gasCost":3,"op":"DUP2","pc":244,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477684,"gasCost":3,"op":"CALLDATALOAD","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30477681,"gasCost":3,"op":"DUP2","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477678,"gasCost":3,"op":"DUP2","pc":247,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477675,"gasCost":3,"op":"GT","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477672,"gasCost":3,"op":"ISZERO","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477669,"gasCost":3,"op":"PUSH2","pc":250,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477666,"gasCost":10,"op":"JUMPI","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000102"],"storage":{}},{"depth":1,"gas":30477656,"gasCost":1,"op":"JUMPDEST","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477655,"gasCost":3,"op":"DUP8","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477652,"gasCost":3,"op":"PUSH1","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30477649,"gasCost":3,"op":"DUP3","pc":262,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477646,"gasCost":3,"op":"PUSH1","pc":263,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477643,"gasCost":3,"op":"SHL","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30477640,"gasCost":3,"op":"DUP6","pc":266,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477637,"gasCost":3,"op":"ADD","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30477634,"gasCost":3,"op":"ADD","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30477631,"gasCost":3,"op":"GT","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30477628,"gasCost":3,"op":"ISZERO","pc":270,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477625,"gasCost":3,"op":"PUSH2","pc":271,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477622,"gasCost":10,"op":"JUMPI","pc":274,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000117"],"storage":{}},{"depth":1,"gas":30477612,"gasCost":1,"op":"JUMPDEST","pc":279,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477611,"gasCost":3,"op":"PUSH1","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477608,"gasCost":3,"op":"DUP4","pc":282,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477605,"gasCost":3,"op":"ADD","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30477602,"gasCost":3,"op":"SWAP5","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30477599,"gasCost":2,"op":"POP","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477597,"gasCost":3,"op":"DUP1","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477594,"gasCost":3,"op":"SWAP4","pc":287,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477591,"gasCost":2,"op":"POP","pc":288,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477589,"gasCost":2,"op":"POP","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477587,"gasCost":2,"op":"POP","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477585,"gasCost":2,"op":"POP","pc":291,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30477583,"gasCost":3,"op":"SWAP3","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477580,"gasCost":2,"op":"POP","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477578,"gasCost":3,"op":"SWAP3","pc":294,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30477575,"gasCost":2,"op":"POP","pc":295,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30477573,"gasCost":3,"op":"SWAP3","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30477570,"gasCost":8,"op":"JUMP","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30477562,"gasCost":1,"op":"JUMPDEST","pc":62,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477561,"gasCost":3,"op":"PUSH2","pc":63,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477558,"gasCost":8,"op":"JUMP","pc":66,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000045"],"storage":{}},{"depth":1,"gas":30477550,"gasCost":1,"op":"JUMPDEST","pc":69,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477549,"gasCost":3,"op":"PUSH1","pc":70,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477546,"gasCost":3,"op":"DUP1","pc":72,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477543,"gasCost":1,"op":"JUMPDEST","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477542,"gasCost":3,"op":"PUSH1","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477539,"gasCost":3,"op":"DUP2","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30477536,"gasCost":3,"op":"AND","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477533,"gasCost":3,"op":"DUP4","pc":78,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477530,"gasCost":3,"op":"GT","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477527,"gasCost":3,"op":"ISZERO","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477524,"gasCost":3,"op":"PUSH2","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477521,"gasCost":10,"op":"JUMPI","pc":84,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477511,"gasCost":3,"op":"PUSH1","pc":85,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477508,"gasCost":3,"op":"DUP5","pc":87,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477505,"gasCost":3,"op":"DUP5","pc":88,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30477502,"gasCost":3,"op":"DUP4","pc":89,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477499,"gasCost":3,"op":"PUSH1","pc":90,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477496,"gasCost":3,"op":"AND","pc":92,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30477493,"gasCost":3,"op":"DUP2","pc":93,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477490,"gasCost":3,"op":"DUP2","pc":94,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477487,"gasCost":3,"op":"LT","pc":95,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477484,"gasCost":3,"op":"PUSH2","pc":96,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477481,"gasCost":10,"op":"JUMPI","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000006b"],"storage":{}},{"depth":1,"gas":30477471,"gasCost":1,"op":"JUMPDEST","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477470,"gasCost":3,"op":"SWAP1","pc":108,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477467,"gasCost":2,"op":"POP","pc":109,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477465,"gasCost":3,"op":"PUSH1","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477462,"gasCost":5,"op":"MUL","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477457,"gasCost":3,"op":"ADD","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477454,"gasCost":3,"op":"CALLDATALOAD","pc":114,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30477451,"gasCost":3,"op":"SWAP1","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477448,"gasCost":2,"op":"POP","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477446,"gasCost":3,"op":"DUP1","pc":117,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477443,"gasCost":3,"op":"DUP7","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477440,"gasCost":10,"op":"EXP","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30477430,"gasCost":3,"op":"SWAP3","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477427,"gasCost":2,"op":"POP","pc":121,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477425,"gasCost":3,"op":"DUP3","pc":122,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477422,"gasCost":3,"op":"PUSH1","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477419,"gasCost":3,"op":"DUP1","pc":125,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477416,"gasCost":3,"op":"DUP3","pc":126,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477413,"gasCost":3,"op":"DUP3","pc":127,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477410,"gasCost":2100,"op":"SLOAD","pc":128,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475310,"gasCost":3,"op":"PUSH2","pc":129,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475307,"gasCost":3,"op":"SWAP2","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475304,"gasCost":3,"op":"SWAP1","pc":133,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475301,"gasCost":3,"op":"PUSH2","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475298,"gasCost":8,"op":"JUMP","pc":137,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000156"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475290,"gasCost":1,"op":"JUMPDEST","pc":342,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475289,"gasCost":3,"op":"DUP1","pc":343,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475286,"gasCost":3,"op":"DUP3","pc":344,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475283,"gasCost":3,"op":"ADD","pc":345,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475280,"gasCost":3,"op":"DUP1","pc":346,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475277,"gasCost":3,"op":"DUP3","pc":347,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475274,"gasCost":3,"op":"GT","pc":348,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475271,"gasCost":3,"op":"ISZERO","pc":349,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475268,"gasCost":3,"op":"PUSH2","pc":350,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475265,"gasCost":10,"op":"JUMPI","pc":353,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000169"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475255,"gasCost":1,"op":"JUMPDEST","pc":361,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475254,"gasCost":3,"op":"SWAP3","pc":362,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475251,"gasCost":3,"op":"SWAP2","pc":363,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475248,"gasCost":2,"op":"POP","pc":364,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475246,"gasCost":2,"op":"POP","pc":365,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475244,"gasCost":8,"op":"JUMP","pc":366,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475236,"gasCost":1,"op":"JUMPDEST","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475235,"gasCost":3,"op":"SWAP1","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475232,"gasCost":3,"op":"SWAP2","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475229,"gasCost":20000,"op":"SSTORE","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455229,"gasCost":2,"op":"POP","pc":142,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455227,"gasCost":3,"op":"DUP3","pc":143,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455224,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455221,"gasCost":2,"op":"POP","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455219,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455216,"gasCost":3,"op":"SWAP1","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455213,"gasCost":2,"op":"POP","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455211,"gasCost":3,"op":"DUP2","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455208,"gasCost":3,"op":"PUSH2","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455205,"gasCost":8,"op":"JUMP","pc":155,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000016f"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455197,"gasCost":1,"op":"JUMPDEST","pc":367,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455196,"gasCost":3,"op":"PUSH1","pc":368,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455193,"gasCost":3,"op":"PUSH1","pc":370,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455190,"gasCost":3,"op":"DUP3","pc":372,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455187,"gasCost":3,"op":"AND","pc":373,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455184,"gasCost":3,"op":"PUSH1","pc":374,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455181,"gasCost":3,"op":"DUP2","pc":376,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455178,"gasCost":3,"op":"SUB","pc":377,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455175,"gasCost":3,"op":"PUSH2","pc":378,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455172,"gasCost":10,"op":"JUMPI","pc":381,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01","0000000000000000000000000000000000000000000000000000000000000185"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455162,"gasCost":1,"op":"JUMPDEST","pc":389,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455161,"gasCost":3,"op":"PUSH1","pc":390,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455158,"gasCost":3,"op":"ADD","pc":392,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455155,"gasCost":3,"op":"SWAP3","pc":393,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455152,"gasCost":3,"op":"SWAP2","pc":394,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455149,"gasCost":2,"op":"POP","pc":395,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455147,"gasCost":2,"op":"POP","pc":396,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455145,"gasCost":8,"op":"JUMP","pc":397,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455137,"gasCost":1,"op":"JUMPDEST","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455136,"gasCost":3,"op":"SWAP2","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455133,"gasCost":2,"op":"POP","pc":158,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455131,"gasCost":2,"op":"POP","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455129,"gasCost":3,"op":"PUSH2","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455126,"gasCost":8,"op":"JUMP","pc":163,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000049"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455118,"gasCost":1,"op":"JUMPDEST","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455117,"gasCost":3,"op":"PUSH1","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455114,"gasCost":3,"op":"DUP2","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455111,"gasCost":3,"op":"AND","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455108,"gasCost":3,"op":"DUP4","pc":78,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455105,"gasCost":3,"op":"GT","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455102,"gasCost":3,"op":"ISZERO","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455099,"gasCost":3,"op":"PUSH2","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455096,"gasCost":10,"op":"JUMPI","pc":84,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455086,"gasCost":3,"op":"PUSH1","pc":85,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455083,"gasCost":3,"op":"DUP5","pc":87,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455080,"gasCost":3,"op":"DUP5","pc":88,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455077,"gasCost":3,"op":"DUP4","pc":89,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455074,"gasCost":3,"op":"PUSH1","pc":90,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455071,"gasCost":3,"op":"AND","pc":92,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455068,"gasCost":3,"op":"DUP2","pc":93,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455065,"gasCost":3,"op":"DUP2","pc":94,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455062,"gasCost":3,"op":"LT","pc":95,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455059,"gasCost":3,"op":"PUSH2","pc":96,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455056,"gasCost":10,"op":"JUMPI","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000006b"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455046,"gasCost":1,"op":"JUMPDEST","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455045,"gasCost":3,"op":"SWAP1","pc":108,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455042,"gasCost":2,"op":"POP","pc":109,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455040,"gasCost":3,"op":"PUSH1","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455037,"gasCost":5,"op":"MUL","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455032,"gasCost":3,"op":"ADD","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455029,"gasCost":3,"op":"CALLDATALOAD","pc":114,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455026,"gasCost":3,"op":"SWAP1","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455023,"gasCost":2,"op":"POP","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455021,"gasCost":3,"op":"DUP1","pc":117,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455018,"gasCost":3,"op":"DUP7","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30455015,"gasCost":60,"op":"EXP","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454955,"gasCost":3,"op":"SWAP3","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454952,"gasCost":2,"op":"POP","pc":121,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454950,"gasCost":3,"op":"DUP3","pc":122,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454947,"gasCost":3,"op":"PUSH1","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454944,"gasCost":3,"op":"DUP1","pc":125,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454941,"gasCost":3,"op":"DUP3","pc":126,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454938,"gasCost":3,"op":"DUP3","pc":127,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454935,"gasCost":100,"op":"SLOAD","pc":128,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454835,"gasCost":3,"op":"PUSH2","pc":129,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454832,"gasCost":3,"op":"SWAP2","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454829,"gasCost":3,"op":"SWAP1","pc":133,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454826,"gasCost":3,"op":"PUSH2","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454823,"gasCost":8,"op":"JUMP","pc":137,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000156"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454815,"gasCost":1,"op":"JUMPDEST","pc":342,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454814,"gasCost":3,"op":"DUP1","pc":343,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454811,"gasCost":3,"op":"DUP3","pc":344,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454808,"gasCost":3,"op":"ADD","pc":345,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454805,"gasCost":3,"op":"DUP1","pc":346,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454802,"gasCost":3,"op":"DUP3","pc":347,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454799,"gasCost":3,"op":"GT","pc":348,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454796,"gasCost":3,"op":"ISZERO","pc":349,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454793,"gasCost":3,"op":"PUSH2","pc":350,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454790,"gasCost":10,"op":"JUMPI","pc":353,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000169"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454780,"gasCost":1,"op":"JUMPDEST","pc":361,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454779,"gasCost":3,"op":"SWAP3","pc":362,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454776,"gasCost":3,"op":"SWAP2","pc":363,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454773,"gasCost":2,"op":"POP","pc":364,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454771,"gasCost":2,"op":"POP","pc":365,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454769,"gasCost":8,"op":"JUMP","pc":366,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454761,"gasCost":1,"op":"JUMPDEST","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454760,"gasCost":3,"op":"SWAP1","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454757,"gasCost":3,"op":"SWAP2","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30454754,"gasCost":100,"op":"SSTORE","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454654,"gasCost":2,"op":"POP","pc":142,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454652,"gasCost":3,"op":"DUP3","pc":143,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454649,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454646,"gasCost":2,"op":"POP","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454644,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454641,"gasCost":3,"op":"SWAP1","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454638,"gasCost":2,"op":"POP","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454636,"gasCost":3,"op":"DUP2","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454633,"gasCost":3,"op":"PUSH2","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454630,"gasCost":8,"op":"JUMP","pc":155,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000016f"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454622,"gasCost":1,"op":"JUMPDEST","pc":367,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454621,"gasCost":3,"op":"PUSH1","pc":368,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454618,"gasCost":3,"op":"PUSH1","pc":370,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454615,"gasCost":3,"op":"DUP3","pc":372,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454612,"gasCost":3,"op":"AND","pc":373,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454609,"gasCost":3,"op":"PUSH1","pc":374,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454606,"gasCost":3,"op":"DUP2","pc":376,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454603,"gasCost":3,"op":"SUB","pc":377,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454600,"gasCost":3,"op":"PUSH2","pc":378,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454597,"gasCost":10,"op":"JUMPI","pc":381,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02","0000000000000000000000000000000000000000000000000000000000000185"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454587,"gasCost":1,"op":"JUMPDEST","pc":389,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454586,"gasCost":3,"op":"PUSH1","pc":390,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454583,"gasCost":3,"op":"ADD","pc":392,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454580,"gasCost":3,"op":"SWAP3","pc":393,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454577,"gasCost":3,"op":"SWAP2","pc":394,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454574,"gasCost":2,"op":"POP","pc":395,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454572,"gasCost":2,"op":"POP","pc":396,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454570,"gasCost":8,"op":"JUMP","pc":397,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454562,"gasCost":1,"op":"JUMPDEST","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454561,"gasCost":3,"op":"SWAP2","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454558,"gasCost":2,"op":"POP","pc":158,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454556,"gasCost":2,"op":"POP","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454554,"gasCost":3,"op":"PUSH2","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454551,"gasCost":8,"op":"JUMP","pc":163,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000049"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454543,"gasCost":1,"op":"JUMPDEST","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454542,"gasCost":3,"op":"PUSH1","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454539,"gasCost":3,"op":"DUP2","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454536,"gasCost":3,"op":"AND","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454533,"gasCost":3,"op":"DUP4","pc":78,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454530,"gasCost":3,"op":"GT","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454527,"gasCost":3,"op":"ISZERO","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454524,"gasCost":3,"op":"PUSH2","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454521,"gasCost":10,"op":"JUMPI","pc":84,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454511,"gasCost":3,"op":"PUSH1","pc":85,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454508,"gasCost":3,"op":"DUP5","pc":87,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454505,"gasCost":3,"op":"DUP5","pc":88,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454502,"gasCost":3,"op":"DUP4","pc":89,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454499,"gasCost":3,"op":"PUSH1","pc":90,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454496,"gasCost":3,"op":"AND","pc":92,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454493,"gasCost":3,"op":"DUP2","pc":93,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454490,"gasCost":3,"op":"DUP2","pc":94,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454487,"gasCost":3,"op":"LT","pc":95,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454484,"gasCost":3,"op":"PUSH2","pc":96,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454481,"gasCost":10,"op":"JUMPI","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000006b"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454471,"gasCost":1,"op":"JUMPDEST","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454470,"gasCost":3,"op":"SWAP1","pc":108,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454467,"gasCost":2,"op":"POP","pc":109,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454465,"gasCost":3,"op":"PUSH1","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454462,"gasCost":5,"op":"MUL","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454457,"gasCost":3,"op":"ADD","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454454,"gasCost":3,"op":"CALLDATALOAD","pc":114,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454451,"gasCost":3,"op":"SWAP1","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454448,"gasCost":2,"op":"POP","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454446,"gasCost":3,"op":"DUP1","pc":117,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454443,"gasCost":3,"op":"DUP7","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454440,"gasCost":60,"op":"EXP","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454380,"gasCost":3,"op":"SWAP3","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454377,"gasCost":2,"op":"POP","pc":121,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454375,"gasCost":3,"op":"DUP3","pc":122,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454372,"gasCost":3,"op":"PUSH1","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454369,"gasCost":3,"op":"DUP1","pc":125,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454366,"gasCost":3,"op":"DUP3","pc":126,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454363,"gasCost":3,"op":"DUP3","pc":127,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454360,"gasCost":100,"op":"SLOAD","pc":128,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454260,"gasCost":3,"op":"PUSH2","pc":129,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454257,"gasCost":3,"op":"SWAP2","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454254,"gasCost":3,"op":"SWAP1","pc":133,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454251,"gasCost":3,"op":"PUSH2","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454248,"gasCost":8,"op":"JUMP","pc":137,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000156"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454240,"gasCost":1,"op":"JUMPDEST","pc":342,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454239,"gasCost":3,"op":"DUP1","pc":343,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454236,"gasCost":3,"op":"DUP3","pc":344,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454233,"gasCost":3,"op":"ADD","pc":345,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454230,"gasCost":3,"op":"DUP1","pc":346,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454227,"gasCost":3,"op":"DUP3","pc":347,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454224,"gasCost":3,"op":"GT","pc":348,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454221,"gasCost":3,"op":"ISZERO","pc":349,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454218,"gasCost":3,"op":"PUSH2","pc":350,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454215,"gasCost":10,"op":"JUMPI","pc":353,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000169"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454205,"gasCost":1,"op":"JUMPDEST","pc":361,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454204,"gasCost":3,"op":"SWAP3","pc":362,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454201,"gasCost":3,"op":"SWAP2","pc":363,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454198,"gasCost":2,"op":"POP","pc":364,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454196,"gasCost":2,"op":"POP","pc":365,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454194,"gasCost":8,"op":"JUMP","pc":366,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454186,"gasCost":1,"op":"JUMPDEST","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454185,"gasCost":3,"op":"SWAP1","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454182,"gasCost":3,"op":"SWAP2","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000003"}},{"depth":1,"gas":30454179,"gasCost":100,"op":"SSTORE","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454079,"gasCost":2,"op":"POP","pc":142,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454077,"gasCost":3,"op":"DUP3","pc":143,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454074,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454071,"gasCost":2,"op":"POP","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454069,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454066,"gasCost":3,"op":"SWAP1","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454063,"gasCost":2,"op":"POP","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454061,"gasCost":3,"op":"DUP2","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454058,"gasCost":3,"op":"PUSH2","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454055,"gasCost":8,"op":"JUMP","pc":155,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000016f"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454047,"gasCost":1,"op":"JUMPDEST","pc":367,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454046,"gasCost":3,"op":"PUSH1","pc":368,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454043,"gasCost":3,"op":"PUSH1","pc":370,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454040,"gasCost":3,"op":"DUP3","pc":372,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454037,"gasCost":3,"op":"AND","pc":373,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454034,"gasCost":3,"op":"PUSH1","pc":374,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454031,"gasCost":3,"op":"DUP2","pc":376,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454028,"gasCost":3,"op":"SUB","pc":377,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454025,"gasCost":3,"op":"PUSH2","pc":378,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454022,"gasCost":10,"op":"JUMPI","pc":381,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03","0000000000000000000000000000000000000000000000000000000000000185"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454012,"gasCost":1,"op":"JUMPDEST","pc":389,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454011,"gasCost":3,"op":"PUSH1","pc":390,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454008,"gasCost":3,"op":"ADD","pc":392,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454005,"gasCost":3,"op":"SWAP3","pc":393,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30454002,"gasCost":3,"op":"SWAP2","pc":394,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453999,"gasCost":2,"op":"POP","pc":395,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453997,"gasCost":2,"op":"POP","pc":396,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453995,"gasCost":8,"op":"JUMP","pc":397,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453987,"gasCost":1,"op":"JUMPDEST","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453986,"gasCost":3,"op":"SWAP2","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453983,"gasCost":2,"op":"POP","pc":158,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453981,"gasCost":2,"op":"POP","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453979,"gasCost":3,"op":"PUSH2","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453976,"gasCost":8,"op":"JUMP","pc":163,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000049"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453968,"gasCost":1,"op":"JUMPDEST","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453967,"gasCost":3,"op":"PUSH1","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453964,"gasCost":3,"op":"DUP2","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453961,"gasCost":3,"op":"AND","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453958,"gasCost":3,"op":"DUP4","pc":78,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453955,"gasCost":3,"op":"GT","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453952,"gasCost":3,"op":"ISZERO","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453949,"gasCost":3,"op":"PUSH2","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453946,"gasCost":10,"op":"JUMPI","pc":84,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453936,"gasCost":3,"op":"PUSH1","pc":85,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453933,"gasCost":3,"op":"DUP5","pc":87,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453930,"gasCost":3,"op":"DUP5","pc":88,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453927,"gasCost":3,"op":"DUP4","pc":89,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453924,"gasCost":3,"op":"PUSH1","pc":90,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453921,"gasCost":3,"op":"AND","pc":92,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453918,"gasCost":3,"op":"DUP2","pc":93,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453915,"gasCost":3,"op":"DUP2","pc":94,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453912,"gasCost":3,"op":"LT","pc":95,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453909,"gasCost":3,"op":"PUSH2","pc":96,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453906,"gasCost":10,"op":"JUMPI","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000006b"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453896,"gasCost":1,"op":"JUMPDEST","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453895,"gasCost":3,"op":"SWAP1","pc":108,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453892,"gasCost":2,"op":"POP","pc":109,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453890,"gasCost":3,"op":"PUSH1","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453887,"gasCost":5,"op":"MUL","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453882,"gasCost":3,"op":"ADD","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000060"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453879,"gasCost":3,"op":"CALLDATALOAD","pc":114,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453876,"gasCost":3,"op":"SWAP1","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000012334"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453873,"gasCost":2,"op":"POP","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453871,"gasCost":3,"op":"DUP1","pc":117,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453868,"gasCost":3,"op":"DUP7","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000012334"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453865,"gasCost":160,"op":"EXP","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453705,"gasCost":3,"op":"SWAP3","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453702,"gasCost":2,"op":"POP","pc":121,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453700,"gasCost":3,"op":"DUP3","pc":122,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453697,"gasCost":3,"op":"PUSH1","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453694,"gasCost":3,"op":"DUP1","pc":125,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453691,"gasCost":3,"op":"DUP3","pc":126,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453688,"gasCost":3,"op":"DUP3","pc":127,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453685,"gasCost":100,"op":"SLOAD","pc":128,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453585,"gasCost":3,"op":"PUSH2","pc":129,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453582,"gasCost":3,"op":"SWAP2","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453579,"gasCost":3,"op":"SWAP1","pc":133,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453576,"gasCost":3,"op":"PUSH2","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453573,"gasCost":8,"op":"JUMP","pc":137,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000156"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453565,"gasCost":1,"op":"JUMPDEST","pc":342,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453564,"gasCost":3,"op":"DUP1","pc":343,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453561,"gasCost":3,"op":"DUP3","pc":344,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453558,"gasCost":3,"op":"ADD","pc":345,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453555,"gasCost":3,"op":"DUP1","pc":346,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453552,"gasCost":3,"op":"DUP3","pc":347,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453549,"gasCost":3,"op":"GT","pc":348,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453546,"gasCost":3,"op":"ISZERO","pc":349,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453543,"gasCost":3,"op":"PUSH2","pc":350,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453540,"gasCost":10,"op":"JUMPI","pc":353,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000169"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453530,"gasCost":1,"op":"JUMPDEST","pc":361,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453529,"gasCost":3,"op":"SWAP3","pc":362,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453526,"gasCost":3,"op":"SWAP2","pc":363,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453523,"gasCost":2,"op":"POP","pc":364,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453521,"gasCost":2,"op":"POP","pc":365,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453519,"gasCost":8,"op":"JUMP","pc":366,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000008a"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453511,"gasCost":1,"op":"JUMPDEST","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453510,"gasCost":3,"op":"SWAP1","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453507,"gasCost":3,"op":"SWAP2","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453504,"gasCost":100,"op":"SSTORE","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453404,"gasCost":2,"op":"POP","pc":142,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453402,"gasCost":3,"op":"DUP3","pc":143,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453399,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000012334","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453396,"gasCost":2,"op":"POP","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000012334"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453394,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453391,"gasCost":3,"op":"SWAP1","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453388,"gasCost":2,"op":"POP","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453386,"gasCost":3,"op":"DUP2","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453383,"gasCost":3,"op":"PUSH2","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453380,"gasCost":8,"op":"JUMP","pc":155,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000016f"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453372,"gasCost":1,"op":"JUMPDEST","pc":367,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453371,"gasCost":3,"op":"PUSH1","pc":368,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453368,"gasCost":3,"op":"PUSH1","pc":370,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453365,"gasCost":3,"op":"DUP3","pc":372,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453362,"gasCost":3,"op":"AND","pc":373,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453359,"gasCost":3,"op":"PUSH1","pc":374,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453356,"gasCost":3,"op":"DUP2","pc":376,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453353,"gasCost":3,"op":"SUB","pc":377,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453350,"gasCost":3,"op":"PUSH2","pc":378,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453347,"gasCost":10,"op":"JUMPI","pc":381,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04","0000000000000000000000000000000000000000000000000000000000000185"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453337,"gasCost":1,"op":"JUMPDEST","pc":389,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453336,"gasCost":3,"op":"PUSH1","pc":390,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453333,"gasCost":3,"op":"ADD","pc":392,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453330,"gasCost":3,"op":"SWAP3","pc":393,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453327,"gasCost":3,"op":"SWAP2","pc":394,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453324,"gasCost":2,"op":"POP","pc":395,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453322,"gasCost":2,"op":"POP","pc":396,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000009c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453320,"gasCost":8,"op":"JUMP","pc":397,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000009c"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453312,"gasCost":1,"op":"JUMPDEST","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453311,"gasCost":3,"op":"SWAP2","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453308,"gasCost":2,"op":"POP","pc":158,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453306,"gasCost":2,"op":"POP","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453304,"gasCost":3,"op":"PUSH2","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453301,"gasCost":8,"op":"JUMP","pc":163,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000049"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453293,"gasCost":1,"op":"JUMPDEST","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453292,"gasCost":3,"op":"PUSH1","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453289,"gasCost":3,"op":"DUP2","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453286,"gasCost":3,"op":"AND","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453283,"gasCost":3,"op":"DUP4","pc":78,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453280,"gasCost":3,"op":"GT","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453277,"gasCost":3,"op":"ISZERO","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453274,"gasCost":3,"op":"PUSH2","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453271,"gasCost":10,"op":"JUMPI","pc":84,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453261,"gasCost":1,"op":"JUMPDEST","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453260,"gasCost":2,"op":"POP","pc":165,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453258,"gasCost":2,"op":"POP","pc":166,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453256,"gasCost":2,"op":"POP","pc":167,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453254,"gasCost":2,"op":"POP","pc":168,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453252,"gasCost":2,"op":"POP","pc":169,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453250,"gasCost":8,"op":"JUMP","pc":170,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453242,"gasCost":1,"op":"JUMPDEST","pc":67,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}},{"depth":1,"gas":30453241,"gasCost":0,"op":"STOP","pc":68,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000002c72328b"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000007"}}]}} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/keccak/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/keccak/contract0.json new file mode 100644 index 0000000000..4c1cf1db47 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/keccak/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806316c3b46414610030575b600080fd5b61005261003e36600461007a565b600080548251602090930192909220905590565b60405190815260200160405180910390f35b634e487b7160e01b600052604160045260246000fd5b60006020828403121561008c57600080fd5b813567ffffffffffffffff808211156100a457600080fd5b818401915084601f8301126100b857600080fd5b8135818111156100ca576100ca610064565b604051601f8201601f19908116603f011681019083821181831017156100f2576100f2610064565b8160405282815287602084870101111561010b57600080fd5b82602086016020830137600092810160200192909252509594505050505056"} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/keccak/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/keccak/trace0.json new file mode 100644 index 0000000000..f885707803 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/keccak/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"failed":false,"gas":44355,"returnValue":"0x0000000000000000000000000000000000000000000000000000000000000000","structLogs":[{"depth":1,"gas":30478372,"gasCost":3,"op":"PUSH1","pc":0,"memory":[],"stack":[],"storage":{}},{"depth":1,"gas":30478369,"gasCost":3,"op":"PUSH1","pc":2,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478366,"gasCost":12,"op":"MSTORE","pc":4,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30478354,"gasCost":2,"op":"CALLVALUE","pc":5,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30478352,"gasCost":3,"op":"DUP1","pc":6,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478349,"gasCost":3,"op":"ISZERO","pc":7,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478346,"gasCost":3,"op":"PUSH2","pc":8,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478343,"gasCost":10,"op":"JUMPI","pc":11,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30478333,"gasCost":1,"op":"JUMPDEST","pc":16,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478332,"gasCost":2,"op":"POP","pc":17,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478330,"gasCost":3,"op":"PUSH1","pc":18,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30478327,"gasCost":2,"op":"CALLDATASIZE","pc":20,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478325,"gasCost":3,"op":"LT","pc":21,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30478322,"gasCost":3,"op":"PUSH2","pc":22,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478319,"gasCost":10,"op":"JUMPI","pc":25,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000002b"],"storage":{}},{"depth":1,"gas":30478309,"gasCost":3,"op":"PUSH1","pc":26,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30478306,"gasCost":3,"op":"CALLDATALOAD","pc":28,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478303,"gasCost":3,"op":"PUSH1","pc":29,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["16c3b46400000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478300,"gasCost":3,"op":"SHR","pc":31,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["16c3b46400000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30478297,"gasCost":3,"op":"DUP1","pc":32,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464"],"storage":{}},{"depth":1,"gas":30478294,"gasCost":3,"op":"PUSH4","pc":33,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000016c3b464"],"storage":{}},{"depth":1,"gas":30478291,"gasCost":3,"op":"EQ","pc":38,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000016c3b464"],"storage":{}},{"depth":1,"gas":30478288,"gasCost":3,"op":"PUSH2","pc":39,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478285,"gasCost":10,"op":"JUMPI","pc":42,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000030"],"storage":{}},{"depth":1,"gas":30478275,"gasCost":1,"op":"JUMPDEST","pc":48,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464"],"storage":{}},{"depth":1,"gas":30478274,"gasCost":3,"op":"PUSH2","pc":49,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464"],"storage":{}},{"depth":1,"gas":30478271,"gasCost":3,"op":"PUSH2","pc":52,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052"],"storage":{}},{"depth":1,"gas":30478268,"gasCost":2,"op":"CALLDATASIZE","pc":55,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30478266,"gasCost":3,"op":"PUSH1","pc":56,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30478263,"gasCost":3,"op":"PUSH2","pc":58,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478260,"gasCost":8,"op":"JUMP","pc":61,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000007a"],"storage":{}},{"depth":1,"gas":30478252,"gasCost":1,"op":"JUMPDEST","pc":122,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478251,"gasCost":3,"op":"PUSH1","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478248,"gasCost":3,"op":"PUSH1","pc":125,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478245,"gasCost":3,"op":"DUP3","pc":127,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478242,"gasCost":3,"op":"DUP5","pc":128,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478239,"gasCost":3,"op":"SUB","pc":129,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30478236,"gasCost":3,"op":"SLT","pc":130,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000060"],"storage":{}},{"depth":1,"gas":30478233,"gasCost":3,"op":"ISZERO","pc":131,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478230,"gasCost":3,"op":"PUSH2","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478227,"gasCost":10,"op":"JUMPI","pc":135,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000008c"],"storage":{}},{"depth":1,"gas":30478217,"gasCost":1,"op":"JUMPDEST","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478216,"gasCost":3,"op":"DUP2","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478213,"gasCost":3,"op":"CALLDATALOAD","pc":142,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478210,"gasCost":3,"op":"PUSH8","pc":143,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478207,"gasCost":3,"op":"DUP1","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478204,"gasCost":3,"op":"DUP3","pc":153,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478201,"gasCost":3,"op":"GT","pc":154,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478198,"gasCost":3,"op":"ISZERO","pc":155,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478195,"gasCost":3,"op":"PUSH2","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478192,"gasCost":10,"op":"JUMPI","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30478182,"gasCost":1,"op":"JUMPDEST","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478181,"gasCost":3,"op":"DUP2","pc":165,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478178,"gasCost":3,"op":"DUP5","pc":166,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478175,"gasCost":3,"op":"ADD","pc":167,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478172,"gasCost":3,"op":"SWAP2","pc":168,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30478169,"gasCost":2,"op":"POP","pc":169,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478167,"gasCost":3,"op":"DUP5","pc":170,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478164,"gasCost":3,"op":"PUSH1","pc":171,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30478161,"gasCost":3,"op":"DUP4","pc":173,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064","000000000000000000000000000000000000000000000000000000000000001f"],"storage":{}},{"depth":1,"gas":30478158,"gasCost":3,"op":"ADD","pc":174,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064","000000000000000000000000000000000000000000000000000000000000001f","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30478155,"gasCost":3,"op":"SLT","pc":175,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{}},{"depth":1,"gas":30478152,"gasCost":3,"op":"PUSH2","pc":176,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478149,"gasCost":10,"op":"JUMPI","pc":179,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000b8"],"storage":{}},{"depth":1,"gas":30478139,"gasCost":1,"op":"JUMPDEST","pc":184,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478138,"gasCost":3,"op":"DUP2","pc":185,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478135,"gasCost":3,"op":"CALLDATALOAD","pc":186,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30478132,"gasCost":3,"op":"DUP2","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30478129,"gasCost":3,"op":"DUP2","pc":188,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478126,"gasCost":3,"op":"GT","pc":189,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30478123,"gasCost":3,"op":"ISZERO","pc":190,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478120,"gasCost":3,"op":"PUSH2","pc":191,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478117,"gasCost":10,"op":"JUMPI","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ca"],"storage":{}},{"depth":1,"gas":30478107,"gasCost":1,"op":"JUMPDEST","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30478106,"gasCost":3,"op":"PUSH1","pc":203,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30478103,"gasCost":3,"op":"MLOAD","pc":205,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30478100,"gasCost":3,"op":"PUSH1","pc":206,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478097,"gasCost":3,"op":"DUP3","pc":208,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001f"],"storage":{}},{"depth":1,"gas":30478094,"gasCost":3,"op":"ADD","pc":209,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001f","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30478091,"gasCost":3,"op":"PUSH1","pc":210,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002c"],"storage":{}},{"depth":1,"gas":30478088,"gasCost":3,"op":"NOT","pc":212,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002c","000000000000000000000000000000000000000000000000000000000000001f"],"storage":{}},{"depth":1,"gas":30478085,"gasCost":3,"op":"SWAP1","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002c","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"],"storage":{}},{"depth":1,"gas":30478082,"gasCost":3,"op":"DUP2","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0","000000000000000000000000000000000000000000000000000000000000002c"],"storage":{}},{"depth":1,"gas":30478079,"gasCost":3,"op":"AND","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0","000000000000000000000000000000000000000000000000000000000000002c","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"],"storage":{}},{"depth":1,"gas":30478076,"gasCost":3,"op":"PUSH1","pc":216,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478073,"gasCost":3,"op":"ADD","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000003f"],"storage":{}},{"depth":1,"gas":30478070,"gasCost":3,"op":"AND","pc":219,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0","000000000000000000000000000000000000000000000000000000000000005f"],"storage":{}},{"depth":1,"gas":30478067,"gasCost":3,"op":"DUP2","pc":220,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30478064,"gasCost":3,"op":"ADD","pc":221,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478061,"gasCost":3,"op":"SWAP1","pc":222,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30478058,"gasCost":3,"op":"DUP4","pc":223,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478055,"gasCost":3,"op":"DUP3","pc":224,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30478052,"gasCost":3,"op":"GT","pc":225,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000ffffffffffffffff","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30478049,"gasCost":3,"op":"DUP2","pc":226,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478046,"gasCost":3,"op":"DUP4","pc":227,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478043,"gasCost":3,"op":"LT","pc":228,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30478040,"gasCost":3,"op":"OR","pc":229,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478037,"gasCost":3,"op":"ISZERO","pc":230,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478034,"gasCost":3,"op":"PUSH2","pc":231,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478031,"gasCost":10,"op":"JUMPI","pc":234,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f2"],"storage":{}},{"depth":1,"gas":30478021,"gasCost":1,"op":"JUMPDEST","pc":242,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478020,"gasCost":3,"op":"DUP2","pc":243,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478017,"gasCost":3,"op":"PUSH1","pc":244,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30478014,"gasCost":3,"op":"MSTORE","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30478011,"gasCost":3,"op":"DUP3","pc":247,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478008,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30478005,"gasCost":9,"op":"MSTORE","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477996,"gasCost":3,"op":"DUP8","pc":250,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477993,"gasCost":3,"op":"PUSH1","pc":251,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30477990,"gasCost":3,"op":"DUP5","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477987,"gasCost":3,"op":"DUP8","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30477984,"gasCost":3,"op":"ADD","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30477981,"gasCost":3,"op":"ADD","pc":256,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000031"],"storage":{}},{"depth":1,"gas":30477978,"gasCost":3,"op":"GT","pc":257,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000051"],"storage":{}},{"depth":1,"gas":30477975,"gasCost":3,"op":"ISZERO","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477972,"gasCost":3,"op":"PUSH2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477969,"gasCost":10,"op":"JUMPI","pc":262,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000010b"],"storage":{}},{"depth":1,"gas":30477959,"gasCost":1,"op":"JUMPDEST","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477958,"gasCost":3,"op":"DUP3","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477955,"gasCost":3,"op":"PUSH1","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30477952,"gasCost":3,"op":"DUP7","pc":271,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477949,"gasCost":3,"op":"ADD","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30477946,"gasCost":3,"op":"PUSH1","pc":273,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30477943,"gasCost":3,"op":"DUP4","pc":275,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477940,"gasCost":3,"op":"ADD","pc":276,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477937,"gasCost":9,"op":"CALLDATACOPY","pc":277,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000044","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{}},{"depth":1,"gas":30477928,"gasCost":3,"op":"PUSH1","pc":278,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477925,"gasCost":3,"op":"SWAP3","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477922,"gasCost":3,"op":"DUP2","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30477919,"gasCost":3,"op":"ADD","pc":282,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477916,"gasCost":3,"op":"PUSH1","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008d"],"storage":{}},{"depth":1,"gas":30477913,"gasCost":3,"op":"ADD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008d","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477910,"gasCost":3,"op":"SWAP3","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad"],"storage":{}},{"depth":1,"gas":30477907,"gasCost":3,"op":"SWAP1","pc":287,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","00000000000000000000000000000000000000000000000000000000000000ad","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477904,"gasCost":3,"op":"SWAP3","pc":288,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","00000000000000000000000000000000000000000000000000000000000000ad","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477901,"gasCost":6,"op":"MSTORE","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ad"],"storage":{}},{"depth":1,"gas":30477895,"gasCost":2,"op":"POP","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30477893,"gasCost":3,"op":"SWAP6","pc":291,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477890,"gasCost":3,"op":"SWAP5","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30477887,"gasCost":2,"op":"POP","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30477885,"gasCost":2,"op":"POP","pc":294,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000ffffffffffffffff"],"storage":{}},{"depth":1,"gas":30477883,"gasCost":2,"op":"POP","pc":295,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30477881,"gasCost":2,"op":"POP","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477879,"gasCost":2,"op":"POP","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477877,"gasCost":8,"op":"JUMP","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30477869,"gasCost":1,"op":"JUMPDEST","pc":62,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477868,"gasCost":3,"op":"PUSH1","pc":63,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477865,"gasCost":3,"op":"DUP1","pc":65,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477862,"gasCost":2100,"op":"SLOAD","pc":66,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475762,"gasCost":3,"op":"DUP3","pc":67,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475759,"gasCost":3,"op":"MLOAD","pc":68,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475756,"gasCost":3,"op":"PUSH1","pc":69,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475753,"gasCost":3,"op":"SWAP1","pc":71,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475750,"gasCost":3,"op":"SWAP4","pc":72,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475747,"gasCost":3,"op":"ADD","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475744,"gasCost":3,"op":"SWAP3","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475741,"gasCost":3,"op":"SWAP1","pc":75,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475738,"gasCost":3,"op":"SWAP3","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475735,"gasCost":36,"op":"KECCAK256","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475699,"gasCost":3,"op":"SWAP1","pc":78,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000000"}},{"depth":1,"gas":30475696,"gasCost":20000,"op":"SSTORE","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000000","b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455696,"gasCost":3,"op":"SWAP1","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000052","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455693,"gasCost":8,"op":"JUMP","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000052"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455685,"gasCost":1,"op":"JUMPDEST","pc":82,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455684,"gasCost":3,"op":"PUSH1","pc":83,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455681,"gasCost":3,"op":"MLOAD","pc":85,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455678,"gasCost":3,"op":"SWAP1","pc":86,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455675,"gasCost":3,"op":"DUP2","pc":87,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455672,"gasCost":3,"op":"MSTORE","pc":88,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455669,"gasCost":3,"op":"PUSH1","pc":89,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455666,"gasCost":3,"op":"ADD","pc":91,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455663,"gasCost":3,"op":"PUSH1","pc":92,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455660,"gasCost":3,"op":"MLOAD","pc":94,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000e0","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455657,"gasCost":3,"op":"DUP1","pc":95,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000e0","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455654,"gasCost":3,"op":"SWAP2","pc":96,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000e0","00000000000000000000000000000000000000000000000000000000000000c0","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455651,"gasCost":3,"op":"SUB","pc":97,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000c0","00000000000000000000000000000000000000000000000000000000000000c0","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455648,"gasCost":3,"op":"SWAP1","pc":98,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}},{"depth":1,"gas":30455645,"gasCost":0,"op":"RETURN","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","48656c6c6f2c20776f726c642100000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["0000000000000000000000000000000000000000000000000000000016c3b464","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"b6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4"}}]}} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/mem_init/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/mem_init/contract0.json new file mode 100644 index 0000000000..114290af01 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/mem_init/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80631a737e4b14610030575b600080fd5b61004361003e3660046101a1565b610055565b60405190815260200160405180910390f35b600061005f61016b565b60005b60058160ff1610156100f157838160ff1660058110610083576100836101d7565b60200201602081019061009691906101ed565b82868360ff16600581106100ac576100ac6101d7565b6020020160208101906100bf91906101ed565b60ff16601e81106100d2576100d26101d7565b60ff9092166020929092020152806100e98161022d565b915050610062565b5060005b601e8161ffff16101561014c57818161ffff16601e8110610118576101186101d7565b602002015161012e9060ff1661ffff831661024c565b6101389084610263565b92508061014481610276565b9150506100f5565b508160008082825461015e9190610263565b9091555091949350505050565b604051806103c00160405280601e906020820280368337509192915050565b8060a0810183101561019b57600080fd5b92915050565b60008061014083850312156101b557600080fd5b6101bf848461018a565b91506101ce8460a0850161018a565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156101ff57600080fd5b813560ff8116811461021057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361024357610243610217565b60010192915050565b808202811582820484141761019b5761019b610217565b8082018082111561019b5761019b610217565b600061ffff80831681810361028d5761028d610217565b600101939250505056"} diff --git a/crypto3/libs/blueprint/test/zkevm/data/mem_init/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/mem_init/trace0.json new file mode 100644 index 0000000000..5adad9ca7c --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/mem_init/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"failed":false,"gas":42062,"returnValue":"0x00000000000000000000000000000000000000000000000000000000000000f0","structLogs":[{"depth":1,"gas":30477548,"gasCost":3,"op":"PUSH1","pc":0,"memory":[],"stack":[],"storage":{}},{"depth":1,"gas":30477545,"gasCost":3,"op":"PUSH1","pc":2,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477542,"gasCost":12,"op":"MSTORE","pc":4,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477530,"gasCost":2,"op":"CALLVALUE","pc":5,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30477528,"gasCost":3,"op":"DUP1","pc":6,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477525,"gasCost":3,"op":"ISZERO","pc":7,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477522,"gasCost":3,"op":"PUSH2","pc":8,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477519,"gasCost":10,"op":"JUMPI","pc":11,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30477509,"gasCost":1,"op":"JUMPDEST","pc":16,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477508,"gasCost":2,"op":"POP","pc":17,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477506,"gasCost":3,"op":"PUSH1","pc":18,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30477503,"gasCost":2,"op":"CALLDATASIZE","pc":20,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477501,"gasCost":3,"op":"LT","pc":21,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477498,"gasCost":3,"op":"PUSH2","pc":22,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477495,"gasCost":10,"op":"JUMPI","pc":25,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000002b"],"storage":{}},{"depth":1,"gas":30477485,"gasCost":3,"op":"PUSH1","pc":26,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30477482,"gasCost":3,"op":"CALLDATALOAD","pc":28,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477479,"gasCost":3,"op":"PUSH1","pc":29,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["1a737e4b00000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477476,"gasCost":3,"op":"SHR","pc":31,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["1a737e4b00000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30477473,"gasCost":3,"op":"DUP1","pc":32,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b"],"storage":{}},{"depth":1,"gas":30477470,"gasCost":3,"op":"PUSH4","pc":33,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","000000000000000000000000000000000000000000000000000000001a737e4b"],"storage":{}},{"depth":1,"gas":30477467,"gasCost":3,"op":"EQ","pc":38,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","000000000000000000000000000000000000000000000000000000001a737e4b","000000000000000000000000000000000000000000000000000000001a737e4b"],"storage":{}},{"depth":1,"gas":30477464,"gasCost":3,"op":"PUSH2","pc":39,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477461,"gasCost":10,"op":"JUMPI","pc":42,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000030"],"storage":{}},{"depth":1,"gas":30477451,"gasCost":1,"op":"JUMPDEST","pc":48,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b"],"storage":{}},{"depth":1,"gas":30477450,"gasCost":3,"op":"PUSH2","pc":49,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b"],"storage":{}},{"depth":1,"gas":30477447,"gasCost":3,"op":"PUSH2","pc":52,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{}},{"depth":1,"gas":30477444,"gasCost":2,"op":"CALLDATASIZE","pc":55,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30477442,"gasCost":3,"op":"PUSH1","pc":56,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477439,"gasCost":3,"op":"PUSH2","pc":58,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477436,"gasCost":8,"op":"JUMP","pc":61,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000001a1"],"storage":{}},{"depth":1,"gas":30477428,"gasCost":1,"op":"JUMPDEST","pc":417,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477427,"gasCost":3,"op":"PUSH1","pc":418,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477424,"gasCost":3,"op":"DUP1","pc":420,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477421,"gasCost":3,"op":"PUSH2","pc":421,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477418,"gasCost":3,"op":"DUP4","pc":424,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000140"],"storage":{}},{"depth":1,"gas":30477415,"gasCost":3,"op":"DUP6","pc":425,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000140","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477412,"gasCost":3,"op":"SUB","pc":426,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000140","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477409,"gasCost":3,"op":"SLT","pc":427,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000140","0000000000000000000000000000000000000000000000000000000000000140"],"storage":{}},{"depth":1,"gas":30477406,"gasCost":3,"op":"ISZERO","pc":428,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477403,"gasCost":3,"op":"PUSH2","pc":429,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477400,"gasCost":10,"op":"JUMPI","pc":432,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001b5"],"storage":{}},{"depth":1,"gas":30477390,"gasCost":1,"op":"JUMPDEST","pc":437,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477389,"gasCost":3,"op":"PUSH2","pc":438,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477386,"gasCost":3,"op":"DUP5","pc":441,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf"],"storage":{}},{"depth":1,"gas":30477383,"gasCost":3,"op":"DUP5","pc":442,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477380,"gasCost":3,"op":"PUSH2","pc":443,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477377,"gasCost":8,"op":"JUMP","pc":446,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000018a"],"storage":{}},{"depth":1,"gas":30477369,"gasCost":1,"op":"JUMPDEST","pc":394,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477368,"gasCost":3,"op":"DUP1","pc":395,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477365,"gasCost":3,"op":"PUSH1","pc":396,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477362,"gasCost":3,"op":"DUP2","pc":398,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{}},{"depth":1,"gas":30477359,"gasCost":3,"op":"ADD","pc":399,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477356,"gasCost":3,"op":"DUP4","pc":400,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477353,"gasCost":3,"op":"LT","pc":401,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477350,"gasCost":3,"op":"ISZERO","pc":402,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477347,"gasCost":3,"op":"PUSH2","pc":403,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477344,"gasCost":10,"op":"JUMPI","pc":406,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30477334,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477333,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477330,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000001bf"],"storage":{}},{"depth":1,"gas":30477327,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477325,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000001bf","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477323,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000001bf"],"storage":{}},{"depth":1,"gas":30477315,"gasCost":1,"op":"JUMPDEST","pc":447,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477314,"gasCost":3,"op":"SWAP2","pc":448,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477311,"gasCost":2,"op":"POP","pc":449,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477309,"gasCost":3,"op":"PUSH2","pc":450,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477306,"gasCost":3,"op":"DUP5","pc":453,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce"],"storage":{}},{"depth":1,"gas":30477303,"gasCost":3,"op":"PUSH1","pc":454,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477300,"gasCost":3,"op":"DUP6","pc":456,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{}},{"depth":1,"gas":30477297,"gasCost":3,"op":"ADD","pc":457,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477294,"gasCost":3,"op":"PUSH2","pc":458,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477291,"gasCost":8,"op":"JUMP","pc":461,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000018a"],"storage":{}},{"depth":1,"gas":30477283,"gasCost":1,"op":"JUMPDEST","pc":394,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477282,"gasCost":3,"op":"DUP1","pc":395,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477279,"gasCost":3,"op":"PUSH1","pc":396,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477276,"gasCost":3,"op":"DUP2","pc":398,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{}},{"depth":1,"gas":30477273,"gasCost":3,"op":"ADD","pc":399,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a0","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477270,"gasCost":3,"op":"DUP4","pc":400,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477267,"gasCost":3,"op":"LT","pc":401,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477264,"gasCost":3,"op":"ISZERO","pc":402,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477261,"gasCost":3,"op":"PUSH2","pc":403,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30477258,"gasCost":10,"op":"JUMPI","pc":406,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30477248,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477247,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000001ce","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477244,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000001ce"],"storage":{}},{"depth":1,"gas":30477241,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000001ce","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477239,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000001ce","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477237,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000001ce"],"storage":{}},{"depth":1,"gas":30477229,"gasCost":1,"op":"JUMPDEST","pc":462,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477228,"gasCost":3,"op":"SWAP1","pc":463,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477225,"gasCost":2,"op":"POP","pc":464,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477223,"gasCost":3,"op":"SWAP3","pc":465,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477220,"gasCost":2,"op":"POP","pc":466,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477218,"gasCost":3,"op":"SWAP3","pc":467,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477215,"gasCost":3,"op":"SWAP1","pc":468,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30477212,"gasCost":2,"op":"POP","pc":469,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30477210,"gasCost":8,"op":"JUMP","pc":470,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30477202,"gasCost":1,"op":"JUMPDEST","pc":62,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477201,"gasCost":3,"op":"PUSH2","pc":63,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477198,"gasCost":8,"op":"JUMP","pc":66,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000055"],"storage":{}},{"depth":1,"gas":30477190,"gasCost":1,"op":"JUMPDEST","pc":85,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477189,"gasCost":3,"op":"PUSH1","pc":86,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30477186,"gasCost":3,"op":"PUSH2","pc":88,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30477183,"gasCost":3,"op":"PUSH2","pc":91,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f"],"storage":{}},{"depth":1,"gas":30477180,"gasCost":8,"op":"JUMP","pc":94,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","000000000000000000000000000000000000000000000000000000000000016b"],"storage":{}},{"depth":1,"gas":30477172,"gasCost":1,"op":"JUMPDEST","pc":363,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f"],"storage":{}},{"depth":1,"gas":30477171,"gasCost":3,"op":"PUSH1","pc":364,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f"],"storage":{}},{"depth":1,"gas":30477168,"gasCost":3,"op":"MLOAD","pc":366,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477165,"gasCost":3,"op":"DUP1","pc":367,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477162,"gasCost":3,"op":"PUSH2","pc":368,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477159,"gasCost":3,"op":"ADD","pc":371,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000003c0"],"storage":{}},{"depth":1,"gas":30477156,"gasCost":3,"op":"PUSH1","pc":372,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000440"],"storage":{}},{"depth":1,"gas":30477153,"gasCost":3,"op":"MSTORE","pc":374,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30477150,"gasCost":3,"op":"DUP1","pc":375,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477147,"gasCost":3,"op":"PUSH1","pc":376,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477144,"gasCost":3,"op":"SWAP1","pc":378,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30477141,"gasCost":3,"op":"PUSH1","pc":379,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30477138,"gasCost":3,"op":"DUP3","pc":381,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30477135,"gasCost":5,"op":"MUL","pc":382,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30477130,"gasCost":3,"op":"DUP1","pc":383,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000003c0"],"storage":{}},{"depth":1,"gas":30477127,"gasCost":2,"op":"CALLDATASIZE","pc":384,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000003c0","00000000000000000000000000000000000000000000000000000000000003c0"],"storage":{}},{"depth":1,"gas":30477125,"gasCost":3,"op":"DUP4","pc":385,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000003c0","00000000000000000000000000000000000000000000000000000000000003c0","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30477122,"gasCost":188,"op":"CALLDATACOPY","pc":386,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000003c0","00000000000000000000000000000000000000000000000000000000000003c0","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476934,"gasCost":2,"op":"POP","pc":387,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000003c0"],"storage":{}},{"depth":1,"gas":30476932,"gasCost":3,"op":"SWAP2","pc":388,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476929,"gasCost":3,"op":"SWAP3","pc":389,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476926,"gasCost":3,"op":"SWAP2","pc":390,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000005f"],"storage":{}},{"depth":1,"gas":30476923,"gasCost":2,"op":"POP","pc":391,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000005f","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476921,"gasCost":2,"op":"POP","pc":392,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000005f","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476919,"gasCost":8,"op":"JUMP","pc":393,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000005f"],"storage":{}},{"depth":1,"gas":30476911,"gasCost":1,"op":"JUMPDEST","pc":95,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476910,"gasCost":3,"op":"PUSH1","pc":96,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476907,"gasCost":1,"op":"JUMPDEST","pc":98,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476906,"gasCost":3,"op":"PUSH1","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476903,"gasCost":3,"op":"DUP2","pc":101,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30476900,"gasCost":3,"op":"PUSH1","pc":102,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476897,"gasCost":3,"op":"AND","pc":104,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476894,"gasCost":3,"op":"LT","pc":105,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476891,"gasCost":3,"op":"ISZERO","pc":106,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476888,"gasCost":3,"op":"PUSH2","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476885,"gasCost":10,"op":"JUMPI","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{}},{"depth":1,"gas":30476875,"gasCost":3,"op":"DUP4","pc":111,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476872,"gasCost":3,"op":"DUP2","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476869,"gasCost":3,"op":"PUSH1","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476866,"gasCost":3,"op":"AND","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476863,"gasCost":3,"op":"PUSH1","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476860,"gasCost":3,"op":"DUP2","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30476857,"gasCost":3,"op":"LT","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476854,"gasCost":3,"op":"PUSH2","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476851,"gasCost":10,"op":"JUMPI","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000083"],"storage":{}},{"depth":1,"gas":30476841,"gasCost":1,"op":"JUMPDEST","pc":131,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476840,"gasCost":3,"op":"PUSH1","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476837,"gasCost":5,"op":"MUL","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476832,"gasCost":3,"op":"ADD","pc":135,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476829,"gasCost":3,"op":"PUSH1","pc":136,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476826,"gasCost":3,"op":"DUP2","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476823,"gasCost":3,"op":"ADD","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476820,"gasCost":3,"op":"SWAP1","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476817,"gasCost":3,"op":"PUSH2","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476814,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30476811,"gasCost":3,"op":"SWAP1","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476808,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476805,"gasCost":8,"op":"JUMP","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30476797,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476796,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476793,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476790,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476787,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476784,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476781,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476778,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476775,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476772,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30476762,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476761,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476758,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476755,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476752,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476749,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476746,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476743,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476740,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476737,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30476727,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476726,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476723,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30476720,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476718,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476716,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476714,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30476706,"gasCost":1,"op":"JUMPDEST","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476705,"gasCost":3,"op":"DUP3","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476702,"gasCost":3,"op":"DUP7","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476699,"gasCost":3,"op":"DUP4","pc":153,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476696,"gasCost":3,"op":"PUSH1","pc":154,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476693,"gasCost":3,"op":"AND","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476690,"gasCost":3,"op":"PUSH1","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476687,"gasCost":3,"op":"DUP2","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30476684,"gasCost":3,"op":"LT","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476681,"gasCost":3,"op":"PUSH2","pc":161,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476678,"gasCost":10,"op":"JUMPI","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ac"],"storage":{}},{"depth":1,"gas":30476668,"gasCost":1,"op":"JUMPDEST","pc":172,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476667,"gasCost":3,"op":"PUSH1","pc":173,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476664,"gasCost":5,"op":"MUL","pc":175,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476659,"gasCost":3,"op":"ADD","pc":176,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476656,"gasCost":3,"op":"PUSH1","pc":177,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476653,"gasCost":3,"op":"DUP2","pc":179,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476650,"gasCost":3,"op":"ADD","pc":180,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476647,"gasCost":3,"op":"SWAP1","pc":181,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476644,"gasCost":3,"op":"PUSH2","pc":182,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476641,"gasCost":3,"op":"SWAP2","pc":185,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30476638,"gasCost":3,"op":"SWAP1","pc":186,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476635,"gasCost":3,"op":"PUSH2","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476632,"gasCost":8,"op":"JUMP","pc":190,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30476624,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476623,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476620,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476617,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476614,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476611,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476608,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476605,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476602,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476599,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30476589,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476588,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476585,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476582,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476579,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476576,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476573,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476570,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476567,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476564,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30476554,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476553,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476550,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30476547,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476545,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476543,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476541,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30476533,"gasCost":1,"op":"JUMPDEST","pc":191,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476532,"gasCost":3,"op":"PUSH1","pc":192,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476529,"gasCost":3,"op":"AND","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476526,"gasCost":3,"op":"PUSH1","pc":195,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476523,"gasCost":3,"op":"DUP2","pc":197,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476520,"gasCost":3,"op":"LT","pc":198,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476517,"gasCost":3,"op":"PUSH2","pc":199,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476514,"gasCost":10,"op":"JUMPI","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000d2"],"storage":{}},{"depth":1,"gas":30476504,"gasCost":1,"op":"JUMPDEST","pc":210,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476503,"gasCost":3,"op":"PUSH1","pc":211,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476500,"gasCost":3,"op":"SWAP1","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476497,"gasCost":3,"op":"SWAP3","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476494,"gasCost":3,"op":"AND","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476491,"gasCost":3,"op":"PUSH1","pc":216,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476488,"gasCost":3,"op":"SWAP3","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476485,"gasCost":3,"op":"SWAP1","pc":219,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476482,"gasCost":3,"op":"SWAP3","pc":220,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476479,"gasCost":5,"op":"MUL","pc":221,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476474,"gasCost":3,"op":"ADD","pc":222,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476471,"gasCost":3,"op":"MSTORE","pc":223,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476468,"gasCost":3,"op":"DUP1","pc":224,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476465,"gasCost":3,"op":"PUSH2","pc":225,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476462,"gasCost":3,"op":"DUP2","pc":228,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30476459,"gasCost":3,"op":"PUSH2","pc":229,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476456,"gasCost":8,"op":"JUMP","pc":232,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000022d"],"storage":{}},{"depth":1,"gas":30476448,"gasCost":1,"op":"JUMPDEST","pc":557,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476447,"gasCost":3,"op":"PUSH1","pc":558,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476444,"gasCost":3,"op":"PUSH1","pc":560,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476441,"gasCost":3,"op":"DUP3","pc":562,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476438,"gasCost":3,"op":"AND","pc":563,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476435,"gasCost":3,"op":"PUSH1","pc":564,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476432,"gasCost":3,"op":"DUP2","pc":566,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476429,"gasCost":3,"op":"SUB","pc":567,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476426,"gasCost":3,"op":"PUSH2","pc":568,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01"],"storage":{}},{"depth":1,"gas":30476423,"gasCost":10,"op":"JUMPI","pc":571,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01","0000000000000000000000000000000000000000000000000000000000000243"],"storage":{}},{"depth":1,"gas":30476413,"gasCost":1,"op":"JUMPDEST","pc":579,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476412,"gasCost":3,"op":"PUSH1","pc":580,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476409,"gasCost":3,"op":"ADD","pc":582,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476406,"gasCost":3,"op":"SWAP3","pc":583,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476403,"gasCost":3,"op":"SWAP2","pc":584,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30476400,"gasCost":2,"op":"POP","pc":585,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476398,"gasCost":2,"op":"POP","pc":586,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476396,"gasCost":8,"op":"JUMP","pc":587,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30476388,"gasCost":1,"op":"JUMPDEST","pc":233,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476387,"gasCost":3,"op":"SWAP2","pc":234,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476384,"gasCost":2,"op":"POP","pc":235,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476382,"gasCost":2,"op":"POP","pc":236,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476380,"gasCost":3,"op":"PUSH2","pc":237,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476377,"gasCost":8,"op":"JUMP","pc":240,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000062"],"storage":{}},{"depth":1,"gas":30476369,"gasCost":1,"op":"JUMPDEST","pc":98,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476368,"gasCost":3,"op":"PUSH1","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476365,"gasCost":3,"op":"DUP2","pc":101,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30476362,"gasCost":3,"op":"PUSH1","pc":102,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476359,"gasCost":3,"op":"AND","pc":104,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476356,"gasCost":3,"op":"LT","pc":105,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476353,"gasCost":3,"op":"ISZERO","pc":106,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476350,"gasCost":3,"op":"PUSH2","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476347,"gasCost":10,"op":"JUMPI","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{}},{"depth":1,"gas":30476337,"gasCost":3,"op":"DUP4","pc":111,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476334,"gasCost":3,"op":"DUP2","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30476331,"gasCost":3,"op":"PUSH1","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476328,"gasCost":3,"op":"AND","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476325,"gasCost":3,"op":"PUSH1","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476322,"gasCost":3,"op":"DUP2","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30476319,"gasCost":3,"op":"LT","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476316,"gasCost":3,"op":"PUSH2","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476313,"gasCost":10,"op":"JUMPI","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000083"],"storage":{}},{"depth":1,"gas":30476303,"gasCost":1,"op":"JUMPDEST","pc":131,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476302,"gasCost":3,"op":"PUSH1","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476299,"gasCost":5,"op":"MUL","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476294,"gasCost":3,"op":"ADD","pc":135,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476291,"gasCost":3,"op":"PUSH1","pc":136,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476288,"gasCost":3,"op":"DUP2","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476285,"gasCost":3,"op":"ADD","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476282,"gasCost":3,"op":"SWAP1","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30476279,"gasCost":3,"op":"PUSH2","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476276,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30476273,"gasCost":3,"op":"SWAP1","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30476270,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476267,"gasCost":8,"op":"JUMP","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30476259,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476258,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476255,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476252,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476249,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476246,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c4","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30476243,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476240,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476237,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476234,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30476224,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476223,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476220,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476217,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476214,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476211,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476208,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476205,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476202,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476199,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30476189,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476188,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476185,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30476182,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30476180,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476178,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000c4"],"storage":{}},{"depth":1,"gas":30476176,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30476168,"gasCost":1,"op":"JUMPDEST","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476167,"gasCost":3,"op":"DUP3","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30476164,"gasCost":3,"op":"DUP7","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30476161,"gasCost":3,"op":"DUP4","pc":153,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30476158,"gasCost":3,"op":"PUSH1","pc":154,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476155,"gasCost":3,"op":"AND","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476152,"gasCost":3,"op":"PUSH1","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476149,"gasCost":3,"op":"DUP2","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30476146,"gasCost":3,"op":"LT","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476143,"gasCost":3,"op":"PUSH2","pc":161,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476140,"gasCost":10,"op":"JUMPI","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ac"],"storage":{}},{"depth":1,"gas":30476130,"gasCost":1,"op":"JUMPDEST","pc":172,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476129,"gasCost":3,"op":"PUSH1","pc":173,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476126,"gasCost":5,"op":"MUL","pc":175,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476121,"gasCost":3,"op":"ADD","pc":176,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476118,"gasCost":3,"op":"PUSH1","pc":177,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476115,"gasCost":3,"op":"DUP2","pc":179,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476112,"gasCost":3,"op":"ADD","pc":180,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476109,"gasCost":3,"op":"SWAP1","pc":181,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30476106,"gasCost":3,"op":"PUSH2","pc":182,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476103,"gasCost":3,"op":"SWAP2","pc":185,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30476100,"gasCost":3,"op":"SWAP1","pc":186,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30476097,"gasCost":3,"op":"PUSH2","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476094,"gasCost":8,"op":"JUMP","pc":190,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30476086,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476085,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476082,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476079,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476076,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476073,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30476070,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30476067,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476064,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476061,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30476051,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476050,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476047,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476044,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30476041,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30476038,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30476035,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30476032,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30476029,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30476026,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30476016,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30476015,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30476012,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30476009,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30476007,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30476005,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30476003,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30475995,"gasCost":1,"op":"JUMPDEST","pc":191,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475994,"gasCost":3,"op":"PUSH1","pc":192,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475991,"gasCost":3,"op":"AND","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475988,"gasCost":3,"op":"PUSH1","pc":195,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475985,"gasCost":3,"op":"DUP2","pc":197,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30475982,"gasCost":3,"op":"LT","pc":198,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475979,"gasCost":3,"op":"PUSH2","pc":199,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475976,"gasCost":10,"op":"JUMPI","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000d2"],"storage":{}},{"depth":1,"gas":30475966,"gasCost":1,"op":"JUMPDEST","pc":210,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475965,"gasCost":3,"op":"PUSH1","pc":211,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475962,"gasCost":3,"op":"SWAP1","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475959,"gasCost":3,"op":"SWAP3","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475956,"gasCost":3,"op":"AND","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30475953,"gasCost":3,"op":"PUSH1","pc":216,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30475950,"gasCost":3,"op":"SWAP3","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475947,"gasCost":3,"op":"SWAP1","pc":219,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475944,"gasCost":3,"op":"SWAP3","pc":220,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30475941,"gasCost":5,"op":"MUL","pc":221,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475936,"gasCost":3,"op":"ADD","pc":222,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30475933,"gasCost":3,"op":"MSTORE","pc":223,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30475930,"gasCost":3,"op":"DUP1","pc":224,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475927,"gasCost":3,"op":"PUSH2","pc":225,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475924,"gasCost":3,"op":"DUP2","pc":228,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30475921,"gasCost":3,"op":"PUSH2","pc":229,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475918,"gasCost":8,"op":"JUMP","pc":232,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000022d"],"storage":{}},{"depth":1,"gas":30475910,"gasCost":1,"op":"JUMPDEST","pc":557,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475909,"gasCost":3,"op":"PUSH1","pc":558,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475906,"gasCost":3,"op":"PUSH1","pc":560,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475903,"gasCost":3,"op":"DUP3","pc":562,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475900,"gasCost":3,"op":"AND","pc":563,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475897,"gasCost":3,"op":"PUSH1","pc":564,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475894,"gasCost":3,"op":"DUP2","pc":566,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475891,"gasCost":3,"op":"SUB","pc":567,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475888,"gasCost":3,"op":"PUSH2","pc":568,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02"],"storage":{}},{"depth":1,"gas":30475885,"gasCost":10,"op":"JUMPI","pc":571,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02","0000000000000000000000000000000000000000000000000000000000000243"],"storage":{}},{"depth":1,"gas":30475875,"gasCost":1,"op":"JUMPDEST","pc":579,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475874,"gasCost":3,"op":"PUSH1","pc":580,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475871,"gasCost":3,"op":"ADD","pc":582,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475868,"gasCost":3,"op":"SWAP3","pc":583,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475865,"gasCost":3,"op":"SWAP2","pc":584,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30475862,"gasCost":2,"op":"POP","pc":585,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475860,"gasCost":2,"op":"POP","pc":586,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475858,"gasCost":8,"op":"JUMP","pc":587,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30475850,"gasCost":1,"op":"JUMPDEST","pc":233,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475849,"gasCost":3,"op":"SWAP2","pc":234,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475846,"gasCost":2,"op":"POP","pc":235,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475844,"gasCost":2,"op":"POP","pc":236,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475842,"gasCost":3,"op":"PUSH2","pc":237,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475839,"gasCost":8,"op":"JUMP","pc":240,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000062"],"storage":{}},{"depth":1,"gas":30475831,"gasCost":1,"op":"JUMPDEST","pc":98,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475830,"gasCost":3,"op":"PUSH1","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475827,"gasCost":3,"op":"DUP2","pc":101,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30475824,"gasCost":3,"op":"PUSH1","pc":102,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475821,"gasCost":3,"op":"AND","pc":104,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475818,"gasCost":3,"op":"LT","pc":105,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475815,"gasCost":3,"op":"ISZERO","pc":106,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475812,"gasCost":3,"op":"PUSH2","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475809,"gasCost":10,"op":"JUMPI","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{}},{"depth":1,"gas":30475799,"gasCost":3,"op":"DUP4","pc":111,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475796,"gasCost":3,"op":"DUP2","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30475793,"gasCost":3,"op":"PUSH1","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475790,"gasCost":3,"op":"AND","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475787,"gasCost":3,"op":"PUSH1","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475784,"gasCost":3,"op":"DUP2","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30475781,"gasCost":3,"op":"LT","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475778,"gasCost":3,"op":"PUSH2","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475775,"gasCost":10,"op":"JUMPI","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000083"],"storage":{}},{"depth":1,"gas":30475765,"gasCost":1,"op":"JUMPDEST","pc":131,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475764,"gasCost":3,"op":"PUSH1","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475761,"gasCost":5,"op":"MUL","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475756,"gasCost":3,"op":"ADD","pc":135,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30475753,"gasCost":3,"op":"PUSH1","pc":136,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475750,"gasCost":3,"op":"DUP2","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475747,"gasCost":3,"op":"ADD","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475744,"gasCost":3,"op":"SWAP1","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475741,"gasCost":3,"op":"PUSH2","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475738,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30475735,"gasCost":3,"op":"SWAP1","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475732,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475729,"gasCost":8,"op":"JUMP","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30475721,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475720,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475717,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475714,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475711,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475708,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475705,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475702,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475699,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475696,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30475686,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475685,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475682,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475679,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475676,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475673,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475670,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475667,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475664,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475661,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30475651,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475650,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475647,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30475644,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475642,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475640,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000096","00000000000000000000000000000000000000000000000000000000000000e4"],"storage":{}},{"depth":1,"gas":30475638,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30475630,"gasCost":1,"op":"JUMPDEST","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475629,"gasCost":3,"op":"DUP3","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475626,"gasCost":3,"op":"DUP7","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30475623,"gasCost":3,"op":"DUP4","pc":153,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475620,"gasCost":3,"op":"PUSH1","pc":154,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475617,"gasCost":3,"op":"AND","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475614,"gasCost":3,"op":"PUSH1","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475611,"gasCost":3,"op":"DUP2","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30475608,"gasCost":3,"op":"LT","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475605,"gasCost":3,"op":"PUSH2","pc":161,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475602,"gasCost":10,"op":"JUMPI","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ac"],"storage":{}},{"depth":1,"gas":30475592,"gasCost":1,"op":"JUMPDEST","pc":172,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475591,"gasCost":3,"op":"PUSH1","pc":173,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475588,"gasCost":5,"op":"MUL","pc":175,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475583,"gasCost":3,"op":"ADD","pc":176,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30475580,"gasCost":3,"op":"PUSH1","pc":177,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475577,"gasCost":3,"op":"DUP2","pc":179,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475574,"gasCost":3,"op":"ADD","pc":180,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475571,"gasCost":3,"op":"SWAP1","pc":181,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475568,"gasCost":3,"op":"PUSH2","pc":182,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475565,"gasCost":3,"op":"SWAP2","pc":185,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30475562,"gasCost":3,"op":"SWAP1","pc":186,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475559,"gasCost":3,"op":"PUSH2","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475556,"gasCost":8,"op":"JUMP","pc":190,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30475548,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475547,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475544,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475541,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475538,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475535,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475532,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475529,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475526,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475523,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30475513,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475512,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475509,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475506,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475503,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475500,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475497,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475494,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475491,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475488,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30475478,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475477,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475474,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30475471,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475469,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475467,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000044"],"storage":{}},{"depth":1,"gas":30475465,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30475457,"gasCost":1,"op":"JUMPDEST","pc":191,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475456,"gasCost":3,"op":"PUSH1","pc":192,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475453,"gasCost":3,"op":"AND","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475450,"gasCost":3,"op":"PUSH1","pc":195,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475447,"gasCost":3,"op":"DUP2","pc":197,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30475444,"gasCost":3,"op":"LT","pc":198,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475441,"gasCost":3,"op":"PUSH2","pc":199,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475438,"gasCost":10,"op":"JUMPI","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000d2"],"storage":{}},{"depth":1,"gas":30475428,"gasCost":1,"op":"JUMPDEST","pc":210,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475427,"gasCost":3,"op":"PUSH1","pc":211,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475424,"gasCost":3,"op":"SWAP1","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475421,"gasCost":3,"op":"SWAP3","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475418,"gasCost":3,"op":"AND","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475415,"gasCost":3,"op":"PUSH1","pc":216,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475412,"gasCost":3,"op":"SWAP3","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475409,"gasCost":3,"op":"SWAP1","pc":219,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475406,"gasCost":3,"op":"SWAP3","pc":220,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30475403,"gasCost":5,"op":"MUL","pc":221,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475398,"gasCost":3,"op":"ADD","pc":222,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060"],"storage":{}},{"depth":1,"gas":30475395,"gasCost":3,"op":"MSTORE","pc":223,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30475392,"gasCost":3,"op":"DUP1","pc":224,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475389,"gasCost":3,"op":"PUSH2","pc":225,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475386,"gasCost":3,"op":"DUP2","pc":228,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30475383,"gasCost":3,"op":"PUSH2","pc":229,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475380,"gasCost":8,"op":"JUMP","pc":232,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000022d"],"storage":{}},{"depth":1,"gas":30475372,"gasCost":1,"op":"JUMPDEST","pc":557,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475371,"gasCost":3,"op":"PUSH1","pc":558,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475368,"gasCost":3,"op":"PUSH1","pc":560,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475365,"gasCost":3,"op":"DUP3","pc":562,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475362,"gasCost":3,"op":"AND","pc":563,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475359,"gasCost":3,"op":"PUSH1","pc":564,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475356,"gasCost":3,"op":"DUP2","pc":566,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475353,"gasCost":3,"op":"SUB","pc":567,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475350,"gasCost":3,"op":"PUSH2","pc":568,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03"],"storage":{}},{"depth":1,"gas":30475347,"gasCost":10,"op":"JUMPI","pc":571,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03","0000000000000000000000000000000000000000000000000000000000000243"],"storage":{}},{"depth":1,"gas":30475337,"gasCost":1,"op":"JUMPDEST","pc":579,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475336,"gasCost":3,"op":"PUSH1","pc":580,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475333,"gasCost":3,"op":"ADD","pc":582,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475330,"gasCost":3,"op":"SWAP3","pc":583,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475327,"gasCost":3,"op":"SWAP2","pc":584,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30475324,"gasCost":2,"op":"POP","pc":585,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475322,"gasCost":2,"op":"POP","pc":586,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475320,"gasCost":8,"op":"JUMP","pc":587,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30475312,"gasCost":1,"op":"JUMPDEST","pc":233,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475311,"gasCost":3,"op":"SWAP2","pc":234,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475308,"gasCost":2,"op":"POP","pc":235,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475306,"gasCost":2,"op":"POP","pc":236,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30475304,"gasCost":3,"op":"PUSH2","pc":237,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475301,"gasCost":8,"op":"JUMP","pc":240,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000062"],"storage":{}},{"depth":1,"gas":30475293,"gasCost":1,"op":"JUMPDEST","pc":98,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475292,"gasCost":3,"op":"PUSH1","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475289,"gasCost":3,"op":"DUP2","pc":101,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30475286,"gasCost":3,"op":"PUSH1","pc":102,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475283,"gasCost":3,"op":"AND","pc":104,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475280,"gasCost":3,"op":"LT","pc":105,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475277,"gasCost":3,"op":"ISZERO","pc":106,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475274,"gasCost":3,"op":"PUSH2","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475271,"gasCost":10,"op":"JUMPI","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{}},{"depth":1,"gas":30475261,"gasCost":3,"op":"DUP4","pc":111,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475258,"gasCost":3,"op":"DUP2","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30475255,"gasCost":3,"op":"PUSH1","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475252,"gasCost":3,"op":"AND","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475249,"gasCost":3,"op":"PUSH1","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475246,"gasCost":3,"op":"DUP2","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30475243,"gasCost":3,"op":"LT","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475240,"gasCost":3,"op":"PUSH2","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475237,"gasCost":10,"op":"JUMPI","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000083"],"storage":{}},{"depth":1,"gas":30475227,"gasCost":1,"op":"JUMPDEST","pc":131,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475226,"gasCost":3,"op":"PUSH1","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475223,"gasCost":5,"op":"MUL","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475218,"gasCost":3,"op":"ADD","pc":135,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000060"],"storage":{}},{"depth":1,"gas":30475215,"gasCost":3,"op":"PUSH1","pc":136,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475212,"gasCost":3,"op":"DUP2","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475209,"gasCost":3,"op":"ADD","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475206,"gasCost":3,"op":"SWAP1","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30475203,"gasCost":3,"op":"PUSH2","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475200,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30475197,"gasCost":3,"op":"SWAP1","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30475194,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475191,"gasCost":8,"op":"JUMP","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30475183,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475182,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475179,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475176,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475173,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475170,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30475167,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475164,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475161,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475158,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30475148,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475147,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475144,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475141,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475138,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475135,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475132,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475129,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475126,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475123,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30475113,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475112,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475109,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30475106,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30475104,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475102,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000104"],"storage":{}},{"depth":1,"gas":30475100,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30475092,"gasCost":1,"op":"JUMPDEST","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475091,"gasCost":3,"op":"DUP3","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475088,"gasCost":3,"op":"DUP7","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30475085,"gasCost":3,"op":"DUP4","pc":153,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30475082,"gasCost":3,"op":"PUSH1","pc":154,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475079,"gasCost":3,"op":"AND","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30475076,"gasCost":3,"op":"PUSH1","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475073,"gasCost":3,"op":"DUP2","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30475070,"gasCost":3,"op":"LT","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475067,"gasCost":3,"op":"PUSH2","pc":161,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30475064,"gasCost":10,"op":"JUMPI","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ac"],"storage":{}},{"depth":1,"gas":30475054,"gasCost":1,"op":"JUMPDEST","pc":172,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475053,"gasCost":3,"op":"PUSH1","pc":173,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30475050,"gasCost":5,"op":"MUL","pc":175,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475045,"gasCost":3,"op":"ADD","pc":176,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000060"],"storage":{}},{"depth":1,"gas":30475042,"gasCost":3,"op":"PUSH1","pc":177,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475039,"gasCost":3,"op":"DUP2","pc":179,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475036,"gasCost":3,"op":"ADD","pc":180,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475033,"gasCost":3,"op":"SWAP1","pc":181,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30475030,"gasCost":3,"op":"PUSH2","pc":182,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475027,"gasCost":3,"op":"SWAP2","pc":185,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30475024,"gasCost":3,"op":"SWAP1","pc":186,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30475021,"gasCost":3,"op":"PUSH2","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475018,"gasCost":8,"op":"JUMP","pc":190,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30475010,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475009,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30475006,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30475003,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30475000,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30474997,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474994,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474991,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474988,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474985,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30474975,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474974,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474971,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30474968,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474965,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474962,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474959,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474956,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474953,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474950,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30474940,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474939,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474936,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30474933,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474931,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474929,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000064"],"storage":{}},{"depth":1,"gas":30474927,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30474919,"gasCost":1,"op":"JUMPDEST","pc":191,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474918,"gasCost":3,"op":"PUSH1","pc":192,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474915,"gasCost":3,"op":"AND","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474912,"gasCost":3,"op":"PUSH1","pc":195,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474909,"gasCost":3,"op":"DUP2","pc":197,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30474906,"gasCost":3,"op":"LT","pc":198,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474903,"gasCost":3,"op":"PUSH2","pc":199,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474900,"gasCost":10,"op":"JUMPI","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000d2"],"storage":{}},{"depth":1,"gas":30474890,"gasCost":1,"op":"JUMPDEST","pc":210,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474889,"gasCost":3,"op":"PUSH1","pc":211,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474886,"gasCost":3,"op":"SWAP1","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474883,"gasCost":3,"op":"SWAP3","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474880,"gasCost":3,"op":"AND","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474877,"gasCost":3,"op":"PUSH1","pc":216,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474874,"gasCost":3,"op":"SWAP3","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474871,"gasCost":3,"op":"SWAP1","pc":219,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30474868,"gasCost":3,"op":"SWAP3","pc":220,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474865,"gasCost":5,"op":"MUL","pc":221,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474860,"gasCost":3,"op":"ADD","pc":222,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000001e0"],"storage":{}},{"depth":1,"gas":30474857,"gasCost":3,"op":"MSTORE","pc":223,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000260"],"storage":{}},{"depth":1,"gas":30474854,"gasCost":3,"op":"DUP1","pc":224,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474851,"gasCost":3,"op":"PUSH2","pc":225,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474848,"gasCost":3,"op":"DUP2","pc":228,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30474845,"gasCost":3,"op":"PUSH2","pc":229,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474842,"gasCost":8,"op":"JUMP","pc":232,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000022d"],"storage":{}},{"depth":1,"gas":30474834,"gasCost":1,"op":"JUMPDEST","pc":557,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474833,"gasCost":3,"op":"PUSH1","pc":558,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474830,"gasCost":3,"op":"PUSH1","pc":560,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474827,"gasCost":3,"op":"DUP3","pc":562,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474824,"gasCost":3,"op":"AND","pc":563,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474821,"gasCost":3,"op":"PUSH1","pc":564,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474818,"gasCost":3,"op":"DUP2","pc":566,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474815,"gasCost":3,"op":"SUB","pc":567,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474812,"gasCost":3,"op":"PUSH2","pc":568,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04"],"storage":{}},{"depth":1,"gas":30474809,"gasCost":10,"op":"JUMPI","pc":571,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04","0000000000000000000000000000000000000000000000000000000000000243"],"storage":{}},{"depth":1,"gas":30474799,"gasCost":1,"op":"JUMPDEST","pc":579,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474798,"gasCost":3,"op":"PUSH1","pc":580,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474795,"gasCost":3,"op":"ADD","pc":582,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474792,"gasCost":3,"op":"SWAP3","pc":583,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474789,"gasCost":3,"op":"SWAP2","pc":584,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30474786,"gasCost":2,"op":"POP","pc":585,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474784,"gasCost":2,"op":"POP","pc":586,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474782,"gasCost":8,"op":"JUMP","pc":587,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30474774,"gasCost":1,"op":"JUMPDEST","pc":233,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474773,"gasCost":3,"op":"SWAP2","pc":234,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474770,"gasCost":2,"op":"POP","pc":235,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474768,"gasCost":2,"op":"POP","pc":236,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474766,"gasCost":3,"op":"PUSH2","pc":237,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474763,"gasCost":8,"op":"JUMP","pc":240,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000062"],"storage":{}},{"depth":1,"gas":30474755,"gasCost":1,"op":"JUMPDEST","pc":98,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474754,"gasCost":3,"op":"PUSH1","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474751,"gasCost":3,"op":"DUP2","pc":101,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474748,"gasCost":3,"op":"PUSH1","pc":102,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474745,"gasCost":3,"op":"AND","pc":104,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474742,"gasCost":3,"op":"LT","pc":105,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474739,"gasCost":3,"op":"ISZERO","pc":106,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474736,"gasCost":3,"op":"PUSH2","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474733,"gasCost":10,"op":"JUMPI","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{}},{"depth":1,"gas":30474723,"gasCost":3,"op":"DUP4","pc":111,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474720,"gasCost":3,"op":"DUP2","pc":112,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30474717,"gasCost":3,"op":"PUSH1","pc":113,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474714,"gasCost":3,"op":"AND","pc":115,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474711,"gasCost":3,"op":"PUSH1","pc":116,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474708,"gasCost":3,"op":"DUP2","pc":118,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474705,"gasCost":3,"op":"LT","pc":119,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474702,"gasCost":3,"op":"PUSH2","pc":120,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474699,"gasCost":10,"op":"JUMPI","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000083"],"storage":{}},{"depth":1,"gas":30474689,"gasCost":1,"op":"JUMPDEST","pc":131,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474688,"gasCost":3,"op":"PUSH1","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474685,"gasCost":5,"op":"MUL","pc":134,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474680,"gasCost":3,"op":"ADD","pc":135,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30474677,"gasCost":3,"op":"PUSH1","pc":136,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474674,"gasCost":3,"op":"DUP2","pc":138,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474671,"gasCost":3,"op":"ADD","pc":139,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474668,"gasCost":3,"op":"SWAP1","pc":140,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30474665,"gasCost":3,"op":"PUSH2","pc":141,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474662,"gasCost":3,"op":"SWAP2","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30474659,"gasCost":3,"op":"SWAP1","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30474656,"gasCost":3,"op":"PUSH2","pc":146,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474653,"gasCost":8,"op":"JUMP","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30474645,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474644,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474641,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474638,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474635,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474632,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30474629,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474626,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474623,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474620,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30474610,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474609,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474606,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474603,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474600,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474597,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474594,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474591,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474588,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474585,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30474575,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474574,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474571,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30474568,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30474566,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474564,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096","0000000000000000000000000000000000000000000000000000000000000124"],"storage":{}},{"depth":1,"gas":30474562,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000096"],"storage":{}},{"depth":1,"gas":30474554,"gasCost":1,"op":"JUMPDEST","pc":150,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474553,"gasCost":3,"op":"DUP3","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474550,"gasCost":3,"op":"DUP7","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30474547,"gasCost":3,"op":"DUP4","pc":153,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474544,"gasCost":3,"op":"PUSH1","pc":154,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474541,"gasCost":3,"op":"AND","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474538,"gasCost":3,"op":"PUSH1","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474535,"gasCost":3,"op":"DUP2","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474532,"gasCost":3,"op":"LT","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474529,"gasCost":3,"op":"PUSH2","pc":161,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474526,"gasCost":10,"op":"JUMPI","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ac"],"storage":{}},{"depth":1,"gas":30474516,"gasCost":1,"op":"JUMPDEST","pc":172,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474515,"gasCost":3,"op":"PUSH1","pc":173,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474512,"gasCost":5,"op":"MUL","pc":175,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474507,"gasCost":3,"op":"ADD","pc":176,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30474504,"gasCost":3,"op":"PUSH1","pc":177,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474501,"gasCost":3,"op":"DUP2","pc":179,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474498,"gasCost":3,"op":"ADD","pc":180,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474495,"gasCost":3,"op":"SWAP1","pc":181,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30474492,"gasCost":3,"op":"PUSH2","pc":182,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474489,"gasCost":3,"op":"SWAP2","pc":185,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30474486,"gasCost":3,"op":"SWAP1","pc":186,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30474483,"gasCost":3,"op":"PUSH2","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474480,"gasCost":8,"op":"JUMP","pc":190,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","00000000000000000000000000000000000000000000000000000000000001ed"],"storage":{}},{"depth":1,"gas":30474472,"gasCost":1,"op":"JUMPDEST","pc":493,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474471,"gasCost":3,"op":"PUSH1","pc":494,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474468,"gasCost":3,"op":"PUSH1","pc":496,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474465,"gasCost":3,"op":"DUP3","pc":498,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474462,"gasCost":3,"op":"DUP5","pc":499,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474459,"gasCost":3,"op":"SUB","pc":500,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000084","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30474456,"gasCost":3,"op":"SLT","pc":501,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474453,"gasCost":3,"op":"ISZERO","pc":502,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474450,"gasCost":3,"op":"PUSH2","pc":503,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474447,"gasCost":10,"op":"JUMPI","pc":506,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"storage":{}},{"depth":1,"gas":30474437,"gasCost":1,"op":"JUMPDEST","pc":511,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474436,"gasCost":3,"op":"DUP2","pc":512,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474433,"gasCost":3,"op":"CALLDATALOAD","pc":513,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474430,"gasCost":3,"op":"PUSH1","pc":514,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474427,"gasCost":3,"op":"DUP2","pc":516,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474424,"gasCost":3,"op":"AND","pc":517,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474421,"gasCost":3,"op":"DUP2","pc":518,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474418,"gasCost":3,"op":"EQ","pc":519,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474415,"gasCost":3,"op":"PUSH2","pc":520,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474412,"gasCost":10,"op":"JUMPI","pc":523,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000210"],"storage":{}},{"depth":1,"gas":30474402,"gasCost":1,"op":"JUMPDEST","pc":528,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474401,"gasCost":3,"op":"SWAP4","pc":529,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000bf","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474398,"gasCost":3,"op":"SWAP3","pc":530,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30474395,"gasCost":2,"op":"POP","pc":531,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{}},{"depth":1,"gas":30474393,"gasCost":2,"op":"POP","pc":532,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474391,"gasCost":2,"op":"POP","pc":533,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000bf","0000000000000000000000000000000000000000000000000000000000000084"],"storage":{}},{"depth":1,"gas":30474389,"gasCost":8,"op":"JUMP","pc":534,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000bf"],"storage":{}},{"depth":1,"gas":30474381,"gasCost":1,"op":"JUMPDEST","pc":191,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474380,"gasCost":3,"op":"PUSH1","pc":192,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474377,"gasCost":3,"op":"AND","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474374,"gasCost":3,"op":"PUSH1","pc":195,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474371,"gasCost":3,"op":"DUP2","pc":197,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30474368,"gasCost":3,"op":"LT","pc":198,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474365,"gasCost":3,"op":"PUSH2","pc":199,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474362,"gasCost":10,"op":"JUMPI","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000d2"],"storage":{}},{"depth":1,"gas":30474352,"gasCost":1,"op":"JUMPDEST","pc":210,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474351,"gasCost":3,"op":"PUSH1","pc":211,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474348,"gasCost":3,"op":"SWAP1","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474345,"gasCost":3,"op":"SWAP3","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474342,"gasCost":3,"op":"AND","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474339,"gasCost":3,"op":"PUSH1","pc":216,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474336,"gasCost":3,"op":"SWAP3","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474333,"gasCost":3,"op":"SWAP1","pc":219,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30474330,"gasCost":3,"op":"SWAP3","pc":220,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30474327,"gasCost":5,"op":"MUL","pc":221,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474322,"gasCost":3,"op":"ADD","pc":222,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000280"],"storage":{}},{"depth":1,"gas":30474319,"gasCost":3,"op":"MSTORE","pc":223,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000300"],"storage":{}},{"depth":1,"gas":30474316,"gasCost":3,"op":"DUP1","pc":224,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474313,"gasCost":3,"op":"PUSH2","pc":225,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474310,"gasCost":3,"op":"DUP2","pc":228,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30474307,"gasCost":3,"op":"PUSH2","pc":229,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474304,"gasCost":8,"op":"JUMP","pc":232,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000022d"],"storage":{}},{"depth":1,"gas":30474296,"gasCost":1,"op":"JUMPDEST","pc":557,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474295,"gasCost":3,"op":"PUSH1","pc":558,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474292,"gasCost":3,"op":"PUSH1","pc":560,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474289,"gasCost":3,"op":"DUP3","pc":562,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474286,"gasCost":3,"op":"AND","pc":563,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474283,"gasCost":3,"op":"PUSH1","pc":564,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474280,"gasCost":3,"op":"DUP2","pc":566,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474277,"gasCost":3,"op":"SUB","pc":567,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474274,"gasCost":3,"op":"PUSH2","pc":568,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05"],"storage":{}},{"depth":1,"gas":30474271,"gasCost":10,"op":"JUMPI","pc":571,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05","0000000000000000000000000000000000000000000000000000000000000243"],"storage":{}},{"depth":1,"gas":30474261,"gasCost":1,"op":"JUMPDEST","pc":579,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474260,"gasCost":3,"op":"PUSH1","pc":580,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474257,"gasCost":3,"op":"ADD","pc":582,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474254,"gasCost":3,"op":"SWAP3","pc":583,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474251,"gasCost":3,"op":"SWAP2","pc":584,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30474248,"gasCost":2,"op":"POP","pc":585,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474246,"gasCost":2,"op":"POP","pc":586,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000000000000000e9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474244,"gasCost":8,"op":"JUMP","pc":587,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000000000000000e9"],"storage":{}},{"depth":1,"gas":30474236,"gasCost":1,"op":"JUMPDEST","pc":233,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474235,"gasCost":3,"op":"SWAP2","pc":234,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474232,"gasCost":2,"op":"POP","pc":235,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474230,"gasCost":2,"op":"POP","pc":236,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30474228,"gasCost":3,"op":"PUSH2","pc":237,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474225,"gasCost":8,"op":"JUMP","pc":240,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000062"],"storage":{}},{"depth":1,"gas":30474217,"gasCost":1,"op":"JUMPDEST","pc":98,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474216,"gasCost":3,"op":"PUSH1","pc":99,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474213,"gasCost":3,"op":"DUP2","pc":101,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474210,"gasCost":3,"op":"PUSH1","pc":102,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474207,"gasCost":3,"op":"AND","pc":104,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474204,"gasCost":3,"op":"LT","pc":105,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474201,"gasCost":3,"op":"ISZERO","pc":106,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474198,"gasCost":3,"op":"PUSH2","pc":107,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474195,"gasCost":10,"op":"JUMPI","pc":110,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{}},{"depth":1,"gas":30474185,"gasCost":1,"op":"JUMPDEST","pc":241,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474184,"gasCost":2,"op":"POP","pc":242,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30474182,"gasCost":3,"op":"PUSH1","pc":243,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30474179,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474178,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474175,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30474172,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474169,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30474166,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474163,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474160,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474157,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30474147,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474144,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30474141,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474138,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30474135,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474132,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30474129,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474126,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474123,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30474113,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474112,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474109,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30474104,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474101,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30474098,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474095,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30474092,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474089,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474086,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474083,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30474080,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474077,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474074,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30474066,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474065,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474062,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474059,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474054,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474051,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474048,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474045,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474042,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474037,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474034,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474031,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474028,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30474025,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30474015,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474014,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474011,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30474008,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30474006,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30474004,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30473996,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473995,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473992,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473989,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473986,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473983,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30473975,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473974,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473971,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473968,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473965,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473962,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473959,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473956,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473953,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473950,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30473940,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473939,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473936,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473933,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473931,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473929,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473921,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473920,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473917,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473915,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473912,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473909,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473906,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473903,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30473895,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473894,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473891,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473888,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473885,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473882,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473879,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473876,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473873,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473870,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0001"],"storage":{}},{"depth":1,"gas":30473867,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0001","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30473857,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473856,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473853,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473850,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473847,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473844,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473842,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473840,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473838,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473830,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473829,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473826,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473824,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473822,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473819,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30473811,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473810,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473807,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473804,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473801,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473798,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473795,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473792,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473789,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30473779,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473776,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30473773,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473770,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473767,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473764,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473761,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473758,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473755,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30473745,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473744,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473741,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30473736,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30473733,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{}},{"depth":1,"gas":30473730,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473727,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30473724,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473721,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30473718,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473715,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473712,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473709,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473706,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30473698,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473697,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473694,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473691,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473686,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473683,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473680,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473677,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473674,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473669,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473666,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473663,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473660,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473657,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30473647,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473646,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473643,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30473640,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473638,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473636,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30473628,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473627,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473624,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473621,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473618,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473615,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30473607,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473606,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473603,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473600,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473597,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473594,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473591,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473588,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473585,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473582,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30473572,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473571,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473568,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473565,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473563,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473561,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473553,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473552,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473549,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473547,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473544,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473541,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473538,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473535,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30473527,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473526,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473523,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473520,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473517,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473514,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473511,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473508,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473505,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473502,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0002"],"storage":{}},{"depth":1,"gas":30473499,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0002","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30473489,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473488,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473485,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473482,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473479,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473476,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473474,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473472,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473470,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473462,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473461,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473458,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473456,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473454,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473451,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30473443,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473442,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473439,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473436,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473433,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473430,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473427,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473424,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473421,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30473411,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473408,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30473405,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473402,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473399,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473396,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473393,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473390,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473387,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30473377,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473376,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473373,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30473368,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30473365,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30473362,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473359,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30473356,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473353,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30473350,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473347,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473344,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473341,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473338,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30473330,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473329,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473326,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473323,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473318,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473315,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473312,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473309,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473306,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473301,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473298,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473295,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473292,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473289,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30473279,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473278,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473275,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30473272,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473270,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473268,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30473260,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473259,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473256,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473253,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473250,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473247,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30473239,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473238,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473235,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473232,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473229,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473226,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473223,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473220,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473217,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473214,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30473204,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473203,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473200,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473197,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473195,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473193,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30473185,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473184,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30473181,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473179,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473176,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473173,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473170,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473167,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30473159,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473158,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473155,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473152,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473149,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473146,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473143,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473140,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473137,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473134,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0003"],"storage":{}},{"depth":1,"gas":30473131,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0003","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30473121,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473120,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473117,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473114,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473111,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473108,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473106,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473104,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473102,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30473094,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473093,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473090,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473088,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{}},{"depth":1,"gas":30473086,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473083,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30473075,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473074,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473071,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473068,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473065,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473062,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473059,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473056,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30473053,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30473043,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473040,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30473037,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473034,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30473031,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473028,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30473025,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473022,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30473019,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30473009,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473008,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30473005,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30473000,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060"],"storage":{}},{"depth":1,"gas":30472997,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30472994,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30472991,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472988,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30472985,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30472982,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30472979,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472976,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472973,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472970,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30472962,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472961,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472958,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472955,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30472950,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472947,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472944,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472941,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472938,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472933,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30472930,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30472927,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472924,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472921,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30472911,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472910,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472907,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472904,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30472902,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472900,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472892,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472891,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472888,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472885,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472882,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472879,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30472871,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472870,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472867,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472864,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472861,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472858,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472855,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472852,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472849,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472846,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30472836,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472835,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472832,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000078","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472829,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472827,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472825,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472817,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472816,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472813,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30472811,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472808,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472805,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472802,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472799,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30472791,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472790,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472787,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472784,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472781,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472778,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472775,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472772,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472769,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472766,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0004"],"storage":{}},{"depth":1,"gas":30472763,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0004","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30472753,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472752,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472749,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472746,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472743,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472740,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472738,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472736,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472734,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472726,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472725,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472722,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472720,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30472718,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472715,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30472707,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472706,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472703,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30472700,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472697,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472694,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472691,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472688,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472685,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30472675,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472672,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30472669,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472666,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472663,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472660,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30472657,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472654,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472651,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30472641,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472640,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472637,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30472632,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30472629,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000100"],"storage":{}},{"depth":1,"gas":30472626,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472623,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472620,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472617,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30472614,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472611,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472608,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472605,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472602,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30472594,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472593,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472590,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472587,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472582,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472579,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472576,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472573,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472570,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472565,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472562,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472559,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472556,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472553,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30472543,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472542,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472539,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472536,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472534,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472532,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472524,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472523,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472520,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472517,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472514,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472511,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30472503,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472502,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472499,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472496,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472493,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472490,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472487,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472484,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472481,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472478,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30472468,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472467,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472464,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472461,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472459,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472457,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472449,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472448,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472445,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472443,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472440,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472437,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472434,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472431,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30472423,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472422,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472419,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472416,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472413,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472410,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472407,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472404,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472401,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472398,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0005"],"storage":{}},{"depth":1,"gas":30472395,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0005","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30472385,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472384,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472381,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472378,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472375,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472372,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472370,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472368,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472366,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472358,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472357,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472354,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472352,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30472350,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472347,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30472339,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472338,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472335,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30472332,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472329,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472326,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472323,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472320,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472317,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30472307,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472304,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30472301,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472298,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472295,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472292,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30472289,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472286,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472283,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30472273,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472272,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472269,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30472264,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{}},{"depth":1,"gas":30472261,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000120"],"storage":{}},{"depth":1,"gas":30472258,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472255,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472252,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472249,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30472246,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472243,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472240,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472237,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472234,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30472226,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472225,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472222,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472219,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472214,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472211,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472208,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472205,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472202,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472197,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472194,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472191,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472188,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472185,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30472175,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472174,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472171,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472168,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472166,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472164,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30472156,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472155,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472152,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472149,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472146,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472143,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30472135,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472134,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472131,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472128,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472125,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472122,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472119,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472116,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472113,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472110,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30472100,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472099,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472096,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472093,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472091,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472089,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30472081,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472080,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472077,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30472075,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472072,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472069,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472066,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472063,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30472055,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472054,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472051,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30472048,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472045,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472042,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472039,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472036,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472033,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472030,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0006"],"storage":{}},{"depth":1,"gas":30472027,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0006","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30472017,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472016,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472013,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30472010,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30472007,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30472004,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30472002,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30472000,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471998,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30471990,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471989,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471986,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30471984,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000005"],"storage":{}},{"depth":1,"gas":30471982,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471979,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30471971,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471970,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471967,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30471964,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471961,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471958,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471955,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471952,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471949,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30471939,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471936,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30471933,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471930,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471927,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471924,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30471921,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471918,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471915,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30471905,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471904,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471901,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30471896,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0"],"storage":{}},{"depth":1,"gas":30471893,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000140"],"storage":{}},{"depth":1,"gas":30471890,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471887,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471884,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471881,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30471878,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471875,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471872,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471869,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471866,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30471858,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471857,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471854,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471851,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471846,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471843,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471840,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471837,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471834,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471829,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471826,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471823,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471820,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471817,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30471807,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471806,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471803,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471800,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471798,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471796,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471788,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471787,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471784,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30471781,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471778,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471775,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30471767,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471766,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471763,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471760,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471757,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471754,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471751,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471748,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471745,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471742,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30471732,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471731,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471728,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30471725,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471723,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471721,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30471713,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471712,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471709,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471707,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471704,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471701,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30471698,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471695,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30471687,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471686,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471683,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471680,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471677,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471674,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471671,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471668,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471665,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471662,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0007"],"storage":{}},{"depth":1,"gas":30471659,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0007","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30471649,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471648,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471645,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471642,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471639,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30471636,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471634,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471632,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471630,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30471622,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471621,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471618,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471616,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000006"],"storage":{}},{"depth":1,"gas":30471614,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471611,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30471603,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471602,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471599,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30471596,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471593,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471590,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471587,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471584,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471581,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30471571,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471568,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30471565,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471562,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471559,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471556,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30471553,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471550,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471547,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30471537,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471536,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471533,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30471528,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30471525,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000160"],"storage":{}},{"depth":1,"gas":30471522,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471519,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471516,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471513,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30471510,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471507,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471504,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471501,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471498,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30471490,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471489,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471486,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471483,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471478,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471475,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471472,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471469,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471466,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471461,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471458,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471455,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471452,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471449,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30471439,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471438,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471435,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471432,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471430,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471428,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471420,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471419,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471416,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30471413,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471410,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471407,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30471399,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471398,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471395,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471392,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471389,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471386,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471383,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471380,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471377,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471374,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30471364,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471363,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471360,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30471357,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471355,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471353,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30471345,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471344,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471341,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471339,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471336,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471333,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30471330,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471327,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30471319,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471318,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471315,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471312,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471309,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471306,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471303,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471300,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471297,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471294,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0008"],"storage":{}},{"depth":1,"gas":30471291,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0008","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30471281,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471280,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471277,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471274,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471271,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30471268,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471266,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471264,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471262,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30471254,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471253,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471250,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471248,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000007"],"storage":{}},{"depth":1,"gas":30471246,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471243,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30471235,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471234,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471231,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30471228,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471225,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471222,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471219,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471216,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471213,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30471203,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471200,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30471197,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471194,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471191,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471188,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30471185,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471182,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471179,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30471169,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471168,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471165,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30471160,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000100"],"storage":{}},{"depth":1,"gas":30471157,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000180"],"storage":{}},{"depth":1,"gas":30471154,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471151,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471148,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471145,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30471142,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471139,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30471136,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471133,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471130,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30471122,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471121,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471118,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471115,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471110,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471107,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471104,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471101,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471098,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471093,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471090,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471087,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471084,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471081,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30471071,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471070,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471067,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471064,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471062,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30471060,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30471052,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471051,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471048,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30471045,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471042,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471039,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30471031,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471030,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471027,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471024,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471021,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471018,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471015,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30471012,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30471009,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30471006,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30470996,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470995,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470992,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470989,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470987,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470985,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470977,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470976,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470973,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470971,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470968,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470965,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470962,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470959,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30470951,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470950,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470947,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470944,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470941,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470938,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470935,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470932,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470929,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470926,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0009"],"storage":{}},{"depth":1,"gas":30470923,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0009","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30470913,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470912,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470909,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470906,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470903,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470900,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470898,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470896,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470894,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470886,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470885,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470882,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470880,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000008"],"storage":{}},{"depth":1,"gas":30470878,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470875,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30470867,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470866,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470863,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30470860,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470857,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470854,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470851,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470848,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470845,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30470835,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470832,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30470829,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470826,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470823,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470820,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30470817,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470814,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470811,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30470801,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470800,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470797,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30470792,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000120"],"storage":{}},{"depth":1,"gas":30470789,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","00000000000000000000000000000000000000000000000000000000000001a0"],"storage":{}},{"depth":1,"gas":30470786,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470783,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30470780,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470777,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30470774,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470771,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470768,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470765,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470762,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30470754,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470753,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470750,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470747,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470742,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470739,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470736,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470733,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470730,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470725,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470722,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470719,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470716,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470713,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30470703,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470702,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470699,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30470696,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470694,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470692,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30470684,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470683,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470680,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470677,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470674,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470671,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30470663,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470662,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470659,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470656,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470653,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470650,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470647,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470644,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470641,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470638,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30470628,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470627,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470624,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470621,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470619,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470617,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470609,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470608,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470605,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470603,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470600,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470597,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470594,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470591,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30470583,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470582,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470579,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470576,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470573,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470570,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470567,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470564,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470561,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470558,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000a"],"storage":{}},{"depth":1,"gas":30470555,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000a","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30470545,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470544,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470541,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470538,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470535,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470532,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470530,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470528,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470526,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470518,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470517,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470514,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470512,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000009"],"storage":{}},{"depth":1,"gas":30470510,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470507,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30470499,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470498,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470495,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30470492,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470489,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470486,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470483,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470480,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470477,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30470467,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470464,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30470461,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470458,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470455,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470452,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30470449,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470446,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470443,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30470433,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470432,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470429,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30470424,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000140"],"storage":{}},{"depth":1,"gas":30470421,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","00000000000000000000000000000000000000000000000000000000000001c0"],"storage":{}},{"depth":1,"gas":30470418,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470415,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30470412,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470409,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30470406,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470403,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470400,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470397,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470394,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30470386,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470385,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470382,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470379,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470374,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470371,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470368,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470365,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470362,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470357,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470354,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470351,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470348,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470345,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30470335,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470334,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470331,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30470328,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470326,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470324,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30470316,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470315,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470312,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470309,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470306,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470303,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30470295,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470294,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470291,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470288,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470285,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470282,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470279,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470276,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470273,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470270,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30470260,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470259,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470256,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470253,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470251,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470249,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30470241,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470240,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470237,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30470235,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470232,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470229,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470226,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470223,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30470215,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470214,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470211,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470208,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470205,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470202,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470199,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470196,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470193,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470190,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000b"],"storage":{}},{"depth":1,"gas":30470187,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000b","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30470177,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470176,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470173,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470170,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470167,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470164,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470162,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470160,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470158,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30470150,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470149,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470146,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470144,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000a"],"storage":{}},{"depth":1,"gas":30470142,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470139,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30470131,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470130,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470127,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30470124,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470121,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470118,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470115,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470112,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470109,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30470099,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470096,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30470093,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470090,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470087,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470084,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30470081,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470078,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30470075,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30470065,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470064,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470061,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30470056,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000160"],"storage":{}},{"depth":1,"gas":30470053,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","00000000000000000000000000000000000000000000000000000000000001e0"],"storage":{}},{"depth":1,"gas":30470050,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470047,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30470044,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470041,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30470038,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470035,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30470032,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470029,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470026,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30470018,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470017,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470014,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470011,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470006,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30470003,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30470000,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469997,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469994,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469989,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469986,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469983,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469980,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469977,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30469967,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469966,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469963,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469960,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469958,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469956,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469948,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469947,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469944,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469941,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469938,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469935,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30469927,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469926,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469923,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469920,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469917,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469914,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469911,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469908,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469905,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469902,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30469892,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469891,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469888,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469885,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469883,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469881,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469873,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469872,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469869,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469867,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469864,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469861,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469858,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469855,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30469847,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469846,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469843,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469840,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469837,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469834,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469831,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469828,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469825,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469822,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000c"],"storage":{}},{"depth":1,"gas":30469819,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000c","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30469809,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469808,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469805,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469802,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469799,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469796,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469794,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469792,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469790,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469782,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469781,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469778,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000b","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469776,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000b"],"storage":{}},{"depth":1,"gas":30469774,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469771,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30469763,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469762,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469759,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30469756,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469753,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469750,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469747,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469744,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469741,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30469731,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469728,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30469725,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469722,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469719,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469716,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30469713,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469710,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469707,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30469697,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469696,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469693,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30469688,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000180"],"storage":{}},{"depth":1,"gas":30469685,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000200"],"storage":{}},{"depth":1,"gas":30469682,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469679,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469676,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469673,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30469670,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469667,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469664,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469661,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469658,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30469650,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469649,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469646,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469643,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469638,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469635,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469632,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469629,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469626,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469621,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469618,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469615,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469612,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469609,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30469599,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469598,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469595,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469592,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469590,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469588,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469580,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469579,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469576,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469573,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469570,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469567,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30469559,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469558,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469555,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469552,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469549,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469546,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469543,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469540,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469537,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469534,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30469524,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469523,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469520,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469517,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469515,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469513,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469505,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469504,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469501,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469499,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469496,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469493,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469490,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469487,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30469479,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469478,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469475,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469472,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469469,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469466,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469463,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469460,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469457,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469454,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000d"],"storage":{}},{"depth":1,"gas":30469451,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000d","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30469441,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469440,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469437,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469434,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469431,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469428,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469426,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469424,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469422,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469414,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469413,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469410,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000c","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469408,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000c"],"storage":{}},{"depth":1,"gas":30469406,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469403,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30469395,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469394,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469391,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30469388,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469385,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469382,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469379,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469376,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469373,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30469363,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469360,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30469357,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469354,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469351,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469348,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30469345,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469342,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469339,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30469329,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469328,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469325,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30469320,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000001a0"],"storage":{}},{"depth":1,"gas":30469317,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000220"],"storage":{}},{"depth":1,"gas":30469314,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469311,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469308,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469305,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30469302,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469299,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469296,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469293,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469290,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30469282,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469281,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469278,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469275,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469270,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469267,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469264,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469261,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469258,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469253,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469250,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469247,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469244,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469241,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30469231,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469230,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469227,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469224,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469222,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469220,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30469212,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469211,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469208,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469205,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469202,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469199,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30469191,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469190,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469187,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469184,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469181,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469178,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469175,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469172,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469169,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469166,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30469156,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469155,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469152,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469149,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469147,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469145,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30469137,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469136,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469133,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30469131,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469128,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469125,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469122,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469119,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30469111,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469110,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469107,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469104,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469101,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469098,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469095,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469092,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469089,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469086,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000e"],"storage":{}},{"depth":1,"gas":30469083,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000e","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30469073,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469072,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469069,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469066,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469063,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469060,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469058,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469056,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469054,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30469046,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469045,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469042,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000d","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469040,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000d"],"storage":{}},{"depth":1,"gas":30469038,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469035,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30469027,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469026,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469023,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30469020,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469017,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30469014,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30469011,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30469008,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30469005,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30468995,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468992,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30468989,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468986,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468983,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468980,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30468977,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468974,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468971,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30468961,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468960,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468957,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30468952,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000001c0"],"storage":{}},{"depth":1,"gas":30468949,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000240"],"storage":{}},{"depth":1,"gas":30468946,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468943,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468940,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468937,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30468934,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468931,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468928,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468925,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468922,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30468914,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468913,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468910,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468907,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468902,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468899,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468896,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468893,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468890,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468885,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468882,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468879,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468876,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468873,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30468863,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468862,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468859,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468856,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468854,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468852,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468844,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468843,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468840,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468837,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468834,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468831,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30468823,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468822,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468819,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468816,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468813,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468810,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468807,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468804,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468801,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468798,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30468788,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468787,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468784,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468781,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468779,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468777,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468769,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468768,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468765,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468763,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468760,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468757,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30468754,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468751,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30468743,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468742,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468739,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468736,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468733,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468730,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468727,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468724,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468721,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468718,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000f"],"storage":{}},{"depth":1,"gas":30468715,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000f","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30468705,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468704,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468701,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468698,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468695,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30468692,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468690,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468688,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468686,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30468678,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468677,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468674,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000e","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468672,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000e"],"storage":{}},{"depth":1,"gas":30468670,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468667,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30468659,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468658,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468655,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30468652,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468649,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468646,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468643,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468640,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468637,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30468627,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468624,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30468621,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468618,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468615,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468612,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30468609,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468606,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468603,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30468593,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468592,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468589,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30468584,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000001e0"],"storage":{}},{"depth":1,"gas":30468581,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000260"],"storage":{}},{"depth":1,"gas":30468578,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30468575,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468572,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30468569,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30468566,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30468563,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468560,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468557,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468554,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30468546,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468545,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468542,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468539,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30468534,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468531,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468528,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468525,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468522,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468517,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30468514,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30468511,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468508,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468505,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30468495,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468494,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468491,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468488,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30468486,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468484,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468476,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468475,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468472,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468469,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468466,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468463,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30468455,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468454,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468451,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468448,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000078","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468445,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468442,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468439,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468436,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468433,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468430,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30468420,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468419,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468416,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000b4","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468413,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30468411,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468409,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468401,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468400,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468397,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000078"],"storage":{}},{"depth":1,"gas":30468395,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468392,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468389,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30468386,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468383,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30468375,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468374,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468371,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468368,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468365,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468362,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468359,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468356,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468353,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468350,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0010"],"storage":{}},{"depth":1,"gas":30468347,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0010","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30468337,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468336,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468333,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468330,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468327,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30468324,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468322,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468320,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468318,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30468310,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468309,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468306,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468304,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000000f"],"storage":{}},{"depth":1,"gas":30468302,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468299,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30468291,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468290,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468287,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30468284,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468281,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468278,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468275,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468272,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468269,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30468259,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468256,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30468253,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468250,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468247,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468244,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30468241,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468238,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468235,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30468225,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468224,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468221,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30468216,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000200"],"storage":{}},{"depth":1,"gas":30468213,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000280"],"storage":{}},{"depth":1,"gas":30468210,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468207,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468204,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468201,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30468198,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468195,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30468192,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468189,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468186,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30468178,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468177,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468174,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468171,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468166,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468163,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468160,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468157,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468154,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468149,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468146,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468143,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468140,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468137,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30468127,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468126,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468123,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468120,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468118,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468116,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30468108,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468107,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468104,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468101,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468098,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468095,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30468087,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468086,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468083,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468080,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468077,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468074,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468071,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468068,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468065,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30468062,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30468052,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468051,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468048,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468045,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468043,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468041,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30468033,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468032,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468029,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30468027,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468024,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468021,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30468018,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468015,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30468007,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468006,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30468003,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30468000,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467997,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467994,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467991,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467988,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467985,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467982,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0011"],"storage":{}},{"depth":1,"gas":30467979,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0011","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30467969,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467968,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467965,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467962,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467959,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467956,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467954,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467952,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467950,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467942,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467941,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467938,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467936,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30467934,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467931,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30467923,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467922,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467919,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30467916,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467913,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467910,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467907,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467904,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467901,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30467891,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467888,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30467885,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467882,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467879,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467876,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30467873,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467870,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467867,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30467857,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467856,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467853,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30467848,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000220"],"storage":{}},{"depth":1,"gas":30467845,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000002a0"],"storage":{}},{"depth":1,"gas":30467842,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467839,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467836,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467833,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30467830,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467827,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467824,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467821,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467818,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30467810,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467809,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467806,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467803,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467798,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467795,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467792,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467789,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467786,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467781,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467778,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467775,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467772,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467769,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30467759,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467758,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467755,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467752,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467750,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467748,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467740,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467739,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467736,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30467733,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467730,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467727,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30467719,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467718,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467715,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467712,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467709,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467706,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467703,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467700,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467697,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467694,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30467684,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467683,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467680,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30467677,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467675,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467673,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30467665,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467664,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467661,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467659,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467656,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467653,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467650,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467647,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30467639,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467638,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467635,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467632,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467629,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467626,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467623,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467620,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467617,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467614,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0012"],"storage":{}},{"depth":1,"gas":30467611,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0012","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30467601,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467600,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467597,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467594,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467591,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467588,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467586,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467584,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467582,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467574,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467573,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467570,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000011","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467568,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000011"],"storage":{}},{"depth":1,"gas":30467566,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467563,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30467555,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467554,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467551,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30467548,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467545,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467542,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467539,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467536,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467533,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30467523,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467520,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30467517,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467514,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467511,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467508,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30467505,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467502,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467499,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30467489,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467488,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467485,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30467480,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000240"],"storage":{}},{"depth":1,"gas":30467477,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000002c0"],"storage":{}},{"depth":1,"gas":30467474,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467471,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467468,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467465,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30467462,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467459,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467456,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467453,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467450,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30467442,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467441,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467438,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467435,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467430,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467427,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467424,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467421,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467418,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467413,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467410,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467407,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467404,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467401,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30467391,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467390,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467387,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467384,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467382,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467380,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467372,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467371,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467368,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30467365,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467362,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467359,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30467351,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467350,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467347,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467344,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467341,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467338,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467335,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467332,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467329,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467326,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30467316,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467315,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467312,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30467309,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467307,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467305,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30467297,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467296,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467293,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30467291,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467288,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467285,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467282,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467279,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30467271,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467270,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467267,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467264,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467261,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467258,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467255,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467252,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467249,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467246,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0013"],"storage":{}},{"depth":1,"gas":30467243,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0013","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30467233,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467232,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467229,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467226,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467223,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467220,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467218,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467216,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467214,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30467206,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467205,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467202,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000012","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467200,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000012"],"storage":{}},{"depth":1,"gas":30467198,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467195,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30467187,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467186,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467183,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30467180,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467177,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467174,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467171,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467168,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467165,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30467155,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467152,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30467149,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467146,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467143,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467140,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30467137,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467134,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467131,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30467121,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467120,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467117,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30467112,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000260"],"storage":{}},{"depth":1,"gas":30467109,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000002e0"],"storage":{}},{"depth":1,"gas":30467106,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467103,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467100,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467097,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30467094,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467091,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30467088,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467085,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467082,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30467074,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467073,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467070,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467067,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467062,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467059,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467056,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467053,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467050,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467045,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467042,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467039,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467036,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30467033,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30467023,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467022,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467019,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467016,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467014,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30467012,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30467004,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467003,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30467000,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466997,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466994,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466991,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30466983,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466982,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466979,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466976,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466973,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466970,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466967,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466964,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466961,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466958,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30466948,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466947,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466944,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466941,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466939,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466937,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466929,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466928,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466925,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466923,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466920,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466917,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466914,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466911,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30466903,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466902,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466899,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466896,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466893,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466890,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466887,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466884,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466881,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466878,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0014"],"storage":{}},{"depth":1,"gas":30466875,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0014","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30466865,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466864,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466861,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466858,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466855,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466852,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466850,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466848,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466846,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466838,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466837,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466834,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000013","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466832,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000013"],"storage":{}},{"depth":1,"gas":30466830,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466827,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30466819,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466818,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466815,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30466812,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466809,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466806,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466803,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466800,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466797,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30466787,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466784,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30466781,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466778,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466775,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466772,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30466769,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466766,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466763,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30466753,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466752,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466749,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30466744,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000280"],"storage":{}},{"depth":1,"gas":30466741,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000300"],"storage":{}},{"depth":1,"gas":30466738,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30466735,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30466732,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30466729,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30466726,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30466723,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466720,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466717,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466714,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30466706,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466705,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466702,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466699,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30466694,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466691,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466688,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466685,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466682,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466677,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30466674,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30466671,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466668,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466665,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30466655,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466654,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466651,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30466648,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000003"],"storage":{}},{"depth":1,"gas":30466646,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466644,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30466636,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466635,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466632,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466629,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466626,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466623,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30466615,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466614,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466611,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466608,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000b4","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466605,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466602,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466599,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466596,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466593,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466590,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30466580,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466579,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000138","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466576,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000f0","000000000000000000000000000000000000000000000000000000000000003c","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466573,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4","000000000000000000000000000000000000000000000000000000000000003c"],"storage":{}},{"depth":1,"gas":30466571,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466569,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466561,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466560,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000b4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466557,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","00000000000000000000000000000000000000000000000000000000000000b4"],"storage":{}},{"depth":1,"gas":30466555,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466552,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466549,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466546,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466543,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30466535,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466534,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466531,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466528,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466525,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466522,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466519,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466516,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466513,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466510,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0015"],"storage":{}},{"depth":1,"gas":30466507,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0015","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30466497,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466496,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466493,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466490,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466487,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466484,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466482,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466480,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466478,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466470,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466469,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466466,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466464,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000014"],"storage":{}},{"depth":1,"gas":30466462,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466459,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30466451,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466450,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466447,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30466444,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466441,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466438,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466435,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466432,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466429,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30466419,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466416,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30466413,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466410,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466407,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466404,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30466401,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466398,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466395,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30466385,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466384,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466381,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30466376,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000002a0"],"storage":{}},{"depth":1,"gas":30466373,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000320"],"storage":{}},{"depth":1,"gas":30466370,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466367,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30466364,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466361,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30466358,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466355,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466352,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466349,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466346,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30466338,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466337,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466334,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466331,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466326,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466323,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466320,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466317,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466314,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466309,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466306,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466303,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466300,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466297,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30466287,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466286,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466283,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30466280,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466278,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466276,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30466268,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466267,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466264,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466261,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466258,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466255,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30466247,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466246,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466243,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466240,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466237,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466234,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466231,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466228,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466225,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466222,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30466212,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466211,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466208,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466205,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466203,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466201,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30466193,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466192,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466189,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30466187,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466184,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466181,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466178,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466175,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30466167,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466166,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466163,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466160,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466157,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466154,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466151,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466148,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466145,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466142,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016"],"storage":{}},{"depth":1,"gas":30466139,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30466129,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466128,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466125,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466122,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466119,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466116,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466114,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466112,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466110,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30466102,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466101,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466098,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000015","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466096,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000015"],"storage":{}},{"depth":1,"gas":30466094,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466091,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30466083,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466082,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466079,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30466076,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466073,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466070,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466067,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466064,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30466061,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30466051,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466048,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30466045,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466042,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30466039,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466036,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30466033,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466030,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30466027,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30466017,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466016,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30466013,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30466008,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000002c0"],"storage":{}},{"depth":1,"gas":30466005,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000340"],"storage":{}},{"depth":1,"gas":30466002,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465999,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465996,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465993,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30465990,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465987,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465984,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465981,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465978,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30465970,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465969,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465966,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465963,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465958,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465955,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465952,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465949,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465946,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465941,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465938,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465935,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465932,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465929,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30465919,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465918,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465915,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465912,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465910,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465908,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465900,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465899,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465896,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465893,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465890,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465887,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30465879,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465878,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465875,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465872,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465869,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465866,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465863,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465860,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465857,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465854,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30465844,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465843,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465840,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465837,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465835,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465833,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465825,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465824,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465821,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465819,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465816,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465813,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465810,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465807,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30465799,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465798,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465795,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465792,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465789,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465786,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465783,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465780,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465777,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465774,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0017"],"storage":{}},{"depth":1,"gas":30465771,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0017","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30465761,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465760,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465757,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465754,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465751,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465748,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465746,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465744,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465742,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465734,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465733,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465730,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465728,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000016"],"storage":{}},{"depth":1,"gas":30465726,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465723,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30465715,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465714,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465711,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30465708,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465705,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465702,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465699,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465696,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465693,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30465683,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465680,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30465677,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465674,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465671,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465668,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30465665,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465662,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465659,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30465649,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465648,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465645,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30465640,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000002e0"],"storage":{}},{"depth":1,"gas":30465637,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000360"],"storage":{}},{"depth":1,"gas":30465634,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465631,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465628,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465625,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30465622,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465619,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465616,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465613,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465610,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30465602,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465601,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465598,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465595,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465590,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465587,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465584,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465581,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465578,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465573,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465570,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465567,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465564,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465561,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30465551,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465550,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465547,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465544,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465542,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465540,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465532,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465531,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465528,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465525,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465522,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465519,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30465511,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465510,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465507,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465504,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465501,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465498,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465495,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465492,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465489,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465486,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30465476,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465475,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465472,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465469,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465467,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465465,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465457,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465456,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465453,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465451,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465448,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465445,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465442,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465439,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30465431,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465430,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465427,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465424,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465421,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465418,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465415,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465412,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465409,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465406,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0018"],"storage":{}},{"depth":1,"gas":30465403,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0018","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30465393,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465392,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465389,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465386,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465383,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465380,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465378,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465376,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465374,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465366,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465365,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465362,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465360,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{}},{"depth":1,"gas":30465358,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465355,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30465347,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465346,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465343,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30465340,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465337,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465334,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465331,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465328,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465325,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30465315,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465312,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30465309,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465306,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465303,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465300,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30465297,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465294,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465291,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30465281,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465280,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465277,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30465272,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000300"],"storage":{}},{"depth":1,"gas":30465269,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000380"],"storage":{}},{"depth":1,"gas":30465266,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465263,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465260,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465257,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30465254,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465251,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465248,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465245,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465242,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30465234,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465233,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465230,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465227,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465222,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465219,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465216,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465213,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465210,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465205,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465202,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465199,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465196,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465193,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30465183,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465182,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465179,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465176,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465174,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465172,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30465164,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465163,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465160,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465157,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465154,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465151,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30465143,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465142,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465139,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465136,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465133,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465130,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465127,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465124,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465121,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465118,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30465108,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465107,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465104,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465101,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465099,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465097,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30465089,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465088,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465085,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30465083,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465080,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465077,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465074,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465071,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30465063,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465062,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465059,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465056,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465053,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465050,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465047,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465044,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465041,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465038,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0019"],"storage":{}},{"depth":1,"gas":30465035,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0019","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30465025,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465024,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465021,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30465018,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30465015,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30465012,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30465010,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30465008,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30465006,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30464998,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464997,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464994,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30464992,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000018"],"storage":{}},{"depth":1,"gas":30464990,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464987,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30464979,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464978,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464975,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30464972,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464969,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464966,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464963,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464960,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464957,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30464947,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464944,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30464941,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464938,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464935,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464932,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30464929,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464926,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464923,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30464913,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464912,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464909,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30464904,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000320"],"storage":{}},{"depth":1,"gas":30464901,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000003a0"],"storage":{}},{"depth":1,"gas":30464898,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464895,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464892,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464889,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30464886,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464883,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464880,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464877,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464874,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30464866,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464865,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464862,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464859,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464854,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464851,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464848,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464845,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464842,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464837,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464834,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464831,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464828,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464825,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30464815,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464814,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464811,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464808,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464806,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464804,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464796,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464795,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464792,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30464789,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464786,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464783,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30464775,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464774,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464771,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464768,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464765,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464762,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464759,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464756,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464753,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464750,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30464740,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464739,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464736,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30464733,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464731,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464729,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30464721,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464720,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464717,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464715,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464712,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464709,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30464706,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464703,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30464695,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464694,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464691,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464688,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464685,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464682,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464679,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464676,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464673,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464670,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001a"],"storage":{}},{"depth":1,"gas":30464667,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001a","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30464657,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464656,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464653,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464650,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464647,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30464644,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464642,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464640,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464638,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30464630,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464629,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464626,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464624,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000019"],"storage":{}},{"depth":1,"gas":30464622,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464619,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30464611,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464610,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464607,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30464604,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464601,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464598,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464595,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464592,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464589,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30464579,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464576,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30464573,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464570,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464567,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464564,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30464561,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464558,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464555,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30464545,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464544,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464541,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30464536,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000340"],"storage":{}},{"depth":1,"gas":30464533,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000003c0"],"storage":{}},{"depth":1,"gas":30464530,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464527,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464524,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464521,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30464518,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464515,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464512,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464509,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464506,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30464498,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464497,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464494,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464491,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464486,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464483,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464480,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464477,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464474,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464469,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464466,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464463,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464460,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464457,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30464447,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464446,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464443,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464440,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464438,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464436,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464428,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464427,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464424,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30464421,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464418,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464415,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30464407,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464406,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464403,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464400,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464397,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464394,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464391,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464388,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464385,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464382,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30464372,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464371,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464368,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30464365,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464363,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464361,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30464353,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464352,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464349,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464347,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464344,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464341,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30464338,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464335,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30464327,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464326,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464323,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464320,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464317,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464314,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464311,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464308,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464305,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464302,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001b"],"storage":{}},{"depth":1,"gas":30464299,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001b","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30464289,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464288,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464285,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464282,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464279,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001a","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30464276,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464274,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464272,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464270,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30464262,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464261,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464258,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464256,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001a"],"storage":{}},{"depth":1,"gas":30464254,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464251,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30464243,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464242,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464239,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30464236,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464233,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464230,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464227,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464224,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464221,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30464211,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464208,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30464205,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464202,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464199,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464196,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30464193,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464190,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464187,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30464177,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464176,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464173,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30464168,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000360"],"storage":{}},{"depth":1,"gas":30464165,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000003e0"],"storage":{}},{"depth":1,"gas":30464162,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464159,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464156,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464153,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30464150,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464147,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30464144,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464141,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464138,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30464130,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464129,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464126,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464123,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464118,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464115,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464112,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464109,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464106,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464101,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464098,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464095,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464092,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464089,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30464079,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464078,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464075,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464072,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464070,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30464068,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30464060,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464059,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464056,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30464053,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464050,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464047,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30464039,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464038,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464035,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464032,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464029,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464026,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464023,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464020,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30464017,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30464014,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30464004,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464003,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30464000,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463997,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463995,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463993,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463985,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463984,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463981,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463979,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463976,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463973,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463970,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463967,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30463959,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463958,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463955,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463952,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463949,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463946,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463943,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463940,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463937,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463934,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001c"],"storage":{}},{"depth":1,"gas":30463931,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001c","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30463921,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463920,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463917,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463914,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463911,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001b","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463908,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463906,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463904,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463902,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463894,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463893,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463890,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463888,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001b"],"storage":{}},{"depth":1,"gas":30463886,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463883,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30463875,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463874,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463871,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463868,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463865,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463862,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463859,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463856,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463853,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30463843,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463840,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30463837,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463834,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463831,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463828,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463825,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463822,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463819,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30463809,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463808,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463805,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30463800,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000380"],"storage":{}},{"depth":1,"gas":30463797,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000400"],"storage":{}},{"depth":1,"gas":30463794,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463791,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30463788,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463785,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30463782,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463779,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463776,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463773,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463770,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30463762,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463761,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463758,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463755,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463750,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463747,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463744,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463741,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463738,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463733,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463730,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463727,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463724,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463721,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30463711,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463710,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463707,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30463704,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463702,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463700,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30463692,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463691,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463688,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463685,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463682,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463679,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30463671,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463670,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463667,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463664,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463661,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463658,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463655,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463652,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463649,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463646,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30463636,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463635,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463632,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463629,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463627,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463625,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463617,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463616,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463613,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463611,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463608,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463605,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463602,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463599,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30463591,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463590,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463587,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463584,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463581,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463578,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463575,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463572,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463569,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463566,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001d"],"storage":{}},{"depth":1,"gas":30463563,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001d","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30463553,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463552,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463549,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463546,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463543,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001c","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463540,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463538,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463536,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463534,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463526,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463525,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463522,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463520,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001c"],"storage":{}},{"depth":1,"gas":30463518,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463515,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30463507,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463506,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463503,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463500,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463497,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463494,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463491,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463488,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463485,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30463475,"gasCost":3,"op":"DUP2","pc":259,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463472,"gasCost":3,"op":"DUP2","pc":260,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30463469,"gasCost":3,"op":"PUSH2","pc":261,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463466,"gasCost":3,"op":"AND","pc":264,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463463,"gasCost":3,"op":"PUSH1","pc":265,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463460,"gasCost":3,"op":"DUP2","pc":267,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463457,"gasCost":3,"op":"LT","pc":268,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463454,"gasCost":3,"op":"PUSH2","pc":269,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463451,"gasCost":10,"op":"JUMPI","pc":272,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000118"],"storage":{}},{"depth":1,"gas":30463441,"gasCost":1,"op":"JUMPDEST","pc":280,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463440,"gasCost":3,"op":"PUSH1","pc":281,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463437,"gasCost":5,"op":"MUL","pc":283,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30463432,"gasCost":3,"op":"ADD","pc":284,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000003a0"],"storage":{}},{"depth":1,"gas":30463429,"gasCost":3,"op":"MLOAD","pc":285,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000420"],"storage":{}},{"depth":1,"gas":30463426,"gasCost":3,"op":"PUSH2","pc":286,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463423,"gasCost":3,"op":"SWAP1","pc":289,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30463420,"gasCost":3,"op":"PUSH1","pc":290,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463417,"gasCost":3,"op":"AND","pc":292,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff"],"storage":{}},{"depth":1,"gas":30463414,"gasCost":3,"op":"PUSH2","pc":293,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463411,"gasCost":3,"op":"DUP4","pc":296,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463408,"gasCost":3,"op":"AND","pc":297,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463405,"gasCost":3,"op":"PUSH2","pc":298,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463402,"gasCost":8,"op":"JUMP","pc":301,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000024c"],"storage":{}},{"depth":1,"gas":30463394,"gasCost":1,"op":"JUMPDEST","pc":588,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463393,"gasCost":3,"op":"DUP1","pc":589,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463390,"gasCost":3,"op":"DUP3","pc":590,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463387,"gasCost":5,"op":"MUL","pc":591,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463382,"gasCost":3,"op":"DUP2","pc":592,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463379,"gasCost":3,"op":"ISZERO","pc":593,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463376,"gasCost":3,"op":"DUP3","pc":594,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463373,"gasCost":3,"op":"DUP3","pc":595,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463370,"gasCost":5,"op":"DIV","pc":596,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463365,"gasCost":3,"op":"DUP5","pc":597,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463362,"gasCost":3,"op":"EQ","pc":598,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463359,"gasCost":3,"op":"OR","pc":599,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463356,"gasCost":3,"op":"PUSH2","pc":600,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463353,"gasCost":10,"op":"JUMPI","pc":603,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30463343,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463342,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463339,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30463336,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463334,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463332,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000012e"],"storage":{}},{"depth":1,"gas":30463324,"gasCost":1,"op":"JUMPDEST","pc":302,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463323,"gasCost":3,"op":"PUSH2","pc":303,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463320,"gasCost":3,"op":"SWAP1","pc":306,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463317,"gasCost":3,"op":"DUP5","pc":307,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463314,"gasCost":3,"op":"PUSH2","pc":308,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463311,"gasCost":8,"op":"JUMP","pc":311,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{}},{"depth":1,"gas":30463303,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463302,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463299,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463296,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463293,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463290,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463287,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463284,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463281,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463278,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{}},{"depth":1,"gas":30463268,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463267,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000138","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463264,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463261,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463259,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463257,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000138"],"storage":{}},{"depth":1,"gas":30463249,"gasCost":1,"op":"JUMPDEST","pc":312,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463248,"gasCost":3,"op":"SWAP3","pc":313,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463245,"gasCost":2,"op":"POP","pc":314,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463243,"gasCost":3,"op":"DUP1","pc":315,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463240,"gasCost":3,"op":"PUSH2","pc":316,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463237,"gasCost":3,"op":"DUP2","pc":319,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463234,"gasCost":3,"op":"PUSH2","pc":320,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463231,"gasCost":8,"op":"JUMP","pc":323,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000276"],"storage":{}},{"depth":1,"gas":30463223,"gasCost":1,"op":"JUMPDEST","pc":630,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463222,"gasCost":3,"op":"PUSH1","pc":631,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463219,"gasCost":3,"op":"PUSH2","pc":633,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463216,"gasCost":3,"op":"DUP1","pc":636,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463213,"gasCost":3,"op":"DUP4","pc":637,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463210,"gasCost":3,"op":"AND","pc":638,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463207,"gasCost":3,"op":"DUP2","pc":639,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463204,"gasCost":3,"op":"DUP2","pc":640,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463201,"gasCost":3,"op":"SUB","pc":641,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463198,"gasCost":3,"op":"PUSH2","pc":642,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001e"],"storage":{}},{"depth":1,"gas":30463195,"gasCost":10,"op":"JUMPI","pc":645,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d","ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001e","000000000000000000000000000000000000000000000000000000000000028d"],"storage":{}},{"depth":1,"gas":30463185,"gasCost":1,"op":"JUMPDEST","pc":653,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463184,"gasCost":3,"op":"PUSH1","pc":654,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463181,"gasCost":3,"op":"ADD","pc":656,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463178,"gasCost":3,"op":"SWAP4","pc":657,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463175,"gasCost":3,"op":"SWAP3","pc":658,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463172,"gasCost":2,"op":"POP","pc":659,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463170,"gasCost":2,"op":"POP","pc":660,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463168,"gasCost":2,"op":"POP","pc":661,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463166,"gasCost":8,"op":"JUMP","pc":662,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30463158,"gasCost":1,"op":"JUMPDEST","pc":324,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463157,"gasCost":3,"op":"SWAP2","pc":325,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463154,"gasCost":2,"op":"POP","pc":326,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463152,"gasCost":2,"op":"POP","pc":327,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001d"],"storage":{}},{"depth":1,"gas":30463150,"gasCost":3,"op":"PUSH2","pc":328,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463147,"gasCost":8,"op":"JUMP","pc":331,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000f5"],"storage":{}},{"depth":1,"gas":30463139,"gasCost":1,"op":"JUMPDEST","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463138,"gasCost":3,"op":"PUSH1","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463135,"gasCost":3,"op":"DUP2","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463132,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463129,"gasCost":3,"op":"AND","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000ffff"],"storage":{}},{"depth":1,"gas":30463126,"gasCost":3,"op":"LT","pc":253,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463123,"gasCost":3,"op":"ISZERO","pc":254,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463120,"gasCost":3,"op":"PUSH2","pc":255,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30463117,"gasCost":10,"op":"JUMPI","pc":258,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000014c"],"storage":{}},{"depth":1,"gas":30463107,"gasCost":1,"op":"JUMPDEST","pc":332,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463106,"gasCost":2,"op":"POP","pc":333,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"storage":{}},{"depth":1,"gas":30463104,"gasCost":3,"op":"DUP2","pc":334,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30463101,"gasCost":3,"op":"PUSH1","pc":335,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463098,"gasCost":3,"op":"DUP1","pc":337,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463095,"gasCost":3,"op":"DUP3","pc":338,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30463092,"gasCost":3,"op":"DUP3","pc":339,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{}},{"depth":1,"gas":30463089,"gasCost":2100,"op":"SLOAD","pc":340,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460989,"gasCost":3,"op":"PUSH2","pc":341,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460986,"gasCost":3,"op":"SWAP2","pc":344,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000015e"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460983,"gasCost":3,"op":"SWAP1","pc":345,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460980,"gasCost":3,"op":"PUSH2","pc":346,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460977,"gasCost":8,"op":"JUMP","pc":349,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000263"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460969,"gasCost":1,"op":"JUMPDEST","pc":611,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460968,"gasCost":3,"op":"DUP1","pc":612,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460965,"gasCost":3,"op":"DUP3","pc":613,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460962,"gasCost":3,"op":"ADD","pc":614,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460959,"gasCost":3,"op":"DUP1","pc":615,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460956,"gasCost":3,"op":"DUP3","pc":616,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460953,"gasCost":3,"op":"GT","pc":617,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1","00000000000000000000000000000000000000000000000000000000000000f1","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460950,"gasCost":3,"op":"ISZERO","pc":618,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460947,"gasCost":3,"op":"PUSH2","pc":619,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460944,"gasCost":10,"op":"JUMPI","pc":622,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000019b"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460934,"gasCost":1,"op":"JUMPDEST","pc":411,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460933,"gasCost":3,"op":"SWAP3","pc":412,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000015e","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460930,"gasCost":3,"op":"SWAP2","pc":413,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000015e"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460927,"gasCost":2,"op":"POP","pc":414,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1","000000000000000000000000000000000000000000000000000000000000015e","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460925,"gasCost":2,"op":"POP","pc":415,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1","000000000000000000000000000000000000000000000000000000000000015e","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460923,"gasCost":8,"op":"JUMP","pc":416,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1","000000000000000000000000000000000000000000000000000000000000015e"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460915,"gasCost":1,"op":"JUMPDEST","pc":350,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460914,"gasCost":3,"op":"SWAP1","pc":351,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460911,"gasCost":3,"op":"SWAP2","pc":352,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000001"}},{"depth":1,"gas":30460908,"gasCost":2900,"op":"SSTORE","pc":353,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f1","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30458008,"gasCost":2,"op":"POP","pc":354,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30458006,"gasCost":3,"op":"SWAP2","pc":355,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30458003,"gasCost":3,"op":"SWAP5","pc":356,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30458000,"gasCost":3,"op":"SWAP4","pc":357,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457997,"gasCost":2,"op":"POP","pc":358,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000043","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457995,"gasCost":2,"op":"POP","pc":359,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000043","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457993,"gasCost":2,"op":"POP","pc":360,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000043","00000000000000000000000000000000000000000000000000000000000000a4","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457991,"gasCost":2,"op":"POP","pc":361,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000043","00000000000000000000000000000000000000000000000000000000000000a4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457989,"gasCost":8,"op":"JUMP","pc":362,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457981,"gasCost":1,"op":"JUMPDEST","pc":67,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457980,"gasCost":3,"op":"PUSH1","pc":68,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457977,"gasCost":3,"op":"MLOAD","pc":70,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457974,"gasCost":3,"op":"SWAP1","pc":71,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000440"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457971,"gasCost":3,"op":"DUP2","pc":72,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000440","00000000000000000000000000000000000000000000000000000000000000f0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457968,"gasCost":6,"op":"MSTORE","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000440","00000000000000000000000000000000000000000000000000000000000000f0","0000000000000000000000000000000000000000000000000000000000000440"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457962,"gasCost":3,"op":"PUSH1","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000440"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457959,"gasCost":3,"op":"ADD","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457956,"gasCost":3,"op":"PUSH1","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000460"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457953,"gasCost":3,"op":"MLOAD","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000460","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457950,"gasCost":3,"op":"DUP1","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000460","0000000000000000000000000000000000000000000000000000000000000440"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457947,"gasCost":3,"op":"SWAP2","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000460","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000440"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457944,"gasCost":3,"op":"SUB","pc":82,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000460"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457941,"gasCost":3,"op":"SWAP1","pc":83,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}},{"depth":1,"gas":30457938,"gasCost":0,"op":"RETURN","pc":84,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000440","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000014","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f0"],"stack":["000000000000000000000000000000000000000000000000000000001a737e4b","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000440"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000000000000f1"}}]}} diff --git a/crypto3/libs/blueprint/test/zkevm/data/minimal_math/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/minimal_math/contract0.json new file mode 100644 index 0000000000..e4c441c8f4 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/minimal_math/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063f080118c14602d575b600080fd5b603c6038366004607e565b604e565b60405190815260200160405180910390f35b60008054605b906001609f565b600081905560688385609f565b60709190609f565b600181905590505b92915050565b60008060408385031215609057600080fd5b50508035926020909101359150565b80820180821115607857634e487b7160e01b600052601160045260246000fd"} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/minimal_math/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/minimal_math/trace0.json new file mode 100644 index 0000000000..862565140d --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/minimal_math/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"gas":31876,"failed":false,"returnValue":"0000000000000000000000000000000000000000000000000000000000000017","structLogs":[{"pc":0,"op":"PUSH1","gas":30478656,"gasCost":3,"depth":1,"stack":[],"memory":[],"storage":{}},{"pc":2,"op":"PUSH1","gas":30478653,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"memory":[],"storage":{}},{"pc":4,"op":"MSTORE","gas":30478650,"gasCost":12,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":5,"op":"CALLVALUE","gas":30478638,"gasCost":2,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":6,"op":"DUP1","gas":30478636,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":7,"op":"ISZERO","gas":30478633,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":8,"op":"PUSH1","gas":30478630,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":10,"op":"JUMPI","gas":30478627,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":15,"op":"JUMPDEST","gas":30478617,"gasCost":1,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":16,"op":"POP","gas":30478616,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":17,"op":"PUSH1","gas":30478614,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":19,"op":"CALLDATASIZE","gas":30478611,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":20,"op":"LT","gas":30478609,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":21,"op":"PUSH1","gas":30478606,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":23,"op":"JUMPI","gas":30478603,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000028"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":24,"op":"PUSH1","gas":30478593,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":26,"op":"CALLDATALOAD","gas":30478590,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":27,"op":"PUSH1","gas":30478587,"gasCost":3,"depth":1,"stack":["f080118c00000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":29,"op":"SHR","gas":30478584,"gasCost":3,"depth":1,"stack":["f080118c00000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":30,"op":"DUP1","gas":30478581,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":31,"op":"PUSH4","gas":30478578,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":36,"op":"EQ","gas":30478575,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":37,"op":"PUSH1","gas":30478572,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":39,"op":"JUMPI","gas":30478569,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000002d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":45,"op":"JUMPDEST","gas":30478559,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":46,"op":"PUSH1","gas":30478558,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":48,"op":"PUSH1","gas":30478555,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":50,"op":"CALLDATASIZE","gas":30478552,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":51,"op":"PUSH1","gas":30478550,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":53,"op":"PUSH1","gas":30478547,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":55,"op":"JUMP","gas":30478544,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000007e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":126,"op":"JUMPDEST","gas":30478536,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":127,"op":"PUSH1","gas":30478535,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":129,"op":"DUP1","gas":30478532,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":130,"op":"PUSH1","gas":30478529,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":132,"op":"DUP4","gas":30478526,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":133,"op":"DUP6","gas":30478523,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":134,"op":"SUB","gas":30478520,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":135,"op":"SLT","gas":30478517,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":136,"op":"ISZERO","gas":30478514,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":137,"op":"PUSH1","gas":30478511,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":139,"op":"JUMPI","gas":30478508,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000090"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":144,"op":"JUMPDEST","gas":30478498,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":145,"op":"POP","gas":30478497,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":146,"op":"POP","gas":30478495,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":147,"op":"DUP1","gas":30478493,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":148,"op":"CALLDATALOAD","gas":30478490,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":149,"op":"SWAP3","gas":30478487,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":150,"op":"PUSH1","gas":30478484,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":152,"op":"SWAP1","gas":30478481,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":153,"op":"SWAP2","gas":30478478,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":154,"op":"ADD","gas":30478475,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":155,"op":"CALLDATALOAD","gas":30478472,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":156,"op":"SWAP2","gas":30478469,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":157,"op":"POP","gas":30478466,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":158,"op":"JUMP","gas":30478464,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":56,"op":"JUMPDEST","gas":30478456,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":57,"op":"PUSH1","gas":30478455,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":59,"op":"JUMP","gas":30478452,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000004e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":78,"op":"JUMPDEST","gas":30478444,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":79,"op":"PUSH1","gas":30478443,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":81,"op":"DUP1","gas":30478440,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":82,"op":"SLOAD","gas":30478437,"gasCost":2100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":83,"op":"PUSH1","gas":30476337,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":85,"op":"SWAP1","gas":30476334,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000005b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":86,"op":"PUSH1","gas":30476331,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":88,"op":"PUSH1","gas":30476328,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":90,"op":"JUMP","gas":30476325,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":159,"op":"JUMPDEST","gas":30476317,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":160,"op":"DUP1","gas":30476316,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":161,"op":"DUP3","gas":30476313,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":162,"op":"ADD","gas":30476310,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":163,"op":"DUP1","gas":30476307,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":164,"op":"DUP3","gas":30476304,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":165,"op":"GT","gas":30476301,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":166,"op":"ISZERO","gas":30476298,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":167,"op":"PUSH1","gas":30476295,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":169,"op":"JUMPI","gas":30476292,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":120,"op":"JUMPDEST","gas":30476282,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":121,"op":"SWAP3","gas":30476281,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":122,"op":"SWAP2","gas":30476278,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000005b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":123,"op":"POP","gas":30476275,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000005b","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":124,"op":"POP","gas":30476273,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000005b","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":125,"op":"JUMP","gas":30476271,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000005b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":91,"op":"JUMPDEST","gas":30476263,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":92,"op":"PUSH1","gas":30476262,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":94,"op":"DUP2","gas":30476259,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":95,"op":"SWAP1","gas":30476256,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":96,"op":"SSTORE","gas":30476253,"gasCost":2900,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":97,"op":"PUSH1","gas":30473353,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":99,"op":"DUP4","gas":30473350,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":100,"op":"DUP6","gas":30473347,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":101,"op":"PUSH1","gas":30473344,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":103,"op":"JUMP","gas":30473341,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","000000000000000000000000000000000000000000000000000000000000009f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":159,"op":"JUMPDEST","gas":30473333,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":160,"op":"DUP1","gas":30473332,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":161,"op":"DUP3","gas":30473329,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":162,"op":"ADD","gas":30473326,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":163,"op":"DUP1","gas":30473323,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":164,"op":"DUP3","gas":30473320,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":165,"op":"GT","gas":30473317,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":166,"op":"ISZERO","gas":30473314,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":167,"op":"PUSH1","gas":30473311,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":169,"op":"JUMPI","gas":30473308,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":120,"op":"JUMPDEST","gas":30473298,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":121,"op":"SWAP3","gas":30473297,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":122,"op":"SWAP2","gas":30473294,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":123,"op":"POP","gas":30473291,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":124,"op":"POP","gas":30473289,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":125,"op":"JUMP","gas":30473287,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":104,"op":"JUMPDEST","gas":30473279,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":105,"op":"PUSH1","gas":30473278,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":107,"op":"SWAP2","gas":30473275,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":108,"op":"SWAP1","gas":30473272,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":109,"op":"PUSH1","gas":30473269,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":111,"op":"JUMP","gas":30473266,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","000000000000000000000000000000000000000000000000000000000000009f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":159,"op":"JUMPDEST","gas":30473258,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":160,"op":"DUP1","gas":30473257,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":161,"op":"DUP3","gas":30473254,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":162,"op":"ADD","gas":30473251,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":163,"op":"DUP1","gas":30473248,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":164,"op":"DUP3","gas":30473245,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":165,"op":"GT","gas":30473242,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":166,"op":"ISZERO","gas":30473239,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":167,"op":"PUSH1","gas":30473236,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":169,"op":"JUMPI","gas":30473233,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":120,"op":"JUMPDEST","gas":30473223,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":121,"op":"SWAP3","gas":30473222,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":122,"op":"SWAP2","gas":30473219,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":123,"op":"POP","gas":30473216,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":124,"op":"POP","gas":30473214,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":125,"op":"JUMP","gas":30473212,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":112,"op":"JUMPDEST","gas":30473204,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":113,"op":"PUSH1","gas":30473203,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":115,"op":"DUP2","gas":30473200,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":116,"op":"SWAP1","gas":30473197,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":117,"op":"SSTORE","gas":30473194,"gasCost":5000,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":118,"op":"SWAP1","gas":30468194,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":119,"op":"POP","gas":30468191,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":120,"op":"JUMPDEST","gas":30468189,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":121,"op":"SWAP3","gas":30468188,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":122,"op":"SWAP2","gas":30468185,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000005","000000000000000000000000000000000000000000000000000000000000003c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":123,"op":"POP","gas":30468182,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":124,"op":"POP","gas":30468180,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":125,"op":"JUMP","gas":30468178,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017","000000000000000000000000000000000000000000000000000000000000003c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":60,"op":"JUMPDEST","gas":30468170,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":61,"op":"PUSH1","gas":30468169,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":63,"op":"MLOAD","gas":30468166,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":64,"op":"SWAP1","gas":30468163,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":65,"op":"DUP2","gas":30468160,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":66,"op":"MSTORE","gas":30468157,"gasCost":9,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":67,"op":"PUSH1","gas":30468148,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":69,"op":"ADD","gas":30468145,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":70,"op":"PUSH1","gas":30468142,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":72,"op":"MLOAD","gas":30468139,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":73,"op":"DUP1","gas":30468136,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":74,"op":"SWAP2","gas":30468133,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":75,"op":"SUB","gas":30468130,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":76,"op":"SWAP1","gas":30468127,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}},{"pc":77,"op":"RETURN","gas":30468124,"gasCost":0,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000017"}}]}} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/modular_operations/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/modular_operations/contract0.json new file mode 100644 index 0000000000..2187210c44 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/modular_operations/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806312d30fca14610030575b600080fd5b61004361003e3660046100c2565b610055565b60405190815260200160405180910390f35b60007f1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016808360005408600055808061008f5761008f6100db565b836000540960018190556002805485189081905560005490916100b1916100f1565b6100bb91906100f1565b9392505050565b6000602082840312156100d457600080fd5b5035919050565b634e487b7160e01b600052601260045260246000fd5b8082018082111561011257634e487b7160e01b600052601160045260246000fd5b9291505056"} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/modular_operations/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/modular_operations/trace0.json new file mode 100644 index 0000000000..5d27cbb8bd --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/modular_operations/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"failed":false,"gas":36918,"returnValue":"0x0000000000000000000000000000000000000000000000000000172ea7413bf9","structLogs":[{"depth":1,"gas":30478784,"gasCost":3,"op":"PUSH1","pc":0,"memory":[],"stack":[],"storage":{}},{"depth":1,"gas":30478781,"gasCost":3,"op":"PUSH1","pc":2,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"depth":1,"gas":30478778,"gasCost":12,"op":"MSTORE","pc":4,"memory":[],"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{}},{"depth":1,"gas":30478766,"gasCost":2,"op":"CALLVALUE","pc":5,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30478764,"gasCost":3,"op":"DUP1","pc":6,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478761,"gasCost":3,"op":"ISZERO","pc":7,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478758,"gasCost":3,"op":"PUSH2","pc":8,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478755,"gasCost":10,"op":"JUMPI","pc":11,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"storage":{}},{"depth":1,"gas":30478745,"gasCost":1,"op":"JUMPDEST","pc":16,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478744,"gasCost":2,"op":"POP","pc":17,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478742,"gasCost":3,"op":"PUSH1","pc":18,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30478739,"gasCost":2,"op":"CALLDATASIZE","pc":20,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478737,"gasCost":3,"op":"LT","pc":21,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30478734,"gasCost":3,"op":"PUSH2","pc":22,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478731,"gasCost":10,"op":"JUMPI","pc":25,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000002b"],"storage":{}},{"depth":1,"gas":30478721,"gasCost":3,"op":"PUSH1","pc":26,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":[],"storage":{}},{"depth":1,"gas":30478718,"gasCost":3,"op":"CALLDATALOAD","pc":28,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478715,"gasCost":3,"op":"PUSH1","pc":29,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["12d30fca00000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478712,"gasCost":3,"op":"SHR","pc":31,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["12d30fca00000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"storage":{}},{"depth":1,"gas":30478709,"gasCost":3,"op":"DUP1","pc":32,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca"],"storage":{}},{"depth":1,"gas":30478706,"gasCost":3,"op":"PUSH4","pc":33,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000012d30fca"],"storage":{}},{"depth":1,"gas":30478703,"gasCost":3,"op":"EQ","pc":38,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000012d30fca"],"storage":{}},{"depth":1,"gas":30478700,"gasCost":3,"op":"PUSH2","pc":39,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478697,"gasCost":10,"op":"JUMPI","pc":42,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000030"],"storage":{}},{"depth":1,"gas":30478687,"gasCost":1,"op":"JUMPDEST","pc":48,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca"],"storage":{}},{"depth":1,"gas":30478686,"gasCost":3,"op":"PUSH2","pc":49,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca"],"storage":{}},{"depth":1,"gas":30478683,"gasCost":3,"op":"PUSH2","pc":52,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{}},{"depth":1,"gas":30478680,"gasCost":2,"op":"CALLDATASIZE","pc":55,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30478678,"gasCost":3,"op":"PUSH1","pc":56,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30478675,"gasCost":3,"op":"PUSH2","pc":58,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478672,"gasCost":8,"op":"JUMP","pc":61,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000c2"],"storage":{}},{"depth":1,"gas":30478664,"gasCost":1,"op":"JUMPDEST","pc":194,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478663,"gasCost":3,"op":"PUSH1","pc":195,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478660,"gasCost":3,"op":"PUSH1","pc":197,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478657,"gasCost":3,"op":"DUP3","pc":199,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478654,"gasCost":3,"op":"DUP5","pc":200,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478651,"gasCost":3,"op":"SUB","pc":201,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30478648,"gasCost":3,"op":"SLT","pc":202,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"depth":1,"gas":30478645,"gasCost":3,"op":"ISZERO","pc":203,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478642,"gasCost":3,"op":"PUSH2","pc":204,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{}},{"depth":1,"gas":30478639,"gasCost":10,"op":"JUMPI","pc":207,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000d4"],"storage":{}},{"depth":1,"gas":30478629,"gasCost":1,"op":"JUMPDEST","pc":212,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478628,"gasCost":2,"op":"POP","pc":213,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478626,"gasCost":3,"op":"CALLDATALOAD","pc":214,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000004"],"storage":{}},{"depth":1,"gas":30478623,"gasCost":3,"op":"SWAP2","pc":215,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30478620,"gasCost":3,"op":"SWAP1","pc":216,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000024","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30478617,"gasCost":2,"op":"POP","pc":217,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000003e","0000000000000000000000000000000000000000000000000000000000000024"],"storage":{}},{"depth":1,"gas":30478615,"gasCost":8,"op":"JUMP","pc":218,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","000000000000000000000000000000000000000000000000000000000000003e"],"storage":{}},{"depth":1,"gas":30478607,"gasCost":1,"op":"JUMPDEST","pc":62,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30478606,"gasCost":3,"op":"PUSH2","pc":63,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30478603,"gasCost":8,"op":"JUMP","pc":66,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000055"],"storage":{}},{"depth":1,"gas":30478595,"gasCost":1,"op":"JUMPDEST","pc":85,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30478594,"gasCost":3,"op":"PUSH1","pc":86,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30478591,"gasCost":3,"op":"PUSH32","pc":88,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"depth":1,"gas":30478588,"gasCost":3,"op":"DUP1","pc":121,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{}},{"depth":1,"gas":30478585,"gasCost":3,"op":"DUP4","pc":122,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{}},{"depth":1,"gas":30478582,"gasCost":3,"op":"PUSH1","pc":123,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{}},{"depth":1,"gas":30478579,"gasCost":2100,"op":"SLOAD","pc":125,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000001234567890"}},{"depth":1,"gas":30476479,"gasCost":8,"op":"ADDMOD","pc":126,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000001234567890"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000001234567890"}},{"depth":1,"gas":30476471,"gasCost":3,"op":"PUSH1","pc":127,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000001234567890"}},{"depth":1,"gas":30476468,"gasCost":2900,"op":"SSTORE","pc":129,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473568,"gasCost":3,"op":"DUP1","pc":130,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473565,"gasCost":3,"op":"DUP1","pc":131,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473562,"gasCost":3,"op":"PUSH2","pc":132,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473559,"gasCost":10,"op":"JUMPI","pc":135,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","000000000000000000000000000000000000000000000000000000000000008f"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473549,"gasCost":1,"op":"JUMPDEST","pc":143,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473548,"gasCost":3,"op":"DUP4","pc":144,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473545,"gasCost":3,"op":"PUSH1","pc":145,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473542,"gasCost":100,"op":"SLOAD","pc":147,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473442,"gasCost":8,"op":"MULMOD","pc":148,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000144","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473434,"gasCost":3,"op":"PUSH1","pc":149,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473431,"gasCost":3,"op":"DUP2","pc":151,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473428,"gasCost":3,"op":"SWAP1","pc":152,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000170a3d723050"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4"}},{"depth":1,"gas":30473425,"gasCost":5000,"op":"SSTORE","pc":153,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050"}},{"depth":1,"gas":30468425,"gasCost":3,"op":"PUSH1","pc":154,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050"}},{"depth":1,"gas":30468422,"gasCost":3,"op":"DUP1","pc":156,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050"}},{"depth":1,"gas":30468419,"gasCost":2100,"op":"SLOAD","pc":157,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002":"0000000000000000000000000000000000000000000000000000001235789091"}},{"depth":1,"gas":30466319,"gasCost":3,"op":"DUP6","pc":158,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000001235789091"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002":"0000000000000000000000000000000000000000000000000000001235789091"}},{"depth":1,"gas":30466316,"gasCost":3,"op":"XOR","pc":159,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000001235789091","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002":"0000000000000000000000000000000000000000000000000000001235789091"}},{"depth":1,"gas":30466313,"gasCost":3,"op":"SWAP1","pc":160,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000012357891d5"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002":"0000000000000000000000000000000000000000000000000000001235789091"}},{"depth":1,"gas":30466310,"gasCost":3,"op":"DUP2","pc":161,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002":"0000000000000000000000000000000000000000000000000000001235789091"}},{"depth":1,"gas":30466307,"gasCost":3,"op":"SWAP1","pc":162,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000012357891d5"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000002":"0000000000000000000000000000000000000000000000000000001235789091"}},{"depth":1,"gas":30466304,"gasCost":2900,"op":"SSTORE","pc":163,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000000000000002"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463404,"gasCost":3,"op":"PUSH1","pc":164,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012357891d5"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463401,"gasCost":100,"op":"SLOAD","pc":166,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463301,"gasCost":3,"op":"SWAP1","pc":167,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463298,"gasCost":3,"op":"SWAP2","pc":168,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","00000000000000000000000000000000000000000000000000000012357891d5"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463295,"gasCost":3,"op":"PUSH2","pc":169,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000170a3d723050"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463292,"gasCost":3,"op":"SWAP2","pc":172,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000000000000b1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463289,"gasCost":3,"op":"PUSH2","pc":173,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463286,"gasCost":8,"op":"JUMP","pc":176,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463278,"gasCost":1,"op":"JUMPDEST","pc":241,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463277,"gasCost":3,"op":"DUP1","pc":242,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463274,"gasCost":3,"op":"DUP3","pc":243,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463271,"gasCost":3,"op":"ADD","pc":244,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000170a3d723050"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463268,"gasCost":3,"op":"DUP1","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463265,"gasCost":3,"op":"DUP3","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463262,"gasCost":3,"op":"GT","pc":247,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463259,"gasCost":3,"op":"ISZERO","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463256,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463253,"gasCost":10,"op":"JUMPI","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000112"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463243,"gasCost":1,"op":"JUMPDEST","pc":274,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463242,"gasCost":3,"op":"SWAP3","pc":275,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","00000000000000000000000000000000000000000000000000000000000000b1","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463239,"gasCost":3,"op":"SWAP2","pc":276,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000170a3d723050","00000000000000000000000000000000000000000000000000000012345679d4","00000000000000000000000000000000000000000000000000000000000000b1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463236,"gasCost":2,"op":"POP","pc":277,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000000000000b1","00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000170a3d723050"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463234,"gasCost":2,"op":"POP","pc":278,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000000000000b1","00000000000000000000000000000000000000000000000000000012345679d4"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463232,"gasCost":8,"op":"JUMP","pc":279,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000000000000b1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463224,"gasCost":1,"op":"JUMPDEST","pc":177,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463223,"gasCost":3,"op":"PUSH2","pc":178,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463220,"gasCost":3,"op":"SWAP2","pc":181,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000000000000bb"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463217,"gasCost":3,"op":"SWAP1","pc":182,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000012357891d5"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463214,"gasCost":3,"op":"PUSH2","pc":183,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463211,"gasCost":8,"op":"JUMP","pc":186,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000000000000f1"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463203,"gasCost":1,"op":"JUMPDEST","pc":241,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463202,"gasCost":3,"op":"DUP1","pc":242,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463199,"gasCost":3,"op":"DUP3","pc":243,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463196,"gasCost":3,"op":"ADD","pc":244,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000012357891d5"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463193,"gasCost":3,"op":"DUP1","pc":245,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463190,"gasCost":3,"op":"DUP3","pc":246,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463187,"gasCost":3,"op":"GT","pc":247,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463184,"gasCost":3,"op":"ISZERO","pc":248,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463181,"gasCost":3,"op":"PUSH2","pc":249,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000001"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463178,"gasCost":10,"op":"JUMPI","pc":252,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000112"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463168,"gasCost":1,"op":"JUMPDEST","pc":274,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463167,"gasCost":3,"op":"SWAP3","pc":275,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","00000000000000000000000000000000000000000000000000000000000000bb","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463164,"gasCost":3,"op":"SWAP2","pc":276,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000172ea7413bf9","00000000000000000000000000000000000000000000000000000012357891d5","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000000000000bb"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463161,"gasCost":2,"op":"POP","pc":277,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000172ea7413bf9","00000000000000000000000000000000000000000000000000000000000000bb","0000000000000000000000000000000000000000000000000000171c71c8aa24","00000000000000000000000000000000000000000000000000000012357891d5"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463159,"gasCost":2,"op":"POP","pc":278,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000172ea7413bf9","00000000000000000000000000000000000000000000000000000000000000bb","0000000000000000000000000000000000000000000000000000171c71c8aa24"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463157,"gasCost":8,"op":"JUMP","pc":279,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000172ea7413bf9","00000000000000000000000000000000000000000000000000000000000000bb"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463149,"gasCost":1,"op":"JUMPDEST","pc":187,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463148,"gasCost":3,"op":"SWAP4","pc":188,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463145,"gasCost":3,"op":"SWAP3","pc":189,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000144","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463142,"gasCost":2,"op":"POP","pc":190,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016","0000000000000000000000000000000000000000000000000000000000000144"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463140,"gasCost":2,"op":"POP","pc":191,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000000","1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463138,"gasCost":2,"op":"POP","pc":192,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000043","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463136,"gasCost":8,"op":"JUMP","pc":193,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000043"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463128,"gasCost":1,"op":"JUMPDEST","pc":67,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463127,"gasCost":3,"op":"PUSH1","pc":68,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463124,"gasCost":3,"op":"MLOAD","pc":70,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463121,"gasCost":3,"op":"SWAP1","pc":71,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463118,"gasCost":3,"op":"DUP2","pc":72,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463115,"gasCost":9,"op":"MSTORE","pc":73,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000172ea7413bf9","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463106,"gasCost":3,"op":"PUSH1","pc":74,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463103,"gasCost":3,"op":"ADD","pc":76,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463100,"gasCost":3,"op":"PUSH1","pc":77,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463097,"gasCost":3,"op":"MLOAD","pc":79,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000040"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463094,"gasCost":3,"op":"DUP1","pc":80,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463091,"gasCost":3,"op":"SWAP2","pc":81,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463088,"gasCost":3,"op":"SUB","pc":82,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463085,"gasCost":3,"op":"SWAP1","pc":83,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}},{"depth":1,"gas":30463082,"gasCost":0,"op":"RETURN","pc":84,"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000172ea7413bf9"],"stack":["0000000000000000000000000000000000000000000000000000000012d30fca","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000170a3d723050","0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000000000000000000000000012345679d4","0000000000000000000000000000000000000000000000000000000000000002":"00000000000000000000000000000000000000000000000000000012357891d5"}}]}} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/mstore8/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/mstore8/contract0.json new file mode 100644 index 0000000000..84427b6e36 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/mstore8/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ec66f8b914610030575b600080fd5b61003861004a565b60405190815260200160405180910390f35b60408051602080825281830190925260009160609190602082018180368337019050509050600160005461007e91906106b4565b60008190555060005460ff1660f81b816000815181106100a0576100a06106cd565b60200101906001600160f81b031916908160001a905350600860005461ff0016901c60f81b816001815181106100d8576100d86106cd565b60200101906001600160f81b031916908160001a905350601060005462ff000016901c60f81b81600281518110610111576101116106cd565b60200101906001600160f81b031916908160001a905350601860005463ff00000016901c60f81b8160038151811061014b5761014b6106cd565b60200101906001600160f81b031916908160001a905350602060005464ff0000000016901c60f81b81600481518110610186576101866106cd565b60200101906001600160f81b031916908160001a905350602860005465ff000000000016901c60f81b816005815181106101c2576101c26106cd565b60200101906001600160f81b031916908160001a905350603060005466ff00000000000016901c60f81b816006815181106101ff576101ff6106cd565b60200101906001600160f81b031916908160001a905350603860005467ff0000000000000016901c60f81b8160078151811061023d5761023d6106cd565b60200101906001600160f81b031916908160001a905350604060005468ff000000000000000016901c60f81b8160088151811061027c5761027c6106cd565b60200101906001600160f81b031916908160001a905350604860005469ff00000000000000000016901c60f81b816009815181106102bc576102bc6106cd565b60200101906001600160f81b031916908160001a905350605060005460ff604c1b16901c60f81b81600a815181106102f6576102f66106cd565b60200101906001600160f81b031916908160001a905350605860005460ff60541b16901c60f81b81600b81518110610330576103306106cd565b60200101906001600160f81b031916908160001a905350606060005460ff605c1b16901c60f81b81600c8151811061036a5761036a6106cd565b60200101906001600160f81b031916908160001a905350606860005460ff60641b16901c60f81b81600d815181106103a4576103a46106cd565b60200101906001600160f81b031916908160001a905350607060005460ff606c1b16901c60f81b81600e815181106103de576103de6106cd565b60200101906001600160f81b031916908160001a905350607860005460ff60741b16901c60f81b81600f81518110610418576104186106cd565b60200101906001600160f81b031916908160001a90535080600081518110610442576104426106cd565b0160200151815160f89190911c925081906001908110610464576104646106cd565b01602001516104769060f81c836106e3565b91508060028151811061048b5761048b6106cd565b016020015161049d9060f81c836106e3565b9150806003815181106104b2576104b26106cd565b01602001516104c49060f81c836106e3565b9150806004815181106104d9576104d96106cd565b01602001516104eb9060f81c836106e3565b915080600581518110610500576105006106cd565b01602001516105129060f81c836106e3565b915080600681518110610527576105276106cd565b01602001516105399060f81c836106e3565b91508060078151811061054e5761054e6106cd565b01602001516105609060f81c836106e3565b915080600881518110610575576105756106cd565b01602001516105879060f81c836106e3565b91508060098151811061059c5761059c6106cd565b01602001516105ae9060f81c836106e3565b915080600a815181106105c3576105c36106cd565b01602001516105d59060f81c836106e3565b915080600b815181106105ea576105ea6106cd565b01602001516105fc9060f81c836106e3565b915080600c81518110610611576106116106cd565b01602001516106239060f81c836106e3565b915080600d81518110610638576106386106cd565b016020015161064a9060f81c836106e3565b915080600e8151811061065f5761065f6106cd565b01602001516106719060f81c836106e3565b915080600f81518110610686576106866106cd565b01602001516106989060f81c836106e3565b91505090565b634e487b7160e01b600052601160045260246000fd5b818103818111156106c7576106c761069e565b92915050565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176106c7576106c761069e56fea2646970667358"} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/mstore8/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/mstore8/trace0.json new file mode 100644 index 0000000000..3cede89cee --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/mstore8/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"gas":32060,"failed":false,"returnValue":"0000000000000000000000000000000000000000000000000000000000000000","structLogs":[{"pc":0,"op":"PUSH1","gas":30478936,"gasCost":3,"depth":1,"stack":[],"memory":[],"storage":{}},{"pc":2,"op":"PUSH1","gas":30478933,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"memory":[],"storage":{}},{"pc":4,"op":"MSTORE","gas":30478930,"gasCost":12,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":5,"op":"CALLVALUE","gas":30478918,"gasCost":2,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":6,"op":"DUP1","gas":30478916,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":7,"op":"ISZERO","gas":30478913,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":8,"op":"PUSH2","gas":30478910,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":11,"op":"JUMPI","gas":30478907,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":16,"op":"JUMPDEST","gas":30478897,"gasCost":1,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":17,"op":"POP","gas":30478896,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":18,"op":"PUSH1","gas":30478894,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":20,"op":"CALLDATASIZE","gas":30478891,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":21,"op":"LT","gas":30478889,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":22,"op":"PUSH2","gas":30478886,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":25,"op":"JUMPI","gas":30478883,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000002b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":26,"op":"PUSH1","gas":30478873,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":28,"op":"CALLDATALOAD","gas":30478870,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":29,"op":"PUSH1","gas":30478867,"gasCost":3,"depth":1,"stack":["ec66f8b900000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":31,"op":"SHR","gas":30478864,"gasCost":3,"depth":1,"stack":["ec66f8b900000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":32,"op":"DUP1","gas":30478861,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":33,"op":"PUSH4","gas":30478858,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000ec66f8b9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":38,"op":"EQ","gas":30478855,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000ec66f8b9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":39,"op":"PUSH2","gas":30478852,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":42,"op":"JUMPI","gas":30478849,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000030"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":48,"op":"JUMPDEST","gas":30478839,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":49,"op":"PUSH2","gas":30478838,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":52,"op":"PUSH2","gas":30478835,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":55,"op":"JUMP","gas":30478832,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000004a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":74,"op":"JUMPDEST","gas":30478824,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":75,"op":"PUSH1","gas":30478823,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":77,"op":"DUP1","gas":30478820,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":78,"op":"MLOAD","gas":30478817,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":79,"op":"PUSH1","gas":30478814,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":81,"op":"DUP1","gas":30478811,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":82,"op":"DUP3","gas":30478808,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":83,"op":"MSTORE","gas":30478805,"gasCost":9,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":84,"op":"DUP2","gas":30478796,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":85,"op":"DUP4","gas":30478793,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":86,"op":"ADD","gas":30478790,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":87,"op":"SWAP1","gas":30478787,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":88,"op":"SWAP3","gas":30478784,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":89,"op":"MSTORE","gas":30478781,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":90,"op":"PUSH1","gas":30478778,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":92,"op":"SWAP2","gas":30478775,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":93,"op":"PUSH1","gas":30478772,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":95,"op":"SWAP2","gas":30478769,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000060"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":96,"op":"SWAP1","gas":30478766,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":97,"op":"PUSH1","gas":30478763,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":99,"op":"DUP3","gas":30478760,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":100,"op":"ADD","gas":30478757,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":101,"op":"DUP2","gas":30478754,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":102,"op":"DUP1","gas":30478751,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":103,"op":"CALLDATASIZE","gas":30478748,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":104,"op":"DUP4","gas":30478746,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{}},{"pc":105,"op":"CALLDATACOPY","gas":30478743,"gasCost":9,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":106,"op":"ADD","gas":30478734,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":107,"op":"SWAP1","gas":30478731,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":108,"op":"POP","gas":30478728,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":109,"op":"POP","gas":30478726,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":110,"op":"SWAP1","gas":30478724,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":111,"op":"POP","gas":30478721,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":112,"op":"PUSH1","gas":30478719,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":114,"op":"PUSH1","gas":30478716,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":116,"op":"SLOAD","gas":30478713,"gasCost":2100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":117,"op":"PUSH2","gas":30476613,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":120,"op":"SWAP2","gas":30476610,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000000000000000000000000000000000000000000000000000000000000007e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":121,"op":"SWAP1","gas":30476607,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":122,"op":"PUSH2","gas":30476604,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":125,"op":"JUMP","gas":30476601,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","00000000000000000000000000000000000000000000000000000000000006b4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1716,"op":"JUMPDEST","gas":30476593,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1717,"op":"DUP2","gas":30476592,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1718,"op":"DUP2","gas":30476589,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1719,"op":"SUB","gas":30476586,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1720,"op":"DUP2","gas":30476583,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1721,"op":"DUP2","gas":30476580,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1722,"op":"GT","gas":30476577,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1723,"op":"ISZERO","gas":30476574,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1724,"op":"PUSH2","gas":30476571,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1727,"op":"JUMPI","gas":30476568,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1735,"op":"JUMPDEST","gas":30476558,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1736,"op":"SWAP3","gas":30476557,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000007e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1737,"op":"SWAP2","gas":30476554,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000000001","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","000000000000000000000000000000000000000000000000000000000000007e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1738,"op":"POP","gas":30476551,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000000000000000000000000000000007e","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1739,"op":"POP","gas":30476549,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000000000000000000000000000000007e","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":1740,"op":"JUMP","gas":30476547,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000000000000000000000000000000007e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":126,"op":"JUMPDEST","gas":30476539,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":127,"op":"PUSH1","gas":30476538,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":129,"op":"DUP2","gas":30476535,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":130,"op":"SWAP1","gas":30476532,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000000000","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"}},{"pc":131,"op":"SSTORE","gas":30476529,"gasCost":2900,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":132,"op":"POP","gas":30473629,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":133,"op":"PUSH1","gas":30473627,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":135,"op":"SLOAD","gas":30473624,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":136,"op":"PUSH1","gas":30473524,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":138,"op":"AND","gas":30473521,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":139,"op":"PUSH1","gas":30473518,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":141,"op":"SHL","gas":30473515,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":142,"op":"DUP2","gas":30473512,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":143,"op":"PUSH1","gas":30473509,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":145,"op":"DUP2","gas":30473506,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":146,"op":"MLOAD","gas":30473503,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":147,"op":"DUP2","gas":30473500,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":148,"op":"LT","gas":30473497,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":149,"op":"PUSH2","gas":30473494,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":152,"op":"JUMPI","gas":30473491,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":160,"op":"JUMPDEST","gas":30473481,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":161,"op":"PUSH1","gas":30473480,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":163,"op":"ADD","gas":30473477,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":164,"op":"ADD","gas":30473474,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":165,"op":"SWAP1","gas":30473471,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":166,"op":"PUSH1","gas":30473468,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":168,"op":"PUSH1","gas":30473465,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":170,"op":"PUSH1","gas":30473462,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":172,"op":"SHL","gas":30473459,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":173,"op":"SUB","gas":30473456,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":174,"op":"NOT","gas":30473453,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":175,"op":"AND","gas":30473450,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":176,"op":"SWAP1","gas":30473447,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":177,"op":"DUP2","gas":30473444,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":178,"op":"PUSH1","gas":30473441,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":180,"op":"BYTE","gas":30473438,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a0","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":181,"op":"SWAP1","gas":30473435,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a0","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":182,"op":"MSTORE8","gas":30473432,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":183,"op":"POP","gas":30473429,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":184,"op":"PUSH1","gas":30473427,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":186,"op":"PUSH1","gas":30473424,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":188,"op":"SLOAD","gas":30473421,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":189,"op":"PUSH2","gas":30473321,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":192,"op":"AND","gas":30473318,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000000000000000000000000000000ff00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":193,"op":"SWAP1","gas":30473315,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000001e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":194,"op":"SHR","gas":30473312,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000001e00","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":195,"op":"PUSH1","gas":30473309,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":197,"op":"SHL","gas":30473306,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":198,"op":"DUP2","gas":30473303,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":199,"op":"PUSH1","gas":30473300,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":201,"op":"DUP2","gas":30473297,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":202,"op":"MLOAD","gas":30473294,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":203,"op":"DUP2","gas":30473291,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":204,"op":"LT","gas":30473288,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":205,"op":"PUSH2","gas":30473285,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":208,"op":"JUMPI","gas":30473282,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000d8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":216,"op":"JUMPDEST","gas":30473272,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":217,"op":"PUSH1","gas":30473271,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":219,"op":"ADD","gas":30473268,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":220,"op":"ADD","gas":30473265,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000021"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":221,"op":"SWAP1","gas":30473262,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":222,"op":"PUSH1","gas":30473259,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":224,"op":"PUSH1","gas":30473256,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":226,"op":"PUSH1","gas":30473253,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":228,"op":"SHL","gas":30473250,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":229,"op":"SUB","gas":30473247,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":230,"op":"NOT","gas":30473244,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":231,"op":"AND","gas":30473241,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":232,"op":"SWAP1","gas":30473238,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":233,"op":"DUP2","gas":30473235,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":234,"op":"PUSH1","gas":30473232,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":236,"op":"BYTE","gas":30473229,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a1","1e00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":237,"op":"SWAP1","gas":30473226,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a1","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":238,"op":"MSTORE8","gas":30473223,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000000a1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e00000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":239,"op":"POP","gas":30473220,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":240,"op":"PUSH1","gas":30473218,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":242,"op":"PUSH1","gas":30473215,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":244,"op":"SLOAD","gas":30473212,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":245,"op":"PUSH3","gas":30473112,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":249,"op":"AND","gas":30473109,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000000000ff0000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":250,"op":"SWAP1","gas":30473106,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000010","00000000000000000000000000000000000000000000000000000000001d0000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":251,"op":"SHR","gas":30473103,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000001d0000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":252,"op":"PUSH1","gas":30473100,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":254,"op":"SHL","gas":30473097,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":255,"op":"DUP2","gas":30473094,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":256,"op":"PUSH1","gas":30473091,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":258,"op":"DUP2","gas":30473088,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":259,"op":"MLOAD","gas":30473085,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":260,"op":"DUP2","gas":30473082,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":261,"op":"LT","gas":30473079,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":262,"op":"PUSH2","gas":30473076,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":265,"op":"JUMPI","gas":30473073,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000111"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":273,"op":"JUMPDEST","gas":30473063,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":274,"op":"PUSH1","gas":30473062,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":276,"op":"ADD","gas":30473059,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":277,"op":"ADD","gas":30473056,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000022"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":278,"op":"SWAP1","gas":30473053,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a2"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":279,"op":"PUSH1","gas":30473050,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":281,"op":"PUSH1","gas":30473047,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":283,"op":"PUSH1","gas":30473044,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":285,"op":"SHL","gas":30473041,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":286,"op":"SUB","gas":30473038,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":287,"op":"NOT","gas":30473035,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":288,"op":"AND","gas":30473032,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":289,"op":"SWAP1","gas":30473029,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":290,"op":"DUP2","gas":30473026,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a2"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":291,"op":"PUSH1","gas":30473023,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":293,"op":"BYTE","gas":30473020,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a2","1d00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":294,"op":"SWAP1","gas":30473017,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a2","000000000000000000000000000000000000000000000000000000000000001d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":295,"op":"MSTORE8","gas":30473014,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","00000000000000000000000000000000000000000000000000000000000000a2"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":296,"op":"POP","gas":30473011,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1d00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":297,"op":"PUSH1","gas":30473009,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":299,"op":"PUSH1","gas":30473006,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":301,"op":"SLOAD","gas":30473003,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":302,"op":"PUSH4","gas":30472903,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":307,"op":"AND","gas":30472900,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000ff000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":308,"op":"SWAP1","gas":30472897,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","000000000000000000000000000000000000000000000000000000001c000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":309,"op":"SHR","gas":30472894,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001c000000","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":310,"op":"PUSH1","gas":30472891,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":312,"op":"SHL","gas":30472888,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":313,"op":"DUP2","gas":30472885,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":314,"op":"PUSH1","gas":30472882,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":316,"op":"DUP2","gas":30472879,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":317,"op":"MLOAD","gas":30472876,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":318,"op":"DUP2","gas":30472873,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":319,"op":"LT","gas":30472870,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":320,"op":"PUSH2","gas":30472867,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":323,"op":"JUMPI","gas":30472864,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000014b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":331,"op":"JUMPDEST","gas":30472854,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":332,"op":"PUSH1","gas":30472853,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":334,"op":"ADD","gas":30472850,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":335,"op":"ADD","gas":30472847,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000023"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":336,"op":"SWAP1","gas":30472844,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":337,"op":"PUSH1","gas":30472841,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":339,"op":"PUSH1","gas":30472838,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":341,"op":"PUSH1","gas":30472835,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":343,"op":"SHL","gas":30472832,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":344,"op":"SUB","gas":30472829,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":345,"op":"NOT","gas":30472826,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":346,"op":"AND","gas":30472823,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":347,"op":"SWAP1","gas":30472820,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":348,"op":"DUP2","gas":30472817,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":349,"op":"PUSH1","gas":30472814,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":351,"op":"BYTE","gas":30472811,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a3","1c00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":352,"op":"SWAP1","gas":30472808,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a3","000000000000000000000000000000000000000000000000000000000000001c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":353,"op":"MSTORE8","gas":30472805,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000000a3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d0000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":354,"op":"POP","gas":30472802,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1c00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":355,"op":"PUSH1","gas":30472800,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":357,"op":"PUSH1","gas":30472797,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":359,"op":"SLOAD","gas":30472794,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":360,"op":"PUSH5","gas":30472694,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":366,"op":"AND","gas":30472691,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000000000000000000000000ff00000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":367,"op":"SWAP1","gas":30472688,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000001b00000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":368,"op":"SHR","gas":30472685,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000001b00000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":369,"op":"PUSH1","gas":30472682,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":371,"op":"SHL","gas":30472679,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":372,"op":"DUP2","gas":30472676,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":373,"op":"PUSH1","gas":30472673,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":375,"op":"DUP2","gas":30472670,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":376,"op":"MLOAD","gas":30472667,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":377,"op":"DUP2","gas":30472664,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":378,"op":"LT","gas":30472661,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":379,"op":"PUSH2","gas":30472658,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":382,"op":"JUMPI","gas":30472655,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000186"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":390,"op":"JUMPDEST","gas":30472645,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":391,"op":"PUSH1","gas":30472644,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":393,"op":"ADD","gas":30472641,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":394,"op":"ADD","gas":30472638,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":395,"op":"SWAP1","gas":30472635,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":396,"op":"PUSH1","gas":30472632,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":398,"op":"PUSH1","gas":30472629,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":400,"op":"PUSH1","gas":30472626,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":402,"op":"SHL","gas":30472623,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":403,"op":"SUB","gas":30472620,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":404,"op":"NOT","gas":30472617,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":405,"op":"AND","gas":30472614,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":406,"op":"SWAP1","gas":30472611,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":407,"op":"DUP2","gas":30472608,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":408,"op":"PUSH1","gas":30472605,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":410,"op":"BYTE","gas":30472602,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","1b00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":411,"op":"SWAP1","gas":30472599,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a4","000000000000000000000000000000000000000000000000000000000000001b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":412,"op":"MSTORE8","gas":30472596,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000000a4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c00000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":413,"op":"POP","gas":30472593,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1b00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":414,"op":"PUSH1","gas":30472591,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":416,"op":"PUSH1","gas":30472588,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000028"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":418,"op":"SLOAD","gas":30472585,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000028","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":419,"op":"PUSH6","gas":30472485,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000028","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":426,"op":"AND","gas":30472482,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000028","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000000000ff0000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":427,"op":"SWAP1","gas":30472479,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000028","00000000000000000000000000000000000000000000000000001a0000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":428,"op":"SHR","gas":30472476,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000001a0000000000","0000000000000000000000000000000000000000000000000000000000000028"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":429,"op":"PUSH1","gas":30472473,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":431,"op":"SHL","gas":30472470,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":432,"op":"DUP2","gas":30472467,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":433,"op":"PUSH1","gas":30472464,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":435,"op":"DUP2","gas":30472461,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":436,"op":"MLOAD","gas":30472458,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":437,"op":"DUP2","gas":30472455,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":438,"op":"LT","gas":30472452,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":439,"op":"PUSH2","gas":30472449,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":442,"op":"JUMPI","gas":30472446,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001c2"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":450,"op":"JUMPDEST","gas":30472436,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":451,"op":"PUSH1","gas":30472435,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":453,"op":"ADD","gas":30472432,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":454,"op":"ADD","gas":30472429,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000025"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":455,"op":"SWAP1","gas":30472426,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a5"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":456,"op":"PUSH1","gas":30472423,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":458,"op":"PUSH1","gas":30472420,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":460,"op":"PUSH1","gas":30472417,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":462,"op":"SHL","gas":30472414,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":463,"op":"SUB","gas":30472411,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":464,"op":"NOT","gas":30472408,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":465,"op":"AND","gas":30472405,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":466,"op":"SWAP1","gas":30472402,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":467,"op":"DUP2","gas":30472399,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a5"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":468,"op":"PUSH1","gas":30472396,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":470,"op":"BYTE","gas":30472393,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a5","1a00000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":471,"op":"SWAP1","gas":30472390,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a5","000000000000000000000000000000000000000000000000000000000000001a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":472,"op":"MSTORE8","gas":30472387,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000000000a5"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":473,"op":"POP","gas":30472384,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1a00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":474,"op":"PUSH1","gas":30472382,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":476,"op":"PUSH1","gas":30472379,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000030"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":478,"op":"SLOAD","gas":30472376,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000030","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":479,"op":"PUSH7","gas":30472276,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000030","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":487,"op":"AND","gas":30472273,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000030","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000ff000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":488,"op":"SWAP1","gas":30472270,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000030","0000000000000000000000000000000000000000000000000019000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":489,"op":"SHR","gas":30472267,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000019000000000000","0000000000000000000000000000000000000000000000000000000000000030"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":490,"op":"PUSH1","gas":30472264,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":492,"op":"SHL","gas":30472261,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":493,"op":"DUP2","gas":30472258,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":494,"op":"PUSH1","gas":30472255,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":496,"op":"DUP2","gas":30472252,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":497,"op":"MLOAD","gas":30472249,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":498,"op":"DUP2","gas":30472246,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":499,"op":"LT","gas":30472243,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":500,"op":"PUSH2","gas":30472240,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":503,"op":"JUMPI","gas":30472237,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000001ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":511,"op":"JUMPDEST","gas":30472227,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":512,"op":"PUSH1","gas":30472226,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":514,"op":"ADD","gas":30472223,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":515,"op":"ADD","gas":30472220,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000026"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":516,"op":"SWAP1","gas":30472217,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a6"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":517,"op":"PUSH1","gas":30472214,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":519,"op":"PUSH1","gas":30472211,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":521,"op":"PUSH1","gas":30472208,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":523,"op":"SHL","gas":30472205,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":524,"op":"SUB","gas":30472202,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":525,"op":"NOT","gas":30472199,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":526,"op":"AND","gas":30472196,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":527,"op":"SWAP1","gas":30472193,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":528,"op":"DUP2","gas":30472190,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a6"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":529,"op":"PUSH1","gas":30472187,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":531,"op":"BYTE","gas":30472184,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a6","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":532,"op":"SWAP1","gas":30472181,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a6","0000000000000000000000000000000000000000000000000000000000000019"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":533,"op":"MSTORE8","gas":30472178,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","00000000000000000000000000000000000000000000000000000000000000a6"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a0000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":534,"op":"POP","gas":30472175,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1900000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":535,"op":"PUSH1","gas":30472173,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":537,"op":"PUSH1","gas":30472170,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":539,"op":"SLOAD","gas":30472167,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":540,"op":"PUSH8","gas":30472067,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000038","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":549,"op":"AND","gas":30472064,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000038","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000000000000000000ff00000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":550,"op":"SWAP1","gas":30472061,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000001800000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":551,"op":"SHR","gas":30472058,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000001800000000000000","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":552,"op":"PUSH1","gas":30472055,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":554,"op":"SHL","gas":30472052,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":555,"op":"DUP2","gas":30472049,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":556,"op":"PUSH1","gas":30472046,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":558,"op":"DUP2","gas":30472043,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":559,"op":"MLOAD","gas":30472040,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":560,"op":"DUP2","gas":30472037,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":561,"op":"LT","gas":30472034,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":562,"op":"PUSH2","gas":30472031,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":565,"op":"JUMPI","gas":30472028,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000023d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":573,"op":"JUMPDEST","gas":30472018,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":574,"op":"PUSH1","gas":30472017,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":576,"op":"ADD","gas":30472014,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":577,"op":"ADD","gas":30472011,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000027"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":578,"op":"SWAP1","gas":30472008,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":579,"op":"PUSH1","gas":30472005,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":581,"op":"PUSH1","gas":30472002,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":583,"op":"PUSH1","gas":30471999,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":585,"op":"SHL","gas":30471996,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":586,"op":"SUB","gas":30471993,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":587,"op":"NOT","gas":30471990,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":588,"op":"AND","gas":30471987,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":589,"op":"SWAP1","gas":30471984,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":590,"op":"DUP2","gas":30471981,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":591,"op":"PUSH1","gas":30471978,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":593,"op":"BYTE","gas":30471975,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a7","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":594,"op":"SWAP1","gas":30471972,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a7","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":595,"op":"MSTORE8","gas":30471969,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000000000000a7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1900000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":596,"op":"POP","gas":30471966,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1800000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":597,"op":"PUSH1","gas":30471964,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":599,"op":"PUSH1","gas":30471961,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":601,"op":"SLOAD","gas":30471958,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":602,"op":"PUSH9","gas":30471858,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":612,"op":"AND","gas":30471855,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000000ff0000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":613,"op":"SWAP1","gas":30471852,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000170000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":614,"op":"SHR","gas":30471849,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000170000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":615,"op":"PUSH1","gas":30471846,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":617,"op":"SHL","gas":30471843,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":618,"op":"DUP2","gas":30471840,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":619,"op":"PUSH1","gas":30471837,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":621,"op":"DUP2","gas":30471834,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":622,"op":"MLOAD","gas":30471831,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":623,"op":"DUP2","gas":30471828,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":624,"op":"LT","gas":30471825,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":625,"op":"PUSH2","gas":30471822,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":628,"op":"JUMPI","gas":30471819,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000027c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":636,"op":"JUMPDEST","gas":30471809,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":637,"op":"PUSH1","gas":30471808,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":639,"op":"ADD","gas":30471805,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":640,"op":"ADD","gas":30471802,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000028"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":641,"op":"SWAP1","gas":30471799,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":642,"op":"PUSH1","gas":30471796,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":644,"op":"PUSH1","gas":30471793,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":646,"op":"PUSH1","gas":30471790,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":648,"op":"SHL","gas":30471787,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":649,"op":"SUB","gas":30471784,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":650,"op":"NOT","gas":30471781,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":651,"op":"AND","gas":30471778,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":652,"op":"SWAP1","gas":30471775,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":653,"op":"DUP2","gas":30471772,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":654,"op":"PUSH1","gas":30471769,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":656,"op":"BYTE","gas":30471766,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a8","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":657,"op":"SWAP1","gas":30471763,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a8","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":658,"op":"MSTORE8","gas":30471760,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000000000000a8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":659,"op":"POP","gas":30471757,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1700000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":660,"op":"PUSH1","gas":30471755,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":662,"op":"PUSH1","gas":30471752,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000048"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":664,"op":"SLOAD","gas":30471749,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000048","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":665,"op":"PUSH10","gas":30471649,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000048","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":676,"op":"AND","gas":30471646,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000048","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000ff000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":677,"op":"SWAP1","gas":30471643,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000048","0000000000000000000000000000000000000000000016000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":678,"op":"SHR","gas":30471640,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000016000000000000000000","0000000000000000000000000000000000000000000000000000000000000048"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":679,"op":"PUSH1","gas":30471637,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":681,"op":"SHL","gas":30471634,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":682,"op":"DUP2","gas":30471631,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":683,"op":"PUSH1","gas":30471628,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":685,"op":"DUP2","gas":30471625,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":686,"op":"MLOAD","gas":30471622,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":687,"op":"DUP2","gas":30471619,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":688,"op":"LT","gas":30471616,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":689,"op":"PUSH2","gas":30471613,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":692,"op":"JUMPI","gas":30471610,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000002bc"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":700,"op":"JUMPDEST","gas":30471600,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":701,"op":"PUSH1","gas":30471599,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":703,"op":"ADD","gas":30471596,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":704,"op":"ADD","gas":30471593,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000029"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":705,"op":"SWAP1","gas":30471590,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":706,"op":"PUSH1","gas":30471587,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":708,"op":"PUSH1","gas":30471584,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":710,"op":"PUSH1","gas":30471581,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":712,"op":"SHL","gas":30471578,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":713,"op":"SUB","gas":30471575,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":714,"op":"NOT","gas":30471572,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":715,"op":"AND","gas":30471569,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":716,"op":"SWAP1","gas":30471566,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":717,"op":"DUP2","gas":30471563,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":718,"op":"PUSH1","gas":30471560,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":720,"op":"BYTE","gas":30471557,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a9","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":721,"op":"SWAP1","gas":30471554,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000a9","0000000000000000000000000000000000000000000000000000000000000016"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":722,"op":"MSTORE8","gas":30471551,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","00000000000000000000000000000000000000000000000000000000000000a9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918170000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":723,"op":"POP","gas":30471548,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1600000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":724,"op":"PUSH1","gas":30471546,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":726,"op":"PUSH1","gas":30471543,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000050"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":728,"op":"SLOAD","gas":30471540,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000050","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":729,"op":"PUSH1","gas":30471440,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000050","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":731,"op":"PUSH1","gas":30471437,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000050","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":733,"op":"SHL","gas":30471434,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000050","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000004c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":734,"op":"AND","gas":30471431,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000050","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000000000ff0000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":735,"op":"SWAP1","gas":30471428,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000050","0000000000000000000000000000000000000000000510000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":736,"op":"SHR","gas":30471425,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000510000000000000000000","0000000000000000000000000000000000000000000000000000000000000050"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":737,"op":"PUSH1","gas":30471422,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":739,"op":"SHL","gas":30471419,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":740,"op":"DUP2","gas":30471416,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":741,"op":"PUSH1","gas":30471413,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":743,"op":"DUP2","gas":30471410,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":744,"op":"MLOAD","gas":30471407,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":745,"op":"DUP2","gas":30471404,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":746,"op":"LT","gas":30471401,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":747,"op":"PUSH2","gas":30471398,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":750,"op":"JUMPI","gas":30471395,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000002f6"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":758,"op":"JUMPDEST","gas":30471385,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":759,"op":"PUSH1","gas":30471384,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":761,"op":"ADD","gas":30471381,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":762,"op":"ADD","gas":30471378,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":763,"op":"SWAP1","gas":30471375,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000aa"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":764,"op":"PUSH1","gas":30471372,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":766,"op":"PUSH1","gas":30471369,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":768,"op":"PUSH1","gas":30471366,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":770,"op":"SHL","gas":30471363,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":771,"op":"SUB","gas":30471360,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":772,"op":"NOT","gas":30471357,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":773,"op":"AND","gas":30471354,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":774,"op":"SWAP1","gas":30471351,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":775,"op":"DUP2","gas":30471348,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000aa"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":776,"op":"PUSH1","gas":30471345,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":778,"op":"BYTE","gas":30471342,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000aa","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":779,"op":"SWAP1","gas":30471339,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000aa","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":780,"op":"MSTORE8","gas":30471336,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000000000000000aa"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171600000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":781,"op":"POP","gas":30471333,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0500000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":782,"op":"PUSH1","gas":30471331,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":784,"op":"PUSH1","gas":30471328,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000058"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":786,"op":"SLOAD","gas":30471325,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000058","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":787,"op":"PUSH1","gas":30471225,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000058","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":789,"op":"PUSH1","gas":30471222,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000058","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":791,"op":"SHL","gas":30471219,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000058","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000054"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":792,"op":"AND","gas":30471216,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000058","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000ff000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":793,"op":"SWAP1","gas":30471213,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000058","0000000000000000000000000000000000000000041000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":794,"op":"SHR","gas":30471210,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000041000000000000000000000","0000000000000000000000000000000000000000000000000000000000000058"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":795,"op":"PUSH1","gas":30471207,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":797,"op":"SHL","gas":30471204,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":798,"op":"DUP2","gas":30471201,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":799,"op":"PUSH1","gas":30471198,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":801,"op":"DUP2","gas":30471195,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":802,"op":"MLOAD","gas":30471192,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":803,"op":"DUP2","gas":30471189,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":804,"op":"LT","gas":30471186,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":805,"op":"PUSH2","gas":30471183,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":808,"op":"JUMPI","gas":30471180,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000330"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":816,"op":"JUMPDEST","gas":30471170,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":817,"op":"PUSH1","gas":30471169,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":819,"op":"ADD","gas":30471166,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":820,"op":"ADD","gas":30471163,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":821,"op":"SWAP1","gas":30471160,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ab"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":822,"op":"PUSH1","gas":30471157,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":824,"op":"PUSH1","gas":30471154,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":826,"op":"PUSH1","gas":30471151,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":828,"op":"SHL","gas":30471148,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":829,"op":"SUB","gas":30471145,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":830,"op":"NOT","gas":30471142,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":831,"op":"AND","gas":30471139,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":832,"op":"SWAP1","gas":30471136,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":833,"op":"DUP2","gas":30471133,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ab"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":834,"op":"PUSH1","gas":30471130,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":836,"op":"BYTE","gas":30471127,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ab","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":837,"op":"SWAP1","gas":30471124,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ab","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":838,"op":"MSTORE8","gas":30471121,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","00000000000000000000000000000000000000000000000000000000000000ab"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":839,"op":"POP","gas":30471118,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0400000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":840,"op":"PUSH1","gas":30471116,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":842,"op":"PUSH1","gas":30471113,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":844,"op":"SLOAD","gas":30471110,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":845,"op":"PUSH1","gas":30471010,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":847,"op":"PUSH1","gas":30471007,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":849,"op":"SHL","gas":30471004,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000005c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":850,"op":"AND","gas":30471001,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000000000ff00000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":851,"op":"SWAP1","gas":30470998,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000060","0000000000000000000000000000000000000003100000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":852,"op":"SHR","gas":30470995,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000003100000000000000000000000","0000000000000000000000000000000000000000000000000000000000000060"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":853,"op":"PUSH1","gas":30470992,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":855,"op":"SHL","gas":30470989,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":856,"op":"DUP2","gas":30470986,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":857,"op":"PUSH1","gas":30470983,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":859,"op":"DUP2","gas":30470980,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":860,"op":"MLOAD","gas":30470977,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":861,"op":"DUP2","gas":30470974,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":862,"op":"LT","gas":30470971,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":863,"op":"PUSH2","gas":30470968,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":866,"op":"JUMPI","gas":30470965,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000036a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":874,"op":"JUMPDEST","gas":30470955,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":875,"op":"PUSH1","gas":30470954,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":877,"op":"ADD","gas":30470951,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":878,"op":"ADD","gas":30470948,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":879,"op":"SWAP1","gas":30470945,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ac"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":880,"op":"PUSH1","gas":30470942,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":882,"op":"PUSH1","gas":30470939,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":884,"op":"PUSH1","gas":30470936,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":886,"op":"SHL","gas":30470933,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":887,"op":"SUB","gas":30470930,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":888,"op":"NOT","gas":30470927,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":889,"op":"AND","gas":30470924,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":890,"op":"SWAP1","gas":30470921,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":891,"op":"DUP2","gas":30470918,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ac"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":892,"op":"PUSH1","gas":30470915,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":894,"op":"BYTE","gas":30470912,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ac","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":895,"op":"SWAP1","gas":30470909,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ac","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":896,"op":"MSTORE8","gas":30470906,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","00000000000000000000000000000000000000000000000000000000000000ac"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":897,"op":"POP","gas":30470903,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0300000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":898,"op":"PUSH1","gas":30470901,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":900,"op":"PUSH1","gas":30470898,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":902,"op":"SLOAD","gas":30470895,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":903,"op":"PUSH1","gas":30470795,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000068","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":905,"op":"PUSH1","gas":30470792,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000068","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":907,"op":"SHL","gas":30470789,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000068","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000064"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":908,"op":"AND","gas":30470786,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000068","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","0000000000000000000000000000000000000ff0000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":909,"op":"SWAP1","gas":30470783,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000210000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":910,"op":"SHR","gas":30470780,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000210000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":911,"op":"PUSH1","gas":30470777,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":913,"op":"SHL","gas":30470774,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":914,"op":"DUP2","gas":30470771,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":915,"op":"PUSH1","gas":30470768,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":917,"op":"DUP2","gas":30470765,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":918,"op":"MLOAD","gas":30470762,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":919,"op":"DUP2","gas":30470759,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":920,"op":"LT","gas":30470756,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":921,"op":"PUSH2","gas":30470753,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":924,"op":"JUMPI","gas":30470750,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000003a4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":932,"op":"JUMPDEST","gas":30470740,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":933,"op":"PUSH1","gas":30470739,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":935,"op":"ADD","gas":30470736,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":936,"op":"ADD","gas":30470733,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":937,"op":"SWAP1","gas":30470730,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ad"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":938,"op":"PUSH1","gas":30470727,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":940,"op":"PUSH1","gas":30470724,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":942,"op":"PUSH1","gas":30470721,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":944,"op":"SHL","gas":30470718,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":945,"op":"SUB","gas":30470715,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":946,"op":"NOT","gas":30470712,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":947,"op":"AND","gas":30470709,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":948,"op":"SWAP1","gas":30470706,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":949,"op":"DUP2","gas":30470703,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ad"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":950,"op":"PUSH1","gas":30470700,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":952,"op":"BYTE","gas":30470697,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ad","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":953,"op":"SWAP1","gas":30470694,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ad","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":954,"op":"MSTORE8","gas":30470691,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","00000000000000000000000000000000000000000000000000000000000000ad"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040300000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":955,"op":"POP","gas":30470688,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0200000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":956,"op":"PUSH1","gas":30470686,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":958,"op":"PUSH1","gas":30470683,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":960,"op":"SLOAD","gas":30470680,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":961,"op":"PUSH1","gas":30470580,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000070","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":963,"op":"PUSH1","gas":30470577,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000070","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":965,"op":"SHL","gas":30470574,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000070","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff","000000000000000000000000000000000000000000000000000000000000006c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":966,"op":"AND","gas":30470571,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000070","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000ff000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":967,"op":"SWAP1","gas":30470568,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000011000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":968,"op":"SHR","gas":30470565,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000011000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":969,"op":"PUSH1","gas":30470562,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":971,"op":"SHL","gas":30470559,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":972,"op":"DUP2","gas":30470556,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":973,"op":"PUSH1","gas":30470553,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":975,"op":"DUP2","gas":30470550,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":976,"op":"MLOAD","gas":30470547,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":977,"op":"DUP2","gas":30470544,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":978,"op":"LT","gas":30470541,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":979,"op":"PUSH2","gas":30470538,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":982,"op":"JUMPI","gas":30470535,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000003de"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":990,"op":"JUMPDEST","gas":30470525,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":991,"op":"PUSH1","gas":30470524,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":993,"op":"ADD","gas":30470521,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":994,"op":"ADD","gas":30470518,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":995,"op":"SWAP1","gas":30470515,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ae"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":996,"op":"PUSH1","gas":30470512,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":998,"op":"PUSH1","gas":30470509,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1000,"op":"PUSH1","gas":30470506,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1002,"op":"SHL","gas":30470503,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1003,"op":"SUB","gas":30470500,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1004,"op":"NOT","gas":30470497,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1005,"op":"AND","gas":30470494,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1006,"op":"SWAP1","gas":30470491,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1007,"op":"DUP2","gas":30470488,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ae"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1008,"op":"PUSH1","gas":30470485,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1010,"op":"BYTE","gas":30470482,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ae","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1011,"op":"SWAP1","gas":30470479,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000ae","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1012,"op":"MSTORE8","gas":30470476,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000ae"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1013,"op":"POP","gas":30470473,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1014,"op":"PUSH1","gas":30470471,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1016,"op":"PUSH1","gas":30470468,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1018,"op":"SLOAD","gas":30470465,"gasCost":100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1019,"op":"PUSH1","gas":30470365,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000078","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1021,"op":"PUSH1","gas":30470362,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000078","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1023,"op":"SHL","gas":30470359,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000078","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","00000000000000000000000000000000000000000000000000000000000000ff","0000000000000000000000000000000000000000000000000000000000000074"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1024,"op":"AND","gas":30470356,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000078","000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e","000000000000000000000000000000000ff00000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1025,"op":"SWAP1","gas":30470353,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000078","0000000000000000000000000000000000100000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1026,"op":"SHR","gas":30470350,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000100000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1027,"op":"PUSH1","gas":30470347,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1029,"op":"SHL","gas":30470344,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1030,"op":"DUP2","gas":30470341,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1031,"op":"PUSH1","gas":30470338,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1033,"op":"DUP2","gas":30470335,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1034,"op":"MLOAD","gas":30470332,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1035,"op":"DUP2","gas":30470329,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1036,"op":"LT","gas":30470326,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1037,"op":"PUSH2","gas":30470323,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1040,"op":"JUMPI","gas":30470320,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000418"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1048,"op":"JUMPDEST","gas":30470310,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1049,"op":"PUSH1","gas":30470309,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1051,"op":"ADD","gas":30470306,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1052,"op":"ADD","gas":30470303,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000002f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1053,"op":"SWAP1","gas":30470300,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000af"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1054,"op":"PUSH1","gas":30470297,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1056,"op":"PUSH1","gas":30470294,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1058,"op":"PUSH1","gas":30470291,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1060,"op":"SHL","gas":30470288,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1061,"op":"SUB","gas":30470285,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1062,"op":"NOT","gas":30470282,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000","00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1063,"op":"AND","gas":30470279,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000","ff00000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1064,"op":"SWAP1","gas":30470276,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1065,"op":"DUP2","gas":30470273,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000af"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1066,"op":"PUSH1","gas":30470270,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1068,"op":"BYTE","gas":30470267,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1069,"op":"SWAP1","gas":30470264,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000af","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1070,"op":"MSTORE8","gas":30470261,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000af"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1071,"op":"POP","gas":30470258,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1072,"op":"DUP1","gas":30470256,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1073,"op":"PUSH1","gas":30470253,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1075,"op":"DUP2","gas":30470250,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1076,"op":"MLOAD","gas":30470247,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1077,"op":"DUP2","gas":30470244,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1078,"op":"LT","gas":30470241,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1079,"op":"PUSH2","gas":30470238,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1082,"op":"JUMPI","gas":30470235,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000442"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1090,"op":"JUMPDEST","gas":30470225,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1091,"op":"ADD","gas":30470224,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1092,"op":"PUSH1","gas":30470221,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1094,"op":"ADD","gas":30470218,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1095,"op":"MLOAD","gas":30470215,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1096,"op":"DUP2","gas":30470212,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1097,"op":"MLOAD","gas":30470209,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1098,"op":"PUSH1","gas":30470206,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1100,"op":"SWAP2","gas":30470203,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1101,"op":"SWAP1","gas":30470200,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f8","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1102,"op":"SWAP2","gas":30470197,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000f8","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1103,"op":"SHR","gas":30470194,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1104,"op":"SWAP3","gas":30470191,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1105,"op":"POP","gas":30470188,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1106,"op":"DUP2","gas":30470186,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1107,"op":"SWAP1","gas":30470183,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1108,"op":"PUSH1","gas":30470180,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1110,"op":"SWAP1","gas":30470177,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1111,"op":"DUP2","gas":30470174,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1112,"op":"LT","gas":30470171,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1113,"op":"PUSH2","gas":30470168,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1116,"op":"JUMPI","gas":30470165,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000464"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1124,"op":"JUMPDEST","gas":30470155,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1125,"op":"ADD","gas":30470154,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1126,"op":"PUSH1","gas":30470151,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000081"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1128,"op":"ADD","gas":30470148,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000081","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1129,"op":"MLOAD","gas":30470145,"gasCost":6,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a1"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1130,"op":"PUSH2","gas":30470139,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","1e1d1c1b1a191817160504030201000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1133,"op":"SWAP1","gas":30470136,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","1e1d1c1b1a191817160504030201000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000476"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1134,"op":"PUSH1","gas":30470133,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","1e1d1c1b1a191817160504030201000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1136,"op":"SHR","gas":30470130,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","1e1d1c1b1a191817160504030201000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1137,"op":"DUP4","gas":30470127,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1138,"op":"PUSH2","gas":30470124,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1141,"op":"JUMP","gas":30470121,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30470113,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30470112,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30470109,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30470106,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30470101,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30470098,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30470095,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30470092,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30470089,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30470084,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30470081,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30470078,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30470075,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30470072,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30470062,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30470061,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30470058,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000384","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000476"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30470055,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30470053,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000476","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30470051,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000476"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1142,"op":"JUMPDEST","gas":30470043,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1143,"op":"SWAP2","gas":30470042,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000000000001e","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1144,"op":"POP","gas":30470039,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000001e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1145,"op":"DUP1","gas":30470037,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1146,"op":"PUSH1","gas":30470034,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1148,"op":"DUP2","gas":30470031,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1149,"op":"MLOAD","gas":30470028,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1150,"op":"DUP2","gas":30470025,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1151,"op":"LT","gas":30470022,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1152,"op":"PUSH2","gas":30470019,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1155,"op":"JUMPI","gas":30470016,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000048b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1163,"op":"JUMPDEST","gas":30470006,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1164,"op":"ADD","gas":30470005,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1165,"op":"PUSH1","gas":30470002,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000082"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1167,"op":"ADD","gas":30469999,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000082","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1168,"op":"MLOAD","gas":30469996,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a2"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1169,"op":"PUSH2","gas":30469993,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","1d1c1b1a19181716050403020100000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1172,"op":"SWAP1","gas":30469990,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","1d1c1b1a19181716050403020100000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000049d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1173,"op":"PUSH1","gas":30469987,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","1d1c1b1a19181716050403020100000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1175,"op":"SHR","gas":30469984,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","1d1c1b1a19181716050403020100000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1176,"op":"DUP4","gas":30469981,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1177,"op":"PUSH2","gas":30469978,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1180,"op":"JUMP","gas":30469975,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30469967,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30469966,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30469963,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30469960,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000384","000000000000000000000000000000000000000000000000000000000000001d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30469955,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30469952,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30469949,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30469946,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30469943,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30469938,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30469935,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001d","000000000000000000000000000000000000000000000000000000000000001d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30469932,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30469929,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30469926,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30469916,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30469915,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000049d","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30469912,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000065f4","000000000000000000000000000000000000000000000000000000000000001d","0000000000000000000000000000000000000000000000000000000000000384","000000000000000000000000000000000000000000000000000000000000049d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30469909,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000065f4","000000000000000000000000000000000000000000000000000000000000049d","0000000000000000000000000000000000000000000000000000000000000384","000000000000000000000000000000000000000000000000000000000000001d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30469907,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000065f4","000000000000000000000000000000000000000000000000000000000000049d","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30469905,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000065f4","000000000000000000000000000000000000000000000000000000000000049d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1181,"op":"JUMPDEST","gas":30469897,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1182,"op":"SWAP2","gas":30469896,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000384","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1183,"op":"POP","gas":30469893,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000384"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1184,"op":"DUP1","gas":30469891,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1185,"op":"PUSH1","gas":30469888,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1187,"op":"DUP2","gas":30469885,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1188,"op":"MLOAD","gas":30469882,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1189,"op":"DUP2","gas":30469879,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1190,"op":"LT","gas":30469876,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1191,"op":"PUSH2","gas":30469873,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1194,"op":"JUMPI","gas":30469870,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000004b2"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1202,"op":"JUMPDEST","gas":30469860,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1203,"op":"ADD","gas":30469859,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1204,"op":"PUSH1","gas":30469856,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000083"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1206,"op":"ADD","gas":30469853,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000083","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1207,"op":"MLOAD","gas":30469850,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1208,"op":"PUSH2","gas":30469847,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","1c1b1a1918171605040302010000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1211,"op":"SWAP1","gas":30469844,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","1c1b1a1918171605040302010000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000004c4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1212,"op":"PUSH1","gas":30469841,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","1c1b1a1918171605040302010000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1214,"op":"SHR","gas":30469838,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","1c1b1a1918171605040302010000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1215,"op":"DUP4","gas":30469835,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1216,"op":"PUSH2","gas":30469832,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1219,"op":"JUMP","gas":30469829,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30469821,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30469820,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30469817,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30469814,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000065f4","000000000000000000000000000000000000000000000000000000000000001c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30469809,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30469806,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30469803,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30469800,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30469797,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30469792,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30469789,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001c","000000000000000000000000000000000000000000000000000000000000001c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30469786,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30469783,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30469780,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30469770,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30469769,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004c4","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30469766,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000b26b0","000000000000000000000000000000000000000000000000000000000000001c","00000000000000000000000000000000000000000000000000000000000065f4","00000000000000000000000000000000000000000000000000000000000004c4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30469763,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000004c4","00000000000000000000000000000000000000000000000000000000000065f4","000000000000000000000000000000000000000000000000000000000000001c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30469761,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000004c4","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30469759,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000004c4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1220,"op":"JUMPDEST","gas":30469751,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1221,"op":"SWAP2","gas":30469750,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000065f4","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1222,"op":"POP","gas":30469747,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000065f4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1223,"op":"DUP1","gas":30469745,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1224,"op":"PUSH1","gas":30469742,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1226,"op":"DUP2","gas":30469739,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1227,"op":"MLOAD","gas":30469736,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1228,"op":"DUP2","gas":30469733,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1229,"op":"LT","gas":30469730,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1230,"op":"PUSH2","gas":30469727,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1233,"op":"JUMPI","gas":30469724,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000004d9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1241,"op":"JUMPDEST","gas":30469714,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1242,"op":"ADD","gas":30469713,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1243,"op":"PUSH1","gas":30469710,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1245,"op":"ADD","gas":30469707,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000084","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1246,"op":"MLOAD","gas":30469704,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a4"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1247,"op":"PUSH2","gas":30469701,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","1b1a191817160504030201000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1250,"op":"SWAP1","gas":30469698,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","1b1a191817160504030201000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000004eb"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1251,"op":"PUSH1","gas":30469695,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","1b1a191817160504030201000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1253,"op":"SHR","gas":30469692,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","1b1a191817160504030201000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1254,"op":"DUP4","gas":30469689,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1255,"op":"PUSH2","gas":30469686,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1258,"op":"JUMP","gas":30469683,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30469675,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30469674,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30469671,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30469668,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000b26b0","000000000000000000000000000000000000000000000000000000000000001b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30469663,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30469660,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30469657,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30469654,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30469651,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30469646,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30469643,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001b","000000000000000000000000000000000000000000000000000000000000001b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30469640,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30469637,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30469634,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30469624,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30469623,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000004eb","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30469620,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000000000001b","00000000000000000000000000000000000000000000000000000000000b26b0","00000000000000000000000000000000000000000000000000000000000004eb"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30469617,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000012d1490","00000000000000000000000000000000000000000000000000000000000004eb","00000000000000000000000000000000000000000000000000000000000b26b0","000000000000000000000000000000000000000000000000000000000000001b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30469615,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000012d1490","00000000000000000000000000000000000000000000000000000000000004eb","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30469613,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000012d1490","00000000000000000000000000000000000000000000000000000000000004eb"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1259,"op":"JUMPDEST","gas":30469605,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1260,"op":"SWAP2","gas":30469604,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000000b26b0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1261,"op":"POP","gas":30469601,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000b26b0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1262,"op":"DUP1","gas":30469599,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1263,"op":"PUSH1","gas":30469596,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1265,"op":"DUP2","gas":30469593,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1266,"op":"MLOAD","gas":30469590,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1267,"op":"DUP2","gas":30469587,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1268,"op":"LT","gas":30469584,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1269,"op":"PUSH2","gas":30469581,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1272,"op":"JUMPI","gas":30469578,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000500"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1280,"op":"JUMPDEST","gas":30469568,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1281,"op":"ADD","gas":30469567,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1282,"op":"PUSH1","gas":30469564,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000085"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1284,"op":"ADD","gas":30469561,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000085","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1285,"op":"MLOAD","gas":30469558,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a5"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1286,"op":"PUSH2","gas":30469555,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","1a19181716050403020100000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1289,"op":"SWAP1","gas":30469552,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","1a19181716050403020100000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000512"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1290,"op":"PUSH1","gas":30469549,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","1a19181716050403020100000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1292,"op":"SHR","gas":30469546,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","1a19181716050403020100000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1293,"op":"DUP4","gas":30469543,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1294,"op":"PUSH2","gas":30469540,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1297,"op":"JUMP","gas":30469537,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30469529,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30469528,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30469525,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30469522,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000000000001a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30469517,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30469514,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30469511,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30469508,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30469505,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30469500,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30469497,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000001a","000000000000000000000000000000000000000000000000000000000000001a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30469494,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30469491,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30469488,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30469478,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30469477,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000512","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30469474,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001e9416a0","000000000000000000000000000000000000000000000000000000000000001a","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000512"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30469471,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000512","00000000000000000000000000000000000000000000000000000000012d1490","000000000000000000000000000000000000000000000000000000000000001a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30469469,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000512","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30469467,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000512"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1298,"op":"JUMPDEST","gas":30469459,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1299,"op":"SWAP2","gas":30469458,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000000012d1490","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1300,"op":"POP","gas":30469455,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000012d1490"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1301,"op":"DUP1","gas":30469453,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1302,"op":"PUSH1","gas":30469450,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1304,"op":"DUP2","gas":30469447,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1305,"op":"MLOAD","gas":30469444,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1306,"op":"DUP2","gas":30469441,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1307,"op":"LT","gas":30469438,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1308,"op":"PUSH2","gas":30469435,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1311,"op":"JUMPI","gas":30469432,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000527"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1319,"op":"JUMPDEST","gas":30469422,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1320,"op":"ADD","gas":30469421,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1321,"op":"PUSH1","gas":30469418,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000086"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1323,"op":"ADD","gas":30469415,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000086","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1324,"op":"MLOAD","gas":30469412,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a6"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1325,"op":"PUSH2","gas":30469409,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","1918171605040302010000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1328,"op":"SWAP1","gas":30469406,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","1918171605040302010000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000539"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1329,"op":"PUSH1","gas":30469403,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","1918171605040302010000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1331,"op":"SHR","gas":30469400,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","1918171605040302010000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1332,"op":"DUP4","gas":30469397,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1333,"op":"PUSH2","gas":30469394,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1336,"op":"JUMP","gas":30469391,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30469383,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30469382,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30469379,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30469376,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000019"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30469371,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30469368,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30469365,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30469362,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30469359,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30469354,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30469351,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000019","0000000000000000000000000000000000000000000000000000000000000019"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30469348,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30469345,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30469342,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30469332,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30469331,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000539","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30469328,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000019","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000539"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30469325,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000539","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000019"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30469323,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000539","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30469321,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000539"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1337,"op":"JUMPDEST","gas":30469313,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1338,"op":"SWAP2","gas":30469312,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000000001e9416a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1339,"op":"POP","gas":30469309,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000001e9416a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1340,"op":"DUP1","gas":30469307,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1341,"op":"PUSH1","gas":30469304,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1343,"op":"DUP2","gas":30469301,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1344,"op":"MLOAD","gas":30469298,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1345,"op":"DUP2","gas":30469295,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1346,"op":"LT","gas":30469292,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1347,"op":"PUSH2","gas":30469289,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1350,"op":"JUMPI","gas":30469286,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000054e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1358,"op":"JUMPDEST","gas":30469276,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1359,"op":"ADD","gas":30469275,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000007"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1360,"op":"PUSH1","gas":30469272,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000087"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1362,"op":"ADD","gas":30469269,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000087","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1363,"op":"MLOAD","gas":30469266,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1364,"op":"PUSH2","gas":30469263,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","1817160504030201000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1367,"op":"SWAP1","gas":30469260,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","1817160504030201000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000560"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1368,"op":"PUSH1","gas":30469257,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","1817160504030201000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1370,"op":"SHR","gas":30469254,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","1817160504030201000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1371,"op":"DUP4","gas":30469251,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1372,"op":"PUSH2","gas":30469248,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1375,"op":"JUMP","gas":30469245,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30469237,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30469236,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30469233,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30469230,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30469225,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30469222,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30469219,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30469216,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30469213,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30469208,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30469205,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000018","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30469202,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30469199,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30469196,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30469186,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30469185,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000560","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30469182,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000018","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000560"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30469179,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000560","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000018"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30469177,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000560","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30469175,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000560"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1376,"op":"JUMPDEST","gas":30469167,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1377,"op":"SWAP2","gas":30469166,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000002fc7635a0","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1378,"op":"POP","gas":30469163,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000002fc7635a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1379,"op":"DUP1","gas":30469161,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1380,"op":"PUSH1","gas":30469158,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1382,"op":"DUP2","gas":30469155,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1383,"op":"MLOAD","gas":30469152,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1384,"op":"DUP2","gas":30469149,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1385,"op":"LT","gas":30469146,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1386,"op":"PUSH2","gas":30469143,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1389,"op":"JUMPI","gas":30469140,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000575"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1397,"op":"JUMPDEST","gas":30469130,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1398,"op":"ADD","gas":30469129,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000008"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1399,"op":"PUSH1","gas":30469126,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000088"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1401,"op":"ADD","gas":30469123,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000088","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1402,"op":"MLOAD","gas":30469120,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1403,"op":"PUSH2","gas":30469117,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","1716050403020100000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1406,"op":"SWAP1","gas":30469114,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","1716050403020100000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000587"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1407,"op":"PUSH1","gas":30469111,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","1716050403020100000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1409,"op":"SHR","gas":30469108,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","1716050403020100000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1410,"op":"DUP4","gas":30469105,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1411,"op":"PUSH2","gas":30469102,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1414,"op":"JUMP","gas":30469099,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30469091,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30469090,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30469087,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30469084,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30469079,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30469076,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30469073,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30469070,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30469067,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30469062,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30469059,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000017","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30469056,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30469053,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30469050,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30469040,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30469039,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000587","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30469036,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000017","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000587"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30469033,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000587","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000017"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30469031,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000587","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30469029,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000587"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1415,"op":"JUMPDEST","gas":30469021,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1416,"op":"SWAP2","gas":30469020,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000000047ab150700","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1417,"op":"POP","gas":30469017,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000047ab150700"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1418,"op":"DUP1","gas":30469015,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1419,"op":"PUSH1","gas":30469012,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1421,"op":"DUP2","gas":30469009,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1422,"op":"MLOAD","gas":30469006,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1423,"op":"DUP2","gas":30469003,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1424,"op":"LT","gas":30469000,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1425,"op":"PUSH2","gas":30468997,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1428,"op":"JUMPI","gas":30468994,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000059c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1436,"op":"JUMPDEST","gas":30468984,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1437,"op":"ADD","gas":30468983,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000009"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1438,"op":"PUSH1","gas":30468980,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000089"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1440,"op":"ADD","gas":30468977,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000089","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1441,"op":"MLOAD","gas":30468974,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a9"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1442,"op":"PUSH2","gas":30468971,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","1605040302010000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1445,"op":"SWAP1","gas":30468968,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","1605040302010000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000005ae"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1446,"op":"PUSH1","gas":30468965,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","1605040302010000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1448,"op":"SHR","gas":30468962,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","1605040302010000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1449,"op":"DUP4","gas":30468959,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1450,"op":"PUSH2","gas":30468956,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1453,"op":"JUMP","gas":30468953,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30468945,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30468944,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30468941,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30468938,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000016"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30468933,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30468930,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30468927,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30468924,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30468921,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30468916,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30468913,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000016","0000000000000000000000000000000000000000000000000000000000000016"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30468910,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30468907,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30468904,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30468894,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30468893,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005ae","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30468890,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000016","000000000000000000000000000000000000000000000000000006705ee3a100","00000000000000000000000000000000000000000000000000000000000005ae"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30468887,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000008da8278fd600","00000000000000000000000000000000000000000000000000000000000005ae","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000016"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30468885,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000008da8278fd600","00000000000000000000000000000000000000000000000000000000000005ae","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30468883,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000008da8278fd600","00000000000000000000000000000000000000000000000000000000000005ae"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1454,"op":"JUMPDEST","gas":30468875,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1455,"op":"SWAP2","gas":30468874,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000006705ee3a100","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1456,"op":"POP","gas":30468871,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000006705ee3a100"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1457,"op":"DUP1","gas":30468869,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1458,"op":"PUSH1","gas":30468866,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1460,"op":"DUP2","gas":30468863,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1461,"op":"MLOAD","gas":30468860,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1462,"op":"DUP2","gas":30468857,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1463,"op":"LT","gas":30468854,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1464,"op":"PUSH2","gas":30468851,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1467,"op":"JUMPI","gas":30468848,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000005c3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1475,"op":"JUMPDEST","gas":30468838,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1476,"op":"ADD","gas":30468837,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1477,"op":"PUSH1","gas":30468834,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1479,"op":"ADD","gas":30468831,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008a","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1480,"op":"MLOAD","gas":30468828,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000aa"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1481,"op":"PUSH2","gas":30468825,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0504030201000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1484,"op":"SWAP1","gas":30468822,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0504030201000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000005d5"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1485,"op":"PUSH1","gas":30468819,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0504030201000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1487,"op":"SHR","gas":30468816,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0504030201000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1488,"op":"DUP4","gas":30468813,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1489,"op":"PUSH2","gas":30468810,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1492,"op":"JUMP","gas":30468807,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30468799,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30468798,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30468795,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30468792,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30468787,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30468784,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30468781,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30468778,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30468775,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30468770,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30468767,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000005","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30468764,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30468761,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30468758,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30468748,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30468747,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005d5","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30468744,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000005","00000000000000000000000000000000000000000000000000008da8278fd600","00000000000000000000000000000000000000000000000000000000000005d5"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30468741,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000002c448c5cf2e00","00000000000000000000000000000000000000000000000000000000000005d5","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000005"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30468739,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000002c448c5cf2e00","00000000000000000000000000000000000000000000000000000000000005d5","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30468737,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000002c448c5cf2e00","00000000000000000000000000000000000000000000000000000000000005d5"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1493,"op":"JUMPDEST","gas":30468729,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1494,"op":"SWAP2","gas":30468728,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","00000000000000000000000000000000000000000000000000008da8278fd600","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1495,"op":"POP","gas":30468725,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000008da8278fd600"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1496,"op":"DUP1","gas":30468723,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1497,"op":"PUSH1","gas":30468720,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1499,"op":"DUP2","gas":30468717,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1500,"op":"MLOAD","gas":30468714,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1501,"op":"DUP2","gas":30468711,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1502,"op":"LT","gas":30468708,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1503,"op":"PUSH2","gas":30468705,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1506,"op":"JUMPI","gas":30468702,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000005ea"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1514,"op":"JUMPDEST","gas":30468692,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1515,"op":"ADD","gas":30468691,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1516,"op":"PUSH1","gas":30468688,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1518,"op":"ADD","gas":30468685,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008b","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1519,"op":"MLOAD","gas":30468682,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ab"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1520,"op":"PUSH2","gas":30468679,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0403020100000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1523,"op":"SWAP1","gas":30468676,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","0403020100000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000005fc"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1524,"op":"PUSH1","gas":30468673,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0403020100000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1526,"op":"SHR","gas":30468670,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0403020100000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1527,"op":"DUP4","gas":30468667,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1528,"op":"PUSH2","gas":30468664,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1531,"op":"JUMP","gas":30468661,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30468653,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30468652,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30468649,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30468646,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30468641,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30468638,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30468635,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30468632,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30468629,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30468624,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30468621,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30468618,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30468615,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30468612,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30468602,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30468601,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30468598,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000002c448c5cf2e00","00000000000000000000000000000000000000000000000000000000000005fc"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30468595,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000b1123173cb800","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30468593,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000b1123173cb800","00000000000000000000000000000000000000000000000000000000000005fc","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30468591,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000b1123173cb800","00000000000000000000000000000000000000000000000000000000000005fc"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1532,"op":"JUMPDEST","gas":30468583,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1533,"op":"SWAP2","gas":30468582,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000002c448c5cf2e00","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1534,"op":"POP","gas":30468579,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000002c448c5cf2e00"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1535,"op":"DUP1","gas":30468577,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1536,"op":"PUSH1","gas":30468574,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1538,"op":"DUP2","gas":30468571,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1539,"op":"MLOAD","gas":30468568,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1540,"op":"DUP2","gas":30468565,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1541,"op":"LT","gas":30468562,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1542,"op":"PUSH2","gas":30468559,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1545,"op":"JUMPI","gas":30468556,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000611"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1553,"op":"JUMPDEST","gas":30468546,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1554,"op":"ADD","gas":30468545,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1555,"op":"PUSH1","gas":30468542,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1557,"op":"ADD","gas":30468539,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008c","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1558,"op":"MLOAD","gas":30468536,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ac"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1559,"op":"PUSH2","gas":30468533,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0302010000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1562,"op":"SWAP1","gas":30468530,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0302010000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000623"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1563,"op":"PUSH1","gas":30468527,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0302010000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1565,"op":"SHR","gas":30468524,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0302010000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1566,"op":"DUP4","gas":30468521,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1567,"op":"PUSH2","gas":30468518,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1570,"op":"JUMP","gas":30468515,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30468507,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30468506,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30468503,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30468500,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30468495,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30468492,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30468489,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30468486,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30468483,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30468478,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30468475,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000003","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30468472,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30468469,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30468466,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30468456,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30468455,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000623","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30468452,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000003","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000623"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30468449,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000623","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000003"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30468447,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000623","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30468445,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000623"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1571,"op":"JUMPDEST","gas":30468437,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1572,"op":"SWAP2","gas":30468436,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000000b1123173cb800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1573,"op":"POP","gas":30468433,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000b1123173cb800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1574,"op":"DUP1","gas":30468431,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1575,"op":"PUSH1","gas":30468428,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1577,"op":"DUP2","gas":30468425,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1578,"op":"MLOAD","gas":30468422,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1579,"op":"DUP2","gas":30468419,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1580,"op":"LT","gas":30468416,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1581,"op":"PUSH2","gas":30468413,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1584,"op":"JUMPI","gas":30468410,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000638"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1592,"op":"JUMPDEST","gas":30468400,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1593,"op":"ADD","gas":30468399,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1594,"op":"PUSH1","gas":30468396,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1596,"op":"ADD","gas":30468393,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008d","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1597,"op":"MLOAD","gas":30468390,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ad"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1598,"op":"PUSH2","gas":30468387,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0201000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1601,"op":"SWAP1","gas":30468384,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","0201000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000064a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1602,"op":"PUSH1","gas":30468381,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0201000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1604,"op":"SHR","gas":30468378,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0201000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1605,"op":"DUP4","gas":30468375,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1606,"op":"PUSH2","gas":30468372,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1609,"op":"JUMP","gas":30468369,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30468361,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30468360,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30468357,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30468354,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30468349,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30468346,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30468343,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30468340,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30468337,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30468332,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30468329,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30468326,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30468323,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30468320,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30468310,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30468309,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30468306,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000002","0000000000000000000000000000000000000000000000000021336945b62800","000000000000000000000000000000000000000000000000000000000000064a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30468303,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000002"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30468301,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000000000000000064a","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30468299,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000000000000000064a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1610,"op":"JUMPDEST","gas":30468291,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1611,"op":"SWAP2","gas":30468290,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000021336945b62800","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1612,"op":"POP","gas":30468287,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000021336945b62800"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1613,"op":"DUP1","gas":30468285,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1614,"op":"PUSH1","gas":30468282,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1616,"op":"DUP2","gas":30468279,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1617,"op":"MLOAD","gas":30468276,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1618,"op":"DUP2","gas":30468273,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1619,"op":"LT","gas":30468270,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1620,"op":"PUSH2","gas":30468267,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1623,"op":"JUMPI","gas":30468264,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000065f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1631,"op":"JUMPDEST","gas":30468254,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1632,"op":"ADD","gas":30468253,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1633,"op":"PUSH1","gas":30468250,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1635,"op":"ADD","gas":30468247,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008e","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1636,"op":"MLOAD","gas":30468244,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000ae"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1637,"op":"PUSH2","gas":30468241,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1640,"op":"SWAP1","gas":30468238,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0100000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000671"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1641,"op":"PUSH1","gas":30468235,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0100000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1643,"op":"SHR","gas":30468232,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0100000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1644,"op":"DUP4","gas":30468229,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1645,"op":"PUSH2","gas":30468226,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1648,"op":"JUMP","gas":30468223,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30468215,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30468214,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30468211,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30468208,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30468203,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30468200,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30468197,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30468194,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30468191,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30468186,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30468183,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30468180,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30468177,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30468174,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30468164,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30468163,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000671","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30468160,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000671"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30468157,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000671","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30468155,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000671","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30468153,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000671"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1649,"op":"JUMPDEST","gas":30468145,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1650,"op":"SWAP2","gas":30468144,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1651,"op":"POP","gas":30468141,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1652,"op":"DUP1","gas":30468139,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1653,"op":"PUSH1","gas":30468136,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1655,"op":"DUP2","gas":30468133,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1656,"op":"MLOAD","gas":30468130,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1657,"op":"DUP2","gas":30468127,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1658,"op":"LT","gas":30468124,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1659,"op":"PUSH2","gas":30468121,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1662,"op":"JUMPI","gas":30468118,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000686"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1670,"op":"JUMPDEST","gas":30468108,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1671,"op":"ADD","gas":30468107,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1672,"op":"PUSH1","gas":30468104,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1674,"op":"ADD","gas":30468101,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000000000000000008f","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1675,"op":"MLOAD","gas":30468098,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000af"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1676,"op":"PUSH2","gas":30468095,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1679,"op":"SWAP1","gas":30468092,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000698"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1680,"op":"PUSH1","gas":30468089,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1682,"op":"SHR","gas":30468086,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000f8"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1683,"op":"DUP4","gas":30468083,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1684,"op":"PUSH2","gas":30468080,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1687,"op":"JUMP","gas":30468077,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","00000000000000000000000000000000000000000000000000000000000006e3"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1763,"op":"JUMPDEST","gas":30468069,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1764,"op":"DUP1","gas":30468068,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1765,"op":"DUP3","gas":30468065,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1766,"op":"MUL","gas":30468062,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1767,"op":"DUP2","gas":30468057,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1768,"op":"ISZERO","gas":30468054,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1769,"op":"DUP3","gas":30468051,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1770,"op":"DUP3","gas":30468048,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1771,"op":"DIV","gas":30468045,"gasCost":5,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1772,"op":"DUP5","gas":30468040,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1773,"op":"EQ","gas":30468037,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1774,"op":"OR","gas":30468034,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1775,"op":"PUSH2","gas":30468031,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1778,"op":"JUMPI","gas":30468028,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","00000000000000000000000000000000000000000000000000000000000006c7"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1735,"op":"JUMPDEST","gas":30468018,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1736,"op":"SWAP3","gas":30468017,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000698","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1737,"op":"SWAP2","gas":30468014,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000698"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1738,"op":"POP","gas":30468011,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000698","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1739,"op":"POP","gas":30468009,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000698","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1740,"op":"JUMP","gas":30468007,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000698"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1688,"op":"JUMPDEST","gas":30467999,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1689,"op":"SWAP2","gas":30467998,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","000000000000000000000000000000000000000000000000004266d28b6c5000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1690,"op":"POP","gas":30467995,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","000000000000000000000000000000000000000000000000004266d28b6c5000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1691,"op":"POP","gas":30467993,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1692,"op":"SWAP1","gas":30467991,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":1693,"op":"JUMP","gas":30467988,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":56,"op":"JUMPDEST","gas":30467980,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":57,"op":"PUSH1","gas":30467979,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":59,"op":"MLOAD","gas":30467976,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":60,"op":"SWAP1","gas":30467973,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":61,"op":"DUP2","gas":30467970,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":62,"op":"MSTORE","gas":30467967,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":63,"op":"PUSH1","gas":30467964,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":65,"op":"ADD","gas":30467961,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":66,"op":"PUSH1","gas":30467958,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000e0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":68,"op":"MLOAD","gas":30467955,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000e0","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":69,"op":"DUP1","gas":30467952,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000e0","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":70,"op":"SWAP2","gas":30467949,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000e0","00000000000000000000000000000000000000000000000000000000000000c0","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":71,"op":"SUB","gas":30467946,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000c0","00000000000000000000000000000000000000000000000000000000000000c0","00000000000000000000000000000000000000000000000000000000000000e0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":72,"op":"SWAP1","gas":30467943,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}},{"pc":73,"op":"RETURN","gas":30467940,"gasCost":0,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000ec66f8b9","0000000000000000000000000000000000000000000000000000000000000020","00000000000000000000000000000000000000000000000000000000000000c0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000c0","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","1e1e1d1c1b1a1918171605040302010000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1e"}}]}} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/small_stack_storage/contract0.json b/crypto3/libs/blueprint/test/zkevm/data/small_stack_storage/contract0.json new file mode 100644 index 0000000000..e4c441c8f4 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/small_stack_storage/contract0.json @@ -0,0 +1 @@ +{"bytecode":"0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063f080118c14602d575b600080fd5b603c6038366004607e565b604e565b60405190815260200160405180910390f35b60008054605b906001609f565b600081905560688385609f565b60709190609f565b600181905590505b92915050565b60008060408385031215609057600080fd5b50508035926020909101359150565b80820180821115607857634e487b7160e01b600052601160045260246000fd"} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/data/small_stack_storage/trace0.json b/crypto3/libs/blueprint/test/zkevm/data/small_stack_storage/trace0.json new file mode 100644 index 0000000000..75591b605f --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/data/small_stack_storage/trace0.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","id":1,"result":{"gas":31876,"failed":false,"returnValue":"0000000000000000000000000000000000000000000000000000000000000020","structLogs":[{"pc":0,"op":"PUSH1","gas":30478656,"gasCost":3,"depth":1,"stack":[],"memory":[],"storage":{}},{"pc":2,"op":"PUSH1","gas":30478653,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080"],"memory":[],"storage":{}},{"pc":4,"op":"MSTORE","gas":30478650,"gasCost":12,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{}},{"pc":5,"op":"CALLVALUE","gas":30478638,"gasCost":2,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":6,"op":"DUP1","gas":30478636,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":7,"op":"ISZERO","gas":30478633,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":8,"op":"PUSH1","gas":30478630,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":10,"op":"JUMPI","gas":30478627,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":15,"op":"JUMPDEST","gas":30478617,"gasCost":1,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":16,"op":"POP","gas":30478616,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":17,"op":"PUSH1","gas":30478614,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":19,"op":"CALLDATASIZE","gas":30478611,"gasCost":2,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":20,"op":"LT","gas":30478609,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":21,"op":"PUSH1","gas":30478606,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":23,"op":"JUMPI","gas":30478603,"gasCost":10,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000028"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":24,"op":"PUSH1","gas":30478593,"gasCost":3,"depth":1,"stack":[],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":26,"op":"CALLDATALOAD","gas":30478590,"gasCost":3,"depth":1,"stack":["0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":27,"op":"PUSH1","gas":30478587,"gasCost":3,"depth":1,"stack":["f080118c00000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":29,"op":"SHR","gas":30478584,"gasCost":3,"depth":1,"stack":["f080118c00000000000000000000000000000000000000000000000000000000","00000000000000000000000000000000000000000000000000000000000000e0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":30,"op":"DUP1","gas":30478581,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":31,"op":"PUSH4","gas":30478578,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":36,"op":"EQ","gas":30478575,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":37,"op":"PUSH1","gas":30478572,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":39,"op":"JUMPI","gas":30478569,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000002d"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":45,"op":"JUMPDEST","gas":30478559,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":46,"op":"PUSH1","gas":30478558,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":48,"op":"PUSH1","gas":30478555,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":50,"op":"CALLDATASIZE","gas":30478552,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":51,"op":"PUSH1","gas":30478550,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":53,"op":"PUSH1","gas":30478547,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":55,"op":"JUMP","gas":30478544,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000007e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":126,"op":"JUMPDEST","gas":30478536,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":127,"op":"PUSH1","gas":30478535,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":129,"op":"DUP1","gas":30478532,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":130,"op":"PUSH1","gas":30478529,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":132,"op":"DUP4","gas":30478526,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":133,"op":"DUP6","gas":30478523,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":134,"op":"SUB","gas":30478520,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":135,"op":"SLT","gas":30478517,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000040","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":136,"op":"ISZERO","gas":30478514,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":137,"op":"PUSH1","gas":30478511,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":139,"op":"JUMPI","gas":30478508,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000090"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":144,"op":"JUMPDEST","gas":30478498,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":145,"op":"POP","gas":30478497,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":146,"op":"POP","gas":30478495,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":147,"op":"DUP1","gas":30478493,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":148,"op":"CALLDATALOAD","gas":30478490,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":149,"op":"SWAP3","gas":30478487,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":150,"op":"PUSH1","gas":30478484,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":152,"op":"SWAP1","gas":30478481,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":153,"op":"SWAP2","gas":30478478,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000004","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":154,"op":"ADD","gas":30478475,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000004"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":155,"op":"CALLDATALOAD","gas":30478472,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000024"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":156,"op":"SWAP2","gas":30478469,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000044","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":157,"op":"POP","gas":30478466,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000038","0000000000000000000000000000000000000000000000000000000000000044"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":158,"op":"JUMP","gas":30478464,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000038"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":56,"op":"JUMPDEST","gas":30478456,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":57,"op":"PUSH1","gas":30478455,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":59,"op":"JUMP","gas":30478452,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000004e"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":78,"op":"JUMPDEST","gas":30478444,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":79,"op":"PUSH1","gas":30478443,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":81,"op":"DUP1","gas":30478440,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{}},{"pc":82,"op":"SLOAD","gas":30478437,"gasCost":2100,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":83,"op":"PUSH1","gas":30476337,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":85,"op":"SWAP1","gas":30476334,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000000f","000000000000000000000000000000000000000000000000000000000000005b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":86,"op":"PUSH1","gas":30476331,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":88,"op":"PUSH1","gas":30476328,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":90,"op":"JUMP","gas":30476325,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000009f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":159,"op":"JUMPDEST","gas":30476317,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":160,"op":"DUP1","gas":30476316,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":161,"op":"DUP3","gas":30476313,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":162,"op":"ADD","gas":30476310,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":163,"op":"DUP1","gas":30476307,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":164,"op":"DUP3","gas":30476304,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":165,"op":"GT","gas":30476301,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":166,"op":"ISZERO","gas":30476298,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":167,"op":"PUSH1","gas":30476295,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":169,"op":"JUMPI","gas":30476292,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":120,"op":"JUMPDEST","gas":30476282,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":121,"op":"SWAP3","gas":30476281,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000000000005b","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":122,"op":"SWAP2","gas":30476278,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000000f","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000005b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":123,"op":"POP","gas":30476275,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000005b","0000000000000000000000000000000000000000000000000000000000000001","000000000000000000000000000000000000000000000000000000000000000f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":124,"op":"POP","gas":30476273,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000005b","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":125,"op":"JUMP","gas":30476271,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000005b"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":91,"op":"JUMPDEST","gas":30476263,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":92,"op":"PUSH1","gas":30476262,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":94,"op":"DUP2","gas":30476259,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":95,"op":"SWAP1","gas":30476256,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"000000000000000000000000000000000000000000000000000000000000000f"}},{"pc":96,"op":"SSTORE","gas":30476253,"gasCost":2900,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":97,"op":"PUSH1","gas":30473353,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":99,"op":"DUP4","gas":30473350,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":100,"op":"DUP6","gas":30473347,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":101,"op":"PUSH1","gas":30473344,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":103,"op":"JUMP","gas":30473341,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000009f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":159,"op":"JUMPDEST","gas":30473333,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":160,"op":"DUP1","gas":30473332,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":161,"op":"DUP3","gas":30473329,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":162,"op":"ADD","gas":30473326,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":163,"op":"DUP1","gas":30473323,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":164,"op":"DUP3","gas":30473320,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":165,"op":"GT","gas":30473317,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":166,"op":"ISZERO","gas":30473314,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":167,"op":"PUSH1","gas":30473311,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":169,"op":"JUMPI","gas":30473308,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":120,"op":"JUMPDEST","gas":30473298,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":121,"op":"SWAP3","gas":30473297,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":122,"op":"SWAP2","gas":30473294,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":123,"op":"POP","gas":30473291,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":124,"op":"POP","gas":30473289,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":125,"op":"JUMP","gas":30473287,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000068"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":104,"op":"JUMPDEST","gas":30473279,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":105,"op":"PUSH1","gas":30473278,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":107,"op":"SWAP2","gas":30473275,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":108,"op":"SWAP1","gas":30473272,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":109,"op":"PUSH1","gas":30473269,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":111,"op":"JUMP","gas":30473266,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","000000000000000000000000000000000000000000000000000000000000009f"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":159,"op":"JUMPDEST","gas":30473258,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":160,"op":"DUP1","gas":30473257,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":161,"op":"DUP3","gas":30473254,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":162,"op":"ADD","gas":30473251,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":163,"op":"DUP1","gas":30473248,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":164,"op":"DUP3","gas":30473245,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":165,"op":"GT","gas":30473242,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":166,"op":"ISZERO","gas":30473239,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":167,"op":"PUSH1","gas":30473236,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":169,"op":"JUMPI","gas":30473233,"gasCost":10,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000078"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":120,"op":"JUMPDEST","gas":30473223,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":121,"op":"SWAP3","gas":30473222,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":122,"op":"SWAP2","gas":30473219,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":123,"op":"POP","gas":30473216,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":124,"op":"POP","gas":30473214,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000070","0000000000000000000000000000000000000000000000000000000000000010"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":125,"op":"JUMP","gas":30473212,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000070"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":112,"op":"JUMPDEST","gas":30473204,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":113,"op":"PUSH1","gas":30473203,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":115,"op":"DUP2","gas":30473200,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":116,"op":"SWAP1","gas":30473197,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010"}},{"pc":117,"op":"SSTORE","gas":30473194,"gasCost":5000,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000001"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":118,"op":"SWAP1","gas":30468194,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":119,"op":"POP","gas":30468191,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000000"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":120,"op":"JUMPDEST","gas":30468189,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":121,"op":"SWAP3","gas":30468188,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","000000000000000000000000000000000000000000000000000000000000003c","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":122,"op":"SWAP2","gas":30468185,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000000a","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000003c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":123,"op":"POP","gas":30468182,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000006","000000000000000000000000000000000000000000000000000000000000000a"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":124,"op":"POP","gas":30468180,"gasCost":2,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000003c","0000000000000000000000000000000000000000000000000000000000000006"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":125,"op":"JUMP","gas":30468178,"gasCost":8,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","000000000000000000000000000000000000000000000000000000000000003c"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":60,"op":"JUMPDEST","gas":30468170,"gasCost":1,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":61,"op":"PUSH1","gas":30468169,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":63,"op":"MLOAD","gas":30468166,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":64,"op":"SWAP1","gas":30468163,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":65,"op":"DUP2","gas":30468160,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":66,"op":"MSTORE","gas":30468157,"gasCost":9,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":67,"op":"PUSH1","gas":30468148,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":69,"op":"ADD","gas":30468145,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":70,"op":"PUSH1","gas":30468142,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":72,"op":"MLOAD","gas":30468139,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000040"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":73,"op":"DUP1","gas":30468136,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":74,"op":"SWAP2","gas":30468133,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","00000000000000000000000000000000000000000000000000000000000000a0","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":75,"op":"SUB","gas":30468130,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000080","00000000000000000000000000000000000000000000000000000000000000a0"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":76,"op":"SWAP1","gas":30468127,"gasCost":3,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000020"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}},{"pc":77,"op":"RETURN","gas":30468124,"gasCost":0,"depth":1,"stack":["00000000000000000000000000000000000000000000000000000000f080118c","0000000000000000000000000000000000000000000000000000000000000020","0000000000000000000000000000000000000000000000000000000000000080"],"memory":["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000080","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000020"],"storage":{"0000000000000000000000000000000000000000000000000000000000000000":"0000000000000000000000000000000000000000000000000000000000000010","0000000000000000000000000000000000000000000000000000000000000001":"0000000000000000000000000000000000000000000000000000000000000020"}}]}} \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm/opcode_tester.hpp b/crypto3/libs/blueprint/test/zkevm/opcode_tester.hpp index c5f6464cb0..2884a78b45 100644 --- a/crypto3/libs/blueprint/test/zkevm/opcode_tester.hpp +++ b/crypto3/libs/blueprint/test/zkevm/opcode_tester.hpp @@ -25,6 +25,7 @@ #pragma once #include +#include #include #include @@ -32,8 +33,184 @@ namespace nil { namespace blueprint { - zkevm_machine_interface get_empty_machine() { - return zkevm_machine_interface(); + zkevm_machine_interface get_empty_machine(std::vector bytecode = {}, zkevm_word_type bytecode_hash = 0, unsigned long int init_gas = 65537) { // just some default value for initial gas + return zkevm_machine_interface(bytecode, bytecode_hash, init_gas); } + + std::vector hex_string_to_bytes(std::string const &hex_string) { + std::vector bytes; + if(hex_string[0] != '0' || hex_string[1] != 'x') return {}; + for (std::size_t i = 2; i < hex_string.size(); i += 2) { + if( !std::isxdigit(hex_string[i]) || !std::isxdigit(hex_string[i+1]) ) return {}; + std::string byte_string = hex_string.substr(i, 2); + bytes.push_back(std::stoi(byte_string, nullptr, 16)); + } + return bytes; + } + + // This is a class that bytecodes as a sequence of bytes. + // It emulates contract if we don't want to compile contract from the solidity code e t.c. + class zkevm_opcode_tester{ + public: + zkevm_opcode_tester():opcodes_info_instance(opcodes_info::instance()){} + // For PUSHx and errors only + void push_opcode(const zkevm_opcode opcode, const zkevm_word_type &additional_word){ + auto additional_array = w_to_8(additional_word); + std::vector additional_input; + switch( opcode ){ + case zkevm_opcode::PUSH1: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 1, additional_array.end()); + break; + case zkevm_opcode::PUSH2: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*2) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 2, additional_array.end()); + break; + case zkevm_opcode::PUSH3: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*3) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 3, additional_array.end()); + break; + case zkevm_opcode::PUSH4: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*4) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 4, additional_array.end()); + break; + case zkevm_opcode::PUSH5: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*5) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 5, additional_array.end()); + break; + case zkevm_opcode::PUSH6: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*6) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 6, additional_array.end()); + break; + case zkevm_opcode::PUSH7: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*7) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 7, additional_array.end()); + break; + case zkevm_opcode::PUSH8: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*8) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 8, additional_array.end()); + break; + case zkevm_opcode::PUSH9: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*9 ) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 9, additional_array.end()); + break; + case zkevm_opcode::PUSH10: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*10) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 10, additional_array.end()); + break; + case zkevm_opcode::PUSH11: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*11) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 11, additional_array.end()); + break; + case zkevm_opcode::PUSH12: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*12) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 11, additional_array.end()); + break; + case zkevm_opcode::PUSH13: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*13) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 11, additional_array.end()); + break; + case zkevm_opcode::PUSH14: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*14) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 11, additional_array.end()); + break; + case zkevm_opcode::PUSH15: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*15) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 15, additional_array.end()); + break; + case zkevm_opcode::PUSH16: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*16) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 16, additional_array.end()); + break; + case zkevm_opcode::PUSH17: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*17) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 17, additional_array.end()); + break; + case zkevm_opcode::PUSH18: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*18) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 18, additional_array.end()); + break; + case zkevm_opcode::PUSH19: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*19) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 19, additional_array.end()); + break; + case zkevm_opcode::PUSH20: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*20) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 20, additional_array.end()); + break; + case zkevm_opcode::PUSH21: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*21) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 21, additional_array.end()); + break; + case zkevm_opcode::PUSH22: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*22) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 22, additional_array.end()); + break; + case zkevm_opcode::PUSH23: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*23) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 23, additional_array.end()); + break; + case zkevm_opcode::PUSH24: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*24) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 24, additional_array.end()); + break; + case zkevm_opcode::PUSH25: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*25) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 25, additional_array.end()); + break; + case zkevm_opcode::PUSH26: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*26) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 26, additional_array.end()); + break; + case zkevm_opcode::PUSH27: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*27) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 27, additional_array.end()); + break; + case zkevm_opcode::PUSH28: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*28) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 28, additional_array.end()); + break; + case zkevm_opcode::PUSH29: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*29) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 29, additional_array.end()); + break; + case zkevm_opcode::PUSH30: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*30) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 30, additional_array.end()); + break; + case zkevm_opcode::PUSH31: + BOOST_ASSERT(additional_word < (zkevm_word_type(1).base() << 8*31) - 1); + additional_input.insert(additional_input.end(), additional_array.end() - 31, additional_array.end()); + break; + case zkevm_opcode::PUSH32: + additional_input.insert(additional_input.end(), additional_array.begin(), additional_array.end()); + break; + default: + BOOST_ASSERT(false); + } + push_opcode(opcode, additional_input); + } + void push_opcode(const zkevm_opcode opcode, const std::vector &additional_input = {}){ + std::cout << "PC opcode map[" << bytecode.size() << "] = " << opcodes.size() << " opcode = " << opcode_to_string(opcode) << std::endl; + pc_opcode_map[bytecode.size()] = opcodes.size(); + opcodes.push_back({opcode, additional_input}); + bytecode.push_back(opcodes_info_instance.get_opcode_value(opcode)); + bytecode.insert(bytecode.end(), additional_input.begin(), additional_input.end() ); + } + const std::vector &get_bytecode() const { + return bytecode; + } + const std::vector>> &get_opcodes() const { + return opcodes; + } + const std::pair> get_opcode_by_pc(std::size_t pc) const { + return opcodes.at(pc_opcode_map.at(pc)); + } + private: + opcodes_info opcodes_info_instance; + std::vector bytecode; + std::vector>> opcodes; + std::map pc_opcode_map; + }; } // namespace blueprint -} // namespace nil \ No newline at end of file +} // namespace nil diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/add_sub.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/add_sub.cpp index 8b09896be6..7767f59943 100644 --- a/crypto3/libs/blueprint/test/zkevm/opcodes/add_sub.cpp +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/add_sub.cpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -36,8 +37,6 @@ #include #include "../opcode_tester.hpp" -#include - using namespace nil::blueprint; using namespace nil::crypto3::algebra; @@ -51,24 +50,59 @@ BOOST_AUTO_TEST_CASE(zkevm_add_test) { using zkevm_machine_type = zkevm_machine_interface; assignment_type assignment(0, 0, 0, 0); circuit_type circuit; - zkevm_circuit zkevm_circuit(assignment, circuit); - zkevm_machine_type machine = get_empty_machine(); - // incorrect test logic, but we have no memory operations so - machine.stack.push(zwordc(0x1234567890_cppui_modular257)); - machine.stack.push(zwordc(0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::ADD, machine); - zkevm_circuit.assign_opcode(zkevm_opcode::SUB, machine); - machine.stack.push(zwordc(0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - machine.stack.push(zwordc(0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::ADD, machine); - zkevm_circuit.assign_opcode(zkevm_opcode::SUB, machine); - machine.stack.push(zwordc(0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - machine.stack.push(zwordc(0x1234567890_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::ADD, machine); - zkevm_circuit.assign_opcode(zkevm_opcode::SUB, machine); - zkevm_circuit.finalize_test(); - // assignment.export_table(std::cout); - // circuit.export_circuit(std::cout); + zkevm_circuit evm_circuit(assignment, circuit, 75, 600); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); +// std::ofstream myfile; +// myfile.open("test_assignment.txt"); +// assignment.export_table(myfile); +// myfile.close(); +// +// myfile.open("test_circuit.txt"); +// circuit.export_circuit(myfile); +// myfile.close(); nil::crypto3::zk::snark::basic_padding(assignment); BOOST_ASSERT(is_satisfied(circuit, assignment) == true); } diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/bitwise.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/bitwise.cpp new file mode 100644 index 0000000000..4ca007e5d7 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/bitwise.cpp @@ -0,0 +1,122 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" +#define BOOST_TEST_MODULE zkevm_add_test + +#include + +#include +#include "nil/blueprint/zkevm/zkevm_word.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_bitwise_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_bitwise_test) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 159,1000); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x3_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x3_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x3_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/byte_ops.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/byte_ops.cpp new file mode 100644 index 0000000000..93b34b9825 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/byte_ops.cpp @@ -0,0 +1,246 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" +#define BOOST_TEST_MODULE zkevm_byte_ops_test + +#include + +#include +#include "nil/blueprint/zkevm/zkevm_word.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_byte_ops_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_byte_ops_test) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 499, 65536); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x33_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x33_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x33_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHL); + + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/cmp.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/cmp.cpp new file mode 100644 index 0000000000..970224a04e --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/cmp.cpp @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" +#define BOOST_TEST_MODULE zkevm_cmp_test + +#include + +#include +#include "nil/blueprint/zkevm/zkevm_word.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_cmp_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_cmp_test) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 159,1200); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::GT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::LT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EQ); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SGT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SLT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::GT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::LT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EQ); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SGT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SLT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::GT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::LT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EQ); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SGT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SLT); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/div.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/div.cpp index 66839fe656..1babb5ac66 100644 --- a/crypto3/libs/blueprint/test/zkevm/opcodes/div.cpp +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/div.cpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -35,41 +36,120 @@ #include #include "../opcode_tester.hpp" -#include - using namespace nil::blueprint; using namespace nil::crypto3::algebra; -BOOST_AUTO_TEST_SUITE(zkevm_mul_test_suite) +BOOST_AUTO_TEST_SUITE(zkevm_div_test_suite) BOOST_AUTO_TEST_CASE(zkevm_mul_test) { - using field_type = curves::alt_bn128<254>::base_field_type; + using field_type = fields::pallas_base_field; using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; using assignment_type = assignment; using circuit_type = circuit; using zkevm_machine_type = zkevm_machine_interface; assignment_type assignment(0, 0, 0, 0); circuit_type circuit; - zkevm_circuit zkevm_circuit(assignment, circuit); - zkevm_machine_type machine = get_empty_machine(); + zkevm_circuit evm_circuit(assignment, circuit, 249,2000); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + // incorrect test logic, but we have no memory operations so - // check all overflows for chunks - machine.stack.push(zwordc(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular257)); - machine.stack.push(zwordc(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::DIV, machine); - machine.stack.push(1234567890); - machine.stack.push(zwordc(0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::DIV, machine); - machine.stack.push(zwordc(0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - machine.stack.push(zwordc(0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::DIV, machine); - machine.stack.push(zwordc(0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - machine.stack.push(1234567890); - zkevm_circuit.assign_opcode(zkevm_opcode::DIV, machine); - machine.stack.push(0); - machine.stack.push(1234567890); - zkevm_circuit.assign_opcode(zkevm_opcode::DIV, machine); - zkevm_circuit.finalize_test(); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::MOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::MOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + // below is the overflow case for signed division + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); // assignment.export_table(std::cout); // circuit.export_circuit(std::cout); nil::crypto3::zk::snark::basic_padding(assignment); diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/err0.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/err0.cpp new file mode 100644 index 0000000000..ad2000799d --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/err0.cpp @@ -0,0 +1,160 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE zkevm_err0_test + +#include + +//#include +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_err0_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_err0_test_1) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 15, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_CASE(zkevm_err0_test_2) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 2060, 65536); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // incorrect test logic, but we have no memory operations so + for( std::size_t i = 0; i < 1025; i++ ){ + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 0); + } + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +/* +BOOST_AUTO_TEST_CASE(zkevm_err0_test_2) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit zkevm_circuit(assignment, circuit, 15); + zkevm_table zkevm_table(zkevm_circuit, assignment); + zkevm_machine_type machine = get_empty_machine(8); + + machine.apply_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); zkevm_table.assign_opcode(machine); + machine.apply_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); zkevm_table.assign_opcode(machine); + // produce an out-of-gas error + zkevm_table.finalize_test(); + +// std::ofstream myfile; +// myfile.open("test_assignment_err2.txt"); +// assignment.export_table(myfile); +// myfile.close(); + + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} +*/ +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/err1.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/err1.cpp new file mode 100644 index 0000000000..984f7d469a --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/err1.cpp @@ -0,0 +1,248 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE zkevm_err1_test + +#include + +//#include +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_err1_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_jump_to_non_jumpdest_opcoce) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 149, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // JUMP not to JUMPDEST. Lookup constraints should fail + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 8); + opcode_tester.push_opcode(zkevm_opcode::JUMP); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 8); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_CASE(zkevm_jumpi_to_non_jumpdest_opcoce) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 149, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // JUMP not to JUMPDEST. Lookup constraints should fail + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 10); + opcode_tester.push_opcode(zkevm_opcode::JUMPI); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 8); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_CASE(zkevm_jump_out_of_contract) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 149, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // JUMP not to JUMPDEST. Lookup constraints should fail + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH4, 102345); // jumps out of contract + opcode_tester.push_opcode(zkevm_opcode::JUMP); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 8); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_CASE(zkevm_jumpi_out_of_contract) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 149, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // JUMP not to JUMPDEST. Lookup constraints should fail + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 10); // non-zero condition + opcode_tester.push_opcode(zkevm_opcode::PUSH4, 102345); // jumps out of contract + opcode_tester.push_opcode(zkevm_opcode::JUMPI); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 8); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/iszero.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/iszero.cpp index 8ae2fbd3ea..67bc2dde40 100644 --- a/crypto3/libs/blueprint/test/zkevm/opcodes/iszero.cpp +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/iszero.cpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -26,42 +27,61 @@ #include -#include +//#include +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" #include #include -#include +#include #include "../opcode_tester.hpp" -#include - using namespace nil::blueprint; using namespace nil::crypto3::algebra; BOOST_AUTO_TEST_SUITE(zkevm_iszero_test_suite) BOOST_AUTO_TEST_CASE(zkevm_iszero_test) { - using field_type = fields::goldilocks64; + using field_type = fields::pallas_base_field; using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; using assignment_type = assignment; using circuit_type = circuit; using zkevm_machine_type = zkevm_machine_interface; assignment_type assignment(0, 0, 0, 0); circuit_type circuit; - zkevm_circuit zkevm_circuit(assignment, circuit); - zkevm_machine_type machine = get_empty_machine(); - // incorrect test logic, but we have no memory operations so - machine.stack.push(1234567890); - machine.stack.push(0); - zkevm_circuit.assign_opcode(zkevm_opcode::ISZERO, machine); - machine.stack.pop(); - zkevm_circuit.assign_opcode(zkevm_opcode::ISZERO, machine); - zkevm_circuit.finalize_test(); + zkevm_circuit evm_circuit(assignment, circuit, 25, 100); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::ISZERO); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::ISZERO); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); // assignment.export_table(std::cout); // circuit.export_circuit(std::cout); nil::crypto3::zk::snark::basic_padding(assignment); BOOST_ASSERT(is_satisfied(circuit, assignment) == true); } - BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/jumps.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/jumps.cpp new file mode 100644 index 0000000000..102bc136b3 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/jumps.cpp @@ -0,0 +1,154 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE zkevm_jumps_test + +#include + +//#include +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_jump_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_jump_test_1) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 150, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // SUB opcode should be executed and ADD -- not + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 8); + opcode_tester.push_opcode(zkevm_opcode::JUMP); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::JUMPDEST); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_CASE(zkevm_jumpi_test_1) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 150, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // SUB opcode should be executed and ADD -- not + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); // 0 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); // 2 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 3); // 4 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 0); // 6 // Condition + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 123); // 8 // Address is not important + opcode_tester.push_opcode(zkevm_opcode::JUMPI); // 10 + opcode_tester.push_opcode(zkevm_opcode::ADD); // 11 + opcode_tester.push_opcode(zkevm_opcode::JUMPDEST); // 12 + opcode_tester.push_opcode(zkevm_opcode::SUB); // 13 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); // 0 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); // 2 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 3); // 4 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); // 14 // Condition + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 26); //16 // Address + opcode_tester.push_opcode(zkevm_opcode::JUMPI); // 18 + opcode_tester.push_opcode(zkevm_opcode::ADD); // 19 + opcode_tester.push_opcode(zkevm_opcode::JUMPDEST); // 20 + opcode_tester.push_opcode(zkevm_opcode::SUB); // 21 + // Correct cotract finishing + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/mod_ops.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/mod_ops.cpp new file mode 100644 index 0000000000..948223cb1a --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/mod_ops.cpp @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" +#define BOOST_TEST_MODULE zkevm_cmp_test + +#include + +#include +#include "nil/blueprint/zkevm/zkevm_word.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_mod_ops_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_mod_ops_test) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 159,1200); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); // a + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); // a + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); // a + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); // a + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 3); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); // a + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 3); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); // a + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x12b8f010425938504d73ebc8801e2e0161b70726fb8d3a24da9ff9647225a184_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x12b8f010425938504d73ebc8801e2e0161b70726fb8d3a24da9ff9647225a184_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x6789012345_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x6789012345_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/mul.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/mul.cpp index 4f7fa4a0af..5db608845a 100644 --- a/crypto3/libs/blueprint/test/zkevm/opcodes/mul.cpp +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/mul.cpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2024 Dmitrii Tabalin +// Copyright (c) 2024 Alexey Yashunsky // // MIT License // @@ -43,31 +44,51 @@ using namespace nil::crypto3::algebra; BOOST_AUTO_TEST_SUITE(zkevm_mul_test_suite) BOOST_AUTO_TEST_CASE(zkevm_mul_test) { - using field_type = curves::alt_bn128<254>::base_field_type; + using field_type = fields::pallas_base_field; using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; using assignment_type = assignment; using circuit_type = circuit; using zkevm_machine_type = zkevm_machine_interface; assignment_type assignment(0, 0, 0, 0); circuit_type circuit; - zkevm_circuit zkevm_circuit(assignment, circuit); - zkevm_machine_type machine = get_empty_machine(); - // incorrect test logic, but we have no memory operations so - // check all overflows for chunks - machine.stack.push(zwordc(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular257)); - machine.stack.push(zwordc(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::MUL, machine); - machine.stack.push(1234567890); - machine.stack.push(zwordc(0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::MUL, machine); - machine.stack.push(zwordc(0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - machine.stack.push(zwordc(0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - zkevm_circuit.assign_opcode(zkevm_opcode::MUL, machine); - machine.stack.push(zwordc(0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_cppui_modular257)); - machine.stack.push(1234567890); - zkevm_circuit.assign_opcode(zkevm_opcode::MUL, machine); - zkevm_circuit.finalize_test(); + zkevm_circuit evm_circuit(assignment, circuit, 75, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); // assignment.export_table(std::cout); // circuit.export_circuit(std::cout); nil::crypto3::zk::snark::basic_padding(assignment); diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/not.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/not.cpp new file mode 100644 index 0000000000..547e449574 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/not.cpp @@ -0,0 +1,90 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" +#define BOOST_TEST_MODULE zkevm_not_test + +#include + +#include +#include "nil/blueprint/zkevm/zkevm_word.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_not_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_not_test) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 75, 500); + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::NOT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::NOT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::NOT); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/pushx.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/pushx.cpp new file mode 100644 index 0000000000..d34610d31a --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/pushx.cpp @@ -0,0 +1,123 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE zkevm_pushx_test + +#include + +//#include +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" + +#include +#include + +#include +#include "../opcode_tester.hpp" + +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + +BOOST_AUTO_TEST_SUITE(zkevm_pushx_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_pushx_test) { + // using field_type = fields::goldilocks64; + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, 79, 600); + + nil::crypto3::zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 65536 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + opcode_tester.push_opcode(zkevm_opcode::PUSH0); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x12")); + opcode_tester.push_opcode(zkevm_opcode::PUSH2, hex_string_to_bytes("0x1234")); + opcode_tester.push_opcode(zkevm_opcode::PUSH3, hex_string_to_bytes("0x123456")); + opcode_tester.push_opcode(zkevm_opcode::PUSH4, hex_string_to_bytes("0x12345678")); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x1b70726fb8")); + opcode_tester.push_opcode(zkevm_opcode::PUSH6, hex_string_to_bytes("0x1b70726fb8d3")); + opcode_tester.push_opcode(zkevm_opcode::PUSH7, hex_string_to_bytes("0x1b70726fb8d3a2")); + opcode_tester.push_opcode(zkevm_opcode::PUSH8, hex_string_to_bytes("0x1b70726fb8d3a24d")); + opcode_tester.push_opcode(zkevm_opcode::PUSH9, hex_string_to_bytes("0x1b70726fb8d3a24da9")); + opcode_tester.push_opcode(zkevm_opcode::PUSH10, hex_string_to_bytes("0x1b70726fb8d3a24da9ff")); + opcode_tester.push_opcode(zkevm_opcode::PUSH11, hex_string_to_bytes("0x1b70726fb8d3a24da9ff96")); + opcode_tester.push_opcode(zkevm_opcode::PUSH12, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647")); + opcode_tester.push_opcode(zkevm_opcode::PUSH13, hex_string_to_bytes("0x1b70726fb8d3a24da9ff964722")); + opcode_tester.push_opcode(zkevm_opcode::PUSH14, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a")); + opcode_tester.push_opcode(zkevm_opcode::PUSH15, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18")); + opcode_tester.push_opcode(zkevm_opcode::PUSH16, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a1841")); + opcode_tester.push_opcode(zkevm_opcode::PUSH17, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b")); + opcode_tester.push_opcode(zkevm_opcode::PUSH18, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f")); + opcode_tester.push_opcode(zkevm_opcode::PUSH19, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f01")); + opcode_tester.push_opcode(zkevm_opcode::PUSH20, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f0104")); + opcode_tester.push_opcode(zkevm_opcode::PUSH21, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425")); + opcode_tester.push_opcode(zkevm_opcode::PUSH22, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f01042593")); + opcode_tester.push_opcode(zkevm_opcode::PUSH23, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f0104259385")); + opcode_tester.push_opcode(zkevm_opcode::PUSH24, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504")); + opcode_tester.push_opcode(zkevm_opcode::PUSH25, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d7")); + opcode_tester.push_opcode(zkevm_opcode::PUSH26, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73e")); + opcode_tester.push_opcode(zkevm_opcode::PUSH27, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc")); + opcode_tester.push_opcode(zkevm_opcode::PUSH28, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc88")); + opcode_tester.push_opcode(zkevm_opcode::PUSH29, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801")); + opcode_tester.push_opcode(zkevm_opcode::PUSH30, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2")); + opcode_tester.push_opcode(zkevm_opcode::PUSH31, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e0")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(opcode_tester.get_bytecode(), zkevm_keccak_hash(opcode_tester.get_bytecode())); + while(true) { + machine.apply_opcode(opcode_tester.get_opcode_by_pc(machine.pc_next()).first, opcode_tester.get_opcode_by_pc(machine.pc_next()).second); + zkevm_table.assign_opcode(machine); + if( machine.tx_finish()) break; + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + + zkevm_table.finalize_test(bytecode_input); +// std::ofstream myfile; +// myfile.open("test_assignment.txt"); +// assignment.export_table(myfile); +// myfile.close(); + + // assignment.export_table(std::cout); + // circuit.export_circuit(std::cout); + nil::crypto3::zk::snark::basic_padding(assignment); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/opcodes/workload.cpp b/crypto3/libs/blueprint/test/zkevm/opcodes/workload.cpp new file mode 100644 index 0000000000..021f6c6df6 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/opcodes/workload.cpp @@ -0,0 +1,156 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Alexey Yashunsky +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#include "nil/crypto3/algebra/fields/pallas/base_field.hpp" +#define BOOST_TEST_MODULE zkevm_workload_test + +#include + +#include +#include "nil/blueprint/zkevm/zkevm_word.hpp" + +#include +#include +#include +#include + +#include +#include "../opcode_tester.hpp" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include "../../test_plonk_component.hpp" + +#include +#include +#include + +using namespace nil; +using namespace nil::crypto3; +using namespace nil::blueprint; +using namespace nil::crypto3::algebra; + + +BOOST_AUTO_TEST_SUITE(zkevm_workload_test_suite) + +BOOST_AUTO_TEST_CASE(zkevm_workload_test) { + using field_type = fields::pallas_base_field; + using arithmentization_type = nil::crypto3::zk::snark::plonk_constraint_system; + using table_description_type = nil::crypto3::zk::snark::plonk_table_description; + using assignment_type = assignment; + using circuit_type = circuit; + using zkevm_machine_type = zkevm_machine_interface; + const std::vector implemented_opcodes = { + zkevm_opcode::ADD, zkevm_opcode::SUB, zkevm_opcode::AND, zkevm_opcode::OR, zkevm_opcode::XOR + ,zkevm_opcode::BYTE, zkevm_opcode::SHL, zkevm_opcode::SHR + ,zkevm_opcode::SAR, zkevm_opcode::SIGNEXTEND + ,zkevm_opcode::EQ, zkevm_opcode::GT, zkevm_opcode::LT, zkevm_opcode::SGT, zkevm_opcode::SLT + ,zkevm_opcode::DIV, zkevm_opcode::MOD, zkevm_opcode::SDIV, zkevm_opcode::SMOD, zkevm_opcode::ISZERO + ,zkevm_opcode::ADDMOD, zkevm_opcode::MULMOD, zkevm_opcode::MUL, zkevm_opcode::NOT + }; + const std::size_t num_of_opcodes = implemented_opcodes.size(), + workload = 32767; +// workload = 63; + + assignment_type assignment(0, 0, 0, 0); + circuit_type circuit; + zkevm_circuit evm_circuit(assignment, circuit, workload * 12 + 1 , workload * 12 + 10); + zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, assignment, + assignment.rows_amount(), + 30000000 + ); + + zkevm_table zkevm_table(evm_circuit, assignment); + zkevm_opcode_tester opcode_tester; + + // incorrect test logic, but we have no memory operations so + for(std::size_t i = 0; i < workload; i++) { + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 0x11_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 0x22_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 0x33_big_uint257); + opcode_tester.push_opcode(implemented_opcodes[i % num_of_opcodes]); + } + opcode_tester.push_opcode(zkevm_opcode::RETURN); + + zkevm_machine_type machine = get_empty_machine(zkevm_keccak_hash(opcode_tester.get_bytecode())); + auto opcodes = opcode_tester.get_opcodes(); + for( std::size_t i = 0; i < opcodes.size(); i++ ){ + machine.apply_opcode(opcodes[i].first, opcodes[i].second); zkevm_table.assign_opcode(machine); + } + + typename zkevm_circuit::bytecode_table_component::input_type bytecode_input; + bytecode_input.new_bytecode(opcode_tester.get_bytecode()); + bytecode_input.new_bytecode({0x60,0x40,0x60,0x80, 0xF3}); + + zkevm_table.finalize_test(bytecode_input); + + // Prepare table description for table printing + table_description_type desc( + assignment.witnesses_amount(), assignment.public_inputs_amount(), + assignment.constants_amount(), assignment.selectors_amount() + ); + desc.usable_rows_amount = assignment.rows_amount(); + nil::crypto3::zk::snark::basic_padding(assignment); + desc.rows_amount = assignment.rows_amount(); + + print_zk_circuit_and_table_to_file( + "opcode_workload", + circuit, + desc, + assignment + ); + BOOST_ASSERT(is_satisfied(circuit, assignment) == true); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm/rw.cpp b/crypto3/libs/blueprint/test/zkevm/rw.cpp new file mode 100644 index 0000000000..fa2cc8f585 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm/rw.cpp @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_zkevm_rw_test + +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include + +#include "../test_plonk_component.hpp" + + +using namespace nil; + +std::vector hex_string_to_bytes(std::string const &hex_string) { + std::vector bytes; + for (std::size_t i = 2; i < hex_string.size(); i += 2) { + std::string byte_string = hex_string.substr(i, 2); + bytes.push_back(std::stoi(byte_string, nullptr, 16)); + } + return bytes; +} + +template +void test_zkevm_rw( + std::string path, + std::size_t max_rw_size +){ + constexpr std::size_t WitnessColumns = 65; + std::cout << "Read write circuit test with "<< WitnessColumns << " witnesses" << std::endl; + std::cout << "path = " << path << std::endl; + + std::ifstream ss; + ss.open(path); + boost::property_tree::ptree pt; + boost::property_tree::read_json(ss, pt); + ss.close(); + + nil::blueprint::rw_trace rw_trace(pt, max_rw_size); + + constexpr std::size_t PublicInputColumns = 0; + constexpr std::size_t ConstantColumns = 4; + constexpr std::size_t SelectorColumns = 5; + zk::snark::plonk_table_description desc( + WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); + using ArithmetizationType = crypto3::zk::snark::plonk_constraint_system; + using hash_type = nil::crypto3::hashes::keccak_1600<256>; + constexpr std::size_t Lambda = 40; + using AssignmentType = nil::blueprint::assignment; + + using value_type = typename BlueprintFieldType::value_type; + using var = crypto3::zk::snark::plonk_variable; + + using component_type = nil::blueprint::components::zkevm_rw; + + typename component_type::input_type instance_input(rw_trace); + + auto result_check = [](AssignmentType &assignment, + typename component_type::result_type &real_res) { + }; + + std::array witnesses; + for (std::uint32_t i = 0; i < WitnessColumns; i++) { + witnesses[i] = i; + } + component_type component_instance = component_type(witnesses, std::array{0}, + std::array{0}, max_rw_size); + + std::vector public_input; + nil::crypto3::test_component + (component_instance, desc, public_input, result_check, instance_input, + nil::blueprint::connectedness_check_type::type::NONE, max_rw_size); +} + +constexpr static const std::size_t random_tests_amount = 10; + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_test_suite) + using field_type = typename crypto3::algebra::curves::vesta::base_field_type; +BOOST_AUTO_TEST_CASE(minimal_math_contract){ + test_zkevm_rw(std::string(TEST_DATA_DIR) + "minimal_math/trace0.json", 10000); +} + +BOOST_AUTO_TEST_CASE(small_storage_contract){ + test_zkevm_rw(std::string(TEST_DATA_DIR) + "small_stack_storage/trace0.json", 10000); +} + +BOOST_AUTO_TEST_CASE(mstore8_contract){ + test_zkevm_rw(std::string(TEST_DATA_DIR) + "mstore8/trace0.json", 10000); +} + +BOOST_AUTO_TEST_CASE(meminit_contract){ + test_zkevm_rw(std::string(TEST_DATA_DIR) + "mem_init/trace0.json", 10000); +} + +BOOST_AUTO_TEST_CASE(calldatacopy_contract){ + test_zkevm_rw(std::string(TEST_DATA_DIR) + "calldatacopy/trace0.json", 10000); +} +BOOST_AUTO_TEST_SUITE_END() + +/* +BOOST_AUTO_TEST_SUITE(blueprint_plonk_pallas_test_suite) + using field_type = typename crypto3::algebra::curves::pallas::base_field_type; +BOOST_AUTO_TEST_CASE(small_storage_contract){ + test_zkevm_rw("../libs/blueprint/test/zkevm/data/small_stack_storage.json"); +} +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(blueprint_plonk_bls_test_suite) + using field_type = typename crypto3::algebra::fields::bls12_fr<381>; +BOOST_AUTO_TEST_CASE(small_storage_contract){ + test_zkevm_rw("../libs/blueprint/test/zkevm/data/small_stack_storage.json"); +} +BOOST_AUTO_TEST_SUITE_END() +*/ diff --git a/crypto3/libs/blueprint/test/zkevm/state_selector.cpp b/crypto3/libs/blueprint/test/zkevm/state_selector.cpp index 854398a62b..341f2c63b1 100644 --- a/crypto3/libs/blueprint/test/zkevm/state_selector.cpp +++ b/crypto3/libs/blueprint/test/zkevm/state_selector.cpp @@ -34,7 +34,7 @@ #include #include -#include +#include #include "../test_plonk_component.hpp" diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/bytecode.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/bytecode.cpp new file mode 100644 index 0000000000..1f5ae00c62 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/bytecode.cpp @@ -0,0 +1,140 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_bytecode_test + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "./test_l1_wrapper.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; + +std::string bytecode_for = "0x60806040523480156100195760008061001661001f565b50505b5061008d565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561005a57808601518160408401015260208101905061003c565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6103188061009c6000396000f3fe6080604052348015610019576000806100166100bb565b50505b50600436106100345760003560e01c806347b0b31c14610042575b60008061003f6100bb565b50505b61005c600480360381019061005791906101a3565b610072565b60405161006991906101f7565b60405180910390f35b60006001905060005b828110156100a457838261008f9190610212565b9150808061009c90610276565b91505061007b565b5080600081906100b2610129565b50505092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156100f65780860151816040840101526020810190506100d8565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b60408110156101895760008183015260208101905061016f565b505050565b60008135905061019d816102f8565b92915050565b600080604083850312156101bf576000806101bc6100bb565b50505b60006101cd8582860161018e565b92505060206101de8582860161018e565b9150509250929050565b6101f18161026c565b82525050565b600060208201905061020c60008301846101e8565b92915050565b600061021d8261026c565b91506102288361026c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610261576102606102bf565b5b828202905092915050565b6000819050919050565b60006102818261026c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156102b4576102b36102bf565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000006000526011600452602460006102f46100bb565b5050565b6103018161026c565b8114610315576000806103126100bb565b50505b5056"; +std::string bytecode_addition = "0x60806040523480156100195760008061001661001f565b50505b5061008d565b632a2a7adb598160e01b8152600481016020815285602082015260005b8681101561005a57808601518160408401015260208101905061003c565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6102b38061009c6000396000f3fe6080604052348015610019576000806100166100a3565b50505b50600436106100345760003560e01c8063f080118c14610042575b60008061003f6100a3565b50505b61005c6004803603810190610057919061018b565b610072565b60405161006991906101df565b60405180910390f35b6000818361008091906101fa565b6000819061008c610111565b505050818361009b91906101fa565b905092915050565b632a2a7adb598160e01b8152600481016020815285602082015260005b868110156100de5780860151816040840101526020810190506100c0565b506020828760640184336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b505050565b6322bd64c0598160e01b8152836004820152846024820152600081604483336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b60005b604081101561017157600081830152602081019050610157565b505050565b60008135905061018581610293565b92915050565b600080604083850312156101a7576000806101a46100a3565b50505b60006101b585828601610176565b92505060206101c685828601610176565b9150509250929050565b6101d981610250565b82525050565b60006020820190506101f460008301846101d0565b92915050565b600061020582610250565b915061021083610250565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156102455761024461025a565b5b828201905092915050565b6000819050919050565b7f4e487b710000000000000000000000000000000000000000000000000000000060005260116004526024600061028f6100a3565b5050565b61029c81610250565b81146102b0576000806102ad6100a3565b50505b5056"; +std::string bytecode_mstore8 = "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ec66f8b914610030575b600080fd5b61003861004a565b60405190815260200160405180910390f35b60408051602080825281830190925260009160609190602082018180368337019050509050600160005461007e91906106b4565b60008190555060005460ff1660f81b816000815181106100a0576100a06106cd565b60200101906001600160f81b031916908160001a905350600860005461ff0016901c60f81b816001815181106100d8576100d86106cd565b60200101906001600160f81b031916908160001a905350601060005462ff000016901c60f81b81600281518110610111576101116106cd565b60200101906001600160f81b031916908160001a905350601860005463ff00000016901c60f81b8160038151811061014b5761014b6106cd565b60200101906001600160f81b031916908160001a905350602060005464ff0000000016901c60f81b81600481518110610186576101866106cd565b60200101906001600160f81b031916908160001a905350602860005465ff000000000016901c60f81b816005815181106101c2576101c26106cd565b60200101906001600160f81b031916908160001a905350603060005466ff00000000000016901c60f81b816006815181106101ff576101ff6106cd565b60200101906001600160f81b031916908160001a905350603860005467ff0000000000000016901c60f81b8160078151811061023d5761023d6106cd565b60200101906001600160f81b031916908160001a905350604060005468ff000000000000000016901c60f81b8160088151811061027c5761027c6106cd565b60200101906001600160f81b031916908160001a905350604860005469ff00000000000000000016901c60f81b816009815181106102bc576102bc6106cd565b60200101906001600160f81b031916908160001a905350605060005460ff604c1b16901c60f81b81600a815181106102f6576102f66106cd565b60200101906001600160f81b031916908160001a905350605860005460ff60541b16901c60f81b81600b81518110610330576103306106cd565b60200101906001600160f81b031916908160001a905350606060005460ff605c1b16901c60f81b81600c8151811061036a5761036a6106cd565b60200101906001600160f81b031916908160001a905350606860005460ff60641b16901c60f81b81600d815181106103a4576103a46106cd565b60200101906001600160f81b031916908160001a905350607060005460ff606c1b16901c60f81b81600e815181106103de576103de6106cd565b60200101906001600160f81b031916908160001a905350607860005460ff60741b16901c60f81b81600f81518110610418576104186106cd565b60200101906001600160f81b031916908160001a90535080600081518110610442576104426106cd565b0160200151815160f89190911c925081906001908110610464576104646106cd565b01602001516104769060f81c836106e3565b91508060028151811061048b5761048b6106cd565b016020015161049d9060f81c836106e3565b9150806003815181106104b2576104b26106cd565b01602001516104c49060f81c836106e3565b9150806004815181106104d9576104d96106cd565b01602001516104eb9060f81c836106e3565b915080600581518110610500576105006106cd565b01602001516105129060f81c836106e3565b915080600681518110610527576105276106cd565b01602001516105399060f81c836106e3565b91508060078151811061054e5761054e6106cd565b01602001516105609060f81c836106e3565b915080600881518110610575576105756106cd565b01602001516105879060f81c836106e3565b91508060098151811061059c5761059c6106cd565b01602001516105ae9060f81c836106e3565b915080600a815181106105c3576105c36106cd565b01602001516105d59060f81c836106e3565b915080600b815181106105ea576105ea6106cd565b01602001516105fc9060f81c836106e3565b915080600c81518110610611576106116106cd565b01602001516106239060f81c836106e3565b915080600d81518110610638576106386106cd565b016020015161064a9060f81c836106e3565b915080600e8151811061065f5761065f6106cd565b01602001516106719060f81c836106e3565b915080600f81518110610686576106866106cd565b01602001516106989060f81c836106e3565b91505090565b634e487b7160e01b600052601160045260246000fd5b818103818111156106c7576106c761069e565b92915050565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176106c7576106c761069e56fea2646970667358"; + +class zkEVMBytecodeTestFixture: public BBFTestFixture { +public: + zkEVMBytecodeTestFixture():BBFTestFixture(){} + + template + void test_zkevm_bytecode( + const nil::blueprint::bbf::zkevm_keccak_buffers &bytecodes, + const nil::blueprint::bbf::zkevm_keccak_buffers &keccak_buffers, + std::size_t max_bytecode_size, + std::size_t max_keccak_blocks, + bool expected_result = true + ){ + typename nil::blueprint::bbf::bytecode::input_type bytecode_assignment_input; + typename nil::blueprint::bbf::bytecode::input_type bytecode_constraint_input; + + bytecode_assignment_input.rlc_challenge = 7; + bytecode_assignment_input.bytecodes = bytecodes; + bytecode_assignment_input.keccak_buffers = keccak_buffers; + + bool result = test_bbf_component( + "bytecode", + {7}, // Public input + bytecode_assignment_input, // Assignment input + bytecode_constraint_input, // Circuit input + max_bytecode_size, // Sizes + max_keccak_blocks // Keccak blocks amount + ); + BOOST_CHECK((!check_satisfiability && !generate_proof) || result == expected_result); // Max_rw, Max_mpt + } +}; + +BOOST_FIXTURE_TEST_SUITE(zkevm_bbf_bytecode, zkEVMBytecodeTestFixture) + using field_type = nil::crypto3::algebra::curves::alt_bn128_254::scalar_field_type; +BOOST_AUTO_TEST_CASE(one_contract){ + nil::blueprint::bbf::zkevm_keccak_buffers input; + input.new_buffer(hex_string_to_bytes(bytecode_for)); + + nil::blueprint::bbf::zkevm_keccak_buffers keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + keccak_input.new_buffer(hex_string_to_bytes("0x00ed")); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa12312384710283470321894798234702918470189347")); + test_zkevm_bytecode(input, keccak_input, 1000, 30); +} + +BOOST_AUTO_TEST_CASE(two_contracts){ + nil::blueprint::bbf::zkevm_keccak_buffers input; + input.new_buffer(hex_string_to_bytes(bytecode_for)); + input.new_buffer(hex_string_to_bytes(bytecode_addition)); + + nil::blueprint::bbf::zkevm_keccak_buffers keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes(bytecode_addition)); + + test_zkevm_bytecode(input, keccak_input, 5000, 30); +} + +BOOST_AUTO_TEST_CASE(mstore8){ + nil::blueprint::bbf::zkevm_keccak_buffers input; + input.new_buffer(hex_string_to_bytes(bytecode_mstore8)); + + nil::blueprint::bbf::zkevm_keccak_buffers keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_mstore8)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + keccak_input.new_buffer(hex_string_to_bytes("0x00ed")); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa12312384710283470321894798234702918470189347")); + test_zkevm_bytecode(input, keccak_input, 10000, 50); +} + +BOOST_AUTO_TEST_CASE(not_hashed){ + nil::blueprint::bbf::zkevm_keccak_buffers input; + input.new_buffer(hex_string_to_bytes(bytecode_for)); + input.new_buffer(hex_string_to_bytes(bytecode_addition)); + + nil::blueprint::bbf::zkevm_keccak_buffers keccak_input; + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes(bytecode_for)); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa")); + keccak_input.new_buffer(hex_string_to_bytes("0x00ed")); + keccak_input.new_buffer(hex_string_to_bytes("0xffaa12312384710283470321894798234702918470189347")); + + test_zkevm_bytecode(input, keccak_input, 5000, 50, false); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/copy.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/copy.cpp new file mode 100644 index 0000000000..cf5aabcb8f --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/copy.cpp @@ -0,0 +1,178 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_copy_test + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./test_l1_wrapper.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; + +class zkEVMCopyTestFixture: public BBFTestFixture { +public: + zkEVMCopyTestFixture():BBFTestFixture(){} + + template + void test_zkevm_copy( + const std::vector> &bytecodes, + const std::vector &traces, + const l1_size_restrictions &max_sizes, + bool expected_result = true + ){ + const auto &pt = traces[0]; + const auto &bytecode0 = bytecodes[0]; + + nil::blueprint::bbf::zkevm_hardhat_input_generator circuit_inputs(bytecodes, traces); + + using integral_type = typename field_type::integral_type; + using value_type = typename field_type::value_type; + + integral_type base16 = integral_type(1) << 16; + + std::size_t max_keccak_blocks = max_sizes.max_keccak_blocks; + std::size_t max_bytecode = max_sizes.max_bytecode; + std::size_t max_mpt = max_sizes.max_mpt; + std::size_t max_rw = max_sizes.max_rw; + std::size_t max_copy = max_sizes.max_copy; + std::size_t max_zkevm_rows = max_sizes.max_zkevm_rows; + + typename nil::blueprint::bbf::copy::input_type copy_assignment_input; + typename nil::blueprint::bbf::copy::input_type copy_constraint_input; + copy_assignment_input.rlc_challenge = 7; + copy_assignment_input.bytecodes = circuit_inputs.bytecodes(); + copy_assignment_input.keccak_buffers = circuit_inputs.keccaks(); + copy_assignment_input.rw_operations = circuit_inputs.rw_operations(); + copy_assignment_input.copy_events = circuit_inputs.copy_events(); + + bool result = test_bbf_component( + "copy", {7}, copy_assignment_input, copy_constraint_input, max_copy, max_rw, max_keccak_blocks, max_bytecode + ); + BOOST_ASSERT(result == expected_result); + } +}; + +BOOST_FIXTURE_TEST_SUITE(zkevm_bbf_copy, zkEVMCopyTestFixture) + using field_type = typename algebra::curves::pallas::base_field_type; + using integral_type = typename field_type::integral_type; + using value_type = typename field_type::value_type; +BOOST_AUTO_TEST_CASE(small_storage_contract){ + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("small_stack_storage/"); + + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 500; + + test_zkevm_copy(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(mstore8_contract){ + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("mstore8/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 5000; + max_sizes.max_copy = 3000; + max_sizes.max_zkevm_rows = 4500; + + test_zkevm_copy(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(meminit_contract){ + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("mem_init/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 10000; + max_sizes.max_copy = 3000; + max_sizes.max_zkevm_rows = 4500; + + test_zkevm_copy(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(calldatacopy_contract){ + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("calldatacopy/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 10000; + max_sizes.max_copy = 3000; + max_sizes.max_zkevm_rows = 4500; + + test_zkevm_copy(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(keccak_contract){ + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("keccak/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 10000; + max_sizes.max_copy = 3000; + max_sizes.max_zkevm_rows = 4500; + + test_zkevm_copy(bytecodes, pts, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/hardhat.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/hardhat.cpp new file mode 100644 index 0000000000..610d2db759 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/hardhat.cpp @@ -0,0 +1,286 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_l1_wrapper_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./test_l1_wrapper.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; + +class zkEVMHardhatTestFixture: public BBFTestFixture { +public: + zkEVMHardhatTestFixture():BBFTestFixture(){} + + template + void complex_test( + const std::vector> &bytecodes, + const std::vector &traces, + const l1_size_restrictions &max_sizes + ){ + const auto &pt = traces[0]; + const auto &bytecode0 = bytecodes[0]; + + nil::blueprint::bbf::zkevm_hardhat_input_generator circuit_inputs(bytecodes, traces); + + using integral_type = typename field_type::integral_type; + using value_type = typename field_type::value_type; + + integral_type base16 = integral_type(1) << 16; + + std::size_t max_keccak_blocks = max_sizes.max_keccak_blocks; + std::size_t max_bytecode = max_sizes.max_bytecode; + std::size_t max_mpt = max_sizes.max_mpt; + std::size_t max_rw = max_sizes.max_rw; + std::size_t max_copy = max_sizes.max_copy; + std::size_t max_zkevm_rows = max_sizes.max_zkevm_rows; + + typename nil::blueprint::bbf::copy::input_type copy_assignment_input; + typename nil::blueprint::bbf::copy::input_type copy_constraint_input; + copy_assignment_input.rlc_challenge = 7; + copy_assignment_input.bytecodes = circuit_inputs.bytecodes(); + copy_assignment_input.keccak_buffers = circuit_inputs.keccaks(); + copy_assignment_input.rw_operations = circuit_inputs.rw_operations(); + copy_assignment_input.copy_events = circuit_inputs.copy_events(); + + typename nil::blueprint::bbf::zkevm::input_type zkevm_assignment_input; + typename nil::blueprint::bbf::zkevm::input_type zkevm_constraint_input; + zkevm_assignment_input.rlc_challenge = 7; + zkevm_assignment_input.bytecodes = circuit_inputs.bytecodes(); + zkevm_assignment_input.keccak_buffers = circuit_inputs.keccaks(); + zkevm_assignment_input.rw_operations = circuit_inputs.rw_operations(); + zkevm_assignment_input.copy_events = circuit_inputs.copy_events(); + zkevm_assignment_input.zkevm_states = circuit_inputs.zkevm_states(); + zkevm_assignment_input.exponentiations = circuit_inputs.exponentiations(); + + typename nil::blueprint::bbf::rw::input_type rw_assignment_input = circuit_inputs.rw_operations(); + typename nil::blueprint::bbf::rw::input_type rw_constraint_input; + + typename nil::blueprint::bbf::keccak::input_type keccak_assignment_input; + typename nil::blueprint::bbf::keccak::input_type keccak_constraint_input; + keccak_assignment_input.private_input = 12345; + + typename nil::blueprint::bbf::bytecode::input_type bytecode_assignment_input; + typename nil::blueprint::bbf::bytecode::input_type bytecode_constraint_input; + bytecode_assignment_input.rlc_challenge = 7; + bytecode_assignment_input.bytecodes = circuit_inputs.bytecodes(); + bytecode_assignment_input.keccak_buffers = circuit_inputs.keccaks(); + bool result; + + // Max_rows, max_bytecode, max_rw + result = test_bbf_component( + "zkevm", + {}, zkevm_assignment_input, zkevm_constraint_input, + max_zkevm_rows, + max_copy, + max_rw, + max_keccak_blocks, + max_bytecode + ); + BOOST_ASSERT(result); + std::cout << std::endl; + + // Max_copy, Max_rw, Max_keccak, Max_bytecode + result =test_bbf_component( + "copy", + {7}, copy_assignment_input, copy_constraint_input, + max_copy, max_rw, max_keccak_blocks, max_bytecode + ); + BOOST_ASSERT(result); + std::cout << std::endl; + + // Max_keccak + result = test_bbf_component( + "keccak", + {}, keccak_assignment_input , keccak_constraint_input + ); + BOOST_ASSERT(result); + std::cout << std::endl; + + // Max_bytecode, max_bytecode + std::cout << "Bytecode circuit" << std::endl; + result = test_bbf_component( + "bytecode", + {7}, bytecode_assignment_input, bytecode_constraint_input, max_bytecode, max_keccak_blocks + ); + BOOST_ASSERT(result); + std::cout << std::endl; + + // Max_rw, Max_mpt + std::cout << "RW circuit" << std::endl; + result = test_bbf_component( + "rw", + {}, rw_assignment_input, rw_constraint_input, max_rw, max_mpt + ); + BOOST_ASSERT(result); + std::cout << std::endl; + } +}; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_bbf_hardhat, zkEVMHardhatTestFixture) + +BOOST_AUTO_TEST_CASE(minimal_math) { + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("minimal_math/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 500; + max_sizes.max_exponentiations = 50; + + complex_test(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(modular_operations) { + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("modular_operations/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 500; + max_sizes.max_exponentiations = 50; + + complex_test(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(exp) { + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("exp/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 1000; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 2000; + max_sizes.max_exponentiations = 50; + + complex_test(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(keccak) { + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("keccak/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 1000; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 500; + max_sizes.max_exponentiations = 50; + + complex_test(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(mstore8) { + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("mstore8/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 5000; + max_sizes.max_copy = 3000; + max_sizes.max_zkevm_rows = 4500; + max_sizes.max_exponentiations = 50; + + complex_test(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(meminit) { + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("mem_init/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 10000; + max_sizes.max_copy = 3000; + max_sizes.max_zkevm_rows = 10000; + max_sizes.max_exponentiations = 50; + + complex_test(bytecodes, pts, max_sizes); +} + +BOOST_AUTO_TEST_CASE(calldatacopy) { + using field_type = typename algebra::curves::pallas::base_field_type; + auto [bytecodes, pts] = load_hardhat_input("calldatacopy/"); + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 5000; + max_sizes.max_copy = 3000; + max_sizes.max_zkevm_rows = 4500; + max_sizes.max_exponentiations = 50; + + complex_test(bytecodes, pts, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/add_sub.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/add_sub.cpp new file mode 100644 index 0000000000..b8758e1c9a --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/add_sub.cpp @@ -0,0 +1,99 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) + +BOOST_AUTO_TEST_CASE(add_sub) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/bitwise.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/bitwise.cpp new file mode 100644 index 0000000000..1e7770fd1b --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/bitwise.cpp @@ -0,0 +1,117 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) + +BOOST_AUTO_TEST_CASE(bitwize) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x3_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x3_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x3_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::AND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::OR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::XOR); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/byte_ops.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/byte_ops.cpp new file mode 100644 index 0000000000..7ee817256a --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/byte_ops.cpp @@ -0,0 +1,244 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) + +BOOST_AUTO_TEST_CASE(byte_ops) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 10); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 257); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,257); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 65538); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x8b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,65538); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 10); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,10); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 30); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,30); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 50); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,50); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,1); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,32); + opcode_tester.push_opcode(zkevm_opcode::BYTE); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::SIGNEXTEND); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 31); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,31); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x33_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SAR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x33_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32,0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHR); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x33_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SHL); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 400; + max_sizes.max_bytecode = 5000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 3000; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 500; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/cmp.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/cmp.cpp new file mode 100644 index 0000000000..8534a91e3c --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/cmp.cpp @@ -0,0 +1,126 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) + +BOOST_AUTO_TEST_CASE(cmp) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::GT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::LT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EQ); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SGT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SLT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::GT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::LT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EQ); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SGT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SLT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::GT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::LT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EQ); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SGT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SLT); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/div.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/div.cpp new file mode 100644 index 0000000000..a11414bbb9 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/div.cpp @@ -0,0 +1,154 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) +BOOST_AUTO_TEST_CASE(divs) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + // below is the overflow case for signed division + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::DIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SDIV); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8000000000000000000000000000000000000000000000000000000000000000_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::SMOD); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/exp.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/exp.cpp new file mode 100644 index 0000000000..ac64258317 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/exp.cpp @@ -0,0 +1,115 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) +BOOST_AUTO_TEST_CASE(exp) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + // incorrect test logic, but we have no memory operations so + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 255); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::EXP); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 50; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + max_sizes.max_exponentiations = 50; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/iszero.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/iszero.cpp new file mode 100644 index 0000000000..b4085786c7 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/iszero.cpp @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) +BOOST_AUTO_TEST_CASE(iszero) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x1234567890")); + opcode_tester.push_opcode(zkevm_opcode::ISZERO); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x00")); + opcode_tester.push_opcode(zkevm_opcode::ISZERO); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 100; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/jumps.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/jumps.cpp new file mode 100644 index 0000000000..11ef254d26 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/jumps.cpp @@ -0,0 +1,127 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) + +BOOST_AUTO_TEST_CASE(jump) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 8); + opcode_tester.push_opcode(zkevm_opcode::JUMP); + opcode_tester.push_opcode(zkevm_opcode::ADD); + opcode_tester.push_opcode(zkevm_opcode::JUMPDEST); + opcode_tester.push_opcode(zkevm_opcode::SUB); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} + +BOOST_AUTO_TEST_CASE(jumpi) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + // SUB opcode should be executed and ADD -- not + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); // 0 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); // 2 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 3); // 4 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 0); // 6 // Condition + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 123); // 8 // Address is not important + opcode_tester.push_opcode(zkevm_opcode::JUMPI); // 10 + opcode_tester.push_opcode(zkevm_opcode::ADD); // 11 + opcode_tester.push_opcode(zkevm_opcode::JUMPDEST); // 12 + opcode_tester.push_opcode(zkevm_opcode::SUB); // 13 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); // 0 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); // 2 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 3); // 4 + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); // 14 // Condition + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 26); //16 // Address + opcode_tester.push_opcode(zkevm_opcode::JUMPI); // 18 + opcode_tester.push_opcode(zkevm_opcode::ADD); // 19 + opcode_tester.push_opcode(zkevm_opcode::JUMPDEST); // 20 + opcode_tester.push_opcode(zkevm_opcode::SUB); // 21 + // Correct cotract finishing + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 1); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 2); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/mod_ops.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/mod_ops.cpp new file mode 100644 index 0000000000..f5625981b1 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/mod_ops.cpp @@ -0,0 +1,128 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_l1_wrapper_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) +BOOST_AUTO_TEST_CASE(mod_ops) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x00")); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x02")); // a + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x00")); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x02")); // a + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x01")); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x02")); // a + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x01")); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x02")); // a + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x03")); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x02")); // a + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x03")); // N + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); // b + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x02")); // a + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x1234567890")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x12b8f010425938504d73ebc8801e2e0161b70726fb8d3a24da9ff9647225a184")); + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x1234567890")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x12b8f010425938504d73ebc8801e2e0161b70726fb8d3a24da9ff9647225a184")); + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x1234567890")); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x6789012345")); + opcode_tester.push_opcode(zkevm_opcode::ADDMOD); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x1234567890")); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x6789012345")); + opcode_tester.push_opcode(zkevm_opcode::MULMOD); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/mul.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/mul.cpp new file mode 100644 index 0000000000..3b376c437e --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/mul.cpp @@ -0,0 +1,113 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) +BOOST_AUTO_TEST_CASE(mul) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1111111111111111111111111111111111111111111111111111111111111111_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x4444444444444444333333333333333322222222222222221111111111111111_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x88888888888888888888888888888888_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x8888888888888888888888888888888888888888888888888888888888888888_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 2); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 1234567890); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1e); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1e); + opcode_tester.push_opcode(zkevm_opcode::MUL); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/not.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/not.cpp new file mode 100644 index 0000000000..8e8e1be496 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/not.cpp @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +// Remember that in production sizes should be preset. +// Here they are different for different tests just for fast and easy testing +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) +BOOST_AUTO_TEST_CASE(opcode_not) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + l1_size_restrictions max_sizes; + + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1234567890_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::NOT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::NOT); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0xFb70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::NOT); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 300; + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/opcode_test_fixture.hpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/opcode_test_fixture.hpp new file mode 100644 index 0000000000..d9c197906e --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/opcode_test_fixture.hpp @@ -0,0 +1,158 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "../test_l1_wrapper.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; +using namespace nil::blueprint::bbf; + +class zkEVMOpcodeTestFixture: public BBFTestFixture { +public: + zkEVMOpcodeTestFixture():BBFTestFixture(){} + + template + void complex_opcode_test( + const zkevm_opcode_tester &opcode_tester, + const l1_size_restrictions &max_sizes + ){ + nil::blueprint::bbf::zkevm_opcode_tester_input_generator circuit_inputs(opcode_tester); + + using integral_type = typename BlueprintFieldType::integral_type; + using value_type = typename BlueprintFieldType::value_type; + + integral_type base16 = integral_type(1) << 16; + + std::size_t max_keccak_blocks = max_sizes.max_keccak_blocks; + std::size_t max_bytecode = max_sizes.max_bytecode; + std::size_t max_mpt = max_sizes.max_mpt; + std::size_t max_rw = max_sizes.max_rw; + std::size_t max_copy = max_sizes.max_copy; + std::size_t max_zkevm_rows = max_sizes.max_zkevm_rows; + + typename nil::blueprint::bbf::copy::input_type copy_assignment_input; + typename nil::blueprint::bbf::copy::input_type copy_constraint_input; + copy_assignment_input.rlc_challenge = 7; + copy_assignment_input.bytecodes = circuit_inputs.bytecodes(); + copy_assignment_input.keccak_buffers = circuit_inputs.keccaks(); + copy_assignment_input.rw_operations = circuit_inputs.rw_operations(); + copy_assignment_input.copy_events = circuit_inputs.copy_events(); + + typename nil::blueprint::bbf::zkevm::input_type zkevm_assignment_input; + typename nil::blueprint::bbf::zkevm::input_type zkevm_constraint_input; + zkevm_assignment_input.rlc_challenge = 7; + zkevm_assignment_input.bytecodes = circuit_inputs.bytecodes(); + zkevm_assignment_input.keccak_buffers = circuit_inputs.keccaks(); + zkevm_assignment_input.rw_operations = circuit_inputs.rw_operations(); + zkevm_assignment_input.copy_events = circuit_inputs.copy_events(); + zkevm_assignment_input.zkevm_states = circuit_inputs.zkevm_states(); + zkevm_assignment_input.exponentiations = circuit_inputs.exponentiations(); + + typename nil::blueprint::bbf::rw::input_type rw_assignment_input = circuit_inputs.rw_operations(); + typename nil::blueprint::bbf::rw::input_type rw_constraint_input; + + typename nil::blueprint::bbf::keccak::input_type keccak_assignment_input; + typename nil::blueprint::bbf::keccak::input_type keccak_constraint_input; + keccak_assignment_input.private_input = 12345; + + typename nil::blueprint::bbf::bytecode::input_type bytecode_assignment_input; + typename nil::blueprint::bbf::bytecode::input_type bytecode_constraint_input; + bytecode_assignment_input.rlc_challenge = 7; + bytecode_assignment_input.bytecodes = circuit_inputs.bytecodes(); + bytecode_assignment_input.keccak_buffers = circuit_inputs.keccaks(); + bool result; + + // Max_rows, max_bytecode, max_rw + result = test_bbf_component( + "zkevm", + {}, zkevm_assignment_input, zkevm_constraint_input, + max_zkevm_rows, + max_copy, + max_rw, + max_keccak_blocks, + max_bytecode + ); + BOOST_CHECK(result); + std::cout << std::endl; + + // Max_bytecode, max_bytecode + std::cout << "Bytecode circuit" << std::endl; + result = test_bbf_component( + "bytecode", + {7}, bytecode_assignment_input, bytecode_constraint_input, max_bytecode, max_keccak_blocks + ); + BOOST_CHECK(result); + std::cout << std::endl; + + // Max_rw, Max_mpt + std::cout << "RW circuit" << std::endl; + result = test_bbf_component( + "rw", + {}, rw_assignment_input, rw_constraint_input, max_rw, max_mpt + ); + BOOST_CHECK(result); + std::cout << std::endl; + + // Max_copy, Max_rw, Max_keccak, Max_bytecode + result =test_bbf_component( + "copy", + {7}, copy_assignment_input, copy_constraint_input, + max_copy, max_rw, max_keccak_blocks, max_bytecode + ); + BOOST_CHECK(result); + std::cout << std::endl; + + // Max_keccak + result = test_bbf_component( + "keccak", + {}, keccak_assignment_input , keccak_constraint_input + ); + BOOST_CHECK(result); + std::cout << std::endl; + } +}; \ No newline at end of file diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/pushx.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/pushx.cpp new file mode 100644 index 0000000000..9cf90ab554 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/opcodes/pushx.cpp @@ -0,0 +1,161 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_opcodes_test + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./opcode_test_fixture.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint::bbf; + +BOOST_FIXTURE_TEST_SUITE(zkevm_opcode_test_suite, zkEVMOpcodeTestFixture) +BOOST_AUTO_TEST_CASE(pushx_strings) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + opcode_tester.push_opcode(zkevm_opcode::PUSH0); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, hex_string_to_bytes("0x12")); + opcode_tester.push_opcode(zkevm_opcode::PUSH2, hex_string_to_bytes("0x1234")); + opcode_tester.push_opcode(zkevm_opcode::PUSH3, hex_string_to_bytes("0x123456")); + opcode_tester.push_opcode(zkevm_opcode::PUSH4, hex_string_to_bytes("0x12345678")); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, hex_string_to_bytes("0x1b70726fb8")); + opcode_tester.push_opcode(zkevm_opcode::PUSH6, hex_string_to_bytes("0x1b70726fb8d3")); + opcode_tester.push_opcode(zkevm_opcode::PUSH7, hex_string_to_bytes("0x1b70726fb8d3a2")); + opcode_tester.push_opcode(zkevm_opcode::PUSH8, hex_string_to_bytes("0x1b70726fb8d3a24d")); + opcode_tester.push_opcode(zkevm_opcode::PUSH9, hex_string_to_bytes("0x1b70726fb8d3a24da9")); + opcode_tester.push_opcode(zkevm_opcode::PUSH10, hex_string_to_bytes("0x1b70726fb8d3a24da9ff")); + opcode_tester.push_opcode(zkevm_opcode::PUSH11, hex_string_to_bytes("0x1b70726fb8d3a24da9ff96")); + opcode_tester.push_opcode(zkevm_opcode::PUSH12, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647")); + opcode_tester.push_opcode(zkevm_opcode::PUSH13, hex_string_to_bytes("0x1b70726fb8d3a24da9ff964722")); + opcode_tester.push_opcode(zkevm_opcode::PUSH14, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a")); + opcode_tester.push_opcode(zkevm_opcode::PUSH15, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18")); + opcode_tester.push_opcode(zkevm_opcode::PUSH16, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a1841")); + opcode_tester.push_opcode(zkevm_opcode::PUSH17, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b")); + opcode_tester.push_opcode(zkevm_opcode::PUSH18, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f")); + opcode_tester.push_opcode(zkevm_opcode::PUSH19, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f01")); + opcode_tester.push_opcode(zkevm_opcode::PUSH20, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f0104")); + opcode_tester.push_opcode(zkevm_opcode::PUSH21, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425")); + opcode_tester.push_opcode(zkevm_opcode::PUSH22, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f01042593")); + opcode_tester.push_opcode(zkevm_opcode::PUSH23, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f0104259385")); + opcode_tester.push_opcode(zkevm_opcode::PUSH24, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504")); + opcode_tester.push_opcode(zkevm_opcode::PUSH25, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d7")); + opcode_tester.push_opcode(zkevm_opcode::PUSH26, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73e")); + opcode_tester.push_opcode(zkevm_opcode::PUSH27, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc")); + opcode_tester.push_opcode(zkevm_opcode::PUSH28, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc88")); + opcode_tester.push_opcode(zkevm_opcode::PUSH29, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801")); + opcode_tester.push_opcode(zkevm_opcode::PUSH30, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2")); + opcode_tester.push_opcode(zkevm_opcode::PUSH31, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e0")); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, hex_string_to_bytes("0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016")); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 100; + + complex_opcode_test(opcode_tester, max_sizes); +} + +BOOST_AUTO_TEST_CASE(pushx) { + using field_type = typename algebra::curves::pallas::base_field_type; + zkevm_opcode_tester opcode_tester; + + opcode_tester.push_opcode(zkevm_opcode::PUSH0); + opcode_tester.push_opcode(zkevm_opcode::PUSH1, 0x12_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH2, 0x1234_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH3, 0x123456_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH4, 0x12345678_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH5, 0x1b70726fb8_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH6, 0x1b70726fb8d3_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH7, 0x1b70726fb8d3a2_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH8, 0x1b70726fb8d3a24d_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH9, 0x1b70726fb8d3a24da9_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH10, 0x1b70726fb8d3a24da9ff_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH11, 0x1b70726fb8d3a24da9ff96_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH12, 0x1b70726fb8d3a24da9ff9647_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH13, 0x1b70726fb8d3a24da9ff964722_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH14, 0x1b70726fb8d3a24da9ff9647225a_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH15, 0x1b70726fb8d3a24da9ff9647225a18_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH16, 0x1b70726fb8d3a24da9ff9647225a1841_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH17, 0x1b70726fb8d3a24da9ff9647225a18412b_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH18, 0x1b70726fb8d3a24da9ff9647225a18412b8f_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH19, 0x1b70726fb8d3a24da9ff9647225a18412b8f01_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH20, 0x1b70726fb8d3a24da9ff9647225a18412b8f0104_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH21, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH22, 0x1b70726fb8d3a24da9ff9647225a18412b8f01042593_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH23, 0x1b70726fb8d3a24da9ff9647225a18412b8f0104259385_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH24, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH25, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d7_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH26, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73e_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH27, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH28, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc88_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH29, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH30, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH31, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e0_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::PUSH32, 0x1b70726fb8d3a24da9ff9647225a18412b8f010425938504d73ebc8801e2e016_big_uint257); + opcode_tester.push_opcode(zkevm_opcode::STOP); + + l1_size_restrictions max_sizes; + + max_sizes.max_keccak_blocks = 10; + max_sizes.max_bytecode = 3000; + max_sizes.max_mpt = 0; + max_sizes.max_rw = 500; + max_sizes.max_copy = 500; + max_sizes.max_zkevm_rows = 100; + + complex_opcode_test(opcode_tester, max_sizes); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/rw.cpp b/crypto3/libs/blueprint/test/zkevm_bbf/rw.cpp new file mode 100644 index 0000000000..2a95695d74 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/rw.cpp @@ -0,0 +1,113 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE blueprint_plonk_rw_test +#define PROFILING_ENABLED + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "./test_l1_wrapper.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; + +class zkEVMRWTestFixture: public BBFTestFixture { +public: + zkEVMRWTestFixture():BBFTestFixture(){} + + template + void test_zkevm_rw( + std::vector paths, + std::size_t max_rw_size + ){ + auto [bytecodes, traces] = load_hardhat_input(paths[0]); + for( std::size_t i = 1; i < paths.size(); i++ ){ + auto [bytecodes_next, traces_next] = load_hardhat_input(paths[i]); + bytecodes.insert(bytecodes.end(), bytecodes_next.begin(), bytecodes_next.end()); + traces.insert(traces.end(), traces_next.begin(), traces_next.end()); + } + + nil::blueprint::bbf::zkevm_hardhat_input_generator circuit_inputs(bytecodes, traces); + + typename nil::blueprint::bbf::rw::input_type rw_trace = circuit_inputs.rw_operations(); + typename nil::blueprint::bbf::rw::input_type null_input; + + std::cout << "rw_trace size = " << rw_trace.size() << std::endl; + bool result = test_bbf_component( + "rw", {}, rw_trace, null_input, max_rw_size, 0 + ); + BOOST_ASSERT(result); // Max_rw, Max_mpt + } +}; + +BOOST_FIXTURE_TEST_SUITE(blueprint_bbf_rw, zkEVMRWTestFixture) + using field_type = typename algebra::curves::pallas::base_field_type; + using integral_type = typename field_type::integral_type; + using value_type = typename field_type::value_type; +BOOST_AUTO_TEST_CASE(minimal_math){ + test_zkevm_rw({"minimal_math/"}, 500); +} + +BOOST_AUTO_TEST_CASE(small_storage){ + test_zkevm_rw({"small_stack_storage/"}, 500); +} + +BOOST_AUTO_TEST_CASE(mstore8){ + test_zkevm_rw({"mstore8/"}, 5000); +} + +BOOST_AUTO_TEST_CASE(meminit){ + test_zkevm_rw({"mem_init/"}, 10000); +} + +BOOST_AUTO_TEST_CASE(calldatacopy){ + test_zkevm_rw({"calldatacopy/"}, 10000); +} + +BOOST_AUTO_TEST_CASE(multiple_traces){ + test_zkevm_rw({"minimal_math/", "keccak/", "exp/"} , 3000); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/blueprint/test/zkevm_bbf/test_l1_wrapper.hpp b/crypto3/libs/blueprint/test/zkevm_bbf/test_l1_wrapper.hpp new file mode 100644 index 0000000000..4c20d606f9 --- /dev/null +++ b/crypto3/libs/blueprint/test/zkevm_bbf/test_l1_wrapper.hpp @@ -0,0 +1,308 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Elena Tatuzova +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../test_plonk_component.hpp" + +using namespace nil::crypto3; +using namespace nil::blueprint; +using namespace nil::blueprint::bbf; + +struct l1_size_restrictions{ + std::size_t max_exponentiations; + std::size_t max_keccak_blocks; + std::size_t max_bytecode; + std::size_t max_mpt; + std::size_t max_rw; + std::size_t max_copy; + std::size_t max_zkevm_rows; +}; + +std::vector hex_string_to_bytes(std::string const &hex_string) { + std::vector bytes; + for (std::size_t i = 2; i < hex_string.size(); i += 2) { + std::string byte_string = hex_string.substr(i, 2); + bytes.push_back(std::stoi(byte_string, nullptr, 16)); + } + return bytes; +} + +std::pair>, std::vector> load_hardhat_input(std::string path){ + std::vector> bytecodes; + std::vector pts; + + std::ifstream ss; + std::cout << "Open file " << std::string(TEST_DATA_DIR) + path + "trace0.json" << std::endl; + ss.open(std::string(TEST_DATA_DIR) + path + "trace0.json"); + boost::property_tree::ptree pt; + boost::property_tree::read_json(ss, pt); + ss.close(); + + ss.open(std::string(TEST_DATA_DIR) + path + "contract0.json"); + boost::property_tree::ptree bytecode_json; + boost::property_tree::read_json(ss, bytecode_json); + std::vector bytecode0 = hex_string_to_bytes(std::string(bytecode_json.get_child("bytecode").data().c_str())); + ss.close(); + + return {{bytecode0}, {pt}}; +} + +template +bool check_proof( + nil::blueprint::circuit> bp, + assignment> assignment, + zk::snark::plonk_table_description desc +) { + std::size_t Lambda = 9; + + typedef nil::crypto3::zk::snark::placeholder_circuit_params circuit_params; + using transcript_hash_type = nil::crypto3::hashes::keccak_1600<256>; + using merkle_hash_type = nil::crypto3::hashes::keccak_1600<256>; + using transcript_type = typename nil::crypto3::zk::transcript::fiat_shamir_heuristic_sequential; + using lpc_params_type = nil::crypto3::zk::commitments::list_polynomial_commitment_params< + merkle_hash_type, + transcript_hash_type, + 2 //m + >; + + using lpc_type = nil::crypto3::zk::commitments::list_polynomial_commitment; + using lpc_scheme_type = typename nil::crypto3::zk::commitments::lpc_commitment_scheme; + using lpc_placeholder_params_type = nil::crypto3::zk::snark::placeholder_params; + typename lpc_type::fri_type::params_type fri_params(1, std::ceil(log2(assignment.rows_amount())), Lambda, 2); + lpc_scheme_type lpc_scheme(fri_params); + + std::cout << "Public preprocessor" << std::endl; + typename nil::crypto3::zk::snark::placeholder_public_preprocessor::preprocessed_data_type + lpc_preprocessed_public_data = nil::crypto3::zk::snark::placeholder_public_preprocessor::process( + bp, assignment.public_table(), desc, lpc_scheme, 10); + + std::cout << "Private preprocessor" << std::endl; + typename nil::crypto3::zk::snark::placeholder_private_preprocessor::preprocessed_data_type + lpc_preprocessed_private_data = nil::crypto3::zk::snark::placeholder_private_preprocessor::process( + bp, assignment.private_table(), desc); + + std::cout << "Prover" << std::endl; + auto lpc_proof = nil::crypto3::zk::snark::placeholder_prover::process( + lpc_preprocessed_public_data, std::move(lpc_preprocessed_private_data), desc, bp, + lpc_scheme); + + // We must not use the same instance of lpc_scheme. + lpc_scheme_type verifier_lpc_scheme(fri_params); + + std::cout << "Verifier" << std::endl; + bool verifier_res = nil::crypto3::zk::snark::placeholder_verifier::process( + lpc_preprocessed_public_data.common_data, lpc_proof, desc, bp, verifier_lpc_scheme); + return verifier_res; +} + +template < + typename BlueprintFieldType, + template typename BBFType, + typename... ComponentStaticInfoArgs +> +std::tuple< + nil::blueprint::circuit>, + assignment>, + zk::snark::plonk_table_description +> +prepare_table_and_circuit( + std::vector public_input, + typename BBFType::input_type assignment_input, + typename BBFType::input_type constraint_input, + ComponentStaticInfoArgs... component_static_info_args +){ + using ArithmetizationType = zk::snark::plonk_constraint_system; + using AssignmentType = assignment; + using var = zk::snark::plonk_variable; + using component_type = components::plonk_l1_wrapper; + + auto desc = component_type::get_table_description(component_static_info_args...); + AssignmentType assignment(desc); + nil::blueprint::circuit bp; + + std::size_t start_row = 0; + + std::vector witnesses; + for( std::size_t i = 0; i < desc.witness_columns; i++) witnesses.push_back(i); + std::vector public_inputs = {0}; + for( std::size_t i = 0; i < desc.public_input_columns; i++) public_inputs.push_back(i); + std::vector constants; + for( std::size_t i = 0; i < desc.constant_columns; i++) constants.push_back(i); + + component_type component_instance(witnesses, public_inputs, constants); + + nil::blueprint::components::generate_circuit( + component_instance, bp, assignment, constraint_input, start_row, component_static_info_args... + ); + zk::snark::pack_lookup_tables_horizontal( + bp.get_reserved_indices(), + bp.get_reserved_tables(), + bp.get_reserved_dynamic_tables(), + bp, assignment, + assignment.rows_amount(), + 100000 + ); + + nil::blueprint::components::generate_assignments( + component_instance, assignment, assignment_input, start_row, component_static_info_args... + ); + + desc.usable_rows_amount = assignment.rows_amount(); + nil::crypto3::zk::snark::basic_padding(assignment); + desc.rows_amount = assignment.rows_amount(); + return {bp, assignment, desc}; +} + +template < + typename BlueprintFieldType, + template typename BBFType, + typename... ComponentStaticInfoArgs +> +bool test_l1_wrapper( + std::vector public_input, + typename BBFType::input_type assignment_input, + typename BBFType::input_type constraint_input, + ComponentStaticInfoArgs... component_static_info_args +) { + auto [bp, assignment, desc] = prepare_table_and_circuit( + public_input, assignment_input, constraint_input, component_static_info_args... + ); + return is_satisfied(bp, assignment) == true; +} + +template < + typename BlueprintFieldType, + template typename BBFType, + typename... ComponentStaticInfoArgs +> +bool test_l1_wrapper_with_proof_verification( + std::vector public_input, + typename BBFType::input_type assignment_input, + typename BBFType::input_type constraint_input, + ComponentStaticInfoArgs... component_static_info_args +) { + auto [bp, assignment, desc] = prepare_table_and_circuit( + public_input, assignment_input, constraint_input, component_static_info_args... + ); + bool sat = is_satisfied(bp, assignment); + std::cout << "Desc.rows_amount = " << desc.rows_amount << std::endl; + std::cout << "Desc.usable_rows_amount = " << desc.usable_rows_amount << std::endl; + + if (sat ) + std::cout << "Circuit is satisfied" << std::endl; + else + std::cout << "Circuit is not satisfied" << std::endl; + + return check_proof(bp, assignment, desc); +} + +class BBFTestFixture +{ +public: + explicit BBFTestFixture(){ + check_satisfiability = true; + generate_proof = false; + print_to_file = false; + + std::size_t argc = boost::unit_test::framework::master_test_suite().argc; + auto &argv = boost::unit_test::framework::master_test_suite().argv; + for( std::size_t i = 0; i < argc; i++ ){ + if( std::string(argv[i]) == "--print" ) print_to_file = true; + if( std::string(argv[i]) == "--no-sat-check" ) check_satisfiability = false; + if( std::string(argv[i]) == "--proof" ) generate_proof = true; + } + std::string suite(boost::unit_test::framework::get(boost::unit_test::framework::current_test_case().p_parent_id).p_name); + std::string test(boost::unit_test::framework::current_test_case().p_name); + output_file = print_to_file ? std::string("./") + suite + "_" + test: ""; + } + + ~BBFTestFixture(){} + + template < + typename field_type, + template typename BBFType, + typename... ComponentStaticInfoArgs + > + bool test_bbf_component( + std::string circuit_name, + std::vector public_input, + typename BBFType::input_type assignment_input, + typename BBFType::input_type constraint_input, + ComponentStaticInfoArgs... component_static_info_args + ){ + // Max_copy, Max_rw, Max_keccak, Max_bytecode + auto [bp, assignment, desc] = prepare_table_and_circuit( + public_input, assignment_input, constraint_input, + component_static_info_args... + ); + if( print_to_file ){ + print_bp_circuit_and_table_to_file(output_file + "_" + circuit_name, bp, desc, assignment); + } + bool result = true; + if( check_satisfiability ){ + result = result & is_satisfied(bp, assignment); + } + // It's debug mode. Prover from non-satisfied circuit will throw asserts + if( result && generate_proof ){ + result = result & check_proof(bp, assignment, desc); + } + std::cout << std::endl; + return result; + } + + bool check_satisfiability; + bool generate_proof; + bool print_to_file; + std::string output_file; +}; + diff --git a/crypto3/libs/containers/example/CMakeLists.txt b/crypto3/libs/containers/example/CMakeLists.txt index 57efe55cb4..3c9a21834e 100644 --- a/crypto3/libs/containers/example/CMakeLists.txt +++ b/crypto3/libs/containers/example/CMakeLists.txt @@ -37,7 +37,7 @@ macro(define_containers_example example) ${CMAKE_WORKSPACE_NAME}::algebra ${CMAKE_WORKSPACE_NAME}::hash Boost::container) - set_target_properties(${target_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${target_name} PROPERTIES CXX_STANDARD 20) endmacro() set(EXAMPLES_NAMES diff --git a/crypto3/libs/containers/test/CMakeLists.txt b/crypto3/libs/containers/test/CMakeLists.txt index 7cfa9f335b..ec5296ad0f 100644 --- a/crypto3/libs/containers/test/CMakeLists.txt +++ b/crypto3/libs/containers/test/CMakeLists.txt @@ -27,39 +27,44 @@ include(CMTest) cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} - ${CMAKE_WORKSPACE_NAME}::algebra - ${CMAKE_WORKSPACE_NAME}::hash + ${CMAKE_WORKSPACE_NAME}::algebra + ${CMAKE_WORKSPACE_NAME}::hash - Boost::unit_test_framework - Boost::random - ) + Boost::unit_test_framework + Boost::random +) +set_target_properties(_cm_internal_tests-crypto3-containers-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-crypto3-containers-test REUSE_FROM crypto3_precompiled_headers) macro(define_storage_test test) get_filename_component(test_name ${test} NAME) - set(target_name ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}_${test_name}_test) + set(full_test_name ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}_${test_name}_test) - while(TARGET ${target_name}) + while(TARGET ${full_test_name}) get_filename_component(TEST_DIRECTORY ${test} DIRECTORY) get_filename_component(PARENT_DIR ${TEST_DIRECTORY} DIRECTORY) - set(target_name ${PARENT_DIR}_${target_name}) + set(full_test_name ${PARENT_DIR}_${full_test_name}) endwhile() - cm_test(NAME ${target_name} SOURCES ${test}.cpp) + cm_test(NAME ${full_test_name} SOURCES ${test}.cpp) - target_include_directories(${target_name} PRIVATE - "$" - "$" + target_link_libraries(${full_test_name} + ${CMAKE_WORKSPACE_NAME}::containers + ${CMAKE_WORKSPACE_NAME}::algebra + ${CMAKE_WORKSPACE_NAME}::hash - ${Boost_INCLUDE_DIRS}) + Boost::unit_test_framework + Boost::random + ) - set_target_properties(${target_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 20) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(${target_name} PRIVATE "-fconstexpr-steps=2147483647" "-ftemplate-backtrace-limit=0") + target_compile_options(${full_test_name} PRIVATE "-fconstexpr-steps=2147483647" "-ftemplate-backtrace-limit=0") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - target_compile_options(${target_name} PRIVATE "-fconstexpr-ops-limit=4294967295" "-ftemplate-backtrace-limit=0") + target_compile_options(${full_test_name} PRIVATE "-fconstexpr-ops-limit=4294967295" "-ftemplate-backtrace-limit=0") endif() - + target_precompile_headers(${full_test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(TESTS_NAMES diff --git a/crypto3/libs/containers/test/merkle/merkle.cpp b/crypto3/libs/containers/test/merkle/merkle.cpp index 6543160f30..62f64f282a 100644 --- a/crypto3/libs/containers/test/merkle/merkle.cpp +++ b/crypto3/libs/containers/test/merkle/merkle.cpp @@ -32,10 +32,7 @@ #include #include -#include -#include #include -#include #include #include @@ -47,7 +44,6 @@ #include #include -#include #include #include #include @@ -140,10 +136,8 @@ void testing_validate_template_random_data_compressed_proofs(std::size_t leaf_nu } // standard case - auto start = std::chrono::high_resolution_clock::now(); std::vector> compressed_proofs = merkle_proof_type::generate_compressed_proofs(tree, proof_idxs); bool validate_compressed = merkle_proof_type::validate_compressed_proofs(compressed_proofs, data_for_validation); - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); // case for arity == 4 if (leaf_number == 16) { std::vector> compressed_proofs_one_idx = merkle_proof_type::generate_compressed_proofs(tree, {3, 2, 1, 5, 11, 11, 0}); @@ -287,19 +281,17 @@ BOOST_AUTO_TEST_CASE(merkletree_construct_test_2) { BOOST_AUTO_TEST_CASE(merkletree_validate_test_1) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}}; testing_validate_template, 2>(v); - testing_validate_template(v); - testing_validate_template, 2>(v); BOOST_STATIC_ASSERT_MSG(algebra::is_field_element::value, "Expecting Poseidon to consume field elements"); std::vector> v_field = { - {0x0_cppui_modular255}, - {0x1_cppui_modular255}, - {0x2_cppui_modular255}, - {0x3_cppui_modular255}, - {0x4_cppui_modular255}, - {0x5_cppui_modular255}, - {0x6_cppui_modular255}, - {0x7_cppui_modular255} + {0x0_big_uint255}, + {0x1_big_uint255}, + {0x2_big_uint255}, + {0x3_big_uint255}, + {0x4_big_uint255}, + {0x5_big_uint255}, + {0x6_big_uint255}, + {0x7_big_uint255} }; testing_validate_template(v_field); testing_validate_template(v_field); @@ -318,8 +310,6 @@ BOOST_AUTO_TEST_CASE(merkletree_validate_test_1) { std::size_t leaf_number = 8; testing_validate_template_random_data, 2, std::uint8_t, 1>(leaf_number); - testing_validate_template_random_data(leaf_number); - testing_validate_template_random_data, 2, std::uint8_t, 1>(leaf_number); testing_validate_template_random_data(leaf_number); testing_validate_template_random_data(leaf_number); } @@ -327,51 +317,23 @@ BOOST_AUTO_TEST_CASE(merkletree_validate_test_1) { BOOST_AUTO_TEST_CASE(merkletree_validate_test_2) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}, {'8'}}; testing_validate_template, 3>(v); - testing_validate_template(v); - testing_validate_template, 3>(v); std::size_t leaf_number = 9; testing_validate_template_random_data, 3, std::uint8_t, 1>(leaf_number); - testing_validate_template_random_data(leaf_number); - testing_validate_template_random_data, 3, std::uint8_t, 1>(leaf_number); } -BOOST_AUTO_TEST_CASE(merkletree_validate_test_3) { - using hash_type = hashes::pedersen< - hashes::find_group_hash_default_params, hashes::sha2<256>, - algebra::curves::jubjub::template g1_type>; - std::size_t leaf_number = 8; - testing_validate_template_random_data(leaf_number); -} - -BOOST_AUTO_TEST_CASE(merkletree_validate_test_4) { - using hash_type = hashes::pedersen< - hashes::find_group_hash_default_params, hashes::sha2<256>, - algebra::curves::jubjub::template g1_type>; - testing_validate_template_random_data_compressed_proofs(8); - testing_validate_template_random_data_compressed_proofs(9); - testing_validate_template_random_data_compressed_proofs(16); -} BOOST_AUTO_TEST_CASE(merkletree_validate_test_5) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}, {'8'}}; testing_validate_template_compressed_proofs, 3>(v); - testing_validate_template_compressed_proofs(v); - testing_validate_template_compressed_proofs, 3>(v); std::size_t leaf_number = 16; testing_validate_template_random_data_compressed_proofs, 4, std::uint8_t, 1>(leaf_number); - testing_validate_template_random_data_compressed_proofs(leaf_number); - testing_validate_template_random_data_compressed_proofs, 4, std::uint8_t, 1>(leaf_number); } BOOST_AUTO_TEST_CASE(merkletree_hash_test_1) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}}; testing_hash_template, 2>(v, "3b828c4f4b48c5d4cb5562a474ec9e2fd8d5546fae40e90732ef635892e42720"); - testing_hash_template(v, "11ee8b50825ce6f816a1ae06d4aa0045"); - testing_hash_template, 2>(v, "0ed2a2145cae554ca57f08420d6cb58629ca1e89dc92f819c6c1d13d"); testing_hash_template, 2>(v, "568ff5eb286f51b8a3e8de4e53aa8daed44594a246deebbde119ea2eb27acd6b"); testing_hash_template, 2>(v, "1a0ca31dd9e0b27afdf77021dc50023cdd814eb53ede16e8c5c322a0bcb6bd7d26a0404e5af53971e1566c1649bb9686905cdedfa9a358023065e423522d4372"); @@ -392,14 +354,12 @@ BOOST_AUTO_TEST_CASE(merkletree_hash_test_1) { wrappers.emplace_back(inner_containers); } merkle_tree tree = make_merkle_tree(wrappers.begin(), wrappers.end()); - BOOST_CHECK(tree.root() == 0x6E7641F1EAE17C0DA8227840EFEA6E1D17FB5EBA600D9DC34F314D5400E5BF3_cppui_modular255); + BOOST_CHECK(tree.root() == 0x6E7641F1EAE17C0DA8227840EFEA6E1D17FB5EBA600D9DC34F314D5400E5BF3_big_uint255); } BOOST_AUTO_TEST_CASE(merkletree_hash_test_2) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}, {'8'}}; testing_hash_template, 3>(v, "6831d4d32538bedaa7a51970ac10474d5884701c840781f0a434e5b6868d4b73"); - testing_hash_template(v, "0733c4cd580b1523cfbb9751f42e9420"); - testing_hash_template, 3>(v, "d9d0ff26d10aaac2882c08eb2b55e78690c949d1a73b1cfc0eb322ee"); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/hash/CMakeLists.txt b/crypto3/libs/hash/CMakeLists.txt index 99a12351b3..91a37df19a 100644 --- a/crypto3/libs/hash/CMakeLists.txt +++ b/crypto3/libs/hash/CMakeLists.txt @@ -129,14 +129,26 @@ add_library(${CMAKE_WORKSPACE_NAME}::${CURRENT_PROJECT_NAME} ALIAS ${CMAKE_WORKS set_target_properties(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} PROPERTIES EXPORT_NAME ${CURRENT_PROJECT_NAME}) +target_precompile_headers(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} + INTERFACE + "$" + "$" + ) + +if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE "${ARGV2}" "-fconstexpr-steps=2147483647" "-ftemplate-backtrace-limit=0") +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE "${ARGV2}" "-fconstexpr-ops-limit=4294967295" "-ftemplate-backtrace-limit=0") +endif() + target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE ${${CURRENT_PROJECT_NAME}_INTERFACE_LIBRARIES} ${CMAKE_WORKSPACE_NAME}::multiprecision ${CMAKE_WORKSPACE_NAME}::algebra - ${CMAKE_WORKSPACE_NAME}::block - Boost::container) +target_link_libraries(crypto3_precompiled_headers ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}) + target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE "$" "$" diff --git a/crypto3/libs/hash/README.md b/crypto3/libs/hash/README.md index b3ec82de33..0e72062126 100644 --- a/crypto3/libs/hash/README.md +++ b/crypto3/libs/hash/README.md @@ -1,27 +1,4 @@ # Hashes for =nil; Foundation's Cryptography Suite -[![Build Status](https://travis-ci.com/NilFoundation/hash.svg?branch=master)](https://travis-ci.com/NilFoundation/hash) - Hashes for =nil; Foundation's cryptography suite. -## Building - -This library uses Boost CMake build modules (https://github.com/BoostCMake/cmake_modules.git). To actually include this -library in a project it is required to: - -1. Add [CMake Modules](https://github.com/BoostCMake/cmake_modules.git) as submodule to target project repository. -2. Add all the internal dependencies using [CMake Modules](https://github.com/BoostCMake/cmake_modules.git) as - submodules to target project repository. -3. Initialize parent project with [CMake Modules](https://github.com/BoostCMake/cmake_modules.git) (Look - at [crypto3](https://github.com/nilfoundation/crypto3.git) for the example) - -## Dependencies - -### Internal - -* [Algebra](https://github.com/nilfoundation/crypto3-algebra.git) -* [Block Ciphers](https://github.com/nilfoundation/crypto3-block.git) - -### External - -* [Boost](https://boost.org) (>= 1.74) diff --git a/crypto3/libs/block/include/nil/crypto3/detail/basic_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/basic_functions.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/basic_functions.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/basic_functions.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/digest.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/digest.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/digest.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/digest.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/endian_shift.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/endian_shift.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/endian_shift.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/endian_shift.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/exploder.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/exploder.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/exploder.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/exploder.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/imploder.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/imploder.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/imploder.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/imploder.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/inject.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/inject.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/inject.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/inject.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/make_uint_t.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/make_uint_t.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/make_uint_t.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/make_uint_t.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/octet.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/octet.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/octet.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/octet.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/pack.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/pack.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/pack.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/pack.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/predef.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/predef.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/predef.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/predef.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/reverser.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/reverser.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/reverser.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/reverser.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/static_digest.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/static_digest.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/static_digest.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/static_digest.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/stream_endian.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/stream_endian.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/stream_endian.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/stream_endian.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/detail/unbounded_shift.hpp b/crypto3/libs/hash/include/nil/crypto3/detail/unbounded_shift.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/detail/unbounded_shift.hpp rename to crypto3/libs/hash/include/nil/crypto3/detail/unbounded_shift.hpp diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/accumulators/hash.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/accumulators/hash.hpp index 0965575d43..84b2125171 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/accumulators/hash.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/accumulators/hash.hpp @@ -36,9 +36,7 @@ #include #include -#include #include -#include #include #include diff --git a/crypto3/libs/block/include/nil/crypto3/block/basic_shacal.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/basic_shacal.hpp similarity index 98% rename from crypto3/libs/block/include/nil/crypto3/block/basic_shacal.hpp rename to crypto3/libs/hash/include/nil/crypto3/hash/basic_shacal.hpp index 758c84c5c0..b855e67878 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/basic_shacal.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/basic_shacal.hpp @@ -25,8 +25,8 @@ #ifndef CRYPTO3_BLOCK_BASIC_SHACAL_HPP #define CRYPTO3_BLOCK_BASIC_SHACAL_HPP -#include -#include +#include +#include #include diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/blake2b.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/blake2b.hpp deleted file mode 100644 index c07f9e78e2..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/blake2b.hpp +++ /dev/null @@ -1,147 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_BLAKE2B_HPP -#define CRYPTO3_HASH_BLAKE2B_HPP - -#include -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - template - class blake2b_compressor { - protected: - typedef detail::blake2b_functions policy_type; - - typedef typename policy_type::state_type::value_type value_type; - - public: - typedef typename policy_type::iv_generator iv_generator; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t state_bits = policy_type::state_bits; - constexpr static const std::size_t state_words = policy_type::state_words; - typedef typename policy_type::state_type state_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t salt_bits = policy_type::salt_bits; - typedef typename policy_type::salt_type salt_type; - constexpr static const salt_type salt_value = policy_type::salt_value; - - static void process_block(state_type &state, const block_type &block, value_type seen = value_type(), - value_type finalizator = value_type()) { - std::array v; - - std::move(state.begin(), state.end(), v.begin()); - std::move(iv_generator()().begin(), iv_generator()().end(), v.begin() + state_words); - - std::array s = {seen / CHAR_BIT + ((seen % CHAR_BIT) ? 1 : 0), - 0x00}; - - v[12] ^= s[0]; - v[13] ^= s[1]; - - s = {finalizator, 0}; - - v[14] ^= s[0]; - v[15] ^= s[1]; - - s.fill(0); - - policy_type::template round<0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15>(v, block); - policy_type::template round<14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3>(v, block); - policy_type::template round<11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4>(v, block); - policy_type::template round<7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8>(v, block); - policy_type::template round<9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13>(v, block); - policy_type::template round<2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9>(v, block); - policy_type::template round<12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11>(v, block); - policy_type::template round<13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10>(v, block); - policy_type::template round<6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5>(v, block); - policy_type::template round<10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0>(v, block); - policy_type::template round<0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15>(v, block); - policy_type::template round<14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3>(v, block); - - for (size_t i = 0; i < state_words; i++) { - state[i] ^= v[i] ^ v[i + state_words]; - } - } - }; - - /*! - * @brief Blake2b. A recently designed hashes function. Very fast on 64-bit processors. - * Can output a hashes of any length between 1 and 64 bytes, this is specified by passing - * a value to the constructor with the desired length. - * - * @ingroup hashes - * @tparam DigestBits - */ - template - class blake2b { - public: - typedef detail::blake2b_policy policy_type; - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = DigestBits; - typedef typename policy_type::digest_type digest_type; - - struct construction { - struct params_type { - typedef typename policy_type::digest_endian digest_endian; - - constexpr static const std::size_t length_bits = policy_type::length_bits; - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - }; - - typedef haifa_construction, detail::blake2b_padding> - type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash>; - }; - - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/block_to_field_elements_wrapper.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/block_to_field_elements_wrapper.hpp index 053a020dd5..aa10d2a5ed 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/block_to_field_elements_wrapper.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/block_to_field_elements_wrapper.hpp @@ -103,7 +103,7 @@ namespace nil { field_element_ = value_type::zero(); auto tmp_iter = input_container_l_; for (std::size_t i = 0; i < container_elements_per_field_element_ && tmp_iter != input_container_r_; ++i) { - field_element_.data <<= input_value_bits_; // TODO: add shift operators to field values + field_element_.data = field_element_.data.base() << input_value_bits_; field_element_ += uint64_t(*tmp_iter++); } element_filled_ = true; diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/crc.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/crc.hpp deleted file mode 100644 index e85129b037..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/crc.hpp +++ /dev/null @@ -1,139 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// Distributed under the Boost Software License, Version 1.0 -// See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_CRC_HPP -#define CRYPTO3_HASH_CRC_HPP - -#include -#include - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS -#include -#endif - -#include - -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - // Boost.CRC undefs this, so re-define it -#if !(defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || (defined(BOOST_MSVC) && (BOOST_MSVC <= 1300))) -#define BOOST_CRC_PARM_TYPE typename ::boost::uint_t::fast -#else -#define BOOST_CRC_PARM_TYPE unsigned long -#endif - - struct crc_policy { - using basic_policy = ::nil::crypto3::detail::basic_functions<8>; - - constexpr static const std::size_t word_bits = basic_policy::byte_bits; - using word_type = basic_policy::byte_type; - - constexpr static const std::size_t block_bits = 64; - constexpr static const std::size_t block_words = 8; - using block_type = std::array; - - using digest_endian = stream_endian::big_octet_big_bit; - }; - - template - class crc_construction { - public: - typedef boost::crc_optimal - crc_computer; - constexpr static const std::size_t digest_bits = DigestBits; - typedef static_digest digest_type; - - constexpr static const std::size_t word_bits = crc_policy::word_bits; - using word_type = crc_policy::word_type; - - constexpr static const std::size_t block_bits = crc_policy::block_bits; - constexpr static const std::size_t block_words = crc_policy::block_words; - using block_type = crc_policy::block_type; - - using digest_endian = crc_policy::digest_endian; - - public: - crc_construction() { - reset(); - } - - void reset() { - crc_.reset(); - } - - digest_type digest(block_type block, std::size_t total_bits_seen) { - using namespace ::nil::crypto3::detail; - - crc_.process_block(block.begin(), block.begin() + (total_bits_seen % block_bits) / word_bits); - - auto x = crc_.checksum(); - digest_type d; - pack_n(&x, 1, d.begin()); - return d; - } - crc_construction &process_block(const block_type &block) { - crc_.process_block(block.begin(), block.end()); - return *this; - } - - protected: - crc_computer crc_; - }; - - /*! - * @brief CRC. Non-cryptographically secure checksum. - * - * @ingroup hash - * - * @tparam DigestBits - * @tparam TruncPoly - * @tparam InitRem - * @tparam FinalXor - * @tparam ReflectIn - * @tparam ReflectRem - */ - template - class crc { - public: - using policy_type = crc_policy; - - struct construction { - struct params_type { - using digest_endian = typename policy_type::digest_endian; - - constexpr static const std::size_t length_bits = 64; // unused? - constexpr static const std::size_t digest_bits = DigestBits; - }; - typedef crc_construction type; - }; - - constexpr static const std::size_t digest_bits = DigestBits; - typedef typename construction::type::digest_type digest_type; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash>; - }; - - // http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html#CRC-algorithm - typedef crc<32, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true> crc32_png; - - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_CRC_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_functions.hpp deleted file mode 100644 index c0468527d9..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_functions.hpp +++ /dev/null @@ -1,78 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLAKE2B_FUNCTIONS_HPP -#define CRYPTO3_BLAKE2B_FUNCTIONS_HPP - -#include - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct blake2b_functions : public blake2b_policy { - typedef blake2b_policy policy_type; - - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t state_words = policy_type::state_words; - - inline static void g(word_type &a, word_type &b, word_type &c, word_type &d, word_type M0, - word_type M1) { - a = a + b + M0; - d = policy_type::template rotr<32>(d ^ a); - c = c + d; - b = policy_type::template rotr<24>(b ^ c); - a = a + b + M1; - d = policy_type::template rotr<16>(d ^ a); - c = c + d; - b = policy_type::template rotr<63>(b ^ c); - } - - template - inline static void round(std::array &v, - const std::array &M) { - g(v[0], v[4], v[8], v[12], M[i0], M[i1]); - g(v[1], v[5], v[9], v[13], M[i2], M[i3]); - g(v[2], v[6], v[10], v[14], M[i4], M[i5]); - g(v[3], v[7], v[11], v[15], M[i6], M[i7]); - g(v[0], v[5], v[10], v[15], M[i8], M[i9]); - g(v[1], v[6], v[11], v[12], M[iA], M[iB]); - g(v[2], v[7], v[8], v[13], M[iC], M[iD]); - g(v[3], v[4], v[9], v[14], M[iE], M[iF]); - } - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLAKE2B_FUNCTIONS_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_padding.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_padding.hpp deleted file mode 100644 index b5aa655384..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_padding.hpp +++ /dev/null @@ -1,73 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2020 Alexander Sokolov -// Copyright (c) 2020 Nikita Kaskov -// Copyright (c) 2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLAKE2B_PADDING_HPP -#define CRYPTO3_BLAKE2B_PADDING_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - class blake2b_padding { - typedef Hash policy_type; - - typedef typename policy_type::digest_endian endian_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - typedef ::nil::crypto3::detail::injector - injector_type; - - public: - void operator()(block_type &block, word_type total_seen) { - // Pad block with zero bits if it is empty or incomplete - if (!total_seen || total_seen % block_bits) { - word_type seen_words = - ((total_seen / word_bits) % block_words) + ((total_seen % word_bits) ? 1 : 0); - std::fill(block.begin() + seen_words, block.end(), 0); - // Pad with zeros last significant word if it is incomplete - if (total_seen % word_bits) { - word_type block_seen = total_seen % block_bits; - injector_type::inject(word_type(), word_bits - block_seen % word_bits, block, - block_seen); - } - } - } - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLAKE2B_PADDING_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_policy.hpp deleted file mode 100644 index 6986e326d4..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/blake2b/blake2b_policy.hpp +++ /dev/null @@ -1,75 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BLAKE2B_POLICY_HPP -#define CRYPTO3_BLAKE2B_POLICY_HPP - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct blake2b_policy : public ::nil::crypto3::detail::basic_functions<64> { - - constexpr static const std::size_t state_bits = 512; - constexpr static const std::size_t state_words = state_bits / word_bits; - typedef std::array state_type; - - constexpr static const std::size_t block_bits = 1024; - constexpr static const std::size_t block_words = block_bits / word_bits; - typedef std::array block_type; - - constexpr static const std::size_t length_bits = word_bits; - - typedef typename stream_endian::little_octet_big_bit digest_endian; - - constexpr static const std::size_t digest_bits = DigestBits; - typedef static_digest digest_type; - - constexpr static const std::size_t rounds = 12; - - struct iv_generator { - state_type const &operator()() const { - constexpr static const state_type H0 = { - {0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, - 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179}}; - return H0; - } - }; - - constexpr static const std::size_t salt_bits = 64; - typedef typename boost::uint_t::exact salt_type; - constexpr static const salt_type salt_value = 0xFFFFFFFFFFFFFFFF; - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BLAKE2B_POLICY_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/block_stream_processor.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/block_stream_processor.hpp similarity index 97% rename from crypto3/libs/block/include/nil/crypto3/block/detail/block_stream_processor.hpp rename to crypto3/libs/hash/include/nil/crypto3/hash/detail/block_stream_processor.hpp index 7acc19d1c2..2b371dd7e9 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/block_stream_processor.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/block_stream_processor.hpp @@ -33,8 +33,8 @@ #include #include -#include -#include +#include +#include #include #include @@ -171,4 +171,4 @@ namespace nil { } // namespace crypto3 } // namespace nil -#endif // CRYPTO3_BLOCK_BLOCK_STATE_PREPROCESSOR_HPP \ No newline at end of file +#endif // CRYPTO3_BLOCK_BLOCK_STATE_PREPROCESSOR_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep.hpp index 225a449589..eeb1e23a4c 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep.hpp @@ -33,12 +33,9 @@ #include #include -#include - namespace nil { namespace crypto3 { namespace hashes { - using namespace boost::multiprecision; template struct ep_map { @@ -47,10 +44,6 @@ namespace nil { typedef typename suite_type::group_value_type group_value_type; typedef typename suite_type::field_value_type field_value_type; typedef typename suite_type::modular_type modular_type; - typedef typename modular_type::backend_type modular_adaptor_type; - typedef typename suite_type::modular_backend modular_backend; - - typedef boost::multiprecision::backends::modular_params modular_params_type; typedef typename suite_type::hash_type hash_type; @@ -60,9 +53,7 @@ namespace nil { // Sometimes hash is 512 bits, while the group element is 256 or 381 bits. // In these cases we take the number module the modulus of the group. - typedef typename boost::multiprecision::cpp_int_modular_backend modular_backend_of_hash_size; - - constexpr static const modular_params_type p_modulus_params = suite_type::p.backend(); + typedef nil::crypto3::multiprecision::big_uint big_uint_of_hash_size; typedef expand_message_xmd expand_message_ro; // typedef expand_message_xof expand_message_nu; @@ -100,7 +91,7 @@ namespace nil { std::array uniform_bytes {0}; expand_message_type::process(N * m * L, msg, dst, uniform_bytes); - number e; + big_uint_of_hash_size e; std::array coordinates; std::array result; for (std::size_t i = 0; i < N; i++) { @@ -111,10 +102,10 @@ namespace nil { // Sometimes hash is 512 bits, while the group element is 256 or 381 bits. // In these cases we take the number module the modulus of the group. - e %= p_modulus_params.get_mod(); + // TODO(ioxid): this is not needed + e %= suite_type::p; - coordinates[j] = modular_type(modular_adaptor_type( - modular_backend(e.backend()), p_modulus_params)); + coordinates[j] = modular_type(e); } result[i] = field_value_type(coordinates[0]); } diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep2.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep2.hpp index 871ece3801..a529365858 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep2.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/ep2.hpp @@ -32,13 +32,9 @@ #include -#include - namespace nil { namespace crypto3 { namespace hashes { - using namespace boost::multiprecision; - template struct ep2_map { typedef h2c_suite suite_type; @@ -46,10 +42,6 @@ namespace nil { typedef typename suite_type::group_value_type group_value_type; typedef typename suite_type::field_value_type field_value_type; typedef typename suite_type::modular_type modular_type; - typedef typename modular_type::backend_type modular_adaptor_type; - typedef typename suite_type::modular_backend modular_backend; - - typedef boost::multiprecision::backends::modular_params modular_params_type; typedef typename suite_type::hash_type hash_type; @@ -59,11 +51,10 @@ namespace nil { // Sometimes hash is 512 bits, while the group element is 256 or 381 bits. // In these cases we take the number module the modulus of the group. - typedef typename boost::multiprecision::cpp_int_modular_backend modular_backend_of_hash_size; + typedef nil::crypto3::multiprecision::big_uint big_uint_of_hash_size; typedef expand_message_xmd expand_message_ro; // typedef expand_message_xof expand_message_nu; - constexpr static const modular_params_type p_modulus_params = suite_type::p.backend(); static_assert(m == 2, "underlying field has wrong extension"); @@ -89,7 +80,7 @@ namespace nil { std::array uniform_bytes {0}; expand_message_type::process(N * m * L, msg, dst, uniform_bytes); - number e; + big_uint_of_hash_size e; std::array coordinates; std::array result; for (std::size_t i = 0; i < N; i++) { @@ -99,9 +90,10 @@ namespace nil { uniform_bytes.begin() + elm_offset + L); // Sometimes hash is 512 bits, while the group element is 256 or 381 bits. // In these cases we take the number module the modulus of the group. - e %= p_modulus_params.get_mod(); - coordinates[j] = modular_type(modular_adaptor_type( - modular_backend(e.backend()), p_modulus_params)); + // TODO(ioxid): this is not needed + e %= suite_type::p; + + coordinates[j] = modular_type(e); } result[i] = field_value_type(coordinates[0], coordinates[1]); } diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_functions.hpp index 9a1af2f161..9234d0b84c 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_functions.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_functions.hpp @@ -45,24 +45,15 @@ namespace nil { namespace detail { template inline bool sgn0(const algebra::fields::detail::element_fp &e) { - using modular_type = typename FieldParams::modular_type; - - static const modular_type two = modular_type(typename modular_type::backend_type(2u)); - - return static_cast(e.data % two); + return e.data.base().bit_test(0); } template inline bool sgn0(const algebra::fields::detail::element_fp2 &e) { - using underlying_type = typename algebra::fields::detail::element_fp2::underlying_type; - using modular_type = typename FieldParams::modular_type; - - static const modular_type two = modular_type(typename modular_type::backend_type(2u)); - - modular_type sign_0 = e.data[0].data % two; + bool sign_0 = e.data[0].data.base().bit_test(0); bool zero_0 = e.data[0].data.is_zero(); - modular_type sign_1 = e.data[1].data % two; - return static_cast(sign_0) || (zero_0 && static_cast(sign_1)); + bool sign_1 = e.data[1].data.base().bit_test(0); + return sign_0 || (zero_0 && sign_1); } template @@ -81,65 +72,65 @@ namespace nil { // TODO: change integral_type on field_value_type when constexpr will be finished constexpr static std::array k_x_num = { - 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7_cppui_modular381, - 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb_cppui_modular381, - 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0_cppui_modular381, - 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861_cppui_modular381, - 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9_cppui_modular381, - 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983_cppui_modular381, - 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84_cppui_modular381, - 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e_cppui_modular381, - 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317_cppui_modular381, - 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e_cppui_modular381, - 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b_cppui_modular381, - 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229_cppui_modular381}; + 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7_big_uint381, + 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb_big_uint381, + 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0_big_uint381, + 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861_big_uint381, + 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9_big_uint381, + 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983_big_uint381, + 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84_big_uint381, + 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e_big_uint381, + 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317_big_uint381, + 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e_big_uint381, + 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b_big_uint381, + 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229_big_uint381}; constexpr static std::array k_x_den = { - 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c_cppui_modular381, - 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff_cppui_modular381, - 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19_cppui_modular381, - 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8_cppui_modular381, - 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e_cppui_modular381, - 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5_cppui_modular381, - 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a_cppui_modular381, - 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e_cppui_modular381, - 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641_cppui_modular381, - 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a_cppui_modular381}; + 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c_big_uint381, + 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff_big_uint381, + 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19_big_uint381, + 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8_big_uint381, + 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e_big_uint381, + 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5_big_uint381, + 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a_big_uint381, + 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e_big_uint381, + 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641_big_uint381, + 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a_big_uint381}; constexpr static std::array k_y_num = { - 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33_cppui_modular381, - 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696_cppui_modular381, - 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6_cppui_modular381, - 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb_cppui_modular381, - 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb_cppui_modular381, - 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0_cppui_modular381, - 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2_cppui_modular381, - 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29_cppui_modular381, - 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587_cppui_modular381, - 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30_cppui_modular381, - 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132_cppui_modular381, - 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e_cppui_modular381, - 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8_cppui_modular381, - 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133_cppui_modular381, - 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b_cppui_modular381, - 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604_cppui_modular381}; + 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33_big_uint381, + 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696_big_uint381, + 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6_big_uint381, + 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb_big_uint381, + 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb_big_uint381, + 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0_big_uint381, + 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2_big_uint381, + 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29_big_uint381, + 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587_big_uint381, + 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30_big_uint381, + 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132_big_uint381, + 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e_big_uint381, + 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8_big_uint381, + 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133_big_uint381, + 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b_big_uint381, + 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604_big_uint381}; constexpr static std::array k_y_den = { - 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1_cppui_modular381, - 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d_cppui_modular381, - 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2_cppui_modular381, - 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416_cppui_modular381, - 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d_cppui_modular381, - 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac_cppui_modular381, - 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c_cppui_modular381, - 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9_cppui_modular381, - 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a_cppui_modular381, - 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55_cppui_modular381, - 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8_cppui_modular381, - 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092_cppui_modular381, - 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc_cppui_modular381, - 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7_cppui_modular381, - 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f_cppui_modular381}; + 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1_big_uint381, + 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d_big_uint381, + 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2_big_uint381, + 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416_big_uint381, + 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d_big_uint381, + 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac_big_uint381, + 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c_big_uint381, + 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9_big_uint381, + 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a_big_uint381, + 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55_big_uint381, + 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8_big_uint381, + 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092_big_uint381, + 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc_big_uint381, + 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7_big_uint381, + 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f_big_uint381}; public: static inline group_value_type process(const group_value_type &ci) { @@ -195,38 +186,38 @@ namespace nil { // TODO: change integral_type on field_value_type when constexpr will be finished constexpr static std::array, 4> k_x_num = { - {{{0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_cppui_modular381, - 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_cppui_modular381}}, + {{{0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_big_uint381, + 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_big_uint381}}, {{0, - 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a_cppui_modular381}}, - {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e_cppui_modular381, - 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d_cppui_modular381}}, - {{0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1_cppui_modular381, + 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a_big_uint381}}, + {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e_big_uint381, + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d_big_uint381}}, + {{0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1_big_uint381, 0}}}}; constexpr static std::array, 2> k_x_den = { {{{0, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63_cppui_modular381}}, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63_big_uint381}}, {{0xc, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f_cppui_modular381}}}}; + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f_big_uint381}}}}; constexpr static std::array, 4> k_y_num = { - {{{0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_cppui_modular381, - 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_cppui_modular381}}, + {{{0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_big_uint381, + 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_big_uint381}}, {{0, - 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be_cppui_modular381}}, - {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c_cppui_modular381, - 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f_cppui_modular381}}, - {{0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10_cppui_modular381, + 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be_big_uint381}}, + {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c_big_uint381, + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f_big_uint381}}, + {{0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10_big_uint381, 0}}}}; constexpr static std::array, 3> k_y_den = { - {{{0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_cppui_modular381, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_cppui_modular381}}, + {{{0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_big_uint381, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_big_uint381}}, {{0, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3_cppui_modular381}}, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3_big_uint381}}, {{0x12, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99_cppui_modular381}}}}; + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99_big_uint381}}}}; public: static inline group_value_type process(const group_value_type &ci) { diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_iso_map.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_iso_map.hpp index edbfd4d6ba..cb21ed6113 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_iso_map.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_iso_map.hpp @@ -52,65 +52,65 @@ namespace nil { // TODO: change integral_type on field_value_type when constexpr will be finished constexpr static std::array k_x_num = { - 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7_cppui_modular381, - 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb_cppui_modular381, - 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0_cppui_modular381, - 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861_cppui_modular381, - 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9_cppui_modular381, - 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983_cppui_modular381, - 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84_cppui_modular381, - 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e_cppui_modular381, - 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317_cppui_modular381, - 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e_cppui_modular381, - 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b_cppui_modular381, - 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229_cppui_modular381}; + 0x11a05f2b1e833340b809101dd99815856b303e88a2d7005ff2627b56cdb4e2c85610c2d5f2e62d6eaeac1662734649b7_big_uint381, + 0x17294ed3e943ab2f0588bab22147a81c7c17e75b2f6a8417f565e33c70d1e86b4838f2a6f318c356e834eef1b3cb83bb_big_uint381, + 0xd54005db97678ec1d1048c5d10a9a1bce032473295983e56878e501ec68e25c958c3e3d2a09729fe0179f9dac9edcb0_big_uint381, + 0x1778e7166fcc6db74e0609d307e55412d7f5e4656a8dbf25f1b33289f1b330835336e25ce3107193c5b388641d9b6861_big_uint381, + 0xe99726a3199f4436642b4b3e4118e5499db995a1257fb3f086eeb65982fac18985a286f301e77c451154ce9ac8895d9_big_uint381, + 0x1630c3250d7313ff01d1201bf7a74ab5db3cb17dd952799b9ed3ab9097e68f90a0870d2dcae73d19cd13c1c66f652983_big_uint381, + 0xd6ed6553fe44d296a3726c38ae652bfb11586264f0f8ce19008e218f9c86b2a8da25128c1052ecaddd7f225a139ed84_big_uint381, + 0x17b81e7701abdbe2e8743884d1117e53356de5ab275b4db1a682c62ef0f2753339b7c8f8c8f475af9ccb5618e3f0c88e_big_uint381, + 0x80d3cf1f9a78fc47b90b33563be990dc43b756ce79f5574a2c596c928c5d1de4fa295f296b74e956d71986a8497e317_big_uint381, + 0x169b1f8e1bcfa7c42e0c37515d138f22dd2ecb803a0c5c99676314baf4bb1b7fa3190b2edc0327797f241067be390c9e_big_uint381, + 0x10321da079ce07e272d8ec09d2565b0dfa7dccdde6787f96d50af36003b14866f69b771f8c285decca67df3f1605fb7b_big_uint381, + 0x6e08c248e260e70bd1e962381edee3d31d79d7e22c837bc23c0bf1bc24c6b68c24b1b80b64d391fa9c8ba2e8ba2d229_big_uint381}; constexpr static std::array k_x_den = { - 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c_cppui_modular381, - 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff_cppui_modular381, - 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19_cppui_modular381, - 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8_cppui_modular381, - 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e_cppui_modular381, - 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5_cppui_modular381, - 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a_cppui_modular381, - 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e_cppui_modular381, - 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641_cppui_modular381, - 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a_cppui_modular381}; + 0x8ca8d548cff19ae18b2e62f4bd3fa6f01d5ef4ba35b48ba9c9588617fc8ac62b558d681be343df8993cf9fa40d21b1c_big_uint381, + 0x12561a5deb559c4348b4711298e536367041e8ca0cf0800c0126c2588c48bf5713daa8846cb026e9e5c8276ec82b3bff_big_uint381, + 0xb2962fe57a3225e8137e629bff2991f6f89416f5a718cd1fca64e00b11aceacd6a3d0967c94fedcfcc239ba5cb83e19_big_uint381, + 0x3425581a58ae2fec83aafef7c40eb545b08243f16b1655154cca8abc28d6fd04976d5243eecf5c4130de8938dc62cd8_big_uint381, + 0x13a8e162022914a80a6f1d5f43e7a07dffdfc759a12062bb8d6b44e833b306da9bd29ba81f35781d539d395b3532a21e_big_uint381, + 0xe7355f8e4e667b955390f7f0506c6e9395735e9ce9cad4d0a43bcef24b8982f7400d24bc4228f11c02df9a29f6304a5_big_uint381, + 0x772caacf16936190f3e0c63e0596721570f5799af53a1894e2e073062aede9cea73b3538f0de06cec2574496ee84a3a_big_uint381, + 0x14a7ac2a9d64a8b230b3f5b074cf01996e7f63c21bca68a81996e1cdf9822c580fa5b9489d11e2d311f7d99bbdcc5a5e_big_uint381, + 0xa10ecf6ada54f825e920b3dafc7a3cce07f8d1d7161366b74100da67f39883503826692abba43704776ec3a79a1d641_big_uint381, + 0x95fc13ab9e92ad4476d6e3eb3a56680f682b4ee96f7d03776df533978f31c1593174e4b4b7865002d6384d168ecdd0a_big_uint381}; constexpr static std::array k_y_num = { - 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33_cppui_modular381, - 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696_cppui_modular381, - 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6_cppui_modular381, - 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb_cppui_modular381, - 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb_cppui_modular381, - 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0_cppui_modular381, - 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2_cppui_modular381, - 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29_cppui_modular381, - 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587_cppui_modular381, - 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30_cppui_modular381, - 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132_cppui_modular381, - 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e_cppui_modular381, - 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8_cppui_modular381, - 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133_cppui_modular381, - 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b_cppui_modular381, - 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604_cppui_modular381}; + 0x90d97c81ba24ee0259d1f094980dcfa11ad138e48a869522b52af6c956543d3cd0c7aee9b3ba3c2be9845719707bb33_big_uint381, + 0x134996a104ee5811d51036d776fb46831223e96c254f383d0f906343eb67ad34d6c56711962fa8bfe097e75a2e41c696_big_uint381, + 0xcc786baa966e66f4a384c86a3b49942552e2d658a31ce2c344be4b91400da7d26d521628b00523b8dfe240c72de1f6_big_uint381, + 0x1f86376e8981c217898751ad8746757d42aa7b90eeb791c09e4a3ec03251cf9de405aba9ec61deca6355c77b0e5f4cb_big_uint381, + 0x8cc03fdefe0ff135caf4fe2a21529c4195536fbe3ce50b879833fd221351adc2ee7f8dc099040a841b6daecf2e8fedb_big_uint381, + 0x16603fca40634b6a2211e11db8f0a6a074a7d0d4afadb7bd76505c3d3ad5544e203f6326c95a807299b23ab13633a5f0_big_uint381, + 0x4ab0b9bcfac1bbcb2c977d027796b3ce75bb8ca2be184cb5231413c4d634f3747a87ac2460f415ec961f8855fe9d6f2_big_uint381, + 0x987c8d5333ab86fde9926bd2ca6c674170a05bfe3bdd81ffd038da6c26c842642f64550fedfe935a15e4ca31870fb29_big_uint381, + 0x9fc4018bd96684be88c9e221e4da1bb8f3abd16679dc26c1e8b6e6a1f20cabe69d65201c78607a360370e577bdba587_big_uint381, + 0xe1bba7a1186bdb5223abde7ada14a23c42a0ca7915af6fe06985e7ed1e4d43b9b3f7055dd4eba6f2bafaaebca731c30_big_uint381, + 0x19713e47937cd1be0dfd0b8f1d43fb93cd2fcbcb6caf493fd1183e416389e61031bf3a5cce3fbafce813711ad011c132_big_uint381, + 0x18b46a908f36f6deb918c143fed2edcc523559b8aaf0c2462e6bfe7f911f643249d9cdf41b44d606ce07c8a4d0074d8e_big_uint381, + 0xb182cac101b9399d155096004f53f447aa7b12a3426b08ec02710e807b4633f06c851c1919211f20d4c04f00b971ef8_big_uint381, + 0x245a394ad1eca9b72fc00ae7be315dc757b3b080d4c158013e6632d3c40659cc6cf90ad1c232a6442d9d3f5db980133_big_uint381, + 0x5c129645e44cf1102a159f748c4a3fc5e673d81d7e86568d9ab0f5d396a7ce46ba1049b6579afb7866b1e715475224b_big_uint381, + 0x15e6be4e990f03ce4ea50b3b42df2eb5cb181d8f84965a3957add4fa95af01b2b665027efec01c7704b456be69c8b604_big_uint381}; constexpr static std::array k_y_den = { - 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1_cppui_modular381, - 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d_cppui_modular381, - 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2_cppui_modular381, - 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416_cppui_modular381, - 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d_cppui_modular381, - 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac_cppui_modular381, - 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c_cppui_modular381, - 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9_cppui_modular381, - 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a_cppui_modular381, - 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55_cppui_modular381, - 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8_cppui_modular381, - 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092_cppui_modular381, - 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc_cppui_modular381, - 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7_cppui_modular381, - 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f_cppui_modular381}; + 0x16112c4c3a9c98b252181140fad0eae9601a6de578980be6eec3232b5be72e7a07f3688ef60c206d01479253b03663c1_big_uint381, + 0x1962d75c2381201e1a0cbd6c43c348b885c84ff731c4d59ca4a10356f453e01f78a4260763529e3532f6102c2e49a03d_big_uint381, + 0x58df3306640da276faaae7d6e8eb15778c4855551ae7f310c35a5dd279cd2eca6757cd636f96f891e2538b53dbf67f2_big_uint381, + 0x16b7d288798e5395f20d23bf89edb4d1d115c5dbddbcd30e123da489e726af41727364f2c28297ada8d26d98445f5416_big_uint381, + 0xbe0e079545f43e4b00cc912f8228ddcc6d19c9f0f69bbb0542eda0fc9dec916a20b15dc0fd2ededda39142311a5001d_big_uint381, + 0x8d9e5297186db2d9fb266eaac783182b70152c65550d881c5ecd87b6f0f5a6449f38db9dfa9cce202c6477faaf9b7ac_big_uint381, + 0x166007c08a99db2fc3ba8734ace9824b5eecfdfa8d0cf8ef5dd365bc400a0051d5fa9c01a58b1fb93d1a1399126a775c_big_uint381, + 0x16a3ef08be3ea7ea03bcddfabba6ff6ee5a4375efa1f4fd7feb34fd206357132b920f5b00801dee460ee415a15812ed9_big_uint381, + 0x1866c8ed336c61231a1be54fd1d74cc4f9fb0ce4c6af5920abc5750c4bf39b4852cfe2f7bb9248836b233d9d55535d4a_big_uint381, + 0x167a55cda70a6e1cea820597d94a84903216f763e13d87bb5308592e7ea7d4fbc7385ea3d529b35e346ef48bb8913f55_big_uint381, + 0x4d2f259eea405bd48f010a01ad2911d9c6dd039bb61a6290e591b36e636a5c871a5c29f4f83060400f8b49cba8f6aa8_big_uint381, + 0xaccbb67481d033ff5852c1e48c50c477f94ff8aefce42d28c0f9a88cea7913516f968986f7ebbea9684b529e2561092_big_uint381, + 0xad6b9514c767fe3c3613144b45f1496543346d98adf02267d5ceef9a00d9b8693000763e3b90ac11e99b138573345cc_big_uint381, + 0x2660400eb2e4f3b628bdd0d53cd76f2bf565b94e72927c1cb748df27942480e420517bd8714cc80d1fadc1326ed06f7_big_uint381, + 0xe0fa1d816ddc03e6b24255e0d7819c171c40f65e273b853324efcd6356caa205ca2f570f13497804415473a1d634b8f_big_uint381}; public: static inline group_value_type process(const group_value_type &ci) { @@ -165,38 +165,38 @@ namespace nil { // TODO: change integral_type on field_value_type when constexpr will be finished constexpr static std::array, 4> k_x_num = { - {{{0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_cppui_modular381, - 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_cppui_modular381}}, + {{{0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_big_uint381, + 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97d6_big_uint381}}, {{0, - 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a_cppui_modular381}}, - {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e_cppui_modular381, - 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d_cppui_modular381}}, - {{0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1_cppui_modular381, + 0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71a_big_uint381}}, + {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71e_big_uint381, + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38d_big_uint381}}, + {{0x171d6541fa38ccfaed6dea691f5fb614cb14b4e7f4e810aa22d6108f142b85757098e38d0f671c7188e2aaaaaaaa5ed1_big_uint381, 0}}}}; constexpr static std::array, 2> k_x_den = { {{{0, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63_cppui_modular381}}, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa63_big_uint381}}, {{0xc, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f_cppui_modular381}}}}; + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa9f_big_uint381}}}}; constexpr static std::array, 4> k_y_num = { - {{{0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_cppui_modular381, - 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_cppui_modular381}}, + {{{0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_big_uint381, + 0x1530477c7ab4113b59a4c18b076d11930f7da5d4a07f649bf54439d87d27e500fc8c25ebf8c92f6812cfc71c71c6d706_big_uint381}}, {{0, - 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be_cppui_modular381}}, - {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c_cppui_modular381, - 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f_cppui_modular381}}, - {{0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10_cppui_modular381, + 0x5c759507e8e333ebb5b7a9a47d7ed8532c52d39fd3a042a88b58423c50ae15d5c2638e343d9c71c6238aaaaaaaa97be_big_uint381}}, + {{0x11560bf17baa99bc32126fced787c88f984f87adf7ae0c7f9a208c6b4f20a4181472aaa9cb8d555526a9ffffffffc71c_big_uint381, + 0x8ab05f8bdd54cde190937e76bc3e447cc27c3d6fbd7063fcd104635a790520c0a395554e5c6aaaa9354ffffffffe38f_big_uint381}}, + {{0x124c9ad43b6cf79bfbf7043de3811ad0761b0f37a1e26286b0e977c69aa274524e79097a56dc4bd9e1b371c71c718b10_big_uint381, 0}}}}; constexpr static std::array, 3> k_y_den = { - {{{0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_cppui_modular381, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_cppui_modular381}}, + {{{0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_big_uint381, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa8fb_big_uint381}}, {{0, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3_cppui_modular381}}, + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffa9d3_big_uint381}}, {{0x12, - 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99_cppui_modular381}}}}; + 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaa99_big_uint381}}}}; public: static inline group_value_type process(const group_value_type &ci) { diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_sgn0.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_sgn0.hpp index 6fd7130374..1c74b373d9 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_sgn0.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_sgn0.hpp @@ -36,24 +36,15 @@ namespace nil { template inline bool sgn0(const element_fp &e) { - using modular_type = typename FieldParams::modular_type; - - static const modular_type two = typename modular_type::backend_type(2u); - - return static_cast(e.data % two); + return e.data.base().bit_test(0); } template inline bool sgn0(const element_fp2 &e) { - using underlying_type = typename element_fp2::underlying_type; - using modular_type = typename FieldParams::modular_type; - - static const modular_type two = typename modular_type::backend_type(2u); - - modular_type sign_0 = e.data[0].data % two; + bool sign_0 = e.data[0].data.base().bit_test(0); bool zero_0 = e.data[0].data.is_zero(); - modular_type sign_1 = e.data[1].data % two; - return static_cast(sign_0) || (zero_0 && static_cast(sign_1)); + bool sign_1 = e.data[1].data.base().bit_test(0); + return sign_0 || (zero_0 && sign_1); } } // namespace hashes } // namespace crypto3 diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_suites.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_suites.hpp index 06b11136c6..ffba9cc819 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_suites.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/h2c/h2c_suites.hpp @@ -52,7 +52,6 @@ namespace nil { typedef typename group_type::value_type group_value_type; typedef typename group_type::field_type::integral_type integral_type; typedef typename group_type::field_type::modular_type modular_type; - typedef typename group_type::field_type::modular_backend modular_backend; typedef typename group_type::field_type field_type; typedef typename group_type::field_type::value_type field_value_type; @@ -66,11 +65,11 @@ namespace nil { constexpr static std::size_t L = 64; constexpr static inline const field_value_type Ai = field_value_type( - 0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d_cppui_modular381); + 0x144698a3b8e9433d693a02c96d4982b0ea985383ee66a8d8e8981aefd881ac98936f8da0e0f97f5cf428082d584c1d_big_uint381); constexpr static inline const field_value_type Bi = field_value_type( - 0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0_cppui_modular381); + 0x12e2908d11688030018b12e8753eee3b2016c1f0f24f4070a0b9c14fcef35ef55a23215a316ceaa5d1cc48e98e172be0_big_uint381); constexpr static inline const field_value_type Z = field_value_type(11u); - constexpr static integral_type h_eff = 0xd201000000010001_cppui_modular381; + constexpr static integral_type h_eff = 0xd201000000010001_big_uint381; }; template<> @@ -82,7 +81,6 @@ namespace nil { typedef typename group_type::value_type group_value_type; typedef typename group_type::field_type::integral_type integral_type; typedef typename group_type::field_type::modular_type modular_type; - typedef typename group_type::field_type::modular_backend modular_backend; typedef typename group_type::field_type field_type; typedef typename group_type::field_type::value_type field_value_type; @@ -105,7 +103,7 @@ namespace nil { constexpr static inline field_value_type Z = -field_value_type(2u, 1u); #endif constexpr static inline auto h_eff = - 0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551_cppui_modular636; + 0xbc69f08f2ee75b3584c6a0ea91b352888e2a8e9145ad7689986ff031508ffe1329c2f178731db956d82bf015d1212b02ec0ec69d7477c1ae954cbc06689f6a359894c0adebbf6b4e8020005aaa95551_big_uint636; }; } // namespace hashes } // namespace crypto3 diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/haifa_construction.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/haifa_construction.hpp deleted file mode 100644 index 66380c07d9..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/haifa_construction.hpp +++ /dev/null @@ -1,158 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_HAIFA_CONSTRUCTION_HPP -#define CRYPTO3_HASH_HAIFA_CONSTRUCTION_HPP - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - /*! - * @brief - * @tparam DigestEndian - * @tparam DigestBits - * @tparam IV - * @tparam Compressor - * @tparam Finalizer - * - * The HAIFA construction builds a block hashes from a - * one-way compressor. As this version operated on the block - * level, it doesn't contain any padding or other strengthening. - * For a Wide Pipe construction, use a digest that will - * truncate the internal state. - * - * @note https://eprint.iacr.org/2007/278.pdf - */ - template - class haifa_construction { - public: - typedef Compressor compressor_functor; - typedef Padding padding_functor; - typedef Finalizer finalizer_functor; - - typedef typename Params::digest_endian endian_type; - - constexpr static const std::size_t salt_bits = compressor_functor::salt_bits; - typedef typename compressor_functor::salt_type salt_type; - constexpr static const salt_type salt_value = compressor_functor::salt_value; - - typedef typename compressor_functor::iv_generator iv_generator; - - constexpr static const std::size_t word_bits = compressor_functor::word_bits; - typedef typename compressor_functor::word_type word_type; - - constexpr static const std::size_t state_bits = compressor_functor::state_bits; - constexpr static const std::size_t state_words = compressor_functor::state_words; - typedef typename compressor_functor::state_type state_type; - - constexpr static const std::size_t block_bits = compressor_functor::block_bits; - constexpr static const std::size_t block_words = compressor_functor::block_words; - typedef typename compressor_functor::block_type block_type; - - constexpr static const std::size_t digest_bits = Params::digest_bits; - constexpr static const std::size_t digest_bytes = digest_bits / octet_bits; - constexpr static const std::size_t digest_words = - digest_bits / word_bits + ((digest_bits % word_bits) ? 1 : 0); - typedef static_digest digest_type; - - protected: - constexpr static const std::size_t length_bits = Params::length_bits; - // FIXME: do something more intelligent than capping at 64 - constexpr static const std::size_t length_type_bits = length_bits < word_bits ? word_bits : - length_bits > 64 ? 64 : - length_bits; - typedef typename boost::uint_t::least length_type; - constexpr static const std::size_t length_words = length_bits / word_bits; - BOOST_STATIC_ASSERT(!length_bits || length_bits % word_bits == 0); - - public: - template - inline haifa_construction &process_block(const block_type &block, Integer seen = Integer(), - Integer finalization = 0) { - compressor_functor::process_block(state_, block, seen, finalization); - return *this; - } - - inline digest_type digest(const block_type &block = block_type(), - std::size_t total_seen = length_type()) { - using namespace nil::crypto3::detail; - - block_type b = block; - // Process block if it is full - if (total_seen && !(total_seen % block_bits)) - process_block(b, total_seen); - - // Pad last message block - padding_functor padding; - padding(b, total_seen); - - // Process last block - process_block(b, total_seen, salt_value); - - // Apply finalizer - finalizer_functor()(state_); - - // Convert digest to byte representation - std::array d_full; - pack_from(state_.begin(), state_.end(), d_full.begin()); - digest_type d; - std::copy(d_full.begin(), d_full.begin() + digest_bytes, d.begin()); - - return d; - } - - haifa_construction() { - reset(); - } - - void reset(const state_type &s) { - state_ = s; - state_[0] ^= 0x01010000U ^ (digest_bits / CHAR_BIT); - } - - void reset() { - iv_generator iv; - reset(iv()); - } - - state_type const &state() const { - return state_; - } - - private: - state_type state_; - }; - - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_HAIFA_CONSTRUCTION_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/matyas_meyer_oseas_compressor.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/matyas_meyer_oseas_compressor.hpp deleted file mode 100644 index 1969550f90..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/matyas_meyer_oseas_compressor.hpp +++ /dev/null @@ -1,76 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MATYAS_MEYER_OSEAS_COMPRESSOR_HPP -#define CRYPTO3_MATYAS_MEYER_OSEAS_COMPRESSOR_HPP - -namespace nil { - namespace crypto3 { - namespace hash { - /*! - * - * @tparam BlockCipher - * @tparam CombineFunction - * - * The Matyas-Meyer-Oseas construction turns a block cipher - * into a one-way compression function - * - * https://en.wikipedia.org/wiki/One-way_compression_function#Matyas–Meyer–Oseas - */ - template - struct matyas_meyer_oseas_compressor { - typedef BlockCipher block_cipher_type; - - constexpr static const std::size_t word_bits = block_cipher_type::word_bits; - typedef typename block_cipher_type::word_type word_type; - - constexpr static const std::size_t key_bits = block_cipher_type::key_bits; - typedef typename block_cipher_type::key_type key_type; - - constexpr static const std::size_t state_bits = block_cipher_type::block_bits; - constexpr static const std::size_t state_words = block_cipher_type::block_words; - typedef typename block_cipher_type::block_type state_type; - - constexpr static const std::size_t block_bits = block_cipher_type::key_bits; - constexpr static const std::size_t block_words = block_cipher_type::key_words; - typedef typename block_cipher_type::block_type block_type; - - static inline void process_block(state_type &state, const block_type &block) { - KeyConverterFunctor k; - key_type key = {0}; - k(key, state); - - block_cipher_type cipher(key); - state_type new_state = cipher.encrypt(block); - - CombineFunction f; - f(new_state, block); - state = new_state; - } - }; - } // namespace hash - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_MATYAS_MEYER_OSEAS_COMPRESSOR_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/md4/md4_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/md4/md4_policy.hpp deleted file mode 100644 index 7ff4ee7d44..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/md4/md4_policy.hpp +++ /dev/null @@ -1,71 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_DETAIL_MD4_POLICY_HPP -#define CRYPTO3_HASH_DETAIL_MD4_POLICY_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - struct md4_policy { - typedef block::md4 block_cipher_type; - - constexpr static const std::size_t word_bits = block_cipher_type::word_bits; - typedef typename block_cipher_type::word_type word_type; - - constexpr static const std::size_t state_bits = block_cipher_type::block_bits; - constexpr static const std::size_t state_words = block_cipher_type::block_words; - typedef typename block_cipher_type::block_type state_type; - - constexpr static const std::size_t block_bits = block_cipher_type::key_bits; - constexpr static const std::size_t block_words = block_cipher_type::key_words; - typedef typename block_cipher_type::key_type block_type; - - constexpr static const std::size_t length_bits = word_bits * 2; - - typedef typename stream_endian::little_octet_big_bit digest_endian; - - constexpr static const std::size_t digest_bits = state_bits; - typedef static_digest digest_type; - - struct iv_generator { - state_type const &operator()() const { - static state_type const H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476}}; - return H0; - } - }; - }; - - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_MD4_POLICY_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/md5/md5_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/md5/md5_policy.hpp deleted file mode 100644 index 687edb0d8f..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/md5/md5_policy.hpp +++ /dev/null @@ -1,81 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_DETAIL_MD5_POLICY_HPP -#define CRYPTO3_HASH_DETAIL_MD5_POLICY_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - - struct md5_policy { - typedef block::md5 block_cipher_type; - - constexpr static const std::size_t word_bits = block_cipher_type::word_bits; - typedef typename block_cipher_type::word_type word_type; - - constexpr static const std::size_t state_bits = block_cipher_type::block_bits; - constexpr static const std::size_t state_words = block_cipher_type::block_words; - typedef typename block_cipher_type::block_type state_type; - - constexpr static const std::size_t block_bits = block_cipher_type::key_bits; - constexpr static const std::size_t block_words = block_cipher_type::key_words; - typedef typename block_cipher_type::key_type block_type; - - constexpr static const std::size_t length_bits = word_bits * 2; - - typedef typename stream_endian::little_octet_big_bit digest_endian; - - constexpr static const std::size_t digest_bits = state_bits; - typedef static_digest digest_type; - - constexpr static const std::size_t pkcs_id_size = 18; - constexpr static const std::size_t pkcs_id_bits = pkcs_id_size * CHAR_BIT; - typedef std::array pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = {0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, - 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, - 0x02, 0x05, 0x05, 0x00, 0x04, 0x10}; - - struct iv_generator { - state_type const &operator()() const { - // Same as MD4 - static state_type const H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476}}; - return H0; - } - }; - }; - - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_MD5_POLICY_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/miyaguchi_preneel_compressor.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/miyaguchi_preneel_compressor.hpp deleted file mode 100644 index 868eccae41..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/miyaguchi_preneel_compressor.hpp +++ /dev/null @@ -1,76 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MIYAGUCHI_PRENEEL_COMPRESSOR_HPP -#define CRYPTO3_MIYAGUCHI_PRENEEL_COMPRESSOR_HPP - -namespace nil { - namespace crypto3 { - namespace hash { - /*! - * - * @tparam BlockCipher - * @tparam CombineFunction - * - * The Miyaguchi-Preneel construction turns a block cipher - * into a one-way compression function - * - * https://en.wikipedia.org/wiki/One-way_compression_function#Miyaguchi–Preneel - */ - template - struct miyaguchi_preneel_compressor { - typedef BlockCipher block_cipher_type; - - constexpr static const std::size_t word_bits = block_cipher_type::word_bits; - typedef typename block_cipher_type::word_type word_type; - - constexpr static const std::size_t key_bits = block_cipher_type::key_bits; - typedef typename block_cipher_type::key_type key_type; - - constexpr static const std::size_t state_bits = block_cipher_type::block_bits; - constexpr static const std::size_t state_words = block_cipher_type::block_words; - typedef typename block_cipher_type::block_type state_type; - - constexpr static const std::size_t block_bits = block_cipher_type::key_bits; - constexpr static const std::size_t block_words = block_cipher_type::key_words; - typedef typename block_cipher_type::block_type block_type; - - inline static void process_block(state_type &state, const block_type &block) { - KeyConverterFunctor k; - key_type key = {0}; - k(key, state); - - block_cipher_type cipher(key); - state_type new_state = cipher.encrypt(block); - - CombineFunction f; - f(state, new_state); - f(state, block); - } - }; - } // namespace hash - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_MIYAGUCHI_PRENEEL_COMPRESSOR_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/pedersen/basic_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/pedersen/basic_functions.hpp deleted file mode 100644 index cc289e7c19..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/pedersen/basic_functions.hpp +++ /dev/null @@ -1,70 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Ilias Khairullin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_DETAIL_PEDERSEN_BASIC_FUNCTIONS_HPP -#define CRYPTO3_HASH_DETAIL_PEDERSEN_BASIC_FUNCTIONS_HPP - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - /// See definition of \p c in https://zips.z.cash/protocol/protocol.pdf#concretepedersenhash - template - constexpr std::size_t chunks_per_base_point(std::size_t chunk_bits) { - - using extended_integral_type = boost::multiprecision::number< - boost::multiprecision::backends::cpp_int_modular_backend<2 * Field::policy_type::modulus_bits>>; - - extended_integral_type two(2); - std::size_t c = 1; - std::size_t prev_c = 0; - /// (Fr - 1) / 2 - extended_integral_type upper_bound = (Field::modulus - 1) / 2; - // TODO: first multiplier should be verified - /// (chunk_bits + 1) * ((2^(c * (chunk_bits + 1)) - 1) / (2^(chunk_bits + 1) - 1)) - auto get_test_value = [&](auto i) { - return (chunk_bits + 1) * ((::nil::crypto3::detail::pow(two, i * (chunk_bits + 1)) - 1) / - (::nil::crypto3::detail::pow(two, chunk_bits + 1) - 1)); - }; - auto test_value = get_test_value(c); - - while (test_value <= upper_bound) { - prev_c = c++; - test_value = get_test_value(c); - } - - return prev_c; - } - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_PEDERSEN_BASIC_FUNCTIONS_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/pedersen/lookup.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/pedersen/lookup.hpp deleted file mode 100644 index 2e694e8840..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/pedersen/lookup.hpp +++ /dev/null @@ -1,54 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Ilias Khairullin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_DETAIL_PEDERSEN_LOOKUP_HPP -#define CRYPTO3_HASH_DETAIL_PEDERSEN_LOOKUP_HPP - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct lookup; - - template - struct lookup { - typedef ResultT result_type; - static constexpr std::size_t chunk_bits = 3; - - template - static inline result_type process(const BitRange &bits) { - int result = (1 - 2 * bits[2]) * (1 + bits[0] + 2 * bits[1]); - if (result > 0) - return static_cast(unsigned(result)); - return result_type::modulus - unsigned(-result); - } - }; - } - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_PEDERSEN_LOOKUP_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/kimchi_constants.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/kimchi_constants.hpp index b136b67c01..e4dfdd01b3 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/kimchi_constants.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/kimchi_constants.hpp @@ -37,19 +37,19 @@ namespace nil { constexpr static const std::array, state_words> mds_matrix = {{ {{ - 0x1a9bd250757e29ef4959b9bef59b4e60e20a56307d6491e7b7ea1fac679c7903_cppui_modular253, - 0x384aa09faf3a48737e2d64f6a030aa242e6d5d455ae4a13696b48a7320c506cd_cppui_modular253, - 0x3d2b7b0209bc3080064d5ce4a7a03653f8346506bfa6d076061217be9e6cfed5_cppui_modular253 + 0x1a9bd250757e29ef4959b9bef59b4e60e20a56307d6491e7b7ea1fac679c7903_big_uint255, + 0x384aa09faf3a48737e2d64f6a030aa242e6d5d455ae4a13696b48a7320c506cd_big_uint255, + 0x3d2b7b0209bc3080064d5ce4a7a03653f8346506bfa6d076061217be9e6cfed5_big_uint255 }}, {{ - 0x9ee57c70bc351220b107983afcfabbea79868a4a8a5913e24b7aaf3b4bf3a42_cppui_modular253, - 0x20989996bc29a96d17684d3ad4c859813115267f35225d7e1e9a5b5436a2458f_cppui_modular253, - 0x14e39adb2e171ae232116419ee7f26d9191edde8a5632298347cdb74c3b2e69d_cppui_modular253 + 0x9ee57c70bc351220b107983afcfabbea79868a4a8a5913e24b7aaf3b4bf3a42_big_uint255, + 0x20989996bc29a96d17684d3ad4c859813115267f35225d7e1e9a5b5436a2458f_big_uint255, + 0x14e39adb2e171ae232116419ee7f26d9191edde8a5632298347cdb74c3b2e69d_big_uint255 }}, {{ - 0x174544357b687f65a9590c1df621818b5452d5d441597a94357f112316ef67cb_cppui_modular253, - 0x3ca9263dc1a19d17cfbf15b0166bb25f95dffc53212db207fcee35f02c2c4137_cppui_modular253, - 0x3cf1fbef75d4ab63b7a812f80b7b0373b2dc21d269ba7c4c4d6581d50aae114c_cppui_modular253 + 0x174544357b687f65a9590c1df621818b5452d5d441597a94357f112316ef67cb_big_uint255, + 0x3ca9263dc1a19d17cfbf15b0166bb25f95dffc53212db207fcee35f02c2c4137_big_uint255, + 0x3cf1fbef75d4ab63b7a812f80b7b0373b2dc21d269ba7c4c4d6581d50aae114c_big_uint255 }}, }}; @@ -57,279 +57,279 @@ namespace nil { constexpr static const std::array, round_count> round_constants = {{ {{ - 0x2ec559cd1a1f2f6889fc8ae5f07757f202b364429677c8ff6603fd6d93659b47_cppui_modular253, - 0x2553b08c788551bfe064d91c17eb1edb8662283229757711b2b30895f0aa3bad_cppui_modular253, - 0x25a706fb0f35b260b6f28d61e082d36a8f161be1f4d9416371a7b65f2bfafe4e_cppui_modular253 + 0x2ec559cd1a1f2f6889fc8ae5f07757f202b364429677c8ff6603fd6d93659b47_big_uint255, + 0x2553b08c788551bfe064d91c17eb1edb8662283229757711b2b30895f0aa3bad_big_uint255, + 0x25a706fb0f35b260b6f28d61e082d36a8f161be1f4d9416371a7b65f2bfafe4e_big_uint255 }}, {{ - 0x37c0281fda664cc2448d0e7dd77aaa04752250817a945abeea8cfaaf3ee39ba0_cppui_modular253, - 0x140488321291998b8582eaceeb3fa9ca3980eb64a453573c5aaa2910405936b6_cppui_modular253, - 0x3a73fe35b1bdd66b809aad5eab47b5c83b0146fd7fc632dfb49cd91ae1169378_cppui_modular253 + 0x37c0281fda664cc2448d0e7dd77aaa04752250817a945abeea8cfaaf3ee39ba0_big_uint255, + 0x140488321291998b8582eaceeb3fa9ca3980eb64a453573c5aaa2910405936b6_big_uint255, + 0x3a73fe35b1bdd66b809aad5eab47b5c83b0146fd7fc632dfb49cd91ae1169378_big_uint255 }}, {{ - 0x21b7c2b35fd7710b06245711f26c0635d3e21de4db10dd3a7369f59f468d7be6_cppui_modular253, - 0x1803a068d25fef2ef652c8a4847aa18a29d1885e7bf77fd6a34d66536d09cad7_cppui_modular253, - 0x291de61c5e6268213772cf7e03c80c2e833eb77c58c46548d158a70fbbd9724b_cppui_modular253 + 0x21b7c2b35fd7710b06245711f26c0635d3e21de4db10dd3a7369f59f468d7be6_big_uint255, + 0x1803a068d25fef2ef652c8a4847aa18a29d1885e7bf77fd6a34d66536d09cad7_big_uint255, + 0x291de61c5e6268213772cf7e03c80c2e833eb77c58c46548d158a70fbbd9724b_big_uint255 }}, {{ - 0x230043a0dc2dfab63607cbe1b9c482fdd937fdefecc6905aa5012e89babead13_cppui_modular253, - 0x218af77a05c502d3fa3144efcf47a0f2a0292498c10c6e2368565674e78764f4_cppui_modular253, - 0x223e2d94c177d27e071d55729d13a9b216955c7102cc9a95ea40058efb506117_cppui_modular253 + 0x230043a0dc2dfab63607cbe1b9c482fdd937fdefecc6905aa5012e89babead13_big_uint255, + 0x218af77a05c502d3fa3144efcf47a0f2a0292498c10c6e2368565674e78764f4_big_uint255, + 0x223e2d94c177d27e071d55729d13a9b216955c7102cc9a95ea40058efb506117_big_uint255 }}, {{ - 0x2a18257c15ad9b6fe8b7c5ad2129394e902c3c3802e738f24ce2f585ae5f6a38_cppui_modular253, - 0xa6f7ba75f216403d2e4940469d199474a65aa5ef814e36400bddef06158dcf8_cppui_modular253, - 0x169be41c6227956efef5b4cdde65d00d5e04fe766178bdc731615c6e5b93e31e_cppui_modular253 + 0x2a18257c15ad9b6fe8b7c5ad2129394e902c3c3802e738f24ce2f585ae5f6a38_big_uint255, + 0xa6f7ba75f216403d2e4940469d199474a65aa5ef814e36400bddef06158dcf8_big_uint255, + 0x169be41c6227956efef5b4cdde65d00d5e04fe766178bdc731615c6e5b93e31e_big_uint255 }}, {{ - 0x2e28f50a9a55d2e91774083072734544417e290a1cfebc01801b94d0728fe663_cppui_modular253, - 0xfdedf8da8654a22831040cfc74432464b173ee68628fd90498480b9902f2819_cppui_modular253, - 0x46a3ed9863d2d739dd8bc9e90a746fda1197162d0a0bec3db1f2f6042cf04e2_cppui_modular253 + 0x2e28f50a9a55d2e91774083072734544417e290a1cfebc01801b94d0728fe663_big_uint255, + 0xfdedf8da8654a22831040cfc74432464b173ee68628fd90498480b9902f2819_big_uint255, + 0x46a3ed9863d2d739dd8bc9e90a746fda1197162d0a0bec3db1f2f6042cf04e2_big_uint255 }}, {{ - 0x219e08b460c305b428670bacab86ac1e9458075778d35c3619ae7ba1f9b2ed76_cppui_modular253, - 0x38bb36a12ebcec4d4e8728eb43e3f12a6e33b1ffa1463379018d4e12424e62ca_cppui_modular253, - 0x1e9aa3fe25d116ccfbd6a8fccdae0aa9bc164a03ab7e951704ee9a715fbedee6_cppui_modular253 + 0x219e08b460c305b428670bacab86ac1e9458075778d35c3619ae7ba1f9b2ed76_big_uint255, + 0x38bb36a12ebcec4d4e8728eb43e3f12a6e33b1ffa1463379018d4e12424e62ca_big_uint255, + 0x1e9aa3fe25d116ccfbd6a8fccdae0aa9bc164a03ab7e951704ee9a715fbedee6_big_uint255 }}, {{ - 0x30f33ed70da4c2bfb844ff1a7558b817d1ec300da86a1694f2db45047d5f18b_cppui_modular253, - 0x282b04137350495ab417cf2c47389bf681c39f6c22d9e370b7af75cbcbe4bb1_cppui_modular253, - 0x9b1528dea2eb5bd96905b88ff05fdf3e0f220fe1d93d1b54953ac98fec825f0_cppui_modular253 + 0x30f33ed70da4c2bfb844ff1a7558b817d1ec300da86a1694f2db45047d5f18b_big_uint255, + 0x282b04137350495ab417cf2c47389bf681c39f6c22d9e370b7af75cbcbe4bb1_big_uint255, + 0x9b1528dea2eb5bd96905b88ff05fdf3e0f220fe1d93d1b54953ac98fec825f0_big_uint255 }}, {{ - 0x30083dbbb5eab39311c7a8bfd5e55567fa864b3468b5f9200e529cda03d9ef71_cppui_modular253, - 0x17eace73cf67c6112239cbf51dec0e714ee4e5a91dbc9209dc17bbea5bcd094_cppui_modular253, - 0x37af1de8f5475ba165b90f8d568683d54e215df97e9287943370cf4118428097_cppui_modular253 + 0x30083dbbb5eab39311c7a8bfd5e55567fa864b3468b5f9200e529cda03d9ef71_big_uint255, + 0x17eace73cf67c6112239cbf51dec0e714ee4e5a91dbc9209dc17bbea5bcd094_big_uint255, + 0x37af1de8f5475ba165b90f8d568683d54e215df97e9287943370cf4118428097_big_uint255 }}, {{ - 0x16ff7592836a45340ec6f2b0f122736d03f0bcb84012f922a4baa73ea0e66f51_cppui_modular253, - 0x1a5985d4b359d03de60b2edabb1853f476915febc0e40f83a2d1d0084efc3fd9_cppui_modular253, - 0x255a9d4beb9b5ea18ab9782b1abb267fc5b773b98ab655fd4d469698e1e1f975_cppui_modular253 + 0x16ff7592836a45340ec6f2b0f122736d03f0bcb84012f922a4baa73ea0e66f51_big_uint255, + 0x1a5985d4b359d03de60b2edabb1853f476915febc0e40f83a2d1d0084efc3fd9_big_uint255, + 0x255a9d4beb9b5ea18ab9782b1abb267fc5b773b98ab655fd4d469698e1e1f975_big_uint255 }}, {{ - 0x34a8d9f45200a9ac28021712be81e905967bac580a0b9ee57bc4231f5ecb936a_cppui_modular253, - 0x979556cb3edcbe4f33edd2094f1443b4b4ec6c457b0425b8463e788b9a2dcda_cppui_modular253, - 0x2a4d028c09ad39c30666b78b45cfadd5279f6239379c689a727f626679272654_cppui_modular253 + 0x34a8d9f45200a9ac28021712be81e905967bac580a0b9ee57bc4231f5ecb936a_big_uint255, + 0x979556cb3edcbe4f33edd2094f1443b4b4ec6c457b0425b8463e788b9a2dcda_big_uint255, + 0x2a4d028c09ad39c30666b78b45cfadd5279f6239379c689a727f626679272654_big_uint255 }}, {{ - 0xc31b68f6850b3bd71fe4e89984e2c87415523fb54f24ec8ae71430370154b33_cppui_modular253, - 0x1a27ca0b953d3dba6b8e01cf07d76c611a211d139f2dff5ac023ed2454f2ed90_cppui_modular253, - 0x109ae97c25d60242b86d7169196d2212f268b952dfd95a3937916b9905303180_cppui_modular253 + 0xc31b68f6850b3bd71fe4e89984e2c87415523fb54f24ec8ae71430370154b33_big_uint255, + 0x1a27ca0b953d3dba6b8e01cf07d76c611a211d139f2dff5ac023ed2454f2ed90_big_uint255, + 0x109ae97c25d60242b86d7169196d2212f268b952dfd95a3937916b9905303180_big_uint255 }}, {{ - 0x3698c932f2a16f7bb9abac089ec2de79c9965881708878683caf53caa83ad9c4_cppui_modular253, - 0x3c7e25e0ac8fba3dc1360f8a9a9fa0be0e031c8c76a93497b7cac7ed32ade6c0_cppui_modular253, - 0x2fc5023c5e4aed5aa7dfca0f5492f1b6efab3099360ec960237512f48c858a79_cppui_modular253 + 0x3698c932f2a16f7bb9abac089ec2de79c9965881708878683caf53caa83ad9c4_big_uint255, + 0x3c7e25e0ac8fba3dc1360f8a9a9fa0be0e031c8c76a93497b7cac7ed32ade6c0_big_uint255, + 0x2fc5023c5e4aed5aa7dfca0f5492f1b6efab3099360ec960237512f48c858a79_big_uint255 }}, {{ - 0x2c124735f3f924546fb4fdfa2a018e03f53063d3a2e87fd285ba8d647eda6765_cppui_modular253, - 0x12c875c9b79591acf9033f8b6c1e357126c44b23f3486fbee0d98340a3382251_cppui_modular253, - 0x3cda935e895857d39a7db8476aeda5a5131cb165a353073fd3e473fd8855528d_cppui_modular253 + 0x2c124735f3f924546fb4fdfa2a018e03f53063d3a2e87fd285ba8d647eda6765_big_uint255, + 0x12c875c9b79591acf9033f8b6c1e357126c44b23f3486fbee0d98340a3382251_big_uint255, + 0x3cda935e895857d39a7db8476aeda5a5131cb165a353073fd3e473fd8855528d_big_uint255 }}, {{ - 0x218eb756fa5f1df9f1eb922ef80b0852588779a7368e3d010def1512815d8759_cppui_modular253, - 0x23bcf1032957015ef171fbb4329bca0c57d59885522f25f4b082a3cf301cfbc6_cppui_modular253, - 0x17474c3b6a9bc1057df64b9e4d62badbc7f3867b3dd757c71c1f656205d7bceb_cppui_modular253 + 0x218eb756fa5f1df9f1eb922ef80b0852588779a7368e3d010def1512815d8759_big_uint255, + 0x23bcf1032957015ef171fbb4329bca0c57d59885522f25f4b082a3cf301cfbc6_big_uint255, + 0x17474c3b6a9bc1057df64b9e4d62badbc7f3867b3dd757c71c1f656205d7bceb_big_uint255 }}, {{ - 0x19826c0ee22972deb41745d3bd412c2ae3d4c18535f4b60c9e870edffa3d550_cppui_modular253, - 0x30bcb17dfd622c46f3275f698319b68d8816bed0368ded435ed61992bc43efa9_cppui_modular253, - 0x3bd816c214c66410229cfbd1f4a3a42e6a0f82f3c0d49b09bc7b4c042ff2c94b_cppui_modular253 + 0x19826c0ee22972deb41745d3bd412c2ae3d4c18535f4b60c9e870edffa3d550_big_uint255, + 0x30bcb17dfd622c46f3275f698319b68d8816bed0368ded435ed61992bc43efa9_big_uint255, + 0x3bd816c214c66410229cfbd1f4a3a42e6a0f82f3c0d49b09bc7b4c042ff2c94b_big_uint255 }}, {{ - 0x8943ec01d9fb9f43c840757738979b146c3b6d1982280e92a52e8d045633ea1_cppui_modular253, - 0x2670bf8c01822e31c70976269d89ed58bc79ad2f9d1e3145df890bf898b57e47_cppui_modular253, - 0xdd53b41599ae78dbd3e689b65ebcca493effa94ed765eeec75a0d3bb20407f9_cppui_modular253 + 0x8943ec01d9fb9f43c840757738979b146c3b6d1982280e92a52e8d045633ea1_big_uint255, + 0x2670bf8c01822e31c70976269d89ed58bc79ad2f9d1e3145df890bf898b57e47_big_uint255, + 0xdd53b41599ae78dbd3e689b65ebcca493effa94ed765eeec75a0d3bb20407f9_big_uint255 }}, {{ - 0x68177d293585e0b8c8e76a8a565c8689a1d88e6a9afa79220bb0a2253f203c3_cppui_modular253, - 0x35216f471043866edc324ad8d8cf0cc792fe7a10bf874b1eeac67b451d6b2cf5_cppui_modular253, - 0x1fd6efb2536bfe11ec3736e7f7448c01eb2a5a9041bbf84631cc83ee0464f6af_cppui_modular253 + 0x68177d293585e0b8c8e76a8a565c8689a1d88e6a9afa79220bb0a2253f203c3_big_uint255, + 0x35216f471043866edc324ad8d8cf0cc792fe7a10bf874b1eeac67b451d6b2cf5_big_uint255, + 0x1fd6efb2536bfe11ec3736e7f7448c01eb2a5a9041bbf84631cc83ee0464f6af_big_uint255 }}, {{ - 0x2c982c7352102289fc1b48dafcd9e3cc364d5a4324575e4721daf0af10033c67_cppui_modular253, - 0x352f7e8c7662d86db9c722d4d07778858771b832af5bb5dc3b13cf94851c1b45_cppui_modular253, - 0x18e3c0c1caa5e3ed66ee1ab6f55a5c8063d8c9b034ae47db43435147149e37d5_cppui_modular253 + 0x2c982c7352102289fc1b48dafcd9e3cc364d5a4324575e4721daf0af10033c67_big_uint255, + 0x352f7e8c7662d86db9c722d4d07778858771b832af5bb5dc3b13cf94851c1b45_big_uint255, + 0x18e3c0c1caa5e3ed66ee1ab6f55a5c8063d8c9b034ae47db43435147149e37d5_big_uint255 }}, {{ - 0x3124b12deb37dcbb3d96c1a08d507523e30e03e0919559bf2daaab238422eade_cppui_modular253, - 0x143bf0def31437eb21095200d2d406e6e5727833683d9740b9bfc1713215dc9a_cppui_modular253, - 0x1ebee92143f32b4f9d9a90ad62b8483c977480767b53c71f6bde934a8ef38f17_cppui_modular253 + 0x3124b12deb37dcbb3d96c1a08d507523e30e03e0919559bf2daaab238422eade_big_uint255, + 0x143bf0def31437eb21095200d2d406e6e5727833683d9740b9bfc1713215dc9a_big_uint255, + 0x1ebee92143f32b4f9d9a90ad62b8483c977480767b53c71f6bde934a8ef38f17_big_uint255 }}, {{ - 0xff6c794ad1afaa494088d5f8ee6c47bf9e83013478628cf9f41f2e81383ebeb_cppui_modular253, - 0x3d0a10ac3ee707c62e8bdf2cdb49ac2cf4096cf41a7f214fdd1f8f9a24804f17_cppui_modular253, - 0x1d61014cd3ef0d87d037c56bdfa370a73352b95d472ead1937bed06a31801c91_cppui_modular253 + 0xff6c794ad1afaa494088d5f8ee6c47bf9e83013478628cf9f41f2e81383ebeb_big_uint255, + 0x3d0a10ac3ee707c62e8bdf2cdb49ac2cf4096cf41a7f214fdd1f8f9a24804f17_big_uint255, + 0x1d61014cd3ef0d87d037c56bdfa370a73352b95d472ead1937bed06a31801c91_big_uint255 }}, {{ - 0x123e185b2ec7f072507ac1e4e743589bb25c8fdb468e329e7de169875f90c525_cppui_modular253, - 0x30b780c0c1cb0609623732824c75017da9799bdc7e08b527bae7f409ebdbecf2_cppui_modular253, - 0x1dfb3801b7ae4e209f68195612965c6e37a2ed5cf1eeee3d46edf655d6f5afef_cppui_modular253 + 0x123e185b2ec7f072507ac1e4e743589bb25c8fdb468e329e7de169875f90c525_big_uint255, + 0x30b780c0c1cb0609623732824c75017da9799bdc7e08b527bae7f409ebdbecf2_big_uint255, + 0x1dfb3801b7ae4e209f68195612965c6e37a2ed5cf1eeee3d46edf655d6f5afef_big_uint255 }}, {{ - 0x2fdee42805b2774064e963c741552556019a9611928dda728b78311e1f049528_cppui_modular253, - 0x31b2b65c431212ed36fdda5358d90cd9cb51c9f493bff71cdc75654547e4a22b_cppui_modular253, - 0x1e3ca033d8413b688db7a543e62ac2e69644c0614801379cfe62fa220319e0ef_cppui_modular253 + 0x2fdee42805b2774064e963c741552556019a9611928dda728b78311e1f049528_big_uint255, + 0x31b2b65c431212ed36fdda5358d90cd9cb51c9f493bff71cdc75654547e4a22b_big_uint255, + 0x1e3ca033d8413b688db7a543e62ac2e69644c0614801379cfe62fa220319e0ef_big_uint255 }}, {{ - 0xc8ef1168425028c52a32d93f9313153e52e9cf15e5ec2b4ca09d01730dad432_cppui_modular253, - 0x378c73373a36a5ed94a34f75e5de7a7a6187ea301380ecfb6f1a22cf8552638e_cppui_modular253, - 0x3218aeec20048a564015e8f221657fbe489ba404d7f5f15b829c7a75a85c2f44_cppui_modular253 + 0xc8ef1168425028c52a32d93f9313153e52e9cf15e5ec2b4ca09d01730dad432_big_uint255, + 0x378c73373a36a5ed94a34f75e5de7a7a6187ea301380ecfb6f1a22cf8552638e_big_uint255, + 0x3218aeec20048a564015e8f221657fbe489ba404d7f5f15b829c7a75a85c2f44_big_uint255 }}, {{ - 0x3312ef7cbbad31430f20f30931b070379c77119c1825c6560cd2c82cf767794e_cppui_modular253, - 0x356449a71383674c607fa31ded8c0c0d2d20fb45c36698d258cecd982dba478c_cppui_modular253, - 0xcc88d1c91481d5321174e55b49b2485682c87fac2adb332167a20bcb57db359_cppui_modular253 + 0x3312ef7cbbad31430f20f30931b070379c77119c1825c6560cd2c82cf767794e_big_uint255, + 0x356449a71383674c607fa31ded8c0c0d2d20fb45c36698d258cecd982dba478c_big_uint255, + 0xcc88d1c91481d5321174e55b49b2485682c87fac2adb332167a20bcb57db359_big_uint255 }}, {{ - 0x1defccbd33740803ad284bc48ab959f349b94e18d773c6c0c58a4b9390cc300f_cppui_modular253, - 0x2d263cc2e9af126d768d9e1d2bf2cbf32063be831cb1548ffd716bc3ee7034fe_cppui_modular253, - 0x111e314db6fb1a28e241028ce3d347c52558a33b6b11285a97fffa1b479e969d_cppui_modular253 + 0x1defccbd33740803ad284bc48ab959f349b94e18d773c6c0c58a4b9390cc300f_big_uint255, + 0x2d263cc2e9af126d768d9e1d2bf2cbf32063be831cb1548ffd716bc3ee7034fe_big_uint255, + 0x111e314db6fb1a28e241028ce3d347c52558a33b6b11285a97fffa1b479e969d_big_uint255 }}, {{ - 0x27409401e92001d434cba2868e9e371703199c2372d23ef329e537b513f453e_cppui_modular253, - 0x24a852bdf9cb2a8fedd5e85a59867d4916b8a57bdd5f84e1047d410770ffffa0_cppui_modular253, - 0x205d1b0ee359f621845ac64ff7e383a3eb81e03d2a2966557746d21b47329d6e_cppui_modular253 + 0x27409401e92001d434cba2868e9e371703199c2372d23ef329e537b513f453e_big_uint255, + 0x24a852bdf9cb2a8fedd5e85a59867d4916b8a57bdd5f84e1047d410770ffffa0_big_uint255, + 0x205d1b0ee359f621845ac64ff7e383a3eb81e03d2a2966557746d21b47329d6e_big_uint255 }}, {{ - 0x25c327e2cc93ec6f0f23b5e41c931bfbbe4c12da7d55a2b1c91c79db982df903_cppui_modular253, - 0x39df3e22d22b09b4265da50ef175909ce79e8f0b9599dff01cf80e70884982b9_cppui_modular253, - 0x9b08d58853d8ac908c5b14e5eb8611b45f40faaa59cb8dff98fb30efcdfaa01_cppui_modular253 + 0x25c327e2cc93ec6f0f23b5e41c931bfbbe4c12da7d55a2b1c91c79db982df903_big_uint255, + 0x39df3e22d22b09b4265da50ef175909ce79e8f0b9599dff01cf80e70884982b9_big_uint255, + 0x9b08d58853d8ac908c5b14e5eb8611b45f40faaa59cb8dff98fb30efcdfaa01_big_uint255 }}, {{ - 0x1ece62374d79e717db4a68f9cddaaf52f8884f397375c0f3c5c1dbaa9c57a0a6_cppui_modular253, - 0x3bd089b727a0ee08e263fa5e35b618db87d7bcce03441475e3fd49639b9fa1c1_cppui_modular253, - 0x3fedea75f37ad9cfc94c95141bfb4719ee9b32b874b93dcfc0cc12f51a7b2aff_cppui_modular253 + 0x1ece62374d79e717db4a68f9cddaaf52f8884f397375c0f3c5c1dbaa9c57a0a6_big_uint255, + 0x3bd089b727a0ee08e263fa5e35b618db87d7bcce03441475e3fd49639b9fa1c1_big_uint255, + 0x3fedea75f37ad9cfc94c95141bfb4719ee9b32b874b93dcfc0cc12f51a7b2aff_big_uint255 }}, {{ - 0x36dfa18a9ba1b194228494a8acaf0668cb43aca9d4e0a251b20ec3424d0e65cd_cppui_modular253, - 0x119e98db3f49cd7fcb3b0632567d9ccaa5498b0d411a1437f57c658f41931d0c_cppui_modular253, - 0x1100b21c306475d816b3efcd75c3ae135c54ad3cc56ca22abd9b7f45e6d02c19_cppui_modular253 + 0x36dfa18a9ba1b194228494a8acaf0668cb43aca9d4e0a251b20ec3424d0e65cd_big_uint255, + 0x119e98db3f49cd7fcb3b0632567d9ccaa5498b0d411a1437f57c658f41931d0c_big_uint255, + 0x1100b21c306475d816b3efcd75c3ae135c54ad3cc56ca22abd9b7f45e6d02c19_big_uint255 }}, {{ - 0x15791f9bbea213937208c82794eb667f157f003c65b64aa9800f4bbee4ea5119_cppui_modular253, - 0x1adbeb5e9c4d515ecfd250ebee56a2a816eb3e3dc8d5d440c1ab4285b350be64_cppui_modular253, - 0x1fbf4738844a9a249aec253e8e4260e4ab09e26bea29ab0020bf0e813ceecbc3_cppui_modular253 + 0x15791f9bbea213937208c82794eb667f157f003c65b64aa9800f4bbee4ea5119_big_uint255, + 0x1adbeb5e9c4d515ecfd250ebee56a2a816eb3e3dc8d5d440c1ab4285b350be64_big_uint255, + 0x1fbf4738844a9a249aec253e8e4260e4ab09e26bea29ab0020bf0e813ceecbc3_big_uint255 }}, {{ - 0x3418a929556ec51a086459bb9e63a821d407388cce83949b9af3e3b0434eaf0e_cppui_modular253, - 0x9406b5c3af0290f997405d0c51be69544afb240d48eeab1736cda0432e8ff9e_cppui_modular253, - 0x23ece5d70b38ccc9d43cd923e5e3e2f62d1d873c9141ef01f89b6de1336f5bc7_cppui_modular253 + 0x3418a929556ec51a086459bb9e63a821d407388cce83949b9af3e3b0434eaf0e_big_uint255, + 0x9406b5c3af0290f997405d0c51be69544afb240d48eeab1736cda0432e8ff9e_big_uint255, + 0x23ece5d70b38ccc9d43cd923e5e3e2f62d1d873c9141ef01f89b6de1336f5bc7_big_uint255 }}, {{ - 0x1852d574e46d370a0b1e64f6c41eeb8d40cf96c524a62965661f2ef87e67234d_cppui_modular253, - 0xa657027cce8d4f238ea896dde273b7537b508674a366c66b3789d9828b0ce90_cppui_modular253, - 0x3482f98a46ec358108fbbb68fd94f8f2baa73c723baf21922a850e45511f5a2d_cppui_modular253 + 0x1852d574e46d370a0b1e64f6c41eeb8d40cf96c524a62965661f2ef87e67234d_big_uint255, + 0xa657027cce8d4f238ea896dde273b7537b508674a366c66b3789d9828b0ce90_big_uint255, + 0x3482f98a46ec358108fbbb68fd94f8f2baa73c723baf21922a850e45511f5a2d_big_uint255 }}, {{ - 0x3f62f164f8c905b335a6cbf76131d2430237e17ad6abc76d2a6329c1ec5463ee_cppui_modular253, - 0x7e397f503f9c1cea028465b2950ea444b15c5eab567d5a69ea2925685694df0_cppui_modular253, - 0x405f1fc711872373d6eb50a09fbfb05b2703ae0a0b4edb86aedb216db17a876_cppui_modular253 + 0x3f62f164f8c905b335a6cbf76131d2430237e17ad6abc76d2a6329c1ec5463ee_big_uint255, + 0x7e397f503f9c1cea028465b2950ea444b15c5eab567d5a69ea2925685694df0_big_uint255, + 0x405f1fc711872373d6eb50a09fbfb05b2703ae0a0b4edb86aedb216db17a876_big_uint255 }}, {{ - 0xbe0848eb3e09c7027110ad842c502441c97afa14a844406fcfec754a25658c1_cppui_modular253, - 0x26b78788fd98ac020bac92d0e7792bb5ffed06b697d847f61d984f905d9ba870_cppui_modular253, - 0x38fd5318d39055c82fef9bdd33315a541c0ec4363e6cc0687005871355dfa573_cppui_modular253 + 0xbe0848eb3e09c7027110ad842c502441c97afa14a844406fcfec754a25658c1_big_uint255, + 0x26b78788fd98ac020bac92d0e7792bb5ffed06b697d847f61d984f905d9ba870_big_uint255, + 0x38fd5318d39055c82fef9bdd33315a541c0ec4363e6cc0687005871355dfa573_big_uint255 }}, {{ - 0x380bd03b840c48c8ba3830e7cace72f91a5002218c617294e8c8bc687d5216de_cppui_modular253, - 0x2c6e57ddc1d7c81a0299ed49c3d74759416bc8426f30e2af5622895c531b4e1c_cppui_modular253, - 0x11d3a81b262fc76ef506ee6d88e5991d0de8cb9dd162d97c58b175e3bc4584f3_cppui_modular253 + 0x380bd03b840c48c8ba3830e7cace72f91a5002218c617294e8c8bc687d5216de_big_uint255, + 0x2c6e57ddc1d7c81a0299ed49c3d74759416bc8426f30e2af5622895c531b4e1c_big_uint255, + 0x11d3a81b262fc76ef506ee6d88e5991d0de8cb9dd162d97c58b175e3bc4584f3_big_uint255 }}, {{ - 0x9b6b283ebaf45fbb1e448969ace9be62adf67ddf58614925741deb6a1ba7def_cppui_modular253, - 0x15d5095164c885763fa83cdf776d436382821a17bc5563a5b6f6dfcdac504ade_cppui_modular253, - 0x3427fdbfca3cea23063eb138c5055c6cad9c4252b23d12c12293308eff7d9124_cppui_modular253 + 0x9b6b283ebaf45fbb1e448969ace9be62adf67ddf58614925741deb6a1ba7def_big_uint255, + 0x15d5095164c885763fa83cdf776d436382821a17bc5563a5b6f6dfcdac504ade_big_uint255, + 0x3427fdbfca3cea23063eb138c5055c6cad9c4252b23d12c12293308eff7d9124_big_uint255 }}, {{ - 0x272f12e731077b74317ef2543c33b86194db1da5f6a7e1eee0656672c81685fe_cppui_modular253, - 0x5323f85deb8c07c193c37a73d76f6114967913a2bdce11995f183e769f42967_cppui_modular253, - 0x3d5ce415ecae4ba42b417ea3a501b44694f46efddff2fcca952b097f3852d3d8_cppui_modular253 + 0x272f12e731077b74317ef2543c33b86194db1da5f6a7e1eee0656672c81685fe_big_uint255, + 0x5323f85deb8c07c193c37a73d76f6114967913a2bdce11995f183e769f42967_big_uint255, + 0x3d5ce415ecae4ba42b417ea3a501b44694f46efddff2fcca952b097f3852d3d8_big_uint255 }}, {{ - 0xe8ec18c7b52c514d42047f1f0b2a90cb8c0c7391cf9479cd7fd5bfe1d3db8f2_cppui_modular253, - 0x1591c865ea7065d54304519f8bb268bddbeaf3afae54edcd01a833ed0a9ef1a_cppui_modular253, - 0x3eddbeeee5eca5deee4bf1789c435e1241e0d71186d8f0f62d74729dfc3119fb_cppui_modular253 + 0xe8ec18c7b52c514d42047f1f0b2a90cb8c0c7391cf9479cd7fd5bfe1d3db8f2_big_uint255, + 0x1591c865ea7065d54304519f8bb268bddbeaf3afae54edcd01a833ed0a9ef1a_big_uint255, + 0x3eddbeeee5eca5deee4bf1789c435e1241e0d71186d8f0f62d74729dfc3119fb_big_uint255 }}, {{ - 0x23691c7009b9283b268766e8d491716d3c1993e6ecf458def8f762af3e355707_cppui_modular253, - 0x26cdab2c837ebeac5bea4be1d6f0488034907374d81a61a34f1c4db397d4c09b_cppui_modular253, - 0x2d2206730664d58be0676dad1fee0e990c264a7410a2cdb6b55653c1df72ef56_cppui_modular253 + 0x23691c7009b9283b268766e8d491716d3c1993e6ecf458def8f762af3e355707_big_uint255, + 0x26cdab2c837ebeac5bea4be1d6f0488034907374d81a61a34f1c4db397d4c09b_big_uint255, + 0x2d2206730664d58be0676dad1fee0e990c264a7410a2cdb6b55653c1df72ef56_big_uint255 }}, {{ - 0x2bb74bb185372334a4ef5f6d18e2ece54086e62b04985dd794b7117b0be9217f_cppui_modular253, - 0x366250fe928c45d8d5aa35f0a142754907ff3c598410199b589b28cd851b2204_cppui_modular253, - 0x1868f8118482c6b4a5a61a81c8aaca128953179c20f73a44022d9976bdc34af1_cppui_modular253 + 0x2bb74bb185372334a4ef5f6d18e2ece54086e62b04985dd794b7117b0be9217f_big_uint255, + 0x366250fe928c45d8d5aa35f0a142754907ff3c598410199b589b28cd851b2204_big_uint255, + 0x1868f8118482c6b4a5a61a81c8aaca128953179c20f73a44022d9976bdc34af1_big_uint255 }}, {{ - 0xb7901c670e1d75d726eb88d000950b3c963f0f7a6ca24994bdc07ae2f78b4d3_cppui_modular253, - 0x32c4bd8ab70e1f25af77af57dd340c8e6c8a101dfc5e8dd03314566db90b870_cppui_modular253, - 0x1ce36db31fe6ea3cd9308db9aa43a8af5c41a8f0a6509bfe00f0e7b486c0ab8a_cppui_modular253 + 0xb7901c670e1d75d726eb88d000950b3c963f0f7a6ca24994bdc07ae2f78b4d3_big_uint255, + 0x32c4bd8ab70e1f25af77af57dd340c8e6c8a101dfc5e8dd03314566db90b870_big_uint255, + 0x1ce36db31fe6ea3cd9308db9aa43a8af5c41a8f0a6509bfe00f0e7b486c0ab8a_big_uint255 }}, {{ - 0x26596ea9e1915e53da3479e9d13c3c920505e2449e325810ff6ca855fe4b7c6e_cppui_modular253, - 0x30f296a269868a7fca8f5b1e269c0116304df31729559a270e713509d3a6d5dc_cppui_modular253, - 0x2588961eff7897d87eb6ac72350ef9f52640647cbd23136919a994dfd1979d5_cppui_modular253 + 0x26596ea9e1915e53da3479e9d13c3c920505e2449e325810ff6ca855fe4b7c6e_big_uint255, + 0x30f296a269868a7fca8f5b1e269c0116304df31729559a270e713509d3a6d5dc_big_uint255, + 0x2588961eff7897d87eb6ac72350ef9f52640647cbd23136919a994dfd1979d5_big_uint255 }}, {{ - 0x16a49e69721e80690d41e06229e9bc2dbaf9a2abf4b89388db2485595409d62b_cppui_modular253, - 0x3d7aca02c051fcad8073cfd67210cd423a31888afc4a444d9d3adf3d6c5da7bf_cppui_modular253, - 0x299bd48a740b7790075268312ab8072c72421de5a6437fa5e25431ef951847b4_cppui_modular253 + 0x16a49e69721e80690d41e06229e9bc2dbaf9a2abf4b89388db2485595409d62b_big_uint255, + 0x3d7aca02c051fcad8073cfd67210cd423a31888afc4a444d9d3adf3d6c5da7bf_big_uint255, + 0x299bd48a740b7790075268312ab8072c72421de5a6437fa5e25431ef951847b4_big_uint255 }}, {{ - 0x11a69b867d9ea22ec1b2f28e96617129e36eefaea9e8126bdc6a42b99072902b_cppui_modular253, - 0x25bc1af391f3c1f2284a95da92b5883d1b3a40794b2358b2e7a70fca22da64ce_cppui_modular253, - 0x361ab3843f4d8ddadede39d82bb1a8109f89b6d9aa117b8f365de43895de0baa_cppui_modular253 + 0x11a69b867d9ea22ec1b2f28e96617129e36eefaea9e8126bdc6a42b99072902b_big_uint255, + 0x25bc1af391f3c1f2284a95da92b5883d1b3a40794b2358b2e7a70fca22da64ce_big_uint255, + 0x361ab3843f4d8ddadede39d82bb1a8109f89b6d9aa117b8f365de43895de0baa_big_uint255 }}, {{ - 0x38ef3ab5b61c117a3465a017a9c8ba4c227659b41fdf145206d5c960f49dd45b_cppui_modular253, - 0x3992f83f26143dbdbd335604a1a14daf238ae43c249783f694feaf560aaae20f_cppui_modular253, - 0x350287977eb71c81b10ecd039aad99cfa9ed84a04301cb30869e1dc7fa1dc638_cppui_modular253 + 0x38ef3ab5b61c117a3465a017a9c8ba4c227659b41fdf145206d5c960f49dd45b_big_uint255, + 0x3992f83f26143dbdbd335604a1a14daf238ae43c249783f694feaf560aaae20f_big_uint255, + 0x350287977eb71c81b10ecd039aad99cfa9ed84a04301cb30869e1dc7fa1dc638_big_uint255 }}, {{ - 0x3afb5bc126020586dcccba32dd054cd9a3f3b834ca9678d6802c48b1da97d6ed_cppui_modular253, - 0x172b7c2d8e7e4b06d183a2575b790749d0970c54966407fa8f59072c729de671_cppui_modular253, - 0x2eb53fe3a278688a70494569e54a0f0d269935aec6c897bef4d368c1f67d57e4_cppui_modular253 + 0x3afb5bc126020586dcccba32dd054cd9a3f3b834ca9678d6802c48b1da97d6ed_big_uint255, + 0x172b7c2d8e7e4b06d183a2575b790749d0970c54966407fa8f59072c729de671_big_uint255, + 0x2eb53fe3a278688a70494569e54a0f0d269935aec6c897bef4d368c1f67d57e4_big_uint255 }}, {{ - 0x375ae56b8d9310d553ed77d406dedc3f0393e5a321b71caee6a5bb7078b5035_cppui_modular253, - 0x1d49a0d53bc2993cbf1fb5d1da9bb76fe46a7031d5e5d43fadbf54bc17c1ef38_cppui_modular253, - 0x132d17b87cab6d707ddfa1f01df1724ad37957e989c44f1ff71426367f953160_cppui_modular253 + 0x375ae56b8d9310d553ed77d406dedc3f0393e5a321b71caee6a5bb7078b5035_big_uint255, + 0x1d49a0d53bc2993cbf1fb5d1da9bb76fe46a7031d5e5d43fadbf54bc17c1ef38_big_uint255, + 0x132d17b87cab6d707ddfa1f01df1724ad37957e989c44f1ff71426367f953160_big_uint255 }}, {{ - 0x62da5280948d8c6c4acc7e6a1aa421f0f9ec179a44146750060be4be6755f85_cppui_modular253, - 0xa4b4d5cde54a974ea4e57ee4132d2ab2510c300f21930d6bbbf211d1add80f9_cppui_modular253, - 0x3356f1fbeac493ccab752b70bbed821ce49965c19284d7aacd78fbf3ff864e91_cppui_modular253 + 0x62da5280948d8c6c4acc7e6a1aa421f0f9ec179a44146750060be4be6755f85_big_uint255, + 0xa4b4d5cde54a974ea4e57ee4132d2ab2510c300f21930d6bbbf211d1add80f9_big_uint255, + 0x3356f1fbeac493ccab752b70bbed821ce49965c19284d7aacd78fbf3ff864e91_big_uint255 }}, {{ - 0x42721e8a9cc32557851feb0e0190c5dfbf4cb1b8f47d37e7e653ec6ff8a4059_cppui_modular253, - 0x53d9b2633fff31ca4fc5724ce6b4422318128cdf01897d321e86f47cdf748b1_cppui_modular253, - 0x267d96caeafde5dbd3db1f0668b09ccd532a22f0205494716a786219fb4c801c_cppui_modular253 + 0x42721e8a9cc32557851feb0e0190c5dfbf4cb1b8f47d37e7e653ec6ff8a4059_big_uint255, + 0x53d9b2633fff31ca4fc5724ce6b4422318128cdf01897d321e86f47cdf748b1_big_uint255, + 0x267d96caeafde5dbd3db1f0668b09ccd532a22f0205494716a786219fb4c801c_big_uint255 }}, {{ - 0x39316997737610193c3f9ffcfd4e23d38aac12cd7b95b8d256d774101650a6ca_cppui_modular253, - 0x191e377462986563fdabf9b23529f7c84c6b200b9101b3a5096bca5f377981fb_cppui_modular253, - 0x20f89af9722f79c860d2059a0ec209cf3a7925ad0798cab655eca62fe73ff3d9_cppui_modular253 + 0x39316997737610193c3f9ffcfd4e23d38aac12cd7b95b8d256d774101650a6ca_big_uint255, + 0x191e377462986563fdabf9b23529f7c84c6b200b9101b3a5096bca5f377981fb_big_uint255, + 0x20f89af9722f79c860d2059a0ec209cf3a7925ad0798cab655eca62fe73ff3d9_big_uint255 }}, {{ - 0x1ca568aeddb2ef391a7c78ecf104d32d785b9ca145d97e35879df3534a7d1e0b_cppui_modular253, - 0x25de9ba0a37472c3b4c0b9c3bc25cbbf78d91881b6f94ee70e4abf090211251c_cppui_modular253, - 0x3393debd38d311881c7583bee07e605ef0e55c62f0508ccc2d26518cd568e1ef_cppui_modular253 + 0x1ca568aeddb2ef391a7c78ecf104d32d785b9ca145d97e35879df3534a7d1e0b_big_uint255, + 0x25de9ba0a37472c3b4c0b9c3bc25cbbf78d91881b6f94ee70e4abf090211251c_big_uint255, + 0x3393debd38d311881c7583bee07e605ef0e55c62f0508ccc2d26518cd568e1ef_big_uint255 }}, {{ - 0x38df2fd18a8d7563806aa9d994a611f642d5c397388d1dd3e78bc7a4515c5b1_cppui_modular253, - 0x5c6503ff1ee548f2435ad9148d7fb94c9222b0908f445537a6667047f6d501c_cppui_modular253, - 0x104c88d6d0682d82d3d664826dc9565db101a220aa8f90572eb798468a82a2ab_cppui_modular253 + 0x38df2fd18a8d7563806aa9d994a611f642d5c397388d1dd3e78bc7a4515c5b1_big_uint255, + 0x5c6503ff1ee548f2435ad9148d7fb94c9222b0908f445537a6667047f6d501c_big_uint255, + 0x104c88d6d0682d82d3d664826dc9565db101a220aa8f90572eb798468a82a2ab_big_uint255 }}, {{ - 0x2caad6108c09ee6aee7851b4a2d2d3b7c3ca3c56a80003c8471f90bfa4ac628b_cppui_modular253, - 0xa57dbd4c327826c8a97bc7285f94bcddb966177346f1792c4bd7088aa0353f3_cppui_modular253, - 0x3c15552f9124318b8433d01bb53ba04ba1cc9eb91d83b918e32fea39fbe908fa_cppui_modular253 + 0x2caad6108c09ee6aee7851b4a2d2d3b7c3ca3c56a80003c8471f90bfa4ac628b_big_uint255, + 0xa57dbd4c327826c8a97bc7285f94bcddb966177346f1792c4bd7088aa0353f3_big_uint255, + 0x3c15552f9124318b8433d01bb53ba04ba1cc9eb91d83b918e32fea39fbe908fa_big_uint255 }}, {{ - 0xe10c10cbbe1717a9441c6299c4fc087c222208bd4fa8f3be66d2075f623b513_cppui_modular253, - 0x1e8b254cbff2c92a83dff1728c81dd22a9570f590e497cb2d640042cb879a930_cppui_modular253, - 0x1812dbcd70c440610057bbfdd0cc4d31d1faf5786419b53841c4adc43f2b2352_cppui_modular253 + 0xe10c10cbbe1717a9441c6299c4fc087c222208bd4fa8f3be66d2075f623b513_big_uint255, + 0x1e8b254cbff2c92a83dff1728c81dd22a9570f590e497cb2d640042cb879a930_big_uint255, + 0x1812dbcd70c440610057bbfdd0cc4d31d1faf5786419b53841c4adc43f2b2352_big_uint255 }}, }}; }; @@ -344,19 +344,19 @@ namespace nil { constexpr static const std::array, state_words> mds_matrix = {{ {{ - 0x3e28f7dd17f47a7e304a54d377dd7aeead6b92027d60baf300246cf023dd594e_cppui_modular255, - 0x30db06abb696fccb92b28ac214f4893d3fd84b3d4a9018754975e24477c32600_cppui_modular255, - 0x174110bc1b058c6016ff5e8152ab3ffb6e2e6c4d01e66aba302659c51b7f563a_cppui_modular255, + 0x3e28f7dd17f47a7e304a54d377dd7aeead6b92027d60baf300246cf023dd594e_big_uint255, + 0x30db06abb696fccb92b28ac214f4893d3fd84b3d4a9018754975e24477c32600_big_uint255, + 0x174110bc1b058c6016ff5e8152ab3ffb6e2e6c4d01e66aba302659c51b7f563a_big_uint255, }}, {{ - 0x12d36fa83503146980c05a1d48bcd50d2e9d4390e353a158a0fe387e2b4aeb0c_cppui_modular255, - 0x2ab17c8eb369bea76e9f0c385e8bafc71536bedc8e06d06fd65c1670e94d9c55_cppui_modular255, - 0xcc915328165c13986af127e108b9e5d9a60c5dc92e3e7636b8c3da5b4a8537_cppui_modular255, + 0x12d36fa83503146980c05a1d48bcd50d2e9d4390e353a158a0fe387e2b4aeb0c_big_uint255, + 0x2ab17c8eb369bea76e9f0c385e8bafc71536bedc8e06d06fd65c1670e94d9c55_big_uint255, + 0xcc915328165c13986af127e108b9e5d9a60c5dc92e3e7636b8c3da5b4a8537_big_uint255, }}, {{ - 0x4d9a6d270696688eb4346153b380c613a3dcaf0fb5a1e8380409ae0a143d31b_cppui_modular255, - 0x2a805eee3317c8bae1f7d15abe4d27fee5fabcf9a3334d18b1932a33774c324_cppui_modular255, - 0x19b092e9c6dffd1eb1b6df2dbc00bb2283b9a787273dcbad9b8d89cd502b7bbd_cppui_modular255, + 0x4d9a6d270696688eb4346153b380c613a3dcaf0fb5a1e8380409ae0a143d31b_big_uint255, + 0x2a805eee3317c8bae1f7d15abe4d27fee5fabcf9a3334d18b1932a33774c324_big_uint255, + 0x19b092e9c6dffd1eb1b6df2dbc00bb2283b9a787273dcbad9b8d89cd502b7bbd_big_uint255, }}, }}; @@ -364,279 +364,279 @@ namespace nil { constexpr static const std::array, round_count> round_constants = {{ {{ - 0x590ef2a14ba3cef7e8f93a6dde4d481057d5d0547f6f09341b6b8be19c00ee6_cppui_modular255, - 0x77faa77ed78ff8b695859df34db5157f6b491567f5f382a8fce538f0e5ffe6f_cppui_modular255, - 0x3e54b7c94955c8994ed16ec9950d59aca4c9b6e419ef4935682528c2eba2de50_cppui_modular255, + 0x590ef2a14ba3cef7e8f93a6dde4d481057d5d0547f6f09341b6b8be19c00ee6_big_uint255, + 0x77faa77ed78ff8b695859df34db5157f6b491567f5f382a8fce538f0e5ffe6f_big_uint255, + 0x3e54b7c94955c8994ed16ec9950d59aca4c9b6e419ef4935682528c2eba2de50_big_uint255, }}, {{ - 0x37d991dc8d4de3912355745c7d78f8b04516b14d30e29324bb5dd075ca0f0c1d_cppui_modular255, - 0xc0614dd1cff6c6817aff09d82ef828e80caed4da023823088fd021020f81f0e_cppui_modular255, - 0x3335e335a3fed44842359528b3e88e1824a173da819d7ee6905e82eed054243_cppui_modular255, + 0x37d991dc8d4de3912355745c7d78f8b04516b14d30e29324bb5dd075ca0f0c1d_big_uint255, + 0xc0614dd1cff6c6817aff09d82ef828e80caed4da023823088fd021020f81f0e_big_uint255, + 0x3335e335a3fed44842359528b3e88e1824a173da819d7ee6905e82eed054243_big_uint255, }}, {{ - 0xb2202aa54d42f4f07693766723b9624c9fca4d33a2b9ee40f1c809a15a48a1d_cppui_modular255, - 0x290253e0e1d2c72b32a5b272137a0892b5934b0b8f26b4fc25ea00d63a70e9df_cppui_modular255, - 0x3e99873e73025d7c8b71fd209d13dba7a1021013f0815ea33a42ae94b63d00f3_cppui_modular255, + 0xb2202aa54d42f4f07693766723b9624c9fca4d33a2b9ee40f1c809a15a48a1d_big_uint255, + 0x290253e0e1d2c72b32a5b272137a0892b5934b0b8f26b4fc25ea00d63a70e9df_big_uint255, + 0x3e99873e73025d7c8b71fd209d13dba7a1021013f0815ea33a42ae94b63d00f3_big_uint255, }}, {{ - 0x164682f55ec314f639f5f8062a4ddf11ed80d5822591a22ff54f340d90165d85_cppui_modular255, - 0x309ba21093c9d04c81bd5273ad1064e1bd9067312d3269dddadf74c2eb1d3e01_cppui_modular255, - 0x159e72bb030cb8994b2eac1d4ee7d0f06b0b092e7611d460605b3d8c60a274d9_cppui_modular255, + 0x164682f55ec314f639f5f8062a4ddf11ed80d5822591a22ff54f340d90165d85_big_uint255, + 0x309ba21093c9d04c81bd5273ad1064e1bd9067312d3269dddadf74c2eb1d3e01_big_uint255, + 0x159e72bb030cb8994b2eac1d4ee7d0f06b0b092e7611d460605b3d8c60a274d9_big_uint255, }}, {{ - 0xd743dbfc6f3c833ce2ef4956bead3c118fd3198652038781903ac929218fdd6_cppui_modular255, - 0x18cb5a9230eb74045ede834ac6dd129bd2a0462dca1d96d167b9be0e1e96a688_cppui_modular255, - 0x2d82f85fc222b215902d61c85c968b39759d6c2e9aa0e11fd08881bfae311e66_cppui_modular255, + 0xd743dbfc6f3c833ce2ef4956bead3c118fd3198652038781903ac929218fdd6_big_uint255, + 0x18cb5a9230eb74045ede834ac6dd129bd2a0462dca1d96d167b9be0e1e96a688_big_uint255, + 0x2d82f85fc222b215902d61c85c968b39759d6c2e9aa0e11fd08881bfae311e66_big_uint255, }}, {{ - 0x2920828be5972cb8ff8023386a90a837bbfcca99be240137f7d211ecb72521e6_cppui_modular255, - 0x3101774e1c3d72d010efb29c16c476e988bdb47321af3f82e05cc9c6b0360853_cppui_modular255, - 0x327b4e6353c099e41a8ffab9103996b9d29d07da0f1a191aa6fb55c0720c6f54_cppui_modular255, + 0x2920828be5972cb8ff8023386a90a837bbfcca99be240137f7d211ecb72521e6_big_uint255, + 0x3101774e1c3d72d010efb29c16c476e988bdb47321af3f82e05cc9c6b0360853_big_uint255, + 0x327b4e6353c099e41a8ffab9103996b9d29d07da0f1a191aa6fb55c0720c6f54_big_uint255, }}, {{ - 0x71c29018dd48d5c557379ea9d4afd80b92788ed509ced6bac47a65ba8b475c_cppui_modular255, - 0x25efdeef6c5ad56834b24cfe03d57360b4335ec902c78ee9348ebaceab726038_cppui_modular255, - 0x109ffe5cd918fcd7da7fdb40d32ac406f453874fda431c35c9e35601bcf708e9_cppui_modular255, + 0x71c29018dd48d5c557379ea9d4afd80b92788ed509ced6bac47a65ba8b475c_big_uint255, + 0x25efdeef6c5ad56834b24cfe03d57360b4335ec902c78ee9348ebaceab726038_big_uint255, + 0x109ffe5cd918fcd7da7fdb40d32ac406f453874fda431c35c9e35601bcf708e9_big_uint255, }}, {{ - 0x1f4de5d78b4378e0eca49ed94999d8bc91489fadfd896c8affbaa6e2654d18bf_cppui_modular255, - 0x173185e1eaad0664ba1c01b8e417a4422c22a43d622c5df98c11481e205e499e_cppui_modular255, - 0x161a0e8b31a6fd42727dc0a37ae4f715683af35873bd37e78e10abcb0e21fabd_cppui_modular255, + 0x1f4de5d78b4378e0eca49ed94999d8bc91489fadfd896c8affbaa6e2654d18bf_big_uint255, + 0x173185e1eaad0664ba1c01b8e417a4422c22a43d622c5df98c11481e205e499e_big_uint255, + 0x161a0e8b31a6fd42727dc0a37ae4f715683af35873bd37e78e10abcb0e21fabd_big_uint255, }}, {{ - 0x3decab3f42934acc644cc227315ecd6bcee79e5d92dc686823f60e6a3c40a7cd_cppui_modular255, - 0x29d7541d2a4fcdf9c7f144ce1e957a5e5c6d5d064618416817d0ad39708b2807_cppui_modular255, - 0x1d0525558685977d321fe86c05f462ae2e569e6d202bd5c62b0815320454114a_cppui_modular255, + 0x3decab3f42934acc644cc227315ecd6bcee79e5d92dc686823f60e6a3c40a7cd_big_uint255, + 0x29d7541d2a4fcdf9c7f144ce1e957a5e5c6d5d064618416817d0ad39708b2807_big_uint255, + 0x1d0525558685977d321fe86c05f462ae2e569e6d202bd5c62b0815320454114a_big_uint255, }}, {{ - 0x27d1aec0ccc80f71d09d2a9c0b76ee5fe9a87516f0e691a9f5fba360cb79f32_cppui_modular255, - 0x1c28ed68159e54df8296e654b0c1b5872de41557b7b02adc256dcc1600229ba8_cppui_modular255, - 0x15c9cbe29bf4e7d8bae22dd2213c86724e9944ea4b9e34b6681beb1b0972215e_cppui_modular255, + 0x27d1aec0ccc80f71d09d2a9c0b76ee5fe9a87516f0e691a9f5fba360cb79f32_big_uint255, + 0x1c28ed68159e54df8296e654b0c1b5872de41557b7b02adc256dcc1600229ba8_big_uint255, + 0x15c9cbe29bf4e7d8bae22dd2213c86724e9944ea4b9e34b6681beb1b0972215e_big_uint255, }}, {{ - 0xd479e19db4686f5cb1ef9a8331a1ab680c5d3770e9a9a8a7a6ac58f8006c38a_cppui_modular255, - 0x3494f6ecf12d5c3d758c5380652154e26f7f3c888d362ea512da8dc265fc32b0_cppui_modular255, - 0x37ed9343bcc46adb4300f3d8cb88c311383061710836351ded0a146de837966_cppui_modular255, + 0xd479e19db4686f5cb1ef9a8331a1ab680c5d3770e9a9a8a7a6ac58f8006c38a_big_uint255, + 0x3494f6ecf12d5c3d758c5380652154e26f7f3c888d362ea512da8dc265fc32b0_big_uint255, + 0x37ed9343bcc46adb4300f3d8cb88c311383061710836351ded0a146de837966_big_uint255, }}, {{ - 0x35548be14e1cbcbd7d2c0e8c4a95e5fc2893daba34197ef41c350ae7072cde4e_cppui_modular255, - 0x34e58327efe8d41b81b66b6c3fad424b2ff9008392909bb90eb10f08462b998b_cppui_modular255, - 0xf55c1223abf50500c4ac4103f679dcfea4eebb368cf64ef3a63ee27146846f_cppui_modular255, + 0x35548be14e1cbcbd7d2c0e8c4a95e5fc2893daba34197ef41c350ae7072cde4e_big_uint255, + 0x34e58327efe8d41b81b66b6c3fad424b2ff9008392909bb90eb10f08462b998b_big_uint255, + 0xf55c1223abf50500c4ac4103f679dcfea4eebb368cf64ef3a63ee27146846f_big_uint255, }}, {{ - 0x11dd4ab1734f7069498cc390a41b7de375d8968cec91b5c74cef9812e8ee7ce7_cppui_modular255, - 0x1e344f255d7c5e537439e75f9c4ea64dd1fda1b0988e5c83626055859369b43c_cppui_modular255, - 0x147db9afad2d2f7c4249357587faba99a6a38da16fe9ba74ef2f3fc5a0878f44_cppui_modular255, + 0x11dd4ab1734f7069498cc390a41b7de375d8968cec91b5c74cef9812e8ee7ce7_big_uint255, + 0x1e344f255d7c5e537439e75f9c4ea64dd1fda1b0988e5c83626055859369b43c_big_uint255, + 0x147db9afad2d2f7c4249357587faba99a6a38da16fe9ba74ef2f3fc5a0878f44_big_uint255, }}, {{ - 0x31774ce29d00f566bd499f181517df231be7205c05e7527d71a1c89cb0e841a7_cppui_modular255, - 0x32bdf60a6685665871f654169996f508be8710c99f3fa6f44a7bc4d2c25fbfd8_cppui_modular255, - 0x2f567f84ec13720611900c4b9e8303f04c8cc5c57daa4d95d9ee009514205e65_cppui_modular255, + 0x31774ce29d00f566bd499f181517df231be7205c05e7527d71a1c89cb0e841a7_big_uint255, + 0x32bdf60a6685665871f654169996f508be8710c99f3fa6f44a7bc4d2c25fbfd8_big_uint255, + 0x2f567f84ec13720611900c4b9e8303f04c8cc5c57daa4d95d9ee009514205e65_big_uint255, }}, {{ - 0x2dbd279621e591da57f54459f4160dde2f5c78e478d20f2f4763832e013bc07f_cppui_modular255, - 0x1275fb5ba53b7d2b5322e63f09a48026d684369c8e12241a808085a78ab3a369_cppui_modular255, - 0x1dd0beba925fe1df13f732b03287cad943569d62ec9059afc2c8120655e97d78_cppui_modular255, + 0x2dbd279621e591da57f54459f4160dde2f5c78e478d20f2f4763832e013bc07f_big_uint255, + 0x1275fb5ba53b7d2b5322e63f09a48026d684369c8e12241a808085a78ab3a369_big_uint255, + 0x1dd0beba925fe1df13f732b03287cad943569d62ec9059afc2c8120655e97d78_big_uint255, }}, {{ - 0xa37d78e392a5c8441f98e9dbd51a9151e78fb877885ecb885b0834c50cfea4d_cppui_modular255, - 0x1ebb7e2592122cd16d27e13410b2b48d520d8e99d38c1d86af0ac13565dfeb88_cppui_modular255, - 0x24a6454b0a69c59916d64f532b56226f8d49969432b7d0efc675f599c3bdb64f_cppui_modular255, + 0xa37d78e392a5c8441f98e9dbd51a9151e78fb877885ecb885b0834c50cfea4d_big_uint255, + 0x1ebb7e2592122cd16d27e13410b2b48d520d8e99d38c1d86af0ac13565dfeb88_big_uint255, + 0x24a6454b0a69c59916d64f532b56226f8d49969432b7d0efc675f599c3bdb64f_big_uint255, }}, {{ - 0x269668b3e7835df2f85b82e9ef8647c43205e799135ce669256bf55f07448209_cppui_modular255, - 0x15c87375d4514bbdddbfd84e51f246446f1b16bb58bd4bd9fa2ff57e6aa66057_cppui_modular255, - 0x11ce62bbe1242334c260a67817be908a9422d9b9c6ee96c00772fcc8fc501db6_cppui_modular255, + 0x269668b3e7835df2f85b82e9ef8647c43205e799135ce669256bf55f07448209_big_uint255, + 0x15c87375d4514bbdddbfd84e51f246446f1b16bb58bd4bd9fa2ff57e6aa66057_big_uint255, + 0x11ce62bbe1242334c260a67817be908a9422d9b9c6ee96c00772fcc8fc501db6_big_uint255, }}, {{ - 0x20348b7d6b381bfd3ac923d60b965086d281d8a654ad5f3210d277789641fe98_cppui_modular255, - 0x1398d090fd1144d1e84798e3a0efa942abfe650947e4a3cfa409ff14b541fae9_cppui_modular255, - 0x2461a1a2d6e3a0b2e5185ae6c844fe2a3b2d85dfb1cf891efc79ae80dd776bed_cppui_modular255, + 0x20348b7d6b381bfd3ac923d60b965086d281d8a654ad5f3210d277789641fe98_big_uint255, + 0x1398d090fd1144d1e84798e3a0efa942abfe650947e4a3cfa409ff14b541fae9_big_uint255, + 0x2461a1a2d6e3a0b2e5185ae6c844fe2a3b2d85dfb1cf891efc79ae80dd776bed_big_uint255, }}, {{ - 0x3e1f1de94c4af008188ba5eaef1da9ab9792ce54eda56bb5a519a65cd808885b_cppui_modular255, - 0x1dee6ead07fbc0fe883f4d397994d75ba3c4f90720e74ae2da13066bc3a7dc3b_cppui_modular255, - 0x287d06396bcb63555cb2ff408ea075cf402b10a3c608043d0cf2e3685ec6e2ad_cppui_modular255, + 0x3e1f1de94c4af008188ba5eaef1da9ab9792ce54eda56bb5a519a65cd808885b_big_uint255, + 0x1dee6ead07fbc0fe883f4d397994d75ba3c4f90720e74ae2da13066bc3a7dc3b_big_uint255, + 0x287d06396bcb63555cb2ff408ea075cf402b10a3c608043d0cf2e3685ec6e2ad_big_uint255, }}, {{ - 0x36d84c953d584607478da6183dc4da71bdbf737d45fb57d5a53badc123ae071c_cppui_modular255, - 0x24c8fd13d2687a9f90c61da26823d4934b350cfa488d528482399e106a70ac74_cppui_modular255, - 0x52e052a6a493457c9476ccc4fd9924e5c7247b98e58a3cfa688c0f8314bea68_cppui_modular255, + 0x36d84c953d584607478da6183dc4da71bdbf737d45fb57d5a53badc123ae071c_big_uint255, + 0x24c8fd13d2687a9f90c61da26823d4934b350cfa488d528482399e106a70ac74_big_uint255, + 0x52e052a6a493457c9476ccc4fd9924e5c7247b98e58a3cfa688c0f8314bea68_big_uint255, }}, {{ - 0x2fd32bae8a40ab498f6ba290733bb82504de1be782c1cdf039e2fbc843a01e52_cppui_modular255, - 0x4e8e7d3413c8c8ccfe154dc51f31c7682627c71fa4b50daab27f2a4d2623ea6_cppui_modular255, - 0x20c16d0097cebeb385508b606487baaf3bad515ba8a0b977f15cb50239418e38_cppui_modular255, + 0x2fd32bae8a40ab498f6ba290733bb82504de1be782c1cdf039e2fbc843a01e52_big_uint255, + 0x4e8e7d3413c8c8ccfe154dc51f31c7682627c71fa4b50daab27f2a4d2623ea6_big_uint255, + 0x20c16d0097cebeb385508b606487baaf3bad515ba8a0b977f15cb50239418e38_big_uint255, }}, {{ - 0x34f1df6035aac75204368125b0c4cec107e2f9eb0005517d26d6113e1f366271_cppui_modular255, - 0x375973b59ed7b4bdb33642d20e6364f37a942f9018f6bca5abc10705481425e0_cppui_modular255, - 0x269e8c978803e51d43439b7c18c4260e819e09e7d8c8d38706463bbb811c698c_cppui_modular255, + 0x34f1df6035aac75204368125b0c4cec107e2f9eb0005517d26d6113e1f366271_big_uint255, + 0x375973b59ed7b4bdb33642d20e6364f37a942f9018f6bca5abc10705481425e0_big_uint255, + 0x269e8c978803e51d43439b7c18c4260e819e09e7d8c8d38706463bbb811c698c_big_uint255, }}, {{ - 0x21be1913f874f3edb88a1f60cd157fcb76ff20b4eb139aae205b5a2764098782_cppui_modular255, - 0x37a0a8ba83db884f721c25027d188c7ab7c7840b7860675b33e1c93e4023927f_cppui_modular255, - 0x56d0e67fde779b7be5f308a3ce119e23e0503e6dabdbbd5189bb44dc6a6f0a4_cppui_modular255, + 0x21be1913f874f3edb88a1f60cd157fcb76ff20b4eb139aae205b5a2764098782_big_uint255, + 0x37a0a8ba83db884f721c25027d188c7ab7c7840b7860675b33e1c93e4023927f_big_uint255, + 0x56d0e67fde779b7be5f308a3ce119e23e0503e6dabdbbd5189bb44dc6a6f0a4_big_uint255, }}, {{ - 0x144723436a329da5644cce96fee4952b066092c36bd12838b4ffd4283cfe82c4_cppui_modular255, - 0xec0b5f14ba50aa2b022d06fbb920a2aafb465b8c7f81fc119371a4cbb6acff7_cppui_modular255, - 0x685de18d9a346a35c44a2a4ac7283d6fe2e4a9dc058bd537700bc2495271721_cppui_modular255, + 0x144723436a329da5644cce96fee4952b066092c36bd12838b4ffd4283cfe82c4_big_uint255, + 0xec0b5f14ba50aa2b022d06fbb920a2aafb465b8c7f81fc119371a4cbb6acff7_big_uint255, + 0x685de18d9a346a35c44a2a4ac7283d6fe2e4a9dc058bd537700bc2495271721_big_uint255, }}, {{ - 0x178dcb74b546adea41afd5d93ef564cb3adb0ef5200201daea0faa5026bb8cbc_cppui_modular255, - 0x1c1dcb1ef6cf5f036ae0030bf78f1643c439843959dd74fa28ea3663735cc923_cppui_modular255, - 0xcfae6c99994c5f702cba3b32a4e38f3764207bfe7cd9bf577633b41843ea138_cppui_modular255, + 0x178dcb74b546adea41afd5d93ef564cb3adb0ef5200201daea0faa5026bb8cbc_big_uint255, + 0x1c1dcb1ef6cf5f036ae0030bf78f1643c439843959dd74fa28ea3663735cc923_big_uint255, + 0xcfae6c99994c5f702cba3b32a4e38f3764207bfe7cd9bf577633b41843ea138_big_uint255, }}, {{ - 0x2838a02558716d2b49c06fb34c49cd820ec71e861caa935f4a303e42030ae3df_cppui_modular255, - 0x2c1944f3ec2852ed6b50fbc4abbc8f284797b36a23b321d2763ef48b1a5a0212_cppui_modular255, - 0x30a218acd109f04657954e82f9faccc477731f4a954cf8ac12d15ebd450e9dcb_cppui_modular255, + 0x2838a02558716d2b49c06fb34c49cd820ec71e861caa935f4a303e42030ae3df_big_uint255, + 0x2c1944f3ec2852ed6b50fbc4abbc8f284797b36a23b321d2763ef48b1a5a0212_big_uint255, + 0x30a218acd109f04657954e82f9faccc477731f4a954cf8ac12d15ebd450e9dcb_big_uint255, }}, {{ - 0x2488defa4553fa5bd5afbb5fd28a1e99c585c5f541c6242e702215b2212c1d23_cppui_modular255, - 0x3d0c9d7282245c776daa1655697fa879e470a26fcbb3bea62fa8ff32a4f04e50_cppui_modular255, - 0x33aac46524f32f3556ed16a0912ef27482c2afcacbfb99ced98394b6c0e3765f_cppui_modular255, + 0x2488defa4553fa5bd5afbb5fd28a1e99c585c5f541c6242e702215b2212c1d23_big_uint255, + 0x3d0c9d7282245c776daa1655697fa879e470a26fcbb3bea62fa8ff32a4f04e50_big_uint255, + 0x33aac46524f32f3556ed16a0912ef27482c2afcacbfb99ced98394b6c0e3765f_big_uint255, }}, {{ - 0x1858a5f543ab0a70cb3957e0884b146b42cc3863fba4e034145ab09cc77d428d_cppui_modular255, - 0x2d9d6fae68eff2e79396617207e28dba3d793b1e3739d30e9e9b10644e9f99cd_cppui_modular255, - 0x1747fab074b37cc1ca7dbf7d6dc136740f5d26e30319b3577fc8987f1247caae_cppui_modular255, + 0x1858a5f543ab0a70cb3957e0884b146b42cc3863fba4e034145ab09cc77d428d_big_uint255, + 0x2d9d6fae68eff2e79396617207e28dba3d793b1e3739d30e9e9b10644e9f99cd_big_uint255, + 0x1747fab074b37cc1ca7dbf7d6dc136740f5d26e30319b3577fc8987f1247caae_big_uint255, }}, {{ - 0x38f905db5128f24e498e36a84df5a58ed3c0b0ed8f39336eb792cb634f86b87_cppui_modular255, - 0xfffe42ce4a87a0b3a9ebe7eedf16c0cdb29c959b6e594faa69c0727c6e825f_cppui_modular255, - 0x314c3090cd0a465da95afd515c0771703e4ee2a8eabe8fa405daf8bd49bce458_cppui_modular255, + 0x38f905db5128f24e498e36a84df5a58ed3c0b0ed8f39336eb792cb634f86b87_big_uint255, + 0xfffe42ce4a87a0b3a9ebe7eedf16c0cdb29c959b6e594faa69c0727c6e825f_big_uint255, + 0x314c3090cd0a465da95afd515c0771703e4ee2a8eabe8fa405daf8bd49bce458_big_uint255, }}, {{ - 0x3e5fb71d9071c658c39fe64392e90bac65bdaf8f723b6790cce7dd7440ce06aa_cppui_modular255, - 0x3e9fe7b8fd0aaa379fa7be0dbd64309607cc5b00474ef6670370e631902e98cd_cppui_modular255, - 0x33ee4f76ff95bd735ec602ee6f4d1664caec27a7c435ead3b4c8df6cb51f010e_cppui_modular255, + 0x3e5fb71d9071c658c39fe64392e90bac65bdaf8f723b6790cce7dd7440ce06aa_big_uint255, + 0x3e9fe7b8fd0aaa379fa7be0dbd64309607cc5b00474ef6670370e631902e98cd_big_uint255, + 0x33ee4f76ff95bd735ec602ee6f4d1664caec27a7c435ead3b4c8df6cb51f010e_big_uint255, }}, {{ - 0x1670c2080f2965bed3f49db0b63aef5f562b347235645b921c0132b01cc82130_cppui_modular255, - 0x210565224e2ee64dd479be3a969dc30c65933352ba9b2271a0942bf1bf485743_cppui_modular255, - 0x9a7c6dd48dfbf50b13055b30fe85f934be9518b8af074b88f9de4b1df689616_cppui_modular255, + 0x1670c2080f2965bed3f49db0b63aef5f562b347235645b921c0132b01cc82130_big_uint255, + 0x210565224e2ee64dd479be3a969dc30c65933352ba9b2271a0942bf1bf485743_big_uint255, + 0x9a7c6dd48dfbf50b13055b30fe85f934be9518b8af074b88f9de4b1df689616_big_uint255, }}, {{ - 0x1f9116811eaadf677e6cb50fb59ce0fab11fa9f0ddf1432403610e1932a7aa1c_cppui_modular255, - 0x19b51a48c225daf9b34611ccc5ba077ebbc0a19cfc9bbbd78ade11cfa655075f_cppui_modular255, - 0x3286d29eb60c3d6204eb534d13f40d1af6364f0fe1622a12ba5fa069886f31fe_cppui_modular255, + 0x1f9116811eaadf677e6cb50fb59ce0fab11fa9f0ddf1432403610e1932a7aa1c_big_uint255, + 0x19b51a48c225daf9b34611ccc5ba077ebbc0a19cfc9bbbd78ade11cfa655075f_big_uint255, + 0x3286d29eb60c3d6204eb534d13f40d1af6364f0fe1622a12ba5fa069886f31fe_big_uint255, }}, {{ - 0x9bd403d05db137ea793f10b6dd087a74a78c9b01bcd6f9daf39af2ef57d346e_cppui_modular255, - 0x3a71654023e43363e60889eac50eb1f17c044606886771eaaf851bb2d00b3aeb_cppui_modular255, - 0x3415b94f62c59466f102442b4bae7d6bb348987154cce16bd187525a6fb5b443_cppui_modular255, + 0x9bd403d05db137ea793f10b6dd087a74a78c9b01bcd6f9daf39af2ef57d346e_big_uint255, + 0x3a71654023e43363e60889eac50eb1f17c044606886771eaaf851bb2d00b3aeb_big_uint255, + 0x3415b94f62c59466f102442b4bae7d6bb348987154cce16bd187525a6fb5b443_big_uint255, }}, {{ - 0x3ca35f0fc660092b81f15dd6f0b3d17a16a053480ef2f935fce806dd0d9a3466_cppui_modular255, - 0x26e1360af7fdc62e9be08651c2c5900ed5aefcb0d84b3aa88e354c6658a07863_cppui_modular255, - 0x30d05884174d7a1de9d34c89224d17f3b9dbdfb0793b54c0d2aaaeedcc357bd6_cppui_modular255, + 0x3ca35f0fc660092b81f15dd6f0b3d17a16a053480ef2f935fce806dd0d9a3466_big_uint255, + 0x26e1360af7fdc62e9be08651c2c5900ed5aefcb0d84b3aa88e354c6658a07863_big_uint255, + 0x30d05884174d7a1de9d34c89224d17f3b9dbdfb0793b54c0d2aaaeedcc357bd6_big_uint255, }}, {{ - 0x2c7f66f8b0580236f025dd626520049a09e1bfff0e5fd9f69cbc70daf0ac56c4_cppui_modular255, - 0xc5cb9a350d2dc463dd05dbd696e122c6917b76654180c323937dee44c6beb93_cppui_modular255, - 0x14d4d799d43d91b4d09d9c2bfdc13a64b48d18750503324361f9bf7267ec9b92_cppui_modular255, + 0x2c7f66f8b0580236f025dd626520049a09e1bfff0e5fd9f69cbc70daf0ac56c4_big_uint255, + 0xc5cb9a350d2dc463dd05dbd696e122c6917b76654180c323937dee44c6beb93_big_uint255, + 0x14d4d799d43d91b4d09d9c2bfdc13a64b48d18750503324361f9bf7267ec9b92_big_uint255, }}, {{ - 0x60c56a884cd6a1d3514f2895816b84e7160df5106e8d031710769be1ac5c04c_cppui_modular255, - 0x23e15f37c21266c86ead998a46e42f6e97fbd5d1c384f51d8b54d051a80d753d_cppui_modular255, - 0x25eb2911034ab6bef4a969653f5cc33e6914b8b6411f064ec01bcf157fea4e55_cppui_modular255, + 0x60c56a884cd6a1d3514f2895816b84e7160df5106e8d031710769be1ac5c04c_big_uint255, + 0x23e15f37c21266c86ead998a46e42f6e97fbd5d1c384f51d8b54d051a80d753d_big_uint255, + 0x25eb2911034ab6bef4a969653f5cc33e6914b8b6411f064ec01bcf157fea4e55_big_uint255, }}, {{ - 0x1e95c04c5057abd1b43a2fbc942b2391d0e0daef873838b3494e6d5fb067a117_cppui_modular255, - 0x1547602fc83558aa1327221fd220fa22bcb1f6ec42edb7cc05eff508c65883cb_cppui_modular255, - 0x16b669eac31e72a9e739fb03fd7ea3882fc5791b157143929ae12fc2fefe8b3d_cppui_modular255, + 0x1e95c04c5057abd1b43a2fbc942b2391d0e0daef873838b3494e6d5fb067a117_big_uint255, + 0x1547602fc83558aa1327221fd220fa22bcb1f6ec42edb7cc05eff508c65883cb_big_uint255, + 0x16b669eac31e72a9e739fb03fd7ea3882fc5791b157143929ae12fc2fefe8b3d_big_uint255, }}, {{ - 0x7034f4e251a65c4423479dc9d5287a341c108e0b56e29a391f9a07a0ca822f1_cppui_modular255, - 0x3fdf9d5731ba040dc568e61b8571ea95ead2e89f0a9856b2d12a7e87e43f5683_cppui_modular255, - 0x33f2cdf6960139a0fb4a3a8127992e2abbd42847728425228a35ee72bd5b01c7_cppui_modular255, + 0x7034f4e251a65c4423479dc9d5287a341c108e0b56e29a391f9a07a0ca822f1_big_uint255, + 0x3fdf9d5731ba040dc568e61b8571ea95ead2e89f0a9856b2d12a7e87e43f5683_big_uint255, + 0x33f2cdf6960139a0fb4a3a8127992e2abbd42847728425228a35ee72bd5b01c7_big_uint255, }}, {{ - 0x35616d55033d8fc092398f6c58bfc6eaaf2ec9dd500122516f489dbc631457b_cppui_modular255, - 0x1eca80189643df1473e98da93fe58a9576def0d192d4153faebcd1b210c1603f_cppui_modular255, - 0x26223ca4af2d8d878ca5530c3e67ff1c95b50b9c5b8295e19150bc31ef90ba98_cppui_modular255, + 0x35616d55033d8fc092398f6c58bfc6eaaf2ec9dd500122516f489dbc631457b_big_uint255, + 0x1eca80189643df1473e98da93fe58a9576def0d192d4153faebcd1b210c1603f_big_uint255, + 0x26223ca4af2d8d878ca5530c3e67ff1c95b50b9c5b8295e19150bc31ef90ba98_big_uint255, }}, {{ - 0x19180fa5facb64ee9b4827ccd766622adf12fe80ab17c7395075368e10a2a361_cppui_modular255, - 0x169f165855e097501f25d6b3aae815ce6e8a1c289850936d956657f0ed99446_cppui_modular255, - 0x363a8f891de5974f06bae043bc6a26b4518d217af6590e9318e325fb215cda00_cppui_modular255, + 0x19180fa5facb64ee9b4827ccd766622adf12fe80ab17c7395075368e10a2a361_big_uint255, + 0x169f165855e097501f25d6b3aae815ce6e8a1c289850936d956657f0ed99446_big_uint255, + 0x363a8f891de5974f06bae043bc6a26b4518d217af6590e9318e325fb215cda00_big_uint255, }}, {{ - 0x122aaa7c330ddcb57180749e659600a4dfac5dda7b9b68ab0f8b2ee6de350ced_cppui_modular255, - 0xed203defca13ebdf6af805a9f5dbdfef90007df2ad32fb1c83165e837ab5e3f_cppui_modular255, - 0x11cce94bbc7a96e9708e99d3666c0a275329ac4bff42634a5f989ddcfc28fd68_cppui_modular255, + 0x122aaa7c330ddcb57180749e659600a4dfac5dda7b9b68ab0f8b2ee6de350ced_big_uint255, + 0xed203defca13ebdf6af805a9f5dbdfef90007df2ad32fb1c83165e837ab5e3f_big_uint255, + 0x11cce94bbc7a96e9708e99d3666c0a275329ac4bff42634a5f989ddcfc28fd68_big_uint255, }}, {{ - 0x1705663587a03cb11485ac9d01fd10cb1138be1820d26a14e4ab7b1c0fdec8d2_cppui_modular255, - 0x12ad28a60485a2d911639051971f43dd15a0dfd2f8a0de756f0c847fed63ed7d_cppui_modular255, - 0xa9e61cc35eba9374eea117753aaaa93d6b29f550c2c54bce0a6078e05db9475_cppui_modular255, + 0x1705663587a03cb11485ac9d01fd10cb1138be1820d26a14e4ab7b1c0fdec8d2_big_uint255, + 0x12ad28a60485a2d911639051971f43dd15a0dfd2f8a0de756f0c847fed63ed7d_big_uint255, + 0xa9e61cc35eba9374eea117753aaaa93d6b29f550c2c54bce0a6078e05db9475_big_uint255, }}, {{ - 0x72c3d62cf006a95dc8b2a53f878bb26fcaf3c28d709a91634f3a09f525054ad_cppui_modular255, - 0x1ce8f168b446f7e797b91677fc46a975d2caa63dc359132c7c9729f5be24a7c_cppui_modular255, - 0xe846a7211efda3d8115b5bf76aab7eac2b6099026fc7504fb81ac4a77c5560d_cppui_modular255, + 0x72c3d62cf006a95dc8b2a53f878bb26fcaf3c28d709a91634f3a09f525054ad_big_uint255, + 0x1ce8f168b446f7e797b91677fc46a975d2caa63dc359132c7c9729f5be24a7c_big_uint255, + 0xe846a7211efda3d8115b5bf76aab7eac2b6099026fc7504fb81ac4a77c5560d_big_uint255, }}, {{ - 0xabb8fd9d6fa3772022fa88800c12bdcbb1234473022cd141213d452255a0f55_cppui_modular255, - 0x1c5d9938bc35a4832e8375dc307dba7a116d2a566e406ab31e8b03a36ec807cf_cppui_modular255, - 0x35bea7ac6f40e0f50f08d325be9f051fd75ada8c03461f4d15b2c5e1a3d72431_cppui_modular255, + 0xabb8fd9d6fa3772022fa88800c12bdcbb1234473022cd141213d452255a0f55_big_uint255, + 0x1c5d9938bc35a4832e8375dc307dba7a116d2a566e406ab31e8b03a36ec807cf_big_uint255, + 0x35bea7ac6f40e0f50f08d325be9f051fd75ada8c03461f4d15b2c5e1a3d72431_big_uint255, }}, {{ - 0x419357c205a7e1e028c0f49cbdeab85b82f4db78f1afb1b5568ec1bd2e48cb0_cppui_modular255, - 0x1933e424c788e7466a159f1fe015ac7210f47044d9df6872cdfa227ae4d2190a_cppui_modular255, - 0xde27ccdda95abb3d98db76d6f7f152a08d37ba81758beaf2eddbc58d13e560f_cppui_modular255, + 0x419357c205a7e1e028c0f49cbdeab85b82f4db78f1afb1b5568ec1bd2e48cb0_big_uint255, + 0x1933e424c788e7466a159f1fe015ac7210f47044d9df6872cdfa227ae4d2190a_big_uint255, + 0xde27ccdda95abb3d98db76d6f7f152a08d37ba81758beaf2eddbc58d13e560f_big_uint255, }}, {{ - 0x35a312d5d6cbf00d55f097febaf9bd5eac5f2881ebf0afa377e2ba7cdcf2f51_cppui_modular255, - 0xce6f415449ca515e4da9177527c9242adcc988de5e1846d07cdd5284f39f9d0_cppui_modular255, - 0x38fd71543da5c4c0447dc22aa2c1e3744cb84eb1ff17040640b50f5ddf8c8e61_cppui_modular255, + 0x35a312d5d6cbf00d55f097febaf9bd5eac5f2881ebf0afa377e2ba7cdcf2f51_big_uint255, + 0xce6f415449ca515e4da9177527c9242adcc988de5e1846d07cdd5284f39f9d0_big_uint255, + 0x38fd71543da5c4c0447dc22aa2c1e3744cb84eb1ff17040640b50f5ddf8c8e61_big_uint255, }}, {{ - 0x158de859aad53c6a17de455ab067a09ad6cba22f4101d19e77d8a2975c0dc965_cppui_modular255, - 0x2c300588eeae8cbc3814bd1d7646f472ef6b44a60c710bf6100937504e532c8b_cppui_modular255, - 0xb198cf742a029409ac02397b91e2704fa94ecf147909fa8d71ece5087e2cfc3_cppui_modular255, + 0x158de859aad53c6a17de455ab067a09ad6cba22f4101d19e77d8a2975c0dc965_big_uint255, + 0x2c300588eeae8cbc3814bd1d7646f472ef6b44a60c710bf6100937504e532c8b_big_uint255, + 0xb198cf742a029409ac02397b91e2704fa94ecf147909fa8d71ece5087e2cfc3_big_uint255, }}, {{ - 0x100b375c21d357d5679d8e6d9eb7bff8edd4575535bf651ba0b1bd83cfb54598_cppui_modular255, - 0x15a474d44590e2b23b8bb1e79f5613f1659e7ae2bce10def0ce1a101eb3e3ce5_cppui_modular255, - 0x2aa20e6642a989e1e6f9814c24f022991c23a7e40af505d4b931079025b7ed4d_cppui_modular255, + 0x100b375c21d357d5679d8e6d9eb7bff8edd4575535bf651ba0b1bd83cfb54598_big_uint255, + 0x15a474d44590e2b23b8bb1e79f5613f1659e7ae2bce10def0ce1a101eb3e3ce5_big_uint255, + 0x2aa20e6642a989e1e6f9814c24f022991c23a7e40af505d4b931079025b7ed4d_big_uint255, }}, {{ - 0x196597f2d65c5692706795bf46eb7be96b31647c23441213642ccceedc01ebc4_cppui_modular255, - 0x248291aa516daa0a6cd191c1c651a82f7d1b5f087dcb7cee91a27c488483e2bd_cppui_modular255, - 0x36c02b98ad2722b774aeb131b31bfd087c6a7f2d0a3faa40bd9899e5f270877f_cppui_modular255, + 0x196597f2d65c5692706795bf46eb7be96b31647c23441213642ccceedc01ebc4_big_uint255, + 0x248291aa516daa0a6cd191c1c651a82f7d1b5f087dcb7cee91a27c488483e2bd_big_uint255, + 0x36c02b98ad2722b774aeb131b31bfd087c6a7f2d0a3faa40bd9899e5f270877f_big_uint255, }}, {{ - 0x1240e06949a1ad92bd8ae90772b5d8505174182c87a23227aa74b7630dba4195_cppui_modular255, - 0x3b83f7e36f30939a78ec63cb2554aa0669a1bfc1b8b8714c6b8a3958beb6a163_cppui_modular255, - 0x1668b0582ce04f7f5b1e35e1b7cc3e05be23cc2c9e0be9436559193f2a8d102e_cppui_modular255, + 0x1240e06949a1ad92bd8ae90772b5d8505174182c87a23227aa74b7630dba4195_big_uint255, + 0x3b83f7e36f30939a78ec63cb2554aa0669a1bfc1b8b8714c6b8a3958beb6a163_big_uint255, + 0x1668b0582ce04f7f5b1e35e1b7cc3e05be23cc2c9e0be9436559193f2a8d102e_big_uint255, }}, {{ - 0x26d6a708e9464c85e9c7605e87fb96036fd1fe87379ac43ad560885582e4026d_cppui_modular255, - 0x594fccf1863993b43ad0a13c5fc7a53f59f7d622e7b206d425907243a69e62d_cppui_modular255, - 0x78e4c588b6ddd0fe7ed53a9f25b6ac3c2eac1c63faecc7e916f4d4599051940_cppui_modular255, + 0x26d6a708e9464c85e9c7605e87fb96036fd1fe87379ac43ad560885582e4026d_big_uint255, + 0x594fccf1863993b43ad0a13c5fc7a53f59f7d622e7b206d425907243a69e62d_big_uint255, + 0x78e4c588b6ddd0fe7ed53a9f25b6ac3c2eac1c63faecc7e916f4d4599051940_big_uint255, }}, {{ - 0xf44ea3e14c3e4849ee7a525fe77170b8658a6753680e269c9fd1d12932af69d_cppui_modular255, - 0x2e8567bc9e8e369bdf7748d6c7f677837c601455d4651a2f102b94ff1f951379_cppui_modular255, - 0x37c35b056171982cc7d74e6081fcac2f764f1fe30ee985db306a22b097d51bae_cppui_modular255, + 0xf44ea3e14c3e4849ee7a525fe77170b8658a6753680e269c9fd1d12932af69d_big_uint255, + 0x2e8567bc9e8e369bdf7748d6c7f677837c601455d4651a2f102b94ff1f951379_big_uint255, + 0x37c35b056171982cc7d74e6081fcac2f764f1fe30ee985db306a22b097d51bae_big_uint255, }}, {{ - 0x29dbcffd5b55d671c85ca42037ac5e64d2ef42d2704af47a20877e3a5e5f1d9d_cppui_modular255, - 0x201098422e054c1ddcc465411d002d2bc5a824e1c7f4f2ded9443c37bd04a520_cppui_modular255, - 0x7de32ed4c5143430ef43aef100f948ef859ab3793aa52640156f5e7d92cdc84_cppui_modular255, + 0x29dbcffd5b55d671c85ca42037ac5e64d2ef42d2704af47a20877e3a5e5f1d9d_big_uint255, + 0x201098422e054c1ddcc465411d002d2bc5a824e1c7f4f2ded9443c37bd04a520_big_uint255, + 0x7de32ed4c5143430ef43aef100f948ef859ab3793aa52640156f5e7d92cdc84_big_uint255, }}, {{ - 0x34e95adcc0c5c34fd38ab9246a04cc1029f678ba53c0f6fd27f8805094e36199_cppui_modular255, - 0x1d5faf157126c599232982356ca0ea7b81d875c01d842b5cd1998a5c470fa623_cppui_modular255, - 0x160a80176bd281e3fa9b82e44063cc7bf86eb81397e51e41fe4745e27c57e1d2_cppui_modular255, + 0x34e95adcc0c5c34fd38ab9246a04cc1029f678ba53c0f6fd27f8805094e36199_big_uint255, + 0x1d5faf157126c599232982356ca0ea7b81d875c01d842b5cd1998a5c470fa623_big_uint255, + 0x160a80176bd281e3fa9b82e44063cc7bf86eb81397e51e41fe4745e27c57e1d2_big_uint255, }}, {{ - 0x17ecc7f5deb148c542a22d02b098439724910a3bbd4903428c8fc680f31b2406_cppui_modular255, - 0x20a6aae17f822bc7035da3b8931896c82152346f2a43ab4e0029dbf0101b3d_cppui_modular255, - 0x9ea0ec10c0e77b9385a58ccd5ecc3c88b5bed58af72a6d87bb446e14fa7c8d6_cppui_modular255, + 0x17ecc7f5deb148c542a22d02b098439724910a3bbd4903428c8fc680f31b2406_big_uint255, + 0x20a6aae17f822bc7035da3b8931896c82152346f2a43ab4e0029dbf0101b3d_big_uint255, + 0x9ea0ec10c0e77b9385a58ccd5ecc3c88b5bed58af72a6d87bb446e14fa7c8d6_big_uint255, }}, }}; }; diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/original_constants.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/original_constants.hpp index c97b98195a..855bd25a35 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/original_constants.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/original_constants.hpp @@ -43,19 +43,19 @@ namespace nil { constexpr static const std::array, state_words> mds_matrix = {{ {{ - 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b_cppui_modular254, - 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0_cppui_modular254, - 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d_cppui_modular254 + 0x109b7f411ba0e4c9b2b70caf5c36a7b194be7c11ad24378bfedb68592ba8118b_big_uint254, + 0x16ed41e13bb9c0c66ae119424fddbcbc9314dc9fdbdeea55d6c64543dc4903e0_big_uint254, + 0x2b90bba00fca0589f617e7dcbfe82e0df706ab640ceb247b791a93b74e36736d_big_uint254 }}, {{ - 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771_cppui_modular254, - 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23_cppui_modular254, - 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa_cppui_modular254 + 0x2969f27eed31a480b9c36c764379dbca2cc8fdd1415c3dded62940bcde0bd771_big_uint254, + 0x2e2419f9ec02ec394c9871c832963dc1b89d743c8c7b964029b2311687b1fe23_big_uint254, + 0x101071f0032379b697315876690f053d148d4e109f5fb065c8aacc55a0f89bfa_big_uint254 }}, {{ - 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7_cppui_modular254, - 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911_cppui_modular254, - 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0_cppui_modular254 + 0x143021ec686a3f330d5f9e654638065ce6cd79e28c5b3753326244ee65a1b1a7_big_uint254, + 0x176cc029695ad02582a70eff08a6fd99d057e12e58e7d7b6b16cdfabc8ee2911_big_uint254, + 0x19a3fc0a56702bf417ba7fee3802593fa644470307043f7773279cd71d25d5e0_big_uint254 }} }}; #endif @@ -66,329 +66,329 @@ namespace nil { constexpr static const std::array, round_count> round_constants = {{ {{ - 0x0ee9a592ba9a9518d05986d656f40c2114c4993c11bb29938d21d47304cd8e6e_cppui_modular254, - 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864_cppui_modular254, - 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5_cppui_modular254 + 0x0ee9a592ba9a9518d05986d656f40c2114c4993c11bb29938d21d47304cd8e6e_big_uint254, + 0x00f1445235f2148c5986587169fc1bcd887b08d4d00868df5696fff40956e864_big_uint254, + 0x08dff3487e8ac99e1f29a058d0fa80b930c728730b7ab36ce879f3890ecf73f5_big_uint254 }}, {{ - 0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0_cppui_modular254, - 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2_cppui_modular254, - 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa_cppui_modular254 + 0x2f27be690fdaee46c3ce28f7532b13c856c35342c84bda6e20966310fadc01d0_big_uint254, + 0x2b2ae1acf68b7b8d2416bebf3d4f6234b763fe04b8043ee48b8327bebca16cf2_big_uint254, + 0x0319d062072bef7ecca5eac06f97d4d55952c175ab6b03eae64b44c7dbf11cfa_big_uint254 }}, {{ - 0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d_cppui_modular254, - 0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78_cppui_modular254, - 0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632_cppui_modular254 + 0x28813dcaebaeaa828a376df87af4a63bc8b7bf27ad49c6298ef7b387bf28526d_big_uint254, + 0x2727673b2ccbc903f181bf38e1c1d40d2033865200c352bc150928adddf9cb78_big_uint254, + 0x234ec45ca27727c2e74abd2b2a1494cd6efbd43e340587d6b8fb9e31e65cc632_big_uint254 }}, {{ - 0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428_cppui_modular254, - 0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6_cppui_modular254, - 0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c_cppui_modular254 + 0x15b52534031ae18f7f862cb2cf7cf760ab10a8150a337b1ccd99ff6e8797d428_big_uint254, + 0x0dc8fad6d9e4b35f5ed9a3d186b79ce38e0e8a8d1b58b132d701d4eecf68d1f6_big_uint254, + 0x1bcd95ffc211fbca600f705fad3fb567ea4eb378f62e1fec97805518a47e4d9c_big_uint254 }}, {{ - 0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559_cppui_modular254, - 0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6_cppui_modular254, - 0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705_cppui_modular254 + 0x10520b0ab721cadfe9eff81b016fc34dc76da36c2578937817cb978d069de559_big_uint254, + 0x1f6d48149b8e7f7d9b257d8ed5fbbaf42932498075fed0ace88a9eb81f5627f6_big_uint254, + 0x1d9655f652309014d29e00ef35a2089bfff8dc1c816f0dc9ca34bdb5460c8705_big_uint254 }}, {{ - 0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d_cppui_modular254, - 0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828_cppui_modular254, - 0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9_cppui_modular254 + 0x04df5a56ff95bcafb051f7b1cd43a99ba731ff67e47032058fe3d4185697cc7d_big_uint254, + 0x0672d995f8fff640151b3d290cedaf148690a10a8c8424a7f6ec282b6e4be828_big_uint254, + 0x099952b414884454b21200d7ffafdd5f0c9a9dcc06f2708e9fc1d8209b5c75b9_big_uint254 }}, {{ - 0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6_cppui_modular254, - 0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc_cppui_modular254, - 0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1_cppui_modular254 + 0x052cba2255dfd00c7c483143ba8d469448e43586a9b4cd9183fd0e843a6b9fa6_big_uint254, + 0x0b8badee690adb8eb0bd74712b7999af82de55707251ad7716077cb93c464ddc_big_uint254, + 0x119b1590f13307af5a1ee651020c07c749c15d60683a8050b963d0a8e4b2bdd1_big_uint254 }}, {{ - 0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09_cppui_modular254, - 0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565_cppui_modular254, - 0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9_cppui_modular254 + 0x03150b7cd6d5d17b2529d36be0f67b832c4acfc884ef4ee5ce15be0bfb4a8d09_big_uint254, + 0x2cc6182c5e14546e3cf1951f173912355374efb83d80898abe69cb317c9ea565_big_uint254, + 0x005032551e6378c450cfe129a404b3764218cadedac14e2b92d2cd73111bf0f9_big_uint254 }}, {{ - 0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5_cppui_modular254, - 0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280_cppui_modular254, - 0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b_cppui_modular254 + 0x233237e3289baa34bb147e972ebcb9516469c399fcc069fb88f9da2cc28276b5_big_uint254, + 0x05c8f4f4ebd4a6e3c980d31674bfbe6323037f21b34ae5a4e80c2d4c24d60280_big_uint254, + 0x0a7b1db13042d396ba05d818a319f25252bcf35ef3aeed91ee1f09b2590fc65b_big_uint254 }}, {{ - 0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0_cppui_modular254, - 0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460_cppui_modular254, - 0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0_cppui_modular254 + 0x2a73b71f9b210cf5b14296572c9d32dbf156e2b086ff47dc5df542365a404ec0_big_uint254, + 0x1ac9b0417abcc9a1935107e9ffc91dc3ec18f2c4dbe7f22976a760bb5c50c460_big_uint254, + 0x12c0339ae08374823fabb076707ef479269f3e4d6cb104349015ee046dc93fc0_big_uint254 }}, {{ - 0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e_cppui_modular254, - 0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448_cppui_modular254, - 0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f_cppui_modular254 + 0x0b7475b102a165ad7f5b18db4e1e704f52900aa3253baac68246682e56e9a28e_big_uint254, + 0x037c2849e191ca3edb1c5e49f6e8b8917c843e379366f2ea32ab3aa88d7f8448_big_uint254, + 0x05a6811f8556f014e92674661e217e9bd5206c5c93a07dc145fdb176a716346f_big_uint254 }}, {{ - 0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e_cppui_modular254, - 0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f_cppui_modular254, - 0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887_cppui_modular254 + 0x29a795e7d98028946e947b75d54e9f044076e87a7b2883b47b675ef5f38bd66e_big_uint254, + 0x20439a0c84b322eb45a3857afc18f5826e8c7382c8a1585c507be199981fd22f_big_uint254, + 0x2e0ba8d94d9ecf4a94ec2050c7371ff1bb50f27799a84b6d4a2a6f2a0982c887_big_uint254 }}, {{ - 0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8_cppui_modular254, - 0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1_cppui_modular254, - 0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53_cppui_modular254 + 0x143fd115ce08fb27ca38eb7cce822b4517822cd2109048d2e6d0ddcca17d71c8_big_uint254, + 0x0c64cbecb1c734b857968dbbdcf813cdf8611659323dbcbfc84323623be9caf1_big_uint254, + 0x028a305847c683f646fca925c163ff5ae74f348d62c2b670f1426cef9403da53_big_uint254 }}, {{ - 0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c_cppui_modular254, - 0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e_cppui_modular254, - 0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38_cppui_modular254 + 0x2e4ef510ff0b6fda5fa940ab4c4380f26a6bcb64d89427b824d6755b5db9e30c_big_uint254, + 0x0081c95bc43384e663d79270c956ce3b8925b4f6d033b078b96384f50579400e_big_uint254, + 0x2ed5f0c91cbd9749187e2fade687e05ee2491b349c039a0bba8a9f4023a0bb38_big_uint254 }}, {{ - 0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206_cppui_modular254, - 0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad_cppui_modular254, - 0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c_cppui_modular254 + 0x30509991f88da3504bbf374ed5aae2f03448a22c76234c8c990f01f33a735206_big_uint254, + 0x1c3f20fd55409a53221b7c4d49a356b9f0a1119fb2067b41a7529094424ec6ad_big_uint254, + 0x10b4e7f3ab5df003049514459b6e18eec46bb2213e8e131e170887b47ddcb96c_big_uint254 }}, {{ - 0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef_cppui_modular254, - 0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91_cppui_modular254, - 0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0_cppui_modular254 + 0x2a1982979c3ff7f43ddd543d891c2abddd80f804c077d775039aa3502e43adef_big_uint254, + 0x1c74ee64f15e1db6feddbead56d6d55dba431ebc396c9af95cad0f1315bd5c91_big_uint254, + 0x07533ec850ba7f98eab9303cace01b4b9e4f2e8b82708cfa9c2fe45a0ae146a0_big_uint254 }}, {{ - 0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750_cppui_modular254, - 0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e_cppui_modular254, - 0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e_cppui_modular254 + 0x21576b438e500449a151e4eeaf17b154285c68f42d42c1808a11abf3764c0750_big_uint254, + 0x2f17c0559b8fe79608ad5ca193d62f10bce8384c815f0906743d6930836d4a9e_big_uint254, + 0x2d477e3862d07708a79e8aae946170bc9775a4201318474ae665b0b1b7e2730e_big_uint254 }}, {{ - 0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab_cppui_modular254, - 0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311_cppui_modular254, - 0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a_cppui_modular254 + 0x162f5243967064c390e095577984f291afba2266c38f5abcd89be0f5b2747eab_big_uint254, + 0x2b4cb233ede9ba48264ecd2c8ae50d1ad7a8596a87f29f8a7777a70092393311_big_uint254, + 0x2c8fbcb2dd8573dc1dbaf8f4622854776db2eece6d85c4cf4254e7c35e03b07a_big_uint254 }}, {{ - 0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9_cppui_modular254, - 0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529_cppui_modular254, - 0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502_cppui_modular254 + 0x1d6f347725e4816af2ff453f0cd56b199e1b61e9f601e9ade5e88db870949da9_big_uint254, + 0x204b0c397f4ebe71ebc2d8b3df5b913df9e6ac02b68d31324cd49af5c4565529_big_uint254, + 0x0c4cb9dc3c4fd8174f1149b3c63c3c2f9ecb827cd7dc25534ff8fb75bc79c502_big_uint254 }}, {{ - 0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54_cppui_modular254, - 0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef_cppui_modular254, - 0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a_cppui_modular254 + 0x174ad61a1448c899a25416474f4930301e5c49475279e0639a616ddc45bc7b54_big_uint254, + 0x1a96177bcf4d8d89f759df4ec2f3cde2eaaa28c177cc0fa13a9816d49a38d2ef_big_uint254, + 0x066d04b24331d71cd0ef8054bc60c4ff05202c126a233c1a8242ace360b8a30a_big_uint254 }}, {{ - 0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804_cppui_modular254, - 0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649_cppui_modular254, - 0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a_cppui_modular254 + 0x2a4c4fc6ec0b0cf52195782871c6dd3b381cc65f72e02ad527037a62aa1bd804_big_uint254, + 0x13ab2d136ccf37d447e9f2e14a7cedc95e727f8446f6d9d7e55afc01219fd649_big_uint254, + 0x1121552fca26061619d24d843dc82769c1b04fcec26f55194c2e3e869acc6a9a_big_uint254 }}, {{ - 0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1_cppui_modular254, - 0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3_cppui_modular254, - 0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89_cppui_modular254 + 0x00ef653322b13d6c889bc81715c37d77a6cd267d595c4a8909a5546c7c97cff1_big_uint254, + 0x0e25483e45a665208b261d8ba74051e6400c776d652595d9845aca35d8a397d3_big_uint254, + 0x29f536dcb9dd7682245264659e15d88e395ac3d4dde92d8c46448db979eeba89_big_uint254 }}, {{ - 0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be_cppui_modular254, - 0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1_cppui_modular254, - 0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5_cppui_modular254 + 0x2a56ef9f2c53febadfda33575dbdbd885a124e2780bbea170e456baace0fa5be_big_uint254, + 0x1c8361c78eb5cf5decfb7a2d17b5c409f2ae2999a46762e8ee416240a8cb9af1_big_uint254, + 0x151aff5f38b20a0fc0473089aaf0206b83e8e68a764507bfd3d0ab4be74319c5_big_uint254 }}, {{ - 0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100_cppui_modular254, - 0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967_cppui_modular254, - 0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4_cppui_modular254 + 0x04c6187e41ed881dc1b239c88f7f9d43a9f52fc8c8b6cdd1e76e47615b51f100_big_uint254, + 0x13b37bd80f4d27fb10d84331f6fb6d534b81c61ed15776449e801b7ddc9c2967_big_uint254, + 0x01a5c536273c2d9df578bfbd32c17b7a2ce3664c2a52032c9321ceb1c4e8a8e4_big_uint254 }}, {{ - 0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02_cppui_modular254, - 0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646_cppui_modular254, - 0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d_cppui_modular254 + 0x2ab3561834ca73835ad05f5d7acb950b4a9a2c666b9726da832239065b7c3b02_big_uint254, + 0x1d4d8ec291e720db200fe6d686c0d613acaf6af4e95d3bf69f7ed516a597b646_big_uint254, + 0x041294d2cc484d228f5784fe7919fd2bb925351240a04b711514c9c80b65af1d_big_uint254 }}, {{ - 0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6_cppui_modular254, - 0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4_cppui_modular254, - 0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e_cppui_modular254 + 0x154ac98e01708c611c4fa715991f004898f57939d126e392042971dd90e81fc6_big_uint254, + 0x0b339d8acca7d4f83eedd84093aef51050b3684c88f8b0b04524563bc6ea4da4_big_uint254, + 0x0955e49e6610c94254a4f84cfbab344598f0e71eaff4a7dd81ed95b50839c82e_big_uint254 }}, {{ - 0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626_cppui_modular254, - 0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb_cppui_modular254, - 0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13_cppui_modular254 + 0x06746a6156eba54426b9e22206f15abca9a6f41e6f535c6f3525401ea0654626_big_uint254, + 0x0f18f5a0ecd1423c496f3820c549c27838e5790e2bd0a196ac917c7ff32077fb_big_uint254, + 0x04f6eeca1751f7308ac59eff5beb261e4bb563583ede7bc92a738223d6f76e13_big_uint254 }}, {{ - 0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758_cppui_modular254, - 0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef_cppui_modular254, - 0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9_cppui_modular254 + 0x2b56973364c4c4f5c1a3ec4da3cdce038811eb116fb3e45bc1768d26fc0b3758_big_uint254, + 0x123769dd49d5b054dcd76b89804b1bcb8e1392b385716a5d83feb65d437f29ef_big_uint254, + 0x2147b424fc48c80a88ee52b91169aacea989f6446471150994257b2fb01c63e9_big_uint254 }}, {{ - 0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d_cppui_modular254, - 0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2_cppui_modular254, - 0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035_cppui_modular254 + 0x0fdc1f58548b85701a6c5505ea332a29647e6f34ad4243c2ea54ad897cebe54d_big_uint254, + 0x12373a8251fea004df68abcf0f7786d4bceff28c5dbbe0c3944f685cc0a0b1f2_big_uint254, + 0x21e4f4ea5f35f85bad7ea52ff742c9e8a642756b6af44203dd8a1f35c1a90035_big_uint254 }}, {{ - 0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147_cppui_modular254, - 0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2_cppui_modular254, - 0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a_cppui_modular254 + 0x16243916d69d2ca3dfb4722224d4c462b57366492f45e90d8a81934f1bc3b147_big_uint254, + 0x1efbe46dd7a578b4f66f9adbc88b4378abc21566e1a0453ca13a4159cac04ac2_big_uint254, + 0x07ea5e8537cf5dd08886020e23a7f387d468d5525be66f853b672cc96a88969a_big_uint254 }}, {{ - 0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc_cppui_modular254, - 0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f_cppui_modular254, - 0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69_cppui_modular254 + 0x05a8c4f9968b8aa3b7b478a30f9a5b63650f19a75e7ce11ca9fe16c0b76c00bc_big_uint254, + 0x20f057712cc21654fbfe59bd345e8dac3f7818c701b9c7882d9d57b72a32e83f_big_uint254, + 0x04a12ededa9dfd689672f8c67fee31636dcd8e88d01d49019bd90b33eb33db69_big_uint254 }}, {{ - 0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a_cppui_modular254, - 0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1_cppui_modular254, - 0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8_cppui_modular254 + 0x27e88d8c15f37dcee44f1e5425a51decbd136ce5091a6767e49ec9544ccd101a_big_uint254, + 0x2feed17b84285ed9b8a5c8c5e95a41f66e096619a7703223176c41ee433de4d1_big_uint254, + 0x1ed7cc76edf45c7c404241420f729cf394e5942911312a0d6972b8bd53aff2b8_big_uint254 }}, {{ - 0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a_cppui_modular254, - 0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785_cppui_modular254, - 0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77_cppui_modular254 + 0x15742e99b9bfa323157ff8c586f5660eac6783476144cdcadf2874be45466b1a_big_uint254, + 0x1aac285387f65e82c895fc6887ddf40577107454c6ec0317284f033f27d0c785_big_uint254, + 0x25851c3c845d4790f9ddadbdb6057357832e2e7a49775f71ec75a96554d67c77_big_uint254 }}, {{ - 0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67_cppui_modular254, - 0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727_cppui_modular254, - 0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b_cppui_modular254 + 0x15a5821565cc2ec2ce78457db197edf353b7ebba2c5523370ddccc3d9f146a67_big_uint254, + 0x2411d57a4813b9980efa7e31a1db5966dcf64f36044277502f15485f28c71727_big_uint254, + 0x002e6f8d6520cd4713e335b8c0b6d2e647e9a98e12f4cd2558828b5ef6cb4c9b_big_uint254 }}, {{ - 0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2_cppui_modular254, - 0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe_cppui_modular254, - 0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512_cppui_modular254 + 0x2ff7bc8f4380cde997da00b616b0fcd1af8f0e91e2fe1ed7398834609e0315d2_big_uint254, + 0x00b9831b948525595ee02724471bcd182e9521f6b7bb68f1e93be4febb0d3cbe_big_uint254, + 0x0a2f53768b8ebf6a86913b0e57c04e011ca408648a4743a87d77adbf0c9c3512_big_uint254 }}, {{ - 0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d_cppui_modular254, - 0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9_cppui_modular254, - 0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808_cppui_modular254 + 0x00248156142fd0373a479f91ff239e960f599ff7e94be69b7f2a290305e1198d_big_uint254, + 0x171d5620b87bfb1328cf8c02ab3f0c9a397196aa6a542c2350eb512a2b2bcda9_big_uint254, + 0x170a4f55536f7dc970087c7c10d6fad760c952172dd54dd99d1045e4ec34a808_big_uint254 }}, {{ - 0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1_cppui_modular254, - 0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973_cppui_modular254, - 0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09_cppui_modular254 + 0x29aba33f799fe66c2ef3134aea04336ecc37e38c1cd211ba482eca17e2dbfae1_big_uint254, + 0x1e9bc179a4fdd758fdd1bb1945088d47e70d114a03f6a0e8b5ba650369e64973_big_uint254, + 0x1dd269799b660fad58f7f4892dfb0b5afeaad869a9c4b44f9c9e1c43bdaf8f09_big_uint254 }}, {{ - 0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38_cppui_modular254, - 0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd_cppui_modular254, - 0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284_cppui_modular254 + 0x22cdbc8b70117ad1401181d02e15459e7ccd426fe869c7c95d1dd2cb0f24af38_big_uint254, + 0x0ef042e454771c533a9f57a55c503fcefd3150f52ed94a7cd5ba93b9c7dacefd_big_uint254, + 0x11609e06ad6c8fe2f287f3036037e8851318e8b08a0359a03b304ffca62e8284_big_uint254 }}, {{ - 0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af_cppui_modular254, - 0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466_cppui_modular254, - 0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad_cppui_modular254 + 0x1166d9e554616dba9e753eea427c17b7fecd58c076dfe42708b08f5b783aa9af_big_uint254, + 0x2de52989431a859593413026354413db177fbf4cd2ac0b56f855a888357ee466_big_uint254, + 0x3006eb4ffc7a85819a6da492f3a8ac1df51aee5b17b8e89d74bf01cf5f71e9ad_big_uint254 }}, {{ - 0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086_cppui_modular254, - 0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3_cppui_modular254, - 0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800_cppui_modular254 + 0x2af41fbb61ba8a80fdcf6fff9e3f6f422993fe8f0a4639f962344c8225145086_big_uint254, + 0x119e684de476155fe5a6b41a8ebc85db8718ab27889e85e781b214bace4827c3_big_uint254, + 0x1835b786e2e8925e188bea59ae363537b51248c23828f047cff784b97b3fd800_big_uint254 }}, {{ - 0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6_cppui_modular254, - 0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7_cppui_modular254, - 0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b_cppui_modular254 + 0x28201a34c594dfa34d794996c6433a20d152bac2a7905c926c40e285ab32eeb6_big_uint254, + 0x083efd7a27d1751094e80fefaf78b000864c82eb571187724a761f88c22cc4e7_big_uint254, + 0x0b6f88a3577199526158e61ceea27be811c16df7774dd8519e079564f61fd13b_big_uint254 }}, {{ - 0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b_cppui_modular254, - 0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591_cppui_modular254, - 0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178_cppui_modular254 + 0x0ec868e6d15e51d9644f66e1d6471a94589511ca00d29e1014390e6ee4254f5b_big_uint254, + 0x2af33e3f866771271ac0c9b3ed2e1142ecd3e74b939cd40d00d937ab84c98591_big_uint254, + 0x0b520211f904b5e7d09b5d961c6ace7734568c547dd6858b364ce5e47951f178_big_uint254 }}, {{ - 0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40_cppui_modular254, - 0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4_cppui_modular254, - 0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233_cppui_modular254 + 0x0b2d722d0919a1aad8db58f10062a92ea0c56ac4270e822cca228620188a1d40_big_uint254, + 0x1f790d4d7f8cf094d980ceb37c2453e957b54a9991ca38bbe0061d1ed6e562d4_big_uint254, + 0x0171eb95dfbf7d1eaea97cd385f780150885c16235a2a6a8da92ceb01e504233_big_uint254 }}, {{ - 0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873_cppui_modular254, - 0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d_cppui_modular254, - 0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0_cppui_modular254 + 0x0c2d0e3b5fd57549329bf6885da66b9b790b40defd2c8650762305381b168873_big_uint254, + 0x1162fb28689c27154e5a8228b4e72b377cbcafa589e283c35d3803054407a18d_big_uint254, + 0x2f1459b65dee441b64ad386a91e8310f282c5a92a89e19921623ef8249711bc0_big_uint254 }}, {{ - 0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb_cppui_modular254, - 0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875_cppui_modular254, - 0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e_cppui_modular254 + 0x1e6ff3216b688c3d996d74367d5cd4c1bc489d46754eb712c243f70d1b53cfbb_big_uint254, + 0x01ca8be73832b8d0681487d27d157802d741a6f36cdc2a0576881f9326478875_big_uint254, + 0x1f7735706ffe9fc586f976d5bdf223dc680286080b10cea00b9b5de315f9650e_big_uint254 }}, {{ - 0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019_cppui_modular254, - 0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b_cppui_modular254, - 0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59_cppui_modular254 + 0x2522b60f4ea3307640a0c2dce041fba921ac10a3d5f096ef4745ca838285f019_big_uint254, + 0x23f0bee001b1029d5255075ddc957f833418cad4f52b6c3f8ce16c235572575b_big_uint254, + 0x2bc1ae8b8ddbb81fcaac2d44555ed5685d142633e9df905f66d9401093082d59_big_uint254 }}, {{ - 0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f_cppui_modular254, - 0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8_cppui_modular254, - 0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948_cppui_modular254 + 0x0f9406b8296564a37304507b8dba3ed162371273a07b1fc98011fcd6ad72205f_big_uint254, + 0x2360a8eb0cc7defa67b72998de90714e17e75b174a52ee4acb126c8cd995f0a8_big_uint254, + 0x15871a5cddead976804c803cbaef255eb4815a5e96df8b006dcbbc2767f88948_big_uint254 }}, {{ - 0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f_cppui_modular254, - 0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f_cppui_modular254, - 0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142_cppui_modular254 + 0x193a56766998ee9e0a8652dd2f3b1da0362f4f54f72379544f957ccdeefb420f_big_uint254, + 0x2a394a43934f86982f9be56ff4fab1703b2e63c8ad334834e4309805e777ae0f_big_uint254, + 0x1859954cfeb8695f3e8b635dcb345192892cd11223443ba7b4166e8876c0d142_big_uint254 }}, {{ - 0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b_cppui_modular254, - 0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23_cppui_modular254, - 0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0_cppui_modular254 + 0x04e1181763050e58013444dbcb99f1902b11bc25d90bbdca408d3819f4fed32b_big_uint254, + 0x0fdb253dee83869d40c335ea64de8c5bb10eb82db08b5e8b1f5e5552bfd05f23_big_uint254, + 0x058cbe8a9a5027bdaa4efb623adead6275f08686f1c08984a9d7c5bae9b4f1c0_big_uint254 }}, {{ - 0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a_cppui_modular254, - 0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5_cppui_modular254, - 0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58_cppui_modular254 + 0x1382edce9971e186497eadb1aeb1f52b23b4b83bef023ab0d15228b4cceca59a_big_uint254, + 0x03464990f045c6ee0819ca51fd11b0be7f61b8eb99f14b77e1e6634601d9e8b5_big_uint254, + 0x23f7bfc8720dc296fff33b41f98ff83c6fcab4605db2eb5aaa5bc137aeb70a58_big_uint254 }}, {{ - 0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2_cppui_modular254, - 0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b_cppui_modular254, - 0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01_cppui_modular254 + 0x0a59a158e3eec2117e6e94e7f0e9decf18c3ffd5e1531a9219636158bbaf62f2_big_uint254, + 0x06ec54c80381c052b58bf23b312ffd3ce2c4eba065420af8f4c23ed0075fd07b_big_uint254, + 0x118872dc832e0eb5476b56648e867ec8b09340f7a7bcb1b4962f0ff9ed1f9d01_big_uint254 }}, {{ - 0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1_cppui_modular254, - 0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b_cppui_modular254, - 0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d_cppui_modular254 + 0x13d69fa127d834165ad5c7cba7ad59ed52e0b0f0e42d7fea95e1906b520921b1_big_uint254, + 0x169a177f63ea681270b1c6877a73d21bde143942fb71dc55fd8a49f19f10c77b_big_uint254, + 0x04ef51591c6ead97ef42f287adce40d93abeb032b922f66ffb7e9a5a7450544d_big_uint254 }}, {{ - 0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec_cppui_modular254, - 0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2_cppui_modular254, - 0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792_cppui_modular254 + 0x256e175a1dc079390ecd7ca703fb2e3b19ec61805d4f03ced5f45ee6dd0f69ec_big_uint254, + 0x30102d28636abd5fe5f2af412ff6004f75cc360d3205dd2da002813d3e2ceeb2_big_uint254, + 0x10998e42dfcd3bbf1c0714bc73eb1bf40443a3fa99bef4a31fd31be182fcc792_big_uint254 }}, {{ - 0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860_cppui_modular254, - 0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d_cppui_modular254, - 0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111_cppui_modular254 + 0x193edd8e9fcf3d7625fa7d24b598a1d89f3362eaf4d582efecad76f879e36860_big_uint254, + 0x18168afd34f2d915d0368ce80b7b3347d1c7a561ce611425f2664d7aa51f0b5d_big_uint254, + 0x29383c01ebd3b6ab0c017656ebe658b6a328ec77bc33626e29e2e95b33ea6111_big_uint254 }}, {{ - 0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711_cppui_modular254, - 0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb_cppui_modular254, - 0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336_cppui_modular254 + 0x10646d2f2603de39a1f4ae5e7771a64a702db6e86fb76ab600bf573f9010c711_big_uint254, + 0x0beb5e07d1b27145f575f1395a55bf132f90c25b40da7b3864d0242dcb1117fb_big_uint254, + 0x16d685252078c133dc0d3ecad62b5c8830f95bb2e54b59abdffbf018d96fa336_big_uint254 }}, {{ - 0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a_cppui_modular254, - 0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860_cppui_modular254, - 0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6_cppui_modular254 + 0x0a6abd1d833938f33c74154e0404b4b40a555bbbec21ddfafd672dd62047f01a_big_uint254, + 0x1a679f5d36eb7b5c8ea12a4c2dedc8feb12dffeec450317270a6f19b34cf1860_big_uint254, + 0x0980fb233bd456c23974d50e0ebfde4726a423eada4e8f6ffbc7592e3f1b93d6_big_uint254 }}, {{ - 0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b_cppui_modular254, - 0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b_cppui_modular254, - 0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451_cppui_modular254 + 0x161b42232e61b84cbf1810af93a38fc0cece3d5628c9282003ebacb5c312c72b_big_uint254, + 0x0ada10a90c7f0520950f7d47a60d5e6a493f09787f1564e5d09203db47de1a0b_big_uint254, + 0x1a730d372310ba82320345a29ac4238ed3f07a8a2b4e121bb50ddb9af407f451_big_uint254 }}, {{ - 0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556_cppui_modular254, - 0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70_cppui_modular254, - 0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77_cppui_modular254 + 0x2c8120f268ef054f817064c369dda7ea908377feaba5c4dffbda10ef58e8c556_big_uint254, + 0x1c7c8824f758753fa57c00789c684217b930e95313bcb73e6e7b8649a4968f70_big_uint254, + 0x2cd9ed31f5f8691c8e39e4077a74faa0f400ad8b491eb3f7b47b27fa3fd1cf77_big_uint254 }}, {{ - 0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea_cppui_modular254, - 0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d_cppui_modular254, - 0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630_cppui_modular254 + 0x23ff4f9d46813457cf60d92f57618399a5e022ac321ca550854ae23918a22eea_big_uint254, + 0x09945a5d147a4f66ceece6405dddd9d0af5a2c5103529407dff1ea58f180426d_big_uint254, + 0x188d9c528025d4c2b67660c6b771b90f7c7da6eaa29d3f268a6dd223ec6fc630_big_uint254 }}, {{ - 0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f_cppui_modular254, - 0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78_cppui_modular254, - 0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc_cppui_modular254 + 0x3050e37996596b7f81f68311431d8734dba7d926d3633595e0c0d8ddf4f0f47f_big_uint254, + 0x15af1169396830a91600ca8102c35c426ceae5461e3f95d89d829518d30afd78_big_uint254, + 0x1da6d09885432ea9a06d9f37f873d985dae933e351466b2904284da3320d8acc_big_uint254 }}, {{ - 0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb_cppui_modular254, - 0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60_cppui_modular254, - 0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f_cppui_modular254 + 0x2796ea90d269af29f5f8acf33921124e4e4fad3dbe658945e546ee411ddaa9cb_big_uint254, + 0x202d7dd1da0f6b4b0325c8b3307742f01e15612ec8e9304a7cb0319e01d32d60_big_uint254, + 0x096d6790d05bb759156a952ba263d672a2d7f9c788f4c831a29dace4c0f8be5f_big_uint254 }}, {{ - 0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4_cppui_modular254, - 0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1_cppui_modular254, - 0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc_cppui_modular254 + 0x054efa1f65b0fce283808965275d877b438da23ce5b13e1963798cb1447d25a4_big_uint254, + 0x1b162f83d917e93edb3308c29802deb9d8aa690113b2e14864ccf6e18e4165f1_big_uint254, + 0x21e5241e12564dd6fd9f1cdd2a0de39eedfefc1466cc568ec5ceb745a0506edc_big_uint254 }}, {{ - 0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08_cppui_modular254, - 0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100_cppui_modular254, - 0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320_cppui_modular254 + 0x1cfb5662e8cf5ac9226a80ee17b36abecb73ab5f87e161927b4349e10e4bdf08_big_uint254, + 0x0f21177e302a771bbae6d8d1ecb373b62c99af346220ac0129c53f666eb24100_big_uint254, + 0x1671522374606992affb0dd7f71b12bec4236aede6290546bcef7e1f515c2320_big_uint254 }}, {{ - 0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870_cppui_modular254, - 0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba_cppui_modular254, - 0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8_cppui_modular254 + 0x0fa3ec5b9488259c2eb4cf24501bfad9be2ec9e42c5cc8ccd419d2a692cad870_big_uint254, + 0x193c0e04e0bd298357cb266c1506080ed36edce85c648cc085e8c57b1ab54bba_big_uint254, + 0x102adf8ef74735a27e9128306dcbc3c99f6f7291cd406578ce14ea2adaba68f8_big_uint254 }}, {{ - 0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1_cppui_modular254, - 0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22_cppui_modular254, - 0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161_cppui_modular254 + 0x0fe0af7858e49859e2a54d6f1ad945b1316aa24bfbdd23ae40a6d0cb70c3eab1_big_uint254, + 0x216f6717bbc7dedb08536a2220843f4e2da5f1daa9ebdefde8a5ea7344798d22_big_uint254, + 0x1da55cc900f0d21f4a3e694391918a1b3c23b2ac773c6b3ef88e2e4228325161_big_uint254 }} }}; #endif @@ -405,519 +405,519 @@ namespace nil { constexpr static const std::array, state_words> mds_matrix = {{ {{ - 0x251e7fdf99591080080b0af133b9e4369f22e57ace3cd7f64fc6fdbcf38d7da1_cppui_modular254, - 0x25fb50b65acf4fb047cbd3b1c17d97c7fe26ea9ca238d6e348550486e91c7765_cppui_modular254, - 0x293d617d7da72102355f39ebf62f91b06deb5325f367a4556ea1e31ed5767833_cppui_modular254, - 0x104d0295ab00c85e960111ac25da474366599e575a9b7edf6145f14ba6d3c1c4_cppui_modular254, - 0x0aaa35e2c84baf117dea3e336cd96a39792b3813954fe9bf3ed5b90f2f69c977_cppui_modular254 + 0x251e7fdf99591080080b0af133b9e4369f22e57ace3cd7f64fc6fdbcf38d7da1_big_uint254, + 0x25fb50b65acf4fb047cbd3b1c17d97c7fe26ea9ca238d6e348550486e91c7765_big_uint254, + 0x293d617d7da72102355f39ebf62f91b06deb5325f367a4556ea1e31ed5767833_big_uint254, + 0x104d0295ab00c85e960111ac25da474366599e575a9b7edf6145f14ba6d3c1c4_big_uint254, + 0x0aaa35e2c84baf117dea3e336cd96a39792b3813954fe9bf3ed5b90f2f69c977_big_uint254 }}, {{ - 0x2a70b9f1d4bbccdbc03e17c1d1dcdb02052903dc6609ea6969f661b2eb74c839_cppui_modular254, - 0x281154651c921e746315a9934f1b8a1bba9f92ad8ef4b979115b8e2e991ccd7a_cppui_modular254, - 0x28c2be2f8264f95f0b53c732134efa338ccd8fdb9ee2b45fb86a894f7db36c37_cppui_modular254, - 0x21888041e6febd546d427c890b1883bb9b626d8cb4dc18dcc4ec8fa75e530a13_cppui_modular254, - 0x14ddb5fada0171db80195b9592d8cf2be810930e3ea4574a350d65e2cbff4941_cppui_modular254 + 0x2a70b9f1d4bbccdbc03e17c1d1dcdb02052903dc6609ea6969f661b2eb74c839_big_uint254, + 0x281154651c921e746315a9934f1b8a1bba9f92ad8ef4b979115b8e2e991ccd7a_big_uint254, + 0x28c2be2f8264f95f0b53c732134efa338ccd8fdb9ee2b45fb86a894f7db36c37_big_uint254, + 0x21888041e6febd546d427c890b1883bb9b626d8cb4dc18dcc4ec8fa75e530a13_big_uint254, + 0x14ddb5fada0171db80195b9592d8cf2be810930e3ea4574a350d65e2cbff4941_big_uint254 }}, {{ - 0x2f69a7198e1fbcc7dea43265306a37ed55b91bff652ad69aa4fa8478970d401d_cppui_modular254, - 0x001c1edd62645b73ad931ab80e37bbb267ba312b34140e716d6a3747594d3052_cppui_modular254, - 0x15b98ce93e47bc64ce2f2c96c69663c439c40c603049466fa7f9a4b228bfc32b_cppui_modular254, - 0x12c7e2adfa524e5958f65be2fbac809fcba8458b28e44d9265051de33163cf9c_cppui_modular254, - 0x2efc2b90d688134849018222e7b8922eaf67ce79816ef468531ec2de53bbd167_cppui_modular254 + 0x2f69a7198e1fbcc7dea43265306a37ed55b91bff652ad69aa4fa8478970d401d_big_uint254, + 0x001c1edd62645b73ad931ab80e37bbb267ba312b34140e716d6a3747594d3052_big_uint254, + 0x15b98ce93e47bc64ce2f2c96c69663c439c40c603049466fa7f9a4b228bfc32b_big_uint254, + 0x12c7e2adfa524e5958f65be2fbac809fcba8458b28e44d9265051de33163cf9c_big_uint254, + 0x2efc2b90d688134849018222e7b8922eaf67ce79816ef468531ec2de53bbd167_big_uint254 }}, {{ - 0x0c3f050a6bf5af151981e55e3e1a29a13c3ffa4550bd2514f1afd6c5f721f830_cppui_modular254, - 0x0dec54e6dbf75205fa75ba7992bd34f08b2efe2ecd424a73eda7784320a1a36e_cppui_modular254, - 0x1c482a25a729f5df20225815034b196098364a11f4d988fb7cc75cf32d8136fa_cppui_modular254, - 0x2625ce48a7b39a4252732624e4ab94360812ac2fc9a14a5fb8b607ae9fd8514a_cppui_modular254, - 0x07f017a7ebd56dd086f7cd4fd710c509ed7ef8e300b9a8bb9fb9f28af710251f_cppui_modular254 + 0x0c3f050a6bf5af151981e55e3e1a29a13c3ffa4550bd2514f1afd6c5f721f830_big_uint254, + 0x0dec54e6dbf75205fa75ba7992bd34f08b2efe2ecd424a73eda7784320a1a36e_big_uint254, + 0x1c482a25a729f5df20225815034b196098364a11f4d988fb7cc75cf32d8136fa_big_uint254, + 0x2625ce48a7b39a4252732624e4ab94360812ac2fc9a14a5fb8b607ae9fd8514a_big_uint254, + 0x07f017a7ebd56dd086f7cd4fd710c509ed7ef8e300b9a8bb9fb9f28af710251f_big_uint254 }}, {{ - 0x2a20e3a4a0e57d92f97c9d6186c6c3ea7c5e55c20146259be2f78c2ccc2e3595_cppui_modular254, - 0x1049f8210566b51faafb1e9a5d63c0ee701673aed820d9c4403b01feb727a549_cppui_modular254, - 0x02ecac687ef5b4b568002bd9d1b96b4bef357a69e3e86b5561b9299b82d69c8e_cppui_modular254, - 0x2d3a1aea2e6d44466808f88c9ba903d3bdcb6b58ba40441ed4ebcf11bbe1e37b_cppui_modular254, - 0x14074bb14c982c81c9ad171e4f35fe49b39c4a7a72dbb6d9c98d803bfed65e64_cppui_modular254 + 0x2a20e3a4a0e57d92f97c9d6186c6c3ea7c5e55c20146259be2f78c2ccc2e3595_big_uint254, + 0x1049f8210566b51faafb1e9a5d63c0ee701673aed820d9c4403b01feb727a549_big_uint254, + 0x02ecac687ef5b4b568002bd9d1b96b4bef357a69e3e86b5561b9299b82d69c8e_big_uint254, + 0x2d3a1aea2e6d44466808f88c9ba903d3bdcb6b58ba40441ed4ebcf11bbe1e37b_big_uint254, + 0x14074bb14c982c81c9ad171e4f35fe49b39c4a7a72dbb6d9c98d803bfed65e64_big_uint254 }} }}; constexpr static const std::array, round_count> round_constants = {{ {{ - 0x0eb544fee2815dda7f53e29ccac98ed7d889bb4ebd47c3864f3c2bd81a6da891_cppui_modular254, - 0x0554d736315b8662f02fdba7dd737fbca197aeb12ea64713ba733f28475128cb_cppui_modular254, - 0x2f83b9df259b2b68bcd748056307c37754907df0c0fb0035f5087c58d5e8c2d4_cppui_modular254, - 0x2ca70e2e8d7f39a12447ac83052451b461f15f8b41a75ef31915208f5aba9683_cppui_modular254, - 0x1cb5f9319be6a45e91b04d7222271c94994196f12ed22c5d4ec719cb83ecfea9_cppui_modular254, + 0x0eb544fee2815dda7f53e29ccac98ed7d889bb4ebd47c3864f3c2bd81a6da891_big_uint254, + 0x0554d736315b8662f02fdba7dd737fbca197aeb12ea64713ba733f28475128cb_big_uint254, + 0x2f83b9df259b2b68bcd748056307c37754907df0c0fb0035f5087c58d5e8c2d4_big_uint254, + 0x2ca70e2e8d7f39a12447ac83052451b461f15f8b41a75ef31915208f5aba9683_big_uint254, + 0x1cb5f9319be6a45e91b04d7222271c94994196f12ed22c5d4ec719cb83ecfea9_big_uint254, }}, {{ - 0x2eb4f99c69f966ebf8a42192de7ff61621c7bb47b93750c2b9ea08d18446c122_cppui_modular254, - 0x224a28e5a35385a7c5198169e405d9ea0fc7da8b93ee13b6d5f7d099e299520e_cppui_modular254, - 0x0f7411b465e600eed8afdd6afca49c3036f33ecbd9a0f97823796b993bbd82f7_cppui_modular254, - 0x0f9d0d5aad2c9555a2be7150392d8d9819b208ae3370f99a0626f9ff5d90e4e3_cppui_modular254, - 0x1e9a96dc8292bb596f52a59538d329229732b25259cf744b6a12d30702d6fba0_cppui_modular254, + 0x2eb4f99c69f966ebf8a42192de7ff61621c7bb47b93750c2b9ea08d18446c122_big_uint254, + 0x224a28e5a35385a7c5198169e405d9ea0fc7da8b93ee13b6d5f7d099e299520e_big_uint254, + 0x0f7411b465e600eed8afdd6afca49c3036f33ecbd9a0f97823796b993bbd82f7_big_uint254, + 0x0f9d0d5aad2c9555a2be7150392d8d9819b208ae3370f99a0626f9ff5d90e4e3_big_uint254, + 0x1e9a96dc8292bb596f52a59538d329229732b25259cf744b6a12d30702d6fba0_big_uint254, }}, {{ - 0x08780514ccd90380887d578c45555e593cfe52eab4b945c6c2cd4d528fb3fe3c_cppui_modular254, - 0x272498fced686c7ac8149fa3f73ef8c2ced64717e3556d5a59f119d629ccb5fc_cppui_modular254, - 0x01ef8f9dd7c93aac4b7cb80930bd06eb45bd350aff585f10e3d0ef8a782ef7df_cppui_modular254, - 0x045b9f59b6595e614dc08f222b469b138e886e64bf3c40aa97ea0ae754934d30_cppui_modular254, - 0x0ac1e91c57d9da919fd6f59d2a40ff8ea3e41e24e247a387adf2584295d61c66_cppui_modular254, + 0x08780514ccd90380887d578c45555e593cfe52eab4b945c6c2cd4d528fb3fe3c_big_uint254, + 0x272498fced686c7ac8149fa3f73ef8c2ced64717e3556d5a59f119d629ccb5fc_big_uint254, + 0x01ef8f9dd7c93aac4b7cb80930bd06eb45bd350aff585f10e3d0ef8a782ef7df_big_uint254, + 0x045b9f59b6595e614dc08f222b469b138e886e64bf3c40aa97ea0ae754934d30_big_uint254, + 0x0ac1e91c57d9da919fd6f59d2a40ff8ea3e41e24e247a387adf2584295d61c66_big_uint254, }}, {{ - 0x028a1621a94054b0c7f9a421353cd89d0fd67061aee99979d12e68f04e62d134_cppui_modular254, - 0x26b41802c071ea4c9632647ed059236e50c19c3fb3c96d09d02aae2a0dcd9dbc_cppui_modular254, - 0x2fb5dda8072bb72cbaac2f63e468215e05c9de06758db6a94af34384aedb462b_cppui_modular254, - 0x2212d3a0f5fccaf244ff3547fd823249ad8ab8ba2a18d383dd05c56ee894d850_cppui_modular254, - 0x1b041ad5b2f0684258e4dfaeea09be56a3276fdb19f44c015cd0c7eed465e2e3_cppui_modular254, + 0x028a1621a94054b0c7f9a421353cd89d0fd67061aee99979d12e68f04e62d134_big_uint254, + 0x26b41802c071ea4c9632647ed059236e50c19c3fb3c96d09d02aae2a0dcd9dbc_big_uint254, + 0x2fb5dda8072bb72cbaac2f63e468215e05c9de06758db6a94af34384aedb462b_big_uint254, + 0x2212d3a0f5fccaf244ff3547fd823249ad8ab8ba2a18d383dd05c56ee894d850_big_uint254, + 0x1b041ad5b2f0684258e4dfaeea09be56a3276fdb19f44c015cd0c7eed465e2e3_big_uint254, }}, {{ - 0x0a01776bb22f4b6b8eccff33e76fded3144fb7e3ac14e846a91e64afb1500eff_cppui_modular254, - 0x2b7b5674aaecc3cbf34d3f275066d549a4f33ae8c15cf827f7936440810ace43_cppui_modular254, - 0x29d299b80cd4489e4cf75779ed54b48c60b042257b78fc004c1b803381a3bdfd_cppui_modular254, - 0x1c46831d9a74529357641c219d721a74a427110032b5e1dd19dde30424be401e_cppui_modular254, - 0x06d7626c953ccb72f37141dc34d578e036296c0657674f80739ae1d883e91269_cppui_modular254, + 0x0a01776bb22f4b6b8eccff33e76fded3144fb7e3ac14e846a91e64afb1500eff_big_uint254, + 0x2b7b5674aaecc3cbf34d3f275066d549a4f33ae8c15cf827f7936440810ace43_big_uint254, + 0x29d299b80cd4489e4cf75779ed54b48c60b042257b78fc004c1b803381a3bdfd_big_uint254, + 0x1c46831d9a74529357641c219d721a74a427110032b5e1dd19dde30424be401e_big_uint254, + 0x06d7626c953ccb72f37141dc34d578e036296c0657674f80739ae1d883e91269_big_uint254, }}, {{ - 0x28ffddc86f18c136c54002748e0c410edc5c440a3022cd960f108c71cda2930c_cppui_modular254, - 0x2e67f7ee5e4aa295f85deed09e400b17be67f1b7ed2ab6adb8ec0619f6fbc5e9_cppui_modular254, - 0x26ce38fa636c90630e97f25114a79a2dca56859ef759e53ce7abf22c24e80f27_cppui_modular254, - 0x2e6e07c3c95bf7c34dd7a01d00a7ffec42cb3d16a1f72721afacb4c4cfd35db1_cppui_modular254, - 0x2aa74f7597f0c9f45f91d7961c3a54fb8890d276612e1246384b1470da24d8cc_cppui_modular254, + 0x28ffddc86f18c136c54002748e0c410edc5c440a3022cd960f108c71cda2930c_big_uint254, + 0x2e67f7ee5e4aa295f85deed09e400b17be67f1b7ed2ab6adb8ec0619f6fbc5e9_big_uint254, + 0x26ce38fa636c90630e97f25114a79a2dca56859ef759e53ce7abf22c24e80f27_big_uint254, + 0x2e6e07c3c95bf7c34dd7a01d00a7ffec42cb3d16a1f72721afacb4c4cfd35db1_big_uint254, + 0x2aa74f7597f0c9f45f91d7961c3a54fb8890d276612e1246384b1470da24d8cc_big_uint254, }}, {{ - 0x287d681a46a2faae2c7c090f668ab45b8a71313c1509183e2ec0ca639b7f73fe_cppui_modular254, - 0x212bd19df812eaaef4a40600528f3d7da5d3106ff565aa3b11e29f3305e73c04_cppui_modular254, - 0x1154f7cf519186bf1aafb14b350eb860f97fd9740926dab93809c28404713504_cppui_modular254, - 0x1dff6385cb31f1c24637810a4bd1b16fbf5152905be36583da747e79661fc207_cppui_modular254, - 0x0e444582d22b4e76c081d34c44c18e424011a34d5476252863ea3c606b551e5c_cppui_modular254, + 0x287d681a46a2faae2c7c090f668ab45b8a71313c1509183e2ec0ca639b7f73fe_big_uint254, + 0x212bd19df812eaaef4a40600528f3d7da5d3106ff565aa3b11e29f3305e73c04_big_uint254, + 0x1154f7cf519186bf1aafb14b350eb860f97fd9740926dab93809c28404713504_big_uint254, + 0x1dff6385cb31f1c24637810a4bd1b16fbf5152905be36583da747e79661fc207_big_uint254, + 0x0e444582d22b4e76c081d34c44c18e424011a34d5476252863ea3c606b551e5c_big_uint254, }}, {{ - 0x0323c9e433ba66c4abab6638328f02f1815773e9c2846323ff72d3aab7e4eff8_cppui_modular254, - 0x12746bbd71791059193bba79cdec448f25b8cf002740112db70f2c6876a9c29d_cppui_modular254, - 0x1173b7d112c2a798fd9b9d3751842c75d466c837cf50d73efd049eb4438a2240_cppui_modular254, - 0x13d51c1090a1ad4876d1e555d7fed13da8e5713b25026ebe5fdb4808703243da_cppui_modular254, - 0x00874c1344a4ad51ff8dcb7cbd2d9743cb72743f0394efe7f4a58ebeb956baa1_cppui_modular254, + 0x0323c9e433ba66c4abab6638328f02f1815773e9c2846323ff72d3aab7e4eff8_big_uint254, + 0x12746bbd71791059193bba79cdec448f25b8cf002740112db70f2c6876a9c29d_big_uint254, + 0x1173b7d112c2a798fd9b9d3751842c75d466c837cf50d73efd049eb4438a2240_big_uint254, + 0x13d51c1090a1ad4876d1e555d7fed13da8e5713b25026ebe5fdb4808703243da_big_uint254, + 0x00874c1344a4ad51ff8dcb7cbd2d9743cb72743f0394efe7f4a58ebeb956baa1_big_uint254, }}, {{ - 0x22df22131aaab85865ce236b07f244fa0eea48d3546e97d6a32a562074fef08f_cppui_modular254, - 0x0bf964d2dbd25b908708b437a445fc3e984524a59101e6c18bf5eb05a919f155_cppui_modular254, - 0x09b18d9b917a55bca302be1f7f181e0e640b9d73a9ab298c69b435b5fc502f32_cppui_modular254, - 0x094f5534444fae36a4bfc1d5bf3dc05bfbbbc70a6365366dd6745a5067289e43_cppui_modular254, - 0x2999bab1a5f25210519fa6622af53a15a3e240c0da5701cb784fddc0dc23f01f_cppui_modular254, + 0x22df22131aaab85865ce236b07f244fa0eea48d3546e97d6a32a562074fef08f_big_uint254, + 0x0bf964d2dbd25b908708b437a445fc3e984524a59101e6c18bf5eb05a919f155_big_uint254, + 0x09b18d9b917a55bca302be1f7f181e0e640b9d73a9ab298c69b435b5fc502f32_big_uint254, + 0x094f5534444fae36a4bfc1d5bf3dc05bfbbbc70a6365366dd6745a5067289e43_big_uint254, + 0x2999bab1a5f25210519fa6622af53a15a3e240c0da5701cb784fddc0dc23f01f_big_uint254, }}, {{ - 0x2f6898c07581f6371ca94db73710e88084301bce8a93d13669575a11b03a3d23_cppui_modular254, - 0x07268eaaba08bc19ec16d7e1318a4740565deb1e8e5742f862174b1a6866fccb_cppui_modular254, - 0x186279b003454db01339ff77113bc9eb62603e078e1c6689a6c9582c41a0529f_cppui_modular254, - 0x18a3f736509197d6e4915bdd04d3e5ddb67e2cc5de9a22750768e5524737172c_cppui_modular254, - 0x0a21fa1988cf38d877cc1e2ed24c808c725e2d4bcb2d3a007b5987b87085671d_cppui_modular254, + 0x2f6898c07581f6371ca94db73710e88084301bce8a93d13669575a11b03a3d23_big_uint254, + 0x07268eaaba08bc19ec16d7e1318a4740565deb1e8e5742f862174b1a6866fccb_big_uint254, + 0x186279b003454db01339ff77113bc9eb62603e078e1c6689a6c9582c41a0529f_big_uint254, + 0x18a3f736509197d6e4915bdd04d3e5ddb67e2cc5de9a22750768e5524737172c_big_uint254, + 0x0a21fa1988cf38d877cc1e2ed24c808c725e2d4bcb2d3a007b5987b87085671d_big_uint254, }}, {{ - 0x15b285cbe26c467f1faf5ef6a64625228328c184a2c43bc00b36a135e785fba2_cppui_modular254, - 0x164b7062c4671cf08c08b8c3f9806d560b7775b7c902f5788cd28de3e779f161_cppui_modular254, - 0x0890ba0819ac0a6f86d9865fe7e50ef361c61d3d43b6e65d7a24f651249baa70_cppui_modular254, - 0x2fbea4d65d7ed425a42712e5a721e4eaa627ac5cb0eb878ccc2ee0aed543e922_cppui_modular254, - 0x0492bf383c36fa55540303a3b536f85e7b70a58e854ab9b9103d7f5f379abaaa_cppui_modular254, + 0x15b285cbe26c467f1faf5ef6a64625228328c184a2c43bc00b36a135e785fba2_big_uint254, + 0x164b7062c4671cf08c08b8c3f9806d560b7775b7c902f5788cd28de3e779f161_big_uint254, + 0x0890ba0819ac0a6f86d9865fe7e50ef361c61d3d43b6e65d7a24f651249baa70_big_uint254, + 0x2fbea4d65d7ed425a42712e5a721e4eaa627ac5cb0eb878ccc2ee0aed543e922_big_uint254, + 0x0492bf383c36fa55540303a3b536f85e7b70a58e854ab9b9103d7f5f379abaaa_big_uint254, }}, {{ - 0x05e91fe944e944104e20251c565142d61d6185a9ce85675f6a969d56292dc24e_cppui_modular254, - 0x12fe5c2029e4b33893d463cb041acad0995b9621e6e49c3b7e380a76e36e6c1c_cppui_modular254, - 0x024154adf0255d47958f7723921474131f2629fadc89496906cd01dc6fa0784e_cppui_modular254, - 0x18824a09e6afaf4a36ed2462a86bd0bad798815644f2bbde8813c13457a45550_cppui_modular254, - 0x0c8b482dba0ad51be9f255de0c3dbddddf84a630af68d50bbb06983e3d5d58a5_cppui_modular254, + 0x05e91fe944e944104e20251c565142d61d6185a9ce85675f6a969d56292dc24e_big_uint254, + 0x12fe5c2029e4b33893d463cb041acad0995b9621e6e49c3b7e380a76e36e6c1c_big_uint254, + 0x024154adf0255d47958f7723921474131f2629fadc89496906cd01dc6fa0784e_big_uint254, + 0x18824a09e6afaf4a36ed2462a86bd0bad798815644f2bbde8813c13457a45550_big_uint254, + 0x0c8b482dba0ad51be9f255de0c3dbddddf84a630af68d50bbb06983e3d5d58a5_big_uint254, }}, {{ - 0x17325fd0ab635871363e0a1667d3b67c5a4fa67fcd6aaf86441392878fdb05e6_cppui_modular254, - 0x050ae95f6d2f1519122f5af67b690f31e550773fa8d18bf71cc6d0e911fa402e_cppui_modular254, - 0x0f0d139a0e81e943038cb288d62636764bbb6295f07569885771ec84edc50c40_cppui_modular254, - 0x1c0f8697795689cdf70fd2f2c0f93d1a79b39ebc7a1b1c549dbbca7b8e747cd6_cppui_modular254, - 0x2bd0f940ad936b796d2bc2e048bc979e49be23a4b13598f9fe536a16dc1d81e6_cppui_modular254, + 0x17325fd0ab635871363e0a1667d3b67c5a4fa67fcd6aaf86441392878fdb05e6_big_uint254, + 0x050ae95f6d2f1519122f5af67b690f31e550773fa8d18bf71cc6d0e911fa402e_big_uint254, + 0x0f0d139a0e81e943038cb288d62636764bbb6295f07569885771ec84edc50c40_big_uint254, + 0x1c0f8697795689cdf70fd2f2c0f93d1a79b39ebc7a1b1c549dbbca7b8e747cd6_big_uint254, + 0x2bd0f940ad936b796d2bc2e048bc979e49be23a4b13598f9fe536a16dc1d81e6_big_uint254, }}, {{ - 0x27eb1be27c9c4e934778c09a0053337fa06ebb275e096d167ce54d1e96ee62cb_cppui_modular254, - 0x2e4889d830a67e5a8f96bdd3155a7ca3284fbd307d1f71b0f151be62548e2aea_cppui_modular254, - 0x193fe3db0ab47d3c5d2ec5e9c5bd9983c9891f2cadc165db6064bbe6fcc1e305_cppui_modular254, - 0x2bf3086e96c36c7bce415907ad0c40ed6e9661c009679e4e37cb13027c83e525_cppui_modular254, - 0x12f16e2de6d4ad46a98cdb697c6cad5dd5e7e413f741ccf29ff2ea486e59bb28_cppui_modular254, + 0x27eb1be27c9c4e934778c09a0053337fa06ebb275e096d167ce54d1e96ee62cb_big_uint254, + 0x2e4889d830a67e5a8f96bdd3155a7ca3284fbd307d1f71b0f151be62548e2aea_big_uint254, + 0x193fe3db0ab47d3c5d2ec5e9c5bd9983c9891f2cadc165db6064bbe6fcc1e305_big_uint254, + 0x2bf3086e96c36c7bce415907ad0c40ed6e9661c009679e4e37cb13027c83e525_big_uint254, + 0x12f16e2de6d4ad46a98cdb697c6cad5dd5e7e413f741ccf29ff2ea486e59bb28_big_uint254, }}, {{ - 0x2a72147d230119f3a0262e3653ddd19f33f3d5d6ec6c4bf0ad919b0343b92d2f_cppui_modular254, - 0x21be0e2c4bfd64e56dc47f957806dc5f0a2d9bcc26412e2977df79acc10ba974_cppui_modular254, - 0x0e2d7e1dc946d70b2749a3b54367b25a71b84fb911aa57ae137fd4b6c21b444a_cppui_modular254, - 0x2667f7fb5a4fa1246170a745d8a4188cc31adb0eae3325dc9f3f07d4b92b3e2e_cppui_modular254, - 0x2ccc6f431fb7400730a783b66064697a1550c12b08dfeb72830e107da78e3405_cppui_modular254, + 0x2a72147d230119f3a0262e3653ddd19f33f3d5d6ec6c4bf0ad919b0343b92d2f_big_uint254, + 0x21be0e2c4bfd64e56dc47f957806dc5f0a2d9bcc26412e2977df79acc10ba974_big_uint254, + 0x0e2d7e1dc946d70b2749a3b54367b25a71b84fb911aa57ae137fd4b6c21b444a_big_uint254, + 0x2667f7fb5a4fa1246170a745d8a4188cc31adb0eae3325dc9f3f07d4b92b3e2e_big_uint254, + 0x2ccc6f431fb7400730a783b66064697a1550c12b08dfeb72830e107da78e3405_big_uint254, }}, {{ - 0x08888a94fc5a2ca34f0201462420001fae6dbee9e8ca0c242ec50621e38e6e5d_cppui_modular254, - 0x02977b34eeaa3cb6ad40dd42c9b6fdd7a0d2fbe753af88b36acfcd3ccbc53f2a_cppui_modular254, - 0x120ccce13d28b75cfd6fb6c9ea13a648bfcfe0d7e6ff8e9610b5e9f971e16b9a_cppui_modular254, - 0x09fad2269c4a8e93c81e1b9770ea098c92787a4575b2bd73a0bf2af32f86ff3c_cppui_modular254, - 0x026091fd3d4c44d50a4b310e4ac6f0fa0debdb70775eeb8af630cffb60092d6f_cppui_modular254, + 0x08888a94fc5a2ca34f0201462420001fae6dbee9e8ca0c242ec50621e38e6e5d_big_uint254, + 0x02977b34eeaa3cb6ad40dd42c9b6fdd7a0d2fbe753af88b36acfcd3ccbc53f2a_big_uint254, + 0x120ccce13d28b75cfd6fb6c9ea13a648bfcfe0d7e6ff8e9610b5e9f971e16b9a_big_uint254, + 0x09fad2269c4a8e93c81e1b9770ea098c92787a4575b2bd73a0bf2af32f86ff3c_big_uint254, + 0x026091fd3d4c44d50a4b310e4ac6f0fa0debdb70775eeb8af630cffb60092d6f_big_uint254, }}, {{ - 0x29404aa2ba565b77bb7fba9dfb6fc3212543cc56afad6afcb904fd2bca893994_cppui_modular254, - 0x2749475c399aaf39d4e87c2548695b4ef1ffd86590e0827de7201351b7c883f9_cppui_modular254, - 0x098c842322479f7239912b50424685cba2ebe2dc2e4da70ac7557dab65ffa222_cppui_modular254, - 0x18cef581222b647e31238e57fead7d5c758ace14c93c4da40191d0c053b51936_cppui_modular254, - 0x13177839c68a5080d4e746745e43711d3cbc0ca4a108f98d63b2aa681698de60_cppui_modular254, + 0x29404aa2ba565b77bb7fba9dfb6fc3212543cc56afad6afcb904fd2bca893994_big_uint254, + 0x2749475c399aaf39d4e87c2548695b4ef1ffd86590e0827de7201351b7c883f9_big_uint254, + 0x098c842322479f7239912b50424685cba2ebe2dc2e4da70ac7557dab65ffa222_big_uint254, + 0x18cef581222b647e31238e57fead7d5c758ace14c93c4da40191d0c053b51936_big_uint254, + 0x13177839c68a5080d4e746745e43711d3cbc0ca4a108f98d63b2aa681698de60_big_uint254, }}, {{ - 0x020ca696f531e43ec088f56f4b74325626cc4df712c0e5f0a907d88e5f0deffd_cppui_modular254, - 0x27230eede9cccfc9fa805a30fc548db693d13708c646841d16e028387c7ac022_cppui_modular254, - 0x01645911c1198b01d64fde34a342a1786497c05969a015439057d2fe75bb281c_cppui_modular254, - 0x2c323fe16481bf496e439c88341ce25f198971e14487056cfdca4a451a5d8643_cppui_modular254, - 0x0fc082dfe70728e8450bd2074c3e22e1b022c124d3bffe8b5af88ae6db5085c8_cppui_modular254, + 0x020ca696f531e43ec088f56f4b74325626cc4df712c0e5f0a907d88e5f0deffd_big_uint254, + 0x27230eede9cccfc9fa805a30fc548db693d13708c646841d16e028387c7ac022_big_uint254, + 0x01645911c1198b01d64fde34a342a1786497c05969a015439057d2fe75bb281c_big_uint254, + 0x2c323fe16481bf496e439c88341ce25f198971e14487056cfdca4a451a5d8643_big_uint254, + 0x0fc082dfe70728e8450bd2074c3e22e1b022c124d3bffe8b5af88ae6db5085c8_big_uint254, }}, {{ - 0x2052c174800db209d8cdca568dcc25b3be9642116ac4c77efe8a488b423521ee_cppui_modular254, - 0x28e420e10df2fbb5af96d621d55423190be351ce8129065a8dd9fd05b3ece9c0_cppui_modular254, - 0x25698ca5e24a1b799f783c4462a24db655d6ae1bdacd1cb549d6e0bc3ae5069a_cppui_modular254, - 0x160a9981a5c89a57cf8ffbfa57d51049a297b61074422ac134d9b857d6984d35_cppui_modular254, - 0x21c91a39e145c3bc34d9b694b843f3bf8b7cebf59ddbb0a064642b069997f3d4_cppui_modular254, + 0x2052c174800db209d8cdca568dcc25b3be9642116ac4c77efe8a488b423521ee_big_uint254, + 0x28e420e10df2fbb5af96d621d55423190be351ce8129065a8dd9fd05b3ece9c0_big_uint254, + 0x25698ca5e24a1b799f783c4462a24db655d6ae1bdacd1cb549d6e0bc3ae5069a_big_uint254, + 0x160a9981a5c89a57cf8ffbfa57d51049a297b61074422ac134d9b857d6984d35_big_uint254, + 0x21c91a39e145c3bc34d9b694b843f3bf8b7cebf59ddbb0a064642b069997f3d4_big_uint254, }}, {{ - 0x1ac8d80dcd5ee876d2b09345ef112345d6eaa029d93f03b6d10975461e41734c_cppui_modular254, - 0x0ab3e6ad0ecf8b8e7c1662a4174c52225d822895e2755544b8dbcea5657ce02c_cppui_modular254, - 0x1c675182512620ae27e3b0b917b3a21ca52ef3ef5909b4e1c5b2237cbdab3377_cppui_modular254, - 0x2cdbc998dfd7affd3d948d0c85bad2e2e37a4a3e07a7d75d0c8a9092ac2bed45_cppui_modular254, - 0x23b584a56e2117b0774bf67cc0dee33324337350309dff833e491a133bb63b2e_cppui_modular254, + 0x1ac8d80dcd5ee876d2b09345ef112345d6eaa029d93f03b6d10975461e41734c_big_uint254, + 0x0ab3e6ad0ecf8b8e7c1662a4174c52225d822895e2755544b8dbcea5657ce02c_big_uint254, + 0x1c675182512620ae27e3b0b917b3a21ca52ef3ef5909b4e1c5b2237cbdab3377_big_uint254, + 0x2cdbc998dfd7affd3d948d0c85bad2e2e37a4a3e07a7d75d0c8a9092ac2bed45_big_uint254, + 0x23b584a56e2117b0774bf67cc0dee33324337350309dff833e491a133bb63b2e_big_uint254, }}, {{ - 0x1e9e2b310f60ba9f8cb73030a3c9d2a10d133bc6ba4ec1152f3d20de1465e9a5_cppui_modular254, - 0x0e01e365ba5b3031abc3e720140ae746c9ab5dab987520c460bcd4f1fa5b22db_cppui_modular254, - 0x040884cdcfc64bfc7b7127340498d5c443382011b61c9a4b1387d85bc1264e68_cppui_modular254, - 0x190b1ee1205eb9500c74a3998f2bea36353f1724d6067ed0a0a17de311ef9668_cppui_modular254, - 0x1647c72aec6c4388d04f52fc23cd9c08c1dfcf65ce61e165fc28d1f832bd3b2c_cppui_modular254, + 0x1e9e2b310f60ba9f8cb73030a3c9d2a10d133bc6ba4ec1152f3d20de1465e9a5_big_uint254, + 0x0e01e365ba5b3031abc3e720140ae746c9ab5dab987520c460bcd4f1fa5b22db_big_uint254, + 0x040884cdcfc64bfc7b7127340498d5c443382011b61c9a4b1387d85bc1264e68_big_uint254, + 0x190b1ee1205eb9500c74a3998f2bea36353f1724d6067ed0a0a17de311ef9668_big_uint254, + 0x1647c72aec6c4388d04f52fc23cd9c08c1dfcf65ce61e165fc28d1f832bd3b2c_big_uint254, }}, {{ - 0x2430006346a0145f799880cc4c8736269f5494d89fb48b02842e595b71e4541d_cppui_modular254, - 0x177b9a08343917e1365107a3da3ae7f69d853902bb16bacb3221850252b757af_cppui_modular254, - 0x04a420e642b11ae94e58862a68f5e32609cd53d0ae29423439b11d04666df4f8_cppui_modular254, - 0x25d0e0f739fb39fc105a88fab0afd810de2461858e956ccccdfabeddb6a25c8f_cppui_modular254, - 0x04476d91b7eff2fd85905cbf58651edc320cb15610eaed452c4d4ffa0c740a27_cppui_modular254, + 0x2430006346a0145f799880cc4c8736269f5494d89fb48b02842e595b71e4541d_big_uint254, + 0x177b9a08343917e1365107a3da3ae7f69d853902bb16bacb3221850252b757af_big_uint254, + 0x04a420e642b11ae94e58862a68f5e32609cd53d0ae29423439b11d04666df4f8_big_uint254, + 0x25d0e0f739fb39fc105a88fab0afd810de2461858e956ccccdfabeddb6a25c8f_big_uint254, + 0x04476d91b7eff2fd85905cbf58651edc320cb15610eaed452c4d4ffa0c740a27_big_uint254, }}, {{ - 0x1090c0b68b3d7d7b8bc9ca2419eb8dea1c28f6d5e1250cb5e9780fd9ca286fae_cppui_modular254, - 0x25393ce3b9256d50448a725c5c7cd5ad376f2d435855c10ebf2899cb5c6617be_cppui_modular254, - 0x25931c0c7371f4f1fc862f306e6e5830ed824388d6b9342697d144f0fab46630_cppui_modular254, - 0x2396cb501700bbe6c82aad51b0fb79cf8a4d353185d5808203f73f22afbf62f6_cppui_modular254, - 0x26a363483348b58954ea748a7129a7b0a3dc9068c3cca7b5b3f0ce03b8724884_cppui_modular254, + 0x1090c0b68b3d7d7b8bc9ca2419eb8dea1c28f6d5e1250cb5e9780fd9ca286fae_big_uint254, + 0x25393ce3b9256d50448a725c5c7cd5ad376f2d435855c10ebf2899cb5c6617be_big_uint254, + 0x25931c0c7371f4f1fc862f306e6e5830ed824388d6b9342697d144f0fab46630_big_uint254, + 0x2396cb501700bbe6c82aad51b0fb79cf8a4d353185d5808203f73f22afbf62f6_big_uint254, + 0x26a363483348b58954ea748a7129a7b0a3dc9068c3cca7b5b3f0ce03b8724884_big_uint254, }}, {{ - 0x27ca107ca204f2a18d6f1535b92c5478c99b893334215f6ba7a0e5b45fcd6897_cppui_modular254, - 0x26da28fc097ed77ce4662bde326b2cceac15f7301178581d8d2d02b3b2d91056_cppui_modular254, - 0x056ab351691d8bb3703e3055070ac9cc655774c1bb35d57572971ba56ee0cb89_cppui_modular254, - 0x2638b57f23b754aec76d109a2f481aa3c22547a11ffc50152d729af632376a90_cppui_modular254, - 0x304754bb8c57d60732f492c2605184fdc33e46a532bdec80ea7bc5519ede7cef_cppui_modular254, + 0x27ca107ca204f2a18d6f1535b92c5478c99b893334215f6ba7a0e5b45fcd6897_big_uint254, + 0x26da28fc097ed77ce4662bde326b2cceac15f7301178581d8d2d02b3b2d91056_big_uint254, + 0x056ab351691d8bb3703e3055070ac9cc655774c1bb35d57572971ba56ee0cb89_big_uint254, + 0x2638b57f23b754aec76d109a2f481aa3c22547a11ffc50152d729af632376a90_big_uint254, + 0x304754bb8c57d60732f492c2605184fdc33e46a532bdec80ea7bc5519ede7cef_big_uint254, }}, {{ - 0x00d1727f8457ee03514f155b5806cbf748ec6857fc554010752ac93a9b7619ac_cppui_modular254, - 0x00ee1f3c66fbc05c43ba295a303c72fab5bca86805ec9419c588e50947761fa3_cppui_modular254, - 0x0afafadcf5b4dd4a4a76b5a1d82415fd10a19fbcfc59078c61f9297eb675d972_cppui_modular254, - 0x0b2449f39746085e86ce45e8eed108ee65a234835a0a6a5ea8996d124dd04d0a_cppui_modular254, - 0x206b0ce2f1b2c5b7c9f37b0045227095f6c6f071ec3bdda76a7ddf4823dd5dd6_cppui_modular254, + 0x00d1727f8457ee03514f155b5806cbf748ec6857fc554010752ac93a9b7619ac_big_uint254, + 0x00ee1f3c66fbc05c43ba295a303c72fab5bca86805ec9419c588e50947761fa3_big_uint254, + 0x0afafadcf5b4dd4a4a76b5a1d82415fd10a19fbcfc59078c61f9297eb675d972_big_uint254, + 0x0b2449f39746085e86ce45e8eed108ee65a234835a0a6a5ea8996d124dd04d0a_big_uint254, + 0x206b0ce2f1b2c5b7c9f37b0045227095f6c6f071ec3bdda76a7ddf4823dd5dd6_big_uint254, }}, {{ - 0x0feba4fb87834c7cb696e67433628cd6caffc3a4ef20fea852c7e1029459409c_cppui_modular254, - 0x254dbfac74c49b0b8926752e084e02513b06f1315e6d70e18173e972336e55d3_cppui_modular254, - 0x0addb1372cee4e164655168c367559e19606c5bd17910aeb37719edfa0ca8762_cppui_modular254, - 0x26b25b7e257f3e97c799024fb019f65c6ca4d8d81b1ae16221a589d68831d759_cppui_modular254, - 0x090995b79acec240413b8d4c658787e5a4657b9ab00bdb5b1960b1059e113ba3_cppui_modular254, + 0x0feba4fb87834c7cb696e67433628cd6caffc3a4ef20fea852c7e1029459409c_big_uint254, + 0x254dbfac74c49b0b8926752e084e02513b06f1315e6d70e18173e972336e55d3_big_uint254, + 0x0addb1372cee4e164655168c367559e19606c5bd17910aeb37719edfa0ca8762_big_uint254, + 0x26b25b7e257f3e97c799024fb019f65c6ca4d8d81b1ae16221a589d68831d759_big_uint254, + 0x090995b79acec240413b8d4c658787e5a4657b9ab00bdb5b1960b1059e113ba3_big_uint254, }}, {{ - 0x08dbdc2e21ef11f2c57299687843cea3eb0d8e40e99131f42974178d44f73b7b_cppui_modular254, - 0x09e8aba671481197679faf752a0f78e342fe9c491596ab6758f170939785179f_cppui_modular254, - 0x1deb05180e833e45659052a7ebaf816c7efd12a7f9eec94b7bc7c683f1363d5c_cppui_modular254, - 0x19a70ec6bdfc9098a926efbcc04aa9ee248997e8b2c24af335fd6523e5250879_cppui_modular254, - 0x21d773660adafb8a879986f9aab4890566353a3777d8a3f1eb93abe10bbf1f64_cppui_modular254, + 0x08dbdc2e21ef11f2c57299687843cea3eb0d8e40e99131f42974178d44f73b7b_big_uint254, + 0x09e8aba671481197679faf752a0f78e342fe9c491596ab6758f170939785179f_big_uint254, + 0x1deb05180e833e45659052a7ebaf816c7efd12a7f9eec94b7bc7c683f1363d5c_big_uint254, + 0x19a70ec6bdfc9098a926efbcc04aa9ee248997e8b2c24af335fd6523e5250879_big_uint254, + 0x21d773660adafb8a879986f9aab4890566353a3777d8a3f1eb93abe10bbf1f64_big_uint254, }}, {{ - 0x09f1890f72e9dc713e20ba637b89d5d397a6b01fcd667347f6f46617841c3901_cppui_modular254, - 0x05af459361eb454d2a300c61e446998d48fa1f897bf219d608c2145c33b111c3_cppui_modular254, - 0x0fa1a1d6829f0345664a66dc75a657335f336f15f340756cfa12fc850cc8b513_cppui_modular254, - 0x02e47a35bcc0c3a0bda0b1c0307ad543f4280fcf87f636f853655cf97a628bb0_cppui_modular254, - 0x14f773e9834c6bdeb8f90e78bf4c24b7203411460112491036621895204d0f12_cppui_modular254, + 0x09f1890f72e9dc713e20ba637b89d5d397a6b01fcd667347f6f46617841c3901_big_uint254, + 0x05af459361eb454d2a300c61e446998d48fa1f897bf219d608c2145c33b111c3_big_uint254, + 0x0fa1a1d6829f0345664a66dc75a657335f336f15f340756cfa12fc850cc8b513_big_uint254, + 0x02e47a35bcc0c3a0bda0b1c0307ad543f4280fcf87f636f853655cf97a628bb0_big_uint254, + 0x14f773e9834c6bdeb8f90e78bf4c24b7203411460112491036621895204d0f12_big_uint254, }}, {{ - 0x102d98cf502ed843255cf19d29bc7d8e642abe7cfd639992ffb091962fc8f7cc_cppui_modular254, - 0x043dd5f4aa5a76dd4c47f6c65da7ca2320d4c73ad3294738cba686a7e91373c2_cppui_modular254, - 0x21833819c3337194a6c0d29a48d4f2676f0e7c79743a306f4cfdb2b26bd11efa_cppui_modular254, - 0x0f281925cf5ee649b474a6819d116ca3eb4eca246c311ecadc53262a3cff2b53_cppui_modular254, - 0x0d3e2477a7b10beb44709c7746d6824edf625dd60504d5dc93ce662f15c238d6_cppui_modular254, + 0x102d98cf502ed843255cf19d29bc7d8e642abe7cfd639992ffb091962fc8f7cc_big_uint254, + 0x043dd5f4aa5a76dd4c47f6c65da7ca2320d4c73ad3294738cba686a7e91373c2_big_uint254, + 0x21833819c3337194a6c0d29a48d4f2676f0e7c79743a306f4cfdb2b26bd11efa_big_uint254, + 0x0f281925cf5ee649b474a6819d116ca3eb4eca246c311ecadc53262a3cff2b53_big_uint254, + 0x0d3e2477a7b10beb44709c7746d6824edf625dd60504d5dc93ce662f15c238d6_big_uint254, }}, {{ - 0x2cd7f641bedbf66956ff8a01be9cde35d80f80ab51e73b49acbfc3eff5aefc44_cppui_modular254, - 0x29e95b492bf2f95f4d09380f98b74e389149d24045811d7a86dd861310463cf8_cppui_modular254, - 0x22da66bc62e8f011266efca86a6c810f9ae4c51af6ffeb57f8b3c50df83cc13e_cppui_modular254, - 0x0fe6d30de7a82d163023491794f4aca3220db79e8129df3643072d841925554a_cppui_modular254, - 0x0050e842a1299909123c46eff185c23ad312d03fef1adfecc7e07ecb298fd67f_cppui_modular254, + 0x2cd7f641bedbf66956ff8a01be9cde35d80f80ab51e73b49acbfc3eff5aefc44_big_uint254, + 0x29e95b492bf2f95f4d09380f98b74e389149d24045811d7a86dd861310463cf8_big_uint254, + 0x22da66bc62e8f011266efca86a6c810f9ae4c51af6ffeb57f8b3c50df83cc13e_big_uint254, + 0x0fe6d30de7a82d163023491794f4aca3220db79e8129df3643072d841925554a_big_uint254, + 0x0050e842a1299909123c46eff185c23ad312d03fef1adfecc7e07ecb298fd67f_big_uint254, }}, {{ - 0x2130a3a7b3221222be34cc53a42d7733666f9ddf714ed7c5885cbbdb63108c21_cppui_modular254, - 0x2df9ee294edf99e3d8d5883fe0566c24aa66731f34a93280e1d328e67b33c9fa_cppui_modular254, - 0x1bf7d6e489ad8c0cf26eb68cc21ff54158132396dc250aeba4b6fc5fc3372762_cppui_modular254, - 0x0c602fa155be958761eaf739617ab136cf7b807728bf7fe35d4778d311780e54_cppui_modular254, - 0x2e50e2c5b36aa20532407d86b8d22d7d5154080a24972faeb63faf0121ed7f21_cppui_modular254, + 0x2130a3a7b3221222be34cc53a42d7733666f9ddf714ed7c5885cbbdb63108c21_big_uint254, + 0x2df9ee294edf99e3d8d5883fe0566c24aa66731f34a93280e1d328e67b33c9fa_big_uint254, + 0x1bf7d6e489ad8c0cf26eb68cc21ff54158132396dc250aeba4b6fc5fc3372762_big_uint254, + 0x0c602fa155be958761eaf739617ab136cf7b807728bf7fe35d4778d311780e54_big_uint254, + 0x2e50e2c5b36aa20532407d86b8d22d7d5154080a24972faeb63faf0121ed7f21_big_uint254, }}, {{ - 0x17c2510982a7b5825710d6290ec4f782f674995ee8409b42b459123b180332e1_cppui_modular254, - 0x0b0d52f03c8af7276803ecf2465b885b21337b538eabd2f6b2ab255f376b42a8_cppui_modular254, - 0x0f5633df1972b9455953d88a63f80647a9ac77c6c0f85d4561972dd8fab8bd14_cppui_modular254, - 0x0ebf7ad29ca13804e1422e939681155124780ff43e76e929035498130a7f1572_cppui_modular254, - 0x1aff13c81bda47e80b02962173bba343e18f94bee27c8a57661b1103a720ffe2_cppui_modular254, + 0x17c2510982a7b5825710d6290ec4f782f674995ee8409b42b459123b180332e1_big_uint254, + 0x0b0d52f03c8af7276803ecf2465b885b21337b538eabd2f6b2ab255f376b42a8_big_uint254, + 0x0f5633df1972b9455953d88a63f80647a9ac77c6c0f85d4561972dd8fab8bd14_big_uint254, + 0x0ebf7ad29ca13804e1422e939681155124780ff43e76e929035498130a7f1572_big_uint254, + 0x1aff13c81bda47e80b02962173bba343e18f94bee27c8a57661b1103a720ffe2_big_uint254, }}, {{ - 0x210449dbf5cf3061da2465be85505862d3f31de1a3b58ff35713be57efac6c07_cppui_modular254, - 0x088230c2794e50c57d75cd6d3c7b9dbe19d1e2f1d3001044b93ad1c3ee629817_cppui_modular254, - 0x1c408c256490b0a1da08dc464138dfc78cce9a9e16c7705617a4d6dbb20e7e3a_cppui_modular254, - 0x074517e081eb4c1f22d1771200fb07658f7c77654d58440490dd6f557e9e3903_cppui_modular254, - 0x02d04e9c21df1dbd88524bdb203691b4cee5530559d6cf0fa05adf61e12fdcbf_cppui_modular254, + 0x210449dbf5cf3061da2465be85505862d3f31de1a3b58ff35713be57efac6c07_big_uint254, + 0x088230c2794e50c57d75cd6d3c7b9dbe19d1e2f1d3001044b93ad1c3ee629817_big_uint254, + 0x1c408c256490b0a1da08dc464138dfc78cce9a9e16c7705617a4d6dbb20e7e3a_big_uint254, + 0x074517e081eb4c1f22d1771200fb07658f7c77654d58440490dd6f557e9e3903_big_uint254, + 0x02d04e9c21df1dbd88524bdb203691b4cee5530559d6cf0fa05adf61e12fdcbf_big_uint254, }}, {{ - 0x2eb7a011b8bce91082e13ebd75de3b58eb9b4650dae9f11aa81db32cf1b67b13_cppui_modular254, - 0x2efda77ed35f4af0299f75d6e8a849b54d2ac6bf95368304e6030c18f0cf17b5_cppui_modular254, - 0x09199dcafd50ce642eddbeda65206d4f61a73d10852b8114c51b2440192ae064_cppui_modular254, - 0x268c5cfc446d399c4dd319db666a75b5cb655d8c1797e9fa76181cb4216e1562_cppui_modular254, - 0x2303a652c949071826b0e9a36c80578697b44e912cce6687012854eda11a18dc_cppui_modular254, + 0x2eb7a011b8bce91082e13ebd75de3b58eb9b4650dae9f11aa81db32cf1b67b13_big_uint254, + 0x2efda77ed35f4af0299f75d6e8a849b54d2ac6bf95368304e6030c18f0cf17b5_big_uint254, + 0x09199dcafd50ce642eddbeda65206d4f61a73d10852b8114c51b2440192ae064_big_uint254, + 0x268c5cfc446d399c4dd319db666a75b5cb655d8c1797e9fa76181cb4216e1562_big_uint254, + 0x2303a652c949071826b0e9a36c80578697b44e912cce6687012854eda11a18dc_big_uint254, }}, {{ - 0x27c53563b12a6ee2c3f041f31dc45922bc5353eb110868d237073f4efb35fbdf_cppui_modular254, - 0x1201a87eaf4ae618f02bd82d0a5109049969b5248cfe90f42c278f22615d2b0e_cppui_modular254, - 0x2c43169439fcd69ead8214997bb069becafcb1ba2c51e5706cb4b43dab2a443d_cppui_modular254, - 0x0683597315359040ea03c45d6984c6894f46cbb36d702e3c4fb9847e6304d944_cppui_modular254, - 0x03545706706eab36afb93b128febd16fb0425e158314197b77795ad3a798d183_cppui_modular254, + 0x27c53563b12a6ee2c3f041f31dc45922bc5353eb110868d237073f4efb35fbdf_big_uint254, + 0x1201a87eaf4ae618f02bd82d0a5109049969b5248cfe90f42c278f22615d2b0e_big_uint254, + 0x2c43169439fcd69ead8214997bb069becafcb1ba2c51e5706cb4b43dab2a443d_big_uint254, + 0x0683597315359040ea03c45d6984c6894f46cbb36d702e3c4fb9847e6304d944_big_uint254, + 0x03545706706eab36afb93b128febd16fb0425e158314197b77795ad3a798d183_big_uint254, }}, {{ - 0x1a33c254ec117619d35f1fc051b31728740bed23a6a37870edb393b71a0c0e6b_cppui_modular254, - 0x1ffe6968a4470cd567b0c002281caf996e88f71e759b87e6f338e517f1690c78_cppui_modular254, - 0x0fd66e03ba8808ffecb059c899fd80f4140ddd5d2a5c4483107f4e02e355b393_cppui_modular254, - 0x263ab69f13b966f8197394552906b17e6c8617a7bdd5d74a7be3396b7fe013ab_cppui_modular254, - 0x16a425e47d1110625054d5a165de413e3bd87d5aa3958fdd6eb7e03e39ba4046_cppui_modular254, + 0x1a33c254ec117619d35f1fc051b31728740bed23a6a37870edb393b71a0c0e6b_big_uint254, + 0x1ffe6968a4470cd567b0c002281caf996e88f71e759b87e6f338e517f1690c78_big_uint254, + 0x0fd66e03ba8808ffecb059c899fd80f4140ddd5d2a5c4483107f4e02e355b393_big_uint254, + 0x263ab69f13b966f8197394552906b17e6c8617a7bdd5d74a7be3396b7fe013ab_big_uint254, + 0x16a425e47d1110625054d5a165de413e3bd87d5aa3958fdd6eb7e03e39ba4046_big_uint254, }}, {{ - 0x2dc510a4719ec10cad752f03c673f0e253cc31d13e39e909fcc5f73af9138d9a_cppui_modular254, - 0x24df8e8d856c5b5e1bd1cad23d07dda3423c5179329b7a82cb4aa709a94576e5_cppui_modular254, - 0x2bcc94ff4fc3c76f3cd5c68915a042e87628249a01b09561bdf24a6cdce5620f_cppui_modular254, - 0x076c1e88dc540c8d8de54e343df7c429d3295f52c38cffe6b48be86852da97df_cppui_modular254, - 0x09b5f209a451ac431c051fb12d9a5e4fe40ee1601120947da990fb8e12cb46e1_cppui_modular254, + 0x2dc510a4719ec10cad752f03c673f0e253cc31d13e39e909fcc5f73af9138d9a_big_uint254, + 0x24df8e8d856c5b5e1bd1cad23d07dda3423c5179329b7a82cb4aa709a94576e5_big_uint254, + 0x2bcc94ff4fc3c76f3cd5c68915a042e87628249a01b09561bdf24a6cdce5620f_big_uint254, + 0x076c1e88dc540c8d8de54e343df7c429d3295f52c38cffe6b48be86852da97df_big_uint254, + 0x09b5f209a451ac431c051fb12d9a5e4fe40ee1601120947da990fb8e12cb46e1_big_uint254, }}, {{ - 0x205f17b0d8729e2eaa88d6a44135a6ab64e9424f55b0f1ea0683af75eb677c07_cppui_modular254, - 0x281c5c688836f6cf912638c38be046cd091681f0a41761720cdd1edf9f237029_cppui_modular254, - 0x1a053e6878e900f45f4d67448c471cf3009a44e7a02ea50e4afa44f2592621f5_cppui_modular254, - 0x100dc7d426debe3007fb7ceac84e4f5468efcb897e7bbee981742839d59e064c_cppui_modular254, - 0x17022672a016a957bb87e2cfadc8b75fb28905bdb62c82c80b1cb31b411e49c8_cppui_modular254, + 0x205f17b0d8729e2eaa88d6a44135a6ab64e9424f55b0f1ea0683af75eb677c07_big_uint254, + 0x281c5c688836f6cf912638c38be046cd091681f0a41761720cdd1edf9f237029_big_uint254, + 0x1a053e6878e900f45f4d67448c471cf3009a44e7a02ea50e4afa44f2592621f5_big_uint254, + 0x100dc7d426debe3007fb7ceac84e4f5468efcb897e7bbee981742839d59e064c_big_uint254, + 0x17022672a016a957bb87e2cfadc8b75fb28905bdb62c82c80b1cb31b411e49c8_big_uint254, }}, {{ - 0x1086db7e2760fc8b71053a87ebe151239fb8b547182b170de0c27203f954f4d2_cppui_modular254, - 0x15384fe39d73b63302460ae4c2942fac2b41fb65a185536fb85dd24fd7584064_cppui_modular254, - 0x2ebb599fe9136d424bf4abc5342c6c7447b1a853205fcfb5519e551357709008_cppui_modular254, - 0x1b4b5e87cfb9262cfec3c0f0542e4c5a4cf278292b4ce3eed996fac6f4d37288_cppui_modular254, - 0x2465053ae50b6885801f3f82e302cafbbb4a7581bb4fba60b637febe659e5057_cppui_modular254, + 0x1086db7e2760fc8b71053a87ebe151239fb8b547182b170de0c27203f954f4d2_big_uint254, + 0x15384fe39d73b63302460ae4c2942fac2b41fb65a185536fb85dd24fd7584064_big_uint254, + 0x2ebb599fe9136d424bf4abc5342c6c7447b1a853205fcfb5519e551357709008_big_uint254, + 0x1b4b5e87cfb9262cfec3c0f0542e4c5a4cf278292b4ce3eed996fac6f4d37288_big_uint254, + 0x2465053ae50b6885801f3f82e302cafbbb4a7581bb4fba60b637febe659e5057_big_uint254, }}, {{ - 0x114f32edcdea09cd095c5bb5d38f1b97da9f05e18b3708bf6e0ab9d3d54859ef_cppui_modular254, - 0x2bc70dfeb2baab2f6b387cd77be779ac2e5e5519f3d18123ee28d8c2543c7148_cppui_modular254, - 0x01c9bf7a203ce22b775e3a61ad7e77b6a78348b9f6ec68a412e49bfe32c05415_cppui_modular254, - 0x0514b0fe5909ea887bedb0295fbbcec355cfb575ff6a97cd9f4ad00ccb57ee9b_cppui_modular254, - 0x267c76ec81934cc81a132a8b058910a12092520b12a201af03e3202d7b6c1b7e_cppui_modular254, + 0x114f32edcdea09cd095c5bb5d38f1b97da9f05e18b3708bf6e0ab9d3d54859ef_big_uint254, + 0x2bc70dfeb2baab2f6b387cd77be779ac2e5e5519f3d18123ee28d8c2543c7148_big_uint254, + 0x01c9bf7a203ce22b775e3a61ad7e77b6a78348b9f6ec68a412e49bfe32c05415_big_uint254, + 0x0514b0fe5909ea887bedb0295fbbcec355cfb575ff6a97cd9f4ad00ccb57ee9b_big_uint254, + 0x267c76ec81934cc81a132a8b058910a12092520b12a201af03e3202d7b6c1b7e_big_uint254, }}, {{ - 0x29170e3322b3d8d5c78c84babbb470adf1622493ce83e95cfb151cf757bde5d6_cppui_modular254, - 0x019f6a8124b19e33af33e5d3873f9c335c6f09a45486cab536dd596ca41d9519_cppui_modular254, - 0x1904aa4d6908544a8b348e9db1981c27009ed8ea171518ae5405d036242b60e9_cppui_modular254, - 0x26f17873949bc679f7f043956694e422b3cee1de9dd6f6473b932a476455ff1a_cppui_modular254, - 0x1ac668f612b8243c193b33720b8aa54040c476031197131ebdcac9b18bc48f75_cppui_modular254, + 0x29170e3322b3d8d5c78c84babbb470adf1622493ce83e95cfb151cf757bde5d6_big_uint254, + 0x019f6a8124b19e33af33e5d3873f9c335c6f09a45486cab536dd596ca41d9519_big_uint254, + 0x1904aa4d6908544a8b348e9db1981c27009ed8ea171518ae5405d036242b60e9_big_uint254, + 0x26f17873949bc679f7f043956694e422b3cee1de9dd6f6473b932a476455ff1a_big_uint254, + 0x1ac668f612b8243c193b33720b8aa54040c476031197131ebdcac9b18bc48f75_big_uint254, }}, {{ - 0x0996d961a75c0d07196dae45bf624766ccfbf8555be9796da52f81568ef0663d_cppui_modular254, - 0x030c97e1b8cad1d4fd50d1b4383fbe6674d171f99c63febb5425b395c24fc819_cppui_modular254, - 0x06e3ad6a46900e2d3953370255b68f89b3e523f1fe502642ee226f2d8bd0848f_cppui_modular254, - 0x1d6b3755331cd0216b6880e42f9880f565cb94b0e0455153a329890588cc916e_cppui_modular254, - 0x28e4dcba4b96f12a59b041535e730ac8c35189dc0b85ac033dd38c08bae531f2_cppui_modular254, + 0x0996d961a75c0d07196dae45bf624766ccfbf8555be9796da52f81568ef0663d_big_uint254, + 0x030c97e1b8cad1d4fd50d1b4383fbe6674d171f99c63febb5425b395c24fc819_big_uint254, + 0x06e3ad6a46900e2d3953370255b68f89b3e523f1fe502642ee226f2d8bd0848f_big_uint254, + 0x1d6b3755331cd0216b6880e42f9880f565cb94b0e0455153a329890588cc916e_big_uint254, + 0x28e4dcba4b96f12a59b041535e730ac8c35189dc0b85ac033dd38c08bae531f2_big_uint254, }}, {{ - 0x08b6086046a835508ccf484f2974b6a6b0712a476260376c7a3b3e4bc4a47a14_cppui_modular254, - 0x162cd2ca7fe3b5f1444bcec97812019bb6fd85fba6a0536a89643e15b9bb3b52_cppui_modular254, - 0x28f1e03baaea9bbc05af5b11937e4f5cb5c9a9c1192063d1998c01c64d483a76_cppui_modular254, - 0x1bdb062778d7c15da395af2734c25faa0127d2aab4aa71366031a0bb6791ce10_cppui_modular254, - 0x2375839502e09890cb2914e829627e0e0fc98870b2324a8b50329ebdd24749cb_cppui_modular254, + 0x08b6086046a835508ccf484f2974b6a6b0712a476260376c7a3b3e4bc4a47a14_big_uint254, + 0x162cd2ca7fe3b5f1444bcec97812019bb6fd85fba6a0536a89643e15b9bb3b52_big_uint254, + 0x28f1e03baaea9bbc05af5b11937e4f5cb5c9a9c1192063d1998c01c64d483a76_big_uint254, + 0x1bdb062778d7c15da395af2734c25faa0127d2aab4aa71366031a0bb6791ce10_big_uint254, + 0x2375839502e09890cb2914e829627e0e0fc98870b2324a8b50329ebdd24749cb_big_uint254, }}, {{ - 0x1fa8662fbcb61fb3ad7c55668dc9423a332dc87cfb2df456e92d33611ed7bb50_cppui_modular254, - 0x1e4fad2dd6b0a6f1f8707f721716c8a446e2fb2c47a5138f3f7f9736079d7694_cppui_modular254, - 0x211256d16c7269fd6df6f5fcdd1fa788ba3bd050059f53d261b0f5f13731ffe7_cppui_modular254, - 0x2e49084b336eceaa4f8e2a2e6af08318f42060e574dda341f4a1079b12bcc5a5_cppui_modular254, - 0x0ce19f54cdc39f7f3bf35192ac6808211aecea08dfe14cab758d25891fb00bb9_cppui_modular254, + 0x1fa8662fbcb61fb3ad7c55668dc9423a332dc87cfb2df456e92d33611ed7bb50_big_uint254, + 0x1e4fad2dd6b0a6f1f8707f721716c8a446e2fb2c47a5138f3f7f9736079d7694_big_uint254, + 0x211256d16c7269fd6df6f5fcdd1fa788ba3bd050059f53d261b0f5f13731ffe7_big_uint254, + 0x2e49084b336eceaa4f8e2a2e6af08318f42060e574dda341f4a1079b12bcc5a5_big_uint254, + 0x0ce19f54cdc39f7f3bf35192ac6808211aecea08dfe14cab758d25891fb00bb9_big_uint254, }}, {{ - 0x0011c5d56c390e893cc394221261d8748dc60451e4ae4e1c84a8468bab2c14cb_cppui_modular254, - 0x17d79ff06b63ac2a8a9e05ee6af3dbb7ca60e17bfa39b47514a8cd8051579b4c_cppui_modular254, - 0x19a7d3a446cb5393dc74560093592b06b1a8b35cd6416a2ecab00173639015fa_cppui_modular254, - 0x030c00a0933dcdba2a808b2e1b9282f331f04596d8928da7aa6c3c97237037a6_cppui_modular254, - 0x16bcb447ce2d50f3ae25ad080695382e935d2d00184c4acc9370be8aab64139c_cppui_modular254, + 0x0011c5d56c390e893cc394221261d8748dc60451e4ae4e1c84a8468bab2c14cb_big_uint254, + 0x17d79ff06b63ac2a8a9e05ee6af3dbb7ca60e17bfa39b47514a8cd8051579b4c_big_uint254, + 0x19a7d3a446cb5393dc74560093592b06b1a8b35cd6416a2ecab00173639015fa_big_uint254, + 0x030c00a0933dcdba2a808b2e1b9282f331f04596d8928da7aa6c3c97237037a6_big_uint254, + 0x16bcb447ce2d50f3ae25ad080695382e935d2d00184c4acc9370be8aab64139c_big_uint254, }}, {{ - 0x12341b46b0150aa25ea4ec8715312997e62124f37cab7b6d39255b7cd66feb1d_cppui_modular254, - 0x0e86d13917f44050b72a97b2bf610c84002fc28e296d1044dc89212db6a49ff4_cppui_modular254, - 0x08e6eb4089d37d66d357e00b53d7f30d1052a181f8f2eb14d059025b110c7262_cppui_modular254, - 0x2ea123856245f6c84738d15dd1481a0c0415ccb351a1e0cee10c48ce97ca7b18_cppui_modular254, - 0x2dca72b2ebcab8c23446e00330b163104195789025413abf664db0f9c84dfa6f_cppui_modular254, + 0x12341b46b0150aa25ea4ec8715312997e62124f37cab7b6d39255b7cd66feb1d_big_uint254, + 0x0e86d13917f44050b72a97b2bf610c84002fc28e296d1044dc89212db6a49ff4_big_uint254, + 0x08e6eb4089d37d66d357e00b53d7f30d1052a181f8f2eb14d059025b110c7262_big_uint254, + 0x2ea123856245f6c84738d15dd1481a0c0415ccb351a1e0cee10c48ce97ca7b18_big_uint254, + 0x2dca72b2ebcab8c23446e00330b163104195789025413abf664db0f9c84dfa6f_big_uint254, }}, {{ - 0x06ff9ed50d327e8463329f585ec924b3f2f6b4235f036fa4c64a26cbd42b6a6b_cppui_modular254, - 0x246a10b7e3e0089947f7c9bda3d54df8e2a60e0cca84ea2ac630a4535afbf730_cppui_modular254, - 0x22a63501c5f04b9018719ed99d700ee52f846a715ae67ad75c96b39d688b6691_cppui_modular254, - 0x2f4c50477f7fd9c671799ac5d2e224cdb9164f58351d8aa140ec07e514fae937_cppui_modular254, - 0x10ffb7aad1f51c7d13b17f4d876d9a1e38f0ba8a4a23d4b50cda32cad851567e_cppui_modular254, + 0x06ff9ed50d327e8463329f585ec924b3f2f6b4235f036fa4c64a26cbd42b6a6b_big_uint254, + 0x246a10b7e3e0089947f7c9bda3d54df8e2a60e0cca84ea2ac630a4535afbf730_big_uint254, + 0x22a63501c5f04b9018719ed99d700ee52f846a715ae67ad75c96b39d688b6691_big_uint254, + 0x2f4c50477f7fd9c671799ac5d2e224cdb9164f58351d8aa140ec07e514fae937_big_uint254, + 0x10ffb7aad1f51c7d13b17f4d876d9a1e38f0ba8a4a23d4b50cda32cad851567e_big_uint254, }}, {{ - 0x0e9cefddc3c2d3bea4d39722532d5420784027352187e7af1a056935c35803ae_cppui_modular254, - 0x07af84a4d3141e7ac23352e6dc6ea4afa1656f96a33c8978a3e83bdd4ba62b41_cppui_modular254, - 0x2d9e31a10aebc761f8de00d14b1e566d1a39323d6e89b638e940f3ec8a22c3c5_cppui_modular254, - 0x27f19a6532e66b5333db1afd592f66f1d36034b314dad8447656747be27e64c7_cppui_modular254, - 0x0058fa3c8454d63354b2024c3b4a577a180ed99f8f3155cd7e4d617d47d07ffd_cppui_modular254, + 0x0e9cefddc3c2d3bea4d39722532d5420784027352187e7af1a056935c35803ae_big_uint254, + 0x07af84a4d3141e7ac23352e6dc6ea4afa1656f96a33c8978a3e83bdd4ba62b41_big_uint254, + 0x2d9e31a10aebc761f8de00d14b1e566d1a39323d6e89b638e940f3ec8a22c3c5_big_uint254, + 0x27f19a6532e66b5333db1afd592f66f1d36034b314dad8447656747be27e64c7_big_uint254, + 0x0058fa3c8454d63354b2024c3b4a577a180ed99f8f3155cd7e4d617d47d07ffd_big_uint254, }}, {{ - 0x041627b6715b780967957c080699343eb0414a205d3a175d708964956816a5d5_cppui_modular254, - 0x006ac49dd9253edc7f632e57b958ccecd98201471cf1f66589888f12b727c52d_cppui_modular254, - 0x0131adffd8bd7254b1d8c3616bbe3386ec0c9c0d6d25a9a4ec46a6bf18301398_cppui_modular254, - 0x1c4a6f52c9fccf7a4138e413ef62a28377977ad7e25e49a3cf030e1cd8f9f5b6_cppui_modular254, - 0x03f2a6be51ec677f946551b3860ea479fee048ae2078aeb7d1f7958d2c2645f6_cppui_modular254, + 0x041627b6715b780967957c080699343eb0414a205d3a175d708964956816a5d5_big_uint254, + 0x006ac49dd9253edc7f632e57b958ccecd98201471cf1f66589888f12b727c52d_big_uint254, + 0x0131adffd8bd7254b1d8c3616bbe3386ec0c9c0d6d25a9a4ec46a6bf18301398_big_uint254, + 0x1c4a6f52c9fccf7a4138e413ef62a28377977ad7e25e49a3cf030e1cd8f9f5b6_big_uint254, + 0x03f2a6be51ec677f946551b3860ea479fee048ae2078aeb7d1f7958d2c2645f6_big_uint254, }}, {{ - 0x2da770aad2c2eb09391a0cb78ef3a9648a1372d8543119564d7376396b8ddc62_cppui_modular254, - 0x15278463665f74cddc1802febfab02cec9d45fe866c359c738062afb75d64a03_cppui_modular254, - 0x12fe278aa36544eac9731027090518d434e38ea966a08a6f8d580638ac54c773_cppui_modular254, - 0x149b9c802182558a4c45d119d3f4cc7fd8587604ca4f0d6e21b06ff30b6a23b6_cppui_modular254, - 0x0812e7b4d847bc8517d19319772f3c9855e044fd60dbac9a0adc4959b691dfe4_cppui_modular254, + 0x2da770aad2c2eb09391a0cb78ef3a9648a1372d8543119564d7376396b8ddc62_big_uint254, + 0x15278463665f74cddc1802febfab02cec9d45fe866c359c738062afb75d64a03_big_uint254, + 0x12fe278aa36544eac9731027090518d434e38ea966a08a6f8d580638ac54c773_big_uint254, + 0x149b9c802182558a4c45d119d3f4cc7fd8587604ca4f0d6e21b06ff30b6a23b6_big_uint254, + 0x0812e7b4d847bc8517d19319772f3c9855e044fd60dbac9a0adc4959b691dfe4_big_uint254, }}, {{ - 0x02ed8d8ddeafe3d9d8df7f28a0bfaa7f555813c7e7503aea2a66973703a0c61b_cppui_modular254, - 0x0ebd073ba0537b514deb6029f921029e55e5e4d9a03d6b6ba1304038662d4db8_cppui_modular254, - 0x15c754d5b14b2c4205c6ba8d2ccd028255b3e792c6afa08b44ee75b62eff9f59_cppui_modular254, - 0x169515c89ac5479db0ed8fa6fa311b391cc1235270f4cbc5c29e7cbc30e8732a_cppui_modular254, - 0x25479fbfb3a68f982388f2621001101608bdc29f6ff037696d9161f5cd9a4fef_cppui_modular254, + 0x02ed8d8ddeafe3d9d8df7f28a0bfaa7f555813c7e7503aea2a66973703a0c61b_big_uint254, + 0x0ebd073ba0537b514deb6029f921029e55e5e4d9a03d6b6ba1304038662d4db8_big_uint254, + 0x15c754d5b14b2c4205c6ba8d2ccd028255b3e792c6afa08b44ee75b62eff9f59_big_uint254, + 0x169515c89ac5479db0ed8fa6fa311b391cc1235270f4cbc5c29e7cbc30e8732a_big_uint254, + 0x25479fbfb3a68f982388f2621001101608bdc29f6ff037696d9161f5cd9a4fef_big_uint254, }}, {{ - 0x14475c4bd520451f3c852cb0311a578ca7f8e6e972182196ce09486e94be6071_cppui_modular254, - 0x045a691066cc66bec9baf2798833a1dfd3a847502aec8d5f5c4e73363d097799_cppui_modular254, - 0x26029c0c267c799fb833ac8a11e3a3f0147a8ca037221b90013b8bcb37eba683_cppui_modular254, - 0x163facb34ff572fbf7c946969c1c260873ce12a6a94a3e45b8101d5b948d1641_cppui_modular254, - 0x2c714e96e1913b351d969320cc69d5ec13e06a6275e58688af8ee00c4240ee28_cppui_modular254, + 0x14475c4bd520451f3c852cb0311a578ca7f8e6e972182196ce09486e94be6071_big_uint254, + 0x045a691066cc66bec9baf2798833a1dfd3a847502aec8d5f5c4e73363d097799_big_uint254, + 0x26029c0c267c799fb833ac8a11e3a3f0147a8ca037221b90013b8bcb37eba683_big_uint254, + 0x163facb34ff572fbf7c946969c1c260873ce12a6a94a3e45b8101d5b948d1641_big_uint254, + 0x2c714e96e1913b351d969320cc69d5ec13e06a6275e58688af8ee00c4240ee28_big_uint254, }}, {{ - 0x1c1661e2a7ce74b75aba84665ecd2bf9ddd6268f06debfe2d52b804eff1d5fa6_cppui_modular254, - 0x06a69ae795ee9bfe5e5af3e6619a47d26635b34c2a0889fea8c3c068b7dc2c71_cppui_modular254, - 0x113d58535d892115c5d28b4c19a3609374dbdbadf54195c731416c85d731d46a_cppui_modular254, - 0x2ab89102e2b8d5e638ff97d761da6042e534f1ff47f7917a2ca1a74063b46101_cppui_modular254, - 0x03c11ca79e41fdfe962730c45e699546349031893da2b4fd39804fd6a15ad1b3_cppui_modular254, + 0x1c1661e2a7ce74b75aba84665ecd2bf9ddd6268f06debfe2d52b804eff1d5fa6_big_uint254, + 0x06a69ae795ee9bfe5e5af3e6619a47d26635b34c2a0889fea8c3c068b7dc2c71_big_uint254, + 0x113d58535d892115c5d28b4c19a3609374dbdbadf54195c731416c85d731d46a_big_uint254, + 0x2ab89102e2b8d5e638ff97d761da6042e534f1ff47f7917a2ca1a74063b46101_big_uint254, + 0x03c11ca79e41fdfe962730c45e699546349031893da2b4fd39804fd6a15ad1b3_big_uint254, }}, {{ - 0x27096c672621403888014ddbbbfc9da1f7f67b4d4cfe846c6adf040faaf2669c_cppui_modular254, - 0x2de32ad15497aef4d504d4deeb53b13c66db790ce486130caa9dc2b57ef5be0d_cppui_modular254, - 0x0dc108f2b0a280d2fd5d341310722a2d28c738dddaec9f3d255754448eefd001_cppui_modular254, - 0x1869f3b763fe8164c96858a1bb9efad5bcdc3eebc409be7c7d34ca50365d832f_cppui_modular254, - 0x022ed3a2d9ff31cbf82559fe6a911843b616945e16a568d48c6d33767129682d_cppui_modular254, + 0x27096c672621403888014ddbbbfc9da1f7f67b4d4cfe846c6adf040faaf2669c_big_uint254, + 0x2de32ad15497aef4d504d4deeb53b13c66db790ce486130caa9dc2b57ef5be0d_big_uint254, + 0x0dc108f2b0a280d2fd5d341310722a2d28c738dddaec9f3d255754448eefd001_big_uint254, + 0x1869f3b763fe8164c96858a1bb9efad5bcdc3eebc409be7c7d34ca50365d832f_big_uint254, + 0x022ed3a2d9ff31cbf82559fe6a911843b616945e16a568d48c6d33767129682d_big_uint254, }}, {{ - 0x2155d6005210169e3944ed1365bd0e7292fca1f27c19c26610c6aec077d026bc_cppui_modular254, - 0x0de1ba7a562a8f7acae93263f5f1b4bbec0c0556c91af3db3ea5928c8caeae85_cppui_modular254, - 0x05dbb4406024beabcfce5bf46ec7da38126f740bce8d637b6351dfa7da902563_cppui_modular254, - 0x05d4149baac413bed4d8dc8ad778d32c00e789e3fcd72dccc97e5427a368fd5e_cppui_modular254, - 0x01cdf8b452d97c2b9be5046e7397e76ff0b6802fa941c7879212e22172c27b2e_cppui_modular254, + 0x2155d6005210169e3944ed1365bd0e7292fca1f27c19c26610c6aec077d026bc_big_uint254, + 0x0de1ba7a562a8f7acae93263f5f1b4bbec0c0556c91af3db3ea5928c8caeae85_big_uint254, + 0x05dbb4406024beabcfce5bf46ec7da38126f740bce8d637b6351dfa7da902563_big_uint254, + 0x05d4149baac413bed4d8dc8ad778d32c00e789e3fcd72dccc97e5427a368fd5e_big_uint254, + 0x01cdf8b452d97c2b9be5046e7397e76ff0b6802fa941c7879212e22172c27b2e_big_uint254, }}, {{ - 0x1fc6a71867027f56af8085ff81adce33c4d7c5015eced8c71b0a22279d46c07c_cppui_modular254, - 0x1040bef4c642d0345d4d59a5a7a3a42ba9e185b75306d9c3568e0fda96aaafc2_cppui_modular254, - 0x16b79c3a6bf316e0ff2c91b289334a4d2b21e95676431918a8081475ab8fad0d_cppui_modular254, - 0x20dff1bc30f6db6b434b3a1387e3c8c6a34070e52b601fc13cbe1cdcd59f474e_cppui_modular254, - 0x0212ac2ab7a6eaaec254955030a970f8062dd4171a726a8bdfb7fd8512ae060d_cppui_modular254, + 0x1fc6a71867027f56af8085ff81adce33c4d7c5015eced8c71b0a22279d46c07c_big_uint254, + 0x1040bef4c642d0345d4d59a5a7a3a42ba9e185b75306d9c3568e0fda96aaafc2_big_uint254, + 0x16b79c3a6bf316e0ff2c91b289334a4d2b21e95676431918a8081475ab8fad0d_big_uint254, + 0x20dff1bc30f6db6b434b3a1387e3c8c6a34070e52b601fc13cbe1cdcd59f474e_big_uint254, + 0x0212ac2ab7a6eaaec254955030a970f8062dd4171a726a8bdfb7fd8512ae060d_big_uint254, }}, {{ - 0x2f29377491474442869a109c9215637cb02dc03134f0044213c8119f6996ae09_cppui_modular254, - 0x0984ca6a5f9185d525ec93c33fea603273be9f3866aa284c5837d9f32d814bfa_cppui_modular254, - 0x0d080a6b6b3b60700d299bd6fa81220de491361c8a6bd19ceb0ee9294b24f028_cppui_modular254, - 0x0e65cd99e84b052f6789530638cb0ad821acc85b6400264dce929ed7c85a4544_cppui_modular254, - 0x2e208875bc7ac1224808f72c716cd05ee30e3d20380ff6a655975da12736920b_cppui_modular254, + 0x2f29377491474442869a109c9215637cb02dc03134f0044213c8119f6996ae09_big_uint254, + 0x0984ca6a5f9185d525ec93c33fea603273be9f3866aa284c5837d9f32d814bfa_big_uint254, + 0x0d080a6b6b3b60700d299bd6fa81220de491361c8a6bd19ceb0ee9294b24f028_big_uint254, + 0x0e65cd99e84b052f6789530638cb0ad821acc85b6400264dce929ed7c85a4544_big_uint254, + 0x2e208875bc7ac1224808f72c716cd05ee30e3d20380ff6a655975da12736920b_big_uint254, }}, {{ - 0x2989f3ae477c2fd376a0b0ff3d7dfac1ae2e3b894afd29f64a60d1aa8592bad5_cppui_modular254, - 0x11361ce544e941379222d101e6fac0ce918106a463290a3e3a74c3cea7189459_cppui_modular254, - 0x1e8d014b86cb5a7da539e10c173f6a75d122a822b8fb366c34c8bd05a2061438_cppui_modular254, - 0x173f65adec8deee27ba812ad29558e23a0c2324167ef6c91212ee2c28ee98733_cppui_modular254, - 0x01c36daaf9f01f1bafee8bd0c779ac3e5da5df7ad45499d0991bd695310eddd9_cppui_modular254, + 0x2989f3ae477c2fd376a0b0ff3d7dfac1ae2e3b894afd29f64a60d1aa8592bad5_big_uint254, + 0x11361ce544e941379222d101e6fac0ce918106a463290a3e3a74c3cea7189459_big_uint254, + 0x1e8d014b86cb5a7da539e10c173f6a75d122a822b8fb366c34c8bd05a2061438_big_uint254, + 0x173f65adec8deee27ba812ad29558e23a0c2324167ef6c91212ee2c28ee98733_big_uint254, + 0x01c36daaf9f01f1bafee8bd0c779ac3e5da5df7ad45499d0991bd695310eddd9_big_uint254, }}, {{ - 0x1353acb08c05adb4aa9ab1c485bb85fff277d1a3f2fc89944a6f5741f381e562_cppui_modular254, - 0x2e5abd2537207cad1860e71ea1188ee4009d33deb4f93aeb20f1c87a3b064d34_cppui_modular254, - 0x191d5c5edaef42d3d02eedbb7ab8562513deb4eb34913a13421726ba8f69455c_cppui_modular254, - 0x11d7f8d1f269264282a263fea6d7599d82a04c74c127de9dee7939dd2dcd089e_cppui_modular254, - 0x04218fde366829ed90f79ad5e67997973445cb4cd6bc6f951bad085286cac971_cppui_modular254, + 0x1353acb08c05adb4aa9ab1c485bb85fff277d1a3f2fc89944a6f5741f381e562_big_uint254, + 0x2e5abd2537207cad1860e71ea1188ee4009d33deb4f93aeb20f1c87a3b064d34_big_uint254, + 0x191d5c5edaef42d3d02eedbb7ab8562513deb4eb34913a13421726ba8f69455c_big_uint254, + 0x11d7f8d1f269264282a263fea6d7599d82a04c74c127de9dee7939dd2dcd089e_big_uint254, + 0x04218fde366829ed90f79ad5e67997973445cb4cd6bc6f951bad085286cac971_big_uint254, }}, {{ - 0x0070772f7cf52453048397ca5f47a202027b73b489301c3227b71c730d76d6dd_cppui_modular254, - 0x038a389baef5d9a7c865b065687a1d9b67681a98cd051634c1dc04dbe3d2b861_cppui_modular254, - 0x09a5eefab8b36a80cda446b2b4b59ccd0f39d00966a50beaf19860789015a6e5_cppui_modular254, - 0x01b588848b8b47c8b969c145109b4b583d9ec99edfacb7489d16212c7584cd8c_cppui_modular254, - 0x0b846e4a390e560f6e1af6dfc3341419545e5abfa323d817fed91e30d42954a6_cppui_modular254, + 0x0070772f7cf52453048397ca5f47a202027b73b489301c3227b71c730d76d6dd_big_uint254, + 0x038a389baef5d9a7c865b065687a1d9b67681a98cd051634c1dc04dbe3d2b861_big_uint254, + 0x09a5eefab8b36a80cda446b2b4b59ccd0f39d00966a50beaf19860789015a6e5_big_uint254, + 0x01b588848b8b47c8b969c145109b4b583d9ec99edfacb7489d16212c7584cd8c_big_uint254, + 0x0b846e4a390e560f6e1af6dfc3341419545e5abfa323d817fed91e30d42954a6_big_uint254, }}, {{ - 0x23a6679c7d9adb660d43a02ddb900040eb1513bc394fc4f985cabfe85ce72fe3_cppui_modular254, - 0x2e0374a699197e343e5caa35f1351e9f4c3402fb7c85ecccf72f31d6fe089254_cppui_modular254, - 0x0752cd899e52dc4d7f7a08af4cde3ff64b8cc0b1176bb9ec37d41913a7a27b48_cppui_modular254, - 0x068f8813127299dac349a2b6d57397a50275142b664b802c99e2873dd7ae55a7_cppui_modular254, - 0x2ba70a102355d549677574167434b3f986872d04a295b5b8b374330f2da202b5_cppui_modular254 + 0x23a6679c7d9adb660d43a02ddb900040eb1513bc394fc4f985cabfe85ce72fe3_big_uint254, + 0x2e0374a699197e343e5caa35f1351e9f4c3402fb7c85ecccf72f31d6fe089254_big_uint254, + 0x0752cd899e52dc4d7f7a08af4cde3ff64b8cc0b1176bb9ec37d41913a7a27b48_big_uint254, + 0x068f8813127299dac349a2b6d57397a50275142b664b802c99e2873dd7ae55a7_big_uint254, + 0x2ba70a102355d549677574167434b3f986872d04a295b5b8b374330f2da202b5_big_uint254 }}, {{ - 0x2c467af88748abf6a334d1df03b5521309f9099b825dd289b8609e70a0b50828_cppui_modular254, - 0x05c5f20bef1bd82701009a2b448ae881e3a52c2d1a31957296d29e5763e8f497_cppui_modular254, - 0x0dc6385fdc567be5842a381f6006e2c60cd083a2c649d9f23ac8c9fe61b73871_cppui_modular254, - 0x142d3983f3dc7f7e19d49911b8670fa70378d5b84150d25ed255baa8114b369c_cppui_modular254, - 0x29a01efb2f6aa894fd7e6d98c96a0fa0f36f86a7a99aa35c00fa18c1b2df67bf_cppui_modular254 + 0x2c467af88748abf6a334d1df03b5521309f9099b825dd289b8609e70a0b50828_big_uint254, + 0x05c5f20bef1bd82701009a2b448ae881e3a52c2d1a31957296d29e5763e8f497_big_uint254, + 0x0dc6385fdc567be5842a381f6006e2c60cd083a2c649d9f23ac8c9fe61b73871_big_uint254, + 0x142d3983f3dc7f7e19d49911b8670fa70378d5b84150d25ed255baa8114b369c_big_uint254, + 0x29a01efb2f6aa894fd7e6d98c96a0fa0f36f86a7a99aa35c00fa18c1b2df67bf_big_uint254 }}, {{ - 0x0525ffee737d605138c4a5066644ec630ab9e8afc64555b7d2a1af04eb613a76_cppui_modular254, - 0x1e807dca81d79581f076677ca0e822767e164f614910264ef177cf4238301dc8_cppui_modular254, - 0x0385fb3f89c74dc993510816472474d34c0223e0f733a52fdba56082dbd8757c_cppui_modular254, - 0x037640dc1afc0143e1a6298e53cae59fcfabd7016fd6ef1af558f337bab0ea01_cppui_modular254, - 0x1341999a1ed86919f12a6c5260829eee5fd56cf031da8050b7e4c0de896074b4_cppui_modular254 + 0x0525ffee737d605138c4a5066644ec630ab9e8afc64555b7d2a1af04eb613a76_big_uint254, + 0x1e807dca81d79581f076677ca0e822767e164f614910264ef177cf4238301dc8_big_uint254, + 0x0385fb3f89c74dc993510816472474d34c0223e0f733a52fdba56082dbd8757c_big_uint254, + 0x037640dc1afc0143e1a6298e53cae59fcfabd7016fd6ef1af558f337bab0ea01_big_uint254, + 0x1341999a1ed86919f12a6c5260829eee5fd56cf031da8050b7e4c0de896074b4_big_uint254 }}, {{ - 0x069eb075866b0af356906d4bafb10ad773afd642efdcc5657b244f65bed8ece7_cppui_modular254, - 0x171c0b81e62136e395b38e8e08b3e646d2726101d3afaa02ea1909a619033696_cppui_modular254, - 0x2c81814c9453f51cb6eb55c311753e84cbbdcb39bfe696f95575107502acced8_cppui_modular254, - 0x29d843c0415d35d9e3b33fadcf274b2ab04b39032adca92ce39b8a86a7c3a604_cppui_modular254, - 0x085d6a1070f3513d8436bccdabb78750d8e15ea5947f2cdaa7669cf3fae7728b_cppui_modular254 + 0x069eb075866b0af356906d4bafb10ad773afd642efdcc5657b244f65bed8ece7_big_uint254, + 0x171c0b81e62136e395b38e8e08b3e646d2726101d3afaa02ea1909a619033696_big_uint254, + 0x2c81814c9453f51cb6eb55c311753e84cbbdcb39bfe696f95575107502acced8_big_uint254, + 0x29d843c0415d35d9e3b33fadcf274b2ab04b39032adca92ce39b8a86a7c3a604_big_uint254, + 0x085d6a1070f3513d8436bccdabb78750d8e15ea5947f2cdaa7669cf3fae7728b_big_uint254 }}, {{ - 0x11820363ed541daa10a44ba665bf302cdbf1dd4e6706b02c9e2a5cda412fc394_cppui_modular254, - 0x201935a58f5c57fc02b60d61a83785bddfd3150e05f1df5d105840b751a16317_cppui_modular254, - 0x0a8c2820c56971aae27a952abd33a03d46794eedd686cd8ecfed610e87c02e9a_cppui_modular254, - 0x180638ff301a64ca04abd6d0bd7500b6650b65ff33e6be1fd50dbc163a281877_cppui_modular254, - 0x095c716266f1de59044f97114a4158a3f85ca8a937cfbec63e9b321a812dd36b_cppui_modular254 + 0x11820363ed541daa10a44ba665bf302cdbf1dd4e6706b02c9e2a5cda412fc394_big_uint254, + 0x201935a58f5c57fc02b60d61a83785bddfd3150e05f1df5d105840b751a16317_big_uint254, + 0x0a8c2820c56971aae27a952abd33a03d46794eedd686cd8ecfed610e87c02e9a_big_uint254, + 0x180638ff301a64ca04abd6d0bd7500b6650b65ff33e6be1fd50dbc163a281877_big_uint254, + 0x095c716266f1de59044f97114a4158a3f85ca8a937cfbec63e9b321a812dd36b_big_uint254 }}, {{ - 0x17c31ea02fbc378320d86ffed6c7ca1583b618c5c1a687818d4087a497d73490_cppui_modular254, - 0x05b86c4bb8ef318b6a7227e4192d149d3c17a9764ccd660de4d50a77f192a91b_cppui_modular254, - 0x265bc95df4a4c4876ff70d7ea2fde2c7ab15f4a6ae0d237cd6ce74ba986c7a7b_cppui_modular254, - 0x24752b47bc6c6bc8d9bbe48f5fef2f6908701739c5f5b4b3d6c886d4715c7929_cppui_modular254, - 0x14814a1e0f492a4ea0d86e527a96482178d624b98da96ee5e583b9324d974efe_cppui_modular254 + 0x17c31ea02fbc378320d86ffed6c7ca1583b618c5c1a687818d4087a497d73490_big_uint254, + 0x05b86c4bb8ef318b6a7227e4192d149d3c17a9764ccd660de4d50a77f192a91b_big_uint254, + 0x265bc95df4a4c4876ff70d7ea2fde2c7ab15f4a6ae0d237cd6ce74ba986c7a7b_big_uint254, + 0x24752b47bc6c6bc8d9bbe48f5fef2f6908701739c5f5b4b3d6c886d4715c7929_big_uint254, + 0x14814a1e0f492a4ea0d86e527a96482178d624b98da96ee5e583b9324d974efe_big_uint254 }}, {{ - 0x10def931073b6479bd60577378f29381997c8e041d3cfb3dc7523bca906f00bd_cppui_modular254, - 0x14f7ae770bf7e95f7f706c0d8ab4ed03fa0b880d28c69d031b4592c98610175f_cppui_modular254, - 0x1aef50a0cee751b59f926af40e8035d19decc9d428ebe4e775c5cc9dce1ce589_cppui_modular254, - 0x041935607172f68eba65ca60068dfe3b086c2a2d57d09602951214b57e73cf5a_cppui_modular254, - 0x26863e9dd24255d1573bd083959b856c0493fbefe83c819837a151d3bf452cb8_cppui_modular254 + 0x10def931073b6479bd60577378f29381997c8e041d3cfb3dc7523bca906f00bd_big_uint254, + 0x14f7ae770bf7e95f7f706c0d8ab4ed03fa0b880d28c69d031b4592c98610175f_big_uint254, + 0x1aef50a0cee751b59f926af40e8035d19decc9d428ebe4e775c5cc9dce1ce589_big_uint254, + 0x041935607172f68eba65ca60068dfe3b086c2a2d57d09602951214b57e73cf5a_big_uint254, + 0x26863e9dd24255d1573bd083959b856c0493fbefe83c819837a151d3bf452cb8_big_uint254 }}, {{ - 0x2036efb6f9830965eb3d7a068bd087c9f5adf251ba62052c652738e63ff8b3af_cppui_modular254, - 0x0c712a975b74dc9d766b639a029969ca30be4f75a753f854b00fa4f1b4f4ee9b_cppui_modular254, - 0x08014dab3cd1667e27afc99bfac1e6807afdff6456492ca3375731d387539699_cppui_modular254, - 0x198d07192db4fac2a82a4a79839d6a2b97c4dd4d37b4e8f3b53009f79b34e6a4_cppui_modular254, - 0x29eb1de42a3ad381b23b4131426897a32709b29d53bb946dfd15784d1f63e572_cppui_modular254 + 0x2036efb6f9830965eb3d7a068bd087c9f5adf251ba62052c652738e63ff8b3af_big_uint254, + 0x0c712a975b74dc9d766b639a029969ca30be4f75a753f854b00fa4f1b4f4ee9b_big_uint254, + 0x08014dab3cd1667e27afc99bfac1e6807afdff6456492ca3375731d387539699_big_uint254, + 0x198d07192db4fac2a82a4a79839d6a2b97c4dd4d37b4e8f3b53009f79b34e6a4_big_uint254, + 0x29eb1de42a3ad381b23b4131426897a32709b29d53bb946dfd15784d1f63e572_big_uint254 }} }}; }; @@ -933,348 +933,348 @@ namespace nil { constexpr static const std::array, state_words> mds_matrix = {{ {{ - 0x3d955d6c02fe4d7cb500e12f2b55eff668a7b4386bd27413766713c93f2acfcd_cppui_modular255, - 0x3798866f4e6058035dcf8addb2cf1771fac234bcc8fc05d6676e77e797f224bf_cppui_modular255, - 0x2c51456a7bf2467eac813649f3f25ea896eac27c5da020dae54a6e640278fda2_cppui_modular255 + 0x3d955d6c02fe4d7cb500e12f2b55eff668a7b4386bd27413766713c93f2acfcd_big_uint255, + 0x3798866f4e6058035dcf8addb2cf1771fac234bcc8fc05d6676e77e797f224bf_big_uint255, + 0x2c51456a7bf2467eac813649f3f25ea896eac27c5da020dae54a6e640278fda2_big_uint255 }}, {{ - 0x20088ca07bbcd7490a0218ebc0ecb31d0ea34840e2dc2d33a1a5adfecff83b43_cppui_modular255, - 0x1d04ba0915e7807c968ea4b1cb2d610c7f9a16b4033f02ebacbb948c86a988c3_cppui_modular255, - 0x5387ccd5729d7acbd09d96714d1d18bbd0eeaefb2ddee3d2ef573c9c7f953307_cppui_modular255 + 0x20088ca07bbcd7490a0218ebc0ecb31d0ea34840e2dc2d33a1a5adfecff83b43_big_uint255, + 0x1d04ba0915e7807c968ea4b1cb2d610c7f9a16b4033f02ebacbb948c86a988c3_big_uint255, + 0x5387ccd5729d7acbd09d96714d1d18bbd0eeaefb2ddee3d2ef573c9c7f953307_big_uint255 }}, {{ - 0x1e208f585a72558534281562cad89659b428ec61433293a8d7f0f0e38a6726ac_cppui_modular255, - 0x0455ebf862f0b60f69698e97d36e8aafd4d107cae2b61be1858b23a3363642e0_cppui_modular255, - 0x569e2c206119e89455852059f707370e2c1fc9721f6c50991cedbbf782daef54_cppui_modular255 + 0x1e208f585a72558534281562cad89659b428ec61433293a8d7f0f0e38a6726ac_big_uint255, + 0x0455ebf862f0b60f69698e97d36e8aafd4d107cae2b61be1858b23a3363642e0_big_uint255, + 0x569e2c206119e89455852059f707370e2c1fc9721f6c50991cedbbf782daef54_big_uint255 }} }}; constexpr static const std::array, round_count> round_constants = {{ {{ - 0x6c4ffa723eaf1a7bf74905cc7dae4ca9ff4a2c3bc81d42e09540d1f250910880_cppui_modular255, - 0x54dd837eccf180c92c2f53a3476e45a156ab69a403b6b9fdfd8dd970fddcdd9a_cppui_modular255, - 0x64f56d735286c35f0e7d0a29680d49d54fb924adccf8962eeee225bf9423a85e_cppui_modular255 + 0x6c4ffa723eaf1a7bf74905cc7dae4ca9ff4a2c3bc81d42e09540d1f250910880_big_uint255, + 0x54dd837eccf180c92c2f53a3476e45a156ab69a403b6b9fdfd8dd970fddcdd9a_big_uint255, + 0x64f56d735286c35f0e7d0a29680d49d54fb924adccf8962eeee225bf9423a85e_big_uint255 }}, {{ - 0x670d5b6efe620f987d967fb13d2045ee3ac8e9cbf7d30e8594e733c7497910dc_cppui_modular255, - 0x2ef5299e2077b2392ca874b015120d7e7530f277e06f78ee0b28f33550c68937_cppui_modular255, - 0x0c0981889405b59c384e7dfa49cd4236e2f45ed024488f67c73f51c7c22d8095_cppui_modular255 + 0x670d5b6efe620f987d967fb13d2045ee3ac8e9cbf7d30e8594e733c7497910dc_big_uint255, + 0x2ef5299e2077b2392ca874b015120d7e7530f277e06f78ee0b28f33550c68937_big_uint255, + 0x0c0981889405b59c384e7dfa49cd4236e2f45ed024488f67c73f51c7c22d8095_big_uint255 }}, {{ - 0x0d88548e6296171b26c61ea458288e5a0d048e2fdf5659de62cfca43f1649c82_cppui_modular255, - 0x3371c00f3715d44abce4140202abaaa44995f6f1df12384222f61123faa6b638_cppui_modular255, - 0x4ce428fec6d178d10348f4857f0006a652911085c8d86baa706f6d7975b0fe1b_cppui_modular255 + 0x0d88548e6296171b26c61ea458288e5a0d048e2fdf5659de62cfca43f1649c82_big_uint255, + 0x3371c00f3715d44abce4140202abaaa44995f6f1df12384222f61123faa6b638_big_uint255, + 0x4ce428fec6d178d10348f4857f0006a652911085c8d86baa706f6d7975b0fe1b_big_uint255 }}, {{ - 0x1a3c26d755bf65326b03521c94582d91a3ae2c0d8dfb2a345847aece52070ab0_cppui_modular255, - 0x02dbb4709583838c35a118742bf482d257ed4dfb212014c083a6b059adda82b5_cppui_modular255, - 0x41f2dd64b9a0dcea721b0035259f45f2a9066690de8f13b9a48ead411d8ff5a7_cppui_modular255 + 0x1a3c26d755bf65326b03521c94582d91a3ae2c0d8dfb2a345847aece52070ab0_big_uint255, + 0x02dbb4709583838c35a118742bf482d257ed4dfb212014c083a6b059adda82b5_big_uint255, + 0x41f2dd64b9a0dcea721b0035259f45f2a9066690de8f13b9a48ead411d8ff5a7_big_uint255 }}, {{ - 0x5f154892782617b26993eea6431580c0a82c0a4dd0efdb24688726b4108c46a8_cppui_modular255, - 0x0db98520f9b97cbcdb557872f4b7f81567a1be374f60fc4281a6e04079e00c0c_cppui_modular255, - 0x71564ed66b41e872ca76aaf9b2fa0ca0695f2162705ca6a1f7ef043fd957f12d_cppui_modular255 + 0x5f154892782617b26993eea6431580c0a82c0a4dd0efdb24688726b4108c46a8_big_uint255, + 0x0db98520f9b97cbcdb557872f4b7f81567a1be374f60fc4281a6e04079e00c0c_big_uint255, + 0x71564ed66b41e872ca76aaf9b2fa0ca0695f2162705ca6a1f7ef043fd957f12d_big_uint255 }}, {{ - 0x69191b1fe6acbf888d0c723f754c89e8bd29cb34b1e43ab27be105ea6b38d8b8_cppui_modular255, - 0x04e9919eb06ff327152cfed30028c5edc667809ce1512e5963329c7040d29350_cppui_modular255, - 0x573bc78e3ed162e5edd38595feead65481c991b856178f6182a0c7090ff71288_cppui_modular255 + 0x69191b1fe6acbf888d0c723f754c89e8bd29cb34b1e43ab27be105ea6b38d8b8_big_uint255, + 0x04e9919eb06ff327152cfed30028c5edc667809ce1512e5963329c7040d29350_big_uint255, + 0x573bc78e3ed162e5edd38595feead65481c991b856178f6182a0c7090ff71288_big_uint255 }}, {{ - 0x102800af87fd92eb1dec942469e076602695a1996a4db968bb7f38ddd455db0b_cppui_modular255, - 0x593d1894c17e5b626f8779acc32d8f188d619c02902ef775ebe81ef1c0fb7a8f_cppui_modular255, - 0x66850b1b1d5d4e07b03bac49c9feadd051e374908196a806bd296957fa2fe2b7_cppui_modular255 + 0x102800af87fd92eb1dec942469e076602695a1996a4db968bb7f38ddd455db0b_big_uint255, + 0x593d1894c17e5b626f8779acc32d8f188d619c02902ef775ebe81ef1c0fb7a8f_big_uint255, + 0x66850b1b1d5d4e07b03bac49c9feadd051e374908196a806bd296957fa2fe2b7_big_uint255 }}, {{ - 0x46aaa1206232ceb480d6aa16cc03465d8e96a807b28c1e494a81c43e0faffc57_cppui_modular255, - 0x2102aab97ce5bd94ffd5db908bf28b7f8c36671191d4ee9ac1c5f2fae4780579_cppui_modular255, - 0x14387b24d1c0c712bbe720164c4093185fcb546a2a7d481abc94e5b8fb5178b7_cppui_modular255 + 0x46aaa1206232ceb480d6aa16cc03465d8e96a807b28c1e494a81c43e0faffc57_big_uint255, + 0x2102aab97ce5bd94ffd5db908bf28b7f8c36671191d4ee9ac1c5f2fae4780579_big_uint255, + 0x14387b24d1c0c712bbe720164c4093185fcb546a2a7d481abc94e5b8fb5178b7_big_uint255 }}, {{ - 0x5f2179b3a7845836cfced83e64e206f6a6cef2cf737f020b5cfd713c9550fe9f_cppui_modular255, - 0x1787986ab56e1b56b5443334562b0bc3657d27323b87e3a8485e68ab96d57188_cppui_modular255, - 0x39ef4b00deefe7e7451adda44428aa22074c496de2c9ed67dcf4861da65f543a_cppui_modular255 + 0x5f2179b3a7845836cfced83e64e206f6a6cef2cf737f020b5cfd713c9550fe9f_big_uint255, + 0x1787986ab56e1b56b5443334562b0bc3657d27323b87e3a8485e68ab96d57188_big_uint255, + 0x39ef4b00deefe7e7451adda44428aa22074c496de2c9ed67dcf4861da65f543a_big_uint255 }}, {{ - 0x7271d384cf5c90fd0c48af190c5c765937c7468088b081a99337e6eae53bb20c_cppui_modular255, - 0x6669e58d04248ca86024fbc196e5f306e522423aa71f84225435328b37a1dd3d_cppui_modular255, - 0x0c1f1b492b27539d754cba5e46edc1f1ac1c5696da8eb19416b07420bb321c65_cppui_modular255 + 0x7271d384cf5c90fd0c48af190c5c765937c7468088b081a99337e6eae53bb20c_big_uint255, + 0x6669e58d04248ca86024fbc196e5f306e522423aa71f84225435328b37a1dd3d_big_uint255, + 0x0c1f1b492b27539d754cba5e46edc1f1ac1c5696da8eb19416b07420bb321c65_big_uint255 }}, {{ - 0x1c4d41a133b97dc467f1f184cf191f331dfc38e79e7e53516c39848c9bd44692_cppui_modular255, - 0x369ea8e699181b1cf88be9205ab840180c9288e67a359dc0dda4ac74cf9768e2_cppui_modular255, - 0x4cfa7d72afed332bf0b8a2a719123f7ebfa714b9e3100eaa533dbde6fb985043_cppui_modular255 + 0x1c4d41a133b97dc467f1f184cf191f331dfc38e79e7e53516c39848c9bd44692_big_uint255, + 0x369ea8e699181b1cf88be9205ab840180c9288e67a359dc0dda4ac74cf9768e2_big_uint255, + 0x4cfa7d72afed332bf0b8a2a719123f7ebfa714b9e3100eaa533dbde6fb985043_big_uint255 }}, {{ - 0x4e592fcde9f3c360e54c6f34d7a8bd41889942e9fe23d9fd4a9e5b3bfbbb3e45_cppui_modular255, - 0x032b5885586212fb235570996d3a4c40f54ff91598a948ec2722ed865b8438a5_cppui_modular255, - 0x03f3178956cfd3e2e6614fb134597d3b3cff0d8a33f3523d825982990c068940_cppui_modular255 + 0x4e592fcde9f3c360e54c6f34d7a8bd41889942e9fe23d9fd4a9e5b3bfbbb3e45_big_uint255, + 0x032b5885586212fb235570996d3a4c40f54ff91598a948ec2722ed865b8438a5_big_uint255, + 0x03f3178956cfd3e2e6614fb134597d3b3cff0d8a33f3523d825982990c068940_big_uint255 }}, {{ - 0x3126e84dfd67a22bf0ce0d9273d8ad40e6109af5bb2bd78d0ac08a16c6248f74_cppui_modular255, - 0x3527888062f1e2738d7b928e9af244f0a39011390c2dbbcf56d8e087f4087b6f_cppui_modular255, - 0x64635758efc701dbbe2eb423bf7b5bf6c3d34c6ff92494f3421182a8b187ecf7_cppui_modular255 + 0x3126e84dfd67a22bf0ce0d9273d8ad40e6109af5bb2bd78d0ac08a16c6248f74_big_uint255, + 0x3527888062f1e2738d7b928e9af244f0a39011390c2dbbcf56d8e087f4087b6f_big_uint255, + 0x64635758efc701dbbe2eb423bf7b5bf6c3d34c6ff92494f3421182a8b187ecf7_big_uint255 }}, {{ - 0x4d7f71960f03db8a2a428cbf77ddc1916a5f4243dbeb2ddaef7b5b5f9d74546e_cppui_modular255, - 0x37832ba2da93de3643243eba3b9765d75359310617f3fc06d74ac12db57b29c5_cppui_modular255, - 0x4dce55879ffd9398f96c9e6556a3bb4fc93147965252cb1d6c94b3282ba3fae6_cppui_modular255 + 0x4d7f71960f03db8a2a428cbf77ddc1916a5f4243dbeb2ddaef7b5b5f9d74546e_big_uint255, + 0x37832ba2da93de3643243eba3b9765d75359310617f3fc06d74ac12db57b29c5_big_uint255, + 0x4dce55879ffd9398f96c9e6556a3bb4fc93147965252cb1d6c94b3282ba3fae6_big_uint255 }}, {{ - 0x4ba85e4d2537972c0fd5a4727a58c3d85d98563697a34c0af845bfecd6dc4b40_cppui_modular255, - 0x582dc453b4cbf6b1d19734b0f337d3423b503703979689f384d0eb96ff5b02ce_cppui_modular255, - 0x0e6f127f479ee6113540d69b25420a2682f07b23e799566b091a1c891fa224ba_cppui_modular255 + 0x4ba85e4d2537972c0fd5a4727a58c3d85d98563697a34c0af845bfecd6dc4b40_big_uint255, + 0x582dc453b4cbf6b1d19734b0f337d3423b503703979689f384d0eb96ff5b02ce_big_uint255, + 0x0e6f127f479ee6113540d69b25420a2682f07b23e799566b091a1c891fa224ba_big_uint255 }}, {{ - 0x39c815508d2995bb8ae5035472944706e900b2fb16d5a779fdfff82306f37dbb_cppui_modular255, - 0x6591aba215bcf96d8aa03220372179a4c5060cfd7f95724ab300d9459f709051_cppui_modular255, - 0x221807cb4909d549c546a734ad2cd7f60a69e816ace98fad830452a44a343188_cppui_modular255 + 0x39c815508d2995bb8ae5035472944706e900b2fb16d5a779fdfff82306f37dbb_big_uint255, + 0x6591aba215bcf96d8aa03220372179a4c5060cfd7f95724ab300d9459f709051_big_uint255, + 0x221807cb4909d549c546a734ad2cd7f60a69e816ace98fad830452a44a343188_big_uint255 }}, {{ - 0x2766a1e33038004da58bce78722380b22b13b0aecb87f38659f3035e1336b53f_cppui_modular255, - 0x11b5e993e6a9cdc3b5d2f5336dc9bad5074b661537ff890b1babd7f53cada9e3_cppui_modular255, - 0x29576176f9a5a10e3d0a2c59af26b51f4c5fc86ec59c0f2492deb60ad49eddcd_cppui_modular255 + 0x2766a1e33038004da58bce78722380b22b13b0aecb87f38659f3035e1336b53f_big_uint255, + 0x11b5e993e6a9cdc3b5d2f5336dc9bad5074b661537ff890b1babd7f53cada9e3_big_uint255, + 0x29576176f9a5a10e3d0a2c59af26b51f4c5fc86ec59c0f2492deb60ad49eddcd_big_uint255 }}, {{ - 0x51e72c44f9de491c747d8a6d333fb2b3e16ee7571f1340a9a5f6f72363991e98_cppui_modular255, - 0x2fb360d959be4aa871e071764a5e41eb264d04f0289f098723b69bab09f4d1a6_cppui_modular255, - 0x03f46b4c3c77957cb595ed61fe13f9e8739a5009311142b69c1e8c07ae250f47_cppui_modular255 + 0x51e72c44f9de491c747d8a6d333fb2b3e16ee7571f1340a9a5f6f72363991e98_big_uint255, + 0x2fb360d959be4aa871e071764a5e41eb264d04f0289f098723b69bab09f4d1a6_big_uint255, + 0x03f46b4c3c77957cb595ed61fe13f9e8739a5009311142b69c1e8c07ae250f47_big_uint255 }}, {{ - 0x4683311e382a99927e0ff672cd0543aaebfc0c33ba96ad937818cec979b57b5e_cppui_modular255, - 0x7117cc69bf566b1b0ba5486b0f1f9bd60f2f945e3cbf33a2ed17076f4caa0dd6_cppui_modular255, - 0x3bd670c3ce88ea43f254d61c2a9b56d6a4dff19ab5c4d28989d271f3dd6bee25_cppui_modular255 + 0x4683311e382a99927e0ff672cd0543aaebfc0c33ba96ad937818cec979b57b5e_big_uint255, + 0x7117cc69bf566b1b0ba5486b0f1f9bd60f2f945e3cbf33a2ed17076f4caa0dd6_big_uint255, + 0x3bd670c3ce88ea43f254d61c2a9b56d6a4dff19ab5c4d28989d271f3dd6bee25_big_uint255 }}, {{ - 0x2fd2ed0ba1135575995d15061ddb487f2c5c6005feed28d8a01b9d7bee361a1b_cppui_modular255, - 0x6a66704e22a81e6b7ad8e2f28edd8c9c9a10abf17e053f4d89665810332600ec_cppui_modular255, - 0x5cbc378be1db3840b32d8d2ebfe2695f810f932a206aacece707ca693f4f933e_cppui_modular255 + 0x2fd2ed0ba1135575995d15061ddb487f2c5c6005feed28d8a01b9d7bee361a1b_big_uint255, + 0x6a66704e22a81e6b7ad8e2f28edd8c9c9a10abf17e053f4d89665810332600ec_big_uint255, + 0x5cbc378be1db3840b32d8d2ebfe2695f810f932a206aacece707ca693f4f933e_big_uint255 }}, {{ - 0x35b716410b3c9374d42e7d39eaca316b6568f0a14cb14d519967aa3ff9970aac_cppui_modular255, - 0x231c6db056e47a01c192db40e586ededc929b564667377a10bd1465f3852811f_cppui_modular255, - 0x4904d5de1f512eb14b0f856acb016c7a43079b2f702303752962f336558b0f32_cppui_modular255 + 0x35b716410b3c9374d42e7d39eaca316b6568f0a14cb14d519967aa3ff9970aac_big_uint255, + 0x231c6db056e47a01c192db40e586ededc929b564667377a10bd1465f3852811f_big_uint255, + 0x4904d5de1f512eb14b0f856acb016c7a43079b2f702303752962f336558b0f32_big_uint255 }}, {{ - 0x56d6bc63f429bb7fec7bdd133581f2abc74406a57607c2ba3302481eddba4074_cppui_modular255, - 0x519d0daccadfbb0167fa79d1afdf36b25f28b9f74f1e65d21d28ce1022579735_cppui_modular255, - 0x0576cf2418d6bd88f352bb26da1066637575f85688cdb981c7787f8094e5a71a_cppui_modular255 + 0x56d6bc63f429bb7fec7bdd133581f2abc74406a57607c2ba3302481eddba4074_big_uint255, + 0x519d0daccadfbb0167fa79d1afdf36b25f28b9f74f1e65d21d28ce1022579735_big_uint255, + 0x0576cf2418d6bd88f352bb26da1066637575f85688cdb981c7787f8094e5a71a_big_uint255 }}, {{ - 0x16672be70221dfa20aa110bdce12e1e66ab171db4eadd9935baa0e3aa49e437a_cppui_modular255, - 0x1e51c73bc2aeb9e877d9c2c18f17b03ea3dfcc04adfc649780ce4bcbc43b0b69_cppui_modular255, - 0x1271c830507a211c8e2ebdfb372f79c8a42a9e84e4fdb0dcb35d55e4d155e169_cppui_modular255 + 0x16672be70221dfa20aa110bdce12e1e66ab171db4eadd9935baa0e3aa49e437a_big_uint255, + 0x1e51c73bc2aeb9e877d9c2c18f17b03ea3dfcc04adfc649780ce4bcbc43b0b69_big_uint255, + 0x1271c830507a211c8e2ebdfb372f79c8a42a9e84e4fdb0dcb35d55e4d155e169_big_uint255 }}, {{ - 0x67077397c2b01db4de4b78adf97e0ebceb20cb91647db49a7bc06a5ce1b25544_cppui_modular255, - 0x2e5454b258106b63f0ab01924767b4aecce371202abc28a260adc45f35570b9d_cppui_modular255, - 0x440f72769f137a8078f05063cfa4e2b73b2381b72b68e97b1c1e9cd18df36f82_cppui_modular255 + 0x67077397c2b01db4de4b78adf97e0ebceb20cb91647db49a7bc06a5ce1b25544_big_uint255, + 0x2e5454b258106b63f0ab01924767b4aecce371202abc28a260adc45f35570b9d_big_uint255, + 0x440f72769f137a8078f05063cfa4e2b73b2381b72b68e97b1c1e9cd18df36f82_big_uint255 }}, {{ - 0x6ae1478fc162c50032fef2ef79c93ca7ee25b16358704f434f6cddcce2fc9c40_cppui_modular255, - 0x0c0f3630409a2242a39ebb33c5c7cf18965b8932621aab4ca2c315d4441b6987_cppui_modular255, - 0x0d1bd84a786a990adf88b51f253bd9032cb50ce4682bafe103893af36d5e75dc_cppui_modular255 + 0x6ae1478fc162c50032fef2ef79c93ca7ee25b16358704f434f6cddcce2fc9c40_big_uint255, + 0x0c0f3630409a2242a39ebb33c5c7cf18965b8932621aab4ca2c315d4441b6987_big_uint255, + 0x0d1bd84a786a990adf88b51f253bd9032cb50ce4682bafe103893af36d5e75dc_big_uint255 }}, {{ - 0x30ce425059810dd94aae2f255666b0fe8bc52ff701c385c43a998926539dd401_cppui_modular255, - 0x395a1e753153b56d1a9ec2ca73099425e446dfa668dc73da2ea311abe5e3d96d_cppui_modular255, - 0x57f09d89e827d00392fdc0c3d21b1a5bae2d689894ced82f58e256a03d20ef91_cppui_modular255 + 0x30ce425059810dd94aae2f255666b0fe8bc52ff701c385c43a998926539dd401_big_uint255, + 0x395a1e753153b56d1a9ec2ca73099425e446dfa668dc73da2ea311abe5e3d96d_big_uint255, + 0x57f09d89e827d00392fdc0c3d21b1a5bae2d689894ced82f58e256a03d20ef91_big_uint255 }}, {{ - 0x1065b71b135e4feb8b3cba3c252daa084cb5624b0ba76f48f6a03854bfdbcacc_cppui_modular255, - 0x3d5f53bd162f053f045547952a06bc83bc413e17957977e359d9bd4c8883203d_cppui_modular255, - 0x05f467a5081bd3479d6b49f697b0a75d264b42b95b2bed475cd58ffd05322d85_cppui_modular255 + 0x1065b71b135e4feb8b3cba3c252daa084cb5624b0ba76f48f6a03854bfdbcacc_big_uint255, + 0x3d5f53bd162f053f045547952a06bc83bc413e17957977e359d9bd4c8883203d_big_uint255, + 0x05f467a5081bd3479d6b49f697b0a75d264b42b95b2bed475cd58ffd05322d85_big_uint255 }}, {{ - 0x6f5ad8e3ed272494c36a5a52a7d034e04b633460c16a512d0d8002f8fa0e3484_cppui_modular255, - 0x23c293275e282bf15cdbffae1f00a2712e76aa6d62820542159e9d6f115df3b8_cppui_modular255, - 0x3757e7009ca9bec8bba29308b9922354eeeff3beb4113174bf8cde584722d31b_cppui_modular255 + 0x6f5ad8e3ed272494c36a5a52a7d034e04b633460c16a512d0d8002f8fa0e3484_big_uint255, + 0x23c293275e282bf15cdbffae1f00a2712e76aa6d62820542159e9d6f115df3b8_big_uint255, + 0x3757e7009ca9bec8bba29308b9922354eeeff3beb4113174bf8cde584722d31b_big_uint255 }}, {{ - 0x406f25e72d0264ed50473ec95a7ec53ebe114898f84deb06e53715ae24725342_cppui_modular255, - 0x046dcfa2d6d655c7c551f7440772b056e7d3f2c65ac52e4496c4fc753130ad45_cppui_modular255, - 0x49c2e954d649ee1c4e72ce8c1833c33796ab29dbb0486fe53b04687b2063259f_cppui_modular255 + 0x406f25e72d0264ed50473ec95a7ec53ebe114898f84deb06e53715ae24725342_big_uint255, + 0x046dcfa2d6d655c7c551f7440772b056e7d3f2c65ac52e4496c4fc753130ad45_big_uint255, + 0x49c2e954d649ee1c4e72ce8c1833c33796ab29dbb0486fe53b04687b2063259f_big_uint255 }}, {{ - 0x2caa8aae247ef83e63dbe8e5efc89d7d28ffd8bf7a5331e245af8aebc872a759_cppui_modular255, - 0x5efa9f8f32d9ec1d3a3d8cea806e068909b3d3562fdc3f91f2d899f8109bc717_cppui_modular255, - 0x0df424bdf3b0c60395cd7380029a633692b933250b79371e09122c8c39aa1301_cppui_modular255 + 0x2caa8aae247ef83e63dbe8e5efc89d7d28ffd8bf7a5331e245af8aebc872a759_big_uint255, + 0x5efa9f8f32d9ec1d3a3d8cea806e068909b3d3562fdc3f91f2d899f8109bc717_big_uint255, + 0x0df424bdf3b0c60395cd7380029a633692b933250b79371e09122c8c39aa1301_big_uint255 }}, {{ - 0x2d012e3e811cf4b88aed6f38d5cc8c3456dbae1741f501574321906efb474930_cppui_modular255, - 0x709c043fc648c48a5bfb5ea25d5f0557d03aadff9d6ec1afaf2032f3aadb9dba_cppui_modular255, - 0x1bb9b23d6805ed1179a1dad95740513dcea114185a8ed34e17dc8077dc830916_cppui_modular255 + 0x2d012e3e811cf4b88aed6f38d5cc8c3456dbae1741f501574321906efb474930_big_uint255, + 0x709c043fc648c48a5bfb5ea25d5f0557d03aadff9d6ec1afaf2032f3aadb9dba_big_uint255, + 0x1bb9b23d6805ed1179a1dad95740513dcea114185a8ed34e17dc8077dc830916_big_uint255 }}, {{ - 0x0fab922a838c55af1e2349b1e50b56d0690c200d0f2318aad4b7bd8a38a47f61_cppui_modular255, - 0x4d58799d4501ee8e89c73db7a4ff48d9f5e80fd5984afc67f3054f59d3dc74d1_cppui_modular255, - 0x4f130b733cb78f3940da337d187934e48765956ad2ca7b75b7bf8e293b46a758_cppui_modular255 + 0x0fab922a838c55af1e2349b1e50b56d0690c200d0f2318aad4b7bd8a38a47f61_big_uint255, + 0x4d58799d4501ee8e89c73db7a4ff48d9f5e80fd5984afc67f3054f59d3dc74d1_big_uint255, + 0x4f130b733cb78f3940da337d187934e48765956ad2ca7b75b7bf8e293b46a758_big_uint255 }}, {{ - 0x03e7812afd6c480faef03c3beadfb882923a743a4e60e58a259e7ed4598cca97_cppui_modular255, - 0x739ea276a5ef7008fffc02a3c853f4d56eaeee7df395cbee8bbe6b502b81ca1a_cppui_modular255, - 0x0ae97e00a91a4e761815fde0e9506629373ef7ce765ecb1bc7ba0ca2decd7d01_cppui_modular255 + 0x03e7812afd6c480faef03c3beadfb882923a743a4e60e58a259e7ed4598cca97_big_uint255, + 0x739ea276a5ef7008fffc02a3c853f4d56eaeee7df395cbee8bbe6b502b81ca1a_big_uint255, + 0x0ae97e00a91a4e761815fde0e9506629373ef7ce765ecb1bc7ba0ca2decd7d01_big_uint255 }}, {{ - 0x6d6c41e1315436781a774555668cc3d41c99c78dc107f443ba0ae60cdb287c16_cppui_modular255, - 0x18d683776871c1918c2b5c632cb1854dff865c4b1b8bd66e46d2fa2a8d515c34_cppui_modular255, - 0x3597acab641c21dc5475eb8b04b0e2ae91700acad1b543e8c7e69d574eb5a15a_cppui_modular255 + 0x6d6c41e1315436781a774555668cc3d41c99c78dc107f443ba0ae60cdb287c16_big_uint255, + 0x18d683776871c1918c2b5c632cb1854dff865c4b1b8bd66e46d2fa2a8d515c34_big_uint255, + 0x3597acab641c21dc5475eb8b04b0e2ae91700acad1b543e8c7e69d574eb5a15a_big_uint255 }}, {{ - 0x63df64938297594b4e8bf2ddd6bcaee6f2b9703e5814ddeca44d341b9e7d24a2_cppui_modular255, - 0x009ab455f6b4c7755da22615073e9839cd12a88d1f9b583d7ad61bde4009b873_cppui_modular255, - 0x09e21d43c56b0abfc26d0fb7a3ebfd3a7743bbeea99ac2b8f61cc23d1c673a12_cppui_modular255 + 0x63df64938297594b4e8bf2ddd6bcaee6f2b9703e5814ddeca44d341b9e7d24a2_big_uint255, + 0x009ab455f6b4c7755da22615073e9839cd12a88d1f9b583d7ad61bde4009b873_big_uint255, + 0x09e21d43c56b0abfc26d0fb7a3ebfd3a7743bbeea99ac2b8f61cc23d1c673a12_big_uint255 }}, {{ - 0x4db404b9eae6a9f39417be43c93a9f6d136a0784b73789d590ada0a60df0d16c_cppui_modular255, - 0x0c6f0ecaf32a3d60aaebeaf3f8ccb00a10ee19def3836b78fc905bfeaf2b80a9_cppui_modular255, - 0x3518d688407ca0e548165b9796a4279d038720408a3c822dc44ce8974ea8ad8d_cppui_modular255 + 0x4db404b9eae6a9f39417be43c93a9f6d136a0784b73789d590ada0a60df0d16c_big_uint255, + 0x0c6f0ecaf32a3d60aaebeaf3f8ccb00a10ee19def3836b78fc905bfeaf2b80a9_big_uint255, + 0x3518d688407ca0e548165b9796a4279d038720408a3c822dc44ce8974ea8ad8d_big_uint255 }}, {{ - 0x27ba9d4584a23881e23aa0340dc266b32b56455c30e6da78b37741de7ac5b185_cppui_modular255, - 0x63d33e44fda7868d50858e482fbff7c29143d60fe00817cf32e0efab4c3ad6eb_cppui_modular255, - 0x561a72b93fecdbd83d67a5022d9a221cf21b22cff2d79c114bf01c71f2641ae9_cppui_modular255 + 0x27ba9d4584a23881e23aa0340dc266b32b56455c30e6da78b37741de7ac5b185_big_uint255, + 0x63d33e44fda7868d50858e482fbff7c29143d60fe00817cf32e0efab4c3ad6eb_big_uint255, + 0x561a72b93fecdbd83d67a5022d9a221cf21b22cff2d79c114bf01c71f2641ae9_big_uint255 }}, {{ - 0x48a1625a9ee1102971aa28bc07a5ba88ac6424801502ff4fcb6994824c2e5e36_cppui_modular255, - 0x46a003c184ecf0e00fa8ef7dbb356366be4d63a3847634b46a18ecd47667d1bc_cppui_modular255, - 0x37d6efb2876f3cba63a60821e50853d0997947b96f633607bb36ded243ded838_cppui_modular255 + 0x48a1625a9ee1102971aa28bc07a5ba88ac6424801502ff4fcb6994824c2e5e36_big_uint255, + 0x46a003c184ecf0e00fa8ef7dbb356366be4d63a3847634b46a18ecd47667d1bc_big_uint255, + 0x37d6efb2876f3cba63a60821e50853d0997947b96f633607bb36ded243ded838_big_uint255 }}, {{ - 0x14f96acdb291ed2bf98a5bed063f6911598bdff1f6c0219bbefa447ab1918163_cppui_modular255, - 0x573d156263dc8edf24efced0c465587cbdd1a2c792cbadd58abf95e037d3c668_cppui_modular255, - 0x46839e7d70370149b35b3a07d8406acbaff07615747d2101bbad18abb9891f95_cppui_modular255 + 0x14f96acdb291ed2bf98a5bed063f6911598bdff1f6c0219bbefa447ab1918163_big_uint255, + 0x573d156263dc8edf24efced0c465587cbdd1a2c792cbadd58abf95e037d3c668_big_uint255, + 0x46839e7d70370149b35b3a07d8406acbaff07615747d2101bbad18abb9891f95_big_uint255 }}, {{ - 0x3b74a3420d1b988408fe8d8fcb51a81f16f8d17d082da9ba61fbc8031d8ff59b_cppui_modular255, - 0x059f3301178a22026798b07a8578611d7c56c16bfbbe6a058f4e44016aaa172d_cppui_modular255, - 0x467d9ff3508feb318b07acf9184537462e987c58b7ef486873e1de428eaa3f32_cppui_modular255 + 0x3b74a3420d1b988408fe8d8fcb51a81f16f8d17d082da9ba61fbc8031d8ff59b_big_uint255, + 0x059f3301178a22026798b07a8578611d7c56c16bfbbe6a058f4e44016aaa172d_big_uint255, + 0x467d9ff3508feb318b07acf9184537462e987c58b7ef486873e1de428eaa3f32_big_uint255 }}, {{ - 0x716cac6b0fc8f63d406d38d6b82c8ed4e5665e449f07b572b83f43c9f9ba2004_cppui_modular255, - 0x7121fa9ca506687b3c49dc2060731c85ae48596be138148d8ea365333b8f03a6_cppui_modular255, - 0x10000c75e6e03366bba4f59c68f312becb7ae0c30d4aa141940a7531105ef7e0_cppui_modular255 + 0x716cac6b0fc8f63d406d38d6b82c8ed4e5665e449f07b572b83f43c9f9ba2004_big_uint255, + 0x7121fa9ca506687b3c49dc2060731c85ae48596be138148d8ea365333b8f03a6_big_uint255, + 0x10000c75e6e03366bba4f59c68f312becb7ae0c30d4aa141940a7531105ef7e0_big_uint255 }}, {{ - 0x375487214c07542fa5b6a5736344466a06c2cb4c1838c9966925cd8c5888c3ca_cppui_modular255, - 0x2361aaf969f732be06b159772a097f3518ed9485449edcfd367e289f0964c486_cppui_modular255, - 0x2ddba8679308f327c27023a893c0458d1e73dcd64a39b22b130fd9e4f283f906_cppui_modular255 + 0x375487214c07542fa5b6a5736344466a06c2cb4c1838c9966925cd8c5888c3ca_big_uint255, + 0x2361aaf969f732be06b159772a097f3518ed9485449edcfd367e289f0964c486_big_uint255, + 0x2ddba8679308f327c27023a893c0458d1e73dcd64a39b22b130fd9e4f283f906_big_uint255 }}, {{ - 0x6303e21755b1de4d65495bae9685e05162245106f53d7407ec0883e39695b15c_cppui_modular255, - 0x5aa3dddf8da369722b2e1c8f2aacf0625d08264f8a0ed320df110ab42f5b0c1f_cppui_modular255, - 0x3525eb41c2db9cf9cd08652d815d7c91f3294defeee702efedb5f777284cd1fd_cppui_modular255 + 0x6303e21755b1de4d65495bae9685e05162245106f53d7407ec0883e39695b15c_big_uint255, + 0x5aa3dddf8da369722b2e1c8f2aacf0625d08264f8a0ed320df110ab42f5b0c1f_big_uint255, + 0x3525eb41c2db9cf9cd08652d815d7c91f3294defeee702efedb5f777284cd1fd_big_uint255 }}, {{ - 0x0079ae4df49f78b97cb0e3c3f4b225538d4a0c4827e333d27a29398c17c26c9e_cppui_modular255, - 0x533c8c1b05e2dd7e7e19ea4b027cc8bd559c2e2a622207b0c13bc7afdd7bc3b7_cppui_modular255, - 0x4989a01e4fe4b1bd544e5cd4288895068897cba899ddb01779f6e2b08024d3ab_cppui_modular255 + 0x0079ae4df49f78b97cb0e3c3f4b225538d4a0c4827e333d27a29398c17c26c9e_big_uint255, + 0x533c8c1b05e2dd7e7e19ea4b027cc8bd559c2e2a622207b0c13bc7afdd7bc3b7_big_uint255, + 0x4989a01e4fe4b1bd544e5cd4288895068897cba899ddb01779f6e2b08024d3ab_big_uint255 }}, {{ - 0x1c7f5858eabb1e2b8c3104808dc68ae3de05381fc74704a2afbd2fcc42cdd3c8_cppui_modular255, - 0x55faf16bbea2ee0f35413b9808c135fb1e4729c90b4cce4c345238c6dc557639_cppui_modular255, - 0x156a82f8e5aea455d9c8c436f89c6f9ecbce0ecaafdd13b93f255e075c72ebd0_cppui_modular255 + 0x1c7f5858eabb1e2b8c3104808dc68ae3de05381fc74704a2afbd2fcc42cdd3c8_big_uint255, + 0x55faf16bbea2ee0f35413b9808c135fb1e4729c90b4cce4c345238c6dc557639_big_uint255, + 0x156a82f8e5aea455d9c8c436f89c6f9ecbce0ecaafdd13b93f255e075c72ebd0_big_uint255 }}, {{ - 0x37c7047032df0027d7bc128e9a107582f25ba0b7387230a05864aee420724703_cppui_modular255, - 0x40ab847795176c24af06d5000ceedb82d87492cbde5c1c262a83a9b6b6f4b264_cppui_modular255, - 0x5a73bece689545bd2de9ef263d5036152f36e2250c76711e8bc9ed9bda7af685_cppui_modular255 + 0x37c7047032df0027d7bc128e9a107582f25ba0b7387230a05864aee420724703_big_uint255, + 0x40ab847795176c24af06d5000ceedb82d87492cbde5c1c262a83a9b6b6f4b264_big_uint255, + 0x5a73bece689545bd2de9ef263d5036152f36e2250c76711e8bc9ed9bda7af685_big_uint255 }}, {{ - 0x1c4a903be5dff4440b4f38e56f988cddacc57371aeebb06cb64ab5d21d9562f5_cppui_modular255, - 0x5bba81a692e87b51c7c176730fd05cfd100b0bd86d69b4b4f367277a2302b2f8_cppui_modular255, - 0x2f875bdd6669a8ff920c3d7bedd74c101541d4b184b7e1bc0b90ddb26902319d_cppui_modular255 + 0x1c4a903be5dff4440b4f38e56f988cddacc57371aeebb06cb64ab5d21d9562f5_big_uint255, + 0x5bba81a692e87b51c7c176730fd05cfd100b0bd86d69b4b4f367277a2302b2f8_big_uint255, + 0x2f875bdd6669a8ff920c3d7bedd74c101541d4b184b7e1bc0b90ddb26902319d_big_uint255 }}, {{ - 0x5e89035bbe943f9e6024db13c58bbc748d3f1654050c7ffe084b763efceff3bd_cppui_modular255, - 0x728cff754d7a76a7f8b00656412ad8874e7bab9827706ca6d6d13c72a0c6812e_cppui_modular255, - 0x6dcfa6338bfe3569524a968abc95c706801fcc695ee3f5854a79e4689625481c_cppui_modular255 + 0x5e89035bbe943f9e6024db13c58bbc748d3f1654050c7ffe084b763efceff3bd_big_uint255, + 0x728cff754d7a76a7f8b00656412ad8874e7bab9827706ca6d6d13c72a0c6812e_big_uint255, + 0x6dcfa6338bfe3569524a968abc95c706801fcc695ee3f5854a79e4689625481c_big_uint255 }}, {{ - 0x24ce56469aeaa4243053bb62c07100002b8f74c4ac74c350beff0c0be47e5a51_cppui_modular255, - 0x6a72f954f591825caa43c3ba7ccfea7aa1a00de5a681e52de6148252062f8363_cppui_modular255, - 0x59922ae3f06524d2028e9aa00a136613d4306fd5f4247ad0a6a587be0fb0081c_cppui_modular255 + 0x24ce56469aeaa4243053bb62c07100002b8f74c4ac74c350beff0c0be47e5a51_big_uint255, + 0x6a72f954f591825caa43c3ba7ccfea7aa1a00de5a681e52de6148252062f8363_big_uint255, + 0x59922ae3f06524d2028e9aa00a136613d4306fd5f4247ad0a6a587be0fb0081c_big_uint255 }}, {{ - 0x50d8b98688f4980b1a0c2b5313f8ac9660b1e9199b5f59ed3709e0f1d9185552_cppui_modular255, - 0x3184262ef10e9b0ab57cfc898fb68342cb86ed6e25e536fa94caa605b4a3caf1_cppui_modular255, - 0x69980a1f4b883cac1039fc47dba993503d4ae5ad40ed112a5a5070090006f73e_cppui_modular255 + 0x50d8b98688f4980b1a0c2b5313f8ac9660b1e9199b5f59ed3709e0f1d9185552_big_uint255, + 0x3184262ef10e9b0ab57cfc898fb68342cb86ed6e25e536fa94caa605b4a3caf1_big_uint255, + 0x69980a1f4b883cac1039fc47dba993503d4ae5ad40ed112a5a5070090006f73e_big_uint255 }}, {{ - 0x1d5a91b930b89934745ba00bd9094b67f95e41e3778fe0420880e80bbf8078e1_cppui_modular255, - 0x0ddebce4b6ca45d69b2f70c8b54e425615c1aadadccda74e0882eb79c445778f_cppui_modular255, - 0x68c8362e93a371d7c9551edf3e3f3b14c54c729c1fab0fa6eebae7da09855826_cppui_modular255 + 0x1d5a91b930b89934745ba00bd9094b67f95e41e3778fe0420880e80bbf8078e1_big_uint255, + 0x0ddebce4b6ca45d69b2f70c8b54e425615c1aadadccda74e0882eb79c445778f_big_uint255, + 0x68c8362e93a371d7c9551edf3e3f3b14c54c729c1fab0fa6eebae7da09855826_big_uint255 }}, {{ - 0x3dcc6a17e074d0350ffc0e5426e1bb6894e6c958f96f3d7d9c4240b948cde438_cppui_modular255, - 0x03b8aba0ee959a4e51cb5cfc458b0f4ad3a9b59797394c3d3c9eb57adeca2308_cppui_modular255, - 0x0f24cc57f3b2fbf25375c71d71bbb97b2d193fc1a203ccc514c074d461001ec4_cppui_modular255 + 0x3dcc6a17e074d0350ffc0e5426e1bb6894e6c958f96f3d7d9c4240b948cde438_big_uint255, + 0x03b8aba0ee959a4e51cb5cfc458b0f4ad3a9b59797394c3d3c9eb57adeca2308_big_uint255, + 0x0f24cc57f3b2fbf25375c71d71bbb97b2d193fc1a203ccc514c074d461001ec4_big_uint255 }}, {{ - 0x71e9bfa7f66afbafbf139a70baedfb1b202a2e51e6b6c420e28dd342a5eb0cd6_cppui_modular255, - 0x3ac9c11890e96a2dcda6405a6c52a47e803d6674e65117f1a8adf701d68cd02a_cppui_modular255, - 0x45c00146e1b89ad5ccb8a02202482023751b88997d8fba1af5c0e7a68dadb63c_cppui_modular255 + 0x71e9bfa7f66afbafbf139a70baedfb1b202a2e51e6b6c420e28dd342a5eb0cd6_big_uint255, + 0x3ac9c11890e96a2dcda6405a6c52a47e803d6674e65117f1a8adf701d68cd02a_big_uint255, + 0x45c00146e1b89ad5ccb8a02202482023751b88997d8fba1af5c0e7a68dadb63c_big_uint255 }}, {{ - 0x1f98bdb8dc318e3e2e28cc3d8b85e334f74b57e15b02e1637ae035b04bda3b5c_cppui_modular255, - 0x2ec077dbbc7bf2affe7ddd8b8a7f900f3019cddc8ce55cf9782004f65f51257b_cppui_modular255, - 0x32c377fc988f600a2c2ef5d5376e2e31faf1c2d1a618db011fbfec1ff337568d_cppui_modular255 + 0x1f98bdb8dc318e3e2e28cc3d8b85e334f74b57e15b02e1637ae035b04bda3b5c_big_uint255, + 0x2ec077dbbc7bf2affe7ddd8b8a7f900f3019cddc8ce55cf9782004f65f51257b_big_uint255, + 0x32c377fc988f600a2c2ef5d5376e2e31faf1c2d1a618db011fbfec1ff337568d_big_uint255 }}, {{ - 0x0a820d131da844383bdfc1a053d8aceec7f2eb345ab6c21d38e829db8d05861e_cppui_modular255, - 0x5bd95df8a933f7b7e263e013f45a92c0e786dba563e210b77d5a40f961092e60_cppui_modular255, - 0x264cf7b75095fb96b420fb3f31c064299e78e796e8b3735bd0a186cd3817708d_cppui_modular255 + 0x0a820d131da844383bdfc1a053d8aceec7f2eb345ab6c21d38e829db8d05861e_big_uint255, + 0x5bd95df8a933f7b7e263e013f45a92c0e786dba563e210b77d5a40f961092e60_big_uint255, + 0x264cf7b75095fb96b420fb3f31c064299e78e796e8b3735bd0a186cd3817708d_big_uint255 }}, {{ - 0x27d3e47b2f11ada6a9a5d329e00a128c9836be92ee92429ab891e71d11dc29f2_cppui_modular255, - 0x64354b412c8cfa1319e4afd891e619a8fbbde04d85bef4ad0548689295d2bce2_cppui_modular255, - 0x0db0f967487ee52e0836fb7135bce37fbd32887e911de52d0b855a5afac1f770_cppui_modular255 + 0x27d3e47b2f11ada6a9a5d329e00a128c9836be92ee92429ab891e71d11dc29f2_big_uint255, + 0x64354b412c8cfa1319e4afd891e619a8fbbde04d85bef4ad0548689295d2bce2_big_uint255, + 0x0db0f967487ee52e0836fb7135bce37fbd32887e911de52d0b855a5afac1f770_big_uint255 }}, {{ - 0x1c9a155911b36c896475995417197faad870737a9ce5d9d3a5000f5396978e9d_cppui_modular255, - 0x65ae557151ae9ec7f870fa2804bfb88e669dc0f8865b140f964f1f93180ac531_cppui_modular255, - 0x52c6f6242517362c066020764fef4a5574749106a6dad534d136e7fe885fcb40_cppui_modular255 + 0x1c9a155911b36c896475995417197faad870737a9ce5d9d3a5000f5396978e9d_big_uint255, + 0x65ae557151ae9ec7f870fa2804bfb88e669dc0f8865b140f964f1f93180ac531_big_uint255, + 0x52c6f6242517362c066020764fef4a5574749106a6dad534d136e7fe885fcb40_big_uint255 }}, {{ - 0x6e44c5bcd5dc6591e2f84290a313b71a04da8da398dd10135d22bb23df41e883_cppui_modular255, - 0x2146d3e371040feba8595049a285944bd45a458dccb059c785c2adf032c8b710_cppui_modular255, - 0x16db9ceb3074a795499a37c20ffc9eaca9b07a5a25824aa6adcdb19fabdff0b9_cppui_modular255 + 0x6e44c5bcd5dc6591e2f84290a313b71a04da8da398dd10135d22bb23df41e883_big_uint255, + 0x2146d3e371040feba8595049a285944bd45a458dccb059c785c2adf032c8b710_big_uint255, + 0x16db9ceb3074a795499a37c20ffc9eaca9b07a5a25824aa6adcdb19fabdff0b9_big_uint255 }}, {{ - 0x5903725fd86fec14c9cf2a273017eb01d3a1785039397060650c4e228a6e6571_cppui_modular255, - 0x54c75952f908e3f99e05718bd1f59bb6c414bc2aebacd81c47189885cbbc566a_cppui_modular255, - 0x0dba4abc7f188e33e7f309317b7b9f5c22870ca90bcee7b576dd0b52619a39f6_cppui_modular255 + 0x5903725fd86fec14c9cf2a273017eb01d3a1785039397060650c4e228a6e6571_big_uint255, + 0x54c75952f908e3f99e05718bd1f59bb6c414bc2aebacd81c47189885cbbc566a_big_uint255, + 0x0dba4abc7f188e33e7f309317b7b9f5c22870ca90bcee7b576dd0b52619a39f6_big_uint255 }}, {{ - 0x3950231611808399ad3ba5b78cad4c6bed6f364b9346541dfffa4d16366d257e_cppui_modular255, - 0x1a6d8230bb9e8d1af552b9bab8babfe505931dd87e200fc7b3c57160a5bc4ae2_cppui_modular255, - 0x6b3dd35220ecd616eea4309ac9a8118e9dc65a3f7c1ef52dde7a3d33578c43a0_cppui_modular255 + 0x3950231611808399ad3ba5b78cad4c6bed6f364b9346541dfffa4d16366d257e_big_uint255, + 0x1a6d8230bb9e8d1af552b9bab8babfe505931dd87e200fc7b3c57160a5bc4ae2_big_uint255, + 0x6b3dd35220ecd616eea4309ac9a8118e9dc65a3f7c1ef52dde7a3d33578c43a0_big_uint255 }}, {{ - 0x6da00240c3505b214c8d8ce3f48914247adb9f0ecf239d7baeada5183d31ba54_cppui_modular255, - 0x37c3720b132d3a719424e29c37acb7dfbd709ec9497a3162175424bf063c6e18_cppui_modular255, - 0x500f85a3d06a0b5a05c5e93ae70084802fd499c7e6ed1ee6e26b4bf8fd6838fb_cppui_modular255 + 0x6da00240c3505b214c8d8ce3f48914247adb9f0ecf239d7baeada5183d31ba54_big_uint255, + 0x37c3720b132d3a719424e29c37acb7dfbd709ec9497a3162175424bf063c6e18_big_uint255, + 0x500f85a3d06a0b5a05c5e93ae70084802fd499c7e6ed1ee6e26b4bf8fd6838fb_big_uint255 }}, {{ - 0x2b37f70d73366d32d575186d0787fc8ce539b73f83c6e7eaab27be85f4faaaf4_cppui_modular255, - 0x1d8efd6e52d4f936415e5c4814f3366804e2386857a4befa2a53aab21ddb68de_cppui_modular255, - 0x33303b8a8f2d811be65a977907d17d133f3a64c59fe2a9c5c2d4517e3eb390e3_cppui_modular255 + 0x2b37f70d73366d32d575186d0787fc8ce539b73f83c6e7eaab27be85f4faaaf4_big_uint255, + 0x1d8efd6e52d4f936415e5c4814f3366804e2386857a4befa2a53aab21ddb68de_big_uint255, + 0x33303b8a8f2d811be65a977907d17d133f3a64c59fe2a9c5c2d4517e3eb390e3_big_uint255 }}, {{ - 0x2c1ba860f51e0c2eaf4a9a6bf095c65fab3ee15c145f404fbb0272b5ca14a449_cppui_modular255, - 0x0b0849c7a3adea03a89d101081c9c9f4f66ef917d09c7957584db9a75aec2378_cppui_modular255, - 0x41e7e30c77579da7809c3e757821c869b53f103fcb752ac82f8a734d4abdc792_cppui_modular255 + 0x2c1ba860f51e0c2eaf4a9a6bf095c65fab3ee15c145f404fbb0272b5ca14a449_big_uint255, + 0x0b0849c7a3adea03a89d101081c9c9f4f66ef917d09c7957584db9a75aec2378_big_uint255, + 0x41e7e30c77579da7809c3e757821c869b53f103fcb752ac82f8a734d4abdc792_big_uint255 }}, {{ - 0x182e66be60686c8c5e6518430845f98924fe8d7d43e628bf75ff52a716371b9c_cppui_modular255, - 0x373b2508c2fca1a288fa4f54a6edf02f2661e664dcf4ff2a74f3d06b1a00ddc4_cppui_modular255, - 0x1735b442b3acaad0bbe630f308e03f1aa6f56bdb029e50c1393533cee1a45c30_cppui_modular255 + 0x182e66be60686c8c5e6518430845f98924fe8d7d43e628bf75ff52a716371b9c_big_uint255, + 0x373b2508c2fca1a288fa4f54a6edf02f2661e664dcf4ff2a74f3d06b1a00ddc4_big_uint255, + 0x1735b442b3acaad0bbe630f308e03f1aa6f56bdb029e50c1393533cee1a45c30_big_uint255 }}, {{ - 0x22abe8ea470a0372911bcef1367e10aa220491d76caeaa5959feb5d75f4a1f9f_cppui_modular255, - 0x5caab387eb997f774f64151ed21abfa5364a83c6f065d92bd9c92f2719b8e80b_cppui_modular255, - 0x57b33094aeff828377897b56e1c432978d07c668ef25a36bc5e2e835aaeff725_cppui_modular255 + 0x22abe8ea470a0372911bcef1367e10aa220491d76caeaa5959feb5d75f4a1f9f_big_uint255, + 0x5caab387eb997f774f64151ed21abfa5364a83c6f065d92bd9c92f2719b8e80b_big_uint255, + 0x57b33094aeff828377897b56e1c432978d07c668ef25a36bc5e2e835aaeff725_big_uint255 }} }}; }; @@ -1290,519 +1290,519 @@ namespace nil { constexpr static const std::array, state_words> mds_matrix = {{ {{ - 0x354423b163d1078b0dd645be56316e34a9b98e52dcf9f469be44b108be46c107_cppui_modular255, - 0x44778737e8bc1154aca1cd92054a1e5b83808403705f7d54da88bbd1920e1053_cppui_modular255, - 0x5872eefb5ab6b2946556524168a2aebb69afd513a2fff91e50167b1f6e4055e0_cppui_modular255, - 0x43dff85b25129835819bc8c95819f1a34136f6114e900cd3656e1b9e0e13f86a_cppui_modular255, - 0x07803d2ffe72940596803f244ac090a9cf2d3616546520bc360c7eed0b81cbf8_cppui_modular255 + 0x354423b163d1078b0dd645be56316e34a9b98e52dcf9f469be44b108be46c107_big_uint255, + 0x44778737e8bc1154aca1cd92054a1e5b83808403705f7d54da88bbd1920e1053_big_uint255, + 0x5872eefb5ab6b2946556524168a2aebb69afd513a2fff91e50167b1f6e4055e0_big_uint255, + 0x43dff85b25129835819bc8c95819f1a34136f6114e900cd3656e1b9e0e13f86a_big_uint255, + 0x07803d2ffe72940596803f244ac090a9cf2d3616546520bc360c7eed0b81cbf8_big_uint255 }}, {{ - 0x45d6bc4b818e2b9a53e0e2c0a08f70c34167fd8128e05ac800651ddfee0932d1_cppui_modular255, - 0x08317abbb9e5046b22dfb79e64c8184855107c1d95dddd2b63ca10dddea9ff1a_cppui_modular255, - 0x1bb80eba77c5dcffafb55ccba4ae39ac8f94a054f2a0ee3006b362f709d5e470_cppui_modular255, - 0x038e75bdcf8be7fd3a1e844c4de7333531bbd5a8d2c3779627df88e7480e7c5c_cppui_modular255, - 0x2dd797a699e620ea6b31b91ba3fad4a82f40cffb3e8a30c0b7a546ff69a9002b_cppui_modular255 + 0x45d6bc4b818e2b9a53e0e2c0a08f70c34167fd8128e05ac800651ddfee0932d1_big_uint255, + 0x08317abbb9e5046b22dfb79e64c8184855107c1d95dddd2b63ca10dddea9ff1a_big_uint255, + 0x1bb80eba77c5dcffafb55ccba4ae39ac8f94a054f2a0ee3006b362f709d5e470_big_uint255, + 0x038e75bdcf8be7fd3a1e844c4de7333531bbd5a8d2c3779627df88e7480e7c5c_big_uint255, + 0x2dd797a699e620ea6b31b91ba3fad4a82f40cffb3e8a30c0b7a546ff69a9002b_big_uint255 }}, {{ - 0x4b906f9ee339b196e958e3541b555b4b53e540a113b2f1cabba627be16eb5608_cppui_modular255, - 0x605f0c707b82ef287f46431f9241fe4acf0b7ddb151803cbcf1e7bbd27c3e974_cppui_modular255, - 0x100c514bf38f6ff10df1c83bb428397789cfff7bb0b1280f52343861e8c8737e_cppui_modular255, - 0x2d40ce8af8a252f5611701c3d6b1e517161d0549ef27f443570c81fcdfe3706b_cppui_modular255, - 0x3e6418bdf0313f59afc5f40b4450e56881110ea9a0532e8092efb06a12a8b0f1_cppui_modular255 + 0x4b906f9ee339b196e958e3541b555b4b53e540a113b2f1cabba627be16eb5608_big_uint255, + 0x605f0c707b82ef287f46431f9241fe4acf0b7ddb151803cbcf1e7bbd27c3e974_big_uint255, + 0x100c514bf38f6ff10df1c83bb428397789cfff7bb0b1280f52343861e8c8737e_big_uint255, + 0x2d40ce8af8a252f5611701c3d6b1e517161d0549ef27f443570c81fcdfe3706b_big_uint255, + 0x3e6418bdf0313f59afc5f40b4450e56881110ea9a0532e8092efb06a12a8b0f1_big_uint255 }}, {{ - 0x71788bf7f6c0cebae5627c5629d012d5fba52428d1f25cdaa0a7434e70e014d0_cppui_modular255, - 0x55cc73296f7e7d26d10b9339721d7983ca06145675255025ab00b34342557db7_cppui_modular255, - 0x0f043b29be2def73a6c6ec92168ea4b47bc9f434a5e6b5d48677670a7ca4d285_cppui_modular255, - 0x62ccc9cdfed859a610f103d74ea04dec0f6874a9b36f3b4e9b47fd73368d45b4_cppui_modular255, - 0x55fb349dd6200b34eaba53a67e74f47d08e473da139dc47e44df50a26423d2d1_cppui_modular255 + 0x71788bf7f6c0cebae5627c5629d012d5fba52428d1f25cdaa0a7434e70e014d0_big_uint255, + 0x55cc73296f7e7d26d10b9339721d7983ca06145675255025ab00b34342557db7_big_uint255, + 0x0f043b29be2def73a6c6ec92168ea4b47bc9f434a5e6b5d48677670a7ca4d285_big_uint255, + 0x62ccc9cdfed859a610f103d74ea04dec0f6874a9b36f3b4e9b47fd73368d45b4_big_uint255, + 0x55fb349dd6200b34eaba53a67e74f47d08e473da139dc47e44df50a26423d2d1_big_uint255 }}, {{ - 0x45bfbe5ed2f4a01c13b15f20bba00ff577b1154a81b3f318a6aff86369a66735_cppui_modular255, - 0x6a008906685587af05dce9ad2c65ea1d42b1ec32609597bd00c01f58443329ef_cppui_modular255, - 0x004feebd0dbdb9b71176a1d43c9eb495e16419382cdf7864e4bce7b37440cd58_cppui_modular255, - 0x09f080180ce23a5aef3a07e60b28ffeb2cf1771aefbc565c2a3059b39ed82f43_cppui_modular255, - 0x2f7126ddc54648ab6d02493dbe9907f29f4ef3967ad8cd609f0d9467e1694607_cppui_modular255 + 0x45bfbe5ed2f4a01c13b15f20bba00ff577b1154a81b3f318a6aff86369a66735_big_uint255, + 0x6a008906685587af05dce9ad2c65ea1d42b1ec32609597bd00c01f58443329ef_big_uint255, + 0x004feebd0dbdb9b71176a1d43c9eb495e16419382cdf7864e4bce7b37440cd58_big_uint255, + 0x09f080180ce23a5aef3a07e60b28ffeb2cf1771aefbc565c2a3059b39ed82f43_big_uint255, + 0x2f7126ddc54648ab6d02493dbe9907f29f4ef3967ad8cd609f0d9467e1694607_big_uint255 }} }}; constexpr static const std::array, round_count> round_constants = {{ {{ - 0x5ee52b2f39e240a4006e97a15a7609dce42fa9aa510d11586a56db98fa925158_cppui_modular255, - 0x3e92829ce321755f769c6fd0d51e98262d7747ad553b028dbbe98b5274b9c8e1_cppui_modular255, - 0x7067b2b9b65af0519cef530217d4563543852399c2af1557fcd9eb325b5365e4_cppui_modular255, - 0x725e66aa00e406f247f00002487d092328c526f2f5a3c456004a71cea83845d5_cppui_modular255, - 0x72bf92303a9d433709d29979a296d98f147e8e7b8ed0cb452bd9f9508f6e4711_cppui_modular255 + 0x5ee52b2f39e240a4006e97a15a7609dce42fa9aa510d11586a56db98fa925158_big_uint255, + 0x3e92829ce321755f769c6fd0d51e98262d7747ad553b028dbbe98b5274b9c8e1_big_uint255, + 0x7067b2b9b65af0519cef530217d4563543852399c2af1557fcd9eb325b5365e4_big_uint255, + 0x725e66aa00e406f247f00002487d092328c526f2f5a3c456004a71cea83845d5_big_uint255, + 0x72bf92303a9d433709d29979a296d98f147e8e7b8ed0cb452bd9f9508f6e4711_big_uint255 }}, {{ - 0x3d7e5deccc6eb706c315ff02070232127dbe99bc6a4d1b23e967d35205b87694_cppui_modular255, - 0x13558f81fbc15c2793cc349a059d752c712783727e1443c74098cd66fa12b78b_cppui_modular255, - 0x686f2c6d24dfb9cddbbf717708ca6e04a70f0e077766a39d5bc5de5155e6fcb2_cppui_modular255, - 0x582bc59317a001ed75ffe1c225901d67d8d3764a70eb254f810afc895cbf231b_cppui_modular255, - 0x076df166a42eae40f6df9e5908a54f69a77f4c507ea6dd07d671682cbc1a9534_cppui_modular255 + 0x3d7e5deccc6eb706c315ff02070232127dbe99bc6a4d1b23e967d35205b87694_big_uint255, + 0x13558f81fbc15c2793cc349a059d752c712783727e1443c74098cd66fa12b78b_big_uint255, + 0x686f2c6d24dfb9cddbbf717708ca6e04a70f0e077766a39d5bc5de5155e6fcb2_big_uint255, + 0x582bc59317a001ed75ffe1c225901d67d8d3764a70eb254f810afc895cbf231b_big_uint255, + 0x076df166a42eae40f6df9e5908a54f69a77f4c507ea6dd07d671682cbc1a9534_big_uint255 }}, {{ - 0x531f360b9640e565d580688ee5d09e2635997037e87129303bf8297459ab2492_cppui_modular255, - 0x30be41b5a9d8af19a5f922794008a263a121837bcbe113d59621ea30beefd075_cppui_modular255, - 0x39f57e4c8a1178d875210f820977f7fcd33812d444f88e471040676e3e591306_cppui_modular255, - 0x3514084b13bc0be636482204d9cddb072ee674c5cb1238890ee6206a3e7bf035_cppui_modular255, - 0x6372b6bc660daf6b04361caff785b46bbe59eb6a34ab93e23d6364e655dc3a36_cppui_modular255 + 0x531f360b9640e565d580688ee5d09e2635997037e87129303bf8297459ab2492_big_uint255, + 0x30be41b5a9d8af19a5f922794008a263a121837bcbe113d59621ea30beefd075_big_uint255, + 0x39f57e4c8a1178d875210f820977f7fcd33812d444f88e471040676e3e591306_big_uint255, + 0x3514084b13bc0be636482204d9cddb072ee674c5cb1238890ee6206a3e7bf035_big_uint255, + 0x6372b6bc660daf6b04361caff785b46bbe59eb6a34ab93e23d6364e655dc3a36_big_uint255 }}, {{ - 0x422af985e648814bec5af62c142828e002d4b014b702760106b0b90c50d11de5_cppui_modular255, - 0x3296e51f12e0f5c49747c1beb050ff320e2eb7422807eb0c157a372dba2ea013_cppui_modular255, - 0x3b76246abaf33b03dd5b589b80a7fac0ae7f1ad8a9623bb7cf7432c90e27358d_cppui_modular255, - 0x0b40e7e02f5cb836c883c7cef72ec48e87c1808f7d829e2ee0bec0ee709f7409_cppui_modular255, - 0x2ee81b5c29c93b8a6e8871c01d0380a698e547475359b4a4befc22ed2232690f_cppui_modular255 + 0x422af985e648814bec5af62c142828e002d4b014b702760106b0b90c50d11de5_big_uint255, + 0x3296e51f12e0f5c49747c1beb050ff320e2eb7422807eb0c157a372dba2ea013_big_uint255, + 0x3b76246abaf33b03dd5b589b80a7fac0ae7f1ad8a9623bb7cf7432c90e27358d_big_uint255, + 0x0b40e7e02f5cb836c883c7cef72ec48e87c1808f7d829e2ee0bec0ee709f7409_big_uint255, + 0x2ee81b5c29c93b8a6e8871c01d0380a698e547475359b4a4befc22ed2232690f_big_uint255 }}, {{ - 0x341ff90fc4a8afee9b74c464955ba9b357252e915b8d39ea7c1318eda718f54d_cppui_modular255, - 0x55eddabde058f3b5e9dae90873ec9bd7b05927da36925e7dfb7bc290c1da125e_cppui_modular255, - 0x6b34ad8cec56aae4595c403377cd2aa990a2f09b931f832781221965bb081b1c_cppui_modular255, - 0x707de76df294fb845309d2160e1bdffebefd57a80c8658899e2c95e77254c752_cppui_modular255, - 0x05e9b152bfd4946b9c109f930eb01892f314597507d28c735a266f4277bb2a32_cppui_modular255 + 0x341ff90fc4a8afee9b74c464955ba9b357252e915b8d39ea7c1318eda718f54d_big_uint255, + 0x55eddabde058f3b5e9dae90873ec9bd7b05927da36925e7dfb7bc290c1da125e_big_uint255, + 0x6b34ad8cec56aae4595c403377cd2aa990a2f09b931f832781221965bb081b1c_big_uint255, + 0x707de76df294fb845309d2160e1bdffebefd57a80c8658899e2c95e77254c752_big_uint255, + 0x05e9b152bfd4946b9c109f930eb01892f314597507d28c735a266f4277bb2a32_big_uint255 }}, {{ - 0x1589a5cbcee13b696b6f0a1dbbabc08394ab00ed5a6ae6435020e9e3e2fc909a_cppui_modular255, - 0x7116a5d027fe73fbc45bfc60fd875c3116fe3a567e830d1d2d38655223dbd7ec_cppui_modular255, - 0x05382ee6ad97381eb3137f5a90ea13298dac6bc7c2204906044fafc01bfe6ae4_cppui_modular255, - 0x0900bcfe5e7c1b7d0aa80c714b7b2a0c1df7473362138a9dc5c552d11c1d0015_cppui_modular255, - 0x0513deb89d2e48fc729440dc08d0256a79cda84d511a04e0d92cce3c7e55a7c2_cppui_modular255 + 0x1589a5cbcee13b696b6f0a1dbbabc08394ab00ed5a6ae6435020e9e3e2fc909a_big_uint255, + 0x7116a5d027fe73fbc45bfc60fd875c3116fe3a567e830d1d2d38655223dbd7ec_big_uint255, + 0x05382ee6ad97381eb3137f5a90ea13298dac6bc7c2204906044fafc01bfe6ae4_big_uint255, + 0x0900bcfe5e7c1b7d0aa80c714b7b2a0c1df7473362138a9dc5c552d11c1d0015_big_uint255, + 0x0513deb89d2e48fc729440dc08d0256a79cda84d511a04e0d92cce3c7e55a7c2_big_uint255 }}, {{ - 0x6bbb5f1736d499fe3fda42ad40a2b124952ac35fe970ebde38c65cc20ad2afc8_cppui_modular255, - 0x5782ac68a8da0ba09f4d17e7e4b46caa4411a27e60be92168ce75bed95453e05_cppui_modular255, - 0x2d83f3324639c5d83a1ffcf6ac693eef98d8ea4877d547c62b304b0a9f4a0c28_cppui_modular255, - 0x16d3a13700ec503e29ca4d0c6342864595134408b6668bbf1766bb48d7f96cba_cppui_modular255, - 0x318050e971e075931253b00430d35f89f40a88fc73d62150882a8e87149d7244_cppui_modular255 + 0x6bbb5f1736d499fe3fda42ad40a2b124952ac35fe970ebde38c65cc20ad2afc8_big_uint255, + 0x5782ac68a8da0ba09f4d17e7e4b46caa4411a27e60be92168ce75bed95453e05_big_uint255, + 0x2d83f3324639c5d83a1ffcf6ac693eef98d8ea4877d547c62b304b0a9f4a0c28_big_uint255, + 0x16d3a13700ec503e29ca4d0c6342864595134408b6668bbf1766bb48d7f96cba_big_uint255, + 0x318050e971e075931253b00430d35f89f40a88fc73d62150882a8e87149d7244_big_uint255 }}, {{ - 0x7180760dd839d8bffbf9b1e26826cb4f6de65fa868a8143e1dc8c2b6ac6d1ac2_cppui_modular255, - 0x5cf2aa95907e59c4725cc17c8cf492f9a7eeef2de337ac227a983c444ae0e80e_cppui_modular255, - 0x2b8345763484d7ec02d6ee267b7c737ca9de41e2186416bf91c65eb0cd11c0a4_cppui_modular255, - 0x055aa90aa60ef9b7f3c29c7500c64e6b85929220a6418dfad37ead3928059117_cppui_modular255, - 0x541d5e4be0967bf49a595c1d8290b750305a334f3347c01b57f8ba313170e1ca_cppui_modular255 + 0x7180760dd839d8bffbf9b1e26826cb4f6de65fa868a8143e1dc8c2b6ac6d1ac2_big_uint255, + 0x5cf2aa95907e59c4725cc17c8cf492f9a7eeef2de337ac227a983c444ae0e80e_big_uint255, + 0x2b8345763484d7ec02d6ee267b7c737ca9de41e2186416bf91c65eb0cd11c0a4_big_uint255, + 0x055aa90aa60ef9b7f3c29c7500c64e6b85929220a6418dfad37ead3928059117_big_uint255, + 0x541d5e4be0967bf49a595c1d8290b750305a334f3347c01b57f8ba313170e1ca_big_uint255 }}, {{ - 0x05c0a1f16f97f582caaf4338f018f869e8dd0fa32f007bad1a1a4780053d5817_cppui_modular255, - 0x01519e13858591aa93b9c1d7f849276ac1d2011b7fd19a475371c7968d9f52cd_cppui_modular255, - 0x69c30d5a27f4dffa19c956c348287a704676d999f23044036b9e687a45a1a113_cppui_modular255, - 0x58c93b899aa53e06e82b6346e36338841ba7279d2b7a0ecd3aa20f292852936f_cppui_modular255, - 0x06b8a12870a15479d41018fed6f1a29102ae23e13d0fbccec93ace48bdb9dc93_cppui_modular255 + 0x05c0a1f16f97f582caaf4338f018f869e8dd0fa32f007bad1a1a4780053d5817_big_uint255, + 0x01519e13858591aa93b9c1d7f849276ac1d2011b7fd19a475371c7968d9f52cd_big_uint255, + 0x69c30d5a27f4dffa19c956c348287a704676d999f23044036b9e687a45a1a113_big_uint255, + 0x58c93b899aa53e06e82b6346e36338841ba7279d2b7a0ecd3aa20f292852936f_big_uint255, + 0x06b8a12870a15479d41018fed6f1a29102ae23e13d0fbccec93ace48bdb9dc93_big_uint255 }}, {{ - 0x33eda3c347379e61c2297aa1026682d22f95dc3c7e46e68ab3adb4b0939d76e2_cppui_modular255, - 0x187728045111275b93a1218a148ada85a1f6e2059c443ac7d61fe81e3130b89b_cppui_modular255, - 0x397ec485c5a8b0c8a03ff543e9a9e5a4dc0dd4849fe955bb77b452e2e22c4f17_cppui_modular255, - 0x2f33f8de90f81248455d5a6592667092992be0468372addbaff664caa84cd2d5_cppui_modular255, - 0x061a1a458994ddf9f38c5edfbd737d3ceb05deaee685058b14943e7e9246ebca_cppui_modular255 + 0x33eda3c347379e61c2297aa1026682d22f95dc3c7e46e68ab3adb4b0939d76e2_big_uint255, + 0x187728045111275b93a1218a148ada85a1f6e2059c443ac7d61fe81e3130b89b_big_uint255, + 0x397ec485c5a8b0c8a03ff543e9a9e5a4dc0dd4849fe955bb77b452e2e22c4f17_big_uint255, + 0x2f33f8de90f81248455d5a6592667092992be0468372addbaff664caa84cd2d5_big_uint255, + 0x061a1a458994ddf9f38c5edfbd737d3ceb05deaee685058b14943e7e9246ebca_big_uint255 }}, {{ - 0x4b73ab5b9d35f47307b731e3cf1a1a22e7068e2744f2af0ef6bd78bf8aae4845_cppui_modular255, - 0x5578b7ad5f8d4f3b8e618af7d8d5ec8bf837d2d9486527fe2f9bf7464f8516ad_cppui_modular255, - 0x50b4f055d860f89e12883209f847a4b1a2395fb419eb53c182dbb555c962255c_cppui_modular255, - 0x0b2da770936d6c778be289557ddd2ca024b93fa38c5d4541344e883a69611813_cppui_modular255, - 0x47d8441e1ae7cb8ffc52a18c67afff3cf7543cad51605b2d4e2513f1e1868b68_cppui_modular255 + 0x4b73ab5b9d35f47307b731e3cf1a1a22e7068e2744f2af0ef6bd78bf8aae4845_big_uint255, + 0x5578b7ad5f8d4f3b8e618af7d8d5ec8bf837d2d9486527fe2f9bf7464f8516ad_big_uint255, + 0x50b4f055d860f89e12883209f847a4b1a2395fb419eb53c182dbb555c962255c_big_uint255, + 0x0b2da770936d6c778be289557ddd2ca024b93fa38c5d4541344e883a69611813_big_uint255, + 0x47d8441e1ae7cb8ffc52a18c67afff3cf7543cad51605b2d4e2513f1e1868b68_big_uint255 }}, {{ - 0x619da3bf44b42acd949ed572c9f3c195ed20b0b91bcd9e95ee3750d26f3b0ebd_cppui_modular255, - 0x6c9e249e89b2b4cf9cd7772950e0cc9d06688d4f051095eafd116371ede49ab7_cppui_modular255, - 0x210bd3217a141c55877d4528a4e80d5d81d78de7addce85994082281a6250d4b_cppui_modular255, - 0x4e1d8e4079c14c83847af6394d7dc23f33ebf71593379583ec574bf5c86ea9a6_cppui_modular255, - 0x699187330fc1d606e8b31b677651a2c7d1c87d4d001018031792cad0ad3f2826_cppui_modular255 + 0x619da3bf44b42acd949ed572c9f3c195ed20b0b91bcd9e95ee3750d26f3b0ebd_big_uint255, + 0x6c9e249e89b2b4cf9cd7772950e0cc9d06688d4f051095eafd116371ede49ab7_big_uint255, + 0x210bd3217a141c55877d4528a4e80d5d81d78de7addce85994082281a6250d4b_big_uint255, + 0x4e1d8e4079c14c83847af6394d7dc23f33ebf71593379583ec574bf5c86ea9a6_big_uint255, + 0x699187330fc1d606e8b31b677651a2c7d1c87d4d001018031792cad0ad3f2826_big_uint255 }}, {{ - 0x2946bfc0f45c1f1a0dc4c343a85259f6a6237f064481fe66eda76f01998a01ea_cppui_modular255, - 0x5543e07588375c6d800e5e42d1bfd8b7a92a2a35d65b234ded85f879f82a3d66_cppui_modular255, - 0x660e9d0f2f866e8d12b40dd9d9c03cc8b9ca78600bd649f0fffb2c388dcc8b43_cppui_modular255, - 0x38f06c48d4dc53cb1b69619244cc2a610fdc4229ea316980dffe9131a72b4209_cppui_modular255, - 0x5c9a73a16521ddf463f9de314dd5f7255bc66add48297615b761f34e4636762d_cppui_modular255 + 0x2946bfc0f45c1f1a0dc4c343a85259f6a6237f064481fe66eda76f01998a01ea_big_uint255, + 0x5543e07588375c6d800e5e42d1bfd8b7a92a2a35d65b234ded85f879f82a3d66_big_uint255, + 0x660e9d0f2f866e8d12b40dd9d9c03cc8b9ca78600bd649f0fffb2c388dcc8b43_big_uint255, + 0x38f06c48d4dc53cb1b69619244cc2a610fdc4229ea316980dffe9131a72b4209_big_uint255, + 0x5c9a73a16521ddf463f9de314dd5f7255bc66add48297615b761f34e4636762d_big_uint255 }}, {{ - 0x310931f0204c9936fe659e9ebbda832c930172130b3f5476c6c6ee5e7fef3e45_cppui_modular255, - 0x72eb1d833664d8989998af11441ac49654c12210b3465e5ac67a99679634a3af_cppui_modular255, - 0x6981346585a2a466a9255841f710e1d083bdcc21c0aa6721745e158218767a94_cppui_modular255, - 0x0370a259836b3766d563ed3cdcf55ace52655111a1017d8c76eaf8f97e81d858_cppui_modular255, - 0x4f63c45a324b8b974c22a20a6c670eb62d47ef900541b63f1d362b8bbe4ec418_cppui_modular255 + 0x310931f0204c9936fe659e9ebbda832c930172130b3f5476c6c6ee5e7fef3e45_big_uint255, + 0x72eb1d833664d8989998af11441ac49654c12210b3465e5ac67a99679634a3af_big_uint255, + 0x6981346585a2a466a9255841f710e1d083bdcc21c0aa6721745e158218767a94_big_uint255, + 0x0370a259836b3766d563ed3cdcf55ace52655111a1017d8c76eaf8f97e81d858_big_uint255, + 0x4f63c45a324b8b974c22a20a6c670eb62d47ef900541b63f1d362b8bbe4ec418_big_uint255 }}, {{ - 0x6a4c7347121c2d4745ecffaad22281cc4d58ea74453b7d2b625b890190fdc7ad_cppui_modular255, - 0x36d8869bb69a51ee99622af09d6878c5b715084b25f6e4560a7498557fe87fb5_cppui_modular255, - 0x18faa7f51e1b7a442f9123806872094c0de8a46a6d8402f31f0cde3fcb878394_cppui_modular255, - 0x3610d022aacbe58593e0d6aa7eefdca767f5ddfe7fa1fb9fb4f80225d82b617b_cppui_modular255, - 0x3b5f13d6a8bbff31569bc6860087b2a4b361146a04ad5fc7396a3d0c59f68c1c_cppui_modular255 + 0x6a4c7347121c2d4745ecffaad22281cc4d58ea74453b7d2b625b890190fdc7ad_big_uint255, + 0x36d8869bb69a51ee99622af09d6878c5b715084b25f6e4560a7498557fe87fb5_big_uint255, + 0x18faa7f51e1b7a442f9123806872094c0de8a46a6d8402f31f0cde3fcb878394_big_uint255, + 0x3610d022aacbe58593e0d6aa7eefdca767f5ddfe7fa1fb9fb4f80225d82b617b_big_uint255, + 0x3b5f13d6a8bbff31569bc6860087b2a4b361146a04ad5fc7396a3d0c59f68c1c_big_uint255 }}, {{ - 0x40e919335051c6aaaee033745c41b6fa36739a097d94ce6eb075ec03da2a978b_cppui_modular255, - 0x2f54586ab9b7886340f8ed5254f29128a85e2fb1e3725bf3c9cd8bddadc947f1_cppui_modular255, - 0x00606231b689a040363e5afc050f9fc9296d6c620a885eeaffe91be387cbe96c_cppui_modular255, - 0x4b55696db6b0fa327527a76e6ab6b688561c879e53d858e4c90a1122210130e1_cppui_modular255, - 0x569c39bd78356991953aef4b1a01fdf71710bb05eea1f447c3e5efe13bd62894_cppui_modular255 + 0x40e919335051c6aaaee033745c41b6fa36739a097d94ce6eb075ec03da2a978b_big_uint255, + 0x2f54586ab9b7886340f8ed5254f29128a85e2fb1e3725bf3c9cd8bddadc947f1_big_uint255, + 0x00606231b689a040363e5afc050f9fc9296d6c620a885eeaffe91be387cbe96c_big_uint255, + 0x4b55696db6b0fa327527a76e6ab6b688561c879e53d858e4c90a1122210130e1_big_uint255, + 0x569c39bd78356991953aef4b1a01fdf71710bb05eea1f447c3e5efe13bd62894_big_uint255 }}, {{ - 0x537f73fcaa256497a2582e45105f1dc10f39c7fce9b88cab5523af3f5f82dcd9_cppui_modular255, - 0x2d58d32120c25995cd0754ab9fdf9ad67d67623cfd1fcbf489f51fa6e6eee4a2_cppui_modular255, - 0x37cb0f655951fca18a4ccdddd4d8466f8839ba8e320a104cb47a59cd387d322f_cppui_modular255, - 0x4e29d154430c9bced788d2eed8f3e01b5da24c1d3710e490bc40ee6d5903213c_cppui_modular255, - 0x47597b7a9018192ef22d6dd24555af1c0c51d8a90b54d8a0bdc2df7967d7a28b_cppui_modular255 + 0x537f73fcaa256497a2582e45105f1dc10f39c7fce9b88cab5523af3f5f82dcd9_big_uint255, + 0x2d58d32120c25995cd0754ab9fdf9ad67d67623cfd1fcbf489f51fa6e6eee4a2_big_uint255, + 0x37cb0f655951fca18a4ccdddd4d8466f8839ba8e320a104cb47a59cd387d322f_big_uint255, + 0x4e29d154430c9bced788d2eed8f3e01b5da24c1d3710e490bc40ee6d5903213c_big_uint255, + 0x47597b7a9018192ef22d6dd24555af1c0c51d8a90b54d8a0bdc2df7967d7a28b_big_uint255 }}, {{ - 0x4e01b43205fca0b4a32582abe600f3a326035fe7e028cb0569bac43c997b98ce_cppui_modular255, - 0x0172ffdfba7e43ca807d5b5de7727b4e41706c1f2858c1e8a46c27ed3eae5ff2_cppui_modular255, - 0x2216dd907ab98c0d1e720a46ef83334a236d2c134ccf35ef8e889421e70ebe03_cppui_modular255, - 0x168709f668b635f03607a39390a0de71306d6430ce2babf7292d789d25c0f8d5_cppui_modular255, - 0x0ff6a3823440877dfd355dea80595e21115d0dfe3472cec4ad1437572cc6151d_cppui_modular255 + 0x4e01b43205fca0b4a32582abe600f3a326035fe7e028cb0569bac43c997b98ce_big_uint255, + 0x0172ffdfba7e43ca807d5b5de7727b4e41706c1f2858c1e8a46c27ed3eae5ff2_big_uint255, + 0x2216dd907ab98c0d1e720a46ef83334a236d2c134ccf35ef8e889421e70ebe03_big_uint255, + 0x168709f668b635f03607a39390a0de71306d6430ce2babf7292d789d25c0f8d5_big_uint255, + 0x0ff6a3823440877dfd355dea80595e21115d0dfe3472cec4ad1437572cc6151d_big_uint255 }}, {{ - 0x44e37699b3c72f50ec1a754c72e6fa3f5a074181dd63d189ba36447d34e536ff_cppui_modular255, - 0x267298d2e46227f7f7f422e3059f18d83a8795731b13f6568ce54730cd3fe9ae_cppui_modular255, - 0x1ecbe7a60848077203373441a5b09b44693a155fe226442259e37ac47209235a_cppui_modular255, - 0x31cb23e6b5d7393577d5f5c3368c5bdd5b434ee6319f07e502031cc393d4eccb_cppui_modular255, - 0x5d4c550c4a6eccd74b74d6279b3d9bc755084588156a1bef673657dc2116ecfc_cppui_modular255 + 0x44e37699b3c72f50ec1a754c72e6fa3f5a074181dd63d189ba36447d34e536ff_big_uint255, + 0x267298d2e46227f7f7f422e3059f18d83a8795731b13f6568ce54730cd3fe9ae_big_uint255, + 0x1ecbe7a60848077203373441a5b09b44693a155fe226442259e37ac47209235a_big_uint255, + 0x31cb23e6b5d7393577d5f5c3368c5bdd5b434ee6319f07e502031cc393d4eccb_big_uint255, + 0x5d4c550c4a6eccd74b74d6279b3d9bc755084588156a1bef673657dc2116ecfc_big_uint255 }}, {{ - 0x226056b5dec9afd19190ac48740c3b5ab1bb429b19f56894a3dec3f104d238c0_cppui_modular255, - 0x09077c021183dd37ad10451ded70d7ae6ec4819ae76ce23fb2a0be63e69907d9_cppui_modular255, - 0x53545c868ba0fbf0ed1ed7a24ec11b2ecfba5b37fd5cee80774e1ecdea991ed4_cppui_modular255, - 0x69521c33d148e678ca10b33103812cd27597c4a6cddbe83f4970d4b96e03304d_cppui_modular255, - 0x01d5779be7477b96aac6532ef919e61c624072be54587e0698999dd5f460e446_cppui_modular255 + 0x226056b5dec9afd19190ac48740c3b5ab1bb429b19f56894a3dec3f104d238c0_big_uint255, + 0x09077c021183dd37ad10451ded70d7ae6ec4819ae76ce23fb2a0be63e69907d9_big_uint255, + 0x53545c868ba0fbf0ed1ed7a24ec11b2ecfba5b37fd5cee80774e1ecdea991ed4_big_uint255, + 0x69521c33d148e678ca10b33103812cd27597c4a6cddbe83f4970d4b96e03304d_big_uint255, + 0x01d5779be7477b96aac6532ef919e61c624072be54587e0698999dd5f460e446_big_uint255 }}, {{ - 0x57875a44441d2f191ac7d8de42691ab55fd3401bbaf04b786ef0603b3edf2927_cppui_modular255, - 0x1d5c957da0832d5b94e76f7abdb190972774b594ed232810bfcafe5441839d37_cppui_modular255, - 0x1b678335a80fd045fc7ce1897aa129f67bd55ca9ca801bd88eb7cc868538bd7a_cppui_modular255, - 0x31e69d706a5c1e011c1cb1809e5bf1857c90f9f50b9e1ae5ad36e4d3dcdbb7ed_cppui_modular255, - 0x485df8462ed7a18de34aa6e99ecc9bbf2db075a096b56bc2943b76a99c4bb1a0_cppui_modular255 + 0x57875a44441d2f191ac7d8de42691ab55fd3401bbaf04b786ef0603b3edf2927_big_uint255, + 0x1d5c957da0832d5b94e76f7abdb190972774b594ed232810bfcafe5441839d37_big_uint255, + 0x1b678335a80fd045fc7ce1897aa129f67bd55ca9ca801bd88eb7cc868538bd7a_big_uint255, + 0x31e69d706a5c1e011c1cb1809e5bf1857c90f9f50b9e1ae5ad36e4d3dcdbb7ed_big_uint255, + 0x485df8462ed7a18de34aa6e99ecc9bbf2db075a096b56bc2943b76a99c4bb1a0_big_uint255 }}, {{ - 0x1e46fdcbb3705f663a350e78f99024912d80c95779195807aae82cbb494ce9e4_cppui_modular255, - 0x441d0fa0e9cb86c3a2a1f87151681c603c3e028f1a0670be2149eed4f0a24f08_cppui_modular255, - 0x02a3caff274f40942062340ec1fae17c1b1e97c2f0fc7e847c90e9317fea2c0c_cppui_modular255, - 0x4caf281080c0b2f2f638bf0f4859442f4c9da94e9994dada34c5c914130c1a9e_cppui_modular255, - 0x444470c6c49b5b9a38181c3af20bcfea572450946135baea85cfd6b692fa6464_cppui_modular255 + 0x1e46fdcbb3705f663a350e78f99024912d80c95779195807aae82cbb494ce9e4_big_uint255, + 0x441d0fa0e9cb86c3a2a1f87151681c603c3e028f1a0670be2149eed4f0a24f08_big_uint255, + 0x02a3caff274f40942062340ec1fae17c1b1e97c2f0fc7e847c90e9317fea2c0c_big_uint255, + 0x4caf281080c0b2f2f638bf0f4859442f4c9da94e9994dada34c5c914130c1a9e_big_uint255, + 0x444470c6c49b5b9a38181c3af20bcfea572450946135baea85cfd6b692fa6464_big_uint255 }}, {{ - 0x6d5e07a13376fc883bea2dcdbad7f80b7780f231cdd33f5b98618f42cc49ec2f_cppui_modular255, - 0x1b9470418a07d8c88c767d1e63e8d5cc7f810cc530db1340181ecbbb212e0f70_cppui_modular255, - 0x4134c8666c685b712f4aec72077c540ef4a041dcaa123caabd57b83fc6266f14_cppui_modular255, - 0x3d5d0489e27362db9bf0cc7217477d81d2a73e1a44edc43e32d43bb544287c9d_cppui_modular255, - 0x71d7d4a91945e796f538f03b9324497489009ec1a0a403de062ed5bb4d7c2400_cppui_modular255 + 0x6d5e07a13376fc883bea2dcdbad7f80b7780f231cdd33f5b98618f42cc49ec2f_big_uint255, + 0x1b9470418a07d8c88c767d1e63e8d5cc7f810cc530db1340181ecbbb212e0f70_big_uint255, + 0x4134c8666c685b712f4aec72077c540ef4a041dcaa123caabd57b83fc6266f14_big_uint255, + 0x3d5d0489e27362db9bf0cc7217477d81d2a73e1a44edc43e32d43bb544287c9d_big_uint255, + 0x71d7d4a91945e796f538f03b9324497489009ec1a0a403de062ed5bb4d7c2400_big_uint255 }}, {{ - 0x646c3d732a94f722384ac266b41e06cf21bf24fb9426c9556d8ac9514f0875f7_cppui_modular255, - 0x4f860c9e5d9bb73057d93c207902d9e60fd6a7c779fde1ebf16b853dba1ea9ad_cppui_modular255, - 0x05801566eb9e119e2f9ace565c9488cd999d66a5753eb4b9887363137baa09ab_cppui_modular255, - 0x0263bdb8654cf1245ae4589370dfd5eeb109a50944eef54308566055b887ee01_cppui_modular255, - 0x4cc39561e65eb05cb8c83f9854750a9114a996eb23e6a0bb07d2d61f0baf0a62_cppui_modular255 + 0x646c3d732a94f722384ac266b41e06cf21bf24fb9426c9556d8ac9514f0875f7_big_uint255, + 0x4f860c9e5d9bb73057d93c207902d9e60fd6a7c779fde1ebf16b853dba1ea9ad_big_uint255, + 0x05801566eb9e119e2f9ace565c9488cd999d66a5753eb4b9887363137baa09ab_big_uint255, + 0x0263bdb8654cf1245ae4589370dfd5eeb109a50944eef54308566055b887ee01_big_uint255, + 0x4cc39561e65eb05cb8c83f9854750a9114a996eb23e6a0bb07d2d61f0baf0a62_big_uint255 }}, {{ - 0x36b544778b2fdb94f808ad8d077b7f0b44f3bba515ecdf026919e2fed09a106d_cppui_modular255, - 0x3fb1f7aec47cbe990151d4bf703c38349b95f409abdf0504e67c1a55ef82294c_cppui_modular255, - 0x637e7eb19cf539aada7e48bc6b72e5ccb0e3f6913f18a0d55696dddfcb1b587a_cppui_modular255, - 0x73bc630fcece6947fb81ac8e0f1f1671ed6042c3ef3bbb12ed554f28b48b46ec_cppui_modular255, - 0x304b46f52d597b964fbec3fc0dceee442febe6131359e156c194ab7be2a11e6d_cppui_modular255 + 0x36b544778b2fdb94f808ad8d077b7f0b44f3bba515ecdf026919e2fed09a106d_big_uint255, + 0x3fb1f7aec47cbe990151d4bf703c38349b95f409abdf0504e67c1a55ef82294c_big_uint255, + 0x637e7eb19cf539aada7e48bc6b72e5ccb0e3f6913f18a0d55696dddfcb1b587a_big_uint255, + 0x73bc630fcece6947fb81ac8e0f1f1671ed6042c3ef3bbb12ed554f28b48b46ec_big_uint255, + 0x304b46f52d597b964fbec3fc0dceee442febe6131359e156c194ab7be2a11e6d_big_uint255 }}, {{ - 0x067d85956dcfff7fd9f6a0fec505b7f4998e3d85672623677a6d974d6b111de6_cppui_modular255, - 0x65830d8053bf8afc0ba5274f1a4c4cce617fa624b480f13ed3eb369fbba78e67_cppui_modular255, - 0x6c32c101e08a962bd996d759a6c012a4d97aedaab9fc99c1fa735a16cd24dd44_cppui_modular255, - 0x11fb2d160e41a1845fd14578c617285081fb1a16a21b36cfd5065b30fac574e3_cppui_modular255, - 0x50aada39348c4736f6c59f7f053c488ed999a33ad23501d9c635aa03baf90db5_cppui_modular255 + 0x067d85956dcfff7fd9f6a0fec505b7f4998e3d85672623677a6d974d6b111de6_big_uint255, + 0x65830d8053bf8afc0ba5274f1a4c4cce617fa624b480f13ed3eb369fbba78e67_big_uint255, + 0x6c32c101e08a962bd996d759a6c012a4d97aedaab9fc99c1fa735a16cd24dd44_big_uint255, + 0x11fb2d160e41a1845fd14578c617285081fb1a16a21b36cfd5065b30fac574e3_big_uint255, + 0x50aada39348c4736f6c59f7f053c488ed999a33ad23501d9c635aa03baf90db5_big_uint255 }}, {{ - 0x5a5f0e3a32b260fbdfdc8c0eaf3a99396992b50b6dbb63a9d1e1ddf9c91d78d4_cppui_modular255, - 0x62c9f6d9aea355d358f2986ad487c2ae443122e1edfb076930865608d05c3b39_cppui_modular255, - 0x520cea06cee20150703a1c8000d4a5f22b3efeb9e34eb90bad0b4ff091b33683_cppui_modular255, - 0x6da4e4682545c1f4c0076f5845fbbcf48632a9c193a92593d12d248031f2c893_cppui_modular255, - 0x1ba5502cee2ea2d07a64f68f0a7492d2426382a5b9662d0410e086107399989b_cppui_modular255 + 0x5a5f0e3a32b260fbdfdc8c0eaf3a99396992b50b6dbb63a9d1e1ddf9c91d78d4_big_uint255, + 0x62c9f6d9aea355d358f2986ad487c2ae443122e1edfb076930865608d05c3b39_big_uint255, + 0x520cea06cee20150703a1c8000d4a5f22b3efeb9e34eb90bad0b4ff091b33683_big_uint255, + 0x6da4e4682545c1f4c0076f5845fbbcf48632a9c193a92593d12d248031f2c893_big_uint255, + 0x1ba5502cee2ea2d07a64f68f0a7492d2426382a5b9662d0410e086107399989b_big_uint255 }}, {{ - 0x6ab843ca92240f8a82862da071d53f048272d55425907fc8d0e60dcccd5a1ea4_cppui_modular255, - 0x3f65c2dfa6bb39c1b291c40f810cc912015384a2a24fd322b6375e27bd069322_cppui_modular255, - 0x6a2df71a64cb0d9a548e3b65ba4e646ff5e519cab564b5f77b3fe08e038b9c3a_cppui_modular255, - 0x64776bf2b66bcd09c8661ee6ca6b8251bb4aba5a7ba181464d905db561ca45e1_cppui_modular255, - 0x6d7bed0d258b518eda13368f00be2cc0a94d71cc203d5905c35b10a3ee53eea8_cppui_modular255 + 0x6ab843ca92240f8a82862da071d53f048272d55425907fc8d0e60dcccd5a1ea4_big_uint255, + 0x3f65c2dfa6bb39c1b291c40f810cc912015384a2a24fd322b6375e27bd069322_big_uint255, + 0x6a2df71a64cb0d9a548e3b65ba4e646ff5e519cab564b5f77b3fe08e038b9c3a_big_uint255, + 0x64776bf2b66bcd09c8661ee6ca6b8251bb4aba5a7ba181464d905db561ca45e1_big_uint255, + 0x6d7bed0d258b518eda13368f00be2cc0a94d71cc203d5905c35b10a3ee53eea8_big_uint255 }}, {{ - 0x371b958b5c79c889d1786edfe404119773f728822637fb4890b8847a93f97af1_cppui_modular255, - 0x56923182c33cb4dbf0988ba2314378dfd7491b3467b6134e6283c87a1478cbb8_cppui_modular255, - 0x3c4304994ef664d6aa19e3db492c306534281b5b6f857fa6ffae67bdba99c09e_cppui_modular255, - 0x0d003bd3068fa94c4f7bbe6ba02993acd341a27ed2fd7ecaa4e6b0b9d0abd85a_cppui_modular255, - 0x1073cb8c08510e7d88ed4cdf78e96b297cabe9d6677db47289b056c2a640da01_cppui_modular255 + 0x371b958b5c79c889d1786edfe404119773f728822637fb4890b8847a93f97af1_big_uint255, + 0x56923182c33cb4dbf0988ba2314378dfd7491b3467b6134e6283c87a1478cbb8_big_uint255, + 0x3c4304994ef664d6aa19e3db492c306534281b5b6f857fa6ffae67bdba99c09e_big_uint255, + 0x0d003bd3068fa94c4f7bbe6ba02993acd341a27ed2fd7ecaa4e6b0b9d0abd85a_big_uint255, + 0x1073cb8c08510e7d88ed4cdf78e96b297cabe9d6677db47289b056c2a640da01_big_uint255 }}, {{ - 0x5c57522580fbc75883658d4b7b8ea07e1a4fc75f453c09edd9d249ff1bd31ae0_cppui_modular255, - 0x2a5bec9b422b4dc64958f4752d0c091ffa7904e0ce4809728d16235bb41d707f_cppui_modular255, - 0x379c4a9b4174c5878f72b60fa985f7aa86c1fd868683bdbe8fae194cda2e56c7_cppui_modular255, - 0x3634e042e79d046adb911d57b338e78f51ac7d212c5a5c6dc4fa1a05ddb58c82_cppui_modular255, - 0x3ace976310c5040e1484d1a6d42993ac5923d474ce5497a3fac468af25843a01_cppui_modular255 + 0x5c57522580fbc75883658d4b7b8ea07e1a4fc75f453c09edd9d249ff1bd31ae0_big_uint255, + 0x2a5bec9b422b4dc64958f4752d0c091ffa7904e0ce4809728d16235bb41d707f_big_uint255, + 0x379c4a9b4174c5878f72b60fa985f7aa86c1fd868683bdbe8fae194cda2e56c7_big_uint255, + 0x3634e042e79d046adb911d57b338e78f51ac7d212c5a5c6dc4fa1a05ddb58c82_big_uint255, + 0x3ace976310c5040e1484d1a6d42993ac5923d474ce5497a3fac468af25843a01_big_uint255 }}, {{ - 0x3f5a856ab863b7584bc2e6e4c610b9df55a9306eb68894d630ff7d04f243e6f5_cppui_modular255, - 0x0d52822f5581fe9c5dab0b1f8d04eae183deb87c89504544a3d5558594b3149b_cppui_modular255, - 0x3c119e173586c22059bb09d2af4fc1044c8fc44f709233f7625e5fffa6696596_cppui_modular255, - 0x3e154fd5a026d7c6584faf8c089d82fd560f138392a8d4a5fe287859994c96b5_cppui_modular255, - 0x47251339c44d737b21df0ed1e204a28b68c9abb58f1cf2232f8a2da433e24b0b_cppui_modular255 + 0x3f5a856ab863b7584bc2e6e4c610b9df55a9306eb68894d630ff7d04f243e6f5_big_uint255, + 0x0d52822f5581fe9c5dab0b1f8d04eae183deb87c89504544a3d5558594b3149b_big_uint255, + 0x3c119e173586c22059bb09d2af4fc1044c8fc44f709233f7625e5fffa6696596_big_uint255, + 0x3e154fd5a026d7c6584faf8c089d82fd560f138392a8d4a5fe287859994c96b5_big_uint255, + 0x47251339c44d737b21df0ed1e204a28b68c9abb58f1cf2232f8a2da433e24b0b_big_uint255 }}, {{ - 0x73d84625f38db2f3842d7724d8e79d6d0349a93b8d6142603eea382ba6ed8692_cppui_modular255, - 0x42929bffc19bf9cd1c53d10440b0760a3be6442db20458b692b4ba3901e6003f_cppui_modular255, - 0x39b16b0fc3700aa93e0cac53fcaf7e84495ac3b49553b2e1a5ff9f73fe74de50_cppui_modular255, - 0x2b715e21640cfb6f77b91a4f6d3dcaef9b5faa7c0bfe94c8d80b0824292603bc_cppui_modular255, - 0x306bef0c637b5d7c8d6486915f6623f4e1ed81971f40772ec60feb5e243d32a0_cppui_modular255 + 0x73d84625f38db2f3842d7724d8e79d6d0349a93b8d6142603eea382ba6ed8692_big_uint255, + 0x42929bffc19bf9cd1c53d10440b0760a3be6442db20458b692b4ba3901e6003f_big_uint255, + 0x39b16b0fc3700aa93e0cac53fcaf7e84495ac3b49553b2e1a5ff9f73fe74de50_big_uint255, + 0x2b715e21640cfb6f77b91a4f6d3dcaef9b5faa7c0bfe94c8d80b0824292603bc_big_uint255, + 0x306bef0c637b5d7c8d6486915f6623f4e1ed81971f40772ec60feb5e243d32a0_big_uint255 }}, {{ - 0x5287d6ece65ef5df6e1c65dddf1d97cfa019157a5c90c004527c9d7c7496d814_cppui_modular255, - 0x0d760a2132c9092b0c8c89cbdf4fb1bd282791ef6284b73a44b313e8118e7d0c_cppui_modular255, - 0x5e830f4484268a349e4d9f6178ef745460f1f8456b04d0dc7814844052d51eb5_cppui_modular255, - 0x2468669481610965d8439f60a66aa61fbc7b18e82b35aa4755873ec4db82174e_cppui_modular255, - 0x23b6ea9e4d1fde701c719c2afab1272ea22b172bf7afe0837364ad9a2f698bd4_cppui_modular255 + 0x5287d6ece65ef5df6e1c65dddf1d97cfa019157a5c90c004527c9d7c7496d814_big_uint255, + 0x0d760a2132c9092b0c8c89cbdf4fb1bd282791ef6284b73a44b313e8118e7d0c_big_uint255, + 0x5e830f4484268a349e4d9f6178ef745460f1f8456b04d0dc7814844052d51eb5_big_uint255, + 0x2468669481610965d8439f60a66aa61fbc7b18e82b35aa4755873ec4db82174e_big_uint255, + 0x23b6ea9e4d1fde701c719c2afab1272ea22b172bf7afe0837364ad9a2f698bd4_big_uint255 }}, {{ - 0x412024b2e86e9d5e903a5fbda26200be47003e3b0dcc322480d3079850606cc0_cppui_modular255, - 0x1f64c17825c1ce9333d211d45a555b5ceaa4608a354ed3237db56225b3a9459b_cppui_modular255, - 0x0b66fa87587ab95d5d29dde50cd606a1bc2c45fd223c03d0693c88b13ae23039_cppui_modular255, - 0x3086c386026698e733e54e5e17f65cb26c17fe64e76f85902cc184d5dd8ef0cf_cppui_modular255, - 0x72036acd9ef575414d5437327d902da6396cc70c0bcffcef2a82b4c296b5ea93_cppui_modular255 + 0x412024b2e86e9d5e903a5fbda26200be47003e3b0dcc322480d3079850606cc0_big_uint255, + 0x1f64c17825c1ce9333d211d45a555b5ceaa4608a354ed3237db56225b3a9459b_big_uint255, + 0x0b66fa87587ab95d5d29dde50cd606a1bc2c45fd223c03d0693c88b13ae23039_big_uint255, + 0x3086c386026698e733e54e5e17f65cb26c17fe64e76f85902cc184d5dd8ef0cf_big_uint255, + 0x72036acd9ef575414d5437327d902da6396cc70c0bcffcef2a82b4c296b5ea93_big_uint255 }}, {{ - 0x53d89e4470b3ea1eb861717e47c08fda42f6e61fc08118b16645ae5e8fdd664f_cppui_modular255, - 0x4ebea65d1fc5c5167b1412ffcbf8900a8df2096c25d7011e6c74f500662465f8_cppui_modular255, - 0x5ee6e1e0312e78e2e67b246a95afdd79e2e7a5b9b0ef6ee36c3d1639f9736e65_cppui_modular255, - 0x1d770c0cc2c2231213624d58b7875b1715554f6100784bb2b545e405c7fcb94e_cppui_modular255, - 0x2ea5c9837af445988c480fc6a55b1e5640dbe38d5e8cf1ddd85bc42c3658d9ca_cppui_modular255 + 0x53d89e4470b3ea1eb861717e47c08fda42f6e61fc08118b16645ae5e8fdd664f_big_uint255, + 0x4ebea65d1fc5c5167b1412ffcbf8900a8df2096c25d7011e6c74f500662465f8_big_uint255, + 0x5ee6e1e0312e78e2e67b246a95afdd79e2e7a5b9b0ef6ee36c3d1639f9736e65_big_uint255, + 0x1d770c0cc2c2231213624d58b7875b1715554f6100784bb2b545e405c7fcb94e_big_uint255, + 0x2ea5c9837af445988c480fc6a55b1e5640dbe38d5e8cf1ddd85bc42c3658d9ca_big_uint255 }}, {{ - 0x6fb78d12c35235f738b1667749064d0066fa7cfe3a9624cb0944f16d37bc485e_cppui_modular255, - 0x35b75e89e794282cee1e66991ccfb2499dce4366b88d7be5f7b5775c12103a22_cppui_modular255, - 0x50e83b08162e7ccfe2d0f19aea4753ba83ef5c40572d6e904cfe2419ee9d901d_cppui_modular255, - 0x3fc5c93031cbcecf12d5831aaa6b2b3071657cd669f7b377b2fef4a7bfc9adf2_cppui_modular255, - 0x37895bdfe29a174b98cd4b49104e56ea09e41c7b50f9aa95b400b529c545f5b4_cppui_modular255 + 0x6fb78d12c35235f738b1667749064d0066fa7cfe3a9624cb0944f16d37bc485e_big_uint255, + 0x35b75e89e794282cee1e66991ccfb2499dce4366b88d7be5f7b5775c12103a22_big_uint255, + 0x50e83b08162e7ccfe2d0f19aea4753ba83ef5c40572d6e904cfe2419ee9d901d_big_uint255, + 0x3fc5c93031cbcecf12d5831aaa6b2b3071657cd669f7b377b2fef4a7bfc9adf2_big_uint255, + 0x37895bdfe29a174b98cd4b49104e56ea09e41c7b50f9aa95b400b529c545f5b4_big_uint255 }}, {{ - 0x695e405509a0981035ba77e27cdcf53f3bc15d20fe4e43a335aeb6406ae1837d_cppui_modular255, - 0x104985a48aa7e0a668d8cc7140c255ed1b8482ac5febbd3d7a1cca0e96cf0682_cppui_modular255, - 0x118220b30330f1954e7d94d40fb1043a1a79ca83e68e9ef590601a86a4a917a4_cppui_modular255, - 0x098b3be7845a63543c13d211efac076b94a9528d34cb355faf0ff7a0d5ee9991_cppui_modular255, - 0x69ca1313dcddd8c2f5c5c7ee93a1d2a94726c0c0bc4a303fcf83109b23bf3621_cppui_modular255 + 0x695e405509a0981035ba77e27cdcf53f3bc15d20fe4e43a335aeb6406ae1837d_big_uint255, + 0x104985a48aa7e0a668d8cc7140c255ed1b8482ac5febbd3d7a1cca0e96cf0682_big_uint255, + 0x118220b30330f1954e7d94d40fb1043a1a79ca83e68e9ef590601a86a4a917a4_big_uint255, + 0x098b3be7845a63543c13d211efac076b94a9528d34cb355faf0ff7a0d5ee9991_big_uint255, + 0x69ca1313dcddd8c2f5c5c7ee93a1d2a94726c0c0bc4a303fcf83109b23bf3621_big_uint255 }}, {{ - 0x570c1bd286b258b8bf11e8b85a2eb0c6dbfc2e4cdf01a0cde5464aa009b5bd43_cppui_modular255, - 0x4f2921de3696018e0d1ca7cdd5a4064ebf51845ab25b2d395b71c341ea8527da_cppui_modular255, - 0x19035c69cbaf0e0e7e02c5c524a8cc56de0e52d1936a9a10b7580f0c0555878f_cppui_modular255, - 0x2b8fdad2064a6f58d01e8c48d49bb25730780055829c1faead0430afcfbc5669_cppui_modular255, - 0x60ef9a74bbf8b98cb8248856492257f30c7520b3353a6fec9d90d48be46070ba_cppui_modular255 + 0x570c1bd286b258b8bf11e8b85a2eb0c6dbfc2e4cdf01a0cde5464aa009b5bd43_big_uint255, + 0x4f2921de3696018e0d1ca7cdd5a4064ebf51845ab25b2d395b71c341ea8527da_big_uint255, + 0x19035c69cbaf0e0e7e02c5c524a8cc56de0e52d1936a9a10b7580f0c0555878f_big_uint255, + 0x2b8fdad2064a6f58d01e8c48d49bb25730780055829c1faead0430afcfbc5669_big_uint255, + 0x60ef9a74bbf8b98cb8248856492257f30c7520b3353a6fec9d90d48be46070ba_big_uint255 }}, {{ - 0x4c9a6bc8284e783afd6c425f8cbdab82c0db3eac060a2dc00eca48ed6d1d052b_cppui_modular255, - 0x68e6d3a83ac8e60c92d2860ff7557e1fbe3b91c38fabbde8b28371dccce2a10b_cppui_modular255, - 0x56e0e39848046f0305d268b28aa753a41d48586e8579d5f95f12dba60e181d4c_cppui_modular255, - 0x5176824fd8c92fed23df24c382a9fdf86aeeecab0b6716bef53da57bd3f551eb_cppui_modular255, - 0x3aaf796b71041e8b2b494bca3b030f56a0c5663149093c8a179c0f3e24d0f718_cppui_modular255 + 0x4c9a6bc8284e783afd6c425f8cbdab82c0db3eac060a2dc00eca48ed6d1d052b_big_uint255, + 0x68e6d3a83ac8e60c92d2860ff7557e1fbe3b91c38fabbde8b28371dccce2a10b_big_uint255, + 0x56e0e39848046f0305d268b28aa753a41d48586e8579d5f95f12dba60e181d4c_big_uint255, + 0x5176824fd8c92fed23df24c382a9fdf86aeeecab0b6716bef53da57bd3f551eb_big_uint255, + 0x3aaf796b71041e8b2b494bca3b030f56a0c5663149093c8a179c0f3e24d0f718_big_uint255 }}, {{ - 0x101cd65865abc573f5382df3636f4d60bc669aaa70f09ba040d61ef8d09c5296_cppui_modular255, - 0x2581f83d616d932b438bfe0062082d4e1ed7d34b9a1cf63580199731d44a4b25_cppui_modular255, - 0x65d74f6d1320dd1dc9412547b130bc7ad03c4e80cd8a44c108f24ec7aa35489a_cppui_modular255, - 0x0d5cb6e19c9aac7d9f51f176ed42d008317a189dc4f6fc5c36fc6d451a035916_cppui_modular255, - 0x0e367d17423501e62db9fd487f72076f2d1de6dabd3c175341ce35f925c9941e_cppui_modular255 + 0x101cd65865abc573f5382df3636f4d60bc669aaa70f09ba040d61ef8d09c5296_big_uint255, + 0x2581f83d616d932b438bfe0062082d4e1ed7d34b9a1cf63580199731d44a4b25_big_uint255, + 0x65d74f6d1320dd1dc9412547b130bc7ad03c4e80cd8a44c108f24ec7aa35489a_big_uint255, + 0x0d5cb6e19c9aac7d9f51f176ed42d008317a189dc4f6fc5c36fc6d451a035916_big_uint255, + 0x0e367d17423501e62db9fd487f72076f2d1de6dabd3c175341ce35f925c9941e_big_uint255 }}, {{ - 0x3f3f101f7c8abd6bebe6b81dadf0ff5fa31ec7140e317909a8d2f94ce4adc890_cppui_modular255, - 0x6d5f212b5f4775095ab1d20fffd41dd73ab69b4ac60e9de11693f8e6bab88e67_cppui_modular255, - 0x6b11154212e86e185a4cb17dc2b9dc061f72bf9cc3df5f95f7b87f1101d09f1c_cppui_modular255, - 0x43f4cf980ff1a9101ca3c4601814f8de4124d108be2584ee9ffb9505188d35fd_cppui_modular255, - 0x5d9be9303e3a25e8fa1abb6f2a7e3250231091100f9d7311b050b52666ec8f02_cppui_modular255 + 0x3f3f101f7c8abd6bebe6b81dadf0ff5fa31ec7140e317909a8d2f94ce4adc890_big_uint255, + 0x6d5f212b5f4775095ab1d20fffd41dd73ab69b4ac60e9de11693f8e6bab88e67_big_uint255, + 0x6b11154212e86e185a4cb17dc2b9dc061f72bf9cc3df5f95f7b87f1101d09f1c_big_uint255, + 0x43f4cf980ff1a9101ca3c4601814f8de4124d108be2584ee9ffb9505188d35fd_big_uint255, + 0x5d9be9303e3a25e8fa1abb6f2a7e3250231091100f9d7311b050b52666ec8f02_big_uint255 }}, {{ - 0x1eb3b147885e1261d9034ca89a658817caef5ae629e1265cd32c6ef89ce704e9_cppui_modular255, - 0x1595d95dac2c4653d32b01c3fbc294b2922140e41b93c5e7f5702212226d7140_cppui_modular255, - 0x578b22f1f6d6eeb61507f0de1c817bb876b9cd079a18be9e99e2faa8e02618e2_cppui_modular255, - 0x4de38f88c5e8ba1890b3695c912ccacd63721298c9ba3d3668b44f2a13b40abd_cppui_modular255, - 0x0b9df0b81af072be21be9f08df336d3babe6ed5bfc199c73f2e97ccc73de80ae_cppui_modular255 + 0x1eb3b147885e1261d9034ca89a658817caef5ae629e1265cd32c6ef89ce704e9_big_uint255, + 0x1595d95dac2c4653d32b01c3fbc294b2922140e41b93c5e7f5702212226d7140_big_uint255, + 0x578b22f1f6d6eeb61507f0de1c817bb876b9cd079a18be9e99e2faa8e02618e2_big_uint255, + 0x4de38f88c5e8ba1890b3695c912ccacd63721298c9ba3d3668b44f2a13b40abd_big_uint255, + 0x0b9df0b81af072be21be9f08df336d3babe6ed5bfc199c73f2e97ccc73de80ae_big_uint255 }}, {{ - 0x2a1a8c6d54abda22954e90386d40cc7d5c4f54c592ec2c69a9574601e88b6559_cppui_modular255, - 0x5c5d96136cd1c4ae8fa1db9273083567345b407eb66f73a313ab8ad1a76cb157_cppui_modular255, - 0x1ade9e2b734e937fc2fa04ca445236faf24e6d47ad1a4baa3408102c0d1e6363_cppui_modular255, - 0x49354c394824998704e44eeb2ba6cb6fb431c334b648e6c87565e5fe133e8079_cppui_modular255, - 0x4ea258f019a8055902a696b85547652519b8d8d92de4bf18e2dbfa41264a9a6e_cppui_modular255 + 0x2a1a8c6d54abda22954e90386d40cc7d5c4f54c592ec2c69a9574601e88b6559_big_uint255, + 0x5c5d96136cd1c4ae8fa1db9273083567345b407eb66f73a313ab8ad1a76cb157_big_uint255, + 0x1ade9e2b734e937fc2fa04ca445236faf24e6d47ad1a4baa3408102c0d1e6363_big_uint255, + 0x49354c394824998704e44eeb2ba6cb6fb431c334b648e6c87565e5fe133e8079_big_uint255, + 0x4ea258f019a8055902a696b85547652519b8d8d92de4bf18e2dbfa41264a9a6e_big_uint255 }}, {{ - 0x008a5162adf5ebd8711fd8139418509e472abc02908084f2e494086232336808_cppui_modular255, - 0x6badee92872dcc00812a1cbc8081dd65ece0c7d3512af5a9df5fed7428557c81_cppui_modular255, - 0x324c64ef2693e966965246bb7bb8c04b57a21fbee9be8c4a10096222bc83cc51_cppui_modular255, - 0x3f14138eee87c93b0fbfe7efdcfa906525b0ce0f3b9a7431a492f8cb71514219_cppui_modular255, - 0x0db99fa5ce25d50f557415ad181f1399840574f678b2534cae8f774bc8703009_cppui_modular255 + 0x008a5162adf5ebd8711fd8139418509e472abc02908084f2e494086232336808_big_uint255, + 0x6badee92872dcc00812a1cbc8081dd65ece0c7d3512af5a9df5fed7428557c81_big_uint255, + 0x324c64ef2693e966965246bb7bb8c04b57a21fbee9be8c4a10096222bc83cc51_big_uint255, + 0x3f14138eee87c93b0fbfe7efdcfa906525b0ce0f3b9a7431a492f8cb71514219_big_uint255, + 0x0db99fa5ce25d50f557415ad181f1399840574f678b2534cae8f774bc8703009_big_uint255 }}, {{ - 0x23d984702589f3275211041a4bde9d79329967723ec029da095bdbe733e97381_cppui_modular255, - 0x6c5144ace155e976e287f1b95951194895bac2e5d54b07b62c3afe0eeafcbe39_cppui_modular255, - 0x57a3e420fe7e0638bfb4d0b2c6286c2946166a6eb17836571909da153c3204de_cppui_modular255, - 0x156621c4691a9240863577f10e29dc66a37d1b94e756869984c22d9f9d284726_cppui_modular255, - 0x1b1e774a7ec903650adffe34f6aa8201d356e41e0951d38fb83a89413d078e4b_cppui_modular255 + 0x23d984702589f3275211041a4bde9d79329967723ec029da095bdbe733e97381_big_uint255, + 0x6c5144ace155e976e287f1b95951194895bac2e5d54b07b62c3afe0eeafcbe39_big_uint255, + 0x57a3e420fe7e0638bfb4d0b2c6286c2946166a6eb17836571909da153c3204de_big_uint255, + 0x156621c4691a9240863577f10e29dc66a37d1b94e756869984c22d9f9d284726_big_uint255, + 0x1b1e774a7ec903650adffe34f6aa8201d356e41e0951d38fb83a89413d078e4b_big_uint255 }}, {{ - 0x514b940e5717c1ae53ea29b9a5a15998e294f69c1f553fe56124f66a16a78d53_cppui_modular255, - 0x16350c6898d04d355d966c1d7827eee076a1ebd90781639e120feab665391ea9_cppui_modular255, - 0x5b8b30d8c5ae46c4171d40478886c71c28fc86a3ae4a52ad1c05d8bcb9991b52_cppui_modular255, - 0x5226cdc8a40c229ea4fb08f2c10e0e24cd41f24ca5fa5b5ab73e7340f632e727_cppui_modular255, - 0x64383db664537c84a0a4030c3318f2f19cbeda46c70460035ad9d9240011639d_cppui_modular255 + 0x514b940e5717c1ae53ea29b9a5a15998e294f69c1f553fe56124f66a16a78d53_big_uint255, + 0x16350c6898d04d355d966c1d7827eee076a1ebd90781639e120feab665391ea9_big_uint255, + 0x5b8b30d8c5ae46c4171d40478886c71c28fc86a3ae4a52ad1c05d8bcb9991b52_big_uint255, + 0x5226cdc8a40c229ea4fb08f2c10e0e24cd41f24ca5fa5b5ab73e7340f632e727_big_uint255, + 0x64383db664537c84a0a4030c3318f2f19cbeda46c70460035ad9d9240011639d_big_uint255 }}, {{ - 0x61068a086ab73c87701b2642af25f6a430240936ba473a9a258cbf90db275277_cppui_modular255, - 0x5bf320a3e8a48c6a85e2dffc4740d1b381ec4aa0771d885dc16adee569403ad3_cppui_modular255, - 0x2603e0fd03264a856c1a7b8f1c5a22c3b98f4858c345e8e0a68e3f6424dd2dfb_cppui_modular255, - 0x100d221342e64ed7e4f1520be70f5b0134031f8a31b4790ebb8e0a89e50b42e2_cppui_modular255, - 0x0e61bad85ce909438ecc028b55085ec2cee0dd3ac5a7bcaa79d96186747a4606_cppui_modular255 + 0x61068a086ab73c87701b2642af25f6a430240936ba473a9a258cbf90db275277_big_uint255, + 0x5bf320a3e8a48c6a85e2dffc4740d1b381ec4aa0771d885dc16adee569403ad3_big_uint255, + 0x2603e0fd03264a856c1a7b8f1c5a22c3b98f4858c345e8e0a68e3f6424dd2dfb_big_uint255, + 0x100d221342e64ed7e4f1520be70f5b0134031f8a31b4790ebb8e0a89e50b42e2_big_uint255, + 0x0e61bad85ce909438ecc028b55085ec2cee0dd3ac5a7bcaa79d96186747a4606_big_uint255 }}, {{ - 0x570a2045ca0fa7288d7f372f36bd075c2517a9743c9baa46503c4396e1f316f4_cppui_modular255, - 0x1a64e108621e134020ea761d8f2c5bb42f24fab7641b095f1d164d1fc7b8be90_cppui_modular255, - 0x097f0f28fd299e3597ffd761e9ae8b0fa46526c9d78503dc9dd5f61df3a085d7_cppui_modular255, - 0x1d1063cb1be0f9f96aca5e5e39be9df69c96ff717c7d0c7cfe179cd6dce27505_cppui_modular255, - 0x3e30f5d48b3c2475b8f3ba08cba27caed32b1cf67f76ba9223803733e13ad863_cppui_modular255 + 0x570a2045ca0fa7288d7f372f36bd075c2517a9743c9baa46503c4396e1f316f4_big_uint255, + 0x1a64e108621e134020ea761d8f2c5bb42f24fab7641b095f1d164d1fc7b8be90_big_uint255, + 0x097f0f28fd299e3597ffd761e9ae8b0fa46526c9d78503dc9dd5f61df3a085d7_big_uint255, + 0x1d1063cb1be0f9f96aca5e5e39be9df69c96ff717c7d0c7cfe179cd6dce27505_big_uint255, + 0x3e30f5d48b3c2475b8f3ba08cba27caed32b1cf67f76ba9223803733e13ad863_big_uint255 }}, {{ - 0x2b30db4198cd832506017fa26430d204476113cc791ee110cf5586af5ce3824c_cppui_modular255, - 0x2b520e374519be203c022ec51dcf8d972dd01abfaea371de9b1532647fca7bfd_cppui_modular255, - 0x183b9a8e45fd480e822f8a97a8d2f127d0ef561914903229fbc5602bea46cb37_cppui_modular255, - 0x4e01e6edf11ef4c94fe8589f9622a70709330a12e68591f6ea7dda994117bdc8_cppui_modular255, - 0x52ee256fb3031d20fc299de7fabd0d4ef2e7f12539760dafb0fbc8560a40ee16_cppui_modular255 + 0x2b30db4198cd832506017fa26430d204476113cc791ee110cf5586af5ce3824c_big_uint255, + 0x2b520e374519be203c022ec51dcf8d972dd01abfaea371de9b1532647fca7bfd_big_uint255, + 0x183b9a8e45fd480e822f8a97a8d2f127d0ef561914903229fbc5602bea46cb37_big_uint255, + 0x4e01e6edf11ef4c94fe8589f9622a70709330a12e68591f6ea7dda994117bdc8_big_uint255, + 0x52ee256fb3031d20fc299de7fabd0d4ef2e7f12539760dafb0fbc8560a40ee16_big_uint255 }}, {{ - 0x327f5e141e4758d3d9a94c1628a57c817cf84fc0082b8dc098adbe84c1430979_cppui_modular255, - 0x3d0e12036899e5be167de13913901831a714ea5617b94de6de070ddc117bac71_cppui_modular255, - 0x1d9466d50efd1be3080d0aec4b81dd5cdf1ad4681e3ac04d08057f8fe49cdf0b_cppui_modular255, - 0x2360abd7728da2dcda3f495a9a4f0f2aaff1d2420b8f6a7fed6592e1463f3d00_cppui_modular255, - 0x23c1df4ddd6da863a1a2837e5222150278adfd4faf2fae7beaf64ed67a30736c_cppui_modular255 + 0x327f5e141e4758d3d9a94c1628a57c817cf84fc0082b8dc098adbe84c1430979_big_uint255, + 0x3d0e12036899e5be167de13913901831a714ea5617b94de6de070ddc117bac71_big_uint255, + 0x1d9466d50efd1be3080d0aec4b81dd5cdf1ad4681e3ac04d08057f8fe49cdf0b_big_uint255, + 0x2360abd7728da2dcda3f495a9a4f0f2aaff1d2420b8f6a7fed6592e1463f3d00_big_uint255, + 0x23c1df4ddd6da863a1a2837e5222150278adfd4faf2fae7beaf64ed67a30736c_big_uint255 }}, {{ - 0x1e98ec3b325a2a11738273f94516a9d56107f33062661e571342bc043764cf77_cppui_modular255, - 0x431de5d108f8f7109df3059abcc16ccbd17e18676ef64f8998498e4a3f331fde_cppui_modular255, - 0x550937f2bf0f1adb53f412d49ffd2886158703c375f87d059461f740d655e3d0_cppui_modular255, - 0x1341fa99aca4bfc0f511dc9a9bc57c1e7aeb41ebb3a9140f5f93af1b3aeeb582_cppui_modular255, - 0x706889448219016f970b32463a87e355b55ce0a34401dbfe4dd19fb3f93dec2e_cppui_modular255 + 0x1e98ec3b325a2a11738273f94516a9d56107f33062661e571342bc043764cf77_big_uint255, + 0x431de5d108f8f7109df3059abcc16ccbd17e18676ef64f8998498e4a3f331fde_big_uint255, + 0x550937f2bf0f1adb53f412d49ffd2886158703c375f87d059461f740d655e3d0_big_uint255, + 0x1341fa99aca4bfc0f511dc9a9bc57c1e7aeb41ebb3a9140f5f93af1b3aeeb582_big_uint255, + 0x706889448219016f970b32463a87e355b55ce0a34401dbfe4dd19fb3f93dec2e_big_uint255 }}, {{ - 0x28d6207e409ab1c6e8e196d9e363040070b6c6fc4685a5482f80ba38cb792dc5_cppui_modular255, - 0x6827087ecdf4e6bc7c396c59de859cbf08f92c361b5174e7f681ba0e72f83aaa_cppui_modular255, - 0x553e112dab620286f6cf2d31325b971a6516dc7776a6e5ef37bcb11d1785299d_cppui_modular255, - 0x40b44f7413d152f0d46460c54e9572fd91174b4b94a3595d709119e49925354c_cppui_modular255, - 0x4d324dd7dfdf2380ef9f6d3c4f4bc4c5f90dbbbf2f1fd923256913f33a45cc09_cppui_modular255 + 0x28d6207e409ab1c6e8e196d9e363040070b6c6fc4685a5482f80ba38cb792dc5_big_uint255, + 0x6827087ecdf4e6bc7c396c59de859cbf08f92c361b5174e7f681ba0e72f83aaa_big_uint255, + 0x553e112dab620286f6cf2d31325b971a6516dc7776a6e5ef37bcb11d1785299d_big_uint255, + 0x40b44f7413d152f0d46460c54e9572fd91174b4b94a3595d709119e49925354c_big_uint255, + 0x4d324dd7dfdf2380ef9f6d3c4f4bc4c5f90dbbbf2f1fd923256913f33a45cc09_big_uint255 }}, {{ - 0x609b3ae79dcdc8a8379a690394c95805d862bc31068b572ac126bbc082ebf8b7_cppui_modular255, - 0x33973520a1d9fb67048d64a22ad1b75b081d88c135a556dbc1b6a8479f75eaa7_cppui_modular255, - 0x3bcb7630fc45d34b78fd253d0b5275ecfa85ce48125ef7275c3a9205d01b85d8_cppui_modular255, - 0x1287f419048e81322d73bb9333e9b854e4ceac4b993b5342547263a486b42e34_cppui_modular255, - 0x2a2f5a5a689471d5ef46d669e449ccdc1d37256618722f08cc2c7e75d06fc277_cppui_modular255 + 0x609b3ae79dcdc8a8379a690394c95805d862bc31068b572ac126bbc082ebf8b7_big_uint255, + 0x33973520a1d9fb67048d64a22ad1b75b081d88c135a556dbc1b6a8479f75eaa7_big_uint255, + 0x3bcb7630fc45d34b78fd253d0b5275ecfa85ce48125ef7275c3a9205d01b85d8_big_uint255, + 0x1287f419048e81322d73bb9333e9b854e4ceac4b993b5342547263a486b42e34_big_uint255, + 0x2a2f5a5a689471d5ef46d669e449ccdc1d37256618722f08cc2c7e75d06fc277_big_uint255 }}, {{ - 0x38c913fdc729a28b7e354947f2b6449029976d442e349bc1c2acf3b0fa28bc92_cppui_modular255, - 0x421826bc690adac2b1f3637bc5e2333cb5e4bce3f9e8eac1a0a76df32a7ebff7_cppui_modular255, - 0x30ac2452c3a07bb924b6f7ed47cd6581499d532c5f90bf7fbc69556ff3bf6b09_cppui_modular255, - 0x40ce93f92b281e538efbe7cec9a22a9c005eef428dde3cdd46191630f563ba04_cppui_modular255, - 0x4fc3dd6720c87f672f7b6ff129e9b2a3236ec760a71f78aee84925d8e7616e97_cppui_modular255 + 0x38c913fdc729a28b7e354947f2b6449029976d442e349bc1c2acf3b0fa28bc92_big_uint255, + 0x421826bc690adac2b1f3637bc5e2333cb5e4bce3f9e8eac1a0a76df32a7ebff7_big_uint255, + 0x30ac2452c3a07bb924b6f7ed47cd6581499d532c5f90bf7fbc69556ff3bf6b09_big_uint255, + 0x40ce93f92b281e538efbe7cec9a22a9c005eef428dde3cdd46191630f563ba04_big_uint255, + 0x4fc3dd6720c87f672f7b6ff129e9b2a3236ec760a71f78aee84925d8e7616e97_big_uint255 }}, {{ - 0x3f3ba6f9f12ca6f934f92b17f4f3bd8ec261e5870610557f687bc734eadaa2d4_cppui_modular255, - 0x11d9eedda8d94fcbed859f5787fe20b7d4483cd319d8215530e2e316c89ee635_cppui_modular255, - 0x29981cff92be6c882c89feb59849d014fcd163699b5b4fdafca335552c4581d1_cppui_modular255, - 0x4c4fe2838d175c666c0d3f20d8dfefdcbcdacebca86e013d8ad29b6a0cf6bb79_cppui_modular255, - 0x630428a99469c03f9027d3c601864185d360d920771ea950732cf000b869a09a_cppui_modular255 + 0x3f3ba6f9f12ca6f934f92b17f4f3bd8ec261e5870610557f687bc734eadaa2d4_big_uint255, + 0x11d9eedda8d94fcbed859f5787fe20b7d4483cd319d8215530e2e316c89ee635_big_uint255, + 0x29981cff92be6c882c89feb59849d014fcd163699b5b4fdafca335552c4581d1_big_uint255, + 0x4c4fe2838d175c666c0d3f20d8dfefdcbcdacebca86e013d8ad29b6a0cf6bb79_big_uint255, + 0x630428a99469c03f9027d3c601864185d360d920771ea950732cf000b869a09a_big_uint255 }}, {{ - 0x46a776fbf1f36d7fdfa7a210cbb2ffa533540068c169e12f127cb14d9b587056_cppui_modular255, - 0x41a775960677e6c5fdf73c2a409b6e5c08e271cbb8c825f598a1801c84fde5ae_cppui_modular255, - 0x3086af931c41d791deb57f7f82dc511e4d349f42b52c3e0080097c4e44373dc8_cppui_modular255, - 0x155516da7a229b61392a39cc10a67112f512203cab706428f5fbbb3a9fd89fbd_cppui_modular255, - 0x41bdb1e32081ac55f42969658f78e308bdf50175b619c3ca8e3bfdf1ca984684_cppui_modular255 + 0x46a776fbf1f36d7fdfa7a210cbb2ffa533540068c169e12f127cb14d9b587056_big_uint255, + 0x41a775960677e6c5fdf73c2a409b6e5c08e271cbb8c825f598a1801c84fde5ae_big_uint255, + 0x3086af931c41d791deb57f7f82dc511e4d349f42b52c3e0080097c4e44373dc8_big_uint255, + 0x155516da7a229b61392a39cc10a67112f512203cab706428f5fbbb3a9fd89fbd_big_uint255, + 0x41bdb1e32081ac55f42969658f78e308bdf50175b619c3ca8e3bfdf1ca984684_big_uint255 }}, {{ - 0x01344d21e02b9c20d0d886a02167cf8502c3614ab909ae2fa7929b12d3e88519_cppui_modular255, - 0x733a3e92f74b793915beab78e87bd88a2227aa5406df54dc9a2c5e80a11f71e5_cppui_modular255, - 0x6a6cc17a31ba2fe1411cdebeb0809bf4ff0069b0d6ac681edf816ef4c59b6f64_cppui_modular255, - 0x0a77e0a85b06c1b152098066bd36933264641627192e3acdbf611bd002918820_cppui_modular255, - 0x3efb107ebed9b44672f679bffec0121fb509d19e97ae1bac3a86384e274c8c94_cppui_modular255 + 0x01344d21e02b9c20d0d886a02167cf8502c3614ab909ae2fa7929b12d3e88519_big_uint255, + 0x733a3e92f74b793915beab78e87bd88a2227aa5406df54dc9a2c5e80a11f71e5_big_uint255, + 0x6a6cc17a31ba2fe1411cdebeb0809bf4ff0069b0d6ac681edf816ef4c59b6f64_big_uint255, + 0x0a77e0a85b06c1b152098066bd36933264641627192e3acdbf611bd002918820_big_uint255, + 0x3efb107ebed9b44672f679bffec0121fb509d19e97ae1bac3a86384e274c8c94_big_uint255 }}, {{ - 0x3c0c4b441b0ea7ffe03c011db9aab4f86ec4849a0c783a3b7af21b05f5654482_cppui_modular255, - 0x28072c7bfa64f6cb97e4341cd18809ef5cd083374fbec26370c2b0ac02dcdafe_cppui_modular255, - 0x1962306e92b3c7295b2f7435ed8f67dda3a15ec6d8b0786d7727d071663ab22b_cppui_modular255, - 0x594dc533611f7f588838f894a26b1cd27432c63f9fbe03ef2d95d9a2d191ae3f_cppui_modular255, - 0x3e287fec491c686222949bc16c2308ade64e3a0a1dccdb25d64f9d5b94ead6e7_cppui_modular255 + 0x3c0c4b441b0ea7ffe03c011db9aab4f86ec4849a0c783a3b7af21b05f5654482_big_uint255, + 0x28072c7bfa64f6cb97e4341cd18809ef5cd083374fbec26370c2b0ac02dcdafe_big_uint255, + 0x1962306e92b3c7295b2f7435ed8f67dda3a15ec6d8b0786d7727d071663ab22b_big_uint255, + 0x594dc533611f7f588838f894a26b1cd27432c63f9fbe03ef2d95d9a2d191ae3f_big_uint255, + 0x3e287fec491c686222949bc16c2308ade64e3a0a1dccdb25d64f9d5b94ead6e7_big_uint255 }}, {{ - 0x2a95d47fb725b3978a7f90e601f2a9ab39074b35594e0bd133f9c5f34d765d42_cppui_modular255, - 0x29c603ecc031a9750a4d826e4abf3874bc76c76cc7ea306b3b9636f9653ff58c_cppui_modular255, - 0x0bbff6ba283aa42f01172bb82a2838e50941227abc3a2a5b1215b9a6d68de07c_cppui_modular255, - 0x73c7ee55aaa453d36ed857353bc227375244a7e554ceeea2018eb9cb39a51e74_cppui_modular255, - 0x3ff41b13d4cb3140ac8426322e88ff6f16895d88e6de3336cc88c693e0d38175_cppui_modular255 + 0x2a95d47fb725b3978a7f90e601f2a9ab39074b35594e0bd133f9c5f34d765d42_big_uint255, + 0x29c603ecc031a9750a4d826e4abf3874bc76c76cc7ea306b3b9636f9653ff58c_big_uint255, + 0x0bbff6ba283aa42f01172bb82a2838e50941227abc3a2a5b1215b9a6d68de07c_big_uint255, + 0x73c7ee55aaa453d36ed857353bc227375244a7e554ceeea2018eb9cb39a51e74_big_uint255, + 0x3ff41b13d4cb3140ac8426322e88ff6f16895d88e6de3336cc88c693e0d38175_big_uint255 }}, {{ - 0x03043688d4c991763362912a460be95b668fe9b1823fe90febfb3ffc7652ab24_cppui_modular255, - 0x33a29a0d56a7a64d36a67da2c691ff3eaf8ec7f0d78b357e7d2254c5b0e28f73_cppui_modular255, - 0x185db562fc75b43ba2710ad5e9114486b3e9712fe4c88f98b333c0c6211ac882_cppui_modular255, - 0x147b89a0cff9083b8952b3ef292c683f75d523f932711c6e1db3f28f5163b1fb_cppui_modular255, - 0x58ebc5d6b50bb1e4fdb4dcdfae1b69027978826f757ee4dc10d34f963f98fb59_cppui_modular255 + 0x03043688d4c991763362912a460be95b668fe9b1823fe90febfb3ffc7652ab24_big_uint255, + 0x33a29a0d56a7a64d36a67da2c691ff3eaf8ec7f0d78b357e7d2254c5b0e28f73_big_uint255, + 0x185db562fc75b43ba2710ad5e9114486b3e9712fe4c88f98b333c0c6211ac882_big_uint255, + 0x147b89a0cff9083b8952b3ef292c683f75d523f932711c6e1db3f28f5163b1fb_big_uint255, + 0x58ebc5d6b50bb1e4fdb4dcdfae1b69027978826f757ee4dc10d34f963f98fb59_big_uint255 }}, {{ - 0x1318791367815809badf1f3ed677e50cef92021c65549b2dabaa52c7b424f5a9_cppui_modular255, - 0x5bce78553694ba32f793c8d7f8d09ac63d0d7ada32b888d61b87849f3eda9557_cppui_modular255, - 0x026bebcc38f0b2804ed21f2e2b16af2194375ff2559fbc588a8962caf0b684c0_cppui_modular255, - 0x494bceff689f9885a3998de0eaaa7ac71a04522700f2e067efdbb037c6e53c66_cppui_modular255, - 0x03ebaf5f0602347c4ed2bdb9a86eb955cb5cd5378f7a6f369dccb69792de8bd2_cppui_modular255 + 0x1318791367815809badf1f3ed677e50cef92021c65549b2dabaa52c7b424f5a9_big_uint255, + 0x5bce78553694ba32f793c8d7f8d09ac63d0d7ada32b888d61b87849f3eda9557_big_uint255, + 0x026bebcc38f0b2804ed21f2e2b16af2194375ff2559fbc588a8962caf0b684c0_big_uint255, + 0x494bceff689f9885a3998de0eaaa7ac71a04522700f2e067efdbb037c6e53c66_big_uint255, + 0x03ebaf5f0602347c4ed2bdb9a86eb955cb5cd5378f7a6f369dccb69792de8bd2_big_uint255 }}, {{ - 0x3626d91f9f05334cb32d3a42eed03f7a553a0ed4cada2db08b45b548bd3b3655_cppui_modular255, - 0x63ee9e5c5cd3c83e93757ed93358ff0583d761e595b62f11df27bd4292ffb6e5_cppui_modular255, - 0x705dd80b2db4492c8b9984439b823681c4d9c8dcddcc04b9786a90051513a0e1_cppui_modular255, - 0x2636ac2ac559be8fe509641dbc67e55db47bb051e05ef06301020c9501f110f1_cppui_modular255, - 0x4781b8da302c7764951730e7ac0892de64537d94db2e19b84eec5a2d9539288e_cppui_modular255 + 0x3626d91f9f05334cb32d3a42eed03f7a553a0ed4cada2db08b45b548bd3b3655_big_uint255, + 0x63ee9e5c5cd3c83e93757ed93358ff0583d761e595b62f11df27bd4292ffb6e5_big_uint255, + 0x705dd80b2db4492c8b9984439b823681c4d9c8dcddcc04b9786a90051513a0e1_big_uint255, + 0x2636ac2ac559be8fe509641dbc67e55db47bb051e05ef06301020c9501f110f1_big_uint255, + 0x4781b8da302c7764951730e7ac0892de64537d94db2e19b84eec5a2d9539288e_big_uint255 }}, {{ - 0x197852b9a62e16779725f35cd8daf52ffbc8cc9c902c16923f2ff8873795ca86_cppui_modular255, - 0x1c3e49f33fd73480b280dba7744cf67e244449048f8fc84f7b6e452b4ede9a35_cppui_modular255, - 0x41d20cdc6a15c07fd9735c89b155412fcbb7bd3cdfc27abaad2a3a8a90e99743_cppui_modular255, - 0x0c3a7aaeb5f65d907944d7aa48c27648be3d0371bd97a9c060e8ef4f573521b8_cppui_modular255, - 0x52ea7c3f75cba07991674295c4e1462108401b9a103736623943d42e4fbe334e_cppui_modular255 + 0x197852b9a62e16779725f35cd8daf52ffbc8cc9c902c16923f2ff8873795ca86_big_uint255, + 0x1c3e49f33fd73480b280dba7744cf67e244449048f8fc84f7b6e452b4ede9a35_big_uint255, + 0x41d20cdc6a15c07fd9735c89b155412fcbb7bd3cdfc27abaad2a3a8a90e99743_big_uint255, + 0x0c3a7aaeb5f65d907944d7aa48c27648be3d0371bd97a9c060e8ef4f573521b8_big_uint255, + 0x52ea7c3f75cba07991674295c4e1462108401b9a103736623943d42e4fbe334e_big_uint255 }}, {{ - 0x1106537bf3150b442b0992ee517b69707c3042015e938f97a63d5c924e67f677_cppui_modular255, - 0x71de967042516a5b990ef18ae9956fab89f361b950e0639963017c237ee2a0cf_cppui_modular255, - 0x664a4487e02f7bfa07a1db6ab94a0d1ed0f9e74002bde9cfcbb65f6f74dbfca0_cppui_modular255, - 0x1023721fd7285260935b5a347f167ce721dd6ae5004c4debc68066bac8f2c467_cppui_modular255, - 0x2d52fbc95404515f5456c74b65186c860a89dcda8c84bf68fbf715f3d58fe3f2_cppui_modular255 + 0x1106537bf3150b442b0992ee517b69707c3042015e938f97a63d5c924e67f677_big_uint255, + 0x71de967042516a5b990ef18ae9956fab89f361b950e0639963017c237ee2a0cf_big_uint255, + 0x664a4487e02f7bfa07a1db6ab94a0d1ed0f9e74002bde9cfcbb65f6f74dbfca0_big_uint255, + 0x1023721fd7285260935b5a347f167ce721dd6ae5004c4debc68066bac8f2c467_big_uint255, + 0x2d52fbc95404515f5456c74b65186c860a89dcda8c84bf68fbf715f3d58fe3f2_big_uint255 }}, {{ - 0x6d987c9de419fb6e075441fd99606303e765d8696bcfe01a0d11aa0bd47c8601_cppui_modular255, - 0x422016ce4d744029b1440a288d7988e43d0f29d616c47f70322ff87cfbc69301_cppui_modular255, - 0x1f82afe8eb16611abc6600f7dc2a72c8e1d39643c189f3caa1ead08241a896c4_cppui_modular255, - 0x3bb8684cf815ae6d8a789e0e488c6fb2ac46883fe1cfeb8cfa6f3dbca0f954bd_cppui_modular255, - 0x3d5a1a6e571306fac431b098cdb3c4518f5a8fc436535766fe9e1bb8bda95d1d_cppui_modular255 + 0x6d987c9de419fb6e075441fd99606303e765d8696bcfe01a0d11aa0bd47c8601_big_uint255, + 0x422016ce4d744029b1440a288d7988e43d0f29d616c47f70322ff87cfbc69301_big_uint255, + 0x1f82afe8eb16611abc6600f7dc2a72c8e1d39643c189f3caa1ead08241a896c4_big_uint255, + 0x3bb8684cf815ae6d8a789e0e488c6fb2ac46883fe1cfeb8cfa6f3dbca0f954bd_big_uint255, + 0x3d5a1a6e571306fac431b098cdb3c4518f5a8fc436535766fe9e1bb8bda95d1d_big_uint255 }}, {{ - 0x5e36e175c5d7df42b86285f43b1e4c6bfbaca19f1019073d38d04de0d0647669_cppui_modular255, - 0x2c3b1b86ce90cb3fe74c5c99b20c3314e28e2f07ce8d932030caee4dfe5055f1_cppui_modular255, - 0x0bfba44d41c49044bce730d8af86fe0397fff85ec10288b847868d0e9834f754_cppui_modular255, - 0x0b79924b9e44662369c615cc8d7f36fe4a4b2a79045cee61c413eaf91d82e0c2_cppui_modular255, - 0x048a11ec75eb154b70223a40cc0db9104b13f6a4ca24e7b9707963ee6f9f74ef_cppui_modular255 + 0x5e36e175c5d7df42b86285f43b1e4c6bfbaca19f1019073d38d04de0d0647669_big_uint255, + 0x2c3b1b86ce90cb3fe74c5c99b20c3314e28e2f07ce8d932030caee4dfe5055f1_big_uint255, + 0x0bfba44d41c49044bce730d8af86fe0397fff85ec10288b847868d0e9834f754_big_uint255, + 0x0b79924b9e44662369c615cc8d7f36fe4a4b2a79045cee61c413eaf91d82e0c2_big_uint255, + 0x048a11ec75eb154b70223a40cc0db9104b13f6a4ca24e7b9707963ee6f9f74ef_big_uint255 }}, {{ - 0x6dd58a400d366014e46b0b9785ce9d78516813ed2eb329dc4531bfbd8e80eec0_cppui_modular255, - 0x112844b7c50e7e676b616e72539d5751dec5a063456921b6b16f9e930cc35ebc_cppui_modular255, - 0x217b616b50e729547af8ceef5008d1edf8d90bc9a7f3ce7c9bc71867e1c06471_cppui_modular255, - 0x3f9a0b8402ffa291bccbb46dcd2522dea790b35a8503da46717c63917dcb7b79_cppui_modular255, - 0x42a44fc114c0cad9badf62b911610bdc4b1a0ba9f656f66173a5476e63dfce86_cppui_modular255 + 0x6dd58a400d366014e46b0b9785ce9d78516813ed2eb329dc4531bfbd8e80eec0_big_uint255, + 0x112844b7c50e7e676b616e72539d5751dec5a063456921b6b16f9e930cc35ebc_big_uint255, + 0x217b616b50e729547af8ceef5008d1edf8d90bc9a7f3ce7c9bc71867e1c06471_big_uint255, + 0x3f9a0b8402ffa291bccbb46dcd2522dea790b35a8503da46717c63917dcb7b79_big_uint255, + 0x42a44fc114c0cad9badf62b911610bdc4b1a0ba9f656f66173a5476e63dfce86_big_uint255 }}, {{ - 0x294223972f4c7e9c9ebefebf059eb90f44479956f5337b12a2eb803e313e96cc_cppui_modular255, - 0x448101837874eb1bda92bc8a632cbf8f70a0664bbcf3a196609b14c53ee4dbcb_cppui_modular255, - 0x53a26c6e2b3df0b17faf6a259bc5531d3ae79da59eb8fc5f594e0b886d8d97be_cppui_modular255, - 0x207c7c32631a75fe8e0da895367176d24e32c5573ec91acf235f3c6c307807cd_cppui_modular255, - 0x20f955773b13b160d3575eb2380b466f7d38cb4a0e12a15d43d147645c3944ca_cppui_modular255 + 0x294223972f4c7e9c9ebefebf059eb90f44479956f5337b12a2eb803e313e96cc_big_uint255, + 0x448101837874eb1bda92bc8a632cbf8f70a0664bbcf3a196609b14c53ee4dbcb_big_uint255, + 0x53a26c6e2b3df0b17faf6a259bc5531d3ae79da59eb8fc5f594e0b886d8d97be_big_uint255, + 0x207c7c32631a75fe8e0da895367176d24e32c5573ec91acf235f3c6c307807cd_big_uint255, + 0x20f955773b13b160d3575eb2380b466f7d38cb4a0e12a15d43d147645c3944ca_big_uint255 }} }}; }; diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/poseidon_constants_generator.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/poseidon_constants_generator.hpp index 866e02bb15..b322363b48 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/poseidon_constants_generator.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/poseidon/poseidon_constants_generator.hpp @@ -9,11 +9,11 @@ #ifndef CRYPTO3_HASH_POSEIDON_LFSR_HPP #define CRYPTO3_HASH_POSEIDON_LFSR_HPP -#include - #include #include +#include + namespace nil { namespace crypto3 { namespace hashes { @@ -21,8 +21,6 @@ namespace nil { template class poseidon_constants; - using namespace boost::multiprecision; - // Uses Grain-LFSR stream cipher for constants generation. template class poseidon_constants_generator { @@ -50,7 +48,7 @@ namespace nil { typedef typename poseidon_constants_type::state_vector_type state_vector_type; constexpr static const std::size_t lfsr_state_bits = 80; - typedef number> lfsr_state_type; + typedef nil::crypto3::multiprecision::big_uint lfsr_state_type; typedef typename poseidon_constants_type::round_constants_type round_constants_type; @@ -95,13 +93,13 @@ namespace nil { // We use minus in the next line, as is done in Mina implementation. // Original implementation uses + instead, but it doesn't matter, // since X and Y are random elements. - new_mds_matrix[i][j] = (x[i] - y[i]).inversed(); + new_mds_matrix[i][j] = (x[i] - y[j]).inversed(); } if (!secure_MDS_found) break; } // Determinant of the matrix must not be 0. - if (new_mds_matrix.det() == 0) + if (det(new_mds_matrix) == 0) secure_MDS_found = false; // TODO(martun): check that mds has NO eignevalues. @@ -182,7 +180,7 @@ namespace nil { } static constexpr inline bool get_lfsr_state_bit(lfsr_state_type state, std::size_t pos) { - return bit_test(state, lfsr_state_bits - 1 - pos); + return state.bit_test(lfsr_state_bits - 1 - pos); } template diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_functions.hpp deleted file mode 100644 index 00ce3a3802..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_functions.hpp +++ /dev/null @@ -1,94 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2022 Mikhail Komarov -// Copyright (c) 2022 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef REINFORCED_CONCRETE_FUNCTIONS_HPP -#define REINFORCED_CONCRETE_FUNCTIONS_HPP - -#include "reinforced_concrete_policy.hpp" -#include "reinforced_concrete_operators.hpp" -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct reinforced_concrete_functions{ - typedef reinforced_concrete_policy policy_type; - typedef typename policy_type::element_type element_type; - typedef typename policy_type::integral_type integral_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - constexpr static const std::size_t block_words = policy_type::block_words; - constexpr static const std::size_t block_bits = policy_type::block_bits; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t state_words = policy_type::state_words; - constexpr static const std::size_t state_bits = policy_type::state_bits; - typedef typename policy_type::state_type state_type; - - constexpr static const std::size_t rounds = policy_type::part_rounds; - - typedef reinforced_concrete_operators reinforced_concrete_operators_type; - typedef typename reinforced_concrete_operators_type::state_vector_type state_vector_type; - - static reinforced_concrete_operators_type get_rc_operators_type(){ - return reinforced_concrete_operators_type(); - } - - static inline const reinforced_concrete_operators_type rc_operators = get_rc_operators_type(); - - static inline void permute(state_type &A){ - state_vector_type A_vector; - std::copy(A.begin(), A.end(), A_vector.begin()); - - rc_operators.concrete(A_vector, 0); - for(int i = 1; i <= rounds; ++i){ - rc_operators.bricks(A_vector); - rc_operators.concrete(A_vector, i); - } - - rc_operators.Bars(A_vector); - rc_operators.concrete(A_vector, rounds + 1); - for(int i = rounds + 2; i < rounds + rounds + 2; ++i){ - rc_operators.bricks(A_vector); - rc_operators.concrete(A_vector, i); - } - - std::copy(A_vector.begin(), A_vector.end(), A.begin()); - } - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - - -#endif // REINFORCED_CONCRETE_FUNCTIONS_HPP \ No newline at end of file diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_lfsr.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_lfsr.hpp deleted file mode 100644 index 44755f70cb..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_lfsr.hpp +++ /dev/null @@ -1,139 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2022 Mikhail Komarov -// Copyright (c) 2022 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_REINFORCED_CONCRETE_LFSR_HPP -#define CRYPTO3_HASH_REINFORCED_CONCRETE_LFSR_HPP - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - using namespace boost::multiprecision; - - // round constants generating is taken from poseidon_lsfr - template - struct reinforced_concrete_lfsr { - typedef reinforced_concrete_policy policy_type; - constexpr static const std::size_t state_words = policy_type::state_words; - constexpr static const std::size_t word_bits = policy_type::word_bits; - constexpr static const std::size_t part_rounds = policy_type::part_rounds; - constexpr static const std::size_t full_rounds = 2 * (part_rounds + 1); - - typedef typename FieldType::value_type element_type; - typedef typename FieldType::integral_type integral_type; - constexpr static const integral_type modulus = FieldType::modulus; - - constexpr static const std::size_t lfsr_state_bits = 80; - typedef number> lfsr_state_type; - - constexpr static const std::size_t constants_number = full_rounds * state_words; - typedef algebra::vector round_constants_type; - - constexpr void generate_round_constants() { - integral_type constant = 0; - lfsr_state_type lfsr_state = get_lfsr_init_state(); - - for (std::size_t i = 0; i < constants_number; i++) { - while (true) { - constant = 0; - for (std::size_t j = 0; j < word_bits; j++) { - lfsr_state = update_lfsr_state(lfsr_state); - constant = set_new_bit( - constant, get_lfsr_state_bit(lfsr_state, lfsr_state_bits - 1)); - } - if (constant < modulus) { - round_constants[i] = element_type(constant); - break; - } - } - } - } - - constexpr lfsr_state_type get_lfsr_init_state() { - lfsr_state_type state = 0; - int i = 0; - for (i = 1; i >= 0; i--) - state = set_new_bit(state, (1U >> i) & 1U); // field - as in filecoin - for (i = 3; i >= 0; i--) - state = set_new_bit(state, (1U >> i) & 1U); // s-box - as in filecoin - for (i = 11; i >= 0; i--) - state = set_new_bit(state, (word_bits >> i) & 1U); - for (i = 11; i >= 0; i--) - state = set_new_bit(state, (state_words >> i) & 1U); - for (i = 9; i >= 0; i--) - state = set_new_bit(state, (full_rounds >> i) & 1U); - for (i = 9; i >= 0; i--) - state = set_new_bit(state, (part_rounds >> i) & 1U); - for (i = 29; i >= 0; i--) - state = set_new_bit(state, 1); - // idling - for (i = 0; i < 160; i++) - state = update_lfsr_state_raw(state); - return state; - } - - constexpr lfsr_state_type update_lfsr_state(lfsr_state_type state) { - while (true) { - state = update_lfsr_state_raw(state); - if (get_lfsr_state_bit(state, lfsr_state_bits - 1)) - break; - else - state = update_lfsr_state_raw(state); - } - return update_lfsr_state_raw(state); - } - - constexpr inline lfsr_state_type update_lfsr_state_raw(lfsr_state_type state) { - bool new_bit = get_lfsr_state_bit(state, 0) != get_lfsr_state_bit(state, 13) != - get_lfsr_state_bit(state, 23) != get_lfsr_state_bit(state, 38) != - get_lfsr_state_bit(state, 51) != get_lfsr_state_bit(state, 62); - return set_new_bit(state, new_bit); - } - - constexpr inline bool get_lfsr_state_bit(lfsr_state_type state, std::size_t pos) { - return bit_test(state, lfsr_state_bits - 1 - pos); - } - - template - constexpr inline T set_new_bit(T var, bool new_bit) { - return (var << 1) | (new_bit ? 1 : 0); - } - - constexpr reinforced_concrete_lfsr() : round_constants() { - generate_round_constants(); - } - - round_constants_type round_constants; - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_REINFORCED_CONCRETE_LFSR_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_operators.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_operators.hpp deleted file mode 100644 index 830bab3303..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_operators.hpp +++ /dev/null @@ -1,154 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2022 Mikhail Komarov -// Copyright (c) 2022 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef REINFORCED_CONCRETE_OPERATORS_HPP -#define REINFORCED_CONCRETE_OPERATORS_HPP - -#include "reinforced_concrete_policy.hpp" -#include -#include -#include -#include -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct reinforced_concrete_operators { - typedef reinforced_concrete_policy policy_type; - - typedef typename policy_type::element_type element_type; - typedef typename element_type::integral_type integral_type; - - typedef typename policy_type::bucket_type bucket_type; - constexpr static const std::size_t bucket_size = policy_type::bucket_size; - constexpr static const bucket_type bucket = policy_type::bucket; - constexpr static const element_type p_min = policy_type::p_min; - - constexpr static const std::size_t state_words = policy_type::state_words; - typedef algebra::vector state_vector_type; - typedef algebra::matrix mds_matrix_type; - - typedef reinforced_concrete_lfsr lsfr_policy; - typedef typename lsfr_policy::round_constants_type round_constants_type; - - mds_matrix_type mds_matrix; - lsfr_policy lsfr; - - reinforced_concrete_operators() : mds_matrix(generate_mds_matrix()), lsfr(lsfr_policy()) { - } - - static inline mds_matrix_type generate_mds_matrix() { - state_vector_type circulant = {element_type(integral_type(2)), element_type(integral_type(1)), - element_type(integral_type(1))}; - mds_matrix_type new_matrix; - - for (int i = 0; i < state_words; ++i) { - for (int j = 0; j < state_words; ++j) { - new_matrix[i][j] = circulant[(j + i) % state_words]; - } - } - return new_matrix; - } - - inline void concrete(state_vector_type &A, std::size_t round) const { - A = algebra::matvectmul(mds_matrix, A); - - for (int i = 0; i < state_words; ++i) { - A[i] += lsfr.round_constants[round * state_words + i]; - } - } - - static inline void bricks(state_vector_type &A) { - element_type A_0 = A[0]; - element_type A_1 = A[1]; - A[0] = A[0].pow(policy_type::d); - A[1] = A[1] * (A_0 * A_0 + policy_type::alphas[0] * A_0 + policy_type::betas[0]); - A[2] = A[2] * (A_1 * A_1 + policy_type::alphas[1] * A_1 + policy_type::betas[1]); - } - - static inline bucket_type decompose(element_type &element) { - bucket_type x_bucket; - element_type product = element_type(integral_type(1)); - element_type sum = element_type(integral_type(0)); - - for (int i = bucket_size - 1; i >= 0; --i) { - - x_bucket[i] = element_type(((element - sum) * product.inversed()).data % bucket[i].data); - sum += x_bucket[i] * product; - product *= bucket[i]; - } - return x_bucket; - } - - static inline element_type compose(bucket_type &y_bucket) { - element_type comp(integral_type(0)); - element_type product(integral_type(1)); - - for (int i = bucket_size - 1; i >= 0; --i) { - comp += y_bucket[i] * product; - product *= bucket[i]; - } - return comp; - } - - static inline element_type SBox_inverse(element_type &element) { - return element.inversed(); - } - - static inline element_type SBox_MiMC(element_type &element) { - return element.pow(3); - } - - static inline element_type f(element_type &element) { - return element == 0 ? element_type(integral_type(0)) : SBox_inverse(element); - } - - static inline element_type S(element_type &element) { - return element < p_min ? f(element) : element; - } - - static inline void Bars(state_vector_type &A) { - for (int i = 0; i < state_words; ++i) { - - bucket_type temp_bucket = decompose(A[i]); - for (auto &a : temp_bucket) { - a = S(a); - } - A[i] = compose(temp_bucket); - } - } - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // REINFORCED_CONCRETE_OPERATORS_HPP \ No newline at end of file diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_policy.hpp deleted file mode 100644 index ca273aff3b..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/reinforced_concrete/reinforced_concrete_policy.hpp +++ /dev/null @@ -1,98 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2022 Mikhail Komarov -// Copyright (c) 2022 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_REINFORCED_CONCRETE_POLICY_HPP -#define CRYPTO3_HASH_REINFORCED_CONCRETE_POLICY_HPP - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct base_reinforced_concrete_policy { - typedef FieldType field_type; - typedef typename field_type::value_type element_type; - typedef typename element_type::integral_type integral_type; - constexpr static const std::size_t word_bits = field_type::modulus_bits; - typedef element_type word_type; - - constexpr static const std::size_t digest_bits = field_type::modulus_bits; - typedef element_type digest_type; - - constexpr static const std::size_t block_words = 2; - constexpr static const std::size_t block_bits = block_words * field_type::modulus_bits; - typedef std::array block_type; - - constexpr static const std::size_t state_words = block_words + 1; - constexpr static const std::size_t state_bits = state_words * field_type::modulus_bits; - typedef std::array state_type; - - constexpr static const std::size_t part_rounds = 3; - constexpr static const std::size_t constant_ab_size = 2; - typedef std::array alphas_type; - typedef std::array betas_type; - }; - - template - struct reinforced_concrete_policy; - - template<> - struct reinforced_concrete_policy> - : public base_reinforced_concrete_policy> { - constexpr static const std::size_t bucket_size = 27; - typedef std::array bucket_type; - - constexpr static const alphas_type alphas = {element_type(integral_type(1ul)), - element_type(integral_type(3ul))}; - constexpr static const betas_type betas = {element_type(integral_type(2ul)), - element_type(integral_type(4ul))}; - constexpr static const std::size_t d = 5; - constexpr static const bucket_type bucket = { - element_type(integral_type(693)), element_type(integral_type(696)), - element_type(integral_type(694)), element_type(integral_type(668)), - element_type(integral_type(679)), element_type(integral_type(695)), - element_type(integral_type(691)), element_type(integral_type(693)), - element_type(integral_type(700)), element_type(integral_type(688)), - element_type(integral_type(700)), element_type(integral_type(694)), - element_type(integral_type(701)), element_type(integral_type(694)), - element_type(integral_type(699)), element_type(integral_type(701)), - element_type(integral_type(701)), element_type(integral_type(701)), - element_type(integral_type(695)), element_type(integral_type(698)), - element_type(integral_type(697)), element_type(integral_type(703)), - element_type(integral_type(702)), element_type(integral_type(691)), - element_type(integral_type(688)), element_type(integral_type(703)), - element_type(integral_type(679))}; - constexpr static const element_type p_min = element_type(integral_type(659ul)); - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_REINFORCED_CONCRETE_POLICY_HPP \ No newline at end of file diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/ripemd/ripemd_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/ripemd/ripemd_functions.hpp deleted file mode 100644 index 1cdbe5d36d..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/ripemd/ripemd_functions.hpp +++ /dev/null @@ -1,97 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_RIPEMD_FUNCTIONS_HPP -#define CRYPTO3_RIPEMD_FUNCTIONS_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct ripemd_functions : public ripemd_policy { - typedef ripemd_policy policy_type; - - typedef typename policy_type::word_type word_type; - - struct f1 { - inline word_type operator()(word_type x, word_type y, word_type z) const { - return x ^ y ^ z; - } - }; - - struct f2 { - inline word_type operator()(word_type x, word_type y, word_type z) const { - return (x & y) | (~x & z); - } - }; - - struct f3 { - inline word_type operator()(word_type x, word_type y, word_type z) const { - return (x | ~y) ^ z; - } - }; - - struct f4 { - inline word_type operator()(word_type x, word_type y, word_type z) const { - return (x & z) | (y & ~z); - } - }; - - struct f5 { - inline word_type operator()(word_type x, word_type y, word_type z) const { - return x ^ (y | ~z); - } - }; - - template - inline static void transform(word_type &a, word_type &b, word_type &c, word_type &d, word_type x, - word_type k, word_type s) { - word_type T = policy_type::rotl(a + F()(b, c, d) + x + k, s); - a = d; - d = c; - c = b; - b = T; - } - - template - inline static void transform(word_type &a, word_type &b, word_type &c, word_type &d, word_type &e, - word_type x, word_type k, word_type s) { - word_type T = policy_type::rotl(a + Functor()(b, c, d) + x + k, s) + e; - a = e; - e = d; - d = policy_type::template rotl<10>(c); - c = b; - b = T; - } - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_RIPEMD_FUNCTIONS_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/ripemd/ripemd_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/ripemd/ripemd_policy.hpp deleted file mode 100644 index 1bcc6adca3..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/ripemd/ripemd_policy.hpp +++ /dev/null @@ -1,196 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_DETAIL_RIPEMD_POLICY_HPP -#define CRYPTO3_HASH_DETAIL_RIPEMD_POLICY_HPP - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct basic_ripemd_policy : public ::nil::crypto3::detail::basic_functions<32> { - - constexpr static const std::size_t block_bits = 512; - constexpr static const std::size_t block_words = block_bits / word_bits; - typedef std::array block_type; - - constexpr static const std::size_t length_bits = word_bits * 2; - - typedef typename stream_endian::little_octet_big_bit digest_endian; - - constexpr static const std::size_t digest_bits = DigestBits; - typedef static_digest digest_type; - - constexpr static const std::uint8_t ieee1363_hash_id = 0x00; - - constexpr static const std::size_t pkcs_id_size = 15; - constexpr static const std::size_t pkcs_id_bits = pkcs_id_size * CHAR_BIT; - typedef std::array pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = {0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x24, - 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14}; - - constexpr static const std::size_t key_indexes_size = 80; - typedef std::array key_indexes_type; - - // offsets into X array - constexpr static const key_indexes_type r1 = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, - 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, - 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, - 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13}; - - constexpr static const key_indexes_type r2 = { - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, - 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, - 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, - 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11}; - - // values for rotate left - constexpr static const key_indexes_type s1 = { - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, - 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, - 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, - 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6}; - - constexpr static const key_indexes_type s2 = { - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, - 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, - 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, - 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11}; - }; - - template - constexpr typename basic_ripemd_policy::key_indexes_type const - basic_ripemd_policy::r1; - - template - constexpr typename basic_ripemd_policy::key_indexes_type const - basic_ripemd_policy::r2; - - template - constexpr typename basic_ripemd_policy::key_indexes_type const - basic_ripemd_policy::s1; - - template - constexpr typename basic_ripemd_policy::key_indexes_type const - basic_ripemd_policy::s2; - - template - constexpr typename basic_ripemd_policy::pkcs_id_type const - basic_ripemd_policy::pkcs_id; - - template - struct ripemd_policy : public basic_ripemd_policy { }; - - template<> - struct ripemd_policy<128> : public basic_ripemd_policy<128> { - constexpr static const std::size_t word_bits = basic_ripemd_policy<128>::word_bits; - typedef typename basic_ripemd_policy<128>::word_type word_type; - - constexpr static const std::size_t state_words = 4; - constexpr static const std::size_t state_bits = state_words * word_bits; - typedef std::array state_type; - - constexpr static const std::uint8_t ieee1363_hash_id = 0x00; - - struct iv_generator { - state_type const &operator()() const { - constexpr static const state_type H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476}}; - return H0; - } - }; - }; - - template<> - struct ripemd_policy<160> : public basic_ripemd_policy<160> { - constexpr static const std::size_t word_bits = basic_ripemd_policy<160>::word_bits; - typedef typename basic_ripemd_policy<160>::word_type word_type; - - constexpr static const std::size_t state_words = 5; - constexpr static const std::size_t state_bits = state_words * word_bits; - typedef std::array state_type; - - constexpr static const std::uint8_t ieee1363_hash_id = 0x31; - - struct iv_generator { - state_type const &operator()() const { - static state_type const H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}}; - return H0; - } - }; - }; - - template<> - struct ripemd_policy<256> : public basic_ripemd_policy<256> { - constexpr static const std::size_t word_bits = basic_ripemd_policy<256>::word_bits; - typedef typename basic_ripemd_policy<256>::word_type word_type; - - constexpr static const std::size_t state_words = 8; - constexpr static const std::size_t state_bits = state_words * word_bits; - typedef std::array state_type; - - constexpr static const std::uint8_t ieee1363_hash_id = 0x00; - - struct iv_generator { - state_type const &operator()() const { - static state_type const H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0x76543210, - 0xfedcba98, 0x89abcdef, 0x01234567}}; - return H0; - } - }; - }; - - template<> - struct ripemd_policy<320> : public basic_ripemd_policy<320> { - constexpr static const std::size_t word_bits = basic_ripemd_policy<320>::word_bits; - typedef typename basic_ripemd_policy<320>::word_type word_type; - - constexpr static const std::size_t state_words = 10; - constexpr static const std::size_t state_bits = state_words * word_bits; - typedef std::array state_type; - - constexpr static const std::uint8_t ieee1363_hash_id = 0x00; - - struct iv_generator { - state_type const &operator()() const { - static state_type const H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0, - 0x76543210, 0xfedcba98, 0x89abcdef, 0x01234567, 0x3c2d1e0f}}; - return H0; - } - }; - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_RIPEMD_POLICY_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha/sha_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha/sha_policy.hpp deleted file mode 100644 index 20c8341f51..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha/sha_policy.hpp +++ /dev/null @@ -1,79 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_DETAIL_SHA_POLICY_HPP -#define CRYPTO3_HASH_DETAIL_SHA_POLICY_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - struct sha_policy { - typedef block::shacal0 block_cipher_type; - - constexpr static const std::size_t word_bits = block_cipher_type::word_bits; - typedef typename block_cipher_type::word_type word_type; - - constexpr static const std::size_t state_bits = block_cipher_type::block_bits; - constexpr static const std::size_t state_words = block_cipher_type::block_words; - typedef typename block_cipher_type::block_type state_type; - - constexpr static const std::size_t block_bits = block_cipher_type::key_bits; - constexpr static const std::size_t block_words = block_cipher_type::key_words; - typedef typename block_cipher_type::key_type block_type; - - constexpr static const std::size_t length_bits = word_bits * 2; - - typedef typename stream_endian::big_octet_big_bit digest_endian; - - constexpr static const std::size_t digest_bits = 160; - constexpr static const std::uint8_t ieee1363_hash_id = 0x33; - - typedef static_digest digest_type; - typedef std::array pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = {0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, - 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14}; - - struct iv_generator { - state_type const &operator()() const { - // First 4 words are the same as MD4 - static state_type const H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}}; - return H0; - } - }; - }; - - typedef sha_policy sha0_policy; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_SHA_POLICY_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha1/sha1_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha1/sha1_policy.hpp deleted file mode 100644 index 2de9fda80b..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha1/sha1_policy.hpp +++ /dev/null @@ -1,78 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2019 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_DETAIL_SHA1_POLICY_HPP -#define CRYPTO3_HASH_DETAIL_SHA1_POLICY_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - struct sha1_policy { - typedef block::shacal1 block_cipher_type; - - constexpr static const std::size_t word_bits = block_cipher_type::word_bits; - typedef typename block_cipher_type::word_type word_type; - - constexpr static const std::size_t state_bits = block_cipher_type::block_bits; - constexpr static const std::size_t state_words = block_cipher_type::block_words; - typedef typename block_cipher_type::block_type state_type; - - constexpr static const std::size_t block_bits = block_cipher_type::key_bits; - constexpr static const std::size_t block_words = block_cipher_type::key_words; - typedef typename block_cipher_type::key_type block_type; - - constexpr static const std::size_t length_bits = word_bits * 2; - - typedef typename stream_endian::big_octet_big_bit digest_endian; - - constexpr static const std::size_t digest_bits = 160; - constexpr static const std::uint8_t ieee1363_hash_id = 0x33; - - typedef static_digest digest_type; - typedef std::array pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = {0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, - 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14}; - - struct iv_generator { - state_type const &operator()() const { - // First 4 words are the same as MD4 - static state_type const H0 = {{0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}}; - return H0; - } - }; - }; - - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_DETAIL_SHA1_POLICY_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha2/sha2_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha2/sha2_policy.hpp index cb03a3ed5f..28cb1a5290 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha2/sha2_policy.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/sha2/sha2_policy.hpp @@ -29,7 +29,7 @@ #include #include -#include +#include #include diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal2_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal2_policy.hpp similarity index 99% rename from crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal2_policy.hpp rename to crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal2_policy.hpp index b7794c2d0e..41658f0135 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal2_policy.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal2_policy.hpp @@ -27,7 +27,7 @@ #include -#include +#include #include diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal_functions.hpp similarity index 100% rename from crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal_functions.hpp rename to crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal_functions.hpp diff --git a/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal_policy.hpp similarity index 98% rename from crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal_policy.hpp rename to crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal_policy.hpp index 40819df300..6d3b55062c 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/detail/shacal/shacal_policy.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/detail/shacal/shacal_policy.hpp @@ -27,7 +27,7 @@ #include -#include +#include namespace nil { namespace crypto3 { diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/basic_tiger_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/basic_tiger_policy.hpp deleted file mode 100644 index a8397afd09..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/basic_tiger_policy.hpp +++ /dev/null @@ -1,338 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Pavel Kharitonov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_BASIC_TIGER_POLICY_HPP -#define CRYPTO3_BASIC_TIGER_POLICY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct basic_tiger_policy : public ::nil::crypto3::detail::basic_functions<64> { - typedef ::nil::crypto3::detail::basic_functions<64> policy_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = 512; - constexpr static const std::size_t block_words = block_bits / word_bits; - typedef std::array block_type; - - constexpr static const std::size_t state_bits = DigestBits; - constexpr static const std::size_t state_words = state_bits / word_bits; - typedef std::array state_type; - - constexpr static const std::size_t substitution_words = 256; - typedef std::array substitution_type; - - constexpr static const substitution_type sbox1 = { - 0x02AAB17CF7E90C5E, 0xAC424B03E243A8EC, 0x72CD5BE30DD5FCD3, 0x6D019B93F6F97F3A, - 0xCD9978FFD21F9193, 0x7573A1C9708029E2, 0xB164326B922A83C3, 0x46883EEE04915870, - 0xEAACE3057103ECE6, 0xC54169B808A3535C, 0x4CE754918DDEC47C, 0x0AA2F4DFDC0DF40C, - 0x10B76F18A74DBEFA, 0xC6CCB6235AD1AB6A, 0x13726121572FE2FF, 0x1A488C6F199D921E, - 0x4BC9F9F4DA0007CA, 0x26F5E6F6E85241C7, 0x859079DBEA5947B6, 0x4F1885C5C99E8C92, - 0xD78E761EA96F864B, 0x8E36428C52B5C17D, 0x69CF6827373063C1, 0xB607C93D9BB4C56E, - 0x7D820E760E76B5EA, 0x645C9CC6F07FDC42, 0xBF38A078243342E0, 0x5F6B343C9D2E7D04, - 0xF2C28AEB600B0EC6, 0x6C0ED85F7254BCAC, 0x71592281A4DB4FE5, 0x1967FA69CE0FED9F, - 0xFD5293F8B96545DB, 0xC879E9D7F2A7600B, 0x860248920193194E, 0xA4F9533B2D9CC0B3, - 0x9053836C15957613, 0xDB6DCF8AFC357BF1, 0x18BEEA7A7A370F57, 0x037117CA50B99066, - 0x6AB30A9774424A35, 0xF4E92F02E325249B, 0x7739DB07061CCAE1, 0xD8F3B49CECA42A05, - 0xBD56BE3F51382F73, 0x45FAED5843B0BB28, 0x1C813D5C11BF1F83, 0x8AF0E4B6D75FA169, - 0x33EE18A487AD9999, 0x3C26E8EAB1C94410, 0xB510102BC0A822F9, 0x141EEF310CE6123B, - 0xFC65B90059DDB154, 0xE0158640C5E0E607, 0x884E079826C3A3CF, 0x930D0D9523C535FD, - 0x35638D754E9A2B00, 0x4085FCCF40469DD5, 0xC4B17AD28BE23A4C, 0xCAB2F0FC6A3E6A2E, - 0x2860971A6B943FCD, 0x3DDE6EE212E30446, 0x6222F32AE01765AE, 0x5D550BB5478308FE, - 0xA9EFA98DA0EDA22A, 0xC351A71686C40DA7, 0x1105586D9C867C84, 0xDCFFEE85FDA22853, - 0xCCFBD0262C5EEF76, 0xBAF294CB8990D201, 0xE69464F52AFAD975, 0x94B013AFDF133E14, - 0x06A7D1A32823C958, 0x6F95FE5130F61119, 0xD92AB34E462C06C0, 0xED7BDE33887C71D2, - 0x79746D6E6518393E, 0x5BA419385D713329, 0x7C1BA6B948A97564, 0x31987C197BFDAC67, - 0xDE6C23C44B053D02, 0x581C49FED002D64D, 0xDD474D6338261571, 0xAA4546C3E473D062, - 0x928FCE349455F860, 0x48161BBACAAB94D9, 0x63912430770E6F68, 0x6EC8A5E602C6641C, - 0x87282515337DDD2B, 0x2CDA6B42034B701B, 0xB03D37C181CB096D, 0xE108438266C71C6F, - 0x2B3180C7EB51B255, 0xDF92B82F96C08BBC, 0x5C68C8C0A632F3BA, 0x5504CC861C3D0556, - 0xABBFA4E55FB26B8F, 0x41848B0AB3BACEB4, 0xB334A273AA445D32, 0xBCA696F0A85AD881, - 0x24F6EC65B528D56C, 0x0CE1512E90F4524A, 0x4E9DD79D5506D35A, 0x258905FAC6CE9779, - 0x2019295B3E109B33, 0xF8A9478B73A054CC, 0x2924F2F934417EB0, 0x3993357D536D1BC4, - 0x38A81AC21DB6FF8B, 0x47C4FBF17D6016BF, 0x1E0FAADD7667E3F5, 0x7ABCFF62938BEB96, - 0xA78DAD948FC179C9, 0x8F1F98B72911E50D, 0x61E48EAE27121A91, 0x4D62F7AD31859808, - 0xECEBA345EF5CEAEB, 0xF5CEB25EBC9684CE, 0xF633E20CB7F76221, 0xA32CDF06AB8293E4, - 0x985A202CA5EE2CA4, 0xCF0B8447CC8A8FB1, 0x9F765244979859A3, 0xA8D516B1A1240017, - 0x0BD7BA3EBB5DC726, 0xE54BCA55B86ADB39, 0x1D7A3AFD6C478063, 0x519EC608E7669EDD, - 0x0E5715A2D149AA23, 0x177D4571848FF194, 0xEEB55F3241014C22, 0x0F5E5CA13A6E2EC2, - 0x8029927B75F5C361, 0xAD139FABC3D6E436, 0x0D5DF1A94CCF402F, 0x3E8BD948BEA5DFC8, - 0xA5A0D357BD3FF77E, 0xA2D12E251F74F645, 0x66FD9E525E81A082, 0x2E0C90CE7F687A49, - 0xC2E8BCBEBA973BC5, 0x000001BCE509745F, 0x423777BBE6DAB3D6, 0xD1661C7EAEF06EB5, - 0xA1781F354DAACFD8, 0x2D11284A2B16AFFC, 0xF1FC4F67FA891D1F, 0x73ECC25DCB920ADA, - 0xAE610C22C2A12651, 0x96E0A810D356B78A, 0x5A9A381F2FE7870F, 0xD5AD62EDE94E5530, - 0xD225E5E8368D1427, 0x65977B70C7AF4631, 0x99F889B2DE39D74F, 0x233F30BF54E1D143, - 0x9A9675D3D9A63C97, 0x5470554FF334F9A8, 0x166ACB744A4F5688, 0x70C74CAAB2E4AEAD, - 0xF0D091646F294D12, 0x57B82A89684031D1, 0xEFD95A5A61BE0B6B, 0x2FBD12E969F2F29A, - 0x9BD37013FEFF9FE8, 0x3F9B0404D6085A06, 0x4940C1F3166CFE15, 0x09542C4DCDF3DEFB, - 0xB4C5218385CD5CE3, 0xC935B7DC4462A641, 0x3417F8A68ED3B63F, 0xB80959295B215B40, - 0xF99CDAEF3B8C8572, 0x018C0614F8FCB95D, 0x1B14ACCD1A3ACDF3, 0x84D471F200BB732D, - 0xC1A3110E95E8DA16, 0x430A7220BF1A82B8, 0xB77E090D39DF210E, 0x5EF4BD9F3CD05E9D, - 0x9D4FF6DA7E57A444, 0xDA1D60E183D4A5F8, 0xB287C38417998E47, 0xFE3EDC121BB31886, - 0xC7FE3CCC980CCBEF, 0xE46FB590189BFD03, 0x3732FD469A4C57DC, 0x7EF700A07CF1AD65, - 0x59C64468A31D8859, 0x762FB0B4D45B61F6, 0x155BAED099047718, 0x68755E4C3D50BAA6, - 0xE9214E7F22D8B4DF, 0x2ADDBF532EAC95F4, 0x32AE3909B4BD0109, 0x834DF537B08E3450, - 0xFA209DA84220728D, 0x9E691D9B9EFE23F7, 0x0446D288C4AE8D7F, 0x7B4CC524E169785B, - 0x21D87F0135CA1385, 0xCEBB400F137B8AA5, 0x272E2B66580796BE, 0x3612264125C2B0DE, - 0x057702BDAD1EFBB2, 0xD4BABB8EACF84BE9, 0x91583139641BC67B, 0x8BDC2DE08036E024, - 0x603C8156F49F68ED, 0xF7D236F7DBEF5111, 0x9727C4598AD21E80, 0xA08A0896670A5FD7, - 0xCB4A8F4309EBA9CB, 0x81AF564B0F7036A1, 0xC0B99AA778199ABD, 0x959F1EC83FC8E952, - 0x8C505077794A81B9, 0x3ACAAF8F056338F0, 0x07B43F50627A6778, 0x4A44AB49F5ECCC77, - 0x3BC3D6E4B679EE98, 0x9CC0D4D1CF14108C, 0x4406C00B206BC8A0, 0x82A18854C8D72D89, - 0x67E366B35C3C432C, 0xB923DD61102B37F2, 0x56AB2779D884271D, 0xBE83E1B0FF1525AF, - 0xFB7C65D4217E49A9, 0x6BDBE0E76D48E7D4, 0x08DF828745D9179E, 0x22EA6A9ADD53BD34, - 0xE36E141C5622200A, 0x7F805D1B8CB750EE, 0xAFE5C7A59F58E837, 0xE27F996A4FB1C23C, - 0xD3867DFB0775F0D0, 0xD0E673DE6E88891A, 0x123AEB9EAFB86C25, 0x30F1D5D5C145B895, - 0xBB434A2DEE7269E7, 0x78CB67ECF931FA38, 0xF33B0372323BBF9C, 0x52D66336FB279C74, - 0x505F33AC0AFB4EAA, 0xE8A5CD99A2CCE187, 0x534974801E2D30BB, 0x8D2D5711D5876D90, - 0x1F1A412891BC038E, 0xD6E2E71D82E56648, 0x74036C3A497732B7, 0x89B67ED96361F5AB, - 0xFFED95D8F1EA02A2, 0xE72B3BD61464D43D, 0xA6300F170BDC4820, 0xEBC18760ED78A77A}; - - constexpr static const substitution_type sbox2 = { - 0xE6A6BE5A05A12138, 0xB5A122A5B4F87C98, 0x563C6089140B6990, 0x4C46CB2E391F5DD5, - 0xD932ADDBC9B79434, 0x08EA70E42015AFF5, 0xD765A6673E478CF1, 0xC4FB757EAB278D99, - 0xDF11C6862D6E0692, 0xDDEB84F10D7F3B16, 0x6F2EF604A665EA04, 0x4A8E0F0FF0E0DFB3, - 0xA5EDEEF83DBCBA51, 0xFC4F0A2A0EA4371E, 0xE83E1DA85CB38429, 0xDC8FF882BA1B1CE2, - 0xCD45505E8353E80D, 0x18D19A00D4DB0717, 0x34A0CFEDA5F38101, 0x0BE77E518887CAF2, - 0x1E341438B3C45136, 0xE05797F49089CCF9, 0xFFD23F9DF2591D14, 0x543DDA228595C5CD, - 0x661F81FD99052A33, 0x8736E641DB0F7B76, 0x15227725418E5307, 0xE25F7F46162EB2FA, - 0x48A8B2126C13D9FE, 0xAFDC541792E76EEA, 0x03D912BFC6D1898F, 0x31B1AAFA1B83F51B, - 0xF1AC2796E42AB7D9, 0x40A3A7D7FCD2EBAC, 0x1056136D0AFBBCC5, 0x7889E1DD9A6D0C85, - 0xD33525782A7974AA, 0xA7E25D09078AC09B, 0xBD4138B3EAC6EDD0, 0x920ABFBE71EB9E70, - 0xA2A5D0F54FC2625C, 0xC054E36B0B1290A3, 0xF6DD59FF62FE932B, 0x3537354511A8AC7D, - 0xCA845E9172FADCD4, 0x84F82B60329D20DC, 0x79C62CE1CD672F18, 0x8B09A2ADD124642C, - 0xD0C1E96A19D9E726, 0x5A786A9B4BA9500C, 0x0E020336634C43F3, 0xC17B474AEB66D822, - 0x6A731AE3EC9BAAC2, 0x8226667AE0840258, 0x67D4567691CAECA5, 0x1D94155C4875ADB5, - 0x6D00FD985B813FDF, 0x51286EFCB774CD06, 0x5E8834471FA744AF, 0xF72CA0AEE761AE2E, - 0xBE40E4CDAEE8E09A, 0xE9970BBB5118F665, 0x726E4BEB33DF1964, 0x703B000729199762, - 0x4631D816F5EF30A7, 0xB880B5B51504A6BE, 0x641793C37ED84B6C, 0x7B21ED77F6E97D96, - 0x776306312EF96B73, 0xAE528948E86FF3F4, 0x53DBD7F286A3F8F8, 0x16CADCE74CFC1063, - 0x005C19BDFA52C6DD, 0x68868F5D64D46AD3, 0x3A9D512CCF1E186A, 0x367E62C2385660AE, - 0xE359E7EA77DCB1D7, 0x526C0773749ABE6E, 0x735AE5F9D09F734B, 0x493FC7CC8A558BA8, - 0xB0B9C1533041AB45, 0x321958BA470A59BD, 0x852DB00B5F46C393, 0x91209B2BD336B0E5, - 0x6E604F7D659EF19F, 0xB99A8AE2782CCB24, 0xCCF52AB6C814C4C7, 0x4727D9AFBE11727B, - 0x7E950D0C0121B34D, 0x756F435670AD471F, 0xF5ADD442615A6849, 0x4E87E09980B9957A, - 0x2ACFA1DF50AEE355, 0xD898263AFD2FD556, 0xC8F4924DD80C8FD6, 0xCF99CA3D754A173A, - 0xFE477BACAF91BF3C, 0xED5371F6D690C12D, 0x831A5C285E687094, 0xC5D3C90A3708A0A4, - 0x0F7F903717D06580, 0x19F9BB13B8FDF27F, 0xB1BD6F1B4D502843, 0x1C761BA38FFF4012, - 0x0D1530C4E2E21F3B, 0x8943CE69A7372C8A, 0xE5184E11FEB5CE66, 0x618BDB80BD736621, - 0x7D29BAD68B574D0B, 0x81BB613E25E6FE5B, 0x071C9C10BC07913F, 0xC7BEEB7909AC2D97, - 0xC3E58D353BC5D757, 0xEB017892F38F61E8, 0xD4EFFB9C9B1CC21A, 0x99727D26F494F7AB, - 0xA3E063A2956B3E03, 0x9D4A8B9A4AA09C30, 0x3F6AB7D500090FB4, 0x9CC0F2A057268AC0, - 0x3DEE9D2DEDBF42D1, 0x330F49C87960A972, 0xC6B2720287421B41, 0x0AC59EC07C00369C, - 0xEF4EAC49CB353425, 0xF450244EEF0129D8, 0x8ACC46E5CAF4DEB6, 0x2FFEAB63989263F7, - 0x8F7CB9FE5D7A4578, 0x5BD8F7644E634635, 0x427A7315BF2DC900, 0x17D0C4AA2125261C, - 0x3992486C93518E50, 0xB4CBFEE0A2D7D4C3, 0x7C75D6202C5DDD8D, 0xDBC295D8E35B6C61, - 0x60B369D302032B19, 0xCE42685FDCE44132, 0x06F3DDB9DDF65610, 0x8EA4D21DB5E148F0, - 0x20B0FCE62FCD496F, 0x2C1B912358B0EE31, 0xB28317B818F5A308, 0xA89C1E189CA6D2CF, - 0x0C6B18576AAADBC8, 0xB65DEAA91299FAE3, 0xFB2B794B7F1027E7, 0x04E4317F443B5BEB, - 0x4B852D325939D0A6, 0xD5AE6BEEFB207FFC, 0x309682B281C7D374, 0xBAE309A194C3B475, - 0x8CC3F97B13B49F05, 0x98A9422FF8293967, 0x244B16B01076FF7C, 0xF8BF571C663D67EE, - 0x1F0D6758EEE30DA1, 0xC9B611D97ADEB9B7, 0xB7AFD5887B6C57A2, 0x6290AE846B984FE1, - 0x94DF4CDEACC1A5FD, 0x058A5BD1C5483AFF, 0x63166CC142BA3C37, 0x8DB8526EB2F76F40, - 0xE10880036F0D6D4E, 0x9E0523C9971D311D, 0x45EC2824CC7CD691, 0x575B8359E62382C9, - 0xFA9E400DC4889995, 0xD1823ECB45721568, 0xDAFD983B8206082F, 0xAA7D29082386A8CB, - 0x269FCD4403B87588, 0x1B91F5F728BDD1E0, 0xE4669F39040201F6, 0x7A1D7C218CF04ADE, - 0x65623C29D79CE5CE, 0x2368449096C00BB1, 0xAB9BF1879DA503BA, 0xBC23ECB1A458058E, - 0x9A58DF01BB401ECC, 0xA070E868A85F143D, 0x4FF188307DF2239E, 0x14D565B41A641183, - 0xEE13337452701602, 0x950E3DCF3F285E09, 0x59930254B9C80953, 0x3BF299408930DA6D, - 0xA955943F53691387, 0xA15EDECAA9CB8784, 0x29142127352BE9A0, 0x76F0371FFF4E7AFB, - 0x0239F450274F2228, 0xBB073AF01D5E868B, 0xBFC80571C10E96C1, 0xD267088568222E23, - 0x9671A3D48E80B5B0, 0x55B5D38AE193BB81, 0x693AE2D0A18B04B8, 0x5C48B4ECADD5335F, - 0xFD743B194916A1CA, 0x2577018134BE98C4, 0xE77987E83C54A4AD, 0x28E11014DA33E1B9, - 0x270CC59E226AA213, 0x71495F756D1A5F60, 0x9BE853FB60AFEF77, 0xADC786A7F7443DBF, - 0x0904456173B29A82, 0x58BC7A66C232BD5E, 0xF306558C673AC8B2, 0x41F639C6B6C9772A, - 0x216DEFE99FDA35DA, 0x11640CC71C7BE615, 0x93C43694565C5527, 0xEA038E6246777839, - 0xF9ABF3CE5A3E2469, 0x741E768D0FD312D2, 0x0144B883CED652C6, 0xC20B5A5BA33F8552, - 0x1AE69633C3435A9D, 0x97A28CA4088CFDEC, 0x8824A43C1E96F420, 0x37612FA66EEEA746, - 0x6B4CB165F9CF0E5A, 0x43AA1C06A0ABFB4A, 0x7F4DC26FF162796B, 0x6CBACC8E54ED9B0F, - 0xA6B7FFEFD2BB253E, 0x2E25BC95B0A29D4F, 0x86D6A58BDEF1388C, 0xDED74AC576B6F054, - 0x8030BDBC2B45805D, 0x3C81AF70E94D9289, 0x3EFF6DDA9E3100DB, 0xB38DC39FDFCC8847, - 0x123885528D17B87E, 0xF2DA0ED240B1B642, 0x44CEFADCD54BF9A9, 0x1312200E433C7EE6, - 0x9FFCC84F3A78C748, 0xF0CD1F72248576BB, 0xEC6974053638CFE4, 0x2BA7B67C0CEC4E4C, - 0xAC2F4DF3E5CE32ED, 0xCB33D14326EA4C11, 0xA4E9044CC77E58BC, 0x5F513293D934FCEF, - 0x5DC9645506E55444, 0x50DE418F317DE40A, 0x388CB31A69DDE259, 0x2DB4A83455820A86, - 0x9010A91E84711AE9, 0x4DF7F0B7B1498371, 0xD62A2EABC0977179, 0x22FAC097AA8D5C0E}; - - constexpr static const substitution_type sbox3 = { - 0xF49FCC2FF1DAF39B, 0x487FD5C66FF29281, 0xE8A30667FCDCA83F, 0x2C9B4BE3D2FCCE63, - 0xDA3FF74B93FBBBC2, 0x2FA165D2FE70BA66, 0xA103E279970E93D4, 0xBECDEC77B0E45E71, - 0xCFB41E723985E497, 0xB70AAA025EF75017, 0xD42309F03840B8E0, 0x8EFC1AD035898579, - 0x96C6920BE2B2ABC5, 0x66AF4163375A9172, 0x2174ABDCCA7127FB, 0xB33CCEA64A72FF41, - 0xF04A4933083066A5, 0x8D970ACDD7289AF5, 0x8F96E8E031C8C25E, 0xF3FEC02276875D47, - 0xEC7BF310056190DD, 0xF5ADB0AEBB0F1491, 0x9B50F8850FD58892, 0x4975488358B74DE8, - 0xA3354FF691531C61, 0x0702BBE481D2C6EE, 0x89FB24057DEDED98, 0xAC3075138596E902, - 0x1D2D3580172772ED, 0xEB738FC28E6BC30D, 0x5854EF8F63044326, 0x9E5C52325ADD3BBE, - 0x90AA53CF325C4623, 0xC1D24D51349DD067, 0x2051CFEEA69EA624, 0x13220F0A862E7E4F, - 0xCE39399404E04864, 0xD9C42CA47086FCB7, 0x685AD2238A03E7CC, 0x066484B2AB2FF1DB, - 0xFE9D5D70EFBF79EC, 0x5B13B9DD9C481854, 0x15F0D475ED1509AD, 0x0BEBCD060EC79851, - 0xD58C6791183AB7F8, 0xD1187C5052F3EEE4, 0xC95D1192E54E82FF, 0x86EEA14CB9AC6CA2, - 0x3485BEB153677D5D, 0xDD191D781F8C492A, 0xF60866BAA784EBF9, 0x518F643BA2D08C74, - 0x8852E956E1087C22, 0xA768CB8DC410AE8D, 0x38047726BFEC8E1A, 0xA67738B4CD3B45AA, - 0xAD16691CEC0DDE19, 0xC6D4319380462E07, 0xC5A5876D0BA61938, 0x16B9FA1FA58FD840, - 0x188AB1173CA74F18, 0xABDA2F98C99C021F, 0x3E0580AB134AE816, 0x5F3B05B773645ABB, - 0x2501A2BE5575F2F6, 0x1B2F74004E7E8BA9, 0x1CD7580371E8D953, 0x7F6ED89562764E30, - 0xB15926FF596F003D, 0x9F65293DA8C5D6B9, 0x6ECEF04DD690F84C, 0x4782275FFF33AF88, - 0xE41433083F820801, 0xFD0DFE409A1AF9B5, 0x4325A3342CDB396B, 0x8AE77E62B301B252, - 0xC36F9E9F6655615A, 0x85455A2D92D32C09, 0xF2C7DEA949477485, 0x63CFB4C133A39EBA, - 0x83B040CC6EBC5462, 0x3B9454C8FDB326B0, 0x56F56A9E87FFD78C, 0x2DC2940D99F42BC6, - 0x98F7DF096B096E2D, 0x19A6E01E3AD852BF, 0x42A99CCBDBD4B40B, 0xA59998AF45E9C559, - 0x366295E807D93186, 0x6B48181BFAA1F773, 0x1FEC57E2157A0A1D, 0x4667446AF6201AD5, - 0xE615EBCACFB0F075, 0xB8F31F4F68290778, 0x22713ED6CE22D11E, 0x3057C1A72EC3C93B, - 0xCB46ACC37C3F1F2F, 0xDBB893FD02AAF50E, 0x331FD92E600B9FCF, 0xA498F96148EA3AD6, - 0xA8D8426E8B6A83EA, 0xA089B274B7735CDC, 0x87F6B3731E524A11, 0x118808E5CBC96749, - 0x9906E4C7B19BD394, 0xAFED7F7E9B24A20C, 0x6509EADEEB3644A7, 0x6C1EF1D3E8EF0EDE, - 0xB9C97D43E9798FB4, 0xA2F2D784740C28A3, 0x7B8496476197566F, 0x7A5BE3E6B65F069D, - 0xF96330ED78BE6F10, 0xEEE60DE77A076A15, 0x2B4BEE4AA08B9BD0, 0x6A56A63EC7B8894E, - 0x02121359BA34FEF4, 0x4CBF99F8283703FC, 0x398071350CAF30C8, 0xD0A77A89F017687A, - 0xF1C1A9EB9E423569, 0x8C7976282DEE8199, 0x5D1737A5DD1F7ABD, 0x4F53433C09A9FA80, - 0xFA8B0C53DF7CA1D9, 0x3FD9DCBC886CCB77, 0xC040917CA91B4720, 0x7DD00142F9D1DCDF, - 0x8476FC1D4F387B58, 0x23F8E7C5F3316503, 0x032A2244E7E37339, 0x5C87A5D750F5A74B, - 0x082B4CC43698992E, 0xDF917BECB858F63C, 0x3270B8FC5BF86DDA, 0x10AE72BB29B5DD76, - 0x576AC94E7700362B, 0x1AD112DAC61EFB8F, 0x691BC30EC5FAA427, 0xFF246311CC327143, - 0x3142368E30E53206, 0x71380E31E02CA396, 0x958D5C960AAD76F1, 0xF8D6F430C16DA536, - 0xC8FFD13F1BE7E1D2, 0x7578AE66004DDBE1, 0x05833F01067BE646, 0xBB34B5AD3BFE586D, - 0x095F34C9A12B97F0, 0x247AB64525D60CA8, 0xDCDBC6F3017477D1, 0x4A2E14D4DECAD24D, - 0xBDB5E6D9BE0A1EEB, 0x2A7E70F7794301AB, 0xDEF42D8A270540FD, 0x01078EC0A34C22C1, - 0xE5DE511AF4C16387, 0x7EBB3A52BD9A330A, 0x77697857AA7D6435, 0x004E831603AE4C32, - 0xE7A21020AD78E312, 0x9D41A70C6AB420F2, 0x28E06C18EA1141E6, 0xD2B28CBD984F6B28, - 0x26B75F6C446E9D83, 0xBA47568C4D418D7F, 0xD80BADBFE6183D8E, 0x0E206D7F5F166044, - 0xE258A43911CBCA3E, 0x723A1746B21DC0BC, 0xC7CAA854F5D7CDD3, 0x7CAC32883D261D9C, - 0x7690C26423BA942C, 0x17E55524478042B8, 0xE0BE477656A2389F, 0x4D289B5E67AB2DA0, - 0x44862B9C8FBBFD31, 0xB47CC8049D141365, 0x822C1B362B91C793, 0x4EB14655FB13DFD8, - 0x1ECBBA0714E2A97B, 0x6143459D5CDE5F14, 0x53A8FBF1D5F0AC89, 0x97EA04D81C5E5B00, - 0x622181A8D4FDB3F3, 0xE9BCD341572A1208, 0x1411258643CCE58A, 0x9144C5FEA4C6E0A4, - 0x0D33D06565CF620F, 0x54A48D489F219CA1, 0xC43E5EAC6D63C821, 0xA9728B3A72770DAF, - 0xD7934E7B20DF87EF, 0xE35503B61A3E86E5, 0xCAE321FBC819D504, 0x129A50B3AC60BFA6, - 0xCD5E68EA7E9FB6C3, 0xB01C90199483B1C7, 0x3DE93CD5C295376C, 0xAED52EDF2AB9AD13, - 0x2E60F512C0A07884, 0xBC3D86A3E36210C9, 0x35269D9B163951CE, 0x0C7D6E2AD0CDB5FA, - 0x59E86297D87F5733, 0x298EF221898DB0E7, 0x55000029D1A5AA7E, 0x8BC08AE1B5061B45, - 0xC2C31C2B6C92703A, 0x94CC596BAF25EF42, 0x0A1D73DB22540456, 0x04B6A0F9D9C4179A, - 0xEFFDAFA2AE3D3C60, 0xF7C8075BB49496C4, 0x9CC5C7141D1CD4E3, 0x78BD1638218E5534, - 0xB2F11568F850246A, 0xEDFABCFA9502BC29, 0x796CE5F2DA23051B, 0xAAE128B0DC93537C, - 0x3A493DA0EE4B29AE, 0xB5DF6B2C416895D7, 0xFCABBD25122D7F37, 0x70810B58105DC4B1, - 0xE10FDD37F7882A90, 0x524DCAB5518A3F5C, 0x3C9E85878451255B, 0x4029828119BD34E2, - 0x74A05B6F5D3CECCB, 0xB610021542E13ECA, 0x0FF979D12F59E2AC, 0x6037DA27E4F9CC50, - 0x5E92975A0DF1847D, 0xD66DE190D3E623FE, 0x5032D6B87B568048, 0x9A36B7CE8235216E, - 0x80272A7A24F64B4A, 0x93EFED8B8C6916F7, 0x37DDBFF44CCE1555, 0x4B95DB5D4B99BD25, - 0x92D3FDA169812FC0, 0xFB1A4A9A90660BB6, 0x730C196946A4B9B2, 0x81E289AA7F49DA68, - 0x64669A0F83B1A05F, 0x27B3FF7D9644F48B, 0xCC6B615C8DB675B3, 0x674F20B9BCEBBE95, - 0x6F31238275655982, 0x5AE488713E45CF05, 0xBF619F9954C21157, 0xEABAC46040A8EAE9, - 0x454C6FE9F2C0C1CD, 0x419CF6496412691C, 0xD3DC3BEF265B0F70, 0x6D0E60F5C3578A9E}; - - constexpr static const substitution_type sbox4 = { - 0x5B0E608526323C55, 0x1A46C1A9FA1B59F5, 0xA9E245A17C4C8FFA, 0x65CA5159DB2955D7, - 0x05DB0A76CE35AFC2, 0x81EAC77EA9113D45, 0x528EF88AB6AC0A0D, 0xA09EA253597BE3FF, - 0x430DDFB3AC48CD56, 0xC4B3A67AF45CE46F, 0x4ECECFD8FBE2D05E, 0x3EF56F10B39935F0, - 0x0B22D6829CD619C6, 0x17FD460A74DF2069, 0x6CF8CC8E8510ED40, 0xD6C824BF3A6ECAA7, - 0x61243D581A817049, 0x048BACB6BBC163A2, 0xD9A38AC27D44CC32, 0x7FDDFF5BAAF410AB, - 0xAD6D495AA804824B, 0xE1A6A74F2D8C9F94, 0xD4F7851235DEE8E3, 0xFD4B7F886540D893, - 0x247C20042AA4BFDA, 0x096EA1C517D1327C, 0xD56966B4361A6685, 0x277DA5C31221057D, - 0x94D59893A43ACFF7, 0x64F0C51CCDC02281, 0x3D33BCC4FF6189DB, 0xE005CB184CE66AF1, - 0xFF5CCD1D1DB99BEA, 0xB0B854A7FE42980F, 0x7BD46A6A718D4B9F, 0xD10FA8CC22A5FD8C, - 0xD31484952BE4BD31, 0xC7FA975FCB243847, 0x4886ED1E5846C407, 0x28CDDB791EB70B04, - 0xC2B00BE2F573417F, 0x5C9590452180F877, 0x7A6BDDFFF370EB00, 0xCE509E38D6D9D6A4, - 0xEBEB0F00647FA702, 0x1DCC06CF76606F06, 0xE4D9F28BA286FF0A, 0xD85A305DC918C262, - 0x475B1D8732225F54, 0x2D4FB51668CCB5FE, 0xA679B9D9D72BBA20, 0x53841C0D912D43A5, - 0x3B7EAA48BF12A4E8, 0x781E0E47F22F1DDF, 0xEFF20CE60AB50973, 0x20D261D19DFFB742, - 0x16A12B03062A2E39, 0x1960EB2239650495, 0x251C16FED50EB8B8, 0x9AC0C330F826016E, - 0xED152665953E7671, 0x02D63194A6369570, 0x5074F08394B1C987, 0x70BA598C90B25CE1, - 0x794A15810B9742F6, 0x0D5925E9FCAF8C6C, 0x3067716CD868744E, 0x910AB077E8D7731B, - 0x6A61BBDB5AC42F61, 0x93513EFBF0851567, 0xF494724B9E83E9D5, 0xE887E1985C09648D, - 0x34B1D3C675370CFD, 0xDC35E433BC0D255D, 0xD0AAB84234131BE0, 0x08042A50B48B7EAF, - 0x9997C4EE44A3AB35, 0x829A7B49201799D0, 0x263B8307B7C54441, 0x752F95F4FD6A6CA6, - 0x927217402C08C6E5, 0x2A8AB754A795D9EE, 0xA442F7552F72943D, 0x2C31334E19781208, - 0x4FA98D7CEAEE6291, 0x55C3862F665DB309, 0xBD0610175D53B1F3, 0x46FE6CB840413F27, - 0x3FE03792DF0CFA59, 0xCFE700372EB85E8F, 0xA7BE29E7ADBCE118, 0xE544EE5CDE8431DD, - 0x8A781B1B41F1873E, 0xA5C94C78A0D2F0E7, 0x39412E2877B60728, 0xA1265EF3AFC9A62C, - 0xBCC2770C6A2506C5, 0x3AB66DD5DCE1CE12, 0xE65499D04A675B37, 0x7D8F523481BFD216, - 0x0F6F64FCEC15F389, 0x74EFBE618B5B13C8, 0xACDC82B714273E1D, 0xDD40BFE003199D17, - 0x37E99257E7E061F8, 0xFA52626904775AAA, 0x8BBBF63A463D56F9, 0xF0013F1543A26E64, - 0xA8307E9F879EC898, 0xCC4C27A4150177CC, 0x1B432F2CCA1D3348, 0xDE1D1F8F9F6FA013, - 0x606602A047A7DDD6, 0xD237AB64CC1CB2C7, 0x9B938E7225FCD1D3, 0xEC4E03708E0FF476, - 0xFEB2FBDA3D03C12D, 0xAE0BCED2EE43889A, 0x22CB8923EBFB4F43, 0x69360D013CF7396D, - 0x855E3602D2D4E022, 0x073805BAD01F784C, 0x33E17A133852F546, 0xDF4874058AC7B638, - 0xBA92B29C678AA14A, 0x0CE89FC76CFAADCD, 0x5F9D4E0908339E34, 0xF1AFE9291F5923B9, - 0x6E3480F60F4A265F, 0xEEBF3A2AB29B841C, 0xE21938A88F91B4AD, 0x57DFEFF845C6D3C3, - 0x2F006B0BF62CAAF2, 0x62F479EF6F75EE78, 0x11A55AD41C8916A9, 0xF229D29084FED453, - 0x42F1C27B16B000E6, 0x2B1F76749823C074, 0x4B76ECA3C2745360, 0x8C98F463B91691BD, - 0x14BCC93CF1ADE66A, 0x8885213E6D458397, 0x8E177DF0274D4711, 0xB49B73B5503F2951, - 0x10168168C3F96B6B, 0x0E3D963B63CAB0AE, 0x8DFC4B5655A1DB14, 0xF789F1356E14DE5C, - 0x683E68AF4E51DAC1, 0xC9A84F9D8D4B0FD9, 0x3691E03F52A0F9D1, 0x5ED86E46E1878E80, - 0x3C711A0E99D07150, 0x5A0865B20C4E9310, 0x56FBFC1FE4F0682E, 0xEA8D5DE3105EDF9B, - 0x71ABFDB12379187A, 0x2EB99DE1BEE77B9C, 0x21ECC0EA33CF4523, 0x59A4D7521805C7A1, - 0x3896F5EB56AE7C72, 0xAA638F3DB18F75DC, 0x9F39358DABE9808E, 0xB7DEFA91C00B72AC, - 0x6B5541FD62492D92, 0x6DC6DEE8F92E4D5B, 0x353F57ABC4BEEA7E, 0x735769D6DA5690CE, - 0x0A234AA642391484, 0xF6F9508028F80D9D, 0xB8E319A27AB3F215, 0x31AD9C1151341A4D, - 0x773C22A57BEF5805, 0x45C7561A07968633, 0xF913DA9E249DBE36, 0xDA652D9B78A64C68, - 0x4C27A97F3BC334EF, 0x76621220E66B17F4, 0x967743899ACD7D0B, 0xF3EE5BCAE0ED6782, - 0x409F753600C879FC, 0x06D09A39B5926DB6, 0x6F83AEB0317AC588, 0x01E6CA4A86381F21, - 0x66FF3462D19F3025, 0x72207C24DDFD3BFB, 0x4AF6B6D3E2ECE2EB, 0x9C994DBEC7EA08DE, - 0x49ACE597B09A8BC4, 0xB38C4766CF0797BA, 0x131B9373C57C2A75, 0xB1822CCE61931E58, - 0x9D7555B909BA1C0C, 0x127FAFDD937D11D2, 0x29DA3BADC66D92E4, 0xA2C1D57154C2ECBC, - 0x58C5134D82F6FE24, 0x1C3AE3515B62274F, 0xE907C82E01CB8126, 0xF8ED091913E37FCB, - 0x3249D8F9C80046C9, 0x80CF9BEDE388FB63, 0x1881539A116CF19E, 0x5103F3F76BD52457, - 0x15B7E6F5AE47F7A8, 0xDBD7C6DED47E9CCF, 0x44E55C410228BB1A, 0xB647D4255EDB4E99, - 0x5D11882BB8AAFC30, 0xF5098BBB29D3212A, 0x8FB5EA14E90296B3, 0x677B942157DD025A, - 0xFB58E7C0A390ACB5, 0x89D3674C83BD4A01, 0x9E2DA4DF4BF3B93B, 0xFCC41E328CAB4829, - 0x03F38C96BA582C52, 0xCAD1BDBD7FD85DB2, 0xBBB442C16082AE83, 0xB95FE86BA5DA9AB0, - 0xB22E04673771A93F, 0x845358C9493152D8, 0xBE2A488697B4541E, 0x95A2DC2DD38E6966, - 0xC02C11AC923C852B, 0x2388B1990DF2A87B, 0x7C8008FA1B4F37BE, 0x1F70D0C84D54E503, - 0x5490ADEC7ECE57D4, 0x002B3C27D9063A3A, 0x7EAEA3848030A2BF, 0xC602326DED2003C0, - 0x83A7287D69A94086, 0xC57A5FCB30F57A8A, 0xB56844E479EBE779, 0xA373B40F05DCBCE9, - 0xD71A786E88570EE2, 0x879CBACDBDE8F6A0, 0x976AD1BCC164A32F, 0xAB21E25E9666D78B, - 0x901063AAE5E5C33C, 0x9818B34448698D90, 0xE36487AE3E1E8ABB, 0xAFBDF931893BDCB4, - 0x6345A0DC5FBBD519, 0x8628FE269B9465CA, 0x1E5D01603F9C51EC, 0x4DE44006A15049B7, - 0xBF6C70E5F776CBB1, 0x411218F2EF552BED, 0xCB0C0708705A36A3, 0xE74D14754F986044, - 0xCD56D9430EA8280E, 0xC12591D7535F5065, 0xC83223F1720AEF96, 0xC3A0396F7363A51F}; - }; - - template - constexpr const typename basic_tiger_policy::substitution_type - basic_tiger_policy::sbox1; - - template - constexpr const typename basic_tiger_policy::substitution_type - basic_tiger_policy::sbox2; - - template - constexpr const typename basic_tiger_policy::substitution_type - basic_tiger_policy::sbox3; - - template - constexpr const typename basic_tiger_policy::substitution_type - basic_tiger_policy::sbox4; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_BASIC_TIGER_POLICY_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_functions.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_functions.hpp deleted file mode 100644 index ac14a7b3e0..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_functions.hpp +++ /dev/null @@ -1,161 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Pavel Kharitonov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_TIGER_FUNCTIONS_HPP -#define CRYPTO3_TIGER_FUNCTIONS_HPP - -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct tiger_functions : public basic_tiger_policy { - typedef basic_tiger_policy policy_type; - - typedef typename policy_type::byte_type byte_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t state_bits = basic_tiger_policy::state_bits; - constexpr static const std::size_t state_words = basic_tiger_policy::state_words; - typedef typename basic_tiger_policy::state_type state_type; - - constexpr static const std::size_t block_bits = basic_tiger_policy::block_bits; - constexpr static const std::size_t block_words = basic_tiger_policy::block_words; - typedef typename basic_tiger_policy::block_type block_type; - - inline static void mix(block_type &X) { - X[0] -= X[7] ^ 0xA5A5A5A5A5A5A5A5; - X[1] ^= X[0]; - X[2] += X[1]; - X[3] -= X[2] ^ ((~X[1]) << 19); - X[4] ^= X[3]; - X[5] += X[4]; - X[6] -= X[5] ^ ((~X[4]) >> 23); - X[7] ^= X[6]; - - X[0] += X[7]; - X[1] -= X[0] ^ ((~X[7]) << 19); - X[2] ^= X[1]; - X[3] += X[2]; - X[4] -= X[3] ^ ((~X[2]) >> 23); - X[5] ^= X[4]; - X[6] += X[5]; - X[7] -= X[6] ^ 0x0123456789ABCDEF; - } - - inline static void pass(word_type &A, word_type &B, word_type &C, block_type &X, byte_type mul) { - C ^= X[0]; - A -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(C, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(C, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(C, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(C, 1)]; - B += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(C, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(C, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(C, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(C, 6)]; - B *= mul; - A ^= X[1]; - B -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(A, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(A, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(A, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(A, 1)]; - C += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(A, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(A, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(A, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(A, 6)]; - C *= mul; - B ^= X[2]; - C -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(B, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(B, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(B, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(B, 1)]; - A += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(B, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(B, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(B, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(B, 6)]; - A *= mul; - C ^= X[3]; - A -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(C, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(C, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(C, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(C, 1)]; - B += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(C, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(C, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(C, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(C, 6)]; - B *= mul; - A ^= X[4]; - B -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(A, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(A, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(A, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(A, 1)]; - C += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(A, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(A, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(A, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(A, 6)]; - C *= mul; - B ^= X[5]; - C -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(B, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(B, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(B, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(B, 1)]; - A += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(B, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(B, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(B, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(B, 6)]; - A *= mul; - C ^= X[6]; - A -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(C, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(C, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(C, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(C, 1)]; - B += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(C, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(C, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(C, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(C, 6)]; - B *= mul; - A ^= X[7]; - B -= policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(A, 7)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(A, 5)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(A, 3)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(A, 1)]; - C += policy_type::sbox1[::nil::crypto3::detail::extract_uint_t(A, 0)] ^ - policy_type::sbox2[::nil::crypto3::detail::extract_uint_t(A, 2)] ^ - policy_type::sbox3[::nil::crypto3::detail::extract_uint_t(A, 4)] ^ - policy_type::sbox4[::nil::crypto3::detail::extract_uint_t(A, 6)]; - C *= mul; - } - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_TIGER_FUNCTIONS_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_padding.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_padding.hpp deleted file mode 100644 index c3ea84b189..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_padding.hpp +++ /dev/null @@ -1,83 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2020 Pavel Kharitonov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------//// - -#ifndef CRYPTO3_TIGER_PADDING_HPP -#define CRYPTO3_TIGER_PADDING_HPP - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - class tiger_padding { - typedef Hash policy_type; - - typedef typename policy_type::digest_endian endian_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t state_bits = policy_type::state_bits; - constexpr static const std::size_t state_words = policy_type::state_words; - typedef typename policy_type::state_type state_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - typedef ::nil::crypto3::detail::injector - injector_type; - - public: - void operator()(block_type &block, std::size_t &block_seen) { - using namespace nil::crypto3::detail; - // Remove garbage - block_type block_of_zeros; - std::size_t seen_copy = block_seen; - std::fill(block_of_zeros.begin(), block_of_zeros.end(), 0); - injector_type::inject(block_of_zeros, block_bits - block_seen, block, seen_copy); - - // Get bit 1 in the endianness used by the hashes - std::array bit_one = {{0x01}}; - std::array bit_one_word {}; - pack( - bit_one.begin(), bit_one.end(), bit_one_word.begin()); - - // Add 1 bit to block - injector_type::inject(bit_one_word[0], 8, block, block_seen); - } - }; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_TIGERS_PADDING_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_policy.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_policy.hpp deleted file mode 100644 index 5001c732bf..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/detail/tiger/tiger_policy.hpp +++ /dev/null @@ -1,114 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_TIGER_POLICY_HPP -#define CRYPTO3_TIGER_POLICY_HPP - -#include -#include - -#include - - -namespace nil { - namespace crypto3 { - namespace hashes { - namespace detail { - template - struct tiger_policy : public tiger_functions { - typedef typename tiger_functions::byte_type byte_type; - - constexpr static const std::size_t word_bits = tiger_functions::word_bits; - typedef typename tiger_functions::word_type word_type; - - constexpr static const std::size_t passes = Passes; - - typedef typename stream_endian::little_octet_big_bit digest_endian; - - constexpr static const std::size_t digest_bits = DigestBits; - typedef static_digest digest_type; - - constexpr static const std::size_t pkcs_id_size = 0; - constexpr static const std::size_t pkcs_id_bits = pkcs_id_size * CHAR_BIT; - typedef std::array pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = {}; - - constexpr static const std::size_t state_bits = tiger_functions::state_bits; - constexpr static const std::size_t state_words = tiger_functions::state_words; - typedef typename tiger_functions::state_type state_type; - - struct iv_generator { - state_type const &operator()() const { - constexpr static const state_type H0 = { - {0x0123456789ABCDEF, 0xFEDCBA9876543210, 0xF096A5B4C3B2E187}}; - return H0; - } - }; - }; - - template<> - struct tiger_policy<192, 3> : public tiger_functions<192> { - constexpr static const std::size_t digest_bits = 192; - typedef static_digest digest_type; - - typedef typename tiger_functions::byte_type byte_type; - - constexpr static const std::size_t word_bits = tiger_functions::word_bits; - typedef typename tiger_functions::word_type word_type; - - constexpr static const std::size_t passes = 3; - - typedef typename stream_endian::little_octet_big_bit digest_endian; - - constexpr static const std::size_t pkcs_id_size = 19; - constexpr static const std::size_t pkcs_id_bits = pkcs_id_size * CHAR_BIT; - typedef std::array pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = {0x30, 0x29, 0x30, 0x0D, 0x06, 0x09, 0x2B, - 0x06, 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0C, - 0x02, 0x05, 0x00, 0x04, 0x18}; - - constexpr static const std::size_t state_bits = tiger_functions::state_bits; - constexpr static const std::size_t state_words = tiger_functions::state_words; - typedef typename tiger_functions::state_type state_type; - - struct iv_generator { - state_type const &operator()() const { - constexpr static const state_type H0 = { - {0x0123456789ABCDEF, 0xFEDCBA9876543210, 0xF096A5B4C3B2E187}}; - return H0; - } - }; - }; - - template - constexpr typename tiger_policy::pkcs_id_type const - tiger_policy::pkcs_id; - } // namespace detail - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_TIGER_POLICY_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/find_group_hash.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/find_group_hash.hpp index 0333e29d8c..341a60af77 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/find_group_hash.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/find_group_hash.hpp @@ -84,7 +84,7 @@ namespace nil { struct construction { struct params_type { - typedef nil::marshalling::option::little_endian digest_endian; + typedef marshalling::option::little_endian digest_endian; }; typedef void type; }; @@ -114,7 +114,7 @@ namespace nil { } static inline result_type process(internal_accumulator_type &acc) { - nil::marshalling::status_type status; + marshalling::status_type status; group_value_type point; std::uint8_t i = 0; @@ -129,8 +129,8 @@ namespace nil { nil::crypto3::accumulators::extract::hash(acc_copy); // TODO: generalize pack interface to accept arbitrary containers std::vector H_vec(std::cbegin(H), std::cend(H)); - point = nil::marshalling::pack(H_vec, status); - if (status == nil::marshalling::status_type::success) { + point = marshalling::pack(H_vec, status); + if (status == marshalling::status_type::success) { break; } diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/h2c.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/h2c.hpp index 5fddbc5fc9..06ebfc585f 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/h2c.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/h2c.hpp @@ -85,7 +85,7 @@ namespace nil { struct construction { struct params_type { - typedef nil::marshalling::option::big_endian digest_endian; + typedef marshalling::option::big_endian digest_endian; }; typedef void type; }; diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/h2f.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/h2f.hpp index aa4a003bfe..55ff6ec610 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/h2f.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/h2f.hpp @@ -33,7 +33,8 @@ #include #include #include -#include + +#include namespace nil { namespace crypto3 { @@ -99,7 +100,7 @@ namespace nil { struct construction { struct params_type { - typedef nil::marshalling::option::big_endian digest_endian; + typedef nil::crypto3::marshalling::option::big_endian digest_endian; }; typedef void type; }; @@ -139,11 +140,11 @@ namespace nil { std::copy(std::cbegin(uniform_bytes) + elm_offset, std::cbegin(uniform_bytes) + elm_offset + L, std::back_inserter(imported_octets)); - nil::marshalling::status_type status; - boost::multiprecision::number> tmp = - nil::marshalling::pack(imported_octets, status); + nil::crypto3::marshalling::status_type status; + nil::crypto3::multiprecision::big_uint tmp = + nil::crypto3::marshalling::pack(imported_octets, status); THROW_IF_ERROR_STATUS(status, "h2f::process"); - coordinates[j] = modular_type(typename modular_type::backend_type(tmp.backend())); + coordinates[j] = modular_type(tmp); } result[i] = coordinates[0]; } @@ -168,11 +169,11 @@ namespace nil { std::copy(std::cbegin(uniform_bytes) + elm_offset, std::cbegin(uniform_bytes) + elm_offset + L, std::back_inserter(imported_octets)); - nil::marshalling::status_type status; - boost::multiprecision::number> tmp = - nil::marshalling::pack(imported_octets, status); + nil::crypto3::marshalling::status_type status; + nil::crypto3::multiprecision::big_uint tmp = + nil::crypto3::marshalling::pack(imported_octets, status); THROW_IF_ERROR_STATUS(status, "h2f::process"); - coordinates[j] = modular_type(typename modular_type::backend_type(tmp.backend())); + coordinates[j] = modular_type(tmp); } result[i] = field_value_type(coordinates[0], coordinates[1]); } diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/md4.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/md4.hpp deleted file mode 100644 index ddc3a93ef8..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/md4.hpp +++ /dev/null @@ -1,84 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_MD4_HPP -#define CRYPTO3_HASH_MD4_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - /*! - * @brief MD4. Non-cryptographically secure checksum. - * - * @ingroup hashes - */ - - class md4 { - public: - typedef detail::md4_policy policy_type; - typedef typename policy_type::block_cipher_type block_cipher_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - struct construction { - struct params_type { - typedef typename policy_type::digest_endian digest_endian; - - constexpr static const std::size_t length_bits = policy_type::length_bits; - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - }; - - typedef merkle_damgard_construction, - detail::merkle_damgard_padding> - type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash; - }; - - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_MD4_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/md5.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/md5.hpp deleted file mode 100644 index 8b10f83f30..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/md5.hpp +++ /dev/null @@ -1,90 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_MD5_HPP -#define CRYPTO3_HASH_MD5_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - - /*! - * @brief MD5. Non-cryptographically secure checksum. - * - * @ingroup hashes - */ - struct md5 { - public: - typedef detail::md5_policy policy_type; - typedef typename policy_type::block_cipher_type block_cipher_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - constexpr static const std::size_t pkcs_id_size = policy_type::pkcs_id_size; - constexpr static const std::size_t pkcs_id_bits = policy_type::pkcs_id_bits; - typedef typename policy_type::pkcs_id_type pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = policy_type::pkcs_id; - - struct construction { - struct params_type { - typedef typename policy_type::digest_endian digest_endian; - - constexpr static const std::size_t length_bits = policy_type::length_bits; - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - }; - - typedef merkle_damgard_construction, - detail::merkle_damgard_padding> - type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash; - }; - - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_MD5_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/pedersen.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/pedersen.hpp deleted file mode 100644 index 88f4238f53..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/pedersen.hpp +++ /dev/null @@ -1,253 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Ilias Khairullin -// Copyright (c) 2024 Vasiliy Olekhov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_PEDERSEN_HPP -#define CRYPTO3_HASH_PEDERSEN_HPP - -#include -#include -#include -#include - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - /*! - * @brief Pedersen hash - * - * @tparam Group - * @tparam Params - */ - // TODO: use blake2s by default - template, - typename Group = algebra::curves::jubjub::template g1_type< - nil::crypto3::algebra::curves::coordinates::affine, - nil::crypto3::algebra::curves::forms::twisted_edwards>> - struct pedersen_to_point { - using params = Params; - using group_type = Group; - using word_type = bool; - - using base_point_generator_hash = BasePointGeneratorHash; - using base_point_generator = find_group_hash; - - using curve_type = typename group_type::curve_type; - using group_value_type = typename group_type::value_type; - - static constexpr std::size_t digest_bits = group_type::field_type::value_bits; - using digest_type = group_value_type; - using result_type = digest_type; - - struct construction { - struct params_type { - typedef nil::marshalling::option::little_endian digest_endian; - }; - typedef void type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::RawDelegating; - using accumulator_tag = accumulators::tag::forwarding_hash>; - - // TODO: sync definition of the chunk_bits with circuit - static constexpr std::size_t chunk_bits = 3; - /// See definition of \p c in https://zips.z.cash/protocol/protocol.pdf#concretepedersenhash - static constexpr std::size_t chunks_per_base_point = - detail::chunks_per_base_point(chunk_bits); - - class internal_accumulator_type { - std::size_t bits_supplied = 0; - std::vector cached_bits; - typename curve_type::scalar_field_type::integral_type pow_two = 1; - typename curve_type::scalar_field_type::value_type encoded_segment = - curve_type::scalar_field_type::value_type::zero(); - group_value_type current_base_point = hash({ - static_cast(0), - }); - - public: - group_value_type result = group_value_type::zero(); - - private: - inline std::size_t supplied_chunks() const { - assert(bits_supplied % chunk_bits == 0); - return bits_supplied / chunk_bits; - } - - inline bool is_time_to_go_to_new_segment() const { - return supplied_chunks() > 1 && ///< first base point is initialized by default, there is no - ///< need to update when processing first segment - supplied_chunks() % chunks_per_base_point == - 1; ///< it's time to update base point if we moved to a new segment - } - - inline void update_result() { - result = result + encoded_segment * current_base_point; - } - - inline void update_new_segment() { - assert(bits_supplied > 0); - assert(is_time_to_go_to_new_segment()); - current_base_point = hash({ - static_cast(supplied_chunks() / chunks_per_base_point), - }); - pow_two = 1; - encoded_segment = curve_type::scalar_field_type::value_type::zero(); - } - - inline void update_current_segment() { - assert(cached_bits.size() == chunk_bits); - typename curve_type::scalar_field_type::value_type encoded_chunk = - detail::lookup::process( - cached_bits) * - pow_two; - encoded_segment = encoded_segment + encoded_chunk; - pow_two = pow_two << (chunk_bits + 1); - cached_bits.clear(); ///< current chunk was processed, we could clear cache and be ready to - ///< accepts bits of the next chunk - } - - public: - inline void update(bool b) { - cached_bits.template emplace_back<>(b); - ++bits_supplied; - if (cached_bits.size() == chunk_bits) { ///< we could proceed if whole chunk was supplied - if (is_time_to_go_to_new_segment()) { - update_result(); - update_new_segment(); - } - update_current_segment(); - } - } - - inline void pad_update() { - while (!cached_bits - .empty() || ///< length of the input bit string is not a multiple of chunk_bits - !bits_supplied) { ///< empty bit string is being hashed, then hash only padding - update(false); - } - update_result(); - } - }; - - static inline void init_accumulator(internal_accumulator_type &acc) { - } - - template< - typename InputRange, - typename std::enable_if< - std::is_same::value_type>::value, - bool>::type = true> - static inline void update(internal_accumulator_type &acc, const InputRange &range) { - for (auto b : range) { - acc.update(b); - } - } - - template::value_type>::value, - bool>::type = true> - static inline void update(internal_accumulator_type &acc, InputIterator first, InputIterator last) { - for (auto it = first; it != last; ++it) { - acc.update(*it); - } - } - - static inline result_type process(internal_accumulator_type &acc) { - acc.pad_update(); - return acc.result; - } - }; - - // TODO: use blake2s by default - template, - typename Group = algebra::curves::jubjub::template g1_type< - nil::crypto3::algebra::curves::coordinates::affine, - nil::crypto3::algebra::curves::forms::twisted_edwards>> - struct pedersen { - using params = Params; - using group_type = Group; - using base_point_generator_hash = BasePointGeneratorHash; - - using base_hash_type = pedersen_to_point; - - using word_type = typename base_hash_type::word_type; - - using curve_type = typename base_hash_type::curve_type; - using group_value_type = typename base_hash_type::group_value_type; - - // TODO: use marshalling method to determine bit size of serialized group_value_type - static constexpr std::size_t digest_bits = group_type::field_type::value_bits; - // TODO: define digest_type using marshalling - using digest_type = std::vector; - using result_type = digest_type; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::RawDelegating; - using accumulator_tag = accumulators::tag::forwarding_hash>; - - struct construction { - struct params_type { - typedef nil::marshalling::option::little_endian digest_endian; - }; - typedef void type; - }; - - using internal_accumulator_type = nil::crypto3::accumulator_set; - - static inline void init_accumulator(internal_accumulator_type &acc) { - } - - template - static inline void update(internal_accumulator_type &acc, const InputRange &range) { - hash(range, acc); - } - - template - static inline void update(internal_accumulator_type &acc, InputIterator first, InputIterator last) { - hash(first, last, acc); - } - - static inline result_type process(internal_accumulator_type &acc) { - auto result_point = nil::crypto3::accumulators::extract::hash(acc); - nil::marshalling::status_type status; - result_type result = - nil::marshalling::pack(result_point, status); - THROW_IF_ERROR_STATUS(status, "Pedersen hash processing"); - return result; - } - }; - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_PEDERSEN_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/reinforced_concrete.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/reinforced_concrete.hpp deleted file mode 100644 index 92904c202b..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/reinforced_concrete.hpp +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef CRYPTO3_HASH_REINFORCED_COCNRETE_HPP -#define CRYPTO3_HASH_REINFORCED_COCNRETE_HPP - -#include "detail/reinforced_concrete/reinforced_concrete_policy.hpp" -#include "detail/reinforced_concrete/reinforced_concrete_functions.hpp" -namespace nil{ - namespace crypto3{ - namespace hashes{ - template - struct reinforced_concrete_compressor{ - typedef detail::reinforced_concrete_functions policy_type; - typedef typename policy_type::element_type element_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - constexpr static const std::size_t block_words = policy_type::block_words; - constexpr static const std::size_t block_bits = policy_type::block_bits; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t state_words = policy_type::state_words; - constexpr static const std::size_t state_bits = policy_type::state_bits; - typedef typename policy_type::state_type state_type; - - static inline void process_block(state_type& state, block_type& block){ - for(int i = 0; i < block_words; ++i){ - state[i] ^= block[i]; - } - - policy_type::permute(state); - } - }; - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_REINFORCED_COCNRETE_HPP \ No newline at end of file diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/ripemd.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/ripemd.hpp deleted file mode 100644 index 0673e0860c..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/ripemd.hpp +++ /dev/null @@ -1,330 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_RIPEMD_HPP -#define CRYPTO3_HASH_RIPEMD_HPP - -#include -#include -#include - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - template - struct basic_ripemd_compressor { - typedef detail::ripemd_functions policy_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t state_bits = policy_type::state_bits; - constexpr static const std::size_t state_words = policy_type::state_words; - typedef typename policy_type::state_type state_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - }; - - template - struct ripemd_compressor : public basic_ripemd_compressor { }; - - template<> - struct ripemd_compressor<128> : public basic_ripemd_compressor<128> { - static void process_block(state_type &state, const block_type &block) { - // ripemd works on two 'lines' in parallel - // all variables worked on by line 1 are suffixed with 1 - // all variables for line 2 with 2 - - word_type A1 = state[0], B1 = state[1], C1 = state[2], D1 = state[3]; - word_type A2 = state[0], B2 = state[1], C2 = state[2], D2 = state[3]; - - // round 1 - - for (int j = 0; j < 16; ++j) { - policy_type::transform(A1, B1, C1, D1, block[policy_type::r1[j]], 0x00000000, - policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, block[policy_type::r2[j]], 0x50a28be6, - policy_type::s2[j]); - } - // round 2 - - for (int j = 16; j < 32; ++j) { - policy_type::transform(A1, B1, C1, D1, block[policy_type::r1[j]], 0x5a827999, - policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, block[policy_type::r2[j]], 0x5c4dd124, - policy_type::s2[j]); - } - // round 3 - - for (int j = 32; j < 48; ++j) { - policy_type::transform(A1, B1, C1, D1, block[policy_type::r1[j]], 0x6ed9eba1, - policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, block[policy_type::r2[j]], 0x6d703ef3, - policy_type::s2[j]); - } - // round 4 - - for (int j = 48; j < 64; ++j) { - policy_type::transform(A1, B1, C1, D1, block[policy_type::r1[j]], 0x8f1bbcdc, - policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, block[policy_type::r2[j]], 0x00000000, - policy_type::s2[j]); - } - - word_type T = state[1] + C1 + D2; - state[1] = state[2] + D1 + A2; - state[2] = state[3] + A1 + B2; - state[3] = state[0] + B1 + C2; - state[0] = T; - } - }; - - template<> - struct ripemd_compressor<160> : public basic_ripemd_compressor<160> { - static void process_block(state_type &state, const block_type &block) { - word_type A1 = state[0], B1 = state[1], C1 = state[2], D1 = state[3], E1 = state[4]; - word_type A2 = state[0], B2 = state[1], C2 = state[2], D2 = state[3], E2 = state[4]; - - // round 1 - - for (int j = 0; j < 16; ++j) { - policy_type::transform(A1, B1, C1, D1, E1, block[policy_type::r1[j]], - 0x00000000, policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, E2, block[policy_type::r2[j]], - 0x50a28be6, policy_type::s2[j]); - } - // round 2 - - for (int j = 16; j < 32; ++j) { - policy_type::transform(A1, B1, C1, D1, E1, block[policy_type::r1[j]], - 0x5a827999, policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, E2, block[policy_type::r2[j]], - 0x5c4dd124, policy_type::s2[j]); - } - // round 3 - - for (int j = 32; j < 48; ++j) { - policy_type::transform(A1, B1, C1, D1, E1, block[policy_type::r1[j]], - 0x6ed9eba1, policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, E2, block[policy_type::r2[j]], - 0x6d703ef3, policy_type::s2[j]); - } - // round 4 - - for (int j = 48; j < 64; ++j) { - policy_type::transform(A1, B1, C1, D1, E1, block[policy_type::r1[j]], - 0x8f1bbcdc, policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, E2, block[policy_type::r2[j]], - 0x7a6d76e9, policy_type::s2[j]); - } - // round 5 - - for (int j = 64; j < 80; ++j) { - policy_type::transform(A1, B1, C1, D1, E1, block[policy_type::r1[j]], - 0xa953fd4e, policy_type::s1[j]); - policy_type::transform(A2, B2, C2, D2, E2, block[policy_type::r2[j]], - 0x00000000, policy_type::s2[j]); - } - - word_type T = state[1] + C1 + D2; - state[1] = state[2] + D1 + E2; - state[2] = state[3] + E1 + A2; - state[3] = state[4] + A1 + B2; - state[4] = state[0] + B1 + C2; - state[0] = T; - } - }; - - template<> - struct ripemd_compressor<256> : public basic_ripemd_compressor<256> { - static void process_block(state_type &state, const block_type &block) { - state_type Y = {0}; - std::copy(state.begin(), state.end(), Y.begin()); - - // round 1 - - for (int j = 0; j < 16; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], block[policy_type::r1[j]], - 0x00000000, policy_type::s1[j]); - policy_type::transform(Y[4], Y[5], Y[6], Y[7], block[policy_type::r2[j]], - 0x50a28be6, policy_type::s2[j]); - } - std::swap(Y[0], Y[4]); - // round 2 - - for (int j = 16; j < 32; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], block[policy_type::r1[j]], - 0x5a827999, policy_type::s1[j]); - policy_type::transform(Y[4], Y[5], Y[6], Y[7], block[policy_type::r2[j]], - 0x5c4dd124, policy_type::s2[j]); - } - std::swap(Y[1], Y[5]); - // round 3 - - for (int j = 32; j < 48; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], block[policy_type::r1[j]], - 0x6ed9eba1, policy_type::s1[j]); - policy_type::transform(Y[4], Y[5], Y[6], Y[7], block[policy_type::r2[j]], - 0x6d703ef3, policy_type::s2[j]); - } - std::swap(Y[2], Y[6]); - // round 4 - - for (int j = 48; j < 64; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], block[policy_type::r1[j]], - 0x8f1bbcdc, policy_type::s1[j]); - policy_type::transform(Y[4], Y[5], Y[6], Y[7], block[policy_type::r2[j]], - 0x00000000, policy_type::s2[j]); - } - std::swap(Y[3], Y[7]); - - - for (std::size_t i = 0; i < policy_type::state_words; ++i) { - state[i] += Y[i]; - } - } - }; - - template<> - struct ripemd_compressor<320> : public basic_ripemd_compressor<320> { - static void process_block(state_type &state, const block_type &block) { - state_type Y = {0}; - std::copy(state.begin(), state.end(), Y.begin()); - - // round 1 - - for (int j = 0; j < 16; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], Y[4], block[policy_type::r1[j]], - 0x00000000, policy_type::s1[j]); - policy_type::transform(Y[5], Y[6], Y[7], Y[8], Y[9], block[policy_type::r2[j]], - 0x50a28be6, policy_type::s2[j]); - } - std::swap(Y[1], Y[6]); - // round 2 - - for (int j = 16; j < 32; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], Y[4], block[policy_type::r1[j]], - 0x5a827999, policy_type::s1[j]); - policy_type::transform(Y[5], Y[6], Y[7], Y[8], Y[9], block[policy_type::r2[j]], - 0x5c4dd124, policy_type::s2[j]); - } - std::swap(Y[3], Y[8]); - // round 3 - - for (int j = 32; j < 48; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], Y[4], block[policy_type::r1[j]], - 0x6ed9eba1, policy_type::s1[j]); - policy_type::transform(Y[5], Y[6], Y[7], Y[8], Y[9], block[policy_type::r2[j]], - 0x6d703ef3, policy_type::s2[j]); - } - std::swap(Y[0], Y[5]); - // round 4 - - for (int j = 48; j < 64; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], Y[4], block[policy_type::r1[j]], - 0x8f1bbcdc, policy_type::s1[j]); - policy_type::transform(Y[5], Y[6], Y[7], Y[8], Y[9], block[policy_type::r2[j]], - 0x7a6d76e9, policy_type::s2[j]); - } - std::swap(Y[2], Y[7]); - // round 5 - - for (int j = 64; j < 80; ++j) { - policy_type::transform(Y[0], Y[1], Y[2], Y[3], Y[4], block[policy_type::r1[j]], - 0xa953fd4e, policy_type::s1[j]); - policy_type::transform(Y[5], Y[6], Y[7], Y[8], Y[9], block[policy_type::r2[j]], - 0x00000000, policy_type::s2[j]); - } - std::swap(Y[4], Y[9]); - - - for (std::size_t i = 0; i < policy_type::state_words; ++i) { - state[i] += Y[i]; - } - } - }; - - /*! - * @brief Ripemd. Family of configurable hashes, developed as an open alternative to SHA. - * - * @ingroup hashes - * - * @tparam DigestBits - */ - template - class ripemd { - public: - typedef detail::ripemd_policy policy_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = DigestBits; - typedef typename policy_type::digest_type digest_type; - - constexpr static const std::size_t pkcs_id_size = policy_type::pkcs_id_size; - constexpr static const std::size_t pkcs_id_bits = policy_type::pkcs_id_bits; - typedef typename policy_type::pkcs_id_type pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = policy_type::pkcs_id; - constexpr static const std::uint8_t ieee1363_hash_id = policy_type::ieee1363_hash_id; - - struct construction { - struct params_type { - typedef typename policy_type::digest_endian digest_endian; - - constexpr static const std::size_t length_bits = policy_type::length_bits; - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - }; - - typedef merkle_damgard_construction, - detail::merkle_damgard_padding> - type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash>; - }; - - typedef ripemd<128> ripemd128; - typedef ripemd<160> ripemd160; - typedef ripemd<256> ripemd256; - typedef ripemd<320> ripemd320; - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/sha.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/sha.hpp deleted file mode 100644 index 028f4616c6..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/sha.hpp +++ /dev/null @@ -1,86 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_SHA_HPP -#define CRYPTO3_HASH_SHA_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - /*! - * @brief SHA. Initial SHA hashes construction. Not considered to be a - * cryptographically secure primitive lately. - * - * @ingroup hashes - */ - class sha { - public: - typedef detail::sha_policy policy_type; - typedef typename policy_type::block_cipher_type block_cipher_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - struct construction { - struct params_type { - typedef typename policy_type::digest_endian digest_endian; - - constexpr static const std::size_t length_bits = policy_type::length_bits; - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - }; - - typedef merkle_damgard_construction, - detail::merkle_damgard_padding> - type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash; - }; - - typedef sha sha0; - - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_SHA_HPP diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/sha1.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/sha1.hpp deleted file mode 100644 index 4d45c499fb..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/sha1.hpp +++ /dev/null @@ -1,83 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Nikita Kaskov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_SHA1_HPP -#define CRYPTO3_HASH_SHA1_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - /*! - * @brief SHA1. Widely adopted NSA designed hashes function. Starting - * to show significant signs of weakness, and collisions can now be - * generated. Avoid in new designs. - * @ingroup hashes - */ - class sha1 { - public: - typedef detail::sha1_policy policy_type; - typedef typename policy_type::block_cipher_type block_cipher_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - struct construction { - struct params_type { - typedef typename policy_type::digest_endian digest_endian; - - constexpr static const std::size_t length_bits = policy_type::length_bits; - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - }; - - typedef merkle_damgard_construction, - detail::merkle_damgard_padding> - type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash; - }; - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_HASH_SHA1_HPP diff --git a/crypto3/libs/block/include/nil/crypto3/block/shacal2.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/shacal2.hpp similarity index 98% rename from crypto3/libs/block/include/nil/crypto3/block/shacal2.hpp rename to crypto3/libs/hash/include/nil/crypto3/hash/shacal2.hpp index d4c9c25489..8ba97c3de4 100644 --- a/crypto3/libs/block/include/nil/crypto3/block/shacal2.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/shacal2.hpp @@ -26,10 +26,10 @@ #ifndef CRYPTO3_BLOCK_SHACAL2_HPP #define CRYPTO3_BLOCK_SHACAL2_HPP -#include +#include -#include -#include +#include +// #include #include diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/tiger.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/tiger.hpp deleted file mode 100644 index 19a1c8e0fa..0000000000 --- a/crypto3/libs/hash/include/nil/crypto3/hash/tiger.hpp +++ /dev/null @@ -1,129 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Pavel Kharitonov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_HASH_TIGER_HPP -#define CRYPTO3_HASH_TIGER_HPP - -#include -#include - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace hashes { - - template - struct tiger_compressor { - typedef detail::tiger_policy policy_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t state_bits = policy_type::state_bits; - constexpr static const std::size_t state_words = policy_type::state_words; - typedef typename policy_type::state_type state_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - static inline void process_block(state_type &state, const block_type &block) { - - word_type A = state[0], B = state[1], C = state[2]; - block_type input = block; - policy_type::pass(A, B, C, input, 5); - policy_type::mix(input); - policy_type::pass(C, A, B, input, 7); - policy_type::mix(input); - policy_type::pass(B, C, A, input, 9); - - for (size_t j = 3; j != policy_type::passes; ++j) { - policy_type::mix(input); - policy_type::pass(A, B, C, input, 9); - word_type T = A; - A = C; - C = B; - B = T; - } - - state[0] ^= A; - state[1] = B - state[1]; - state[2] += C; - } - }; - - /*! - * @brief Tiger. An older 192-bit hashes function, optimized for 64-bit - * systems. Possibly vulnerable to side channels due to its use of table - * lookups. Prefer Skein-512 or BLAKE2b in new code. - * - * @ingroup hashes - */ - template - class tiger { - public: - typedef detail::tiger_policy policy_type; - - constexpr static const std::size_t word_bits = policy_type::word_bits; - typedef typename policy_type::word_type word_type; - - constexpr static const std::size_t block_bits = policy_type::block_bits; - constexpr static const std::size_t block_words = policy_type::block_words; - typedef typename policy_type::block_type block_type; - - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - typedef typename policy_type::digest_type digest_type; - - constexpr static const std::size_t pkcs_id_size = policy_type::pkcs_id_size; - constexpr static const std::size_t pkcs_id_bits = policy_type::pkcs_id_bits; - typedef typename policy_type::pkcs_id_type pkcs_id_type; - - constexpr static const pkcs_id_type pkcs_id = policy_type::pkcs_id; - - struct construction { - struct params_type { - typedef typename policy_type::digest_endian digest_endian; - - constexpr static const std::size_t length_bits = policy_type::word_bits; - constexpr static const std::size_t digest_bits = policy_type::digest_bits; - }; - - typedef merkle_damgard_construction, - detail::tiger_padding> - type; - }; - - constexpr static detail::stream_processor_type stream_processor = detail::stream_processor_type::Block; - using accumulator_tag = accumulators::tag::hash>; - }; - } // namespace hashes - } // namespace crypto3 -} // namespace nil - -#endif diff --git a/crypto3/libs/hash/include/nil/crypto3/hash/type_traits.hpp b/crypto3/libs/hash/include/nil/crypto3/hash/type_traits.hpp index 03bda51d45..2d99338d15 100644 --- a/crypto3/libs/hash/include/nil/crypto3/hash/type_traits.hpp +++ b/crypto3/libs/hash/include/nil/crypto3/hash/type_traits.hpp @@ -111,12 +111,6 @@ namespace nil { template struct find_group_hash; - template - struct pedersen_to_point; - - template - struct pedersen; - template struct h2f; @@ -129,17 +123,6 @@ namespace nil { template struct is_find_group_hash> : std::integral_constant { }; - template - struct is_pedersen : std::integral_constant { }; - - template - struct is_pedersen> - : std::integral_constant { }; - - template - struct is_pedersen> : std::integral_constant { - }; - template struct is_h2f : std::integral_constant { }; diff --git a/crypto3/libs/hash/test/CMakeLists.txt b/crypto3/libs/hash/test/CMakeLists.txt index dd26cd3dd3..64e3c20bba 100644 --- a/crypto3/libs/hash/test/CMakeLists.txt +++ b/crypto3/libs/hash/test/CMakeLists.txt @@ -12,6 +12,9 @@ cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} ${${CURRENT_PROJECT_NAME}_INTERFACE_LIBRARIES} Boost::unit_test_framework) +set_target_properties(_cm_internal_tests-crypto3-hash-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-crypto3-hash-test REUSE_FROM crypto3_precompiled_headers) + macro(define_hash_test name) set(test_name "hash_${name}_test") @@ -24,7 +27,7 @@ macro(define_hash_test name) ${Boost_INCLUDE_DIRS}) set_target_properties(${test_name} PROPERTIES - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") @@ -44,34 +47,18 @@ macro(define_hash_test name) target_compile_options(${test_name} PRIVATE "-fconstexpr-ops-limit=4294967295") endif() + target_precompile_headers(${test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(TESTS_NAMES - "blake2b" - "crc" "keccak" - "md4" - "md5" "pack" - "ripemd" - "sha" - "sha1" "sha2" "sha3" "static_digest" - "tiger" "poseidon" "hash_to_curve" ) - # "reinforced_concrete") # fails - -if(CRYPTO3_HASH_PEDERSEN) - list(APPEND TESTS_NAMES - pedersen - find_group_hash - h2c - h2f) -endif() foreach(TEST_NAME ${TESTS_NAMES}) define_hash_test(${TEST_NAME}) diff --git a/crypto3/libs/hash/test/blake2b.cpp b/crypto3/libs/hash/test/blake2b.cpp deleted file mode 100644 index b67cb17ad7..0000000000 --- a/crypto3/libs/hash/test/blake2b.cpp +++ /dev/null @@ -1,676 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2019 Aleksey Moskvin -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE blake2b_test - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::accumulators; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::blake2b<224>::construction::type::digest_type) -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::blake2b<256>::construction::type::digest_type) -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::blake2b<384>::construction::type::digest_type) -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::blake2b<512>::construction::type::digest_type) - -template -class fixture { -public: - accumulator_set> acc; - typedef hashes::blake2b hash_t; - virtual ~fixture() { - } -}; - -const char *test_data = TEST_DATA; - -boost::property_tree::ptree string_data(const char *child_name) { - boost::property_tree::ptree root_data; - boost::property_tree::read_json(test_data, root_data); - boost::property_tree::ptree string_data = root_data.get_child(child_name); - - return string_data; -} - -BOOST_AUTO_TEST_SUITE(blake2b_stream_processor_data_driven_algorithm_test_suite) - -BOOST_DATA_TEST_CASE(blake2b_224_string_various_range_value_hash, string_data("data_224"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_224_string_various_itr_value_hash, string_data("data_224"), array_element) { - std::string out = hash>(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_256_string_various_range_value_hash, string_data("data_256"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_256_string_various_itr_value_hash, string_data("data_256"), array_element) { - std::string out = hash>(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_384_string_various_range_value_hash, string_data("data_384"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_384_string_various_itr_value_hash, string_data("data_384"), array_element) { - std::string out = hash>(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_512_string_various_range_value_hash, string_data("data_512"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_512_string_various_itr_value_hash, string_data("data_512"), array_element) { - std::string out = hash>(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(blake2b_stream_processor_data_driven_adaptor_test_suite) - -BOOST_DATA_TEST_CASE(blake2b_224_string_various_range_value_hash, string_data("data_224"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_256_string_various_range_value_hash, string_data("data_256"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_384_string_various_range_value_hash, string_data("data_384"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(blake2b_512_string_various_range_value_hash, string_data("data_512"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(blake2b_stream_processor_test_suite) - -BOOST_AUTO_TEST_CASE(blake2b_224_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::blake2b<224>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("c05d5ea0257c7a4604122b8e99a0093f89d0797ef06a7f0af65a3560", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_224_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::blake2b<224>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("9bd237b02a29e43bdd6738afa5b53ff0eee178d6210b618e4511aec8", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_224_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::blake2b<224>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("f305a410b733771b7c5c8ad1041e356ff1da48c51792dfe319ba286b", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::blake2b<256>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("8928aae63c84d87ea098564d1e03ad813f107add474e56aedd286349c0c03ea4", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::blake2b<256>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::blake2b<256>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("31a65b562925c6ffefdafa0ad830f4e33eff148856c2b4754de273814adf8b85", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::blake2b<384>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "7d40de16ff771d4595bf70cbda0c4ea0a066a6046fa73d34471cd4d93d827d7c" - "94c29399c50de86983af1ec61d5dcef0", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::blake2b<384>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "6f56a82c8e7ef526dfe182eb5212f7db9df1317e57815dbda46083fc30f54ee6" - "c66ba83be64b302d7cba6ce15bb556f4", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::blake2b<384>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "44c3965bd8f02ed299ad52ffb5bba7c448df242073c5520dc091a0cc55d024cd" - "d51569c339d0bf2b6cd746708683a0ef", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::blake2b<512>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34" - "d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::blake2b<512>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1" - "7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::blake2b<512>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "3c26ce487b1c0f062363afa3c675ebdbf5f4ef9bdc022cfbef91e3111cdc2838" - "40d8331fc30a8a0906cff4bcdbcd230c61aaec60fdfad457ed96b709a382359a", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_longmsg_byte1) { - std::array a = { - '\xBE', '\xFA', '\xB5', '\x74', '\x39', '\x6D', '\x7F', '\x8B', '\x67', '\x05', '\xE2', '\xD5', '\xB5', - '\x8B', '\x2C', '\x1C', '\x82', '\x0B', '\xB2', '\x4E', '\x3F', '\x4B', '\xAE', '\x3E', '\x8F', '\xBC', - '\xD3', '\x6D', '\xBF', '\x73', '\x4E', '\xE1', '\x4E', '\x5D', '\x6A', '\xB9', '\x72', '\xAE', '\xDD', - '\x35', '\x40', '\x23', '\x54', '\x66', '\xE8', '\x25', '\x85', '\x0E', '\xE4', '\xC5', '\x12', '\xEA', - '\x97', '\x95', '\xAB', '\xFD', '\x33', '\xF3', '\x30', '\xD9', '\xFD', '\x7F', '\x79', '\xE6', '\x2B', - '\xBB', '\x63', '\xA6', '\xEA', '\x85', '\xDE', '\x15', '\xBE', '\xAE', '\xEA', '\x6F', '\x8D', '\x20', - '\x4A', '\x28', '\x95', '\x60', '\x59', '\xE2', '\x63', '\x2D', '\x11', '\x86', '\x1D', '\xFB', '\x0E', - '\x65', '\xBC', '\x07', '\xAC', '\x8A', '\x15', '\x93', '\x88', '\xD5', '\xC3', '\x27', '\x7E', '\x22', - '\x72', '\x86', '\xF6', '\x5F', '\xF5', '\xE5', '\xB5', '\xAE', '\xC1'}; - hashes::blake2b<224>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("3d6c866ebaa149e0c6ad8ba5e9a685e1ad56d81a00fb99d9020f11c0", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(blake2b_initializer_list_test_suite) - -BOOST_AUTO_TEST_CASE(blake2b_224_shortmsg_byte1) { - // "a" - hashes::blake2b<224>::digest_type d = hash>({'\x61'}); - - BOOST_CHECK_EQUAL("c05d5ea0257c7a4604122b8e99a0093f89d0797ef06a7f0af65a3560", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_224_shortmsg_byte2) { - // "abc" - hashes::blake2b<224>::digest_type d = hash>({'\x61', '\x62', '\x63'}); - - BOOST_CHECK_EQUAL("9bd237b02a29e43bdd6738afa5b53ff0eee178d6210b618e4511aec8", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_224_shortmsg_byte3) { - // "message digest" - hashes::blake2b<224>::digest_type d = - hash>({'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', '\x20', '\x64', '\x69', - '\x67', '\x65', '\x73', '\x74'}); - - BOOST_CHECK_EQUAL("f305a410b733771b7c5c8ad1041e356ff1da48c51792dfe319ba286b", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_shortmsg_byte1) { - // "a" - hashes::blake2b<256>::digest_type d = hash>({'\x61'}); - - BOOST_CHECK_EQUAL("8928aae63c84d87ea098564d1e03ad813f107add474e56aedd286349c0c03ea4", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_shortmsg_byte2) { - // "abc" - hashes::blake2b<256>::digest_type d = hash>({'\x61', '\x62', '\x63'}); - - BOOST_CHECK_EQUAL("bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_shortmsg_byte3) { - // "message digest" - hashes::blake2b<256>::digest_type d = - hash>({'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', '\x20', '\x64', '\x69', - '\x67', '\x65', '\x73', '\x74'}); - - BOOST_CHECK_EQUAL("31a65b562925c6ffefdafa0ad830f4e33eff148856c2b4754de273814adf8b85", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_shortmsg_byte1) { - // "a" - hashes::blake2b<384>::digest_type d = hash>({'\x61'}); - - BOOST_CHECK_EQUAL( - "7d40de16ff771d4595bf70cbda0c4ea0a066a6046fa73d34471cd4d93d827d7c" - "94c29399c50de86983af1ec61d5dcef0", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_shortmsg_byte2) { - // "abc" - hashes::blake2b<384>::digest_type d = hash>({'\x61', '\x62', '\x63'}); - - BOOST_CHECK_EQUAL( - "6f56a82c8e7ef526dfe182eb5212f7db9df1317e57815dbda46083fc30f54ee6" - "c66ba83be64b302d7cba6ce15bb556f4", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::blake2b<384>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "44c3965bd8f02ed299ad52ffb5bba7c448df242073c5520dc091a0cc55d024cd" - "d51569c339d0bf2b6cd746708683a0ef", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_shortmsg_byte1) { - // "a" - hashes::blake2b<512>::digest_type d = hash>({'\x61'}); - - BOOST_CHECK_EQUAL( - "333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34" - "d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_shortmsg_byte2) { - // "abc" - hashes::blake2b<512>::digest_type d = hash>({'\x61', '\x62', '\x63'}); - - BOOST_CHECK_EQUAL( - "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1" - "7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_shortmsg_byte3) { - // "message digest" - hashes::blake2b<512>::digest_type d = - hash>({'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', '\x20', '\x64', '\x69', - '\x67', '\x65', '\x73', '\x74'}); - - BOOST_CHECK_EQUAL( - "3c26ce487b1c0f062363afa3c675ebdbf5f4ef9bdc022cfbef91e3111cdc2838" - "40d8331fc30a8a0906cff4bcdbcd230c61aaec60fdfad457ed96b709a382359a", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_longmsg_byte1) { - hashes::blake2b<224>::digest_type d = hash>({ - '\xBE', '\xFA', '\xB5', '\x74', '\x39', '\x6D', '\x7F', '\x8B', '\x67', '\x05', '\xE2', '\xD5', '\xB5', - '\x8B', '\x2C', '\x1C', '\x82', '\x0B', '\xB2', '\x4E', '\x3F', '\x4B', '\xAE', '\x3E', '\x8F', '\xBC', - '\xD3', '\x6D', '\xBF', '\x73', '\x4E', '\xE1', '\x4E', '\x5D', '\x6A', '\xB9', '\x72', '\xAE', '\xDD', - '\x35', '\x40', '\x23', '\x54', '\x66', '\xE8', '\x25', '\x85', '\x0E', '\xE4', '\xC5', '\x12', '\xEA', - '\x97', '\x95', '\xAB', '\xFD', '\x33', '\xF3', '\x30', '\xD9', '\xFD', '\x7F', '\x79', '\xE6', '\x2B', - '\xBB', '\x63', '\xA6', '\xEA', '\x85', '\xDE', '\x15', '\xBE', '\xAE', '\xEA', '\x6F', '\x8D', '\x20', - '\x4A', '\x28', '\x95', '\x60', '\x59', '\xE2', '\x63', '\x2D', '\x11', '\x86', '\x1D', '\xFB', '\x0E', - '\x65', '\xBC', '\x07', '\xAC', '\x8A', '\x15', '\x93', '\x88', '\xD5', '\xC3', '\x27', '\x7E', '\x22', - '\x72', '\x86', '\xF6', '\x5F', '\xF5', '\xE5', '\xB5', '\xAE', '\xC1'}); - - BOOST_CHECK_EQUAL("3d6c866ebaa149e0c6ad8ba5e9a685e1ad56d81a00fb99d9020f11c0", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(blake2b_accumulator_test_suite) - -BOOST_FIXTURE_TEST_CASE(blake2b_224_accumulator1, fixture<224>) { - // "a" - hashes::blake2b<224>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000000061); - acc(m, accumulators::bits = 8); - hashes::blake2b<224>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("c05d5ea0257c7a4604122b8e99a0093f89d0797ef06a7f0af65a3560", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(blake2b_224_accumulator2, fixture<224>) { - // "abc" - hashes::blake2b<224>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000636261); - acc(m, accumulators::bits = 24); - hashes::blake2b<224>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("9bd237b02a29e43bdd6738afa5b53ff0eee178d6210b618e4511aec8", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(blake2b_256_accumulator1, fixture<256>) { - // "a" - hashes::blake2b<256>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000000061); - acc(m, accumulators::bits = 8); - hashes::blake2b<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("8928aae63c84d87ea098564d1e03ad813f107add474e56aedd286349c0c03ea4", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(blake2b_256_accumulator2, fixture<256>) { - // "abc" - hashes::blake2b<256>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000636261); - acc(m, accumulators::bits = 24); - hashes::blake2b<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(blake2b_384_accumulator1, fixture<384>) { - // "a" - hashes::blake2b<384>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000000061); - acc(m, accumulators::bits = 8); - hashes::blake2b<384>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL( - "7d40de16ff771d4595bf70cbda0c4ea0a066a6046fa73d34471cd4d93d827d7c" - "94c29399c50de86983af1ec61d5dcef0", - std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(blake2b_384_accumulator2, fixture<384>) { - // "abc" - hashes::blake2b<384>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000636261); - acc(m, accumulators::bits = 24); - hashes::blake2b<384>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL( - "6f56a82c8e7ef526dfe182eb5212f7db9df1317e57815dbda46083fc30f54ee6" - "c66ba83be64b302d7cba6ce15bb556f4", - std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(blake2b_512_accumulator1, fixture<512>) { - // "a" - hashes::blake2b<512>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000000061); - acc(m, accumulators::bits = 8); - hashes::blake2b<512>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL( - "333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34" - "d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c", - std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(blake2b_512_accumulator2, fixture<512>) { - // "abc" - hashes::blake2b<512>::block_type m = {{}}; - m[0] = UINT64_C(0x0000000000636261); - acc(m, accumulators::bits = 24); - hashes::blake2b<512>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL( - "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1" - "7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_224_preprocessor1) { - accumulator_set> acc; - hashes::blake2b<224>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("836cc68931c2e4e3e838602eca1902591d216837bafddfe6f0c8cb07", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_224_preprocessor2) { - accumulator_set> acc; - - acc(UINT64_C(0x0000000000000061), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000062), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000063), accumulators::bits = 8); - - hashes::blake2b<224>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("9bd237b02a29e43bdd6738afa5b53ff0eee178d6210b618e4511aec8", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_preprocessor1) { - accumulator_set> acc; - hashes::blake2b<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_256_preprocessor2) { - accumulator_set> acc; - - acc(UINT64_C(0x0000000000000061), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000062), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000063), accumulators::bits = 8); - - hashes::blake2b<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_preprocessor1) { - accumulator_set> acc; - hashes::blake2b<384>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL( - "b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d7978c6fd324" - "4a6caf0498812673c5e05ef583825100", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_384_preprocessor2) { - accumulator_set> acc; - - acc(UINT64_C(0x0000000000000061), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000062), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000063), accumulators::bits = 8); - - hashes::blake2b<384>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL( - "6f56a82c8e7ef526dfe182eb5212f7db9df1317e57815dbda46083fc30f54ee6" - "c66ba83be64b302d7cba6ce15bb556f4", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_preprocessor1) { - accumulator_set> acc; - hashes::blake2b<512>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL( - "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419" - "d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(blake2b_512_preprocessor2) { - accumulator_set> acc; - - acc(UINT64_C(0x0000000000000061), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000062), accumulators::bits = 8); - acc(UINT64_C(0x0000000000000063), accumulators::bits = 8); - - hashes::blake2b<512>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL( - "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1" - "7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/hash/test/crc.cpp b/crypto3/libs/hash/test/crc.cpp deleted file mode 100644 index c055abd0b0..0000000000 --- a/crypto3/libs/hash/test/crc.cpp +++ /dev/null @@ -1,134 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// -// Distributed under the Boost Software License, Version 1.0 -// See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE crc_test - -#include - -#include -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::hashes; -using namespace nil::crypto3::accumulators; -using nil::crypto3::detail::largest_prime; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream&, P const&) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -static const std::unordered_map string_data = { - {"", "00000000"}, - {"a", "e8b7be43"}, - {"abc", "352441c2"}, - {"message digest", "20159d7f"}, - {"abcdefghijklmnopqrstuvwxyz", "4c2750bd"}, - {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "1fc2e6d2"}, - {"12345678901234567890123456789012345678901234567890123456789012345678901234567890", "7ca94a72"}}; - -static const std::unordered_map> byte_data = { - {"", {0x00, 0x00, 0x00, 0x00}}, - {"a", {0xe8, 0xb7, 0xbe, 0x43}}, - {"abc", {0x35, 0x24, 0x41, 0xc2}}, - {"message digest", {0x20, 0x15, 0x9d, 0x7f}}, - {"abcdefghijklmnopqrstuvwxyz", {0x4c, 0x27, 0x50, 0xbd}}, - {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", {0x1f, 0xc2, 0xe6, 0xd2}}, - {"12345678901234567890123456789012345678901234567890123456789012345678901234567890", {0x7c, 0xa9, 0x4a, 0x72}}}; - -BOOST_AUTO_TEST_SUITE(crc_hash_test_suite) - -BOOST_DATA_TEST_CASE(crc_range_itr_hash, boost::unit_test::data::make(byte_data), array_element) { - std::vector out; - hash(array_element.first, std::back_inserter(out)); - - BOOST_CHECK_EQUAL(out, array_element.second); -} - -BOOST_DATA_TEST_CASE(crc_various_range_value_hash, boost::unit_test::data::make(byte_data), array_element) { - std::vector out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second); -} - -BOOST_DATA_TEST_CASE(crc_various_itr_value_hash, boost::unit_test::data::make(byte_data), array_element) { - std::vector out = hash(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second); -} - -BOOST_DATA_TEST_CASE(crc_iterator_itr_hash, boost::unit_test::data::make(byte_data), array_element) { - std::vector out; - hash(array_element.first.begin(), array_element.first.end(), std::back_inserter(out)); - - BOOST_CHECK_EQUAL(out, array_element.second); -} - -BOOST_DATA_TEST_CASE(crc_string_various_range_value_hash, boost::unit_test::data::make(string_data), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second); -} - -BOOST_DATA_TEST_CASE(crc_string_various_itr_value_hash, boost::unit_test::data::make(string_data), array_element) { - std::string out = hash(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second); -} - -BOOST_AUTO_TEST_CASE(crc_stateful_hash1) { - accumulator_set acc; - for (unsigned i = 0; i < 1000000; ++i) { - acc('a'); - } - typename hashes::crc32_png::digest_type d = extract::hash(acc); - std::cout << d << "\n"; - BOOST_CHECK_EQUAL(d, "dc25bfbc"); -} - -BOOST_AUTO_TEST_CASE(crc_stateful_hash2) { - accumulator_set acc; - std::string s(1000, 'a'); - for (unsigned i = 0; i < 1000000; ++i) { - hash(s, acc); - } - crc32_png::digest_type d = extract::hash(acc); - std::cout << d << "\n"; - BOOST_CHECK_EQUAL(d, "a7943e77"); -} - -BOOST_AUTO_TEST_CASE(crc_stateful_hash3) { - accumulator_set acc; - for (unsigned i = 0; i < 1000000000; ++i) { - acc('a'); - } - crc32_png::digest_type d = extract::hash(acc); - std::cout << d << "\n"; - BOOST_CHECK_EQUAL(d, "a7943e77"); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/hash/test/data/blake2b.json b/crypto3/libs/hash/test/data/blake2b.json deleted file mode 100644 index 95d50ba93b..0000000000 --- a/crypto3/libs/hash/test/data/blake2b.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "data_224": { - "a": "c05d5ea0257c7a4604122b8e99a0093f89d0797ef06a7f0af65a3560", - "abc": "9bd237b02a29e43bdd6738afa5b53ff0eee178d6210b618e4511aec8", - "message digest": "f305a410b733771b7c5c8ad1041e356ff1da48c51792dfe319ba286b", - "abcdefghijklmnopqrstuvwxyz": "7a04e26d7180b9c5e494558dab986f7e8243891a4bb50c45201a16c9", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "2634ceb48faf94cd6a424287aab968ce3fef39ee5d841760aa5b3164", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "6116b617e7e51e0032dbd2b3db8b6004b15bda4916b19f2737d95e43" - }, - "data_256": { - "a": "8928aae63c84d87ea098564d1e03ad813f107add474e56aedd286349c0c03ea4", - "abc": "bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319", - "message digest": "31a65b562925c6ffefdafa0ad830f4e33eff148856c2b4754de273814adf8b85", - "abcdefghijklmnopqrstuvwxyz": "117ad6b940f5e8292c007d9c7e7350cd33cf85b5887e8da71c7957830f536e7c", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "5f7a93da9c5621583f22e49e8e91a40cbba37536622235a380f434b9f68e49c4", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "63f74bf0df57c4fd10f949edbe1cb7f6e374ecab882616381d6d999fda748b93" - }, - "data_384": { - "a": "7d40de16ff771d4595bf70cbda0c4ea0a066a6046fa73d34471cd4d93d827d7c94c29399c50de86983af1ec61d5dcef0", - "abc": "6f56a82c8e7ef526dfe182eb5212f7db9df1317e57815dbda46083fc30f54ee6c66ba83be64b302d7cba6ce15bb556f4", - "message digest": "44c3965bd8f02ed299ad52ffb5bba7c448df242073c5520dc091a0cc55d024cdd51569c339d0bf2b6cd746708683a0ef", - "abcdefghijklmnopqrstuvwxyz": "5cad60ce23b9dc62eabdd149a16307ef916e0637506fa10cf8c688430da6c978a0cb7857fd138977bd281e8cfd5bfd1f", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "5643daabfc919190d373a3d58935804d731b58812f30184f98793f7321d0cb34bb41b217fabce6bdf28ca6be1c923b81", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "b4975ee19a4f559e3d3497df0db1e5c6b79988b7d7e85c1f064ceaa72a418c484e4418b775c77af8d2651872547c8e9f" - }, - "data_512": { - "a": "333fcb4ee1aa7c115355ec66ceac917c8bfd815bf7587d325aec1864edd24e34d5abe2c6b1b5ee3face62fed78dbef802f2a85cb91d455a8f5249d330853cb3c", - "abc": "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", - "message digest": "3c26ce487b1c0f062363afa3c675ebdbf5f4ef9bdc022cfbef91e3111cdc283840d8331fc30a8a0906cff4bcdbcd230c61aaec60fdfad457ed96b709a382359a", - "abcdefghijklmnopqrstuvwxyz": "c68ede143e416eb7b4aaae0d8e48e55dd529eafed10b1df1a61416953a2b0a5666c761e7d412e6709e31ffe221b7a7a73908cb95a4d120b8b090a87d1fbedb4c", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "7285ff3e8bd768d69be62b3bf18765a325917fa9744ac2f582a20850bc2b1141ed1b3e4528595acc90772bdf2d37dc8a47130b44f33a02e8730e5ad8e166e888", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "99964802e5c25e703722905d3fb80046b6bca698ca9e2cc7e49b4fe1fa087c2edf0312dfbb275cf250a1e542fd5dc2edd313f9c491127c2e8c0c9b24168e2d50" - } -} \ No newline at end of file diff --git a/crypto3/libs/hash/test/data/md4.json b/crypto3/libs/hash/test/data/md4.json deleted file mode 100644 index 318d1d40f5..0000000000 --- a/crypto3/libs/hash/test/data/md4.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "a": "bde52cb31de33e46245e05fbdbd6fb24", - "abc": "a448017aaf21d8525fc10ae87aa6729d", - "message digest": "d9130a8164549fe818874806e1c7014b", - "abcdefghijklmnopqrstuvwxyz": "d79e1c308aa5bbcdeea8ed63df412da9", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "043f8582f241db351ce627e153e7f0e4", - "12345678901234567890123456789012345678901234567890123456789012345678901234567890": "e33b4ddc9c38f2199c3e7b164fcc0536" -} \ No newline at end of file diff --git a/crypto3/libs/hash/test/data/md5.json b/crypto3/libs/hash/test/data/md5.json deleted file mode 100644 index 02c4049b18..0000000000 --- a/crypto3/libs/hash/test/data/md5.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "a": "0cc175b9c0f1b6a831c399e269772661", - "abc": "900150983cd24fb0d6963f7d28e17f72", - "message digest": "f96b697d7cb7938d525a2f31aaf161d0", - "abcdefghijklmnopqrstuvwxyz": "c3fcd3d76192e4007dfb496cca67e13b", - "The quick brown fox jumped over the lazy dog's back": "e38ca1d920c4b8b8d3946b2c72f01680", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "8215ef0796a20bcaaae116d3876c664a", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "d174ab98d277d9f5a5611c2c9f419d9f", - "12345678901234567890123456789012345678901234567890123456789012345678901234567890": "57edf4a22be3c955ac49da2e2107b67a" -} \ No newline at end of file diff --git a/crypto3/libs/hash/test/data/ripemd.json b/crypto3/libs/hash/test/data/ripemd.json deleted file mode 100644 index 170fd39016..0000000000 --- a/crypto3/libs/hash/test/data/ripemd.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "data_128": { - "a": "86be7afa339d0fc7cfc785e72f578d33", - "abc": "c14a12199c66e4ba84636b0f69144c77", - "message digest": "9e327b3d6e523062afc1132d7df9d1b8", - "abcdefghijklmnopqrstuvwxyz": "fd2aa607f71dc8f510714922b371834e", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "a1aa0689d0fafa2ddc22e88b49133a06", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "d1e959eb179c911faea4624c60c5c702" - }, - "data_160": { - "a": "0bdc9d2d256b3ee9daae347be6f4dc835a467ffe", - "abc": "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", - "message digest": "5d0689ef49d2fae572b881b123a85ffa21595f36", - "abcdefghijklmnopqrstuvwxyz": "f71c27109c692c1b56bbdceb5b9d2865b3708dbc", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "12a053384a9c0c88e405a06c27dcf49ada62eb2b", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "b0e20b6e3116640286ed3a87a5713079b21f5189" - }, - "data_256": { - "a": "f9333e45d857f5d90a91bab70a1eba0cfb1be4b0783c9acfcd883a9134692925", - "abc": "afbd6e228b9d8cbbcef5ca2d03e6dba10ac0bc7dcbe4680e1e42d2e975459b65", - "message digest": "87e971759a1ce47a514d5c914c392c9018c7c46bc14465554afcdf54a5070c0e", - "abcdefghijklmnopqrstuvwxyz": "649d3034751ea216776bf9a18acc81bc7896118a5197968782dd1fd97d8d5133", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "3843045583aac6c8c8d9128573e7a9809afb2a0f34ccc36ea9e72f16f6368e3f", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "5740a408ac16b720b84424ae931cbb1fe363d1d0bf4017f1a89f7ea6de77a0b8" - }, - "data_320": { - "a": "ce78850638f92658a5a585097579926dda667a5716562cfcf6fbe77f63542f99b04705d6970dff5d", - "abc": "de4c01b3054f8930a79d09ae738e92301e5a17085beffdc1b8d116713e74f82fa942d64cdbc4682d", - "message digest": "3a8e28502ed45d422f68844f9dd316e7b98533fa3f2a91d29f84d425c88d6b4eff727df66a7c0197", - "abcdefghijklmnopqrstuvwxyz": "cabdb1810b92470a2093aa6bce05952c28348cf43ff60841975166bb40ed234004b8824463e6b009", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "d034a7950cf722021ba4b84df769a5de2060e259df4c9bb4a4268c0e935bbc7470a969c9d072a1ac", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "ed544940c86d67f250d232c30b7b3e5770e0c60c8cb9a4cafe3b11388af9920e1b99230b843c86a4" - } -} \ No newline at end of file diff --git a/crypto3/libs/hash/test/data/sha.json b/crypto3/libs/hash/test/data/sha.json deleted file mode 100644 index bb7f0f3e1d..0000000000 --- a/crypto3/libs/hash/test/data/sha.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "abc": "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "d2516ee1acfa5baf33dfc1c471e438449ef134c8" -} \ No newline at end of file diff --git a/crypto3/libs/hash/test/data/sha1.json b/crypto3/libs/hash/test/data/sha1.json deleted file mode 100644 index 3fdfbcd558..0000000000 --- a/crypto3/libs/hash/test/data/sha1.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "a": "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", - "abc": "a9993e364706816aba3e25717850c26c9cd0d89d", - "message digest": "c12252ceda8be8994d5fa0290a47231c1d16aae3", - "abcdefghijklmnopqrstuvwxyz": "32d10c7b8cf96570ca04ce37f2a19d84240d3a89", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "84983e441c3bd26ebaae4aa1f95129e5e54670f1", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "761c457bf73b14d27e9e9265c46f4b4dda11f940", - "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu": "a49b2446a02c645bf419f995b67091253a04a259" -} \ No newline at end of file diff --git a/crypto3/libs/hash/test/data/tiger.json b/crypto3/libs/hash/test/data/tiger.json deleted file mode 100644 index 1f7023738c..0000000000 --- a/crypto3/libs/hash/test/data/tiger.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "data_192": { - "a": "77befbef2e7ef8ab2ec8f93bf587a7fc613e247f5f247809", - "abc": "2aab1484e8c158f2bfb8c5ff41b57a525129131c957b5f93", - "message digest": "d981f8cb78201a950dcf3048751e441c517fca1aa55a29f6", - "abcdefghijklmnopqrstuvwxyz": "1714a472eee57d30040412bfcc55032a0b11602ff37beee9", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq": "0f7bf9a19b9c58f2b7610df7e84f0ac3a71c631e7b53f78e", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789": "8dcea680a17583ee502ba38a3c368651890ffbccdc49a8cc", - "12345678901234567890123456789012345678901234567890123456789012345678901234567890": "1c14795529fd9f207a958f84c52f11e887fa0cabdfd91bfd" - } -} \ No newline at end of file diff --git a/crypto3/libs/hash/test/h2f.cpp b/crypto3/libs/hash/test/h2f.cpp index 1046b2479f..79eb2ed5dc 100644 --- a/crypto3/libs/hash/test/h2f.cpp +++ b/crypto3/libs/hash/test/h2f.cpp @@ -45,43 +45,6 @@ using namespace nil::crypto3; using namespace nil::crypto3::algebra; -template -void print_field_element(std::ostream &os, const typename fields::detail::element_fp &e) { - std::cout << e.data << std::endl; -} - -template -void print_field_element(std::ostream &os, const typename fields::detail::element_fp2 &e) { - std::cout << e.data[0].data << ", " << e.data[1].data << std::endl; -} - -namespace boost { - namespace test_tools { - namespace tt_detail { - template - struct print_log_value> { - void operator()(std::ostream &os, typename fields::detail::element_fp const &e) { - print_field_element(os, e); - } - }; - - template - struct print_log_value> { - void operator()(std::ostream &os, typename fields::detail::element_fp2 const &e) { - print_field_element(os, e); - } - }; - - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - template typename std::enable_if::value>::type check_hash_to_field_ro(const std::string &msg_str, const typename Hash::digest_type &result) { diff --git a/crypto3/libs/hash/test/hash_to_curve.cpp b/crypto3/libs/hash/test/hash_to_curve.cpp index f732f5e545..69c012f5d2 100644 --- a/crypto3/libs/hash/test/hash_to_curve.cpp +++ b/crypto3/libs/hash/test/hash_to_curve.cpp @@ -36,8 +36,6 @@ #include #include -#include - #include #include @@ -49,7 +47,6 @@ #include #include -using namespace boost::multiprecision; using namespace nil::crypto3; using namespace nil::crypto3::algebra; using namespace nil::crypto3::algebra::curves::detail; diff --git a/crypto3/libs/hash/test/md4.cpp b/crypto3/libs/hash/test/md4.cpp deleted file mode 100644 index 96b3945dbd..0000000000 --- a/crypto3/libs/hash/test/md4.cpp +++ /dev/null @@ -1,252 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE md4_test - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::accumulators; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::md4::construction::type::digest_type) - -class fixture { -public: - accumulator_set acc; - virtual ~fixture() { - } -}; - -const char *test_data = TEST_DATA; - -boost::property_tree::ptree string_data() { - boost::property_tree::ptree string_data; - boost::property_tree::read_json(test_data, string_data); - - return string_data; -} - -BOOST_AUTO_TEST_SUITE(md4_stream_processor_data_driven_algorithm_test_suite) - -BOOST_DATA_TEST_CASE(md4_string_various_range_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(md4_string_various_itr_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(md4_stream_processor_data_driven_adaptor_test_suite) - -BOOST_DATA_TEST_CASE(md4_string_various_range_value_hash, string_data(), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(md4_stream_processor_test_suite) - -BOOST_AUTO_TEST_CASE(md4_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::md4::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("bde52cb31de33e46245e05fbdbd6fb24", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(md4_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::md4::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("a448017aaf21d8525fc10ae87aa6729d", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(md4_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::md4::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("d9130a8164549fe818874806e1c7014b", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(md4_accumulator_test_suite) - -BOOST_FIXTURE_TEST_CASE(md4_accumulator1, fixture) { - // "a" - hashes::md4::block_type m = {{}}; - m[0] = 0x00000061; - acc(m, accumulators::bits = 8); - hashes::md4::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("bde52cb31de33e46245e05fbdbd6fb24", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(md4_accumulator2, fixture) { - // "abc" - hashes::md4::block_type m = {{}}; - m[0] = 0x00636261; - acc(m, accumulators::bits = 24); - hashes::md4::construction::type::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("a448017aaf21d8525fc10ae87aa6729d", std::to_string(s)); -} - -BOOST_FIXTURE_TEST_CASE(md4_accumulator3, fixture) { - // 80 times of "a" - hashes::md4::block_type m1 = {{0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x00010261, 0x67283609}}; - acc(m1, accumulators::bits = 14 * 32 + 8); - - hashes::md4::digest_type s = extract::hash(acc); - - BOOST_CHECK_EQUAL("872097e6f78e3b53f890459d03bc6fb7", std::to_string(s).data()); - - hashes::md4::block_type m2 = {{0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x00616161, 0x82934724, - 0xa0a93453, 0x293c203d, 0x6e6f7071, 0x6f707172, 0x70717273, 0x71727374, 0x72737475, - 0x00000000, 0x00000000}}; - - acc(m2, accumulators::bits = 6 * 32 - 8); - - s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("721a93b051049c47487b06a59acc7d64", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(md4_preprocessor1) { - accumulator_set acc; - hashes::md4::construction::type::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("31d6cfe0d16ae931b73c59d7e0c089c0", std::to_string(s)); -} - -BOOST_AUTO_TEST_CASE(md4_preprocessor2) { - accumulator_set acc; - acc(0x00000061, accumulators::bits = 8); - acc(0x00000062, accumulators::bits = 8); - acc(0x00000063, accumulators::bits = 8); - - hashes::md4::construction::type::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("a448017aaf21d8525fc10ae87aa6729d", std::to_string(s)); -} - -BOOST_AUTO_TEST_CASE(md4_preprocessor3) { - // million repetitions of "a" - accumulator_set acc; - for (unsigned i = 0; i < 1000000; ++i) { - acc(0x00000061, accumulators::bits = 8); - } - hashes::md4::construction::type::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("bbce80cc6bb65e5c6745e30d4eeca9a4", std::to_string(s)); -} - -BOOST_AUTO_TEST_CASE(md4_preprocessor4) { - // 8 repetitions of "1234567890" - accumulator_set acc; - for (unsigned i = 0; i < 8; ++i) { - acc(0x00000031, accumulators::bits = 8); - acc(0x00000032, accumulators::bits = 8); - acc(0x00000033, accumulators::bits = 8); - acc(0x00000034, accumulators::bits = 8); - acc(0x00000035, accumulators::bits = 8); - acc(0x00000036, accumulators::bits = 8); - acc(0x00000037, accumulators::bits = 8); - acc(0x00000038, accumulators::bits = 8); - acc(0x00000039, accumulators::bits = 8); - acc(0x00000030, accumulators::bits = 8); - } - hashes::md4::construction::type::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("e33b4ddc9c38f2199c3e7b164fcc0536", std::to_string(s)); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/hash/test/md5.cpp b/crypto3/libs/hash/test/md5.cpp deleted file mode 100644 index 2d5b4da3b9..0000000000 --- a/crypto3/libs/hash/test/md5.cpp +++ /dev/null @@ -1,252 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// Copyright (c) 2020 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE md5_test - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::accumulators; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::md5::digest_type) - -class fixture { -public: - accumulator_set acc; - virtual ~fixture() { - } -}; - -const char *test_data = TEST_DATA; - -boost::property_tree::ptree string_data() { - boost::property_tree::ptree string_data; - boost::property_tree::read_json(test_data, string_data); - - return string_data; -} - -BOOST_AUTO_TEST_SUITE(md5_stream_processor_data_driven_algorithm_test_suite) - -BOOST_DATA_TEST_CASE(md5_string_various_range_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(md5_string_various_itr_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(md5_stream_processor_data_driven_adaptor_test_suite) - -BOOST_DATA_TEST_CASE(md5_string_various_range_value_hash, string_data(), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(md5_stream_processor_test_suite) - -BOOST_AUTO_TEST_CASE(md5_shortmsg_byte1) { - // echo -n "a" | md5sum - std::array a = {'\x61'}; - hashes::md5::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("0cc175b9c0f1b6a831c399e269772661", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(md5_shortmsg_byte2) { - // echo -n "abc" | md5sum - std::array a = {'\x61', '\x62', '\x63'}; - hashes::md5::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("900150983cd24fb0d6963f7d28e17f72", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(md5_shortmsg_byte3) { - // echo -n "message digest" | md5sum - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::md5::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("f96b697d7cb7938d525a2f31aaf161d0", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(md5_accumulator_test_suite) - -BOOST_FIXTURE_TEST_CASE(md5_accumulator1, fixture) { - // echo -n "a" | md5sum - hashes::md5::block_type m = {{}}; - m[0] = 0x00000061; - acc(m, accumulators::bits = 8); - hashes::md5::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("0cc175b9c0f1b6a831c399e269772661", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(md5_accumulator2, fixture) { - // echo -n "abc" | md5sum - hashes::md5::block_type m = {{}}; - m[0] = 0x00636261; - acc(m, accumulators::bits = 24); - hashes::md5::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("900150983cd24fb0d6963f7d28e17f72", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(md5_accumulator3, fixture) { - // 80 times of \xa3 - hashes::md5::block_type m1 = {{0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, - 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, - 0x000102a3, 0x67283609}}; - acc(m1, accumulators::bits = 14 * 32 + 8); - - hashes::md5::digest_type s = extract::hash(acc); - - BOOST_CHECK_EQUAL("2d8dc29362bb044de17c01817e0b6808", std::to_string(s).data()); - - hashes::md5::block_type m2 = {{0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0xa3a3a3a3, 0x00a3a3a3, 0x82934724, - 0xa0a93453, 0x293c203d, 0x6e6f7071, 0x6f707172, 0x70717273, 0x71727374, 0x72737475, - 0x00000000, 0x00000000}}; - - acc(m2, accumulators::bits = 6 * 32 - 8); - - s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("4229f60b21858cbd30d41b3ad26cb274", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(md5_preprocessor1) { - accumulator_set acc; - hashes::md5::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("d41d8cd98f00b204e9800998ecf8427e", std::to_string(s)); -} - -BOOST_AUTO_TEST_CASE(md5_preprocessor2) { - accumulator_set acc; - acc(0x00000061, accumulators::bits = 8); - acc(0x00000062, accumulators::bits = 8); - acc(0x00000063, accumulators::bits = 8); - - hashes::md5::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("900150983cd24fb0d6963f7d28e17f72", std::to_string(s)); -} - -BOOST_AUTO_TEST_CASE(md5_preprocessor3) { - // perl -e 'for (1..1000000) { print "a"; }' | md5sum - accumulator_set acc; - for (unsigned i = 0; i < 1000000; ++i) { - acc(0x00000061, accumulators::bits = 8); - } - hashes::md5::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("7707d6ae4e027c70eea2a935c2296f21", std::to_string(s)); -} - -BOOST_AUTO_TEST_CASE(md5_preprocessor4) { - // perl -e 'for (1..8) { print "1234567890"; }' | md5sum - accumulator_set acc; - for (unsigned i = 0; i < 8; ++i) { - acc(0x00000031, accumulators::bits = 8); - acc(0x00000032, accumulators::bits = 8); - acc(0x00000033, accumulators::bits = 8); - acc(0x00000034, accumulators::bits = 8); - acc(0x00000035, accumulators::bits = 8); - acc(0x00000036, accumulators::bits = 8); - acc(0x00000037, accumulators::bits = 8); - acc(0x00000038, accumulators::bits = 8); - acc(0x00000039, accumulators::bits = 8); - acc(0x00000030, accumulators::bits = 8); - } - hashes::md5::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("57edf4a22be3c955ac49da2e2107b67a", std::to_string(s)); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/hash/test/pedersen.cpp b/crypto3/libs/hash/test/pedersen.cpp deleted file mode 100644 index 5fd4182883..0000000000 --- a/crypto3/libs/hash/test/pedersen.cpp +++ /dev/null @@ -1,182 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Ilias Khairullin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE hash_find_group_hash_test - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::algebra; - -BOOST_AUTO_TEST_SUITE(hash_pedersen_manual_test_suite) - -BOOST_AUTO_TEST_CASE(hash_pedersen_jubjub_sha256_default_params_manual_test) { - using hash_to_curve_type = hashes::pedersen_to_point<>; - using hash_type = hashes::pedersen<>; - using hash_acc_type = nil::crypto3::accumulator_set; - - std::vector input = {0, 0, 0, 1, 1, 1}; - typename hash_to_curve_type::group_value_type expected = typename hash_to_curve_type::group_value_type( - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "3669431847238482802904025485408296241776002230868041345055738963615665974946"), - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "27924821127213629235056488929093463445821551452792195607066067950495472725010")); - typename hash_to_curve_type::group_value_type point = hash(input); - std::vector point_bits = hash(input); - std::vector expected_bits = { - 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, - 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, - 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, - 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}; - BOOST_CHECK_EQUAL(expected, point); - BOOST_CHECK(expected_bits == point_bits); - - input = {0, 0, 0, 1, 1}; - expected = typename hash_to_curve_type::group_value_type( - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "36263379031273262448220672699212876513597479199804632409115456999776988098218"), - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "31510484483269042758896724536623472863781228578271767290815193389100113348921")); - point = hash(input); - point_bits = static_cast>(hash(input)); - expected_bits = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, - 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, - 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, - 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, - 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, - 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1}; - BOOST_CHECK_EQUAL(expected, point); - BOOST_CHECK(expected_bits == point_bits); - - input = {0, 0, 1}; - expected = typename hash_to_curve_type::group_value_type( - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "37613883148175089126541491300600635192159391899451195953263717773938227311808"), - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "52287259411977570791304693313354699485314647509298698724706688571292689216990")); - point = hash(input); - point_bits = static_cast>(hash(input)); - expected_bits = {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, - 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, - 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, - 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, - 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1}; - BOOST_CHECK_EQUAL(expected, point); - BOOST_CHECK(expected_bits == point_bits); - - input = {0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, - 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, - 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, - 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, - 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1}; - expected = typename hash_to_curve_type::group_value_type( - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "42176130776060636907007595971304534904965322197894055434176666599102076910022"), - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "41298132615767455442973386625334423316246314118050839847545855695501416927077")); - point = hash(input); - point_bits = static_cast>(hash(input)); - expected_bits = {0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, - 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, - 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, - 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, - 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, - 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1}; - BOOST_CHECK_EQUAL(expected, point); - BOOST_CHECK(expected_bits == point_bits); - - input = {0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, - 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, - 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, - 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, - 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1}; - point_bits = static_cast>(hash(input)); - expected_bits = {1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, - 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, - 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, - 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, - 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, - 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, - 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, - 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0}; - BOOST_CHECK(expected_bits == point_bits); - - input.resize(3 * 63 * 20); - for (std::size_t i = 0; i < input.size(); i++) { - input[i] = std::vector {0, 0, 1}[i % 3]; - } - expected = typename hash_to_curve_type::group_value_type( - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "16831926627213193043296678235139527332739870606672735560230973395062624230202"), - typename hash_to_curve_type::group_value_type::field_type::integral_type( - "29758113761493087483326459667018939508613372210858382541334106957041082715241")); - point = hash(input); - point_bits = static_cast>(hash(input)); - expected_bits = {0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, - 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, - 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, - 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, - 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, - 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, - 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, - 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0}; - BOOST_CHECK_EQUAL(expected, point); - BOOST_CHECK(expected_bits == point_bits); - - hash_acc_type acc; - hash(input.begin(), input.begin() + input.size() / 2, acc); - hash(input.begin() + input.size() / 2, input.end(), acc); - point_bits = nil::crypto3::accumulators::extract::hash(acc); - BOOST_CHECK(expected_bits == point_bits); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/hash/test/poseidon.cpp b/crypto3/libs/hash/test/poseidon.cpp index 55f5b4ba0d..2e9e596023 100644 --- a/crypto3/libs/hash/test/poseidon.cpp +++ b/crypto3/libs/hash/test/poseidon.cpp @@ -105,110 +105,110 @@ BOOST_AUTO_TEST_SUITE(poseidon_tests) // We have NO TESTS for Vesta Field so far, since Mina code doesn't have tests and test vectors for it. BOOST_AUTO_TEST_CASE(poseidon_kimchi_test_0) { test_mina_poseidon( - {}, 0x2FADBE2852044D028597455BC2ABBD1BC873AF205DFABB8A304600F3E09EEBA8_cppui_modular254); + {}, 0x2FADBE2852044D028597455BC2ABBD1BC873AF205DFABB8A304600F3E09EEBA8_big_uint254); } BOOST_AUTO_TEST_CASE(poseidon_kimchi_test_1) { test_mina_poseidon( - {0x36FB00AD544E073B92B4E700D9C49DE6FC93536CAE0C612C18FBE5F6D8E8EEF2_cppui_modular254}, - 0x3D4F050775295C04619E72176746AD1290D391D73FF4955933F9075CF69259FB_cppui_modular254 + {0x36FB00AD544E073B92B4E700D9C49DE6FC93536CAE0C612C18FBE5F6D8E8EEF2_big_uint254}, + 0x3D4F050775295C04619E72176746AD1290D391D73FF4955933F9075CF69259FB_big_uint254 ); } // works up to this BOOST_AUTO_TEST_CASE(poseidon_kimchi_test_2) { test_mina_poseidon( - {0x3793E30AC691700012BAF26BB813D6D70BD379BEED8050A1DEEE3C188F1C3FBD_cppui_modular254, - 0x2FC4C98E50E0B1AAE6ECB468E28C0B7D80A7E0EEC7136DB0BA0677B84AF0E465_cppui_modular254}, - 0x336C73D08AD408CEB7D1264867096F0817A1D0558B313312A1207602F23624FE_cppui_modular254 + {0x3793E30AC691700012BAF26BB813D6D70BD379BEED8050A1DEEE3C188F1C3FBD_big_uint254, + 0x2FC4C98E50E0B1AAE6ECB468E28C0B7D80A7E0EEC7136DB0BA0677B84AF0E465_big_uint254}, + 0x336C73D08AD408CEB7D1264867096F0817A1D0558B313312A1207602F23624FE_big_uint254 ); } BOOST_AUTO_TEST_CASE(poseidon_kimchi_test_3) { test_mina_poseidon( - {0x0024FB5773CAC987CF3A17DDD6134BA12D3E1CA4F6C43D3695347747CE61EAF5_cppui_modular254, - 0x18E0ED2B46ED1EC258DF721A1D3145B0AA6ABDD02EE851A14B8B659CF47385F2_cppui_modular254, - 0x1A842A688E600F012637FE181292F70C4347B5AE0D9EA9CE7CF18592C345CF73_cppui_modular254}, - 0x3F4B0EABB64E025F920457AF8D090A9F6472CAE11F3D62A749AF544A44941B9B_cppui_modular254); + {0x0024FB5773CAC987CF3A17DDD6134BA12D3E1CA4F6C43D3695347747CE61EAF5_big_uint254, + 0x18E0ED2B46ED1EC258DF721A1D3145B0AA6ABDD02EE851A14B8B659CF47385F2_big_uint254, + 0x1A842A688E600F012637FE181292F70C4347B5AE0D9EA9CE7CF18592C345CF73_big_uint254}, + 0x3F4B0EABB64E025F920457AF8D090A9F6472CAE11F3D62A749AF544A44941B9B_big_uint254); } BOOST_AUTO_TEST_CASE(poseidon_kimchi_test_4) { test_mina_poseidon( - {0x2059462D60621F70620EA697FA1382EC5553A3DADB3CF9072201E09871B8284C_cppui_modular254, - 0x2747337D1C4F9894747074C771E8EC7F570640E5D0CAF30FDDC446C00FA48707_cppui_modular254, - 0x2DD5047C3EEEF37930E8FA4AD9691B27CF86D3ED39D4DEC4FC6D4E8EE4FF0415_cppui_modular254, - 0x12C387C69BDD436F65AB607A4ED7C62714872EDBF800518B58E76F5106650B29_cppui_modular254}, - 0x165A8CECF6660C6E0054CB9B4DBA9D68047166D7F3CED2F8DC86ED2EBFD3EC47_cppui_modular254); + {0x2059462D60621F70620EA697FA1382EC5553A3DADB3CF9072201E09871B8284C_big_uint254, + 0x2747337D1C4F9894747074C771E8EC7F570640E5D0CAF30FDDC446C00FA48707_big_uint254, + 0x2DD5047C3EEEF37930E8FA4AD9691B27CF86D3ED39D4DEC4FC6D4E8EE4FF0415_big_uint254, + 0x12C387C69BDD436F65AB607A4ED7C62714872EDBF800518B58E76F5106650B29_big_uint254}, + 0x165A8CECF6660C6E0054CB9B4DBA9D68047166D7F3CED2F8DC86ED2EBFD3EC47_big_uint254); } BOOST_AUTO_TEST_CASE(poseidon_kimchi_test_5) { test_mina_poseidon( - {0x3CF70C3A89749A45DB5236B8DE167A37762526C45270138A9FCDF2352B1899DA_cppui_modular254, - 0x1BDF55BC84C1A0E0F7F6834949FCF90279B9D21C17DBC9928202C49039570598_cppui_modular254, - 0x09441E95A82199EFC390152C5039C0D0566A90B7F6D1AA5813B2DAB90110FF90_cppui_modular254, - 0x375B4A9785503C24531723DB1F31B50B79C3D1EC9F95DB7645A3EDA03862B588_cppui_modular254, - 0x12688FE351ED01F3BB2EB6B0FA2A70FB232654F32B08990DC3A411E527776A89_cppui_modular254}, - 0x0CA2C3342C2959D7CD94B5C9D4DC55900F5F60B345F714827C8B907752D5A209_cppui_modular254); + {0x3CF70C3A89749A45DB5236B8DE167A37762526C45270138A9FCDF2352B1899DA_big_uint254, + 0x1BDF55BC84C1A0E0F7F6834949FCF90279B9D21C17DBC9928202C49039570598_big_uint254, + 0x09441E95A82199EFC390152C5039C0D0566A90B7F6D1AA5813B2DAB90110FF90_big_uint254, + 0x375B4A9785503C24531723DB1F31B50B79C3D1EC9F95DB7645A3EDA03862B588_big_uint254, + 0x12688FE351ED01F3BB2EB6B0FA2A70FB232654F32B08990DC3A411E527776A89_big_uint254}, + 0x0CA2C3342C2959D7CD94B5C9D4DC55900F5F60B345F714827C8B907752D5A209_big_uint254); } // Poseidon permutation test vectors are taken from: // https://extgit.iaik.tugraz.at/krypto/hadeshash/-/blob/208b5a164c6a252b137997694d90931b2bb851c5/code/test_vectors.txt BOOST_AUTO_TEST_CASE(poseidon_permutation_254_2) { test_poseidon_permutation, 2>( - {0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular254, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular254, - 0x0000000000000000000000000000000000000000000000000000000000000002_cppui_modular254 + {0x0000000000000000000000000000000000000000000000000000000000000000_big_uint254, + 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint254, + 0x0000000000000000000000000000000000000000000000000000000000000002_big_uint254 }, - {0x115cc0f5e7d690413df64c6b9662e9cf2a3617f2743245519e19607a4417189a_cppui_modular254, - 0x0fca49b798923ab0239de1c9e7a4a9a2210312b6a2f616d18b5a87f9b628ae29_cppui_modular254, - 0x0e7ae82e40091e63cbd4f16a6d16310b3729d4b6e138fcf54110e2867045a30c_cppui_modular254 + {0x115cc0f5e7d690413df64c6b9662e9cf2a3617f2743245519e19607a4417189a_big_uint254, + 0x0fca49b798923ab0239de1c9e7a4a9a2210312b6a2f616d18b5a87f9b628ae29_big_uint254, + 0x0e7ae82e40091e63cbd4f16a6d16310b3729d4b6e138fcf54110e2867045a30c_big_uint254 } ); } BOOST_AUTO_TEST_CASE(poseidon_permutation_254_4) { test_poseidon_permutation, 4>( - {0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular254, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular254, - 0x0000000000000000000000000000000000000000000000000000000000000002_cppui_modular254, - 0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular254, - 0x0000000000000000000000000000000000000000000000000000000000000004_cppui_modular254 + {0x0000000000000000000000000000000000000000000000000000000000000000_big_uint254, + 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint254, + 0x0000000000000000000000000000000000000000000000000000000000000002_big_uint254, + 0x0000000000000000000000000000000000000000000000000000000000000003_big_uint254, + 0x0000000000000000000000000000000000000000000000000000000000000004_big_uint254 }, - {0x299c867db6c1fdd79dcefa40e4510b9837e60ebb1ce0663dbaa525df65250465_cppui_modular254, - 0x1148aaef609aa338b27dafd89bb98862d8bb2b429aceac47d86206154ffe053d_cppui_modular254, - 0x24febb87fed7462e23f6665ff9a0111f4044c38ee1672c1ac6b0637d34f24907_cppui_modular254, - 0x0eb08f6d809668a981c186beaf6110060707059576406b248e5d9cf6e78b3d3e_cppui_modular254, - 0x07748bc6877c9b82c8b98666ee9d0626ec7f5be4205f79ee8528ef1c4a376fc7_cppui_modular254 + {0x299c867db6c1fdd79dcefa40e4510b9837e60ebb1ce0663dbaa525df65250465_big_uint254, + 0x1148aaef609aa338b27dafd89bb98862d8bb2b429aceac47d86206154ffe053d_big_uint254, + 0x24febb87fed7462e23f6665ff9a0111f4044c38ee1672c1ac6b0637d34f24907_big_uint254, + 0x0eb08f6d809668a981c186beaf6110060707059576406b248e5d9cf6e78b3d3e_big_uint254, + 0x07748bc6877c9b82c8b98666ee9d0626ec7f5be4205f79ee8528ef1c4a376fc7_big_uint254 } ); } BOOST_AUTO_TEST_CASE(poseidon_permutation_255_3) { test_poseidon_permutation, 2>( - {0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular255, - 0x0000000000000000000000000000000000000000000000000000000000000002_cppui_modular255 + {0x0000000000000000000000000000000000000000000000000000000000000000_big_uint255, + 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint255, + 0x0000000000000000000000000000000000000000000000000000000000000002_big_uint255 }, - {0x28ce19420fc246a05553ad1e8c98f5c9d67166be2c18e9e4cb4b4e317dd2a78a_cppui_modular255, - 0x51f3e312c95343a896cfd8945ea82ba956c1118ce9b9859b6ea56637b4b1ddc4_cppui_modular255, - 0x3b2b69139b235626a0bfb56c9527ae66a7bf486ad8c11c14d1da0c69bbe0f79a_cppui_modular255 + {0x28ce19420fc246a05553ad1e8c98f5c9d67166be2c18e9e4cb4b4e317dd2a78a_big_uint255, + 0x51f3e312c95343a896cfd8945ea82ba956c1118ce9b9859b6ea56637b4b1ddc4_big_uint255, + 0x3b2b69139b235626a0bfb56c9527ae66a7bf486ad8c11c14d1da0c69bbe0f79a_big_uint255 } ); } BOOST_AUTO_TEST_CASE(poseidon_permutation_255_4) { test_poseidon_permutation, 4>( - {0x0000000000000000000000000000000000000000000000000000000000000000_cppui_modular255, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular255, - 0x0000000000000000000000000000000000000000000000000000000000000002_cppui_modular255, - 0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular255, - 0x0000000000000000000000000000000000000000000000000000000000000004_cppui_modular255 + {0x0000000000000000000000000000000000000000000000000000000000000000_big_uint255, + 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint255, + 0x0000000000000000000000000000000000000000000000000000000000000002_big_uint255, + 0x0000000000000000000000000000000000000000000000000000000000000003_big_uint255, + 0x0000000000000000000000000000000000000000000000000000000000000004_big_uint255 }, - {0x2a918b9c9f9bd7bb509331c81e297b5707f6fc7393dcee1b13901a0b22202e18_cppui_modular255, - 0x65ebf8671739eeb11fb217f2d5c5bf4a0c3f210e3f3cd3b08b5db75675d797f7_cppui_modular255, - 0x2cc176fc26bc70737a696a9dfd1b636ce360ee76926d182390cdb7459cf585ce_cppui_modular255, - 0x4dc4e29d283afd2a491fe6aef122b9a968e74eff05341f3cc23fda1781dcb566_cppui_modular255, - 0x03ff622da276830b9451b88b85e6184fd6ae15c8ab3ee25a5667be8592cce3b1_cppui_modular255 + {0x2a918b9c9f9bd7bb509331c81e297b5707f6fc7393dcee1b13901a0b22202e18_big_uint255, + 0x65ebf8671739eeb11fb217f2d5c5bf4a0c3f210e3f3cd3b08b5db75675d797f7_big_uint255, + 0x2cc176fc26bc70737a696a9dfd1b636ce360ee76926d182390cdb7459cf585ce_big_uint255, + 0x4dc4e29d283afd2a491fe6aef122b9a968e74eff05341f3cc23fda1781dcb566_big_uint255, + 0x03ff622da276830b9451b88b85e6184fd6ae15c8ab3ee25a5667be8592cce3b1_big_uint255 } ); } @@ -224,7 +224,7 @@ BOOST_AUTO_TEST_SUITE(poseidon_tests) hash_t::digest_type s = extract::hash(acc); - BOOST_CHECK_EQUAL(s, 0x20CDA7B88718C51A894AE697F804FACD408616B1A7811A55023EA0E6060AA61C_cppui_modular255); + BOOST_CHECK_EQUAL(s, 0x20CDA7B88718C51A894AE697F804FACD408616B1A7811A55023EA0E6060AA61C_big_uint255); } BOOST_AUTO_TEST_CASE(nil_poseidon_stream_255_4) { @@ -235,26 +235,26 @@ BOOST_AUTO_TEST_SUITE(poseidon_tests) using hash_t = hashes::poseidon; std::vector input = { - 0x0_cppui_modular255, - 0x0_cppui_modular255, - 0x0_cppui_modular255, - 0x0_cppui_modular255, - 0x0_cppui_modular255 + 0x0_big_uint255, + 0x0_big_uint255, + 0x0_big_uint255, + 0x0_big_uint255, + 0x0_big_uint255 }; typename policy::digest_type d = hash(input); - BOOST_CHECK_EQUAL(d, 0x44753e7f86d80790e762345ff8cb156be18eb0318f8846641193f815fbd64038_cppui_modular255); + BOOST_CHECK_EQUAL(d, 0x44753e7f86d80790e762345ff8cb156be18eb0318f8846641193f815fbd64038_big_uint255); input = { - 0x2a918b9c9f9bd7bb509331c81e297b5707f6fc7393dcee1b13901a0b22202e18_cppui_modular255, - 0x65ebf8671739eeb11fb217f2d5c5bf4a0c3f210e3f3cd3b08b5db75675d797f7_cppui_modular255, - 0x2cc176fc26bc70737a696a9dfd1b636ce360ee76926d182390cdb7459cf585ce_cppui_modular255, - 0x4dc4e29d283afd2a491fe6aef122b9a968e74eff05341f3cc23fda1781dcb566_cppui_modular255, - 0x03ff622da276830b9451b88b85e6184fd6ae15c8ab3ee25a5667be8592cce3b1_cppui_modular255 + 0x2a918b9c9f9bd7bb509331c81e297b5707f6fc7393dcee1b13901a0b22202e18_big_uint255, + 0x65ebf8671739eeb11fb217f2d5c5bf4a0c3f210e3f3cd3b08b5db75675d797f7_big_uint255, + 0x2cc176fc26bc70737a696a9dfd1b636ce360ee76926d182390cdb7459cf585ce_big_uint255, + 0x4dc4e29d283afd2a491fe6aef122b9a968e74eff05341f3cc23fda1781dcb566_big_uint255, + 0x03ff622da276830b9451b88b85e6184fd6ae15c8ab3ee25a5667be8592cce3b1_big_uint255 }; d = hash(input); - BOOST_CHECK_EQUAL(d, 0x44bff12d3a4713b18bd79c17eaabf8e69e29ce45ca48d7afb702baa1c37f3695_cppui_modular255); + BOOST_CHECK_EQUAL(d, 0x44bff12d3a4713b18bd79c17eaabf8e69e29ce45ca48d7afb702baa1c37f3695_big_uint255); } BOOST_AUTO_TEST_CASE(nil_poseidon_wrapped_255_4) { @@ -274,8 +274,8 @@ BOOST_AUTO_TEST_SUITE(poseidon_tests) }; std::vector field_input = { - 0x000123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD_cppui_modular255, - 0x00000000000000000000000000000000000000000000000000000000000000EF_cppui_modular255, + 0x000123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCD_big_uint255, + 0x00000000000000000000000000000000000000000000000000000000000000EF_big_uint255, }; typename policy::digest_type d_uint8 = hash( diff --git a/crypto3/libs/hash/test/reinforced_concrete.cpp b/crypto3/libs/hash/test/reinforced_concrete.cpp deleted file mode 100644 index 7cf7d6ba15..0000000000 --- a/crypto3/libs/hash/test/reinforced_concrete.cpp +++ /dev/null @@ -1,159 +0,0 @@ -// #define BOOST_TEST_MAIN -#define BOOST_TEST_MODULE reinforced_concrete_test - -#include -#include -#include -#include - -#include "nil/crypto3/algebra/fields/bls12/scalar_field.hpp" -#include "nil/crypto3/algebra/fields/field.hpp" -#include "nil/crypto3/hash/reinforced_concrete.hpp" -// #include "nil/crypto3/algebra/fields/maxprime.hpp" - -using namespace nil::crypto3; -using namespace nil::crypto3::algebra; - - -// namespace nil { -// namespace crypto3 { -// namespace hashes { -// namespace detail { -// template <> -// struct reinforced_concrete_policy> : -// public base_reinforced_concrete_policy> { -// constexpr static const std::size_t bucket_size = 7; -// typedef std::array bucket_type; - -// constexpr static const alphas_type alphas = {element_type(integral_type(1)), element_type(integral_type(3))}; -// constexpr static const betas_type betas = {element_type(integral_type(2)), element_type(integral_type(4))}; -// constexpr static const std::size_t d = 3; -// constexpr static const bucket_type bucket = {element_type(integral_type(570)), element_type(integral_type(577)), element_type(integral_type(549)), -// element_type(integral_type(579)), element_type(integral_type(553)), element_type(integral_type(577)), -// element_type(integral_type(553))}; -// constexpr static const element_type p_min = element_type(integral_type(541)); -// }; -// } -// } -// } -// } - -template -void print_field_element(std::ostream &os, const typename fields::detail::element_fp &e) { - os << e.data << std::endl; -} - -namespace boost { - namespace test_tools { - namespace tt_detail { - template - struct print_log_value> { - void operator()(std::ostream &os, typename fields::detail::element_fp const &e) { - print_field_element(os, e); - } - }; - - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -using rc_default_field_t = fields::bls12_fr<381>; -using rc_functions_t = hashes::detail::reinforced_concrete_functions; -using operators = rc_functions_t::reinforced_concrete_operators_type; -using element_type = rc_functions_t::element_type; -using integral_type = rc_functions_t::integral_type; -using state_type = rc_functions_t::state_type; - -template -void test_permute(std::array, 3>& test_set){ - using state_type = typename rc_functions::state_type; - - state_type in = {test_set[0].first, test_set[1].first, test_set[2].first}; - state_type out = {test_set[0].second, test_set[1].second, test_set[2].second}; - - rc_functions::permute(in); - BOOST_CHECK_EQUAL(in[0], out[0]); - BOOST_CHECK_EQUAL(in[1], out[1]); - BOOST_CHECK_EQUAL(in[2], out[2]); - -} -BOOST_AUTO_TEST_CASE(check_inversity_of_compose_decompose_for_0){ - element_type zero = element_type(integral_type(0)); - operators::bucket_type after_decompose = operators::decompose(zero); - element_type zero_after = operators::compose(after_decompose); - BOOST_CHECK_EQUAL(zero, zero_after); -} - -BOOST_AUTO_TEST_CASE(check_inversity_of_compose_decompose_for_1){ - element_type one = element_type(integral_type(1)); - operators::bucket_type after_decompose = operators::decompose(one); - element_type one_after = operators::compose(after_decompose); - BOOST_CHECK_EQUAL(one, one_after); -} - -BOOST_AUTO_TEST_CASE(bricks_for_bls12fr381){ - operators::state_vector_type state = {{2, 2, 2}}; - - operators::bricks(state); - BOOST_CHECK_EQUAL(state[0], element_type(integral_type(32))); - BOOST_CHECK_EQUAL(state[1], element_type(integral_type(16))); - BOOST_CHECK_EQUAL(state[2], element_type(integral_type(28))); -} - -BOOST_AUTO_TEST_CASE(permute){ - typedef std::array, 3> states_type; - std::vector test_sets; - test_sets.emplace_back(states_type({ - std::pair(element_type(integral_type("50917230419308163733470192369465914281470471790130294745848939712028772983060")), - element_type(integral_type("24739598089584454475621966183939257820166234533866965673492546376895264019128"))), - - std::pair(element_type(integral_type("29642283130329487301988235868162751576403275281027830771209987540575428383637")), - element_type(integral_type("37521142756452916806081885515487491075534340094499376737812166523163578355714"))), - - std::pair(element_type(integral_type("23663775015144813469379634606587938210554610024644297430818232620868959459552")), - element_type(integral_type("28549386537327608580836266150865810307117966330419940567643306094099488987233"))) - })); - - test_sets.emplace_back(states_type({ - std::pair(element_type(integral_type("33510179140755347895375425370352023727694444228069440239293572206565074736884")), - element_type(integral_type("18174659052144177138751950570163950544332769998004183128651038977303979699219"))), - - std::pair(element_type(integral_type("21603135348740703879430592411306870931346051097828213275497380996270715042141")), - element_type(integral_type("45812904386624376072737388526521613814601111711231627564052185515112943150536"))), - - std::pair(element_type(integral_type("18632482287926004637041478199651776515736102069097516336082032841334185966107")), - element_type(integral_type("37231969806958808374977231216847168420099752393260010793385011955298357714262"))) - })); - - for(auto &test_set : test_sets) - test_permute(test_set); -} - - -// BOOST_AUTO_TEST_CASE(permute_in_FP64){ -// using rc_functions_t = hashes::detail::reinforced_concrete_functions>; -// using element_type = rc_functions_t::element_type; -// using integral_type = rc_functions_t::integral_type; -// using state_type = rc_functions_t::state_type; - -// // typedef std::array, 3> states_type; -// // std::vector test_sets; -// // test_sets.emplace_back(states_type({ -// // std::pair(element_type(integral_type(0x00000000000000000000000000000000ull)), -// // element_type(integral_type(0x000000000000000046c0b8fcb05a39ebull))), - -// // std::pair(element_type(integral_type(0x00000000000000000000000000000000ull)), -// // element_type(integral_type(0x0000000000000000054581b45d897fcbull))), - -// // std::pair(element_type(integral_type(0x00000000000000000000000000000000ull)), -// // element_type(integral_type(0x00000000000000009a68e1181bd6971dull))) -// // })); - -// // for(auto &test_set : test_sets) -// // test_permute(test_set); -// } diff --git a/crypto3/libs/hash/test/ripemd.cpp b/crypto3/libs/hash/test/ripemd.cpp deleted file mode 100644 index b6d67a26f2..0000000000 --- a/crypto3/libs/hash/test/ripemd.cpp +++ /dev/null @@ -1,663 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2019 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE ripemd_test - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::accumulators; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::ripemd<128>::construction::type::digest_type) -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::ripemd<160>::construction::type::digest_type) -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::ripemd<256>::construction::type::digest_type) -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::ripemd<320>::construction::type::digest_type) - -template -class fixture { -public: - accumulator_set> acc; - typedef hashes::ripemd hash_t; - - virtual ~fixture() { - } -}; - -const char *test_data = TEST_DATA; - -boost::property_tree::ptree string_data(const char *child_name) { - boost::property_tree::ptree root_data; - boost::property_tree::read_json(test_data, root_data); - boost::property_tree::ptree string_data = root_data.get_child(child_name); - - return string_data; -} - -BOOST_AUTO_TEST_SUITE(ripemd_stream_processor_data_driven_algorithm_test_suite) - -BOOST_DATA_TEST_CASE(ripemd_128_range_hash, string_data("data_128"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_160_range_hash, string_data("data_160"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_256_range_hash, string_data("data_256"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_320_range_hash, string_data("data_320"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_128_typedef_range_hash, string_data("data_128"), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_160_typedef_range_hash, string_data("data_160"), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_256_typedef_range_hash, string_data("data_256"), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_320_typedef_range_hash, string_data("data_320"), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(ripemd_stream_processor_data_driven_adaptor_test_suite) - -BOOST_DATA_TEST_CASE(ripemd_128_range_hash, string_data("data_128"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_160_range_hash, string_data("data_160"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_256_range_hash, string_data("data_256"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_320_range_hash, string_data("data_320"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_128_typedef_range_hash, string_data("data_128"), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_160_typedef_range_hash, string_data("data_160"), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_256_typedef_range_hash, string_data("data_256"), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(ripemd_320_typedef_range_hash, string_data("data_320"), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(ripemd_stream_processor_test_suite) - -BOOST_AUTO_TEST_CASE(ripemd_128_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::ripemd<128>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("86be7afa339d0fc7cfc785e72f578d33", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_128_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::ripemd<128>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("c14a12199c66e4ba84636b0f69144c77", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_128_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::ripemd<128>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("9e327b3d6e523062afc1132d7df9d1b8", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_160_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::ripemd<160>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("0bdc9d2d256b3ee9daae347be6f4dc835a467ffe", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_160_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::ripemd<160>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_160_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::ripemd<160>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("5d0689ef49d2fae572b881b123a85ffa21595f36", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_256_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::ripemd<256>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("f9333e45d857f5d90a91bab70a1eba0cfb1be4b0783c9acfcd883a9134692925", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_256_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::ripemd<256>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("afbd6e228b9d8cbbcef5ca2d03e6dba10ac0bc7dcbe4680e1e42d2e975459b65", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_256_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::ripemd<256>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL("87e971759a1ce47a514d5c914c392c9018c7c46bc14465554afcdf54a5070c0e", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_320_shortmsg_byte1) { - // "a" - std::array a = {'\x61'}; - hashes::ripemd<320>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "ce78850638f92658a5a585097579926dda667a57" - "16562cfcf6fbe77f63542f99b04705d6970dff5d", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_320_shortmsg_byte2) { - // "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::ripemd<320>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "de4c01b3054f8930a79d09ae738e92301e5a1708" - "5beffdc1b8d116713e74f82fa942d64cdbc4682d", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_320_shortmsg_byte3) { - // "message digest" - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::ripemd<320>::digest_type d = hash>(a); - - BOOST_CHECK_EQUAL( - "3a8e28502ed45d422f68844f9dd316e7b98533fa" - "3f2a91d29f84d425c88d6b4eff727df66a7c0197", - std::to_string(d).data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(ripemd_accumulator_test_suite) - -BOOST_FIXTURE_TEST_CASE(ripemd_128_accumulator1, fixture<128>) { - // "a" - hashes::ripemd<128>::block_type m = {{}}; - m[0] = 0x00000061; - acc(m, accumulators::bits = 8); - hashes::ripemd<128>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("86be7afa339d0fc7cfc785e72f578d33", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_128_accumulator2, fixture<128>) { - // "abc" - hashes::ripemd<128>::block_type m = {{}}; - m[0] = 0x00636261; - acc(m, accumulators::bits = 24); - hashes::ripemd<128>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("c14a12199c66e4ba84636b0f69144c77", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_128_accumulator3, fixture<128>) { - // 80 times of "a" - hashes::ripemd<128>::block_type m1 = {{0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x00010261, 0x67283609}}; - - acc(m1, accumulators::bits = 14 * 32 + 8); - - hashes::ripemd<128>::digest_type s = extract::hash>(acc); - - BOOST_CHECK_EQUAL("d6a7de242c383193285db1de0459c32c", std::to_string(s).data()); - - hashes::ripemd<128>::construction::type::block_type m2 = { - {0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x00616161, 0x82934724, 0xa0a93453, 0x293c203d, - 0x6e6f7071, 0x6f707172, 0x70717273, 0x71727374, 0x72737475, 0x00000000, 0x00000000}}; - - acc(m2, accumulators::bits = 6 * 32 - 8); - - s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("d7fc37ea6df34cb33825447bf29abbb9", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_160_accumulator1, fixture<160>) { - // "a" - hashes::ripemd<160>::block_type m = {{}}; - m[0] = 0x00000061; - acc(m, accumulators::bits = 8); - hashes::ripemd<160>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("0bdc9d2d256b3ee9daae347be6f4dc835a467ffe", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_160_accumulator2, fixture<160>) { - // "abc" - hashes::ripemd<160>::block_type m = {{}}; - m[0] = 0x00636261; - acc(m, accumulators::bits = 24); - hashes::ripemd<160>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_160_accumulator3, fixture<160>) { - // 80 times of "a" - hashes::ripemd<160>::block_type m1 = {{0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x00010261, 0x67283609}}; - - acc(m1, accumulators::bits = 14 * 32 + 8); - - hashes::ripemd<160>::digest_type s = extract::hash>(acc); - - BOOST_CHECK_EQUAL("eed82d19d597ab275b550ff3d6e0bc2a75350388", std::to_string(s).data()); - - hashes::ripemd<160>::construction::type::block_type m2 = { - {0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x00616161, 0x82934724, 0xa0a93453, 0x293c203d, - 0x6e6f7071, 0x6f707172, 0x70717273, 0x71727374, 0x72737475, 0x00000000, 0x00000000}}; - - acc(m2, accumulators::bits = 6 * 32 - 8); - - s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("228d437346bbf829f53490e0a5ef176c5068163f", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_256_accumulator1, fixture<256>) { - // "a" - hashes::ripemd<256>::block_type m = {{}}; - m[0] = 0x00000061; - acc(m, accumulators::bits = 8); - hashes::ripemd<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("f9333e45d857f5d90a91bab70a1eba0cfb1be4b0783c9acfcd883a9134692925", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_256_accumulator2, fixture<256>) { - // "abc" - hashes::ripemd<256>::block_type m = {{}}; - m[0] = 0x00636261; - acc(m, accumulators::bits = 24); - hashes::ripemd<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL("afbd6e228b9d8cbbcef5ca2d03e6dba10ac0bc7dcbe4680e1e42d2e975459b65", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_256_accumulator3, fixture<256>) { - // 80 times of "a" - hashes::ripemd<256>::block_type m1 = {{0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x00010261, 0x67283609}}; - - acc(m1, accumulators::bits = 14 * 32 + 8); - - hashes::ripemd<256>::digest_type s = extract::hash>(acc); - - BOOST_CHECK_EQUAL("b01629f9a960bbb1aa2a9e0e74319909a9f839570b1c932e59a382923bae1812", std::to_string(s).data()); - - hashes::ripemd<256>::construction::type::block_type m2 = { - {0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x00616161, 0x82934724, 0xa0a93453, 0x293c203d, - 0x6e6f7071, 0x6f707172, 0x70717273, 0x71727374, 0x72737475, 0x00000000, 0x00000000}}; - - acc(m2, accumulators::bits = 6 * 32 - 8); - - s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("e6676aa1b6c0da12250437daec6af99857923fe3cef841c2385a851a869e234a", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_320_accumulator1, fixture<320>) { - // "a" - hashes::ripemd<320>::block_type m = {{}}; - m[0] = 0x00000061; - acc(m, accumulators::bits = 8); - hashes::ripemd<320>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL( - "ce78850638f92658a5a585097579926dda667a57" - "16562cfcf6fbe77f63542f99b04705d6970dff5d", - std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_320_accumulator2, fixture<320>) { - // "abc" - hashes::ripemd<320>::block_type m = {{}}; - m[0] = 0x00636261; - acc(m, accumulators::bits = 24); - hashes::ripemd<320>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s)); -#endif - - BOOST_CHECK_EQUAL( - "de4c01b3054f8930a79d09ae738e92301e5a1708" - "5beffdc1b8d116713e74f82fa942d64cdbc4682d", - std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(ripemd_320_accumulator3, fixture<320>) { - // 80 times of "a" - hashes::ripemd<320>::block_type m1 = {{0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, - 0x61616161, 0x61616161, 0x00010261, 0x67283609}}; - - acc(m1, accumulators::bits = 14 * 32 + 8); - - hashes::ripemd<320>::digest_type s = extract::hash>(acc); - - BOOST_CHECK_EQUAL( - "2c38e9ceaad3a53d60f0e38db6d1d4d21d711596" - "55185b7fa1b85f351c503cdac99f12f583a833a3", - std::to_string(s).data()); - - hashes::ripemd<320>::construction::type::block_type m2 = { - {0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x61616161, 0x00616161, 0x82934724, 0xa0a93453, 0x293c203d, - 0x6e6f7071, 0x6f707172, 0x70717273, 0x71727374, 0x72737475, 0x00000000, 0x00000000}}; - - acc(m2, accumulators::bits = 6 * 32 - 8); - - s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL( - "bfe9b13c79cefa874b7deba22e653a8826f0d769" - "fb8cecf05c90bfe5ba3a19967ce5a7cc65c0c584", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_128_preprocessor1) { - accumulator_set> acc; - hashes::ripemd<128>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("cdf26213a150dc3ecb610f18f6b38b46", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_128_preprocessor2) { - accumulator_set> acc; - - acc(0x00000061, accumulators::bits = 8); - acc(0x00000062, accumulators::bits = 8); - acc(0x00000063, accumulators::bits = 8); - - hashes::ripemd<128>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("c14a12199c66e4ba84636b0f69144c77", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_160_preprocessor1) { - accumulator_set> acc; - hashes::ripemd<160>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("9c1185a5c5e9fc54612808977ee8f548b2258d31", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_160_preprocessor2) { - accumulator_set> acc; - - acc(0x00000061, accumulators::bits = 8); - acc(0x00000062, accumulators::bits = 8); - acc(0x00000063, accumulators::bits = 8); - - hashes::ripemd<160>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_160_preprocessor3) { - // million repetitions of "a" - accumulator_set> acc; - - for (unsigned i = 0; i != 1000000; ++i) - acc(0x00000061, accumulators::bits = 8); - - hashes::ripemd<160>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("52783243c1697bdbe16d37f97f68f08325dc1528", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_256_preprocessor1) { - accumulator_set> acc; - hashes::ripemd<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("02ba4c4e5f8ecd1877fc52d64d30e37a2d9774fb1e5d026380ae0168e3c5522d", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_256_preprocessor2) { - accumulator_set> acc; - - acc(0x00000061, accumulators::bits = 8); - acc(0x00000062, accumulators::bits = 8); - acc(0x00000063, accumulators::bits = 8); - - hashes::ripemd<256>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("afbd6e228b9d8cbbcef5ca2d03e6dba10ac0bc7dcbe4680e1e42d2e975459b65", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_320_preprocessor1) { - accumulator_set> acc; - hashes::ripemd<320>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL( - "22d65d5661536cdc75c1fdf5c6de7b41b9f27325" - "ebc61e8557177d705a0ec880151c3a32a00899b8", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(ripemd_320_preprocessor2) { - accumulator_set> acc; - - acc(0x00000061, accumulators::bits = 8); - acc(0x00000062, accumulators::bits = 8); - acc(0x00000063, accumulators::bits = 8); - - hashes::ripemd<320>::digest_type s = extract::hash>(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL( - "de4c01b3054f8930a79d09ae738e92301e5a1708" - "5beffdc1b8d116713e74f82fa942d64cdbc4682d", - std::to_string(s).data()); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/hash/test/sha.cpp b/crypto3/libs/hash/test/sha.cpp deleted file mode 100644 index 25f1bf6dde..0000000000 --- a/crypto3/libs/hash/test/sha.cpp +++ /dev/null @@ -1,181 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2019 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE sha_test - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::accumulators; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::sha::digest_type) - -class fixture { -public: - accumulator_set acc; - typedef hashes::sha hash_t; - - virtual ~fixture() { - } -}; - -const char *test_data = TEST_DATA; - -boost::property_tree::ptree string_data() { - boost::property_tree::ptree string_data; - boost::property_tree::read_json(test_data, string_data); - - return string_data; -} - -BOOST_AUTO_TEST_SUITE(sha_stream_processor_data_driven_algorithm_test_suite) - -BOOST_DATA_TEST_CASE(sha_string_various_range_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(sha_string_various_itr_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(sha_stream_processor_data_driven_adaptor_test_suite) - -BOOST_DATA_TEST_CASE(sha_string_various_range_value_hash, string_data(), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(sha_stream_processor_test_suite) - -BOOST_AUTO_TEST_CASE(sha_shortmsg_byte) { - // https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/NIST.FIPS.180.pdf - // Appendix A: "abc" - std::array a = {'\x61', '\x62', '\x63'}; - hashes::sha::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(sha_accumulator_test_suite) - -BOOST_FIXTURE_TEST_CASE(sha_accumulator1, fixture) { - hash_t::construction::type::block_type m = {{}}; - - m[0] = 0x61626300; - acc(m, accumulators::bits = 24); - - hash_t::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(sha_accumulator2, fixture) { - // Appendix B: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - hash_t::construction::type::block_type m = {{0x61626364, 0x62636465, 0x63646566, 0x64656667, 0x65666768, 0x66676869, - 0x6768696a, 0x68696a6b, 0x696a6b6c, 0x6a6b6c6d, 0x6b6c6d6e, 0x6c6d6e6f, - 0x6d6e6f70, 0x6e6f7071, 0x00000000, 0x00000000}}; - acc(m, accumulators::bits = 512 - 64); - - hash_t::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("d2516ee1acfa5baf33dfc1c471e438449ef134c8", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(sha_preprocessor1) { - accumulator_set acc; - - acc(0x61000000, accumulators::bits = 8); - acc(0x62000000, accumulators::bits = 8); - acc(0x63000000, accumulators::bits = 8); - - hashes::sha::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(sha_preprocessor2) { - // Appendix C: million repetitions of "a" - accumulator_set acc; - - for (unsigned i = 0; i != 1000000; ++i) - acc(0x61000000, accumulators::bits = 8); - - hashes::sha::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("3232affa48628a26653b5aaa44541fd90d690603", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/hash/test/sha1.cpp b/crypto3/libs/hash/test/sha1.cpp deleted file mode 100644 index a6c35c1014..0000000000 --- a/crypto3/libs/hash/test/sha1.cpp +++ /dev/null @@ -1,262 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2019 Mikhail Komarov -// Copyright (c) 2020 Alexander Sokolov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE sha1_test - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::accumulators; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::sha1::construction::type::digest_type) - -class fixture { -public: - accumulator_set acc; - typedef hashes::sha1 hash_t; - - virtual ~fixture() { - } -}; - -const char *test_data = TEST_DATA; - -boost::property_tree::ptree string_data() { - boost::property_tree::ptree string_data; - boost::property_tree::read_json(test_data, string_data); - - return string_data; -} - -BOOST_AUTO_TEST_SUITE(sha1_stream_processor_data_driven_algorithm_test_suite) - -BOOST_DATA_TEST_CASE(sha1_string_various_range_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(sha1_string_various_itr_value_hash, string_data(), array_element) { - std::string out = hash(array_element.first.begin(), array_element.first.end()); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(sha1_stream_processor_data_driven_adaptor_test_suite) - -BOOST_DATA_TEST_CASE(sha1_string_various_range_value_hash, string_data(), array_element) { - std::string out = array_element.first | adaptors::hashed; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(sha1_stream_processor_test_suite) - -BOOST_AUTO_TEST_CASE(sha1_shortmsg_byte1) { - // echo -n "a" | sha1sum - std::array a = {'\x61'}; - hashes::sha1::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(sha1_shortmsg_byte2) { - // echo -n "abc" | sha1sum - std::array a = {'\x61', '\x62', '\x63'}; - hashes::sha1::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("a9993e364706816aba3e25717850c26c9cd0d89d", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_CASE(sha1_shortmsg_byte3) { - // echo -n "message digest" | sha1sum - std::array a = {'\x6d', '\x65', '\x73', '\x73', '\x61', '\x67', '\x65', - '\x20', '\x64', '\x69', '\x67', '\x65', '\x73', '\x74'}; - hashes::sha1::digest_type d = hash(a); - - BOOST_CHECK_EQUAL("c12252ceda8be8994d5fa0290a47231c1d16aae3", std::to_string(d).data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(sha1_accumulator_test_suite) - -BOOST_FIXTURE_TEST_CASE(sha1_accumulator1, fixture) { - // echo -n "a" | sha1sum - hash_t::construction::type::block_type m = {{}}; - - m[0] = 0x61000000; - acc(m, accumulators::bits = 8); - - hash_t::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("86f7e437faa5a7fce15d1ddcb9eaeaea377667b8", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(sha1_accumulator2, fixture) { - // echo -n "abc" | sha1sum - hash_t::construction::type::block_type m = {{}}; - - m[0] = 0x61626300; - acc(m, accumulators::bits = 24); - - hash_t::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("a9993e364706816aba3e25717850c26c9cd0d89d", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(sha1_accumulator3, fixture) { - // echo -n "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" | sha1sum - hash_t::construction::type::block_type m1 = { - {0x61626364, 0x62636465, 0x63646566, 0x64656667, 0x65666768, 0x66676869, 0x6768696a, 0x68696a6b, 0x696a6b6c, - 0x6a6b6c6d, 0x6b6c6d6e, 0x6c6d6e6f, 0x6d010101, 0x01010101, 0x80000000, 0x00000000}}; - acc(m1, accumulators::bits = 512 - 64 - 64 + 8); - - hash_t::digest_type s = extract::hash(acc); - - BOOST_CHECK_EQUAL("9d47791975c530645ad3568e80f88d7da4c52c3b", std::to_string(s).data()); - - hash_t::construction::type::block_type m2 = { - {0x6e6f706e, 0x6f707100, 0x6d6e6f70, 0x6e6f7071, 0x6d6e6f70, 0x6e6f7071, 0x0168696a, 0x68696a6b, 0x696a6b6c, - 0x6a6b6c6d, 0x6b6c6d6e, 0x6c6d6e6f, 0x6d010170, 0x6e6f7071, 0x80080000, 0x00000000}}; - - acc(m2, accumulators::bits = 64 - 8); - - s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("84983e441c3bd26ebaae4aa1f95129e5e54670f1", std::to_string(s).data()); -} - -BOOST_FIXTURE_TEST_CASE(sha1_accumulator4, fixture) { - // echo -n "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn (continues) - // hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" | sha1sum - hash_t::construction::type::block_type m1 = { - {0x61626364, 0x65666768, 0x62636465, 0x66676869, 0x63646566, 0x6768696a, 0x64656667, 0x68696a6b, 0x65666768, - 0x696a6b6c, 0x66676869, 0x6a6b6c6d, 0x6768696a, 0x6b6c6d6e, 0x68696a6b, 0x6c6d6e6f}}; - acc(m1, accumulators::bits = 512); - - hash_t::digest_type s = extract::hash(acc); - - BOOST_CHECK_EQUAL("b85d6468bd3a73794bceaf812239cc1fe460ab95", std::to_string(s).data()); - - hash_t::construction::type::block_type m2 = { - {0x696a6b6c, 0x6d6e6f70, 0x6a6b6c6d, 0x6e6f7071, 0x6b6c6d6e, 0x6f707172, 0x6c6d6e6f, 0x70717273, 0x6d6e6f70, - 0x71727374, 0x6e6f7071, 0x72737475, 0x6d010170, 0x6e6f7071, 0x80080000, 0x00000000}}; - - acc(m2, accumulators::bits = 64 * 6); - - s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("a49b2446a02c645bf419f995b67091253a04a259", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(sha1_preprocessor1) { - accumulator_set acc; - hashes::sha1::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("da39a3ee5e6b4b0d3255bfef95601890afd80709", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(sha1_preprocessor2) { - accumulator_set acc; - - acc(0x61000000, accumulators::bits = 8); - acc(0x62000000, accumulators::bits = 8); - acc(0x63000000, accumulators::bits = 8); - - hashes::sha1::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("a9993e364706816aba3e25717850c26c9cd0d89d", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_CASE(sha1_preprocessor3) { - // perl -e 'for (1..1000000) { print "a"; }' | sha1sum - accumulator_set acc; - - for (unsigned i = 0; i != 1000000; ++i) - acc(0x61000000, accumulators::bits = 8); - - hashes::sha1::digest_type s = extract::hash(acc); - -#ifdef CRYPTO3_HASH_SHOW_PROGRESS - std::printf("%s\n", std::to_string(s).data()); -#endif - - BOOST_CHECK_EQUAL("34aa973cd4c4daa4f61eeb2bdbad27316534016f", std::to_string(s).data()); -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/crypto3/libs/hash/test/tiger.cpp b/crypto3/libs/hash/test/tiger.cpp deleted file mode 100644 index 3f3d8b8748..0000000000 --- a/crypto3/libs/hash/test/tiger.cpp +++ /dev/null @@ -1,158 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2020 Mikhail Komarov -// Copyright (c) 2020 Pavel Kharitonov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE tiger_test - -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::accumulators; - -namespace boost { - namespace test_tools { - namespace tt_detail { - template class P, typename K, typename V> - struct print_log_value> { - void operator()(std::ostream &, P const &) { - } - }; - } // namespace tt_detail - } // namespace test_tools -} // namespace boost - -BOOST_TEST_DONT_PRINT_LOG_VALUE(hashes::tiger<192>::digest_type) - -template -class fixture { -public: - accumulator_set> acc; - typedef hashes::tiger hash_t; - virtual ~fixture() { - } -}; - -const char *test_data = TEST_DATA; - -boost::property_tree::ptree string_data(const char *child_name) { - boost::property_tree::ptree root_data; - boost::property_tree::read_json(test_data, root_data); - boost::property_tree::ptree string_data = root_data.get_child(child_name); - - return string_data; -} - -BOOST_AUTO_TEST_SUITE(tiger_test_suite1) - -BOOST_DATA_TEST_CASE(tiger_algorithm_test, string_data("data_192"), array_element) { - std::string out = hash>(array_element.first); - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_DATA_TEST_CASE(tiger_adaptor_test, string_data("data_192"), array_element) { - std::string out = array_element.first | adaptors::hashed>; - - BOOST_CHECK_EQUAL(out, array_element.second.data()); -} - -BOOST_AUTO_TEST_SUITE_END() - -BOOST_AUTO_TEST_SUITE(tiger_test_suite2) - -BOOST_AUTO_TEST_CASE(tiger_iterator_hash1) { - - std::string input = "a"; - std::string out = hash>(input.begin(), input.end()); - - BOOST_CHECK_EQUAL("77befbef2e7ef8ab2ec8f93bf587a7fc613e247f5f247809", out); -} - -BOOST_AUTO_TEST_CASE(tiger_iterator_hash2) { - - std::string input = "abc"; - std::string out = hash>(input.begin(), input.end()); - - BOOST_CHECK_EQUAL("2aab1484e8c158f2bfb8c5ff41b57a525129131c957b5f93", out); -} - -BOOST_AUTO_TEST_CASE(tiger_iterator_hash3) { - - std::string input = "message digest"; - std::string out = hash>(input.begin(), input.end()); - - BOOST_CHECK_EQUAL("d981f8cb78201a950dcf3048751e441c517fca1aa55a29f6", out); -} - -BOOST_AUTO_TEST_CASE(tiger_iterator_hash4) { - - std::string input = "abcdefghijklmnopqrstuvwxyz"; - std::string out = hash>(input.begin(), input.end()); - - BOOST_CHECK_EQUAL("1714a472eee57d30040412bfcc55032a0b11602ff37beee9", out); -} - -BOOST_AUTO_TEST_CASE(tiger_iterator_hash5) { - - std::string input = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"; - std::string out = hash>(input.begin(), input.end()); - - BOOST_CHECK_EQUAL("0f7bf9a19b9c58f2b7610df7e84f0ac3a71c631e7b53f78e", out); -} - -BOOST_AUTO_TEST_CASE(tiger_iterator_hash6) { - - std::string input = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - std::string out = hash>(input.begin(), input.end()); - - BOOST_CHECK_EQUAL("8dcea680a17583ee502ba38a3c368651890ffbccdc49a8cc", out); -} - -BOOST_AUTO_TEST_CASE(tiger_iterator_hash7) { - - std::string input = "12345678901234567890123456789012345678901234567890123456789012345678901234567890"; - std::string out = hash>(input.begin(), input.end()); - - BOOST_CHECK_EQUAL("1c14795529fd9f207a958f84c52f11e887fa0cabdfd91bfd", out); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/hash/test/tmp_poseidon_constexpr_generation.cpp b/crypto3/libs/hash/test/tmp_poseidon_constexpr_generation.cpp deleted file mode 100644 index 80b7de0703..0000000000 --- a/crypto3/libs/hash/test/tmp_poseidon_constexpr_generation.cpp +++ /dev/null @@ -1,210 +0,0 @@ - -#include -#include -#include - -#include - - -using namespace boost::multiprecision::literals; -using boost::multiprecision::number; -using boost::multiprecision::backends::cpp_int_backend; -using boost::multiprecision::cpp_integer_type; -using boost::multiprecision::cpp_int_check_type; - -using std::cout; - -#define BLS12_381_MODULUS_LEN 255 -#define GRAIN_LFSR_STATE_LEN 80 - - -BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL(BLS12_381_MODULUS_LEN); -BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL(GRAIN_LFSR_STATE_LEN); - - -template -struct round_constants_generator { - constexpr static std::size_t modulus_bits = BLS12_381_MODULUS_LEN; - constexpr static std::size_t state_bits = GRAIN_LFSR_STATE_LEN; - - typedef number> - integral_type; - typedef number> - state_type; - - constexpr static integral_type mod = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_cppui_modular255; - - - constexpr void generate_round_constants() { - integral_type constant = 0x0_cppui_modular255; - state_type lfsr_state = get_lfsr_init_state(); - - for (std::size_t i = 0; i < (full_rounds + part_rounds) * t; i++) { - while (true) { - constant = 0x0_cppui_modular255; - for (std::size_t i = 0; i < modulus_bits; i++) { - lfsr_state = update_state(lfsr_state); - constant = set_new_bit(constant, get_state_bit(lfsr_state, state_bits - 1)); - } - if (constant < 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_cppui_modular255) { - constants[i] = constant; - break; - } - } - } - } - - constexpr void generate_round_constants_unfolded() { - integral_type constant = 0x0_cppui_modular255; - bool new_bit = false; - state_type lfsr_state = get_lfsr_init_state(); - - for (std::size_t i = 0; i < (full_rounds + part_rounds) * t; i++) { - while (true) { - constant = 0x0_cppui_modular255; - for (std::size_t i = 0; i < modulus_bits; i++) { - while (true) { - new_bit = ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 13))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 23))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 38))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 51))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 62))) != 0); - lfsr_state = (lfsr_state << 1) | (new_bit ? 1 : 0); - if (new_bit) - break; - else { - new_bit = ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 13))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 23))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 38))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 51))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 62))) != 0); - lfsr_state = (lfsr_state << 1) | (new_bit ? 1 : 0); - } - } - new_bit = ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 13))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 23))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 38))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 51))) != 0) != - ((lfsr_state & (0x1_cppui_modular80 << (state_bits - 1 - 62))) != 0); - lfsr_state = (lfsr_state << 1) | (new_bit ? 1 : 0); - constant = (constant << 1) | (lfsr_state & 1); - } - if (constant < 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_cppui_modular255) { - constants[i] = constant; - break; - } - } - } - } - - constexpr static integral_type get_round_constant(std::size_t constant_number) { - integral_type constant = 0x0_cppui_modular255; - - state_type lfsr_state = get_lfsr_init_state(); - - // previous constants - for (std::size_t i = 0; i < constant_number; i++) { - constant = 0x0_cppui_modular255; - while (true) { - constant = 0x0_cppui_modular255; - for (std::size_t i = 0; i < modulus_bits; i++) { - lfsr_state = update_state(lfsr_state); - constant = set_new_bit(constant, get_state_bit(lfsr_state, state_bits - 1)); - } - if (constant < 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_cppui_modular255) - break; - } - } - - // requested constant - while (true) { - constant = 0x0_cppui_modular255; - for (std::size_t i = 0; i < modulus_bits; i++) { - lfsr_state = update_state(lfsr_state); - constant = set_new_bit(constant, get_state_bit(lfsr_state, state_bits - 1)); - } - if (constant < 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_cppui_modular255) - break; - } - - return constant; - } - - constexpr static state_type get_lfsr_init_state() { - state_type state = 0x0_cppui_modular80; - int i = 0; - for (i = 1; i >= 0; i--) - state = set_new_bit(state, (1 >> i) & 1); // field - as in filecoin - for (i = 3; i >= 0; i--) - state = set_new_bit(state, (1 >> i) & 1); // s-box - as in filecoin - for (i = 11; i >= 0; i--) - state = set_new_bit(state, (modulus_bits >> i) & 1); - for (i = 11; i >= 0; i--) - state = set_new_bit(state, (t >> i) & 1); - for (i = 9; i >= 0; i--) - state = set_new_bit(state, (full_rounds >> i) & 1); - for (i = 9; i >= 0; i--) - state = set_new_bit(state, (part_rounds >> i) & 1); - for (i = 29; i >= 0; i--) - state = set_new_bit(state, 1); - // idling - for (i = 0; i < 160; i++) - state = update_state_raw(state); - return state; - } - - constexpr static state_type update_state(state_type state) { - while (true) { - state = update_state_raw(state); - if (get_state_bit(state, state_bits - 1)) - break; - else - state = update_state_raw(state); - } - return update_state_raw(state); - } - - constexpr static state_type update_state_raw(state_type state) { - bool new_bit = get_state_bit(state, 0) != get_state_bit(state, 13) != get_state_bit(state, 23) != - get_state_bit(state, 38) != get_state_bit(state, 51) != get_state_bit(state, 62); - return set_new_bit(state, new_bit); - } - - constexpr static bool get_state_bit(state_type state, std::size_t pos) { - state_type bit_getter = 0x1_cppui_modular80; - bit_getter <<= (state_bits - 1 - pos); - return (state & bit_getter) ? true : false; - } - - template - constexpr static T set_new_bit(T var, bool new_bit) { - return (var << 1) | (new_bit ? 1 : 0); - } - - constexpr round_constants_generator() : constants() { - // generate_round_constants(); - generate_round_constants_unfolded(); - - } - - integral_type constants[(full_rounds + part_rounds) * t]; - -}; - - -int main() { - constexpr std::size_t width = 4; - constexpr std::size_t full_rounds = 8; - constexpr std::size_t part_rounds = 56; - typedef round_constants_generator rcg; - - // Add option -fconstexpr-ops-limit=4294967296 to compiler - constexpr rcg gen; - for (std::size_t i = 0; i < (8 + 56) * 4; i++) - cout << gen.constants[i] << '\n'; - - return 0; -} diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/inference.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/inference.hpp index 3ba6dcfc7b..34c3b054f5 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/inference.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/inference.hpp @@ -55,37 +55,35 @@ namespace nil { extended_field_element, pure_field_element>::type; } // namespace types - } // namespace marshalling - } // namespace crypto3 - namespace marshalling { - template - class is_compatible; + template + class is_compatible; - template - class is_compatible ::value>::type> { - using default_endianness = option::big_endian; - public: - template - using type = typename nil::crypto3::marshalling::types::curve_element, - typename T::group_type>; - static const bool value = true; - static const bool fixed_size = true; - }; + template + class is_compatible ::value>::type> { + using default_endianness = option::big_endian; + public: + template + using type = typename nil::crypto3::marshalling::types::curve_element, + typename T::group_type>; + static const bool value = true; + static const bool fixed_size = true; + }; - template - class is_compatible ::value>::type> { - using default_endianness = option::big_endian; - public: - template - using type = nil::crypto3::marshalling::types::field_element< - nil::marshalling::field_type, - T>; - static const bool value = true; - static const bool fixed_size = true; - }; + template + class is_compatible ::value>::type> { + using default_endianness = option::big_endian; + public: + template + using type = nil::crypto3::marshalling::types::field_element< + nil::crypto3::marshalling::field_type, + T>; + static const bool value = true; + static const bool fixed_size = true; + }; - } // namespace marshalling + } // namespace marshalling + } // namespace crypto3 } // namespace nil #endif // CRYPTO3_MARSHALLING_ALGEBRA_INFERENCE_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/alt_bn128.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/alt_bn128.hpp index c137899292..0ec9ce28b2 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/alt_bn128.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/alt_bn128.hpp @@ -53,7 +53,7 @@ namespace nil { template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::alt_bn128_254::template g1_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -64,11 +64,11 @@ namespace nil { using g1_field_type = typename group_value_type::field_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { /* Point is always encoded in compressed form, only X coordinate. * Highest bit is Infinity flag @@ -80,7 +80,7 @@ namespace nil { auto point_affine = point.to_affine(); - write_data( + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); @@ -92,13 +92,13 @@ namespace nil { *iter |= S_bit; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::alt_bn128_254::template g2_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -109,11 +109,11 @@ namespace nil { using g2_field_type = typename group_value_type::field_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { /* Point is always encoded in compressed form, only X coordinate. * Highest bit is Infinity flag @@ -135,12 +135,12 @@ namespace nil { form>::value_type point_affine = point.to_affine(); TIter write_iter = iter; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[1].data), write_iter); write_iter += sizeof_field_element_chunks_count; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[0].data), write_iter); @@ -153,14 +153,14 @@ namespace nil { *iter |= S_bit; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::alt_bn128_254::template g1_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -169,11 +169,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -186,12 +186,12 @@ namespace nil { chunk_type I_bit = *iter & 0x80; chunk_type S_bit = *iter & 0x40; - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); if (I_bit) { // point at infinity point = g1_value_type(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } g1_field_value_type x_mod(x); @@ -209,13 +209,13 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::alt_bn128_254::template g2_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -224,11 +224,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -246,14 +246,14 @@ namespace nil { chunk_type S_bit = *iter & 0x40; TIter read_iter = iter; - integral_type x_1 = read_data(read_iter); + integral_type x_1 = multiprecision::processing::read_data(read_iter); read_iter += sizeof_field_element_chunks_count; - integral_type x_0 = read_data(read_iter); + integral_type x_0 = multiprecision::processing::read_data(read_iter); if (I_bit) { // point at infinity point = group_value_type(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } g2_field_value_type x_mod(x_0, x_1); @@ -271,7 +271,7 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/babyjubjub.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/babyjubjub.hpp index 85975b54a9..bf7075bb67 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/babyjubjub.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/babyjubjub.hpp @@ -62,7 +62,7 @@ namespace nil { template struct curve_element_writer< - nil::marshalling::endian::little_endian, + nil::crypto3::marshalling::endian::little_endian, typename algebra::curves::babyjubjub::template g1_type> { using group_type = @@ -71,14 +71,14 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::little_endian; + using endianness = nil::crypto3::marshalling::endian::little_endian; using params_type = curve_element_marshalling_params; using encoded_integral_type = typename algebra::fields::field<256>::integral_type; template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(const group_value_type &point, TIter &iter) { using base_field_type = typename group_type::field_type; using base_integral_type = typename base_field_type::integral_type; @@ -98,7 +98,7 @@ namespace nil { uint8_t s = detail::sign_gf_p(point_affine.X) ? (0x40) : 0; auto tmp_iter = std::begin(encoded_value); - write_data(static_cast(point_affine.Y.data), + multiprecision::processing::write_data(static_cast(point_affine.Y.data), tmp_iter); assert(!(encoded_value[encoded_size - 1] & 0xC0)); @@ -106,14 +106,14 @@ namespace nil { std::copy(std::cbegin(encoded_value), std::cend(encoded_value), iter); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::little_endian, + nil::crypto3::marshalling::endian::little_endian, typename algebra::curves::babyjubjub::template g1_type> { using group_type = @@ -122,7 +122,7 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::little_endian; + using endianness = nil::crypto3::marshalling::endian::little_endian; using params_type = curve_element_marshalling_params; using group_affine_value_type = @@ -132,7 +132,7 @@ namespace nil { template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(group_value_type &point, TIter &iter) { using base_field_type = typename group_type::field_type; @@ -146,7 +146,7 @@ namespace nil { "wrong size"); base_integral_type y = - read_data(iter); + multiprecision::processing::read_data(iter); bool sign = *(iter + encoded_size - 1) & (1 << 6); auto decoded_point_affine = @@ -157,7 +157,7 @@ namespace nil { } point = decoded_point_affine.value(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/bls12.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/bls12.hpp index 09a597df3a..6d2711adc7 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/bls12.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/bls12.hpp @@ -129,7 +129,7 @@ namespace nil { using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const chunk_type I_bit = 0x40; @@ -138,13 +138,13 @@ namespace nil { point.to_affine(); chunk_type m_unit = detail::evaluate_m_unit(point, true); if (!(I_bit & m_unit)) { - write_data( + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); } (*iter) |= m_unit; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; @@ -163,7 +163,7 @@ namespace nil { using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -180,19 +180,19 @@ namespace nil { chunk_type m_unit = detail::evaluate_m_unit(point, true); if (!(I_bit & m_unit)) { TIter write_iter = iter; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[1].data), write_iter); write_iter += sizeof_field_element_chunks_count; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[0].data), write_iter); } (*iter) |= m_unit; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; @@ -210,7 +210,7 @@ namespace nil { using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const chunk_type I_bit = 0x40; @@ -219,13 +219,13 @@ namespace nil { point.to_affine(); chunk_type m_unit = detail::evaluate_m_unit(point, true); if (!(I_bit & m_unit)) { - write_data( + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); } (*iter) |= m_unit; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; @@ -244,7 +244,7 @@ namespace nil { using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -261,26 +261,26 @@ namespace nil { chunk_type m_unit = detail::evaluate_m_unit(point, true); if (!(I_bit & m_unit)) { TIter write_iter = iter; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[1].data), write_iter); write_iter += sizeof_field_element_chunks_count; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[0].data), write_iter); } (*iter) |= m_unit; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::bls12_381::template g1_type> { using group_type = typename algebra::curves::bls12_381:: @@ -288,11 +288,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; const chunk_type m_unit = *iter & 0xE0; @@ -316,10 +316,10 @@ namespace nil { BOOST_VERIFY(iter + sizeof_field_element_chunks_count == std::find(iter, iter + sizeof_field_element_chunks_count, true)); point = g1_value_type(); // point at infinity - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); g1_field_value_type x_mod(x); g1_field_value_type y2_mod = x_mod.pow(3u) + group_type::params_type::b; @@ -336,13 +336,13 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::bls12_381::template g2_type> { using group_type = typename algebra::curves::bls12_381:: @@ -350,11 +350,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; const chunk_type m_unit = *iter & 0xE0; @@ -378,15 +378,15 @@ namespace nil { BOOST_ASSERT(iter + 2 * sizeof_field_element_chunks_count == std::find(iter, iter + 2 * sizeof_field_element_chunks_count, true)); point = g2_value_type(); // point at infinity - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } TIter read_iter = iter; - integral_type x_1 = read_data(read_iter); + integral_type x_1 = multiprecision::processing::read_data(read_iter); read_iter += sizeof_field_element_chunks_count; - integral_type x_0 = read_data(read_iter); + integral_type x_0 = multiprecision::processing::read_data(read_iter); g2_field_value_type x_mod(x_0, x_1); g2_field_value_type y2_mod = x_mod.pow(3u) + group_type::params_type::b; @@ -403,13 +403,13 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::bls12_377::template g1_type> { using group_type = typename algebra::curves::bls12_377:: @@ -417,11 +417,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; const chunk_type m_unit = *iter & 0xE0; @@ -445,10 +445,10 @@ namespace nil { BOOST_VERIFY(iter + sizeof_field_element_chunks_count == std::find(iter, iter + sizeof_field_element_chunks_count, true)); point = g1_value_type(); // point at infinity - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); g1_field_value_type x_mod(x); g1_field_value_type y2_mod = x_mod.pow(3u) + group_type::params_type::b; @@ -465,13 +465,13 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::bls12_377::template g2_type> { using group_type = typename algebra::curves::bls12_377:: @@ -479,11 +479,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; const chunk_type m_unit = *iter & 0xE0; @@ -507,15 +507,15 @@ namespace nil { BOOST_ASSERT(iter + 2 * sizeof_field_element_chunks_count == std::find(iter, iter + 2 * sizeof_field_element_chunks_count, true)); point = g2_value_type(); // point at infinity - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } TIter read_iter = iter; - integral_type x_1 = read_data(read_iter); + integral_type x_1 = multiprecision::processing::read_data(read_iter); read_iter += sizeof_field_element_chunks_count; - integral_type x_0 = read_data(read_iter); + integral_type x_0 = multiprecision::processing::read_data(read_iter); g2_field_value_type x_mod(x_0, x_1); g2_field_value_type y2_mod = x_mod.pow(3u) + group_type::params_type::b; @@ -532,7 +532,7 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/detail/curve_element.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/detail/curve_element.hpp index 8d08c49a50..adc613a6db 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/detail/curve_element.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/detail/curve_element.hpp @@ -108,7 +108,7 @@ namespace nil { std::enable_if< std::is_same::value, - outcome::result >::type + outcome::result >::type recover_x(const typename GroupAffineElement::field_type::integral_type &y_int, bool sign, bool rfc8032 = false) { using base_field_type = typename GroupAffineElement::field_type; @@ -118,13 +118,13 @@ namespace nil { using group_affine_value_type = GroupAffineElement; if (y_int >= base_field_type::modulus) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } base_field_value_type y(y_int); base_field_value_type y2 = y * y; base_field_value_type y2dp1 = group_type::params_type::a - y2 * group_type::params_type::d; if (y2dp1.is_zero()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } base_field_value_type x2 = (base_integral_type(1) - y2) * y2dp1.inversed(); @@ -132,7 +132,7 @@ namespace nil { return group_affine_value_type(base_field_value_type::zero(), y); } if (!x2.is_square()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } base_field_value_type x = x2.sqrt(); auto x_int = static_cast(x.data); diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/ed25519.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/ed25519.hpp index 415d68a5a2..23b1e94808 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/ed25519.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/ed25519.hpp @@ -54,7 +54,7 @@ namespace nil { // https://datatracker.ietf.org/doc/html/rfc8032#section-5.1.3 template struct curve_element_writer< - nil::marshalling::endian::little_endian, + nil::crypto3::marshalling::endian::little_endian, typename algebra::curves::ed25519::template g1_type> { using group_type = @@ -63,13 +63,13 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::little_endian; + using endianness = nil::crypto3::marshalling::endian::little_endian; using params_type = curve_element_marshalling_params; template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(const group_value_type &point, TIter &iter) { using base_field_type = typename group_type::field_type; using base_integral_type = typename base_field_type::integral_type; @@ -87,23 +87,23 @@ namespace nil { } auto tmp_iter = std::begin(encoded_value); - write_data(static_cast(point_affine.Y.data), + multiprecision::processing::write_data(static_cast(point_affine.Y.data), tmp_iter); assert(!(encoded_value[encoded_size - 1] & 0x80)); - bool sign = (point_affine.X.data & 1) != 0u; + bool sign = (point_affine.X.data.base() & 1u) != 0u; encoded_value[encoded_size - 1] |= (static_cast(sign ? 1 : 0) << 7); std::copy(std::cbegin(encoded_value), std::cend(encoded_value), iter); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::little_endian, + nil::crypto3::marshalling::endian::little_endian, typename algebra::curves::ed25519::template g1_type> { using group_type = @@ -112,7 +112,7 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::little_endian; + using endianness = nil::crypto3::marshalling::endian::little_endian; using params_type = curve_element_marshalling_params; using group_affine_value_type = @@ -122,7 +122,7 @@ namespace nil { template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(group_value_type &point, TIter &iter) { @@ -137,7 +137,7 @@ namespace nil { "wrong size"); base_integral_type y = - read_data(iter); + multiprecision::processing::read_data(iter); bool sign = *(iter + encoded_size - 1) & (1 << 7); auto decoded_point_affine = @@ -148,7 +148,7 @@ namespace nil { } point = decoded_point_affine.value(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/jubjub.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/jubjub.hpp index c972a3d16a..ef02d2408f 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/jubjub.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/jubjub.hpp @@ -50,7 +50,7 @@ namespace nil { template struct curve_element_writer< - nil::marshalling::endian::little_endian, + nil::crypto3::marshalling::endian::little_endian, typename algebra::curves::jubjub::template g1_type> { using group_type = @@ -59,23 +59,23 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::little_endian; + using endianness = nil::crypto3::marshalling::endian::little_endian; using params_type = curve_element_marshalling_params; /// https://zips.z.cash/protocol/protocol.pdf#concreteextractorjubjub template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { - write_data( + multiprecision::processing::write_data( static_cast(point.to_affine().X.data), iter); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template<> struct curve_element_reader< - nil::marshalling::endian::little_endian, + nil::crypto3::marshalling::endian::little_endian, typename algebra::curves::jubjub::template g1_type> { using group_type = @@ -84,7 +84,7 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::little_endian; + using endianness = nil::crypto3::marshalling::endian::little_endian; using params_type = curve_element_marshalling_params; /// abst_J(LEOS2BSP_{256}(iter)) @@ -92,21 +92,21 @@ namespace nil { template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(group_value_type &point, TIter &iter) { using field_type = typename group_value_type::field_type; using scalar_type = typename algebra::curves::jubjub::scalar_field_type; using integral_type = typename field_type::integral_type; - integral_type int_u = read_data(iter); + integral_type int_u = multiprecision::processing::read_data(iter); if (int_u >= group_value_type::field_type::modulus) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } if (int_u.is_zero()) { point = group_value_type(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } field_type::value_type field_u(int_u); @@ -114,7 +114,7 @@ namespace nil { field_type::value_type denominator = (field_type::value_type::one() - field_type::value_type(group_type::params_type::d) * uu); if (denominator.is_zero()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } field_type::value_type fraction = @@ -122,7 +122,7 @@ namespace nil { * denominator.inversed(); if (!fraction.is_square()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } field_type::value_type v = fraction.sqrt(); @@ -130,17 +130,17 @@ namespace nil { // ... at most one of (u, v) and (u, −v) is in J(𝑟) point = group_value_type(field_u, v); if ( (point * (scalar_type::modulus - 1) + point).is_zero() ) { - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } point = group_value_type(field_u, -v); if ( (point * (scalar_type::modulus - 1) + point).is_zero() ) { - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } // If neither has order r, then point is of mixed order and should be rejected point = group_value_type(); - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } }; } // namespace processing diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt4.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt4.hpp index ba1b270ff8..4be174a646 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt4.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt4.hpp @@ -82,7 +82,7 @@ namespace nil { template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt4_298::template g1_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -93,11 +93,11 @@ namespace nil { using g1_field_type = typename group_value_type::field_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { /* Point is encoded in compressed form, only X coordinate. * Highest bit is Infinity flag @@ -109,7 +109,7 @@ namespace nil { auto point_affine = point.to_affine(); - write_data( + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); @@ -121,13 +121,13 @@ namespace nil { *iter |= S_bit; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt4_298::template g2_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -138,11 +138,11 @@ namespace nil { using g2_field_type = typename group_value_type::field_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { /* Point is always encoded in compressed form, only X coordinate. * Highest bit is Infinity flag @@ -162,12 +162,12 @@ namespace nil { auto point_affine = point.to_affine(); TIter write_iter = iter; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[1].data), write_iter); write_iter += sizeof_field_element_chunks_count; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[0].data), write_iter); @@ -179,13 +179,13 @@ namespace nil { *iter |= S_bit; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt4_298::template g1_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -194,11 +194,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -211,12 +211,12 @@ namespace nil { chunk_type I_bit = *iter & 0x80; chunk_type S_bit = *iter & 0x40; - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); if (I_bit) { // point at infinity point = g1_value_type(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } g1_field_value_type x_mod(x); @@ -236,13 +236,13 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt4_298::template g2_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -251,11 +251,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -273,14 +273,14 @@ namespace nil { chunk_type S_bit = *iter & 0x40; TIter read_iter = iter; - integral_type x_1 = read_data(read_iter); + integral_type x_1 = multiprecision::processing::read_data(read_iter); read_iter += sizeof_field_element_chunks_count; - integral_type x_0 = read_data(read_iter); + integral_type x_0 = multiprecision::processing::read_data(read_iter); if (I_bit) { // point at infinity point = group_value_type(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } g2_field_value_type x_mod(x_0, x_1); @@ -300,7 +300,7 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; } // namespace processing diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt6.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt6.hpp index 6f051e1ea9..322b24acd4 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt6.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/mnt6.hpp @@ -83,7 +83,7 @@ namespace nil { template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt6_298::template g1_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -94,11 +94,11 @@ namespace nil { using g1_field_type = typename group_value_type::field_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { /* Point is encoded in compressed form, only X coordinate. * Highest bit is Infinity flag @@ -110,7 +110,7 @@ namespace nil { auto point_affine = point.to_affine(); - write_data( + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); @@ -122,13 +122,13 @@ namespace nil { *iter |= S_bit; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt6_298::template g2_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -139,11 +139,11 @@ namespace nil { using g2_field_type = typename group_value_type::field_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(const group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(const group_value_type &point, TIter &iter) { /* Point is always encoded in compressed form, only X coordinate. * Highest bit is Infinity flag @@ -163,19 +163,19 @@ namespace nil { auto point_affine = point.to_affine(); TIter write_iter = iter; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[2].data), write_iter); write_iter += sizeof_field_element_chunks_count; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[1].data), write_iter); write_iter += sizeof_field_element_chunks_count; - write_data( + multiprecision::processing::write_data( static_cast( point_affine.X.data[0].data), write_iter); @@ -188,14 +188,14 @@ namespace nil { *iter |= S_bit; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt6_298::template g1_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -204,11 +204,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -221,12 +221,12 @@ namespace nil { chunk_type I_bit = *iter & 0x80; chunk_type S_bit = *iter & 0x40; - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); if (I_bit) { // point at infinity point = g1_value_type(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } g1_field_value_type x_mod(x); @@ -246,13 +246,13 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::mnt6_298::template g2_type< Coordinates, algebra::curves::forms::short_weierstrass>> { @@ -261,11 +261,11 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template - static nil::marshalling::status_type process(group_value_type &point, TIter &iter) { + static nil::crypto3::marshalling::status_type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; constexpr static const std::size_t sizeof_field_element = @@ -283,16 +283,16 @@ namespace nil { chunk_type S_bit = *iter & 0x40; TIter read_iter = iter; - integral_type x_2 = read_data(read_iter); + integral_type x_2 = multiprecision::processing::read_data(read_iter); read_iter += sizeof_field_element_chunks_count; - integral_type x_1 = read_data(read_iter); + integral_type x_1 = multiprecision::processing::read_data(read_iter); read_iter += sizeof_field_element_chunks_count; - integral_type x_0 = read_data(read_iter); + integral_type x_0 = multiprecision::processing::read_data(read_iter); if (I_bit) { // point at infinity point = group_value_type(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } g2_field_value_type x_mod(x_0, x_1, x_2); @@ -312,7 +312,7 @@ namespace nil { point = result; } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/pallas.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/pallas.hpp index 8352df0da2..977e46d705 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/pallas.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/pallas.hpp @@ -86,7 +86,7 @@ namespace nil { * */ template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::pallas::template g1_type> { using group_type = typename algebra::curves::pallas:: @@ -94,34 +94,34 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(const group_value_type &point, TIter &iter) { if (point.is_zero()) { *iter++ = 0x00; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } typename group_type::curve_type::template g1_type::value_type point_affine = point.to_affine(); - *iter++ = (point_affine.Y.data & 1) == 0u ? 0x02 : 0x03; - write_data( + *iter++ = (point_affine.Y.data.base() & 1u) == 0u ? 0x02 : 0x03; + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::pallas::template g1_type> { using group_type = typename algebra::curves::pallas:: @@ -129,7 +129,7 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; using curve_params = typename group_type::params_type; using integral_type = typename group_value_type::field_type::integral_type; @@ -139,7 +139,7 @@ namespace nil { template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; @@ -148,26 +148,26 @@ namespace nil { if (0x00 == prefix) { point = group_value_type::zero(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } if (prefix != 0x02 && prefix != 0x03) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } constexpr static const std::size_t sizeof_field_element = params_type::bit_length() / (group_value_type::field_type::arity); - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); g1_field_value_type x_mod(x); g1_field_value_type y2_mod = x_mod * x_mod * x_mod + curve_params::a * x_mod + curve_params::b; if (!y2_mod.is_square()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } g1_field_value_type y_mod = y2_mod.sqrt(); - const chunk_type expected_prefix = (y_mod.data & 1) == 0u ? 0x02 : 0x03; + const chunk_type expected_prefix = (y_mod.data.base() & 1u) == 0u ? 0x02 : 0x03; if (expected_prefix == prefix) { point = group_value_type(x_mod, y_mod); @@ -175,7 +175,7 @@ namespace nil { point = group_value_type(x_mod, -y_mod); } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_k1.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_k1.hpp index 0ab5ca6d4f..0b6e15171f 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_k1.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_k1.hpp @@ -90,7 +90,7 @@ namespace nil { * */ template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::detail::secp_k1_g1< Version, algebra::curves::forms::short_weierstrass, @@ -99,41 +99,41 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(const group_value_type &point, TIter &iter) { if (point.is_zero()) { *iter++ = 0x00; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } typename group_type::curve_type::template g1_type::value_type point_affine = point.to_affine(); - *iter++ = (point_affine.Y.data & 1) == 0u ? 0x02 : 0x03; - write_data( + *iter++ = (point_affine.Y.data.base() & 1u) == 0u ? 0x02 : 0x03; + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::detail::secp_k1_g1> { using group_type = typename algebra::curves::secp_k1::template g1_type<>; using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; using curve_params = typename group_type::params_type; using integral_type = typename group_value_type::field_type::integral_type; @@ -143,7 +143,7 @@ namespace nil { template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; @@ -152,26 +152,26 @@ namespace nil { if (0x00 == prefix) { point = group_value_type::zero(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } if (prefix != 0x02 && prefix != 0x03) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } constexpr static const std::size_t sizeof_field_element = params_type::bit_length() / (group_value_type::field_type::arity); - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); g1_field_value_type x_mod(x); g1_field_value_type y2_mod = x_mod * x_mod * x_mod + curve_params::a * x_mod + curve_params::b; if (!y2_mod.is_square()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } g1_field_value_type y_mod = y2_mod.sqrt(); - const chunk_type expected_prefix = (y_mod.data & 1) == 0u ? 0x02 : 0x03; + const chunk_type expected_prefix = (y_mod.data.base() & 1u) == 0u ? 0x02 : 0x03; if (expected_prefix == prefix) { point = group_value_type(x_mod, y_mod); @@ -179,7 +179,7 @@ namespace nil { point = group_value_type(x_mod, -y_mod); } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_r1.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_r1.hpp index bccaa173ab..e44638b057 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_r1.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/secp_r1.hpp @@ -90,7 +90,7 @@ namespace nil { * */ template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::detail::secp_r1_g1< Version, algebra::curves::forms::short_weierstrass, @@ -99,41 +99,41 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(const group_value_type &point, TIter &iter) { if (point.is_zero()) { *iter++ = 0x00; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } typename group_type::curve_type::template g1_type::value_type point_affine = point.to_affine(); - *iter++ = (point_affine.Y.data & 1) == 0u ? 0x02 : 0x03; - write_data( + *iter++ = (point_affine.Y.data.base() & 1u) == 0u ? 0x02 : 0x03; + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::detail::secp_r1_g1> { using group_type = typename algebra::curves::secp_r1::template g1_type<>; using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; using curve_params = typename group_type::params_type; using integral_type = typename group_value_type::field_type::integral_type; @@ -143,7 +143,7 @@ namespace nil { template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; @@ -152,26 +152,26 @@ namespace nil { if (0x00 == prefix) { point = group_value_type::zero(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } if (prefix != 0x02 && prefix != 0x03) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } constexpr static const std::size_t sizeof_field_element = params_type::bit_length() / (group_value_type::field_type::arity); - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); g1_field_value_type x_mod(x); g1_field_value_type y2_mod = x_mod * x_mod * x_mod + curve_params::a * x_mod + curve_params::b; if (!y2_mod.is_square()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } g1_field_value_type y_mod = y2_mod.sqrt(); - const chunk_type expected_prefix = (y_mod.data & 1) == 0u ? 0x02 : 0x03; + const chunk_type expected_prefix = (y_mod.data.base() & 1u) == 0u ? 0x02 : 0x03; if (expected_prefix == prefix) { point = group_value_type(x_mod, y_mod); @@ -179,7 +179,7 @@ namespace nil { point = group_value_type(x_mod, -y_mod); } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/vesta.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/vesta.hpp index 8b3afa47f4..bc91078ee4 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/vesta.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/processing/vesta.hpp @@ -86,7 +86,7 @@ namespace nil { * */ template struct curve_element_writer< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::vesta::template g1_type> { using group_type = typename algebra::curves::vesta:: @@ -94,34 +94,34 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(const group_value_type &point, TIter &iter) { if (point.is_zero()) { *iter++ = 0x00; - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } typename group_type::curve_type::template g1_type::value_type point_affine = point.to_affine(); - *iter++ = (point_affine.Y.data & 1) == 0u ? 0x02 : 0x03; - write_data( + *iter++ = (point_affine.Y.data.base() & 1u) == 0u ? 0x02 : 0x03; + multiprecision::processing::write_data( static_cast(point_affine.X.data), iter); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; template struct curve_element_reader< - nil::marshalling::endian::big_endian, + nil::crypto3::marshalling::endian::big_endian, typename algebra::curves::vesta::template g1_type> { using group_type = typename algebra::curves::vesta:: @@ -129,7 +129,7 @@ namespace nil { using group_value_type = typename group_type::value_type; using coordinates = typename group_value_type::coordinates; using form = typename group_value_type::form; - using endianness = nil::marshalling::endian::big_endian; + using endianness = nil::crypto3::marshalling::endian::big_endian; using params_type = curve_element_marshalling_params; using curve_params = typename group_type::params_type; using integral_type = typename group_value_type::field_type::integral_type; @@ -139,7 +139,7 @@ namespace nil { template static typename std::enable_if< std::is_same::value_type>::value, - nil::marshalling::status_type>::type + nil::crypto3::marshalling::status_type>::type process(group_value_type &point, TIter &iter) { using chunk_type = typename TIter::value_type; @@ -148,26 +148,26 @@ namespace nil { if (0x00 == prefix) { point = group_value_type::zero(); - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } if (prefix != 0x02 && prefix != 0x03) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } constexpr static const std::size_t sizeof_field_element = params_type::bit_length() / (group_value_type::field_type::arity); - integral_type x = read_data(iter); + integral_type x = multiprecision::processing::read_data(iter); g1_field_value_type x_mod(x); g1_field_value_type y2_mod = x_mod * x_mod * x_mod + curve_params::a * x_mod + curve_params::b; if (!y2_mod.is_square()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } g1_field_value_type y_mod = y2_mod.sqrt(); - const chunk_type expected_prefix = (y_mod.data & 1) == 0u ? 0x02 : 0x03; + const chunk_type expected_prefix = (y_mod.data.base() & 1u) == 0u ? 0x02 : 0x03; if (expected_prefix == prefix) { point = group_value_type(x_mod, y_mod); @@ -175,7 +175,7 @@ namespace nil { point = group_value_type(x_mod, -y_mod); } - return nil::marshalling::status_type::success; + return nil::crypto3::marshalling::status_type::success; } }; diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/type_traits.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/type_traits.hpp index 3c1418bef8..b40f2f3c74 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/type_traits.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/type_traits.hpp @@ -53,7 +53,7 @@ namespace nil { } // namespace types } // namespace marshalling } // namespace crypto3 - namespace marshalling { + namespace crypto3::marshalling { /// @brief Compile time check function of whether a provided type is any /// variant of nil::crypto3::marshalling::types::curve_element. @@ -109,4 +109,4 @@ namespace nil { } // namespace marshalling } // namespace nil -#endif // CRYPTO3_MARSHALLING_ALGEBRA_TYPE_TRAITS_HPP \ No newline at end of file +#endif // CRYPTO3_MARSHALLING_ALGEBRA_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/curve_element.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/curve_element.hpp index 2a1a3e21d1..b14a3f77e5 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/curve_element.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/curve_element.hpp @@ -2,6 +2,7 @@ // Copyright (c) 2017-2021 Mikhail Komarov // Copyright (c) 2020-2021 Nikita Kaskov // Copyright (c) 2021 Ilias Khairullin +// Copyright (c) 2024 Vasiliy Olekhov // // MIT License // @@ -48,13 +49,13 @@ namespace nil { namespace types { template class curve_element - : private ::nil::marshalling::types::detail::adapt_basic_field_type< + : private ::nil::crypto3::marshalling::types::detail::adapt_basic_field_type< crypto3::marshalling::types::detail::basic_curve_element, TOptions...> { using curve_group_type = CurveGroupType; - using base_impl_type = ::nil::marshalling::types::detail::adapt_basic_field_type< + using base_impl_type = ::nil::crypto3::marshalling::types::detail::adapt_basic_field_type< crypto3::marshalling::types::detail::basic_curve_element, TOptions...>; @@ -66,7 +67,7 @@ namespace nil { using version_type = typename base_impl_type::version_type; /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = ::nil::marshalling::types::detail::options_parser; + using parsed_options_type = ::nil::crypto3::marshalling::types::detail::options_parser; /// @brief Type of underlying curve_element value. /// @details Same as template parameter T to this class. @@ -140,7 +141,7 @@ namespace nil { /// @return Status of read operation. /// @post Iterator is advanced. template - nil::marshalling::status_type read(TIter &iter, std::size_t size) { + nil::crypto3::marshalling::status_type read(TIter &iter, std::size_t size) { return base_impl_type::read(iter, size); } @@ -160,7 +161,7 @@ namespace nil { /// @return Status of write operation. /// @post Iterator is advanced. template - nil::marshalling::status_type write(TIter &iter, std::size_t size) const { + nil::crypto3::marshalling::status_type write(TIter &iter, std::size_t size) const { return base_impl_type::write(iter, size); } @@ -180,7 +181,7 @@ namespace nil { } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -196,75 +197,23 @@ namespace nil { using base_impl_type::write_data; private: - // because such an adapter uses pure byte reading, - // incompatible with crypto3::curve_element - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to " - "crypto3::curve_element type"); - - // because such an adapter uses pure byte reading, - // incompatible with crypto3::curve_element - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to " - "crypto3::curve_element type"); - - static_assert(!parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio option is not applicable to " - "crypto3::curve_element type"); - static_assert( - !parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "crypto3::curve_element type"); - static_assert(!parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::SequenceSizeForcingEnabled option is not applicable to " - "crypto3::curve_element type"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::SequenceLengthForcingEnabled option is not applicable to " - "crypto3::curve_element type"); - static_assert(!parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to " - "crypto3::curve_element type"); static_assert( !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " + "nil::crypto3::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " "crypto3::curve_element type"); static_assert(!parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to " + "nil::crypto3::marshalling::option::sequence_size_field_prefix option is not applicable to " "crypto3::curve_element type"); - static_assert( - !parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "crypto3::curve_element type"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "crypto3::curve_element type"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "crypto3::curve_element type"); - static_assert( - !parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "crypto3::curve_element type"); - static_assert( - !parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "crypto3::curve_element type"); static_assert(!parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to " + "nil::crypto3::marshalling::option::fixed_size_storage option is not applicable to " "crypto3::curve_element type"); static_assert(!parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to " + "nil::crypto3::marshalling::option::custom_storage_type option is not applicable to " "crypto3::curve_element type"); static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to " + "nil::crypto3::marshalling::option::orig_data_view option is not applicable to " "crypto3::curve_element type"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "crypto3::curve_element type"); }; /// @brief Equality comparison operator. @@ -337,45 +286,39 @@ namespace nil { return false; } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::curve_element type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::curve_element type /// in order to have access to its internal types. - /// @related nil::marshalling::types::curve_element + /// @related nil::crypto3::marshalling::types::curve_element template inline curve_element & to_field_base(curve_element &field) { return field; } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::curve_element type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::curve_element type /// in order to have access to its internal types. - /// @related nil::marshalling::types::curve_element + /// @related nil::crypto3::marshalling::types::curve_element template inline const curve_element & to_field_base(const curve_element &field) { return field; } + template + using curve_element_vector = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, + curve_element>; + template - nil::marshalling::types::array_list< - nil::marshalling::field_type, - curve_element, CurveGroupType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + curve_element_vector> fill_curve_element_vector( const std::vector &curve_elem_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_element_type = curve_element; - using curve_element_vector_type = nil::marshalling::types::array_list< - TTypeBase, - curve_element_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>>; - - curve_element_vector_type result; - + curve_element_vector result; std::vector &val = result.value(); for (std::size_t i = 0; i < curve_elem_vector.size(); i++) { val.push_back(curve_element_type(curve_elem_vector[i])); @@ -385,15 +328,11 @@ namespace nil { template std::vector make_curve_element_vector( - const nil::marshalling::types::array_list< - nil::marshalling::field_type, - curve_element, CurveGroupType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + const curve_element_vector> &curve_elem_vector) { std::vector result; - const std::vector, CurveGroupType>> &values = + const std::vector, CurveGroupType>> &values = curve_elem_vector.value(); std::size_t size = values.size(); diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/detail/curve_element/basic_type.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/detail/curve_element/basic_type.hpp index b7cfecf74d..d34447964d 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/detail/curve_element/basic_type.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/detail/curve_element/basic_type.hpp @@ -107,8 +107,8 @@ namespace nil { } template - nil::marshalling::status_type read(TIter &iter, std::size_t size) { - nil::marshalling::status_type status = reader_type::process(value(), iter); + nil::crypto3::marshalling::status_type read(TIter &iter, std::size_t size) { + nil::crypto3::marshalling::status_type status = reader_type::process(value(), iter); iter += max_length(); return status; } @@ -119,8 +119,8 @@ namespace nil { } template - nil::marshalling::status_type write(TIter &iter, std::size_t size) const { - nil::marshalling::status_type status = writer_type::process(value(), iter); + nil::crypto3::marshalling::status_type write(TIter &iter, std::size_t size) const { + nil::crypto3::marshalling::status_type status = writer_type::process(value(), iter); iter += max_length(); return status; } diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/fast_curve_element.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/fast_curve_element.hpp index f9afce2509..d1380864ad 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/fast_curve_element.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/fast_curve_element.hpp @@ -49,7 +49,7 @@ namespace nil { namespace types { template - using fast_curve_element = nil::marshalling::types::bundle< + using fast_curve_element = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // X @@ -57,31 +57,31 @@ namespace nil { // Y field_element, // is_infinity - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral >>; template - fast_curve_element, CurveGroupType> + fast_curve_element, CurveGroupType> fill_fast_curve_element(const typename CurveGroupType::value_type &point) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using field_element_type = field_element; std::uint8_t is_infinity = point.is_zero(); auto affine_point = point.to_affine(); - return fast_curve_element, CurveGroupType>( + return fast_curve_element, CurveGroupType>( std::make_tuple( field_element_type(affine_point.X), field_element_type(affine_point.Y), - nil::marshalling::types::integral(is_infinity) + nil::crypto3::marshalling::types::integral(is_infinity) )); } template typename CurveGroupType::value_type make_fast_curve_element( - const fast_curve_element, CurveGroupType> + const fast_curve_element, CurveGroupType> &filled_curve_element) { std::uint8_t is_infinity = std::get<2>(filled_curve_element.value()).value(); if(is_infinity) { @@ -93,23 +93,23 @@ namespace nil { } template - nil::marshalling::types::array_list< - nil::marshalling::field_type, - fast_curve_element, CurveGroupType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::array_list< + nil::crypto3::marshalling::field_type, + fast_curve_element, CurveGroupType>, + nil::crypto3::marshalling::option::sequence_size_field_prefix< + nil::crypto3::marshalling::types::integral, std::size_t>>> fill_fast_curve_element_vector( const std::vector &curve_elem_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using fast_curve_element_type = fast_curve_element; - using fast_curve_element_vector_type = nil::marshalling::types::array_list< + using fast_curve_element_vector_type = nil::crypto3::marshalling::types::array_list< TTypeBase, fast_curve_element_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>>; + nil::crypto3::marshalling::option::sequence_size_field_prefix< + nil::crypto3::marshalling::types::integral, std::size_t>>>; fast_curve_element_vector_type result; @@ -122,15 +122,15 @@ namespace nil { template std::vector make_fast_curve_element_vector( - const nil::marshalling::types::array_list< - nil::marshalling::field_type, - fast_curve_element, CurveGroupType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + const nil::crypto3::marshalling::types::array_list< + nil::crypto3::marshalling::field_type, + fast_curve_element, CurveGroupType>, + nil::crypto3::marshalling::option::sequence_size_field_prefix< + nil::crypto3::marshalling::types::integral, std::size_t>>> &curve_elem_vector) { std::vector result; - const std::vector, CurveGroupType>> &values = + const std::vector, CurveGroupType>> &values = curve_elem_vector.value(); std::size_t size = values.size(); diff --git a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/field_element.hpp b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/field_element.hpp index 8efabeb6a9..6e1fdefe02 100644 --- a/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/field_element.hpp +++ b/crypto3/libs/marshalling/algebra/include/nil/crypto3/marshalling/algebra/types/field_element.hpp @@ -2,6 +2,7 @@ // Copyright (c) 2017-2021 Mikhail Komarov // Copyright (c) 2020-2021 Nikita Kaskov // Copyright (c) 2021 Ilias Khairullin +// Copyright (c) 2024 Vasiliy Olekhov // // MIT License // @@ -27,13 +28,10 @@ #ifndef CRYPTO3_MARSHALLING_FIELD_ELEMENT_HPP #define CRYPTO3_MARSHALLING_FIELD_ELEMENT_HPP -#include -#include #include #include #include -#include #include #include #include @@ -117,14 +115,14 @@ namespace nil { typename FieldValueType, typename... TOptions> class pure_field_element - : private ::nil::marshalling::types::detail::adapt_basic_field_type< + : private ::nil::crypto3::marshalling::types::detail::adapt_basic_field_type< integral, TOptions...> { static_assert(algebra::is_field_element::value); static_assert(!algebra::is_extended_field_element::value); - using base_impl_type = ::nil::marshalling::types::detail::adapt_basic_field_type< + using base_impl_type = ::nil::crypto3::marshalling::types::detail::adapt_basic_field_type< integral, TOptions...>; @@ -136,7 +134,7 @@ namespace nil { using version_type = typename base_impl_type::version_type; /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = ::nil::marshalling::types::detail::options_parser; + using parsed_options_type = ::nil::crypto3::marshalling::types::detail::options_parser; /// @brief Type of underlying field_element value. /// @details Same as template parameter T to this class. @@ -211,7 +209,7 @@ namespace nil { /// @return Status of read operation. /// @post Iterator is advanced. template - nil::marshalling::status_type read(TIter &iter, std::size_t size) { + nil::crypto3::marshalling::status_type read(TIter &iter, std::size_t size) { return base_impl_type::read(iter, size); } @@ -231,7 +229,7 @@ namespace nil { /// @return Status of write operation. /// @post Iterator is advanced. template - nil::marshalling::status_type write(TIter &iter, std::size_t size) const { + nil::crypto3::marshalling::status_type write(TIter &iter, std::size_t size) const { return base_impl_type::write(iter, size); } @@ -251,7 +249,7 @@ namespace nil { } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -267,97 +265,31 @@ namespace nil { using base_impl_type::write_data; private: - // because such an adapter uses pure byte reading, - // incompatible with crypto3::field_element - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to " - "crypto3::field_element type"); - - // because such an adapter uses pure byte reading, - // incompatible with crypto3::field_element - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to " - "crypto3::field_element type"); - - static_assert(!parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio option is not applicable to " - "crypto3::field_element type"); - - static_assert( - !parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::SequenceSizeForcingEnabled option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::SequenceLengthForcingEnabled option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " - "crypto3::field_element type"); static_assert(!parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to " + "nil::crypto3::marshalling::option::sequence_size_field_prefix option is not applicable to " "crypto3::field_element type"); - static_assert(!parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "crypto3::field_element type"); }; template class extended_field_element - : private ::nil::marshalling::types::detail::adapt_basic_field_type< - nil::marshalling::types::array_list< - nil::marshalling::field_type, + : private ::nil::crypto3::marshalling::types::detail::adapt_basic_field_type< + nil::crypto3::marshalling::types::array_list< + nil::crypto3::marshalling::field_type, integral, - nil::marshalling::option::fixed_size_storage< + nil::crypto3::marshalling::option::fixed_size_storage< FieldValueType::field_type::arity>>, TOptions...> { static_assert(algebra::is_field_element::value); static_assert(algebra::is_extended_field_element::value); - using base_impl_type = ::nil::marshalling::types::detail::adapt_basic_field_type< - typename nil::marshalling::types::array_list< - nil::marshalling::field_type, + using base_impl_type = ::nil::crypto3::marshalling::types::detail::adapt_basic_field_type< + typename nil::crypto3::marshalling::types::array_list< + nil::crypto3::marshalling::field_type, integral, - nil::marshalling::option::fixed_size_storage< + nil::crypto3::marshalling::option::fixed_size_storage< FieldValueType::field_type::arity>>, TOptions...>; @@ -369,7 +301,7 @@ namespace nil { using version_type = typename base_impl_type::version_type; /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = ::nil::marshalling::types::detail::options_parser; + using parsed_options_type = ::nil::crypto3::marshalling::types::detail::options_parser; /// @brief Type of underlying field_element value. /// @details Same as template parameter T to this class. @@ -463,7 +395,7 @@ namespace nil { /// @return Status of read operation. /// @post Iterator is advanced. template - nil::marshalling::status_type read(TIter &iter, std::size_t size) { + nil::crypto3::marshalling::status_type read(TIter &iter, std::size_t size) { return base_impl_type::read(iter, size); } @@ -483,7 +415,7 @@ namespace nil { /// @return Status of write operation. /// @post Iterator is advanced. template - nil::marshalling::status_type write(TIter &iter, std::size_t size) const { + nil::crypto3::marshalling::status_type write(TIter &iter, std::size_t size) const { return base_impl_type::write(iter, size); } @@ -503,7 +435,7 @@ namespace nil { } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -519,75 +451,9 @@ namespace nil { using base_impl_type::write_data; private: - // because such an adapter uses pure byte reading, - // incompatible with crypto3::field_element - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to " - "crypto3::field_element type"); - - // because such an adapter uses pure byte reading, - // incompatible with crypto3::field_element - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to " - "crypto3::field_element type"); - - static_assert(!parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio option is not applicable to " - "crypto3::field_element type"); - - static_assert( - !parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::SequenceSizeForcingEnabled option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::SequenceLengthForcingEnabled option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " - "crypto3::field_element type"); static_assert(!parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to " + "nil::crypto3::marshalling::option::sequence_size_field_prefix option is not applicable to " "crypto3::field_element type"); - static_assert(!parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to " - "crypto3::field_element type"); - static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to " - "crypto3::field_element type"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "crypto3::field_element type"); }; template // inline field_element & // to_field_base(field_element &field) { // return field; // } - // /// @brief Upcast type of the field definition to its parent nil::marshalling::types::field_element type + // /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::field_element type // /// in order to have access to its internal types. - // /// @related nil::marshalling::types::field_element + // /// @related nil::crypto3::marshalling::types::field_element // template // inline const field_element & // to_field_base(const field_element &field) { // return field; // } - + template - using field_element_vector = nil::marshalling::types::array_list< + using field_element_vector = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + field_element>; template - field_element_vector> + field_element_vector> fill_field_element_vector(const std::vector &field_elem_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using field_element_type = field_element; - using field_element_vector_type = nil::marshalling::types::array_list< - TTypeBase, - field_element_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; - field_element_vector_type result; + field_element_vector result; for (std::size_t i = 0; i < field_elem_vector.size(); i++) { result.value().push_back(field_element_type(field_elem_vector[i])); } @@ -715,7 +574,7 @@ namespace nil { template std::vector make_field_element_vector( - const field_element_vector>& field_elem_vector) { + const field_element_vector>& field_elem_vector) { std::vector result; result.reserve(field_elem_vector.value().size()); diff --git a/crypto3/libs/marshalling/algebra/include/nil/detail/type_traits.hpp b/crypto3/libs/marshalling/algebra/include/nil/detail/type_traits.hpp deleted file mode 100644 index ee7bbf5f27..0000000000 --- a/crypto3/libs/marshalling/algebra/include/nil/detail/type_traits.hpp +++ /dev/null @@ -1,309 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef NIL_DETAIL_TYPE_TRAITS_HPP -#define NIL_DETAIL_TYPE_TRAITS_HPP - -#include - -#include -#include - -#include -#include - -#ifndef GENERATE_HAS_MEMBER_TYPE -#define GENERATE_HAS_MEMBER_TYPE(Type) \ - template \ - class HasMemberType_##Type { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMemberType_##Type::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - struct Type { }; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(typename U::Type *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##Type : public std::integral_constant::RESULT> { }; -#endif //GENERATE_HAS_MEMBER_TYPE - -#ifndef GENERATE_HAS_MEMBER -#define GENERATE_HAS_MEMBER(member) \ - template \ - class HasMember_##member { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMember_##member::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - int member; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(decltype(U::member) *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##member : public std::integral_constant::RESULT> { }; -#endif //GENERATE_HAS_MEMBER - -#ifndef GENERATE_HAS_MEMBER_FUNCTION -#define GENERATE_HAS_MEMBER_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; -#endif //GENERATE_HAS_MEMBER_FUNCTION - -#ifndef GENERATE_HAS_MEMBER_CONST_FUNCTION -#define GENERATE_HAS_MEMBER_CONST_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; -#endif //GENERATE_HAS_MEMBER_CONST_FUNCTION - -#ifndef GENERATE_HAS_MEMBER_RETURN_FUNCTION -#define GENERATE_HAS_MEMBER_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; -#endif //GENERATE_HAS_MEMBER_RETURN_FUNCTION - -#ifndef GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION -#define GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; -#endif //GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION - -namespace nil { - namespace detail { - - GENERATE_HAS_MEMBER_TYPE(iterator) - GENERATE_HAS_MEMBER_TYPE(const_iterator) - - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(begin, const_iterator) - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(end, const_iterator) - - template - struct is_iterator { - static char test(...); - - template::difference_type, - typename = typename std::iterator_traits::pointer, - typename = typename std::iterator_traits::reference, - typename = typename std::iterator_traits::value_type, - typename = typename std::iterator_traits::iterator_category> - static long test(U &&); - - constexpr static bool value = std::is_same())), long>::value; - }; - - template - struct is_range { - static const bool value = has_begin::value && has_end::value; - }; - - template - struct is_container { - static const bool value - = has_const_iterator::value && has_begin::value && has_end::value; - }; - - /// @brief Check whether provided type is a variant of - /// std::tuple. - /// @tparam TType Type to check. - template - struct is_tuple { - /// @brief By default Value has value false. Will be true for any - /// variant of std::tuple. - static const bool value = false; - }; - - /// @cond SKIP_DOC - template - struct is_tuple> { - static const bool value = true; - }; - /// @endcond - - //---------------------------------------- - - /// @brief Check whether TType type is included in the tuple TTuple - /// @tparam TType Type to check - /// @tparam TTuple Tuple - /// @pre @code IsTuple::value == true @endcode - template - class is_in_tuple { - static_assert(is_tuple::value, "TTuple must be std::tuple"); - - public: - /// @brief By default the value is false, will be set to true if TType - /// is found in TTuple. - static const bool value = false; - }; - - /// @cond SKIP_DOC - template - class is_in_tuple> { - public: - static const bool value - = std::is_same::value || is_in_tuple>::value; - }; - - template - class is_in_tuple> { - public: - static const bool value = false; - }; - - template - struct is_array { - static const bool value = false; - }; - - template - struct is_array> { - static const bool value = true; - }; - - template - struct is_array> { - static const bool value = true; - }; - - /// @endcond - } // namespace detail -} // namespace nil - -#endif // NIL_DETAIL_TYPE_TRAITS_HPP \ No newline at end of file diff --git a/crypto3/libs/marshalling/algebra/test/CMakeLists.txt b/crypto3/libs/marshalling/algebra/test/CMakeLists.txt index 5752de2dc4..a23fdbc245 100644 --- a/crypto3/libs/marshalling/algebra/test/CMakeLists.txt +++ b/crypto3/libs/marshalling/algebra/test/CMakeLists.txt @@ -32,7 +32,7 @@ macro(define_marshalling_test name) ${Boost_INCLUDE_DIRS}) set_target_properties(${test_name} PROPERTIES - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") diff --git a/crypto3/libs/marshalling/algebra/test/curve_element.cpp b/crypto3/libs/marshalling/algebra/test/curve_element.cpp index 437be6ab9e..db5df14b18 100644 --- a/crypto3/libs/marshalling/algebra/test/curve_element.cpp +++ b/crypto3/libs/marshalling/algebra/test/curve_element.cpp @@ -43,7 +43,6 @@ #include #include #include -#include #include #include @@ -90,14 +89,14 @@ void test_group_element(T val) { using unit_type = unsigned char; - static_assert(nil::marshalling::is_compatible::value); - nil::marshalling::status_type status; + static_assert(nil::crypto3::marshalling::is_compatible::value); + nil::crypto3::marshalling::status_type status; - std::vector cv = nil::marshalling::pack(val, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + std::vector cv = nil::crypto3::marshalling::pack(val, status); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - T test_val = nil::marshalling::pack(cv, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + T test_val = nil::crypto3::marshalling::pack(cv, status); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); BOOST_CHECK_EQUAL(val.to_affine(), test_val.to_affine()); } @@ -137,8 +136,8 @@ void test_pairing_curve(std::string curve_name) BOOST_AUTO_TEST_SUITE(curve_element_test_suite) -using big_endian = nil::marshalling::option::big_endian; -using little_endian = nil::marshalling::option::little_endian; +using big_endian = nil::crypto3::marshalling::option::big_endian; +using little_endian = nil::crypto3::marshalling::option::little_endian; BOOST_AUTO_TEST_CASE(curve_element_mnt4) { test_pairing_curve("mnt4_298"); diff --git a/crypto3/libs/marshalling/algebra/test/curve_element_fixed_size_container.cpp b/crypto3/libs/marshalling/algebra/test/curve_element_fixed_size_container.cpp index ba4a332a8e..f9cbfea2a6 100644 --- a/crypto3/libs/marshalling/algebra/test/curve_element_fixed_size_container.cpp +++ b/crypto3/libs/marshalling/algebra/test/curve_element_fixed_size_container.cpp @@ -51,37 +51,26 @@ void print_byteblob(TIter iter_begin, TIter iter_end) { } } -template -void print_fp_curve_group_element(FpCurveGroupElement e) { - std::cout << std::hex << e.X.data << " " << e.Y.data << " " << e.Z.data << std::endl; -} - -template -void print_fp2_curve_group_element(Fp2CurveGroupElement e) { - std::cout << std::hex << "(" << e.X.data[0].data << " " << e.X.data[1].data << ") (" << e.Y.data[0].data << " " - << e.Y.data[1].data << ") (" << e.Z.data[0].data << " " << e.Z.data[1].data << ")" << std::endl; -} - template void test_curve_element_fixed_size_container_big_endian(std::array val_container) { using namespace nil::crypto3::marshalling; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; using unit_type = unsigned char; - static_assert(nil::marshalling::is_compatible::value); + static_assert(nil::crypto3::marshalling::is_compatible::value); - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector cv = - nil::marshalling::pack(val_container, status); + nil::crypto3::marshalling::pack(val_container, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - std::array test_val = nil::marshalling::pack(cv, status); + std::array test_val = nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(std::equal(val_container.begin(), val_container.end(), test_val.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template diff --git a/crypto3/libs/marshalling/algebra/test/curve_element_non_fixed_size_container.cpp b/crypto3/libs/marshalling/algebra/test/curve_element_non_fixed_size_container.cpp index 083e6b1fe2..b6dccd9632 100644 --- a/crypto3/libs/marshalling/algebra/test/curve_element_non_fixed_size_container.cpp +++ b/crypto3/libs/marshalling/algebra/test/curve_element_non_fixed_size_container.cpp @@ -61,20 +61,21 @@ void test_curve_element_non_fixed_size_container(std::vector val_container) { using unit_type = unsigned char; - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector cv = - nil::marshalling::pack(val_container, status); + nil::crypto3::marshalling::pack(val_container, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - std::vector test_val = nil::marshalling::pack(cv, status); + std::vector test_val = nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(std::equal(val_container.begin(), val_container.end(), test_val.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template void test_curve_element_non_fixed_size_container() { + using namespace nil::crypto3::marshalling; std::cout << std::hex; std::cerr << std::hex; for (unsigned i = 0; i < 128; ++i) { @@ -93,7 +94,7 @@ BOOST_AUTO_TEST_SUITE(curve_element_non_fixed_size_container_test_suite) BOOST_AUTO_TEST_CASE(curve_element_non_fixed_size_container_bls12_381_g1) { std::cout << "BLS12-381 g1 group non fixed size container test started" << std::endl; - test_curve_element_non_fixed_size_container::g1_type<>, 25>(); std::cout << "BLS12-381 g1 group non fixed size container test finished" << std::endl; @@ -101,7 +102,7 @@ BOOST_AUTO_TEST_CASE(curve_element_non_fixed_size_container_bls12_381_g1) { BOOST_AUTO_TEST_CASE(curve_element_non_fixed_size_container_bls12_381_g2) { std::cout << "BLS12-381 g2 group non fixed size container test started" << std::endl; - test_curve_element_non_fixed_size_container::g2_type<>, 5>(); std::cout << "BLS12-381 g2 group non fixed size container test finished" << std::endl; diff --git a/crypto3/libs/marshalling/algebra/test/field_element.cpp b/crypto3/libs/marshalling/algebra/test/field_element.cpp index 1a11c1a261..0d639b5a3e 100644 --- a/crypto3/libs/marshalling/algebra/test/field_element.cpp +++ b/crypto3/libs/marshalling/algebra/test/field_element.cpp @@ -36,91 +36,94 @@ #include #include -#include -#include - #include #include #include #include -template -void print_byteblob(TIter iter_begin, TIter iter_end) { - for (TIter it = iter_begin; it != iter_end; it++) { - std::cout << std::hex << int(*it) << std::endl; - } -} - template void test_field_element(T val) { using namespace nil::crypto3::marshalling; using unit_type = unsigned char; - using field_element_type = types::field_element, + using field_element_type = types::field_element, T>; static_assert(nil::crypto3::algebra::is_field_element::value); - static_assert(nil::marshalling::is_field_element::value); - static_assert(nil::marshalling::is_compatible::value); + static_assert(nil::crypto3::marshalling::is_field_element::value); + static_assert(nil::crypto3::marshalling::is_compatible::value); - using inferenced_type = typename nil::marshalling::is_compatible::template type; + using inferenced_type = typename nil::crypto3::marshalling::is_compatible::template type; static_assert(std::is_same::value); - nil::marshalling::status_type status; - std::vector cv = nil::marshalling::pack(val, status); + nil::crypto3::marshalling::status_type status; + std::vector cv = nil::crypto3::marshalling::pack(val, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - T test_val = nil::marshalling::pack(cv, status); + T test_val = nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(val == test_val); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } +template +void test_field_element_vector() { + + using namespace nil::crypto3::marshalling; + + using unit_type = unsigned char; + std::vector vec(16); + + for(auto &v : vec) { + v = nil::crypto3::algebra::random_element(); + } + + nil::crypto3::marshalling::status_type status; + std::vector cv = nil::crypto3::marshalling::pack(vec, status); + + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); + + std::vector test_val = nil::crypto3::marshalling::pack(cv, status); + + BOOST_CHECK(vec == test_val); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); +} + + template void test_field_element() { - std::cout << std::hex; - std::cerr << std::hex; for (unsigned i = 0; i < 128; ++i) { - if (!(i % 16) && i) { - std::cout << std::dec << i << " tested" << std::endl; - } typename FieldType::value_type val = nil::crypto3::algebra::random_element(); test_field_element(val); } + + test_field_element_vector(); } BOOST_AUTO_TEST_SUITE(field_element_test_suite) BOOST_AUTO_TEST_CASE(field_element_bls12_381_g1_field_be) { - std::cout << "BLS12-381 g1 group field big-endian test started" << std::endl; test_field_element::g1_type<>::field_type, - nil::marshalling::option::big_endian>(); - std::cout << "BLS12-381 g1 group field big-endian test finished" << std::endl; + nil::crypto3::marshalling::option::big_endian>(); } BOOST_AUTO_TEST_CASE(field_element_bls12_381_g1_field_le) { - std::cout << "BLS12-381 g1 group field little-endian test started" << std::endl; test_field_element::g1_type<>::field_type, - nil::marshalling::option::little_endian>(); - std::cout << "BLS12-381 g1 group field little-endian test finished" << std::endl; + nil::crypto3::marshalling::option::little_endian>(); } BOOST_AUTO_TEST_CASE(field_element_bls12_381_g2_field_be) { - std::cout << "BLS12-381 g2 group field big-endian test started" << std::endl; test_field_element::g2_type<>::field_type, - nil::marshalling::option::big_endian>(); - std::cout << "BLS12-381 g2 group field big-endian test finished" << std::endl; + nil::crypto3::marshalling::option::big_endian>(); } BOOST_AUTO_TEST_CASE(field_element_bls12_381_g2_field_le) { - std::cout << "BLS12-381 g2 group field little-endian test started" << std::endl; test_field_element::g2_type<>::field_type, - nil::marshalling::option::little_endian>(); - std::cout << "BLS12-381 g2 group field little-endian test finished" << std::endl; + nil::crypto3::marshalling::option::little_endian>(); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/marshalling/algebra/test/field_element_non_fixed_size_container.cpp b/crypto3/libs/marshalling/algebra/test/field_element_non_fixed_size_container.cpp index 6d58bfceaf..c7fb5309ef 100644 --- a/crypto3/libs/marshalling/algebra/test/field_element_non_fixed_size_container.cpp +++ b/crypto3/libs/marshalling/algebra/test/field_element_non_fixed_size_container.cpp @@ -32,16 +32,15 @@ #include #include -#include +#include + #include #include #include -#include -#include - #include #include +#include #include #include @@ -61,16 +60,16 @@ void test_field_element_non_fixed_size_container(std::vector val_container) { std::size_t units_bits = 8; using unit_type = unsigned char; - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector cv = - nil::marshalling::pack(val_container, status); + nil::crypto3::marshalling::pack(val_container, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - std::vector test_val = nil::marshalling::pack(cv, status); + std::vector test_val = nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(std::equal(val_container.begin(), val_container.end(), test_val.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template @@ -95,7 +94,7 @@ BOOST_AUTO_TEST_SUITE(field_element_non_fixed_size_container_test_suite) BOOST_AUTO_TEST_CASE(field_element_non_fixed_size_container_bls12_381_g1_field_be) { std::cout << "BLS12-381 g1 group field non fixed size container big-endian test started" << std::endl; test_field_element_non_fixed_size_container::g1_type<>::field_type, - nil::marshalling::option::big_endian, + nil::crypto3::marshalling::option::big_endian, 5>(); std::cout << "BLS12-381 g1 group field non fixed size container big-endian test finished" << std::endl; } @@ -103,7 +102,7 @@ BOOST_AUTO_TEST_CASE(field_element_non_fixed_size_container_bls12_381_g1_field_b BOOST_AUTO_TEST_CASE(field_element_non_fixed_size_container_bls12_381_g1_field_le) { std::cout << "BLS12-381 g1 group field non fixed size container little-endian test started" << std::endl; test_field_element_non_fixed_size_container::g1_type<>::field_type, - nil::marshalling::option::little_endian, + nil::crypto3::marshalling::option::little_endian, 5>(); std::cout << "BLS12-381 g1 group field non fixed size container little-endian test finished" << std::endl; } @@ -111,7 +110,7 @@ BOOST_AUTO_TEST_CASE(field_element_non_fixed_size_container_bls12_381_g1_field_l BOOST_AUTO_TEST_CASE(field_element_non_fixed_size_container_bls12_381_g2_field_be) { std::cout << "BLS12-381 g2 group field non fixed size container big-endian test started" << std::endl; test_field_element_non_fixed_size_container::g2_type<>::field_type, - nil::marshalling::option::big_endian, + nil::crypto3::marshalling::option::big_endian, 7>(); std::cout << "BLS12-381 g2 group field non fixed size container big-endian test finished" << std::endl; } @@ -119,7 +118,7 @@ BOOST_AUTO_TEST_CASE(field_element_non_fixed_size_container_bls12_381_g2_field_b BOOST_AUTO_TEST_CASE(field_element_non_fixed_size_container_bls12_381_g2_field_le) { std::cout << "BLS12-381 g2 group field non fixed size container little-endian test started" << std::endl; test_field_element_non_fixed_size_container::g2_type<>::field_type, - nil::marshalling::option::little_endian, + nil::crypto3::marshalling::option::little_endian, 7>(); std::cout << "BLS12-381 g2 group field non fixed size container little-endian test finished" << std::endl; } diff --git a/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_node.hpp b/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_node.hpp index 77ad27e04d..19f9963978 100644 --- a/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_node.hpp +++ b/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_node.hpp @@ -59,11 +59,8 @@ namespace nil { typename std::enable_if::value_type>::value>::type> { - using type = nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + using type = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, nil::crypto3::marshalling::types::integral>; }; // For Poseidon, Merkle node will contain a Group Element, not a vector of bytes. @@ -106,13 +103,13 @@ namespace nil { std::is_same::value_type>::value, bool>::type = true> - typename merkle_node_value, ValueType>::type + typename merkle_node_value, ValueType>::type fill_merkle_node_value(const ValueType &node_value) { - using TTypeBase = nil::marshalling::field_type; - using octet_marshalling_type = nil::marshalling::types::integral; + using TTypeBase = nil::crypto3::marshalling::field_type; + using octet_marshalling_type = nil::crypto3::marshalling::types::integral; - typename merkle_node_value, ValueType>::type + typename merkle_node_value, ValueType>::type filled_node_value; for (const auto c : node_value) { filled_node_value.value().push_back(octet_marshalling_type(c)); @@ -127,14 +124,14 @@ namespace nil { GroupElementType >::value, bool>::type = true> typename merkle_node_value< - nil::marshalling::field_type, + nil::crypto3::marshalling::field_type, GroupElementType >::type fill_merkle_node_value(const GroupElementType &node_value) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; - typename merkle_node_value, GroupElementType>::type filled_node_value = + typename merkle_node_value, GroupElementType>::type filled_node_value = field_element(node_value); return filled_node_value; } @@ -147,7 +144,7 @@ namespace nil { nil::crypto3::containers::merkle_proof>::value, bool>::type = true> - typename merkle_node_value, MerkleProof>::type + typename merkle_node_value, MerkleProof>::type fill_merkle_node_value(const typename MerkleProof::value_type &node_value) { return fill_merkle_node_value(node_value); } @@ -160,7 +157,7 @@ namespace nil { nil::crypto3::containers::merkle_tree>::value, bool>::type = true> - typename merkle_node_value, MerkleTree>::type + typename merkle_node_value, MerkleTree>::type fill_merkle_node_value(const typename MerkleTree::value_type &node_value) { return fill_merkle_node_value(node_value); } @@ -172,11 +169,16 @@ namespace nil { std::is_same::value_type>::value, bool>::type = true> - ValueType - make_merkle_node_value(const typename merkle_node_value, - ValueType>::type &filled_node_value) { + ValueType make_merkle_node_value( + const typename merkle_node_value, ValueType>::type &filled_node_value) + { ValueType node_value; - BOOST_ASSERT(node_value.size() == filled_node_value.value().size()); + if (node_value.size() != filled_node_value.value().size()) { + throw std::invalid_argument( + std::string("Invalid number of elements for merkle tree nodes. Expected: ") + + std::to_string(node_value.size()) + " got: " + + std::to_string(filled_node_value.value().size())); + } for (std::size_t i = 0; i < filled_node_value.value().size(); ++i) { node_value.at(i) = filled_node_value.value().at(i).value(); } @@ -190,7 +192,8 @@ namespace nil { GroupElementType >::value, bool>::type = true> GroupElementType make_merkle_node_value(const typename merkle_node_value< - nil::marshalling::field_type, GroupElementType>::type &filled_node_value) { + nil::crypto3::marshalling::field_type, GroupElementType>::type &filled_node_value) + { return filled_node_value.value(); } @@ -201,11 +204,12 @@ namespace nil { nil::crypto3::containers::merkle_proof>::value, bool>::type = true> - typename MerkleProof::value_type - make_merkle_node_value(const typename merkle_node_value, - MerkleProof>::type &filled_node_value) { + typename MerkleProof::value_type make_merkle_node_value( + const typename merkle_node_value, MerkleProof>::type &filled_node_value) + { return make_merkle_node_value(filled_node_value); } + template>::value, bool>::type = true> - typename MerkleTree::value_type - make_merkle_node_value(const typename merkle_node_value, - MerkleTree>::type &filled_node_value) { + typename MerkleTree::value_type make_merkle_node_value( + const typename merkle_node_value, MerkleTree>::type &filled_node_value) + { return make_merkle_node_value(filled_node_value); } diff --git a/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_proof.hpp b/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_proof.hpp index 60f5bc2b70..26b519a282 100644 --- a/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_proof.hpp +++ b/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_proof.hpp @@ -53,33 +53,28 @@ namespace nil { namespace types { template struct merkle_proof_path_element { - using type = nil::marshalling::types::bundle, + nil::crypto3::marshalling::types::integral, // value_type _hash typename merkle_node_value::type>>; }; template struct merkle_proof_layer { - using type = nil::marshalling::types::array_list< + using type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, // path_element_t - typename merkle_proof_path_element::type, - // layer - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + typename merkle_proof_path_element::type>; }; template struct merkle_proof_path { - using type = nil::marshalling::types::array_list< + using type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, // layer path - typename merkle_proof_layer::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + typename merkle_proof_layer::type>; }; template>::value, bool>::type, typename... TOptions> - using merkle_proof = nil::marshalling::types::bundle< + using merkle_proof = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::size_t _li - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // value_type _root typename merkle_node_value::type, // path_type _path typename merkle_proof_path::type>>; template - typename merkle_proof_path_element, MerkleProof>::type + typename merkle_proof_path_element, MerkleProof>::type fill_merkle_proof_path_element(const typename MerkleProof::path_element_type &proof_path_element) { - using TTypeBase = nil::marshalling::field_type; - using uint64_t_marshalling_type = nil::marshalling::types::integral; + using TTypeBase = nil::crypto3::marshalling::field_type; + using uint64_t_marshalling_type = nil::crypto3::marshalling::types::integral; return typename merkle_proof_path_element::type( std::make_tuple(uint64_t_marshalling_type(proof_path_element._position), @@ -114,8 +109,8 @@ namespace nil { template typename MerkleProof::path_element_type make_merkle_proof_path_element( - const typename merkle_proof_path_element, - MerkleProof>::type &filled_proof_path_element) { + const typename merkle_proof_path_element, MerkleProof>::type &filled_proof_path_element) + { typename MerkleProof::path_element_type proof_path_element; proof_path_element._position = std::get<0>(filled_proof_path_element.value()).value(); proof_path_element._hash = @@ -124,10 +119,10 @@ namespace nil { } template - typename merkle_proof_layer, MerkleProof>::type + typename merkle_proof_layer, MerkleProof>::type fill_merkle_proof_layer(const typename MerkleProof::layer_type &proof_layer) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; typename merkle_proof_layer::type filled_proof_layer; for (const auto &p : proof_layer) { @@ -138,9 +133,9 @@ namespace nil { } template - typename MerkleProof::layer_type - make_merkle_proof_layer(const typename merkle_proof_layer, - MerkleProof>::type &filled_proof_layer) { + typename MerkleProof::layer_type make_merkle_proof_layer( + const typename merkle_proof_layer, MerkleProof>::type &filled_proof_layer) + { typename MerkleProof::layer_type proof_layer; for (std::size_t i = 0; i < filled_proof_layer.value().size(); ++i) { proof_layer.at(i) = @@ -150,10 +145,10 @@ namespace nil { } template - typename merkle_proof_path, MerkleProof>::type + typename merkle_proof_path, MerkleProof>::type fill_merkle_proof_path(const typename MerkleProof::path_type &proof_path) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; typename merkle_proof_path::type filled_proof_path; for (const auto &l : proof_path) { @@ -163,9 +158,9 @@ namespace nil { } template - typename MerkleProof::path_type - make_merkle_proof_path(const typename merkle_proof_path, - MerkleProof>::type &filled_proof_path) { + typename MerkleProof::path_type make_merkle_proof_path( + const typename merkle_proof_path, MerkleProof>::type &filled_proof_path) + { typename MerkleProof::path_type proof_path; proof_path.reserve(filled_proof_path.value().size()); for (std::size_t i = 0; i < filled_proof_path.value().size(); ++i) { @@ -176,11 +171,11 @@ namespace nil { } template - merkle_proof, MerkleProof> + merkle_proof, MerkleProof> fill_merkle_proof(const MerkleProof &mp) { - using TTypeBase = nil::marshalling::field_type; - using uint64_t_marshalling_type = nil::marshalling::types::integral; + using TTypeBase = nil::crypto3::marshalling::field_type; + using uint64_t_marshalling_type = nil::crypto3::marshalling::types::integral; using node_value_marshalling_type = typename merkle_node_value::type; using proof_path_marshalling_type = typename merkle_proof_path::type; @@ -194,8 +189,8 @@ namespace nil { template MerkleProof make_merkle_proof( - const merkle_proof, MerkleProof> &filled_merkle_proof) { - + const merkle_proof, MerkleProof> &filled_merkle_proof) + { MerkleProof mp( std::get<0>(filled_merkle_proof.value()).value(), // mp._li make_merkle_node_value(std::get<1>(filled_merkle_proof.value())), // mp._root diff --git a/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_tree.hpp b/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_tree.hpp index 7c4f813459..836bb7d62b 100644 --- a/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_tree.hpp +++ b/crypto3/libs/marshalling/containers/include/nil/crypto3/marshalling/containers/types/merkle_tree.hpp @@ -49,17 +49,15 @@ namespace nil { namespace marshalling { namespace types { template - using merkle_tree = nil::marshalling::types::array_list< + using merkle_tree = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename merkle_node_value::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + typename merkle_node_value::type>; template - merkle_tree, MerkleTree> + merkle_tree, MerkleTree> fill_merkle_tree(const MerkleTree& tree) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; merkle_tree filled_tree; for (const auto &hash_value : tree) { @@ -70,8 +68,9 @@ namespace nil { } template - MerkleTree make_merkle_tree(const merkle_tree< - nil::marshalling::field_type, MerkleTree> &filled_merkle_tree) { + MerkleTree make_merkle_tree( + const merkle_tree, MerkleTree> &filled_merkle_tree) + { typename MerkleTree::container_type hashes; for (std::size_t i = 0; i < filled_merkle_tree.value().size(); ++i) { hashes.push_back( diff --git a/crypto3/libs/marshalling/core/CMakeLists.txt b/crypto3/libs/marshalling/core/CMakeLists.txt index 16f38450dc..bff49113d0 100644 --- a/crypto3/libs/marshalling/core/CMakeLists.txt +++ b/crypto3/libs/marshalling/core/CMakeLists.txt @@ -20,7 +20,7 @@ if(CRYPTO3_MARSHALLING_THROWS) endif() if(NOT CMAKE_CXX_STANDARD) - set_target_properties(${test_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${test_name} PROPERTIES CXX_STANDARD 20) endif() cm_setup_version(VERSION 0.1.0 PREFIX ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}) diff --git a/crypto3/libs/marshalling/core/docs/as_pack.md b/crypto3/libs/marshalling/core/docs/as_pack.md index 7f7071dc0c..bc4949ea6b 100644 --- a/crypto3/libs/marshalling/core/docs/as_pack.md +++ b/crypto3/libs/marshalling/core/docs/as_pack.md @@ -8,8 +8,8 @@ To read from one type and write to another type variable we will use such funtio ```cpp template static TField read_from_field(const char *buf, std::size_t size, - nil::marshalling::status_type expectedStatus - = nil::marshalling::status_type::success){ + nil::crypto3::marshalling::status_type expectedStatus + = nil::crypto3::marshalling::status_type::success){ typedef TField field_type; field_type field; @@ -18,7 +18,7 @@ static TField read_from_field(const char *buf, std::size_t size, auto status = field.read(iter, size); BOOST_CHECK(status == expectedStatus); - if (status != nil::marshalling::status_type::success) { + if (status != nil::crypto3::marshalling::status_type::success) { return field; } @@ -29,7 +29,7 @@ static TField read_from_field(const char *buf, std::size_t size, auto writeIter = &outDataBuf[0]; status = field.write(writeIter, diff); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); BOOST_CHECK(std::equal(buf, buf + diff, static_cast(&outDataBuf[0]))); auto writeDiff = static_cast(std::distance(&outDataBuf[0], writeIter)); @@ -43,8 +43,8 @@ Using this function we can easily pack data from one type to another: ```cpp using big_endian_array_type = - nil::marshalling::types::array_list< - nil::marshalling::field_type, + nil::crypto3::marshalling::types::array_list< + nil::crypto3::marshalling::field_type, std::uint32_t >; diff --git a/crypto3/libs/marshalling/core/docs/examples.md b/crypto3/libs/marshalling/core/docs/examples.md index f9f653299f..2ba42a4da0 100644 --- a/crypto3/libs/marshalling/core/docs/examples.md +++ b/crypto3/libs/marshalling/core/docs/examples.md @@ -4,24 +4,24 @@ Marshalling library. For proper and full tutorial please refer to proper documen ## Defining fields_type Almost every field definition type receives its base class as a template -parameter. This base class is expected to be a variant of **nil::marshalling::field_type** with +parameter. This base class is expected to be a variant of **nil::crypto3::marshalling::field_type** with endian information. ```cpp -using MyFieldBase = nil::marshalling::field_type; +using MyFieldBase = nil::crypto3::marshalling::field_type; ``` Now the definition of simple 2 byte unsigned integer value field looks like this: ```cpp -using MyIntField = nil::marshalling::types::int_value; +using MyIntField = nil::crypto3::marshalling::types::int_value; ``` The definition of unsigned integer with 3 bytes serialization length: ```cpp using My3ByteIntField = - nil::marshalling::types::int_value< + nil::crypto3::marshalling::types::int_value< MyFieldBase, // big endian serialization std::uint32_t, // store as 4 byte unsigned integer - nil::marshalling::option::fixed_length<3> // serialise using only 3 bytes + nil::crypto3::marshalling::option::fixed_length<3> // serialise using only 3 bytes >; ``` @@ -29,23 +29,23 @@ Definition of the year value, serialized using only 1 byte as an offset from year 2000, and default constructed as year 2017: ```cpp using MyYearField = - nil::marshalling::types::int_value< + nil::crypto3::marshalling::types::int_value< MyFieldBase, // big endian serialization std::int16_t, // store as 2 byte value - nil::marshalling::option::fixed_length<1>, // serialise using only 1 byte - nil::marshalling::option::num_value_ser_offset<-2000> // add (-2000) before serialization and + nil::crypto3::marshalling::option::fixed_length<1>, // serialise using only 1 byte + nil::crypto3::marshalling::option::num_value_ser_offset<-2000> // add (-2000) before serialization and // subtruct (-2000) after deserialization - nil::marshalling::option::default_num_value<2017> // construct with default value 2017 + nil::crypto3::marshalling::option::default_num_value<2017> // construct with default value 2017 >; ``` Variant length (Base-128) integer value: ```cpp using MyVarLengthField = - nil::marshalling::types::int_value< + nil::crypto3::marshalling::types::int_value< MyFieldBase, // big endian serialization std::uint32_t, // store as 4 bytes value - nil::marshalling::option::var_length<1, 4> // 1 to 4 bytes serialization length. + nil::crypto3::marshalling::option::var_length<1, 4> // 1 to 4 bytes serialization length. >; ``` @@ -60,19 +60,19 @@ enum class MyEnum : std::uint8_t // Serialise using 1 byte }; using MyEnumField = - nil::marshalling::types::enum_value< + nil::crypto3::marshalling::types::enum_value< MyFieldBase, // big endian serialization MyEnum, // use MyEnum as storage type - nil::marshalling::option::valid_num_value_range<0, (int)MyEnum::NumOfValues - 1> // provide range of valid values + nil::crypto3::marshalling::option::valid_num_value_range<0, (int)MyEnum::NumOfValues - 1> // provide range of valid values >; ``` 2 bytes bitmask value: ```cpp struct MyBitmaskField : public - nil::marshalling::types::bitmask_value< + nil::crypto3::marshalling::types::bitmask_value< MyFieldBase, // big endian serialization - nil::marshalling::types::fixed_length<2> // serialise using 2 bytes + nil::crypto3::marshalling::types::fixed_length<2> // serialise using 2 bytes bitmask_reserved_bits<0xfff0> // Specify reserved bits > { @@ -83,12 +83,12 @@ struct MyBitmaskField : public Bitfields: ```cpp struct MyBitfield : public - nil::marshalling::types::bitfield< + nil::crypto3::marshalling::types::bitfield< MyFieldBase, std::tuple< - nil::marshalling::types::int_value >, // 2 bits value - nil::marshalling::types::bitmask_value >, // 3 bits value - nil::marshalling::types::enum_value > // 3 bits value + nil::crypto3::marshalling::types::int_value >, // 2 bits value + nil::crypto3::marshalling::types::bitmask_value >, // 3 bits value + nil::crypto3::marshalling::types::enum_value > // 3 bits value > > { @@ -99,7 +99,7 @@ struct MyBitfield : public Simple raw data list: ```cpp using MyRawDataList = - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::array_list< MyFieldBase, std::uint8_t >; @@ -108,11 +108,11 @@ using MyRawDataList = Raw data list with 2 byte size prefix: ```cpp using MyRawDataList2 = - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::array_list< MyFieldBase, std::uint8_t, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::int_value + nil::crypto3::marshalling::option::sequence_size_field_prefix< + nil::crypto3::marshalling::types::int_value > >; ``` @@ -120,17 +120,17 @@ using MyRawDataList2 = Size prefixed list of complex (bundle) elements: ```cpp using MyComplexList = - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::array_list< MyFieldBase, - nil::marshalling::types::bundle< + nil::crypto3::marshalling::types::bundle< MyFieldBase, std::tuple< - nil::marshalling::types::int_value, // 2 bytes int - nil::marshalling::types::enum_value // 1 byte enum + nil::crypto3::marshalling::types::int_value, // 2 bytes int + nil::crypto3::marshalling::types::enum_value // 1 byte enum > >, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::int_value + nil::crypto3::marshalling::option::sequence_size_field_prefix< + nil::crypto3::marshalling::types::int_value > >; ``` @@ -138,10 +138,10 @@ using MyComplexList = String with 1 byte size prefix: ```cpp using MyString = - nil::marshalling::types::string< + nil::crypto3::marshalling::types::string< MyFieldBase, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::int_value + nil::crypto3::marshalling::option::sequence_size_field_prefix< + nil::crypto3::marshalling::types::int_value > > ``` @@ -149,9 +149,9 @@ using MyString = Optional 2 byte integer, default constructed as "missing".: ```cpp using MyOptInt = - nil::marshalling::types::optional< - nil::marshalling::types::int_value, - nil::marshalling::option::default_optional_mode + nil::crypto3::marshalling::types::optional< + nil::crypto3::marshalling::types::int_value, + nil::crypto3::marshalling::option::default_optional_mode > ``` @@ -181,11 +181,11 @@ using Message1Fields = // The definition of Message1 message template // Interface class passed as a template parameter class Message1 : public - nil::marshalling::message_base< + nil::crypto3::marshalling::message_base< TMsgBase, - nil::marshalling::option::static_num_id_impl, // numeric message ID - nil::marshalling::option::fields_impl, // provide message fields - nil::marshalling::option::msg_type > // specify exact type of the message + nil::crypto3::marshalling::option::static_num_id_impl, // numeric message ID + nil::crypto3::marshalling::option::fields_impl, // provide message fields + nil::crypto3::marshalling::option::msg_type > // specify exact type of the message > { // Provide names of the fields for convenient access @@ -201,30 +201,30 @@ The interface definition is application specific. Every application defines what polymorphic interface every message needs to define and implement: ```cpp using App1Interface = - nil::marshalling::message< - nil::marshalling::option::big_endian, // Use big endian for serialization - nil::marshalling::option::msg_type, // Provide type used for message ID - nil::marshalling::option::id_info_interface, // Support polymorphic retreival of message ID - nil::marshalling::option::read_iterator, // Support polymorphic read using "const std::uint8_t*" as iterator - nil::marshalling::option::write_iterator, // Support polymorphic write using "std::uint8_t*" as iterator - nil::marshalling::option::length_info_interface, // Support polymorphic retrieval of serialization length - nil::marshalling::option::valid_check_interface, // Support polymorphic contents validity check - nil::marshalling::option::handler // Support dispatch to handling object of "MyHandler" type + nil::crypto3::marshalling::message< + nil::crypto3::marshalling::option::big_endian, // Use big endian for serialization + nil::crypto3::marshalling::option::msg_type, // Provide type used for message ID + nil::crypto3::marshalling::option::id_info_interface, // Support polymorphic retreival of message ID + nil::crypto3::marshalling::option::read_iterator, // Support polymorphic read using "const std::uint8_t*" as iterator + nil::crypto3::marshalling::option::write_iterator, // Support polymorphic write using "std::uint8_t*" as iterator + nil::crypto3::marshalling::option::length_info_interface, // Support polymorphic retrieval of serialization length + nil::crypto3::marshalling::option::valid_check_interface, // Support polymorphic contents validity check + nil::crypto3::marshalling::option::handler // Support dispatch to handling object of "MyHandler" type >; ``` Some other application may define different interface: ```cpp using App2Interface = - nil::marshalling::message< - nil::marshalling::option::big_endian, // Use big endian for serialization - nil::marshalling::option::msg_type, // Provide type used for message ID - nil::marshalling::option::id_info_interface, // Support polymorphic retreival of message ID - nil::marshalling::option::read_iterator, // Support polymorphic read using "const std::uint8_t*" as iterator - nil::marshalling::option::write_iterator > >, + nil::crypto3::marshalling::message< + nil::crypto3::marshalling::option::big_endian, // Use big endian for serialization + nil::crypto3::marshalling::option::msg_type, // Provide type used for message ID + nil::crypto3::marshalling::option::id_info_interface, // Support polymorphic retreival of message ID + nil::crypto3::marshalling::option::read_iterator, // Support polymorphic read using "const std::uint8_t*" as iterator + nil::crypto3::marshalling::option::write_iterator > >, // Support polymorphic write using // "std::back_insert_itetrator > >" as iterator - nil::marshalling::option::handler // Support dispatch to handling object of "MyOtherHandler" type + nil::crypto3::marshalling::option::handler // Support dispatch to handling object of "MyOtherHandler" type >; ``` @@ -247,18 +247,18 @@ For example, simple frame of just 2 bytes size followed by 2 byte message ID will look like this: ```cpp // Define field used to (de)serialise message id (see definition of msg_id enum earlier) -using MsgIdField = nil::marshalling::types::enum_value +using MsgIdField = nil::crypto3::marshalling::types::enum_value // Define field used to (de)serialise remaining length of the message: -using MsgSizeField = nil::marshalling::types::int_value +using MsgSizeField = nil::crypto3::marshalling::types::int_value // Define transport stack by wrapping "layers" using Stack = - nil::marshalling::protocol::MsgSizeLayer< // The SIZE + nil::crypto3::marshalling::protocol::MsgSizeLayer< // The SIZE MsgSizeField, - nil::marshalling::option::MsgIdLayer< // The ID + nil::crypto3::marshalling::option::MsgIdLayer< // The ID MsgIdField, - nil::marshalling::protocol::MsgDataLayer<> // The PAYLOAD + nil::crypto3::marshalling::protocol::MsgDataLayer<> // The PAYLOAD > >; ``` @@ -268,39 +268,39 @@ may look like this: ```cpp // Define field used to (de)serialise message id (see definition of msg_id enum earlier) -using MsgIdField = nil::marshalling::types::enum_value +using MsgIdField = nil::crypto3::marshalling::types::enum_value // Define field used to (de)serialise remaining length of the message: -using MsgSizeField = nil::marshalling::types::int_value +using MsgSizeField = nil::crypto3::marshalling::types::int_value // Define checksum value field using ChecksumField = - nil::marshalling::types::int_value< + nil::crypto3::marshalling::types::int_value< MyFieldBase, std::uint16_t >; // Define field used as synchronisation prefix using SyncField = - nil::marshalling::types::int_value< + nil::crypto3::marshalling::types::int_value< MyFieldBase, std::uint16_t, - nil::marshalling::option::default_num_value<0xabcd>, - nil::marshalling::option::valid_num_value_range<0xabcd, 0xabcd> + nil::crypto3::marshalling::option::default_num_value<0xabcd>, + nil::crypto3::marshalling::option::valid_num_value_range<0xabcd, 0xabcd> >; // Define transport stack by wrapping "layers" using Stack = - nil::marshalling::protocol::SyncPrefixLayer< // The SYNC + nil::crypto3::marshalling::protocol::SyncPrefixLayer< // The SYNC SyncField, - nil::marshalling::protocol::ChecksumLayer // The CHECKSUM + nil::crypto3::marshalling::protocol::ChecksumLayer // The CHECKSUM ChecksumField, - nil::marshalling::protocol::checksum::crc_ccitt, // Use CRC-CCITT calculation - nil::marshalling::protocol::MsgSizeLayer< // The SIZE + nil::crypto3::marshalling::protocol::checksum::crc_ccitt, // Use CRC-CCITT calculation + nil::crypto3::marshalling::protocol::MsgSizeLayer< // The SIZE MsgSizeField, - nil::marshalling::option::MsgIdLayer< // The ID + nil::crypto3::marshalling::option::MsgIdLayer< // The ID MsgIdField, - nil::marshalling::protocol::MsgDataLayer<> // The PAYLOAD + nil::crypto3::marshalling::protocol::MsgDataLayer<> // The PAYLOAD > > > diff --git a/crypto3/libs/marshalling/core/docs/marshalling.dox b/crypto3/libs/marshalling/core/docs/marshalling.dox index 8405b42aa3..96af41fa75 100644 --- a/crypto3/libs/marshalling/core/docs/marshalling.dox +++ b/crypto3/libs/marshalling/core/docs/marshalling.dox @@ -1,34 +1,34 @@ /// @namespace marshalling /// @brief Main namespace for all classes / functions of Marshalling library. -/// @namespace nil::marshalling::processing +/// @namespace nil::crypto3::marshalling::processing /// @brief Namespace for various utility classes and/or functions used by Marshalling library. -/// @namespace nil::marshalling::option +/// @namespace nil::crypto3::marshalling::option /// @brief Namespace that contains all the options used to define message /// as well as message fields. -/// @namespace nil::marshalling::protocol +/// @namespace nil::crypto3::marshalling::protocol /// @brief Namespace that contains definition of layers that can be used to /// wrap message data with transport data. -/// @namespace nil::marshalling::protocol::checksum +/// @namespace nil::crypto3::marshalling::protocol::checksum /// @brief Namespace that contains definition of checksum calculator classes which -/// can be used with nil::marshalling::protocol::ChecksumLayer transport layer class. +/// can be used with nil::crypto3::marshalling::protocol::ChecksumLayer transport layer class. -/// @namespace nil::marshalling::field +/// @namespace nil::crypto3::marshalling::field /// @brief Namespace that contains definitions of all message fields. -/// @namespace nil::marshalling::traits +/// @namespace nil::crypto3::marshalling::traits /// @brief Namespace for various traits tag classes. -/// @namespace nil::marshalling::traits::endian +/// @namespace nil::crypto3::marshalling::traits::endian /// @brief Namespace for traits tag classes used to specify serialization endian. -/// @namespace nil::marshalling::traits::units +/// @namespace nil::crypto3::marshalling::traits::units /// @brief Namespace for various traits tag classes used in units conversion operations. -/// @namespace nil::marshalling::units +/// @namespace nil::crypto3::marshalling::units /// @brief Namespace containing units conversion operations diff --git a/crypto3/libs/marshalling/core/docs/page_assert.dox b/crypto3/libs/marshalling/core/docs/page_assert.dox index b586b292f5..fe129f4461 100644 --- a/crypto3/libs/marshalling/core/docs/page_assert.dox +++ b/crypto3/libs/marshalling/core/docs/page_assert.dox @@ -1,10 +1,10 @@ /// @page page_assert Custom Assertion Failure Behaviour /// First of all, there is a need to define a custom assertion failure report -/// class which inherits from nil::marshalling::assert_type and overrides pure virtual member +/// class which inherits from nil::crypto3::marshalling::assert_type and overrides pure virtual member /// function fail(): /// @code /// #include -/// class MyAssert : public nil::marshalling::assert_type +/// class MyAssert : public nil::crypto3::marshalling::assert_type /// { /// public: /// MyAssert(...) {...} // The constructor may receive any parameters needed @@ -25,7 +25,7 @@ /// @code /// int main(int argc, const char* argv[]) /// { -/// nil::marshalling::enable_assert enabledAssert; +/// nil::crypto3::marshalling::enable_assert enabledAssert; /// // From this point custom assertion failure bahaviour takes place. /// ... /// } @@ -34,11 +34,11 @@ /// @code /// int main(int argc, const char* argv[]) /// { -/// nil::marshalling::enable_assert assert1; +/// nil::crypto3::marshalling::enable_assert assert1; /// // From this point custom assertion failure bahaviour takes place. /// ... /// { -/// nil::marshalling::enable_assert assert2; +/// nil::crypto3::marshalling::enable_assert assert2; /// // From this point different custom assertion failure bahaviour /// // defined in SomeOtherMyAssert class takes place. /// ... diff --git a/crypto3/libs/marshalling/core/docs/page_define_prot.dox b/crypto3/libs/marshalling/core/docs/page_define_prot.dox index 4a33731d1e..ca65965aae 100644 --- a/crypto3/libs/marshalling/core/docs/page_define_prot.dox +++ b/crypto3/libs/marshalling/core/docs/page_define_prot.dox @@ -15,13 +15,13 @@ /// If the protocol grows and the compilation takes a significant amount of time, /// more fine-grained include statements may be used: /// @code -/// #include // Provides all definitions from nil::marshalling::field namespace -/// #include // Provides all definitions from nil::marshalling::protocol namespace -/// #include // Provides all definitions from nil::marshalling::units namespace -/// #include // Definition of nil::marshalling::Message class to define interface -/// #include // Definition of nil::marshalling::MessageBase class to define message impl -/// #include // Definition of nil::marshalling::generic_handler class -/// #include // Definition of nil::marshalling::MessageFactory class +/// #include // Provides all definitions from nil::crypto3::marshalling::field namespace +/// #include // Provides all definitions from nil::crypto3::marshalling::protocol namespace +/// #include // Provides all definitions from nil::crypto3::marshalling::units namespace +/// #include // Definition of nil::crypto3::marshalling::Message class to define interface +/// #include // Definition of nil::crypto3::marshalling::MessageBase class to define message impl +/// #include // Definition of nil::crypto3::marshalling::generic_handler class +/// #include // Definition of nil::crypto3::marshalling::MessageFactory class /// @endcode /// /// @section page_define_prot_conditions Checking pre- and post- Conditions @@ -57,11 +57,11 @@ /// see @ref sec_field_tutorial_enum_value for more detail). /// /// After the numeric IDs are specified, there is a need to define common -/// message interface class by extending @ref nil::marshalling::Message. +/// message interface class by extending @ref nil::crypto3::marshalling::Message. /// The defined class / type needs to pin the type used for message IDs -/// with @ref nil::marshalling::option::msg_id_type and defined +/// with @ref nil::crypto3::marshalling::option::msg_id_type and defined /// earlier enum. It also should specify the serialization endian with either -/// @ref nil::marshalling::option::big_endian or @ref nil::marshalling::option::little_endian options. +/// @ref nil::crypto3::marshalling::option::big_endian or @ref nil::crypto3::marshalling::option::little_endian options. /// However it must also /// allow extension with other options by the application. /// @code @@ -72,9 +72,9 @@ /// /// template /// using Message = -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, /// TOptions... /// >; /// @@ -101,9 +101,9 @@ /// /// template /// class MyMessage : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, /// TOptions... /// > /// { @@ -125,7 +125,7 @@ /// Marshalling library has a built-in way to automate such assignments (see /// @ref page_prot_stack_tutorial_transport_value section in @ref page_prot_stack_tutorial). /// In order to support usage -/// of @ref nil::marshalling::protocol::TransportValueLayer the message interface class must +/// of @ref nil::crypto3::marshalling::protocol::TransportValueLayer the message interface class must /// define "extra transport fields". /// /// First, such extra transport field(s) must be defined using a field abstraction @@ -135,13 +135,13 @@ /// { /// /// // Base class of all the fields -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// /// // field_type describing protocol version. -/// using MyVersionField = nil::marshalling::types::IntValue; +/// using MyVersionField = nil::crypto3::marshalling::types::IntValue; /// /// // field_type describing protocol version. -/// using MyFlagsField = nil::marshalling::types::BitmaskValue >; +/// using MyFlagsField = nil::crypto3::marshalling::types::BitmaskValue >; /// /// // Relevant extra transport fields, bundled in std::tuple /// using MyExtraTransportFields = @@ -153,17 +153,17 @@ /// } // namespace my_protocol /// @endcode /// Second, provide the defined tuple to message interface class using -/// @ref nil::marshalling::option::extra_transport_fields option. +/// @ref nil::crypto3::marshalling::option::extra_transport_fields option. /// @code /// namespace my_protocol /// { /// /// template /// class Message : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, -/// nil::marshalling::option::extra_transport_fields, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::option::extra_transport_fields, /// TOptions... /// > /// { @@ -178,9 +178,9 @@ /// /// template /// class MyMessage : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, /// TOptions... /// > /// { @@ -228,10 +228,10 @@ /// @code /// template /// class Message : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, -/// nil::marshalling::option::extra_transport_fields, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::option::extra_transport_fields, /// TOptions... /// > /// { @@ -244,10 +244,10 @@ /// @code /// template /// class Message : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, -/// nil::marshalling::option::extra_transport_fields, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::option::extra_transport_fields, /// TOptions... /// > /// { @@ -290,16 +290,16 @@ /// protocol version information. The Marshalling library contains extra functionality /// to help with protocol versioning. If extra transport values contain version, /// then it is recommended to let the library know which field in the provided -/// ones is the version. To do so @ref nil::marshalling::option::version_in_extra_transport_fields, +/// ones is the version. To do so @ref nil::crypto3::marshalling::option::version_in_extra_transport_fields, /// with index of the field as a template argument needs to be used. /// @code /// template /// class Message : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, -/// nil::marshalling::option::extra_transport_fields, -/// nil::marshalling::option::version_in_extra_transport_fields<0>, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::option::extra_transport_fields, +/// nil::crypto3::marshalling::option::version_in_extra_transport_fields<0>, /// TOptions... /// > /// { @@ -311,7 +311,7 @@ /// @code /// template /// class Message : public -/// nil::marshalling::Message<...> +/// nil::crypto3::marshalling::Message<...> /// { /// public: /// ... @@ -356,7 +356,7 @@ /// /// struct Message1Fields /// { -/// using field1 = nil::marshalling::types::IntValue; +/// using field1 = nil::crypto3::marshalling::types::IntValue; /// using field2 = ... /// using field3 = ... /// @@ -371,7 +371,7 @@ /// /// // Definition of the message itself, described and explained later /// template -/// class Message1 : public nil::marshalling::MessageBase +/// class Message1 : public nil::crypto3::marshalling::MessageBase /// { /// ... /// }; @@ -381,11 +381,11 @@ /// } // namespace my_protocol /// @endcode /// -/// The message definition class has to extend @ref nil::marshalling::MessageBase and receive -/// at least one template parameter, that is passed as first one to @ref nil::marshalling::MessageBase. +/// The message definition class has to extend @ref nil::crypto3::marshalling::MessageBase and receive +/// at least one template parameter, that is passed as first one to @ref nil::crypto3::marshalling::MessageBase. /// @code /// template -/// class Message1 : nil::marshalling::MessageBase +/// class Message1 : nil::crypto3::marshalling::MessageBase /// { /// ... /// }; @@ -393,18 +393,18 @@ /// The @b TBase template parameter is chosen by the application being developed. /// It is expected to be a variant of @ref page_define_prot_interface (@b my_protocol::Message), /// which specifies polymorphic interface that needs to be implemented. -/// The @ref nil::marshalling::MessageBase class in turn will publicly inherit +/// The @ref nil::crypto3::marshalling::MessageBase class in turn will publicly inherit /// from the provided common interface class. As the result the full class inheritance graph may look /// like this: /// @diafile message_class_hierarchy.dia /// @n /// /// There are at least 3 additional options that should be passed to -/// @ref nil::marshalling::MessageBase. -/// @li @ref nil::marshalling::option::static_num_id_impl with numeric ID of the message. -/// @li @ref nil::marshalling::option::fields_impl with @b std::tuple of message fields ( +/// @ref nil::crypto3::marshalling::MessageBase. +/// @li @ref nil::crypto3::marshalling::option::static_num_id_impl with numeric ID of the message. +/// @li @ref nil::crypto3::marshalling::option::fields_impl with @b std::tuple of message fields ( /// defined earlier @b my_protocol::Message1Fields::All) -/// @li @ref nil::marshalling::option::msg_type with actual message type (@b Message1). +/// @li @ref nil::crypto3::marshalling::option::msg_type with actual message type (@b Message1). /// /// For example /// @code @@ -412,11 +412,11 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::fields_impl, -/// nil::marshalling::option::msg_type > // type of the message being defined +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::fields_impl, +/// nil::crypto3::marshalling::option::msg_type > // type of the message being defined /// { /// ... /// }; @@ -449,7 +449,7 @@ /// /// // Default implementation of read functionality /// template -/// nil::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) +/// nil::crypto3::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) /// { /// // Read all the fields one by one by invoking /// // read() member function of all the fields. @@ -457,7 +457,7 @@ /// /// // Default implementation of write functionality /// template -/// nil::marshalling::ErrorStatus do_write(TIter& iter, std::size_t len) const +/// nil::crypto3::marshalling::ErrorStatus do_write(TIter& iter, std::size_t len) const /// { /// // Write all the fields one by one by invoking /// // write() member function of all the fields. @@ -489,16 +489,16 @@ /// }; /// @endcode /// See also relevant API documentation: -/// @li @ref nil::marshalling::MessageBase::fields() -/// @li @ref nil::marshalling::MessageBase::do_read() -/// @li @ref nil::marshalling::MessageBase::do_write() -/// @li @ref nil::marshalling::MessageBase::do_length() -/// @li @ref nil::marshalling::MessageBase::do_valid() -/// @li @ref nil::marshalling::MessageBase::do_refresh() +/// @li @ref nil::crypto3::marshalling::MessageBase::fields() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_read() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_write() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_length() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_valid() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_refresh() /// /// In case the passed message interface class as template parameter (@b TBase) /// defines some polymorphic interface functions, their implementation is automatically -/// generated by the @ref nil::marshalling::MessageBase. For example if passed interface +/// generated by the @ref nil::crypto3::marshalling::MessageBase. For example if passed interface /// class required polymorphic read operation, the following member function will /// also be automatically implemented: /// @code @@ -507,7 +507,7 @@ /// { /// ... /// protected: -/// virtual nil::marshalling::ErrorStatus readImpl(read_iterator& iter, std::size_t len) +/// virtual nil::crypto3::marshalling::ErrorStatus readImpl(read_iterator& iter, std::size_t len) /// { /// return do_read(iter, len); /// } @@ -518,7 +518,7 @@ /// When preparing message object to send or when handling received message, the /// fields it contains need to be accessed to set or get their values. The default /// (build-in) way of achieving that is to get access to the fields tuple -/// using inherited nil::marshalling::MessageBase::fields() member function and then using +/// using inherited nil::crypto3::marshalling::MessageBase::fields() member function and then using /// @b std::get() function to access the fields inside the tuple. /// @code /// Message1 msg; @@ -536,7 +536,7 @@ /// @code /// template /// class Message1 : public -/// nil::marshalling::MessageBase<...> +/// nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// // Provide names for the fields @@ -548,7 +548,7 @@ /// @code /// template /// class Message1 : public -/// nil::marshalling::MessageBase<...> +/// nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// enum FieldIdx @@ -613,10 +613,10 @@ /// @code /// template /// class Message1 : public -/// nil::marshalling::MessageBase<...> +/// nil::crypto3::marshalling::MessageBase<...> /// { /// // Duplicate the base class definition -/// using Base = nil::marshalling::MessageBase<...>; +/// using Base = nil::crypto3::marshalling::MessageBase<...>; /// public: /// // Provide names for the fields /// MARSHALLING_MSG_FIELDS_ACCESS(value1, value2, value3); @@ -629,10 +629,10 @@ /// the defined symbol to add / remove the definition of the @b Base member type. /// @code /// template -/// class Message1 : public nil::marshalling::MessageBase<...> +/// class Message1 : public nil::crypto3::marshalling::MessageBase<...> /// { /// #ifdef MARSHALLING_MUST_DEFINE_BASE -/// using Base = nil::marshalling::MessageBase<...>; +/// using Base = nil::crypto3::marshalling::MessageBase<...>; /// #endif /// public: /// // Provide names for the fields @@ -641,14 +641,14 @@ /// @endcode /// /// @subsection page_define_prot_message_base_custom_read Custom Read Functionality -/// The default read functionality implemented by @ref nil::marshalling::MessageBase::do_read() +/// The default read functionality implemented by @ref nil::crypto3::marshalling::MessageBase::do_read() /// is to invoke @b read() member function of every field and return @b success /// if all the invocations returned @b success. /// Sometimes such default implementation may be incomplete or incorrect and may require /// additional or different implementation. It is very easy to fix by defining /// new @b do_read() public member function with updated functionality. The -/// @ref nil::marshalling::MessageBase class contains inner "magic" to call the provided @b do_read() -/// instead of default one when implementing virtual @ref nil::marshalling::MessageBase::readImpl(). +/// @ref nil::crypto3::marshalling::MessageBase class contains inner "magic" to call the provided @b do_read() +/// instead of default one when implementing virtual @ref nil::crypto3::marshalling::MessageBase::readImpl(). /// As an example let's define new message /// type (@b Message2), which has two fields. The first one is a 1 byte bitmask, /// the least significant bit of which defines whether the second field exists. @@ -669,16 +669,16 @@ /// class Message2Fields /// { /// using field1 = -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0xfe, 0> +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0xfe, 0> /// >; /// /// using field2 = -/// nil::marshalling::types::Optional< -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::missing_by_default +/// nil::crypto3::marshalling::types::Optional< +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::missing_by_default /// >; /// /// // bundle all the fields @@ -690,25 +690,25 @@ /// /// template /// class Message2 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::fields_impl, -/// nil::marshalling::option::msg_type > +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::fields_impl, +/// nil::crypto3::marshalling::option::msg_type > /// > /// { /// public: /// MARSHALLING_MSG_FIELDS_ACCESS(flags, data); /// /// template -/// nil::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) +/// nil::crypto3::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) /// { /// // Get type of the base class -/// using Base = typename std::decay::type; +/// using Base = typename std::decay::type; /// /// // Read only the flags value /// auto es = Base::template do_read_fields_until(iter, len); -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// return es; /// } /// @@ -725,23 +725,23 @@ /// }; /// @endcode /// Please @b note, that due to the fact that defined message class is a template one, the member -/// functions defined in @ref nil::marshalling::MessageBase are not accessible directly, there +/// functions defined in @ref nil::crypto3::marshalling::MessageBase are not accessible directly, there /// is a need to specify the base class scope. If there is no inner @b Base /// type defined in the class scope (required to support clang and earlier versions of gcc), -/// it is possible to use @ref nil::marshalling::to_message_base() +/// it is possible to use @ref nil::crypto3::marshalling::to_message_base() /// function to detect it. /// -/// Also @b note, that nil::marshalling::MessageBase provides the following member functions +/// Also @b note, that nil::crypto3::marshalling::MessageBase provides the following member functions /// in order to allow read / write of the selected fields. -/// @li @ref nil::marshalling::MessageBase::do_read_fields_from() -/// @li @ref nil::marshalling::MessageBase::do_read_fields_until() -/// @li @ref nil::marshalling::MessageBase::do_read_fields_from_until() -/// @li @ref nil::marshalling::MessageBase::do_write_fields_from() -/// @li @ref nil::marshalling::MessageBase::do_write_fields_until() -/// @li @ref nil::marshalling::MessageBase::do_write_fields_from_until() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_read_fields_from() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_read_fields_until() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_read_fields_from_until() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_write_fields_from() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_write_fields_until() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_write_fields_from_until() /// /// @subsection page_define_prot_message_base_custom_refresh Custom Refresh Functionality -/// The default refresh functionality implemented by @ref nil::marshalling::MessageBase::do_refresh() +/// The default refresh functionality implemented by @ref nil::crypto3::marshalling::MessageBase::do_refresh() /// is to invoke @b refresh() member function of every field. The function will /// return @b true (indicating that at message contents have been updated) if /// at least one of the fields returns @b true. @@ -768,16 +768,16 @@ /// intact. /// @code /// template -/// class Message2 : public nil::marshalling::MessageBase<...> +/// class Message2 : public nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// MARSHALLING_MSG_FIELDS_ACCESS(flags, data); /// /// bool do_refresh() /// { -/// auto expectedDataMode = nil::marshalling::types::OptionalMode::missing; +/// auto expectedDataMode = nil::crypto3::marshalling::types::OptionalMode::missing; /// if ((field_flags().value() & 0x1) != 0U) { -/// expectedDataMode = nil::marshalling::types::OptionalMode::exists; +/// expectedDataMode = nil::crypto3::marshalling::types::OptionalMode::exists; /// } /// /// if (field_data().get_mode() == expectedDataMode) { @@ -800,29 +800,29 @@ /// @endcode /// In order to support polymorphic refresh functionality when required (see /// @ref page_use_prot_interface_refresh), the actual message class -/// implementation must also pass @ref nil::marshalling::option::has_custom_refresh option to -/// @ref nil::marshalling::MessageBase class. Failure to do so @b may result in missing -/// implementation of @ref nil::marshalling::MessageBase::refresh_impl(). In this case, -/// the default implementation of @ref nil::marshalling::Message::refresh_impl() will be +/// implementation must also pass @ref nil::crypto3::marshalling::option::has_custom_refresh option to +/// @ref nil::crypto3::marshalling::MessageBase class. Failure to do so @b may result in missing +/// implementation of @ref nil::crypto3::marshalling::MessageBase::refresh_impl(). In this case, +/// the default implementation of @ref nil::crypto3::marshalling::Message::refresh_impl() will be /// used instead, always /// returning @b false (reporting that message fields weren't updated) without proper execution /// of refresh functionality. /// @code /// template /// class Message2 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::msg_type >, -/// nil::marshalling::option::fields_impl , -/// nil::marshalling::option::has_custom_refresh // Support polymorphic refresh when needed +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::msg_type >, +/// nil::crypto3::marshalling::option::fields_impl , +/// nil::crypto3::marshalling::option::has_custom_refresh // Support polymorphic refresh when needed /// > /// { /// public: /// MARSHALLING_MSG_FIELDS_ACCESS(flags, data); /// /// template -/// nil::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) +/// nil::crypto3::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) /// { /// ... // see implementation above /// } @@ -837,19 +837,19 @@ /// @subsection page_define_prot_message_base_custom_write Custom Write Functionality /// Usually there is no need to provide custom write functionality for the messages /// in consistent state (see @ref page_define_prot_message_base_custom_refresh). -/// The default one implemented by @ref nil::marshalling::MessageBase::do_write(), which invokes +/// The default one implemented by @ref nil::crypto3::marshalling::MessageBase::do_write(), which invokes /// @b write() member function of every field, is correct. However, if /// the need arises it is enough just to provide custom @b do_write() member /// function. /// @code /// template -/// class SomeMessage : public nil::marshalling::MessageBase<...> +/// class SomeMessage : public nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// MARSHALLING_MSG_FIELDS_ACCESS(...); /// /// template -/// nil::marshalling::ErrorStatus do_write(TIter& iter, std::size_t len) const +/// nil::crypto3::marshalling::ErrorStatus do_write(TIter& iter, std::size_t len) const /// { /// ... /// } @@ -862,7 +862,7 @@ /// provide your own variant of @b do_length() member function. /// @code /// template -/// class SomeMessage : public nil::marshalling::MessageBase<...> +/// class SomeMessage : public nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// std::size_t do_length() const @@ -873,7 +873,7 @@ /// @endcode /// /// @subsection page_define_prot_message_base_custom_valid Custom Validity Check -/// The default implementation of @ref nil::marshalling::MessageBase::do_valid() calls +/// The default implementation of @ref nil::crypto3::marshalling::MessageBase::do_valid() calls /// @b valid() member function of every message field and returns @b true if /// all the calls returned @b true. However, there may be a need to provide extra /// checks in case specific value of one field may require tighter constrains on @@ -881,13 +881,13 @@ /// custom @b do_valid() member function. /// @code /// template -/// class SomeMessage : public nil::marshalling::MessageBase<...> +/// class SomeMessage : public nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// bool do_valid() const /// { /// // Get type of the base class -/// using Base = typename std::decay::type; +/// using Base = typename std::decay::type; /// /// // Check that all fields are valid by themselves /// if (!Base::do_valid()) { @@ -902,12 +902,12 @@ /// /// @subsection page_define_prot_message_base_name Reporting Message Name /// Some application may require printing (or reporting by other means) human -/// readable name of the message. The @ref nil::marshalling::MessageBase cannot automatically +/// readable name of the message. The @ref nil::crypto3::marshalling::MessageBase cannot automatically /// generate appropriate function. As the result, the message definition class is /// expected to define @b do_name() member function with the following signature. /// @code /// template -/// class SomeMessage : public nil::marshalling::MessageBase<...> +/// class SomeMessage : public nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// static const char* do_name() @@ -917,14 +917,14 @@ /// }; /// @endcode /// In order to support @ref page_use_prot_interface_name there is a need -/// to pass @ref nil::marshalling::option::has_name option to @ref nil::marshalling::MessageBase to notify +/// to pass @ref nil::crypto3::marshalling::option::has_name option to @ref nil::crypto3::marshalling::MessageBase to notify /// the latter about existence of @b do_name() member function. /// @code /// template /// class SomeMessage : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// ..., -/// nil::marshalling::option::has_name +/// nil::crypto3::marshalling::option::has_name /// > /// { /// public: @@ -934,8 +934,8 @@ /// } /// }; /// @endcode -/// When @ref nil::marshalling::option::has_name is used, the @b nil::marshalling::MessageBase -/// creates overriding @b name_impl() (see @ref nil::marshalling::MessageBase::name_impl()), which +/// When @ref nil::crypto3::marshalling::option::has_name is used, the @b nil::crypto3::marshalling::MessageBase +/// creates overriding @b name_impl() (see @ref nil::crypto3::marshalling::MessageBase::name_impl()), which /// invokes provided @b do_name() member function. /// /// @subsection page_define_prot_message_version Protocol Version Support @@ -943,27 +943,27 @@ /// protocols may include version information in either message transport framing /// or in one of the messages used to establish a connection. Every field /// defines @b set_version() member function in its public interface. The -/// nil::marshalling::MessageBase class will automatically call this function for every -/// field before performing its @b read operation (inside @ref nil::marshalling::MessageBase::do_read()). +/// nil::crypto3::marshalling::MessageBase class will automatically call this function for every +/// field before performing its @b read operation (inside @ref nil::crypto3::marshalling::MessageBase::do_read()). /// However, if @ref page_define_prot_message_base_custom_read is implemented, -/// the latter is expected to call provided @ref nil::marshalling::MessageBase::do_fields_version_update() +/// the latter is expected to call provided @ref nil::crypto3::marshalling::MessageBase::do_fields_version_update() /// member function explicitly before attempting actual read operations. -/// @b NOTE, that the @ref nil::marshalling::MessageBase::do_fields_version_update() function -/// exists only if @ref nil::marshalling::option::version_in_extra_transport_fields has been +/// @b NOTE, that the @ref nil::crypto3::marshalling::MessageBase::do_fields_version_update() function +/// exists only if @ref nil::crypto3::marshalling::option::version_in_extra_transport_fields has been /// provided to message interface. /// @code /// template /// class Message2 : public -/// nil::marshalling::MessageBase<...> +/// nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// ... /// /// template -/// nil::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) +/// nil::crypto3::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) /// { /// // Get type of the base class -/// using Base = typename std::decay::type; +/// using Base = typename std::decay::type; /// /// // Update version of the fields /// Base::do_fields_version_update(); @@ -978,7 +978,7 @@ /// @code /// template /// class Message2 : public -/// nil::marshalling::MessageBase<...> +/// nil::crypto3::marshalling::MessageBase<...> /// { /// public: /// ... @@ -986,7 +986,7 @@ /// bool do_refresh() /// { /// // Get type of the base class -/// using Base = typename std::decay::type; +/// using Base = typename std::decay::type; /// /// // Update version of the fields /// bool updated = Base::do_fields_version_update(); @@ -1004,12 +1004,12 @@ /// variable length fields, such as @b string or @b list, then maximum serialization /// length is also known. It would be wise to slip in compile time checks in /// message definition as well. There are several static constexpr member functions -/// inherited from @b nil::marshalling::MessageBase that can be used: +/// inherited from @b nil::crypto3::marshalling::MessageBase that can be used: /// -/// @li @ref nil::marshalling::MessageBase::do_min_length() -/// @li @ref nil::marshalling::MessageBase::do_max_length() -/// @li @ref nil::marshalling::MessageBase::do_min_length_from_until() -/// @li @ref nil::marshalling::MessageBase::do_max_length_from_until() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_min_length() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_max_length() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_min_length_from_until() +/// @li @ref nil::crypto3::marshalling::MessageBase::do_max_length_from_until() /// /// For example, the implementation of @b Message2 may be updated as below: /// @code @@ -1026,10 +1026,10 @@ /// { /// /// template -/// class Message2 : public nil::marshalling::MessageBase<...> +/// class Message2 : public nil::crypto3::marshalling::MessageBase<...> /// > /// { -/// using Base = nil::marshalling::MessageBase<...> +/// using Base = nil::crypto3::marshalling::MessageBase<...> /// public: /// static_assert(Base::do_min_length() == 1U, "Unexpected min length"); /// static_assert(Base::do_max_length() == 3U, "Unexpected max length"); @@ -1040,7 +1040,7 @@ /// @section page_define_prot_customisation Application Specific Customisation /// As was mentioned in @ref page_field_tutorial, there may be a need to provide a way for /// extra application specific customisation for used fields, especially for fields like lists -/// (@ref nil::marshalling::types::array_list) or strings (@ref nil::marshalling::types::String). By +/// (@ref nil::crypto3::marshalling::types::array_list) or strings (@ref nil::crypto3::marshalling::types::String). By /// default they use @b std::vector and @b std::string respectively as /// their inner value storage types. They may be un-applicable to some aplications, /// especially bare-metal ones. In order to solve such problem the message classes @@ -1050,7 +1050,7 @@ /// Recommended Practice /// /// It is recommended to have a separate class / struct called @b DefaultOptions -/// wich defines relevant inner types to be @ref nil::marshalling::option::empty_option (option that +/// wich defines relevant inner types to be @ref nil::crypto3::marshalling::option::empty_option (option that /// does nothing). For example, let's assume that third field in @b Message1 /// message is a string. Then the @b DefaultOptions struct may be defined as /// @code @@ -1060,7 +1060,7 @@ /// { /// struct Message1Fields /// { -/// using field3 = nil::marshalling::option::empty_option; // no extra functionality by default +/// using field3 = nil::crypto3::marshalling::option::empty_option; // no extra functionality by default /// }; /// }; /// }; @@ -1088,7 +1088,7 @@ /// using field1 = ...; /// using field2 = ... /// using field3 = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, /// typename TOpt::message::Message1Fields::field3 // Extra option(s) /// > @@ -1105,11 +1105,11 @@ /// // Definition of the message itself, described and explained later /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::fields_impl::All>, -/// nil::marshalling::option::msg_type > +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::fields_impl::All>, +/// nil::crypto3::marshalling::option::msg_type > /// > /// { /// ... @@ -1124,11 +1124,11 @@ /// and overriding selected number inner types with its own extension options. /// /// @b NOTE, that allowing additional customisation for fields like @b list -/// (@ref nil::marshalling::types::array_list) and @b string (@ref nil::marshalling::types::String) is +/// (@ref nil::crypto3::marshalling::types::array_list) and @b string (@ref nil::crypto3::marshalling::types::String) is /// a must have feature to allow usage of the same protocol definition in /// bare-metal applications. However, it would be wise to allow extra customisation -/// for @b all the used fields, even for ones like integral values (@ref nil::marshalling::types::IntValue) -/// or @b enum (@ref nil::marshalling::types::IntValue). The client application developer +/// for @b all the used fields, even for ones like integral values (@ref nil::crypto3::marshalling::types::IntValue) +/// or @b enum (@ref nil::crypto3::marshalling::types::IntValue). The client application developer /// may want to change the default value of some field, maybe even add or /// change (override) provided ranges of valid values, force failing of read /// operation on invalid values, etc... @b NOTE, that when allowing such @@ -1137,12 +1137,12 @@ /// @code /// template /// using MyField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, /// TExtraOpts..., // extra options -/// nil::marshalling::option::default_num_value<10>, // default value -/// nil::marshalling::option::valid_num_value_range<10, 20> // default range of valid values +/// nil::crypto3::marshalling::option::default_num_value<10>, // default value +/// nil::crypto3::marshalling::option::valid_num_value_range<10, 20> // default range of valid values /// >; /// @endcode /// This is because earlier used options take priority over ones used later. @@ -1152,17 +1152,17 @@ /// (which will require both read and write operation for every message) except /// a only a few, that go only one direction (from client to server or the opposite). /// In this case the generated code will contain implementation for -/// both polymorphic read (@ref nil::marshalling::MessageBase::readImpl()) and write -/// (@ref nil::marshalling::MessageBase::write_impl()). For uni-directional messages some +/// both polymorphic read (@ref nil::crypto3::marshalling::MessageBase::readImpl()) and write +/// (@ref nil::crypto3::marshalling::MessageBase::write_impl()). For uni-directional messages some /// of these function may be redundant, which unnecessary increases the binary /// size. It may become a problem for bare-metal platforms with limited amount /// of ROM space. The @b Marshalling library provides options that may suppress automatic -/// generation of some virtual functions by the @b nil::marshalling::MessageBase. The available +/// generation of some virtual functions by the @b nil::crypto3::marshalling::MessageBase. The available /// options are: -/// @li @ref nil::marshalling::option::no_read_impl -/// @li @ref nil::marshalling::option::no_write_impl -/// @li @ref nil::marshalling::option::no_valid_impl -/// @li @ref nil::marshalling::option::no_length_impl +/// @li @ref nil::crypto3::marshalling::option::no_read_impl +/// @li @ref nil::crypto3::marshalling::option::no_write_impl +/// @li @ref nil::crypto3::marshalling::option::no_valid_impl +/// @li @ref nil::crypto3::marshalling::option::no_length_impl /// /// These options should not be used in the definition of protocol messages, but /// it would be wise to allow the client application use them when necessary. It @@ -1172,8 +1172,8 @@ /// { /// struct message /// { -/// using Message1 = nil::marshalling::option::empty_option; -/// using Message2 = nil::marshalling::option::empty_option; +/// using Message1 = nil::crypto3::marshalling::option::empty_option; +/// using Message2 = nil::crypto3::marshalling::option::empty_option; /// ... /// }; /// }; @@ -1188,11 +1188,11 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::fields_impl::All>, -/// nil::marshalling::option::msg_type >, +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::fields_impl::All>, +/// nil::crypto3::marshalling::option::msg_type >, /// typename TOpt::message::Message1 // Extra options /// > /// { diff --git a/crypto3/libs/marshalling/core/docs/page_field.dox b/crypto3/libs/marshalling/core/docs/page_field.dox index 3760259099..34dee4a68b 100644 --- a/crypto3/libs/marshalling/core/docs/page_field.dox +++ b/crypto3/libs/marshalling/core/docs/page_field.dox @@ -2,14 +2,14 @@ /// @tableofcontents /// fields_type are abstractions around value storage primitives and/or objects, /// such as integral values, floating point values, strings, arrays, etc.. -/// Every @b field class is defined in @ref nil::marshalling::field namespace and +/// Every @b field class is defined in @ref nil::crypto3::marshalling::field namespace and /// exposes predefined interface in order to /// make template meta-programming as easy as possible. As an example let's -/// take a look at @ref nil::marshalling::types::IntValue class which is used to +/// take a look at @ref nil::crypto3::marshalling::types::IntValue class which is used to /// define integral value field. /// @code /// template -/// class nil::marshalling::types::IntValue : public TBase +/// class nil::crypto3::marshalling::types::IntValue : public TBase /// { /// public: /// // Define inner storage type @@ -24,11 +24,11 @@ /// /// // Read /// template -/// nil::marshalling::ErrorStatus read(TIter& iter, std::size_t len) {...} +/// nil::crypto3::marshalling::ErrorStatus read(TIter& iter, std::size_t len) {...} /// /// // Write /// template -/// nil::marshalling::ErrorStatus write(TIter& iter, std::size_t len) const {...} +/// nil::crypto3::marshalling::ErrorStatus write(TIter& iter, std::size_t len) const {...} /// /// // Serialisation length /// std::size_t length() const {...} @@ -53,10 +53,10 @@ /// The main things to note are that every field definition class: /// @li receives its base class as the first /// template parameter. It is expected to be a variant of @ref -/// nil::marshalling::field_type with @ref nil::marshalling::option::big_endian or @ref -/// nil::marshalling::option::little_endian option to specify the serialization endian. +/// nil::crypto3::marshalling::field_type with @ref nil::crypto3::marshalling::option::big_endian or @ref +/// nil::crypto3::marshalling::option::little_endian option to specify the serialization endian. /// @li exhibits some default behaviour which can be modified by -/// passing various options from @ref nil::marshalling::option namespace as additional template +/// passing various options from @ref nil::crypto3::marshalling::option namespace as additional template /// parameters. All the available options are described below in this tutorial. /// @li defines @b value_type inner value storage /// type and provides @b value() member functions to access the stored value. @@ -76,28 +76,28 @@ /// abstractions do not have polymorphic behaviour. /// /// The available fields abstractions are: -/// @li @ref nil::marshalling::types::IntValue - used to define @ref sec_field_tutorial_int_value -/// @li @ref nil::marshalling::types::EnumValue - used to define @ref sec_field_tutorial_enum_value -/// @li @ref nil::marshalling::types::BitmaskValue - used to define @ref sec_field_tutorial_bitmask_value -/// @li @ref nil::marshalling::types::Bitfield - used to define @ref sec_field_tutorial_bitfield -/// @li @ref nil::marshalling::types::Bundle - used to define @ref sec_field_tutorial_bundle -/// @li @ref nil::marshalling::types::array_list - used to define @ref sec_field_tutorial_array_list -/// @li @ref nil::marshalling::types::String - used to define @ref sec_field_tutorial_string -/// @li @ref nil::marshalling::types::FloatValue - used to define @ref sec_field_tutorial_fp_value -/// @li @ref nil::marshalling::types::Optional - used to define @ref sec_field_tutorial_optional -/// @li @ref nil::marshalling::types::Variant - used to define @ref sec_field_tutorial_variant +/// @li @ref nil::crypto3::marshalling::types::IntValue - used to define @ref sec_field_tutorial_int_value +/// @li @ref nil::crypto3::marshalling::types::EnumValue - used to define @ref sec_field_tutorial_enum_value +/// @li @ref nil::crypto3::marshalling::types::BitmaskValue - used to define @ref sec_field_tutorial_bitmask_value +/// @li @ref nil::crypto3::marshalling::types::Bitfield - used to define @ref sec_field_tutorial_bitfield +/// @li @ref nil::crypto3::marshalling::types::Bundle - used to define @ref sec_field_tutorial_bundle +/// @li @ref nil::crypto3::marshalling::types::array_list - used to define @ref sec_field_tutorial_array_list +/// @li @ref nil::crypto3::marshalling::types::String - used to define @ref sec_field_tutorial_string +/// @li @ref nil::crypto3::marshalling::types::FloatValue - used to define @ref sec_field_tutorial_fp_value +/// @li @ref nil::crypto3::marshalling::types::Optional - used to define @ref sec_field_tutorial_optional +/// @li @ref nil::crypto3::marshalling::types::Variant - used to define @ref sec_field_tutorial_variant /// /// @section sec_field_tutorial_int_value Integral value fields_type -/// Integral values are abstracted by nil::marshalling::types::IntValue class, which +/// Integral values are abstracted by nil::crypto3::marshalling::types::IntValue class, which /// receives at least two template parameters. The first one is a base -/// class, from which the nil::marshalling::types::IntValue will inherit. It must be -/// a variant of nil::marshalling::field_type, with the option specifying endian used for +/// class, from which the nil::crypto3::marshalling::types::IntValue will inherit. It must be +/// a variant of nil::crypto3::marshalling::field_type, with the option specifying endian used for /// data serialization. The second template parameter is a basic integral type /// that is used to store the field's value.@n /// For example: /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using MyIntField = nil::marshalling::types::IntValue; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using MyIntField = nil::crypto3::marshalling::types::IntValue; /// @endcode /// The example above defines a field that uses @b std::int16_t type to store /// its value. The value can be accessed using @b value() member function: @@ -109,7 +109,7 @@ /// @endcode /// When such field is serialized, 2 bytes (sizeof(std::int16_t)) are written /// to the output buffer, most significant first and less significant second -/// (because @b MyFieldBase base class was defined using nil::marshalling::option::big_endian +/// (because @b MyFieldBase base class was defined using nil::crypto3::marshalling::option::big_endian /// option). /// /// @subsection sec_field_tutorial_int_value_fixed_length Modifying Serialisation length @@ -121,9 +121,9 @@ /// may be encoded using only 3 bytes, and that's what the protocol specifies. /// The storage type for such value is going to be @b std::uint32_t, but there is /// a need to limit serialization length for it. The Marshalling library provides -/// nil::marshalling::option::fixed_length option, that can be used for this purpose. +/// nil::crypto3::marshalling::option::fixed_length option, that can be used for this purpose. /// @code -/// using MyIntField = nil::marshalling::types::IntValue >; +/// using MyIntField = nil::crypto3::marshalling::types::IntValue >; /// @endcode /// /// @subsection sec_field_tutorial_int_value_var_length Variable Serialisation length @@ -132,13 +132,13 @@ /// Base-128 /// encoding, where the most significant bit in the byte indicates whether /// it is the last byte in the numeric encoding or the next one also needs to -/// be taken into account. The Marshalling library provides nil::marshalling::option::var_length -/// option that can be used with nil::marshalling::types::IntValue and modifies the +/// be taken into account. The Marshalling library provides nil::crypto3::marshalling::option::var_length +/// option that can be used with nil::crypto3::marshalling::types::IntValue and modifies the /// behaviour of the latter to expose the required read()/write()/length() /// behaviour: /// @code /// // Variable length encoding, encoding takes at least 1 byte and at most 4 bytes. -/// using MyIntField = nil::marshalling::types::IntValue >; +/// using MyIntField = nil::crypto3::marshalling::types::IntValue >; /// @endcode /// The field's base class (@b MyFieldBase) contains endian information which is /// used to determine which part of the value is serialized first. @@ -151,14 +151,14 @@ /// serialized as a single byte, i.e. to specify year 2015 is to write value 15. /// However it may be inconvenient to manually adjust serialized/deserialized /// value by predefined offset 2000. To help with such case option -/// nil::marshalling::option::num_value_ser_offset can be used. For example: +/// nil::crypto3::marshalling::option::num_value_ser_offset can be used. For example: /// @code /// using YearField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::int16_t, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::num_value_ser_offset<-2000> +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::num_value_ser_offset<-2000> /// >; /// /// static const std::uint8_t SerData[] = { 15 }; // Pretend serialization data @@ -167,7 +167,7 @@ /// YearField year; /// auto* readIter = &SerData[0]; /// auto es = year.read(readIter, SerDataLen); // Read year information -/// assert(es == nil::marshalling::ErrorStatus::success); // No failure is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No failure is expected /// /// std::cout << year.value() << std::endl; // Prints 2015; /// @@ -177,10 +177,10 @@ /// std::vector outData; // Pretend output buffer /// auto writeIter = std::back_inserter(outData); /// es = year.write(writeIter, outData.max_size()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No failure is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No failure is expected /// /// assert(outData.size() == 1U); // Only 1 byte is expected to be pushed to outData, -/// // due to using nil::marshalling::option::fixed_length<1> option. +/// // due to using nil::crypto3::marshalling::option::fixed_length<1> option. /// assert(outData[0] == 16); // The value equal to "year.value() - 2000" is expected to be written. /// @endcode /// @@ -193,13 +193,13 @@ /// The definition of such field may look like: /// @code /// using DistanceField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, -/// nil::marshalling::option::scaling_ratio<1, 1000> +/// nil::crypto3::marshalling::option::scaling_ratio<1, 1000> /// >; /// @endcode -/// The nil::marshalling::option::scaling_ratio option allows scaling of serialized value +/// The nil::crypto3::marshalling::option::scaling_ratio option allows scaling of serialized value /// (distance in mm) to handling value (distance in m) and vice versa: /// @code /// static const std::uint8_t InData[] = {0x3, 0xe8}; // Pretend input buffer, encoded 1000 @@ -208,7 +208,7 @@ /// DistanceField dist; /// const auto* readIter = &InData[0];; /// auto es = dist.read(readIter, InDataSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// /// std::cout << "distance in mm: " << dist.value() << '\n'; // Prints 1000 /// std::cout << "distance in m: " << dist.get_scaled() << std::endl; // Prints 1.0 @@ -223,13 +223,13 @@ /// As the result the field can be defined as: /// @code /// using OtherDistanceField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, -/// nil::marshalling::option::scaling_ratio<10, 1> +/// nil::crypto3::marshalling::option::scaling_ratio<10, 1> /// >; /// @endcode -/// The nil::marshalling::option::scaling_ratio option allows scaling of serialized value +/// The nil::crypto3::marshalling::option::scaling_ratio option allows scaling of serialized value /// (distance in tens of mm) to handling value (distance in mm) and vice verse: /// @code /// static const std::uint8_t InData[] = {0x0, 0xf}; // Pretend input buffer, encoded 15 @@ -238,7 +238,7 @@ /// OtherDistanceField dist; /// const auto* readIter = &InData[0];; /// auto es = dist.read(readIter, InDataSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// /// std::cout << "distance in tens of mm: " << dist.value() << '\n'; // Prints 15 /// std::cout << "distance in mm: " << dist.get_scaled() << std::endl; // Prints 150 @@ -247,10 +247,10 @@ /// std::cout << "New distance in tens of mm: " << dist.value() << std::endl; // Prints 50 /// @endcode /// -/// Methods nil::marshalling::types::IntValue::get_scaled and nil::marshalling::types::IntValue::set_scaled -/// take into account scaling ratio provided (with nil::marshalling::option::scaling_ratio option) -/// to the nil::marshalling::types::IntValue field. If such option wasn't used -/// @b nil::marshalling::option::scaling_ratio<1, 1> is assumed. +/// Methods nil::crypto3::marshalling::types::IntValue::get_scaled and nil::crypto3::marshalling::types::IntValue::set_scaled +/// take into account scaling ratio provided (with nil::crypto3::marshalling::option::scaling_ratio option) +/// to the nil::crypto3::marshalling::types::IntValue field. If such option wasn't used +/// @b nil::crypto3::marshalling::option::scaling_ratio<1, 1> is assumed. /// /// @subsection sec_field_tutorial_int_value_units value units /// In addition to @ref sec_field_tutorial_int_value_scaling, the @b Marshalling library @@ -260,13 +260,13 @@ /// the type of the units is specified. /// @code /// using DistanceField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, -/// nil::marshalling::option::units_millimeters +/// nil::crypto3::marshalling::option::units_millimeters /// >; /// @endcode -/// The nil::marshalling::option::units_millimeters option specifies that field contains +/// The nil::crypto3::marshalling::option::units_millimeters option specifies that field contains /// distance in millimeters, which allows @b Marshalling library provide proper /// conversion to other distance units when necessary: /// @code @@ -276,18 +276,18 @@ /// DistanceField dist; /// const auto* readIter = &InData[0];; /// auto es = dist.read(readIter, InDataSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// /// std::cout << "Original value: " << dist.value() << '\n'; // Prints 1000 -/// std::cout << "distance in mm: " << nil::marshalling::units::get_millimeters(dist) << std::endl; // Prints 1000 -/// std::cout << "distance in cm: " << nil::marshalling::units::get_centimeters(dist) << std::endl; // Prints 100.0 -/// std::cout << "distance in m: " << nil::marshalling::units::getMeters(dist) << std::endl; // Prints 1.0 +/// std::cout << "distance in mm: " << nil::crypto3::marshalling::units::get_millimeters(dist) << std::endl; // Prints 1000 +/// std::cout << "distance in cm: " << nil::crypto3::marshalling::units::get_centimeters(dist) << std::endl; // Prints 100.0 +/// std::cout << "distance in m: " << nil::crypto3::marshalling::units::getMeters(dist) << std::endl; // Prints 1.0 /// -/// nil::marshalling::units::setCentimeters(dist, 5.5f); +/// nil::crypto3::marshalling::units::setCentimeters(dist, 5.5f); /// std::cout << "New value: " << dist.value() << '\n'; // Prints 55 -/// std::cout << "New distance in mm: " << nil::marshalling::units::get_millimeters(dist) << std::endl; // Prints 55 -/// std::cout << "New distance in cm: " << nil::marshalling::units::get_centimeters(dist) << std::endl; // Prints 5.5 -/// std::cout << "New distance in m: " << nil::marshalling::units::getMeters(dist) << std::endl; // Prints 0.055 +/// std::cout << "New distance in mm: " << nil::crypto3::marshalling::units::get_millimeters(dist) << std::endl; // Prints 55 +/// std::cout << "New distance in cm: " << nil::crypto3::marshalling::units::get_centimeters(dist) << std::endl; // Prints 5.5 +/// std::cout << "New distance in m: " << nil::crypto3::marshalling::units::getMeters(dist) << std::endl; // Prints 0.055 /// @endcode /// /// In the examples above the "units" specification may replace the "scaling" @@ -296,11 +296,11 @@ /// multiplied by 10'000'000 to make integral value out of floating point. /// @code /// using LatField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::int32_t, -/// nil::marshalling::option::scaling_ratio<1, 10000000>, -/// nil::marshalling::option::units_degrees +/// nil::crypto3::marshalling::option::scaling_ratio<1, 10000000>, +/// nil::crypto3::marshalling::option::units_degrees /// >; /// @endcode /// The @b Marshalling library uses the scaling ratio as well as units information to @@ -308,66 +308,66 @@ /// @code /// LatField lat(123456789); // Encoded latitude of 12.3456789 /// std::cout << "Raw value: " << lat.value() << std::endl; // Prints 123456789 -/// std::cout << "Lat in degrees: " << nil::marshalling::units::getDegrees(lat) << std::endl; // Prints 12.3456789 -/// std::cout << "Lat in radians: " << nil::marshalling::units::getRadians(lat) << std::endl; // 0.21547274519 +/// std::cout << "Lat in degrees: " << nil::crypto3::marshalling::units::getDegrees(lat) << std::endl; // Prints 12.3456789 +/// std::cout << "Lat in radians: " << nil::crypto3::marshalling::units::getRadians(lat) << std::endl; // 0.21547274519 /// -/// nil::marshalling::units::setDegrees(lat, 22.33); +/// nil::crypto3::marshalling::units::setDegrees(lat, 22.33); /// std::cout << "New raw value: " << lat.value() << std::endl; // Prints 223300000 -/// std::cout << "New degrees value: " << nil::marshalling::units::getDegrees(lat) << std::endl; // Prints 22.33 -/// std::cout << "New radians value: " << nil::marshalling::units::getRadians(lat) << std::endl; // Prints 0.38973202 +/// std::cout << "New degrees value: " << nil::crypto3::marshalling::units::getDegrees(lat) << std::endl; // Prints 22.33 +/// std::cout << "New radians value: " << nil::crypto3::marshalling::units::getRadians(lat) << std::endl; // Prints 0.38973202 /// -/// nil::marshalling::units::setRadians(lat, 1.04719); +/// nil::crypto3::marshalling::units::setRadians(lat, 1.04719); /// std::cout << "Updated raw value: " << lat.value() << std::endl; // Prints 600000000 -/// std::cout << "Updated degrees value: " << nil::marshalling::units::getDegrees(lat) << std::endl; // Prints 60 -/// std::cout << "Updated radians value: " << nil::marshalling::units::getRadians(lat) << std::endl; // Prints 1.04719 +/// std::cout << "Updated degrees value: " << nil::crypto3::marshalling::units::getDegrees(lat) << std::endl; // Prints 60 +/// std::cout << "Updated radians value: " << nil::crypto3::marshalling::units::getRadians(lat) << std::endl; // Prints 1.04719 /// @endcode /// The @b Marshalling library provides mulitple @b options to specify the units of /// the field's value: /// @li @b Time: -/// - nil::marshalling::option::units_nanoseconds -/// - nil::marshalling::option::units_microseconds -/// - nil::marshalling::option::units_milliseconds -/// - nil::marshalling::option::units_seconds -/// - nil::marshalling::option::units_minutes -/// - nil::marshalling::option::units_days -/// - nil::marshalling::option::units_weeks +/// - nil::crypto3::marshalling::option::units_nanoseconds +/// - nil::crypto3::marshalling::option::units_microseconds +/// - nil::crypto3::marshalling::option::units_milliseconds +/// - nil::crypto3::marshalling::option::units_seconds +/// - nil::crypto3::marshalling::option::units_minutes +/// - nil::crypto3::marshalling::option::units_days +/// - nil::crypto3::marshalling::option::units_weeks /// @li @b distance: -/// - nil::marshalling::option::units_nanometers -/// - nil::marshalling::option::units_micrometers -/// - nil::marshalling::option::units_millimeters -/// - nil::marshalling::option::units_centimeters -/// - nil::marshalling::option::units_meters -/// - nil::marshalling::option::units_kilometers +/// - nil::crypto3::marshalling::option::units_nanometers +/// - nil::crypto3::marshalling::option::units_micrometers +/// - nil::crypto3::marshalling::option::units_millimeters +/// - nil::crypto3::marshalling::option::units_centimeters +/// - nil::crypto3::marshalling::option::units_meters +/// - nil::crypto3::marshalling::option::units_kilometers /// @li @b speed: -/// - nil::marshalling::option::units_nanometers_per_second -/// - nil::marshalling::option::units_micrometers_per_second -/// - nil::marshalling::option::units_millimeters_per_second -/// - nil::marshalling::option::units_centimeters_per_second -/// - nil::marshalling::option::units_meters_per_second -/// - nil::marshalling::option::units_kilometers_per_second -/// - nil::marshalling::option::units_kilometers_per_hour +/// - nil::crypto3::marshalling::option::units_nanometers_per_second +/// - nil::crypto3::marshalling::option::units_micrometers_per_second +/// - nil::crypto3::marshalling::option::units_millimeters_per_second +/// - nil::crypto3::marshalling::option::units_centimeters_per_second +/// - nil::crypto3::marshalling::option::units_meters_per_second +/// - nil::crypto3::marshalling::option::units_kilometers_per_second +/// - nil::crypto3::marshalling::option::units_kilometers_per_hour /// @li @b frequency: -/// - nil::marshalling::option::units_hertz -/// - nil::marshalling::option::units_kilohertz -/// - nil::marshalling::option::units_megahertz -/// - nil::marshalling::option::units_gigahertz +/// - nil::crypto3::marshalling::option::units_hertz +/// - nil::crypto3::marshalling::option::units_kilohertz +/// - nil::crypto3::marshalling::option::units_megahertz +/// - nil::crypto3::marshalling::option::units_gigahertz /// @li @b angle: -/// - nil::marshalling::option::units_degrees -/// - nil::marshalling::option::units_radians +/// - nil::crypto3::marshalling::option::units_degrees +/// - nil::crypto3::marshalling::option::units_radians /// @li @b Electrical @b current: -/// - nil::marshalling::option::units_nanoamps -/// - nil::marshalling::option::units_microamps -/// - nil::marshalling::option::units_milliamps -/// - nil::marshalling::option::units_amps -/// - nil::marshalling::option::units_kiloamps +/// - nil::crypto3::marshalling::option::units_nanoamps +/// - nil::crypto3::marshalling::option::units_microamps +/// - nil::crypto3::marshalling::option::units_milliamps +/// - nil::crypto3::marshalling::option::units_amps +/// - nil::crypto3::marshalling::option::units_kiloamps /// @li @b Electrical @b voltage: -/// - nil::marshalling::option::units_nanovolts -/// - nil::marshalling::option::units_microvolts -/// - nil::marshalling::option::units_millivolts -/// - nil::marshalling::option::units_volts -/// - nil::marshalling::option::units_kilovolts +/// - nil::crypto3::marshalling::option::units_nanovolts +/// - nil::crypto3::marshalling::option::units_microvolts +/// - nil::crypto3::marshalling::option::units_millivolts +/// - nil::crypto3::marshalling::option::units_volts +/// - nil::crypto3::marshalling::option::units_kilovolts /// -/// All the units conversion functions reside in nil::marshalling::units namespace. @b NOTE, +/// All the units conversion functions reside in nil::crypto3::marshalling::units namespace. @b NOTE, /// that conversion can be applied only between the units of the same type. The /// units compitability check is performed at compile time and the compilation /// will fail on attempt to set/get incompatible value, such as @@ -381,7 +381,7 @@ /// /// @subsection sec_field_tutorial_int_value_other Other options_type /// There multiple common options that are applicable to all the fields, -/// nil::marshalling::types::IntValue included. Please refer to +/// nil::crypto3::marshalling::types::IntValue included. Please refer to /// @ref sec_field_tutorial_common_options for more detail. /// /// @section sec_field_tutorial_enum_value Enum value fields_type @@ -415,8 +415,8 @@ /// Baud_115200 /// }; /// -/// using MyFieldBase = nil::marshalling::field_type; -/// using BaudField = nil::marshalling::types::EnumValue; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using BaudField = nil::crypto3::marshalling::types::EnumValue; /// /// BaudField baud; /// ... @@ -425,34 +425,34 @@ /// std::vector outData; // Pretend output buffer /// auto writeIter = std::back_inserter(outData); /// auto es = baud.write(writeIter, outData.max_size()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// assert(outData.size() == 1); // Single byte output is expected /// assert(outData[0] == 6U); // value 6 is expected to be written /// @endcode -/// nil::marshalling::types::EnumValue is very similar to nil::marshalling::types::IntValue. The main +/// nil::crypto3::marshalling::types::EnumValue is very similar to nil::crypto3::marshalling::types::IntValue. The main /// difference is using enum instead of integral type as a second template /// parameter. The default serialization length is determined by the underlying /// type of the enum. That't why it is important to explicitly specify the /// underlying type of the enum when defining it, and not leave this to the /// compiler. /// -/// The nil::marshalling::types::EnumValue field supports almost all the options that -/// can be used with nil::marshalling::types::IntValue: @ref sec_field_tutorial_int_value_fixed_length, +/// The nil::crypto3::marshalling::types::EnumValue field supports almost all the options that +/// can be used with nil::crypto3::marshalling::types::IntValue: @ref sec_field_tutorial_int_value_fixed_length, /// @ref sec_field_tutorial_int_value_var_length, @ref sec_field_tutorial_int_value_ser_offset, /// as well as @ref sec_field_tutorial_common_options. /// /// @section sec_field_tutorial_bitmask_value Bitmask value fields_type /// Quite often messages in communication protocol use some kind of flags, where /// single bit has a independent meaning. It is more convenient to treat -/// such flags as bitmasks rather than integral values. nil::marshalling::types::BitmaskValue +/// such flags as bitmasks rather than integral values. nil::crypto3::marshalling::types::BitmaskValue /// provides a convenient interface to handle such bitmasks. /// @code -/// using BitmaskField = nil::marshalling::types::BitmaskValue; +/// using BitmaskField = nil::crypto3::marshalling::types::BitmaskValue; /// @endcode -/// By default the underlying storage type of the nil::marshalling::types::BitmaskValue is +/// By default the underlying storage type of the nil::crypto3::marshalling::types::BitmaskValue is /// @b unsigned, which makes the default serialization length to be /// @b sizeof(unsigned). The modification of the underlying storage type as -/// well as serialization length can be done using nil::marshalling::option::fixed_length +/// well as serialization length can be done using nil::crypto3::marshalling::option::fixed_length /// option (see @ref sec_field_tutorial_int_value_fixed_length). The underlying /// type will always be some unsigned integral type. If the serialization length /// is specified to be 1 byte, the underlying storage type is @b std::uint8_t, @@ -460,53 +460,53 @@ /// if the serialization length is 3 or 4 bytes, the underlying storage type is /// @b std::uin32_t, etc... /// @code -/// using BitmaskField_1byte = nil::marshalling::types::BitmaskValue >; +/// using BitmaskField_1byte = nil::crypto3::marshalling::types::BitmaskValue >; /// static_assert(std::is_same::value, "std::uint8_t type is expected"); /// assert(BitmaskField_1byte().length() == 1U); /// -/// using BitmaskField_2bytes = nil::marshalling::types::BitmaskValue >; +/// using BitmaskField_2bytes = nil::crypto3::marshalling::types::BitmaskValue >; /// static_assert(std::is_same::value, "std::uint16_t type is expected"); /// assert(BitmaskField_2bytes().length() == 2U); /// -/// using BitmaskField_3bytes = nil::marshalling::types::BitmaskValue >; +/// using BitmaskField_3bytes = nil::crypto3::marshalling::types::BitmaskValue >; /// static_assert(std::is_same::value, "std::uint32_t type is expected"); /// assert(BitmaskField_2bytes().length() == 3U); /// -/// using BitmaskField_4bytes = nil::marshalling::types::BitmaskValue >; +/// using BitmaskField_4bytes = nil::crypto3::marshalling::types::BitmaskValue >; /// static_assert(std::is_same::value, "std::uint32_t type is expected"); /// assert(BitmaskField_2bytes().length() == 4U); /// @endcode /// All the @ref sec_field_tutorial_common_options can also be used with -/// nil::marshalling::types::BitmaskValue. +/// nil::crypto3::marshalling::types::BitmaskValue. /// /// @subsection sec_field_tutorial_bitmask_value_reserved Reserved Bits /// Quite often the bitmask fields contain reserved bits, which must preserve -/// some values (usually 0). The nil::marshalling::types::BitmaskValue fields support -/// usage of nil::marshalling::option::bitmask_reserved_bits alias option. The template +/// some values (usually 0). The nil::crypto3::marshalling::types::BitmaskValue fields support +/// usage of nil::crypto3::marshalling::option::bitmask_reserved_bits alias option. The template /// parameters of the option specify mask for reserved bits as well as their /// expected values. The check for the reserved bits values is performed inside -/// @b nil::marshalling::types::BitmaskValue::valid() member function. +/// @b nil::crypto3::marshalling::types::BitmaskValue::valid() member function. /// @code /// using MyBitmask = -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 /// >; /// @endcode /// /// @subsection sec_field_tutorial_bitmask_value_names Bit Names /// Quite often there is a need to provide names for the bits in the -/// nil::marshalling::types::BitmaskValue field. It is possible to define it as external +/// nil::crypto3::marshalling::types::BitmaskValue field. It is possible to define it as external /// independent enum. However, it may be convenient to define it as internal -/// type. It is possible to do by inheriting from appropriate nil::marshalling::types::BitmaskValue +/// type. It is possible to do by inheriting from appropriate nil::crypto3::marshalling::types::BitmaskValue /// type and use MARSHALLING_BITMASK_BITS() macro to define names for bits. For example /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 /// > /// { /// MARSHALLING_BITMASK_BITS(first, third=2, fourth, fifth, sixth, seventh, eighth); @@ -515,10 +515,10 @@ /// is equivalent to defining: /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> /// > /// { /// enum BitIdx @@ -536,7 +536,7 @@ /// @endcode /// @b NOTE, that provided names have found their way to @b BitIdx enum type, and /// got prefixed with @b BitIdx_. This indices may be used with -/// nil::marshalling::types::BitmaskValue::get_bit_value() and nil::marshalling::types::BitmaskValue::set_bit_value() +/// nil::crypto3::marshalling::types::BitmaskValue::get_bit_value() and nil::crypto3::marshalling::types::BitmaskValue::set_bit_value() /// member functions. /// /// Also note, that there is automatically generated @b BitIdx_numOfValues @@ -549,10 +549,10 @@ /// generate the convenience functions. For example: /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 /// > /// { /// MARSHALLING_BITMASK_BITS(first, third=2, fourth, fifth, sixth, seventh, eighth); @@ -562,10 +562,10 @@ /// is equivalent to defining: /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> /// > /// { /// enum BitIdx {...} @@ -585,10 +585,10 @@ /// can be unified into one @ref MARSHALLING_BITMASK_BITS_SEQ(): /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0xf0, 0> // 4 MSBs are reserved +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0xf0, 0> // 4 MSBs are reserved /// > /// { /// MARSHALLING_BITMASK_BITS_SEQ(first, second, third, fourth); @@ -604,10 +604,10 @@ /// respectively. For example: /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0xf0, 0> // 4 MSBs are reserved +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0xf0, 0> // 4 MSBs are reserved /// > /// { /// MARSHALLING_BITMASK_BITS_SEQ_NOTEMPLATE(first, second, third, fourth); @@ -619,19 +619,19 @@ /// @code /// template /// class MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0xf0, 0>, // 4 MSBs are reserved +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0xf0, 0>, // 4 MSBs are reserved /// TExtraOptions... /// > /// { /// // Duplicate base class type /// using Base = -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0xf0, 0>, // 4 MSBs are reserved +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0xf0, 0>, // 4 MSBs are reserved /// TExtraOptions... /// >; /// public: @@ -647,7 +647,7 @@ /// the defined symbol to add / remove the definition of the @b Base member type. /// @code /// template -/// class MyBitmask : public nil::marshalling::types::BitmaskValue<...> +/// class MyBitmask : public nil::crypto3::marshalling::types::BitmaskValue<...> /// { /// #ifdef MARSHALLING_MUST_DEFINE_BASE /// using Base = ...; @@ -690,16 +690,16 @@ /// /// These value must be accessed and treated as independent values. However, they /// must be bundled into a single byte when serialization happens. The -/// Marshalling library provides nil::marshalling::types::Bitfield field for this purpose. +/// Marshalling library provides nil::crypto3::marshalling::types::Bitfield field for this purpose. /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using SerialConfigField = -/// nil::marshalling::types::Bitfield< +/// nil::crypto3::marshalling::types::Bitfield< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::BitmaskValue > +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::BitmaskValue > /// > /// >; /// @endcode @@ -708,17 +708,17 @@ /// std::tuple /// and passed as the second template parameter. /// @li The serialization length of every bitfield member is specified in bits using -/// nil::marshalling::option::fixed_bit_length (note difference to nil::marshalling::option::fixed_length +/// nil::crypto3::marshalling::option::fixed_bit_length (note difference to nil::crypto3::marshalling::option::fixed_length /// that specifies length in bytes). /// @li The summary of all the "bit" lengths of all the members must be divisible /// by 8, i.e. to be packed in any number of bytes without leaving a single /// bit undefined. -/// @li The member of the bitfield may be any numeric field (nil::marshalling::types::IntValue, -/// nil::marshalling::types::EnumValue, and nil::marshalling::types::BitmaskValue), that support -/// nil::marshalling::option::fixed_bit_length option. +/// @li The member of the bitfield may be any numeric field (nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::types::EnumValue, and nil::crypto3::marshalling::types::BitmaskValue), that support +/// nil::crypto3::marshalling::option::fixed_bit_length option. /// /// Every member of the bitfield may use all the supported options. The -/// nil::marshalling::types::Bitfield itself may receive only options listed in its class +/// nil::crypto3::marshalling::types::Bitfield itself may receive only options listed in its class /// description. /// /// To get an access to the member fields use @b value() member function: @@ -737,7 +737,7 @@ /// std::vector outData; // Pretend output buffer /// auto writeIter = std::back_inserter(outData); /// auto es = baud.write(writeIter, outData.max_size()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// assert(outData.size() == 1); // Single byte output is expected /// assert(outData[0] == 0x56); // Binary value split to 3-2-3 bits: 010|10|110 /// @endcode @@ -747,7 +747,7 @@ /// It can be achieved by using /// MARSHALLING_FIELD_MEMBERS_ACCESS() macro inside field definition class. /// @code -/// class SerialConfigField : public nil::marshalling::types::Bitfield<...> +/// class SerialConfigField : public nil::crypto3::marshalling::types::Bitfield<...> /// { /// public: /// MARSHALLING_FIELD_MEMBERS_ACCESS(baud, parity, flags); @@ -755,7 +755,7 @@ /// @endcode /// It is equivalent to having the following enum, types and functions defined: /// @code -/// class SerialConfigField : public nil::marshalling::types::Bitfield<...> +/// class SerialConfigField : public nil::crypto3::marshalling::types::Bitfield<...> /// { /// public: /// // Access indices for member fields @@ -837,7 +837,7 @@ /// in the example above), then try to substitute the used macro with /// @ref MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE(). For example: /// @code -/// class SerialConfigField : public nil::marshalling::types::Bitfield<...> +/// class SerialConfigField : public nil::crypto3::marshalling::types::Bitfield<...> /// { /// public: /// MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE(baud, parity, flags); @@ -849,7 +849,7 @@ /// @code /// template /// class MyBitfieldField : public -/// nil::marshalling::types::Bitfield< +/// nil::crypto3::marshalling::types::Bitfield< /// MyFieldBase, /// std::tuple, /// TExtraOptions... @@ -857,7 +857,7 @@ /// { /// // Duplicate the base class type /// using Base = -/// nil::marshalling::types::Bitfield< +/// nil::crypto3::marshalling::types::Bitfield< /// MyFieldBase, /// std::tuple, /// TExtraOptions... @@ -873,7 +873,7 @@ /// the defined symbol to add / remove the definition of the @b Base member type. /// @code /// template -/// class MyBitfieldField : public nil::marshalling::types::Bitfield<...> +/// class MyBitfieldField : public nil::crypto3::marshalling::types::Bitfield<...> /// { /// #ifdef MARSHALLING_MUST_DEFINE_BASE /// using Base = ...; @@ -889,12 +889,12 @@ /// calculating length, checking field's contents validity, and bringing field's /// value into a consistent state. It may be required /// when a message contains sequence (see @ref sec_field_tutorial_array_list) -/// of such bundles/structs. The Marshalling library provides nil::marshalling::types::Bundle -/// field for this purpose. It is quite similar to nil::marshalling::types::Bitfield described +/// of such bundles/structs. The Marshalling library provides nil::crypto3::marshalling::types::Bundle +/// field for this purpose. It is quite similar to nil::crypto3::marshalling::types::Bitfield described /// earlier. The difference is that every member field /// doesn't specify any length in bits, just bytes. For example: /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// /// enum SomeEnum : std::uint8_t /// { @@ -905,12 +905,12 @@ /// } /// /// using MyBundle = -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::IntValue // 2 bytes int value -/// nil::marshalling::types::EnumValue, // 1 byte enum value -/// nil::marshalling::types::BitmaskValue > // 1 byte bitmask +/// nil::crypto3::marshalling::types::IntValue // 2 bytes int value +/// nil::crypto3::marshalling::types::EnumValue, // 1 byte enum value +/// nil::crypto3::marshalling::types::BitmaskValue > // 1 byte bitmask /// > /// >; /// @@ -928,16 +928,16 @@ /// std::vector outData; // Pretend output buffer /// auto writeIter = std::back_inserter(outData); /// auto es = baud.write(writeIter, outData.max_size()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// assert(outData.size() == 4); // Expected 2 bytes for IntValue, 1 byte for EnumValue and 1 byte for BitmaskValue /// @endcode -/// The default behaviour of nil::marshalling::types::Bundle may be extended with options. +/// The default behaviour of nil::crypto3::marshalling::types::Bundle may be extended with options. /// Please refer to the class documentation for the list of supported options. /// /// Just like with the @ref sec_field_tutorial_bitfield, the names to the /// member fields can be provided by using MARSHALLING_FIELD_MEMBERS_ACCESS() macro. /// @code -/// class MyBundle : public nil::marshalling::types::Bundle<...> +/// class MyBundle : public nil::crypto3::marshalling::types::Bundle<...> /// { /// public: /// MARSHALLING_FIELD_MEMBERS_ACCESS(member1, member2, member3); @@ -951,12 +951,12 @@ /// the @ref sec_field_tutorial_bitfield, the same warning applies. /// If compilation fails on the attempt to compile MARSHALLING_FIELD_MEMBERS_ACCESS(), /// use either MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE() alternative or define -/// inner @b Base type to specify actual type of @ref nil::marshalling::types::Bundle +/// inner @b Base type to specify actual type of @ref nil::crypto3::marshalling::types::Bundle /// type. For example: /// @code /// template /// class MyBundle : public -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple, /// TExtraOptions... @@ -964,7 +964,7 @@ /// { /// // Duplicate base type definition /// using Base = -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple, /// TExtraOptions... @@ -980,7 +980,7 @@ /// the defined symbol to add / remove the definition of the @b Base member type. /// @code /// template -/// class MyBundle : public nil::marshalling::types::Bundle<...> +/// class MyBundle : public nil::crypto3::marshalling::types::Bundle<...> /// { /// #ifdef MARSHALLING_MUST_DEFINE_BASE /// using Base = ...; @@ -993,27 +993,27 @@ /// @section sec_field_tutorial_array_list Array List fields_type /// Some communication protocols may define messages that transmit sequence /// of similar fields and/or raw data buffers. To make it easier to handle, the -/// Marshalling library provides nil::marshalling::types::array_list field which provide a required +/// Marshalling library provides nil::crypto3::marshalling::types::array_list field which provide a required /// interface to properly handle such sequences of data. It supports a /// sequence of raw bytes /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MySimpleList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// std::uint8_t /// >; /// @endcode -/// as well as using sequence of any fields defined in nil::marshalling::field namespace +/// as well as using sequence of any fields defined in nil::crypto3::marshalling::field namespace /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyComplexList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// MyBundle<> // Complex bundle field, defined in previous section /// >; /// @endcode -/// By default the read operation on nil::marshalling::types::array_list continues as +/// By default the read operation on nil::crypto3::marshalling::types::array_list continues as /// long as there is data left in input buffer, and write operation serialises /// all the data stored in internal vector. These default behaviours can be /// changed using options described below. @@ -1021,25 +1021,25 @@ /// @subsection sec_field_tutorial_array_list_size_prefix Prefixing with Size Information /// Very often variable size sequences of raw bytes or other fields get /// prefixed with size information. The default behaviour of the -/// nil::marshalling::types::array_list is to read until the end of the buffer. Having +/// nil::crypto3::marshalling::types::array_list is to read until the end of the buffer. Having /// sequence prefixed with number of elements to follow, allows earlier /// termination of the read operation, and allows having other independent -/// fields to be appended after the sequence. The nil::marshalling::types::array_list -/// class supports nil::marshalling::option::sequence_size_field_prefix option that allows -/// to specify type of the size field (usually a variant of nil::marshalling::types::IntValue) -/// to be serialized before the contents of nil::marshalling::types::array_list being +/// fields to be appended after the sequence. The nil::crypto3::marshalling::types::array_list +/// class supports nil::crypto3::marshalling::option::sequence_size_field_prefix option that allows +/// to specify type of the size field (usually a variant of nil::crypto3::marshalling::types::IntValue) +/// to be serialized before the contents of nil::crypto3::marshalling::types::array_list being /// serialized. For example, the serialized raw bytes sequence is prefixed with /// 2 bytes of size information: /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// -/// using SizePrefixField = nil::marshalling::types::IntValue; +/// using SizePrefixField = nil::crypto3::marshalling::types::IntValue; /// /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// std::uint8_t, -/// nil::marshalling::option::sequence_size_field_prefix +/// nil::crypto3::marshalling::option::sequence_size_field_prefix /// >; /// /// static const std::uint8_t InputBuffer[] = { @@ -1050,7 +1050,7 @@ /// MyList myList; /// const auto* readIter = &InputBuffer[0]; /// auto es = myList.read(readIter, InputBufferSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(myList.value().size() == 3U); // Reading only 3 elements /// assert((myList.value())[0] == 0xa); // First element /// assert((myList.value())[1] == 0xb); // Second element @@ -1062,69 +1062,69 @@ /// std::vector outputBuffer; /// auto writeIter = std::back_inserter(outputBuffer); /// es = myList.write(writeIter, outputBuffer.max_size()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(outputBuffer.size() == 5U); // Expected to write 5 bytes, 2 bytes for size, and 3 for elements. /// assert(std::equal(outputBuffer.begin(), outputBuffer.end(), std::begin(InputBuffer)); // The output must be equal to /// @endcode /// /// Some protocols prefix the sequence with serialization length rather /// than number of elements to follow. In this case the -/// @ref nil::marshalling::option::sequence_ser_length_field_prefix option needs to be used -/// instead of @ref nil::marshalling::option::sequence_size_field_prefix. +/// @ref nil::crypto3::marshalling::option::sequence_ser_length_field_prefix option needs to be used +/// instead of @ref nil::crypto3::marshalling::option::sequence_size_field_prefix. /// /// @subsection sec_field_tutorial_array_list_elem_length_prefix Element Serialisation length Prefix /// Also some protocols, for easier exchange of lists between nodes that use /// different versions of the same protocol, may require prefixing every /// element of the list with its serialization length. In this case -/// @ref nil::marshalling::option::sequence_elem_ser_length_field_prefix option may be used. +/// @ref nil::crypto3::marshalling::option::sequence_elem_ser_length_field_prefix option may be used. /// For example, the list of bundles prefixed with 2 bytes specifying number of /// elements to follow, and with every element prefixed with its serialization length using /// variable length base-128 encoding may look like this: /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// -/// using SizePrefixField = nil::marshalling::types::IntValue; +/// using SizePrefixField = nil::crypto3::marshalling::types::IntValue; /// using ElemLengthPrefixField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint32_t, -/// nil::marshalling::option::var_length<1, 4> // variable length encoding up to 4 bytes +/// nil::crypto3::marshalling::option::var_length<1, 4> // variable length encoding up to 4 bytes /// >; /// /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// MyBundle, // some bundle of fields -/// nil::marshalling::option::sequence_size_field_prefix, -/// nil::marshalling::option::sequence_elem_ser_length_field_prefix +/// nil::crypto3::marshalling::option::sequence_size_field_prefix, +/// nil::crypto3::marshalling::option::sequence_elem_ser_length_field_prefix /// >; /// @endcode /// When every element of the list is of fixed size, i.e. has the same serialization /// length, it becomes redundant to prefix @b every element with its length. /// Instead, only first element can be prefixed with one, and all others may /// reuse the same information. To achieve such behaviour -/// @ref nil::marshalling::option::sequence_elem_fixed_ser_length_field_prefix should be used instead. +/// @ref nil::crypto3::marshalling::option::sequence_elem_fixed_ser_length_field_prefix should be used instead. /// For example, the list of fixed length bundles prefixed with 1 byte specifying number of /// elements to follow, and with first element prefixed with 1 byte containing its serialization length /// may look like this: /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// -/// using SizePrefixField = nil::marshalling::types::IntValue; -/// using ElemLengthPrefixField = nil::marshalling::types::IntValue; +/// using SizePrefixField = nil::crypto3::marshalling::types::IntValue; +/// using ElemLengthPrefixField = nil::crypto3::marshalling::types::IntValue; /// /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::IntValue, -/// nil::marshalling::types::IntValue +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::types::IntValue /// > /// >, -/// nil::marshalling::option::sequence_size_field_prefix, -/// nil::marshalling::option::sequence_elem_fixed_ser_length_field_prefix +/// nil::crypto3::marshalling::option::sequence_size_field_prefix, +/// nil::crypto3::marshalling::option::sequence_elem_fixed_ser_length_field_prefix /// >; /// @endcode /// @@ -1138,23 +1138,23 @@ /// | 1 | 1 | Some flags bitmask | /// | 2 | 2 * N | Sequence of 2 byte integral values | /// -/// In this case the option nil::marshalling::option::sequence_size_field_prefix can NOT +/// In this case the option nil::crypto3::marshalling::option::sequence_size_field_prefix can NOT /// be used. In fact the size information is not a part of the sequence any /// more, it must be a separate independent field. When this field /// is successfully read, its value must be forced upon the sequence somehow /// before the read operation of the sequence takes place. To help with such -/// forcing, nil::marshalling::option::sequence_size_forcing_enabled option was introduced. -/// When this option used, the nil::marshalling::types::array_list::force_read_elem_count member +/// forcing, nil::crypto3::marshalling::option::sequence_size_forcing_enabled option was introduced. +/// When this option used, the nil::crypto3::marshalling::types::array_list::force_read_elem_count member /// function of the field may be used to force number of elements that follow. /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using SeqSizeField = nil::marshalling::types::IntValue; -/// using BitmaskField = nil::marshalling::types::BitmaskValue >; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using SeqSizeField = nil::crypto3::marshalling::types::IntValue; +/// using BitmaskField = nil::crypto3::marshalling::types::BitmaskValue >; /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::sequence_size_forcing_enabled +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::sequence_size_forcing_enabled /// >; /// /// static const std::uint8_t InputBuffer[] = { @@ -1167,20 +1167,20 @@ /// /// SeqSizeField sizeField; /// auto es = sizeField.read(readIter, remSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(sizeField.value() == 3U); // First byte should be read; /// /// remSize -= sizeField.length(); /// BitmaskField bitmask; /// es = bitmask.read(readIter, remSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(bitmask.value() == 0xff); // Second byte should be read; /// /// remSize -= bitmask.length(); /// MyList myList; /// myList.force_read_elem_count(sizeField.value()); // Force number of elements to read /// es = myList.read(readIter, remSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(myList.value().size() == 3U); // Reading only 3 elements /// assert((myList.value())[0] == 0xa); // First element /// assert((myList.value())[1] == 0xb); // Second element @@ -1196,29 +1196,29 @@ /// library allows forcing the serialization length of a single element when /// such information becomes available. It is similar to /// @ref sec_field_tutorial_array_list_detached_size_prefix. The option -/// @ref nil::marshalling::option::sequence_elem_length_forcing_enabled needs to be used when -/// defining the field type, and @ref nil::marshalling::types::array_list::force_read_elem_length() -/// and @ref nil::marshalling::types::array_list::clear_read_elem_length_forcing() functions to +/// @ref nil::crypto3::marshalling::option::sequence_elem_length_forcing_enabled needs to be used when +/// defining the field type, and @ref nil::crypto3::marshalling::types::array_list::force_read_elem_length() +/// and @ref nil::crypto3::marshalling::types::array_list::clear_read_elem_length_forcing() functions to /// set/clear the forcing information. /// @code /// // Common base class for all the fields -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// /// // field_type used to serialise serialization length of a single element in the list -/// using ElemLengthPrefixField = nil::marshalling::types::IntValue; +/// using ElemLengthPrefixField = nil::crypto3::marshalling::types::IntValue; /// /// // field_type used to serialise number of elements in the list -/// using SizePrefixField = nil::marshalling::types::IntValue; +/// using SizePrefixField = nil::crypto3::marshalling::types::IntValue; /// /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, -/// nil::marshalling::types::IntValue< // 3 bytes integers +/// nil::crypto3::marshalling::types::IntValue< // 3 bytes integers /// MyFieldBas, /// std::uint32_t, -/// nil::marshalling::option::fixed_length<3> >, -/// nil::marshalling::option::sequence_size_field_prefix, // 1 byte prefix -/// nil::marshalling::option::sequence_elem_length_forcing_enabled // enable forcing of the element length +/// nil::crypto3::marshalling::option::fixed_length<3> >, +/// nil::crypto3::marshalling::option::sequence_size_field_prefix, // 1 byte prefix +/// nil::crypto3::marshalling::option::sequence_elem_length_forcing_enabled // enable forcing of the element length /// >; /// /// static const std::uint8_t InputBuffer[] = { @@ -1233,12 +1233,12 @@ /// MyList myList; /// const auto* readIter = &InputBuffer[0]; /// auto es = lengthPrefix(readIter, InputBufferSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(lengthPrefix.value() == 4U); /// /// myList.force_read_elem_length(lengthPrefix.value()); // force serialization length of the single element /// auto es = myList.read(readIter, InputBufferSize - lengthPrefix.length()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(myList.value().size() == 2U); // Reading only 2 elements /// assert((myList.value())[0] == 0x0a0a0a); // First element /// assert((myList.value())[1] == 0x0b0b0b); // Second element @@ -1249,15 +1249,15 @@ /// Sometimes there is no information about size of the sequence up front. It /// may be terminating using some kind of special value. For example, the /// sequence of raw bytes is terminated by the value of 0. Such termination -/// is achieved by using nil::marshalling::option::sequence_termination_field_suffix option. +/// is achieved by using nil::crypto3::marshalling::option::sequence_termination_field_suffix option. /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using TermField = nil::marshalling::types::IntValue; // Default value is 0. +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using TermField = nil::crypto3::marshalling::types::IntValue; // Default value is 0. /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::sequence_termination_field_suffix +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::sequence_termination_field_suffix /// >; /// /// static const std::uint8_t InputBuffer[] = { @@ -1269,7 +1269,7 @@ /// /// MyList myList; /// es = myList.read(readIter, InputBufferSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(myList.value().size() == 4U); // Reading only 4 elements, terminating 0 is not included /// assert((myList.value())[0] == 0x1); // First element /// assert((myList.value())[1] == 0x2); // Second element @@ -1281,16 +1281,16 @@ /// @subsection sec_field_tutorial_array_list_fixed_size Fixed Size Sequences /// In many cases the size of the sequence is defined in the protocol without /// any prefix or suffix to define the length of the sequence. To define -/// such sequence nil::marshalling::option::sequence_fixed_size option should be used. +/// such sequence nil::crypto3::marshalling::option::sequence_fixed_size option should be used. /// Below is example of how to define sequence of four unsigned 16 bit integer /// values. /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::sequence_fixed_size<4> +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::sequence_fixed_size<4> /// >; /// /// static const std::uint8_t InputBuffer[] = { @@ -1302,7 +1302,7 @@ /// /// MyList myList; /// es = myList.read(readIter, InputBufferSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// assert(myList.value().size() == 4U); // Reading only 4 elements /// assert((myList.value())[0] == 0x1); // First element /// assert((myList.value())[1] == 0x2); // Second element @@ -1310,7 +1310,7 @@ /// assert((myList.value())[4] == 0x4); // Fourth element /// assert(std::distance(&InputBuffer[0], readIter) == 8); // Consumed only 4 element (2 bytes each) /// @endcode -/// @b NOTE, that nil::marshalling::option::sequence_fixed_size option insures existence of +/// @b NOTE, that nil::crypto3::marshalling::option::sequence_fixed_size option insures existence of /// the right number of elements "on the wire", but doesn't influence number /// of elements in the newly created list field: /// @code @@ -1339,8 +1339,8 @@ /// auto& complexListStorage = complexList.value(); // reference to std::vector; /// @endcode /// This behaviour can be modified using extra options such as @ref -/// nil::marshalling::option::custom_storage_type, @ref nil::marshalling::option::fixed_size_storage, -/// @ref nil::marshalling::option::orig_data_view, or @ref nil::marshalling::option::sequence_fixed_size_use_fixed_size_storage. +/// nil::crypto3::marshalling::option::custom_storage_type, @ref nil::crypto3::marshalling::option::fixed_size_storage, +/// @ref nil::crypto3::marshalling::option::orig_data_view, or @ref nil::crypto3::marshalling::option::sequence_fixed_size_use_fixed_size_storage. /// @b HOWEVER, these options do not influence the way how list fields are being /// serialized, they influence the way how list value has been stored. As the result, /// they should @b NOT be used in protocol definition. Instead, provide a way to @@ -1348,20 +1348,20 @@ /// options. For example: /// @code /// template -/// using MyList = nil::marshalling::types::array_list<..., TExtraOptions...>; +/// using MyList = nil::crypto3::marshalling::types::array_list<..., TExtraOptions...>; /// @endcode /// /// All the @ref sec_field_tutorial_common_options are also applicable to -/// nil::marshalling::types::array_list field. +/// nil::crypto3::marshalling::types::array_list field. /// /// @section sec_field_tutorial_string String fields_type /// Many protocols have to transfer strings. They are defined using -/// @ref nil::marshalling::types::String field. +/// @ref nil::crypto3::marshalling::types::String field. /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using MyString = nil::marshalling::types::String; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using MyString = nil::crypto3::marshalling::types::String; /// @endcode -/// It is very similar to nil::marshalling::types::array_list +/// It is very similar to nil::crypto3::marshalling::types::array_list /// it terms of value storage, read/write operations, and supported options. /// By default the value is stored as /// std::string. @@ -1371,21 +1371,21 @@ /// @endcode /// Just like described in @ref sec_field_tutorial_array_list_storage section /// above the same options can be used to modify the storage type of the -/// nil::marshalling::types::String field, but should @b NOT be used in protocol definition, but +/// nil::crypto3::marshalling::types::String field, but should @b NOT be used in protocol definition, but /// instead there should be an ability to provide extra options. /// @code /// template -/// using MyString = nil::marshalling::types::String; +/// using MyString = nil::crypto3::marshalling::types::String; /// @endcode /// /// Prefixing string with single byte of the size information will look like this: /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using SizePrefixField = nil::marshalling::types::IntValue; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using SizePrefixField = nil::crypto3::marshalling::types::IntValue; /// using MyString = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, -/// nil::marshalling::option::sequence_size_field_prefix +/// nil::crypto3::marshalling::option::sequence_size_field_prefix /// >; /// /// MyString myStr; @@ -1394,7 +1394,7 @@ /// std::vector outputBuf; /// auto writeIter = std::back_inserter(outputBuf); /// auto es = myStr.write(writeIter, outputBuf.max_size()); -/// assert(es = nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es = nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// assert(outputBuf.size() == 6U); // 1 byte of size, followed by 5 characters of "hello" string /// assert(outputBuf[0] == 5U); // size info /// assert(outputBuf[1] == 'h'); @@ -1408,12 +1408,12 @@ /// Encoding of zero termination strings without size prefix can be defined like /// this: /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using ZeroTermField = nil::marshalling::types::IntValue; // default value is 0 +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using ZeroTermField = nil::crypto3::marshalling::types::IntValue; // default value is 0 /// using MyString = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, -/// nil::marshalling::option::sequence_termination_field_suffix +/// nil::crypto3::marshalling::option::sequence_termination_field_suffix /// >; /// /// MyString myStr; @@ -1422,7 +1422,7 @@ /// std::vector outputBuf; /// auto writeIter = std::back_inserter(outputBuf); /// auto es = myStr.write(writeIter, outputBuf.max_size()); -/// assert(es = nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es = nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// assert(outputBuf.size() == 6U); // 5 characters of "hello" string followed by zero termination suffix /// assert(outputBuf[0] == 'h'); /// assert(outputBuf[1] == 'e'); @@ -1438,13 +1438,13 @@ /// characters. If string is too short, the serialization data is padded by /// zeros until full length of 32 characters is produced. /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using ZeroTermField = nil::marshalling::types::IntValue; // default value is 0 +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using ZeroTermField = nil::crypto3::marshalling::types::IntValue; // default value is 0 /// using MyString = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, -/// nil::marshalling::option::sequence_fixed_size<31>, -/// nil::marshalling::option::sequence_trailing_field_suffix +/// nil::crypto3::marshalling::option::sequence_fixed_size<31>, +/// nil::crypto3::marshalling::option::sequence_trailing_field_suffix /// >; /// /// MyString myStr; @@ -1453,7 +1453,7 @@ /// std::vector outputBuf; /// auto writeIter = std::back_inserter(outputBuf); /// auto es = myStr.write(writeIter, outputBuf.max_size()); -/// assert(es = nil::marshalling::ErrorStatus::success); // No error is expected +/// assert(es = nil::crypto3::marshalling::ErrorStatus::success); // No error is expected /// assert(outputBuf.size() == 32); // 5 characters of "hello" string followed by zero padding /// assert(outputBuf[0] == 'h'); /// assert(outputBuf[1] == 'e'); @@ -1464,42 +1464,42 @@ /// ... /// assert(outputBuf[31] == 0U); /// @endcode -/// @b NOTE, that the example above uses nil::marshalling::option::sequence_trailing_field_suffix -/// option, rather than nil::marshalling::option::sequence_termination_field_suffix. +/// @b NOTE, that the example above uses nil::crypto3::marshalling::option::sequence_trailing_field_suffix +/// option, rather than nil::crypto3::marshalling::option::sequence_termination_field_suffix. /// The options slightly differ. The "termination" one -/// (nil::marshalling::option::sequence_termination_field_suffix) forces the field to +/// (nil::crypto3::marshalling::option::sequence_termination_field_suffix) forces the field to /// stop reading when termination value is encountered, while "trailing" one -/// (nil::marshalling::option::sequence_trailing_field_suffix) doesn't check what it reads, -/// the reading size must be limited by other means (nil::marshalling::option::sequence_fixed_size +/// (nil::crypto3::marshalling::option::sequence_trailing_field_suffix) doesn't check what it reads, +/// the reading size must be limited by other means (nil::crypto3::marshalling::option::sequence_fixed_size /// in the example above). When the read is complete, it just consumes the /// termination character. Both options, however, force the termination /// character to be appended at the end during write operation. @n -/// Also note, that size limit is specified (using nil::marshalling::option::sequence_fixed_size) +/// Also note, that size limit is specified (using nil::crypto3::marshalling::option::sequence_fixed_size) /// to be 31. One more byte is added by the "trailing" suffix to complete to 32 /// bytes. /// -/// Just like with @ref nil::marshalling::types::array_list, it is possible to use static +/// Just like with @ref nil::crypto3::marshalling::types::array_list, it is possible to use static /// storage for fixed size strings: /// @code /// using MyString = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// ..., -/// nil::marshalling::option::sequence_fixed_size<16>, -/// nil::marshalling::option::sequence_fixed_size_use_fixed_size_storage +/// nil::crypto3::marshalling::option::sequence_fixed_size<16>, +/// nil::crypto3::marshalling::option::sequence_fixed_size_use_fixed_size_storage /// >; /// @endcode /// or /// @code /// using MyString = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// ..., -/// nil::marshalling::option::sequence_fixed_size<16>, -/// nil::marshalling::option::fixed_size_storage<16> +/// nil::crypto3::marshalling::option::sequence_fixed_size<16>, +/// nil::crypto3::marshalling::option::fixed_size_storage<16> /// >; /// @endcode /// /// @section sec_field_tutorial_fp_value Floating Point value fields_type -/// Floating point value fields (nil::marshalling::types::FloatValue) are very similar to +/// Floating point value fields (nil::crypto3::marshalling::types::FloatValue) are very similar to /// @ref sec_field_tutorial_int_value, but use @b float or @b double as its /// internal storage type. They abstract the IEEE 754 floating point /// values, which are serialized "as is" with either big or little endian @@ -1512,15 +1512,15 @@ /// "flags" bitmask field which specifies whether the following field exists or /// missing. The optional field may also be tentative, i.e. if there is enough /// data in the input buffer it exists, and missing otherwise. The Marshalling -/// library provides nil::marshalling::types::Optional which is a mere wrapper around +/// library provides nil::crypto3::marshalling::types::Optional which is a mere wrapper around /// other fields and provides an ability to set the optional state of the field. /// Let's do the example of the int32 field existence based on bit 0 in processing bitmask: /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using FlagsField = nil::marshalling::types::BitmaskValue >; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using FlagsField = nil::crypto3::marshalling::types::BitmaskValue >; /// using OptField = -/// nil::marshalling::types::Optional< -/// nil::marshalling::types::IntValue +/// nil::crypto3::marshalling::types::Optional< +/// nil::crypto3::marshalling::types::IntValue /// >; /// /// FlagsField flags; @@ -1531,7 +1531,7 @@ /// [&flags, &optField](const std::uint8_t*& iter, std::size_t len) /// { /// auto es = flags.read(iter, len); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// /// optField.set_missing(); /// if ((flags.value() & 0x1) != 0) { @@ -1539,7 +1539,7 @@ /// } /// /// es = optField.read(iter, len - flags.length()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No error is expected; +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No error is expected; /// }; /// /// @@ -1574,7 +1574,7 @@ /// updated after read operation: /// @code /// OptField optField1; -/// assert(optField1.get_mode() == nil::marshalling::types::OptionalMode::tentative); // Default mode is tentative +/// assert(optField1.get_mode() == nil::crypto3::marshalling::types::OptionalMode::tentative); // Default mode is tentative /// /// static const std::uint8_t InputBuffer[] = { /// 0x11, 0x22, 0x33, 0x44 @@ -1583,46 +1583,46 @@ /// /// auto* readIter = &InputBuffer[0]; /// auto es = optField1.read(readIter, InputBufferSize); -/// assert(es = nil::marshalling::ErrorStatus::success); +/// assert(es = nil::crypto3::marshalling::ErrorStatus::success); /// assert(std::distance(&InputBuffer[0], readIter) == 4); // Expected to read 4 bytes of int32_t int value -/// assert(optField1.get_mode() == nil::marshalling::types::OptionalMode::exists); // mode_type is changed +/// assert(optField1.get_mode() == nil::crypto3::marshalling::types::OptionalMode::exists); // mode_type is changed /// /// OptField optField2; -/// assert(optField2.get_mode() == nil::marshalling::types::OptionalMode::tentative); // Default mode is tentative +/// assert(optField2.get_mode() == nil::crypto3::marshalling::types::OptionalMode::tentative); // Default mode is tentative /// readIter = &InputBuffer[0]; /// es = optField2.read(readIter, 0); // Note 0 as a buffer size -/// assert(es = nil::marshalling::ErrorStatus::success); +/// assert(es = nil::crypto3::marshalling::ErrorStatus::success); /// assert(std::distance(&InputBuffer[0], readIter) == 0); // Expected not to read anything -/// assert(optField2.get_mode() == nil::marshalling::types::OptionalMode::missing); // mode_type is changed +/// assert(optField2.get_mode() == nil::crypto3::marshalling::types::OptionalMode::missing); // mode_type is changed /// @endcode -/// It is easy to change the default mode of the nil::marshalling::types::Optional field by -/// providing nil::marshalling::option::default_optional_mode option with selected default mode -/// or @ref nil::marshalling::option::missing_by_default / @ref nil::marshalling::option::exists_by_default aliases. +/// It is easy to change the default mode of the nil::crypto3::marshalling::types::Optional field by +/// providing nil::crypto3::marshalling::option::default_optional_mode option with selected default mode +/// or @ref nil::crypto3::marshalling::option::missing_by_default / @ref nil::crypto3::marshalling::option::exists_by_default aliases. /// @code /// using OptField = -/// nil::marshalling::types::Optional< -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::missing_by_default // Set default mode to be "missing" +/// nil::crypto3::marshalling::types::Optional< +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::missing_by_default // Set default mode to be "missing" /// >; /// @endcode /// Some protocols may include version information either in transport framing or /// in one of the messages. Such info may specify whether a specific field exists -/// or not. Such fields need to be wrapped in @ref nil::marshalling::types::Optional field, which -/// receives @ref nil::marshalling::option::exists_between_versions option to specify the +/// or not. Such fields need to be wrapped in @ref nil::crypto3::marshalling::types::Optional field, which +/// receives @ref nil::crypto3::marshalling::option::exists_between_versions option to specify the /// numeric versions of the protocol between which the field exists. /// @code /// using OptField = -/// nil::marshalling::types::Optional< -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::missing_by_default, // Set default mode to be "missing" -/// nil::marshalling::option::exists_between_versions<1, 5> +/// nil::crypto3::marshalling::types::Optional< +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::missing_by_default, // Set default mode to be "missing" +/// nil::crypto3::marshalling::option::exists_between_versions<1, 5> /// >; /// @endcode /// If the field has been introduced in one of the version, but hasn't been -/// removed yet, it is possible to use @ref nil::marshalling::option::exists_since_version alias -/// to @ref nil::marshalling::option::exists_between_versions. Or the opposite, if the field +/// removed yet, it is possible to use @ref nil::crypto3::marshalling::option::exists_since_version alias +/// to @ref nil::crypto3::marshalling::option::exists_between_versions. Or the opposite, if the field /// has been introduced in the first version, but deprecated and removed in the -/// later one, use @ref nil::marshalling::option::exists_until_version alias. +/// later one, use @ref nil::crypto3::marshalling::option::exists_until_version alias. /// /// Usage of such version control option will automatically mark the optional /// field as @b existing or @b missing based on the provided version info in @@ -1638,18 +1638,18 @@ /// @li Unsigned integer with length of 4 bytes (@b Value2) /// @li String field with 1 byte size prefix (@b Value3) /// -/// The @b Marshalling library provides nil::marshalling::types::Variant field to allow such +/// The @b Marshalling library provides nil::crypto3::marshalling::types::Variant field to allow such /// heterogeneous fields. Let's implement the described example. /// /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using Value1 = nil::marshalling::types::IntValue; -/// using Value2 = nil::marshalling::types::IntValue; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using Value1 = nil::crypto3::marshalling::types::IntValue; +/// using Value2 = nil::crypto3::marshalling::types::IntValue; /// using Value3 = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, -/// nil::marshalling::option::sequence_size_field_prefix< -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::option::sequence_size_field_prefix< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint8_t /// > @@ -1666,17 +1666,17 @@ /// NumOfValues /// }; /// @endcode -/// And the relevant key fields as a variant of nil::marshalling::types::EnumValue with +/// And the relevant key fields as a variant of nil::crypto3::marshalling::types::EnumValue with /// only single acceptable value. /// @code /// template /// using KeyField = -/// nil::marshalling::types::EnumValue< +/// nil::crypto3::marshalling::types::EnumValue< /// MyFieldBase, /// KeyId, -/// nil::marshalling::option::default_num_value<(int)TId>, -/// nil::marshalling::option::valid_num_value_range<(int)TId, (int)TId>, -/// nil::marshalling::option::fail_on_invalid<> +/// nil::crypto3::marshalling::option::default_num_value<(int)TId>, +/// nil::crypto3::marshalling::option::valid_num_value_range<(int)TId, (int)TId>, +/// nil::crypto3::marshalling::option::fail_on_invalid<> /// >; /// /// using Key1 = KeyField; @@ -1686,30 +1686,30 @@ /// Then the @b KeyX and its corresponding @b ValueX need to be bundled together /// as a single @b PropertyX field. /// @code -/// using Property1 = nil::marshalling::types::Bundle >; -/// using Property2 = nil::marshalling::types::Bundle >; -/// using Property3 = nil::marshalling::types::Bundle >; +/// using Property1 = nil::crypto3::marshalling::types::Bundle >; +/// using Property2 = nil::crypto3::marshalling::types::Bundle >; +/// using Property3 = nil::crypto3::marshalling::types::Bundle >; /// @endcode /// Now we need a single @b field abstraction, which can be any of the specified -/// above forms. The nil::marshalling::types::Variant field class provides such an ability. +/// above forms. The nil::crypto3::marshalling::types::Variant field class provides such an ability. /// As its second parameter it receives a tuple of supported types. /// @code /// using MyVariant = -/// nil::marshalling::types::Variant< +/// nil::crypto3::marshalling::types::Variant< /// MyFieldBase, /// std::tuple /// >; /// @endcode /// Now it is easy to put such field type into the list: /// @code -/// using PropertiesList = nil::marshalling::types::array_list; +/// using PropertiesList = nil::crypto3::marshalling::types::array_list; /// @endcode /// In this scenario, read operation on the list will invoke read operation of /// every @b MyVariant field, which in turn will try to perform read operation /// on @b Property1, @b Property2, and @b Property3 in the order of their /// definition inside the provided tuple. The read operation of the -/// nil::marshalling::types::Variant field type will stop when read operation of any -/// of the contained types reports nil::marshalling::ErrorStatus::success as its status. +/// nil::crypto3::marshalling::types::Variant field type will stop when read operation of any +/// of the contained types reports nil::crypto3::marshalling::ErrorStatus::success as its status. /// /// Accessing the currently held field can be tricky though. There is a need /// to differentiate between @b compile-time and @b run-time knowledge of the @@ -1717,7 +1717,7 @@ /// /// When preparing a variant field to be sent out, usually the inner /// field type and its value are known at compile time. The initialisation of the -/// field can be performed using nil::marshalling::types::Variant::init_field() member +/// field can be performed using nil::crypto3::marshalling::types::Variant::init_field() member /// function: /// @code /// MyVariant var; // Created in "invalid" state @@ -1727,7 +1727,7 @@ /// @endcode /// If the variant field has been initialised before, but there is a need to /// to access the real type (also known at compile time), use -/// nil::marshalling::types::Variant::access_field() member function +/// nil::crypto3::marshalling::types::Variant::access_field() member function /// @code /// void updateProp1(MyVariant& var) /// { @@ -1739,17 +1739,17 @@ /// Just like with @ref sec_field_tutorial_bitfield and @ref sec_field_tutorial_bundle /// it would be convenient to operate with internal type names, rather than hard coded /// indices. In order to provide names for the available inner types, please -/// inherit from proper nil::marshalling::types::Variant field definition and +/// inherit from proper nil::crypto3::marshalling::types::Variant field definition and /// use MARSHALLING_VARIANT_MEMBERS_ACCESS() macro inside. /// @code -/// struct MyVariant : public nil::marshalling::types::Variant<...> +/// struct MyVariant : public nil::crypto3::marshalling::types::Variant<...> /// { /// MARSHALLING_VARIANT_MEMBERS_ACCESS(prop1, prop2, prop3); /// }; /// @endcode /// It would be equivalent to having the following types and functions defined /// @code -/// struct MyVariant : public nil::marshalling::types::Variant<...> +/// struct MyVariant : public nil::crypto3::marshalling::types::Variant<...> /// { /// enum FieldIdx { /// FieldIdx_prop1, @@ -1812,11 +1812,11 @@ /// /// There are cases (such as after "read" operation), when actual type of the /// @b Variant field is known at run-time. The most straightforward way of -/// inquiring the actual type index using nil::marshalling::types::Variant::current_field() +/// inquiring the actual type index using nil::crypto3::marshalling::types::Variant::current_field() /// function and then using a `switch` statement and handle every case accordingly /// may work but is not very efficient. There is a way to perform more efficient /// way of dispatching the actual field to its appropriate handling function by -/// using nil::marshalling::types::Variant::current_field_exec() member function. It expects +/// using nil::crypto3::marshalling::types::Variant::current_field_exec() member function. It expects /// to receive a handling object which can handle all of the available inner types: /// @code /// struct MyVariantHandler @@ -1850,16 +1850,16 @@ /// void operator()(TField& prop) {...} /// } /// @endcode -/// The default constructed nil::marshalling::types::Variant object from the examples above +/// The default constructed nil::crypto3::marshalling::types::Variant object from the examples above /// has an "invalid" state, i.e. hasn't been initialised and doesn't contain any -/// valid field. It can be changed by providing nil::marshalling::option::default_variant_index +/// valid field. It can be changed by providing nil::crypto3::marshalling::option::default_variant_index /// option. /// @code /// struct MyVariant : public -/// nil::marshalling::types::Variant< +/// nil::crypto3::marshalling::types::Variant< /// MyFieldBase, /// std::tuple, -/// nil::marshalling::option::default_variant_index<0> // Initialise as Prop1 +/// nil::crypto3::marshalling::option::default_variant_index<0> // Initialise as Prop1 /// > /// { /// MARSHALLING_VARIANT_MEMBERS_ACCESS(prop1, prop2, prop3); @@ -1884,10 +1884,10 @@ /// @ref MARSHALLING_VARIANT_MEMBERS_ACCESS_NOTEMPLATE(). For example: /// @code /// struct MyVariant : public -/// nil::marshalling::types::Variant< +/// nil::crypto3::marshalling::types::Variant< /// MyFieldBase, /// std::tuple, -/// nil::marshalling::option::default_variant_index<0> // Initialise as Prop1 +/// nil::crypto3::marshalling::option::default_variant_index<0> // Initialise as Prop1 /// > /// { /// MARSHALLING_VARIANT_MEMBERS_ACCESS_NOTEMPLATE(prop1, prop2, prop3); @@ -1899,19 +1899,19 @@ /// @code /// template /// class MyVariant : public -/// nil::marshalling::types::Variant< +/// nil::crypto3::marshalling::types::Variant< /// MyFieldBase, /// std::tuple, -/// nil::marshalling::option::default_variant_index<0>, // Initialise as Prop1 +/// nil::crypto3::marshalling::option::default_variant_index<0>, // Initialise as Prop1 /// TExtraOptions... /// > /// { /// // Duplicate base class definition /// using Base = -/// nil::marshalling::types::Variant< +/// nil::crypto3::marshalling::types::Variant< /// MyFieldBase, /// std::tuple, -/// nil::marshalling::option::default_variant_index<0>, // Initialise as Prop1 +/// nil::crypto3::marshalling::option::default_variant_index<0>, // Initialise as Prop1 /// TExtraOptions... /// >; /// public: @@ -1925,7 +1925,7 @@ /// the defined symbol to add / remove the definition of the @b Base member type. /// @code /// template -/// class MyVariant : public nil::marshalling::types::Variant<...> +/// class MyVariant : public nil::crypto3::marshalling::types::Variant<...> /// { /// #ifdef MARSHALLING_MUST_DEFINE_BASE /// using Base = ...; @@ -1937,9 +1937,9 @@ /// /// @section sec_field_tutorial_common_options Common options_type or Modifications for the fields_type /// There are options that suitable only to numeric fields, such as -/// nil::marshalling::types::IntValue, nil::marshalling::types::EnumValue, nil::marshalling::types::BitmaskValue. @n +/// nil::crypto3::marshalling::types::IntValue, nil::crypto3::marshalling::types::EnumValue, nil::crypto3::marshalling::types::BitmaskValue. @n /// There are options that suitable only for collection fields, such as -/// nil::marshalling::types::array_list, and nil::marshalling::types::String.@n +/// nil::crypto3::marshalling::types::array_list, and nil::crypto3::marshalling::types::String.@n /// There are also @b common options that can be used with all the fields that support /// options. /// @@ -1951,8 +1951,8 @@ /// One of the possible ways is to extend the defined field class and /// set the required value in the constructor. /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// struct MyString : public nil::marshalling::types::String +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// struct MyString : public nil::crypto3::marshalling::types::String /// { /// MyString() /// { @@ -1960,7 +1960,7 @@ /// } /// }; /// @endcode -/// Another way is to use nil::marshalling::option::default_value_initialiser option. +/// Another way is to use nil::crypto3::marshalling::option::default_value_initialiser option. /// It receives a template parameter, which has to be a type of initialisation /// class. It must provide @b operator() which is responsible to assign a custom /// value to the field. It is going to be invoked from the default constructor @@ -1986,11 +1986,11 @@ /// } /// }; /// -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyString = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, -/// nil::marshalling::option::default_value_initialiser +/// nil::crypto3::marshalling::option::default_value_initialiser /// >; /// /// MyString myStr; // Default construction @@ -2001,15 +2001,15 @@ /// defined field's base classes, which is implementation dependent. Just use /// the provided @b value() member function to access the value. /// -/// The Marshalling library also provides a simpler alias for nil::marshalling::option::default_value_initialiser -/// to set default value for numeric fields. It is nil::marshalling::option::default_num_value. +/// The Marshalling library also provides a simpler alias for nil::crypto3::marshalling::option::default_value_initialiser +/// to set default value for numeric fields. It is nil::crypto3::marshalling::option::default_num_value. /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyInt = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, -/// nil::marshalling::option::default_num_value<10> +/// nil::crypto3::marshalling::option::default_num_value<10> /// >; /// /// MyInt myInt; @@ -2030,26 +2030,26 @@ /// One way to implement custom read functionality is to extend the field /// definition and override the @b read() member function: /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// struct MyBundle : public -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::BitmaskValue >, -/// nil::marshalling::types::Optional +/// nil::crypto3::marshalling::types::BitmaskValue >, +/// nil::crypto3::marshalling::types::Optional /// >, -/// nil::marshalling::option::has_custom_read +/// nil::crypto3::marshalling::option::has_custom_read /// > /// { /// template -/// nil::marshalling::ErrorStatus read(TIter& iter, std::size_t len) +/// nil::crypto3::marshalling::ErrorStatus read(TIter& iter, std::size_t len) /// { /// auto& members = value(); /// auto& bitmask = std::get<0>(members); /// auto& optInt = std::get<1>(members); /// /// auto es = bitmask.read(iter, len); -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// return es; /// } /// @@ -2064,13 +2064,13 @@ /// } /// }; /// @endcode -/// @b NOTE the usage of @ref nil::marshalling::option::has_custom_read option. It notifies +/// @b NOTE the usage of @ref nil::crypto3::marshalling::option::has_custom_read option. It notifies /// other classes about existence of custom @b read functionality /// (instead of default one). Other classes may contain some inner logic to /// perform various optimisations if there is no custom @b read. /// Failure to specify this option may result in incorrect behaviour. /// -/// Another way is to use nil::marshalling::option::custom_value_reader option. It +/// Another way is to use nil::crypto3::marshalling::option::custom_value_reader option. It /// receives one template parameter, which has to be a type of a custom /// reader class. Such class must implement @b operator() with the following /// signature: @@ -2078,7 +2078,7 @@ /// struct MyReader /// { /// template -/// nil::marshalling::ErrorStatus operator()(TField& field, TIter& iter, std::size_t len) const +/// nil::crypto3::marshalling::ErrorStatus operator()(TField& field, TIter& iter, std::size_t len) const /// { /// ... // Do proper read of the field's value. /// } @@ -2097,8 +2097,8 @@ /// One of the ways to provide custom validation logic is to extend the field /// definition and implement @b valid() member function: /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// struct MyString : public nil::marshalling::types::String +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// struct MyString : public nil::crypto3::marshalling::types::String /// { /// bool valid() const /// { @@ -2108,7 +2108,7 @@ /// }; /// @endcode /// -/// Another way is to use nil::marshalling::option::contents_validator option. It +/// Another way is to use nil::crypto3::marshalling::option::contents_validator option. It /// receives one template parameter, which has to be a type of a custom /// validator class. Such class must implement @b operator() with the following /// signature: @@ -2136,10 +2136,10 @@ /// } /// }; /// -/// using MyFieldBase = nil::marshalling::field_type; -/// using MyString = nil::marshalling::types::String< +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using MyString = nil::crypto3::marshalling::types::String< /// MyFieldBase, -/// nil::marshalling::option::contents_validator +/// nil::crypto3::marshalling::option::contents_validator /// >; /// /// MyString myStr; @@ -2155,11 +2155,11 @@ /// /// Quite often the valid values of the numeric fields can be expressed in limited /// number of ranges: [minValid - maxValid]. The Marshalling library provides -/// @ref nil::marshalling::option::valid_num_value_range option (and @ref nil::marshalling::option::ValidNumValue alias), +/// @ref nil::crypto3::marshalling::option::valid_num_value_range option (and @ref nil::crypto3::marshalling::option::ValidNumValue alias), /// which can be used multiple times. The field's value is considered to be valid if /// at least one of the provided ranges contains it. The range validation option -/// can be used only with numeric value fields, such as nil::marshalling::types::IntValue, -/// or nil::marshalling::types::EnumValue. For example: +/// can be used only with numeric value fields, such as nil::crypto3::marshalling::types::IntValue, +/// or nil::crypto3::marshalling::types::EnumValue. For example: /// @code /// enum SomeEnum : std::uint8_t /// { @@ -2168,13 +2168,13 @@ /// SomeEnum_Value3 /// }; /// -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyEnum = -/// nil::marshalling::types::EnumValue< +/// nil::crypto3::marshalling::types::EnumValue< /// MyFieldBase, /// SomeEnum, -/// nil::marshalling::option::default_num_value, // Construct with valid value -/// nil::marshalling::option::valid_num_value_range +/// nil::crypto3::marshalling::option::default_num_value, // Construct with valid value +/// nil::crypto3::marshalling::option::valid_num_value_range /// >; /// /// MyEnum myEnum; @@ -2189,32 +2189,32 @@ /// range of [0x20 - 0x7e], as well as value 0. Such field can be defined as: /// @code /// using MyChar = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// char, -/// nil::marshalling::option::valid_num_value_range<0x20, 0x7e>, -/// nil::marshalling::option::ValidNumValue<0> +/// nil::crypto3::marshalling::option::valid_num_value_range<0x20, 0x7e>, +/// nil::crypto3::marshalling::option::ValidNumValue<0> /// >; /// @endcode /// @b WARNING: Some older compilers (@b gcc-4.7) fail to compile valid C++11 code -/// that allows usage of multiple @ref nil::marshalling::option::valid_num_value_range options. If this is -/// the case, please don't pass more than one @ref nil::marshalling::option::valid_num_value_range option. +/// that allows usage of multiple @ref nil::crypto3::marshalling::option::valid_num_value_range options. If this is +/// the case, please don't pass more than one @ref nil::crypto3::marshalling::option::valid_num_value_range option. /// -/// There is a also a convenience alias to nil::marshalling::option::contents_validator intended -/// for use with bitmasks (nil::marshalling::types::BitmaskValue). Many bitmask fields +/// There is a also a convenience alias to nil::crypto3::marshalling::option::contents_validator intended +/// for use with bitmasks (nil::crypto3::marshalling::types::BitmaskValue). Many bitmask fields /// may have one or several reserved bits with predefined values they must contain. -/// The alias option is nil::marshalling::option::bitmask_reserved_bits. It receives two +/// The alias option is nil::crypto3::marshalling::option::bitmask_reserved_bits. It receives two /// template parameters: one for the mask indicating the reserved bits and another /// for the expected values of these bits.@n /// For example, below is a definition of the 1 byte bitmask field that has /// two reserved bits, most and least significant. Both of them must be 0. /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyFlags = -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x81, 0> +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x81, 0> /// >; /// /// MyFlags flags; @@ -2227,7 +2227,7 @@ /// Every field provides @b refresh() member function used to bring the field's /// value into a consistent state. By default this function does nothing and /// returns @b false, meaning the field has @b NOT been updated. For complex fields, such -/// as nil::marshalling::types::Bitfield or nil::marshalling::types::Bundle, the default behaviour is +/// as nil::crypto3::marshalling::types::Bitfield or nil::crypto3::marshalling::types::Bundle, the default behaviour is /// to invoke @b refresh() member function of each member field and return @b true /// if @b any of the calls returned true. /// @@ -2242,16 +2242,16 @@ /// There is a need to provide the custom "refresh" logic that brings the field's /// contents into a consistent state. /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// struct MyBundle : public -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::BitmaskValue >, -/// nil::marshalling::types::Optional +/// nil::crypto3::marshalling::types::BitmaskValue >, +/// nil::crypto3::marshalling::types::Optional /// >, -/// nil::marshalling::option::has_custom_read, -/// nil::marshalling::option::has_custom_refresh +/// nil::crypto3::marshalling::option::has_custom_read, +/// nil::crypto3::marshalling::option::has_custom_refresh /// > /// { /// ... @@ -2261,9 +2261,9 @@ /// auto& members = value(); /// auto& bitmask = std::get<0>(members); /// auto& optInt = std::get<1>(members); -/// auto expectedMode = nil::marshalling::types::OptionalMode::missing; +/// auto expectedMode = nil::crypto3::marshalling::types::OptionalMode::missing; /// if (bitmask.get_bit_value(0)) { -/// expectedMode = nil::marshalling::types::OptionalMode::exists; +/// expectedMode = nil::crypto3::marshalling::types::OptionalMode::exists; /// } /// /// if (optInt.get_mode() == expectedMode) { @@ -2275,13 +2275,13 @@ /// } /// }; /// @endcode -/// @b NOTE the usage of @ref nil::marshalling::option::has_custom_refresh option. It notifies +/// @b NOTE the usage of @ref nil::crypto3::marshalling::option::has_custom_refresh option. It notifies /// other classes about existence of custom @b refresh functionality /// (instead of default one). Other classes may contain some inner logic to /// perform various optimisations if there is no custom @b refresh. /// Failure to specify this option may result in incorrect behaviour. /// -/// Another way is to use nil::marshalling::option::contents_refresher option. It +/// Another way is to use nil::crypto3::marshalling::option::contents_refresher option. It /// receives one template parameter, which has to be a type of a custom /// refresher class. Such class must implement @b operator() with the following /// signature: @@ -2312,9 +2312,9 @@ /// For most fields @b set_version() function does nothing and /// returns @b false, meaning the field has @b NOT been updated (similar to /// @ref sec_field_tutorial_common_options_refresh). For complex fields, such -/// as nil::marshalling::types::Bitfield or nil::marshalling::types::Bundle, the default behaviour is +/// as nil::crypto3::marshalling::types::Bitfield or nil::crypto3::marshalling::types::Bundle, the default behaviour is /// to invoke @b set_version() member function of each member field and return @b true -/// if @b any of the calls returned @b true. For @ref nil::marshalling::types::array_list +/// if @b any of the calls returned @b true. For @ref nil::crypto3::marshalling::types::array_list /// fields, the version information may be stored inside (only if the element's /// @b is_version_dependent() member function returns @b true) and used to notify /// every new field that is being read during @b read operation. @@ -2327,13 +2327,13 @@ /// version @b 6 the range is extended to [0, 10]. It can be defined as following: /// @code /// class MyInt : public -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint8_t, -/// nil::marshalling::option::valid_num_value_range<0, 5>, -/// nil::marshalling::option::has_custom_version_update +/// nil::crypto3::marshalling::option::valid_num_value_range<0, 5>, +/// nil::crypto3::marshalling::option::has_custom_version_update /// { -/// using Base = nil::marshalling::types::IntValue<...>; // Repeat base class definition +/// using Base = nil::crypto3::marshalling::types::IntValue<...>; // Repeat base class definition /// public: /// // Updated validity check /// bool valid() const @@ -2361,19 +2361,19 @@ /// version_type m_version = 0; /// }; /// @endcode -/// @b NOTE, the usage of @ref nil::marshalling::option::has_custom_version_update option. It +/// @b NOTE, the usage of @ref nil::crypto3::marshalling::option::has_custom_version_update option. It /// marks the defined field as "version dependent" and as the result its @b /// is_version_dependent() member function will return @b true. /// /// Also @b NOTE, that by default the @b version_type inner type is defined to /// be @b unsigned. If there is a need to change that, the @ref -/// nil::marshalling::option::version_type needs to be passed to the definition of the +/// nil::crypto3::marshalling::option::version_type needs to be passed to the definition of the /// common base class of all the fields: /// @code /// using MyFieldBase = -/// nil::marshalling::field_type< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::version_type +/// nil::crypto3::marshalling::field_type< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::version_type /// >; /// @endcode /// @@ -2382,16 +2382,16 @@ /// invalid values, such as the message must be dropped when some field has /// an invalid value. It is easy to implement by forcing @b read() operation on /// such field to fail when reading an invalid value is recognised. The Marshalling -/// library provides nil::marshalling::option::fail_on_invalid option to help with such task. +/// library provides nil::crypto3::marshalling::option::fail_on_invalid option to help with such task. /// For example: /// @code -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint8_t, -/// nil::marshalling::option::valid_num_value_range<0, 5>, -/// nil::marshalling::option::fail_on_invalid +/// nil::crypto3::marshalling::option::valid_num_value_range<0, 5>, +/// nil::crypto3::marshalling::option::fail_on_invalid /// >; /// /// static const std::uint8_t InvalidBuf[] = { 0x6 }; @@ -2400,29 +2400,29 @@ /// MyField myField; /// auto* readIter = &InvalidBuf[0]; /// auto es = myField.read(readIter, InvalidBufSize); -/// assert(es != nil::marshalling::ErrorStatus::success); // Read failure is expected +/// assert(es != nil::crypto3::marshalling::ErrorStatus::success); // Read failure is expected /// /// static const std::uint8_t ValidBuf[] = { 0x1 }; /// static const auto ValidBufSize = std::extent::value; /// /// readIter = &ValidBuf[0]; /// es = myField.read(readIter, ValidBufSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // Read operation is expected to be successful now +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // Read operation is expected to be successful now /// @endcode /// /// @subsection sec_field_tutorial_common_options_ignore_invalid Ignore Invalid value -/// The Marshalling library also provides nil::marshalling::option::ignore_invalid option. It DOESN'T +/// The Marshalling library also provides nil::crypto3::marshalling::option::ignore_invalid option. It DOESN'T /// report failure on read operation when the invalid value is discovered -/// (like nil::marshalling::option::fail_on_invalid does). Instead the field's internal value +/// (like nil::crypto3::marshalling::option::fail_on_invalid does). Instead the field's internal value /// remains unchanged, although the read iterator is advanced as if the value /// is read. For example: /// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using MyField = nil::marshalling::types::IntValue< +/// using MyFieldBase = nil::crypto3::marshalling::field_type; +/// using MyField = nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint8_t, -/// nil::marshalling::option::valid_num_value_range<0, 5>, -/// nil::marshalling::option::ignore_invalid +/// nil::crypto3::marshalling::option::valid_num_value_range<0, 5>, +/// nil::crypto3::marshalling::option::ignore_invalid /// >; /// /// static const std::uint8_t InvalidBuf[] = { 0x6 }; @@ -2434,7 +2434,7 @@ /// /// auto* readIter = &InvalidBuf[0]; /// auto es = myField.read(readIter, InvalidBufSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No failure is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No failure is expected /// assert(myField.value() == 0U); // value mustn't be changed /// /// static const std::uint8_t ValidBuf[] = { 0x1 }; @@ -2442,23 +2442,23 @@ /// /// readIter = &ValidBuf[0]; /// es = myField.read(readIter, ValidBufSize); -/// assert(es == nil::marshalling::ErrorStatus::success); // No failure is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No failure is expected /// assert(myField.value() == 1U); // value is expected to be updated /// @endcode /// /// @subsection sec_field_tutorial_common_options_empty_ser Empty Serialisation /// Some protocols may define some constants which are NOT being sent over I/O /// link. Sometimes it may be useful to still treat these values as message fields. -/// Usage of @ref nil::marshalling::option::empty_serialization (or @ref -/// nil::marshalling::option::EmptySerialisation for those who prefer British spelling) can +/// Usage of @ref nil::crypto3::marshalling::option::empty_serialization (or @ref +/// nil::crypto3::marshalling::option::EmptySerialisation for those who prefer British spelling) can /// be used to achieve such effect. /// @code -/// using MyField = nil::marshalling::types::IntValue< +/// using MyField = nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint8_t, -/// nil::marshalling::option::valid_num_value_range<5, 5>, -/// nil::marshalling::option::default_num_value<5>, -/// nil::marshalling::option::empty_serialization +/// nil::crypto3::marshalling::option::valid_num_value_range<5, 5>, +/// nil::crypto3::marshalling::option::default_num_value<5>, +/// nil::crypto3::marshalling::option::empty_serialization /// >; /// /// MyField field; @@ -2468,7 +2468,7 @@ /// std::vector outBuf; /// auto writeIter = std::back_inserter(outBuf); /// auto es == field.write(writeIter, outBuf.max_size()); -/// assert(es == nil::marshalling::ErrorStatus::success); // No failure is expected +/// assert(es == nil::crypto3::marshalling::ErrorStatus::success); // No failure is expected /// assert(outBuf.empty()); // No data has been written /// @endcode /// @@ -2483,24 +2483,24 @@ /// @code /// template /// using MyField = -/// nil::marshalling::types::IntValue< -/// nil::marshalling::field_type, // base class of the field +/// nil::crypto3::marshalling::types::IntValue< +/// nil::crypto3::marshalling::field_type, // base class of the field /// std::uint16_t, /// TExtraOpts..., -/// nil::marshalling::option::default_num_value<5>, -/// nil::marshalling::option::valid_num_value_range<5, 1000> +/// nil::crypto3::marshalling::option::default_num_value<5>, +/// nil::crypto3::marshalling::option::valid_num_value_range<5, 1000> /// @endcode /// Please @b note, that current implementation gives preference to the options /// defined @b earlier. That's why @b TExtraOpts... should be listed before any /// other options. It will allow setting other default value needed by the application, -/// and/or override the valid values ranges (using @ref nil::marshalling::option::valid_ranges_clear). +/// and/or override the valid values ranges (using @ref nil::crypto3::marshalling::option::valid_ranges_clear). /// For example: /// @code /// using MyUpdatedField = /// MyField< -/// nil::marshalling::option::default_num_value<10>, -/// nil::marshalling::option::valid_num_value_range<10, 500>, -/// nil::marshalling::option::valid_ranges_clear +/// nil::crypto3::marshalling::option::default_num_value<10>, +/// nil::crypto3::marshalling::option::valid_num_value_range<10, 500>, +/// nil::crypto3::marshalling::option::valid_ranges_clear /// > /// @endcode /// @@ -2533,26 +2533,26 @@ /// /// // Read field value from input data sequence, using any type of input iterator /// template -/// nil::marshalling::ErrorStatus read(TIter& iter, std::size_t size); +/// nil::crypto3::marshalling::ErrorStatus read(TIter& iter, std::size_t size); /// /// // Write field value to output data sequence, using any type of output iterator /// template -/// nil::marshalling::ErrorStatus write(TIter& iter, std::size_t size) const; +/// nil::crypto3::marshalling::ErrorStatus write(TIter& iter, std::size_t size) const; /// }; /// @endcode -/// The nil::marshalling::field_type class provides @b read_data() and @b write_data() protected +/// The nil::crypto3::marshalling::field_type class provides @b read_data() and @b write_data() protected /// member functions that serialise data using endian provided as an option -/// to the class. It makes sense to inherit from nil::marshalling::field_type with right +/// to the class. It makes sense to inherit from nil::crypto3::marshalling::field_type with right /// option and reuse these functions inside: /// @code -/// class MyField : public nil::marshalling::field_type +/// class MyField : public nil::crypto3::marshalling::field_type /// { /// public: /// /// ... /// /// template -/// nil::marshalling::ErrorStatus read(TIter& iter, std::size_t size) +/// nil::crypto3::marshalling::ErrorStatus read(TIter& iter, std::size_t size) /// { /// ... /// auto val = read_data(iter); @@ -2560,7 +2560,7 @@ /// } /// /// template -/// nil::marshalling::ErrorStatus write(TIter& iter, std::size_t size) const +/// nil::crypto3::marshalling::ErrorStatus write(TIter& iter, std::size_t size) const /// { /// ... /// write_data(..., iter); @@ -2572,7 +2572,7 @@ /// in the Marshalling library it is recommended to provide an accessor functions /// @b value() for internal data storage: /// @code -/// class MyField : public nil::marshalling::field_type +/// class MyField : public nil::crypto3::marshalling::field_type /// { /// public: /// using value_type = ...; diff --git a/crypto3/libs/marshalling/core/docs/page_prot_stack.dox b/crypto3/libs/marshalling/core/docs/page_prot_stack.dox index 198db59649..66a62ad2f5 100644 --- a/crypto3/libs/marshalling/core/docs/page_prot_stack.dox +++ b/crypto3/libs/marshalling/core/docs/page_prot_stack.dox @@ -53,34 +53,34 @@ /// /// The Marshalling library provides multiple classes to define various layers when /// assembling the full protocol stack of layers. All these classes reside in -/// nil::marshalling::protocol namespace. +/// nil::crypto3::marshalling::protocol namespace. /// The following sections will cover all the layer classes required to /// assemble the protocol stack described above. /// /// @section page_prot_stack_tutorial_payload PAYLOAD Layer /// The top layer, that is responsible to read/write the payload of the message -/// is called @b PAYLOAD. It is implemented by nil::marshalling::protocol::MsgDataLayer +/// is called @b PAYLOAD. It is implemented by nil::crypto3::marshalling::protocol::MsgDataLayer /// class in the Marshalling library. /// @code -/// using MyMsgData = nil::marshalling::protocol::msg_data_layer<>; +/// using MyMsgData = nil::crypto3::marshalling::protocol::msg_data_layer<>; /// @endcode -/// @b NOTE, that @ref nil::marshalling::protocol::MsgDataLayer receives a template parameter. +/// @b NOTE, that @ref nil::crypto3::marshalling::protocol::MsgDataLayer receives a template parameter. /// In the normal operation, when transport frame fields are not stored anywhere, /// it is never used. However, there is way to perform @b read operation while -/// caching transport fields (by using @ref nil::marshalling::protocol::MsgDataLayer::read_fields_cached()) -/// The payload field is defined to be @ref nil::marshalling::types::array_list of raw data -/// (see @ref nil::marshalling::protocol::MsgDataLayer::field_type). It would be wise to provide +/// caching transport fields (by using @ref nil::crypto3::marshalling::protocol::MsgDataLayer::read_fields_cached()) +/// The payload field is defined to be @ref nil::crypto3::marshalling::types::array_list of raw data +/// (see @ref nil::crypto3::marshalling::protocol::MsgDataLayer::field_type). It would be wise to provide /// a way to supply extra options to choose storage type for this field, /// when defining protocol stack. As the result the definition becomes: /// @code -/// template -/// using MyMsgData = nil::marshalling::protocol::MsgDataLayer; +/// template +/// using MyMsgData = nil::crypto3::marshalling::protocol::MsgDataLayer; /// @endcode /// /// @section page_prot_stack_tutorial_id ID Layer /// The @b ID layer is responsible to process the ID of the message /// and based on this ID, create proper message object. The Marshalling library implements -/// this functionality in nil::marshalling::protocol::MsgIdLayer class. It receives +/// this functionality in nil::crypto3::marshalling::protocol::MsgIdLayer class. It receives /// at least four template parameters. The first one is a type of the /// field that can be used to read/write the ID information. The @ref /// page_define_prot_interface section described @b my_protocol::msg_id enum @@ -92,10 +92,10 @@ /// /// enum msg_id : std::uint8_t {...} // enum described earlier /// -/// using MyFieldBase = nil::marshalling::field_type; // Use big endian for all fields serialization +/// using MyFieldBase = nil::crypto3::marshalling::field_type; // Use big endian for all fields serialization /// /// using MsgIdField = -/// nil::marshalling::types::EnumValue< +/// nil::crypto3::marshalling::types::EnumValue< /// MyFieldBase, /// msg_id // enum type /// >; @@ -132,10 +132,10 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyMsgId = -/// nil::marshalling::protocol::MsgIdLayer< +/// nil::crypto3::marshalling::protocol::MsgIdLayer< /// MsgIdField, /// TMessage, /// TInputMessages, @@ -152,30 +152,30 @@ /// try to read all the messages with the found ID one by one in /// order of their definition until success is reported. /// -/// The nil::marshalling::protocol::MsgIdLayer defines @b msg_ptr_type -/// (see nil::marshalling::protocol::MsgIdLayer::msg_ptr_type) internal type, which is +/// The nil::crypto3::marshalling::protocol::MsgIdLayer defines @b msg_ptr_type +/// (see nil::crypto3::marshalling::protocol::MsgIdLayer::msg_ptr_type) internal type, which is /// smart pointer (@b std::unique_ptr) to the input message interface /// class (@b TMessage) provided as second template parameter. /// -/// During the normal @b read operation, the nil::marshalling::protocol::MsgIdLayer will +/// During the normal @b read operation, the nil::crypto3::marshalling::protocol::MsgIdLayer will /// dynamically allocate the proper message object. /// -/// The nil::marshalling::protocol::MsgIdLayer can also be used in bare metal systems, +/// The nil::crypto3::marshalling::protocol::MsgIdLayer can also be used in bare metal systems, /// that do NOT use dynamic memory allocation. In order to prevent this layer -/// from using dynamic memory allocation, the nil::marshalling::option::in_place_allocation +/// from using dynamic memory allocation, the nil::crypto3::marshalling::option::in_place_allocation /// option needs to be passed as fifth template parameter to the -/// nil::marshalling::protocol::MsgIdLayer class. However, an ability to use this option +/// nil::crypto3::marshalling::protocol::MsgIdLayer class. However, an ability to use this option /// needs to be provided to the application itself only if needed. In order to /// achive that additional template parameter needs to be used. /// @code /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyMsgId = -/// nil::marshalling::protocol::MsgIdLayer< +/// nil::crypto3::marshalling::protocol::MsgIdLayer< /// MsgIdField, /// TMessage, /// TInputMessages, @@ -183,54 +183,54 @@ /// TAllocationOptions /// >; /// @endcode -/// In this case, the nil::marshalling::protocol::MsgIdLayer will statically allocate +/// In this case, the nil::crypto3::marshalling::protocol::MsgIdLayer will statically allocate /// internal buffer in its private data members, big enough to hold any message object /// of any type listed in @b all_messages_type bundle. It means that only one message /// object can be allocated and used at a time, i.e. the previous object must /// be deleted prior to new one being allocated. @n -/// Also, the nil::marshalling::protocol::MsgIdLayer::msg_ptr_type will still be a variant of +/// Also, the nil::crypto3::marshalling::protocol::MsgIdLayer::msg_ptr_type will still be a variant of /// @b std::unique_ptr, but with custom deleter (defined by Marshalling library itself), /// which will make sure the proper destruction of the message object and /// release of the internal buffer for next allocation. In case new allocation /// is attempted when internal buffer is NOT released, the new message will NOT be allocated -/// and read operation will fail with @ref nil::marshalling::ErrorStatus::msg_alloc_failure +/// and read operation will fail with @ref nil::crypto3::marshalling::ErrorStatus::msg_alloc_failure /// error. /// /// By default, if the received data contains unknown message ID (the message /// type is not in @b all_messages_type bundle), the @b read operation returns -/// @ref nil::marshalling::ErrorStatus::invalid_msg_id and no message object is allocated. +/// @ref nil::crypto3::marshalling::ErrorStatus::invalid_msg_id and no message object is allocated. /// However, there are @b bridge / @b gateway / @b firewall type of applications /// which are interested to decode only limited number of messages, but still /// forward the received data (sometimes changing the transport wrapping) /// without actually decoding the contents. In this case the default behaviour -/// cannot be used. The @b Marshalling library provides @ref nil::marshalling::generic_message +/// cannot be used. The @b Marshalling library provides @ref nil::crypto3::marshalling::generic_message /// message definition which has a single variable length data field -/// (defined using @ref nil::marshalling::types::array_list class). The @ref -/// nil::marshalling::protocol::MsgIdLayer may also receive @ref nil::marshalling::option::support_generic_message +/// (defined using @ref nil::crypto3::marshalling::types::array_list class). The @ref +/// nil::crypto3::marshalling::protocol::MsgIdLayer may also receive @ref nil::crypto3::marshalling::option::support_generic_message /// option specifying type of the generic_message. /// In this case, if the appropriate message type hasn't been found in -/// @b all_messages_type bundle, the appropriate @ref nil::marshalling::generic_message object +/// @b all_messages_type bundle, the appropriate @ref nil::crypto3::marshalling::generic_message object /// will be created instead. However, just like with -/// @ref nil::marshalling::option::in_place_allocation, this option should be used by the application +/// @ref nil::crypto3::marshalling::option::in_place_allocation, this option should be used by the application /// if needed. /// -/// Note, that nil::marshalling::option::support_generic_message and nil::marshalling::option::in_place_allocation -/// options can be used together. In this case the @ref nil::marshalling::generic_message +/// Note, that nil::crypto3::marshalling::option::support_generic_message and nil::crypto3::marshalling::option::in_place_allocation +/// options can be used together. In this case the @ref nil::crypto3::marshalling::generic_message /// message object will be allocated in the same allocation area. The client /// application will be able to combine these option together in single tuple /// and use pass as @b TAllocationOptions parameter. /// @code /// using MyAllocOptions = /// std::tuple< -/// nil::marshalling::option::support_generic_message >, -/// nil::marshalling::option::in_place_allocation +/// nil::crypto3::marshalling::option::support_generic_message >, +/// nil::crypto3::marshalling::option::in_place_allocation /// >; /// @endcode -/// When constructed, the nil::marshalling::protocol::MsgIdLayer creates an array of +/// When constructed, the nil::crypto3::marshalling::protocol::MsgIdLayer creates an array of /// statically allocated factory methods, which are responsible to allocate /// right message objects. This array is used as a map of message ID to the /// factory method. The Marshalling library contains inner logic that analyses a tuple of all @b input message -/// types provided to @ref nil::marshalling::protocol::MsgIdLayer. If the IDs of the messages +/// types provided to @ref nil::crypto3::marshalling::protocol::MsgIdLayer. If the IDs of the messages /// are sequential ones starting from a low number such as 0 or 1, and the highest /// ID value do not significantly exceed the total number of message types in the tuple, /// then the one-to-one mapping is generated, i.e. to access the right factory @@ -239,85 +239,85 @@ /// is executed to get appropriate factory method having the numeric message ID /// value (O(log(n))). /// -/// @b NOTE, that nil::marshalling::protocol::MsgIdLayer doesn't use any dynamic memory +/// @b NOTE, that nil::crypto3::marshalling::protocol::MsgIdLayer doesn't use any dynamic memory /// allocation to store internal factory methods, that create proper message /// object given the ID of the message, which makes it possible and safe to /// use in bare-metal environment without any HEAP. /// -/// It may happen that @b nil::marshalling::protocol::MsgIdLayer class as-is is not really +/// It may happen that @b nil::crypto3::marshalling::protocol::MsgIdLayer class as-is is not really /// suitable for implementing message identification and creation of message /// object when implementing custom protocol. /// It is possible to implement a new custom layer (see @ref /// page_prot_stack_tutorial_new_layers section below) with the required /// functionality. However, it is recommended -/// to use @ref nil::marshalling::MsgFactory object internally. It will help in creation the proper +/// to use @ref nil::crypto3::marshalling::MsgFactory object internally. It will help in creation the proper /// message object once the ID value is known. /// /// @section page_prot_stack_tutorial_size SIZE Layer /// The @b SIZE layer is responsible to process information on the remaining /// message length, and forward the @b read/write operations to the upper layer /// in case it is safe to do so. The Marshalling library provides -/// @ref nil::marshalling::protocol::MsgSizeLayer class for that purpose. +/// @ref nil::crypto3::marshalling::protocol::MsgSizeLayer class for that purpose. /// @code /// namespace my_protocol /// { /// /// using RemSizeField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, -/// nil::marshalling::option::num_value_ser_offset +/// nil::crypto3::marshalling::option::num_value_ser_offset /// >; /// /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyMsgSize = -/// nil::marshalling::protocol::MsgSizeLayer< +/// nil::crypto3::marshalling::protocol::MsgSizeLayer< /// RemSizeField, /// MyMsgId /// >; /// /// } // namespace my_protocol /// @endcode -/// The @ref nil::marshalling::protocol::MsgSizeLayer receives two template parameters. The first +/// The @ref nil::crypto3::marshalling::protocol::MsgSizeLayer receives two template parameters. The first /// one is the definition of the @b field (see @ref page_field_tutorial for detail) /// that is responsible to read/write the remaining length information. The /// second template parameter is an upper layer that is being wrapped. @n -/// Please note the usage of @b nil::marshalling::option::num_value_ser_offset option when +/// Please note the usage of @b nil::crypto3::marshalling::option::num_value_ser_offset option when /// defining the @b field type. If it is NOT used, the serialized length value /// will cover only @b ID and @b PAYLOAD (layers it wraps). However, according to the protocol /// specification, the @b SIZE value must also include @b CHECKSUM. Usage of -/// nil::marshalling::option::num_value_ser_offset will add 2 +/// nil::crypto3::marshalling::option::num_value_ser_offset will add 2 /// (@b sizeof(std::uint16_t)) when serialising the length of wrapped fields. /// See also @ref sec_field_tutorial_int_value_ser_offset for more detail. /// /// @section page_prot_stack_tutorial_checksum CHECKSUM Layer /// The @b CHECKSUM layer is responsible to calculate and verify the checksum /// on the data read and/or written by the upper layers it wraps. -/// The Marshalling library provides nil::marshalling::protocol::ChecksumLayer and -/// nil::marshalling::protocol::ChecksumPrefixLayer for this purpose. They are very similar. -/// The only difference is that nil::marshalling::protocol::ChecksumLayer appends the -/// checksum value, while nil::marshalling::protocol::ChecksumPrefixLayer prepends it. +/// The Marshalling library provides nil::crypto3::marshalling::protocol::ChecksumLayer and +/// nil::crypto3::marshalling::protocol::ChecksumPrefixLayer for this purpose. They are very similar. +/// The only difference is that nil::crypto3::marshalling::protocol::ChecksumLayer appends the +/// checksum value, while nil::crypto3::marshalling::protocol::ChecksumPrefixLayer prepends it. /// @code /// namespace my_protocol /// { /// -/// using ChecksumField = nil::marshalling::types::IntValue; +/// using ChecksumField = nil::crypto3::marshalling::types::IntValue; /// /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyChecksum = -/// nil::marshalling::protocol::ChecksumLayer< +/// nil::crypto3::marshalling::protocol::ChecksumLayer< /// ChecksumField, -/// nil::marshalling::protocol::checksum::crc_ccitt +/// nil::crypto3::marshalling::protocol::checksum::crc_ccitt /// MyMsgSize /// >; /// @@ -328,21 +328,21 @@ /// /// The second template parameter is a checksum calculator class which is used /// to calculate a checksum value. Please refer to the documentation of -/// @ref nil::marshalling::protocol::ChecksumLayer or @ref nil::marshalling::protocol::ChecksumPrefixLayer class +/// @ref nil::crypto3::marshalling::protocol::ChecksumLayer or @ref nil::crypto3::marshalling::protocol::ChecksumPrefixLayer class /// for the detail on the interface this /// checksum calculator class must provide. The example above uses -/// @ref nil::marshalling::protocol::checksum::crc_ccitt, which calculates the the standard +/// @ref nil::crypto3::marshalling::protocol::checksum::crc_ccitt, which calculates the the standard /// CRC-CCITT value. All the checksum calculators the Marshalling library provides reside -/// in nil::marshalling::protocol::checksum namespace. +/// in nil::crypto3::marshalling::protocol::checksum namespace. /// /// The third template parameter is an upper layer that is being wrapped. /// -/// By default both @ref nil::marshalling::protocol::ChecksumLayer and -/// @ref nil::marshalling::protocol::ChecksumPrefixLayer allow inner (upper) layers to +/// By default both @ref nil::crypto3::marshalling::protocol::ChecksumLayer and +/// @ref nil::crypto3::marshalling::protocol::ChecksumPrefixLayer allow inner (upper) layers to /// complete their read operation before calculating and verifying checksum on /// read data. However, there may be protocols that may allow checksum verification /// before attempting to read message contents. In this case -/// @ref nil::marshalling::option::checksum_layer_verify_before_read option may be used as +/// @ref nil::crypto3::marshalling::option::checksum_layer_verify_before_read option may be used as /// fourth template parameter. /// @code /// namespace my_protocol @@ -350,15 +350,15 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyChecksum = -/// nil::marshalling::protocol::ChecksumLayer< +/// nil::crypto3::marshalling::protocol::ChecksumLayer< /// ChecksumField, -/// nil::marshalling::protocol::checksum::crc_ccitt +/// nil::crypto3::marshalling::protocol::checksum::crc_ccitt /// MyMsgSize, -/// nil::marshalling::option::checksum_layer_verify_before_read +/// nil::crypto3::marshalling::option::checksum_layer_verify_before_read /// >; /// /// @endcode @@ -366,38 +366,38 @@ /// @section page_prot_stack_tutorial_sync SYNC Layer /// The @b SYNC layer is responsible to recognise the synchronisation byte(s) /// in the input stream as well as write appropriate value when the write -/// operation takes place. The Marshalling library provides @ref nil::marshalling::protocol::SyncPrefixLayer +/// operation takes place. The Marshalling library provides @ref nil::crypto3::marshalling::protocol::SyncPrefixLayer /// class that helps with this task. /// @code /// namespace my_protocol /// { /// /// using SyncField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, -/// nil::marshalling::option::default_num_value<0xabcd>, -/// nil::marshalling::option::ValidNumValue<0xabcd>, -/// nil::marshalling::option::fail_on_invalid // fail read operation if read value is invalid +/// nil::crypto3::marshalling::option::default_num_value<0xabcd>, +/// nil::crypto3::marshalling::option::ValidNumValue<0xabcd>, +/// nil::crypto3::marshalling::option::fail_on_invalid // fail read operation if read value is invalid /// >; /// /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MySyncPrefix = -/// nil::marshalling::protocol::SyncPrefixLayer< +/// nil::crypto3::marshalling::protocol::SyncPrefixLayer< /// SyncField, /// MyChecksum /// >; /// /// } // namespace my_protocol /// @endcode -/// The nil::marshalling::protocol::SyncPrefixLayer class receives two template parameters. +/// The nil::crypto3::marshalling::protocol::SyncPrefixLayer class receives two template parameters. /// The first one is the type of the @b field, that is responsible to read/write -/// the synchronisation byte(s). Please note the usage of nil::marshalling::option::default_num_value +/// the synchronisation byte(s). Please note the usage of nil::crypto3::marshalling::option::default_num_value /// option when defining the @b field type. It insures that the default constructed /// field will have the required value. @n /// The second template parameter is the upper layer being wrapped. @@ -414,39 +414,39 @@ /// object may have some extra fields, which were introduced in later version of /// the protocol, and it needs to take into account the provided @b VERSION info. /// -/// The Marshalling library provides @ref nil::marshalling::protocol::TransportValueLayer to handle +/// The Marshalling library provides @ref nil::crypto3::marshalling::protocol::TransportValueLayer to handle /// such fields. @b HOWEVER it requires extra support from common message interface class. -/// The latter must use @ref nil::marshalling::option::extra_transport_fields option in order +/// The latter must use @ref nil::crypto3::marshalling::option::extra_transport_fields option in order /// to define expected interface (please refer to @ref page_define_prot_interface_extra_transport /// for detail). /// -/// The @ref nil::marshalling::protocol::TransportValueLayer class receives three +/// The @ref nil::crypto3::marshalling::protocol::TransportValueLayer class receives three /// template parameters. The first one is the field used to read / write the /// value. The second parameter is index of the relevant extra transport field -/// in the @ref nil::marshalling::Message::transport_fields_type tuple. And the third parameter +/// in the @ref nil::crypto3::marshalling::Message::transport_fields_type tuple. And the third parameter /// is the next layer. /// /// The whole protocol stack definition may look like this: /// @code /// // Base class of all the fields -/// using MyFieldBase = nil::marshalling::field_type; +/// using MyFieldBase = nil::crypto3::marshalling::field_type; /// /// // field_type describing protocol version. -/// using MyVersionField = nil::marshalling::types::IntValue; +/// using MyVersionField = nil::crypto3::marshalling::types::IntValue; /// /// // Payload control layer /// template < -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > -/// using MyMsgData = nil::marshalling::protocol::MsgDataLayer; +/// using MyMsgData = nil::crypto3::marshalling::protocol::MsgDataLayer; /// /// // Version control layer /// template < /// typename TMessage, // common interface class defined by the application -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyVersion = -/// nil::marshalling::protocol::TransportValueLayer< +/// nil::crypto3::marshalling::protocol::TransportValueLayer< /// MyVersionField, /// TMessage::TransportFieldIdx_version, /// MyMsgData @@ -456,11 +456,11 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyMsgId = -/// nil::marshalling::protocol::MsgIdLayer< +/// nil::crypto3::marshalling::protocol::MsgIdLayer< /// MsgIdField, /// TMessage, /// TInputMessages, @@ -472,11 +472,11 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyMsgSize = -/// nil::marshalling::protocol::MsgSizeLayer< +/// nil::crypto3::marshalling::protocol::MsgSizeLayer< /// RemSizeField, /// MyMsgId /// >; @@ -494,11 +494,11 @@ /// update created message object (if necessary) before /// the read operation is forwarded to the final (PAYLOAD) layer. /// -/// Unfortunatelly there are layers (@ref nil::marshalling::protocol::ChecksumLayer, -/// @ref nil::marshalling::protocol::ChecksumPrefixLayer, and @ref nil::marshalling::protocol::MsgSizeLayer), +/// Unfortunatelly there are layers (@ref nil::crypto3::marshalling::protocol::ChecksumLayer, +/// @ref nil::crypto3::marshalling::protocol::ChecksumPrefixLayer, and @ref nil::crypto3::marshalling::protocol::MsgSizeLayer), /// that cannot complete their read operation, without read of the PAYLOAD data /// being complete as well. As the result these layers do not support being wrapped by -/// @ref nil::marshalling::protocol::TransportValueLayer and will fail compilation with +/// @ref nil::crypto3::marshalling::protocol::TransportValueLayer and will fail compilation with /// static assert if such wrapping is attempted. /// /// @section page_prot_stack_tutorial_pseudo_transport_value Pseudo Transport Values @@ -506,26 +506,26 @@ /// one of the messages used to establish connection. After that, the reported /// value may have influence on how other message contents are being read. Handling /// such case is very similar to @ref page_prot_stack_tutorial_transport_value. -/// The only difference is passing @ref nil::marshalling::option::pseudo_value option to -/// @ref nil::marshalling::protocol::TransportValueLayer layer class. It will cause the +/// The only difference is passing @ref nil::crypto3::marshalling::option::pseudo_value option to +/// @ref nil::crypto3::marshalling::protocol::TransportValueLayer layer class. It will cause the /// transport value not actually being (de)serialized during @b read / @b write /// operations. The pseudo field value is going to be stored as private member -/// of @ref nil::marshalling::protocol::TransportValueLayer and can be accessed (and updated) using -/// @ref nil::marshalling::protocol::TransportValueLayer::pseudo_field() member function(s). -/// During the @b read operation the nil::marshalling::protocol::TransportValueLayer behaves +/// of @ref nil::crypto3::marshalling::protocol::TransportValueLayer and can be accessed (and updated) using +/// @ref nil::crypto3::marshalling::protocol::TransportValueLayer::pseudo_field() member function(s). +/// During the @b read operation the nil::crypto3::marshalling::protocol::TransportValueLayer behaves /// as if the value stored in this field was actually read. /// @code /// // Version control layer /// template < /// typename TMessage, // common interface class defined by the application -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using MyVersion = -/// nil::marshalling::protocol::TransportValueLayer< +/// nil::crypto3::marshalling::protocol::TransportValueLayer< /// MyVersionField, /// TMessage::TransportFieldIdx_version, /// MyMsgData, -/// nil::marshalling::option::pseudo_value +/// nil::crypto3::marshalling::option::pseudo_value /// >; /// @endcode /// @@ -540,22 +540,22 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// using ProtocolStack = MySyncPrefix ; /// @endcode /// Every protocol layer provides an ability to access the next one using /// @b next_layer() member function -/// (see @ref nil::marshalling::protocol::ProtocolLayerBase::next_layer()). It is strongly +/// (see @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::next_layer()). It is strongly /// recommended to generate convenience access functions using /// @ref MARSHALLING_PROTOCOL_LAYERS_ACCESS() macro. /// @code /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// struct ProtocolStack : public /// MySyncPrefix @@ -568,8 +568,8 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// struct ProtocolStack : public /// MySyncPrefix @@ -622,8 +622,8 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// class ProtocolStack : public /// MySyncPrefix @@ -642,8 +642,8 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// class ProtocolStack : public /// MySyncPrefix @@ -661,13 +661,13 @@ /// provide all the necessary layer classes required to implement custom logic /// of the protocol. The Marshalling library allows implementation and usage of /// custom layers as long as it defines the required types and implements required -/// functions. It is strongly recommended to inherit from nil::marshalling::protocol::ProtocolLayerBase +/// functions. It is strongly recommended to inherit from nil::crypto3::marshalling::protocol::ProtocolLayerBase /// and implement missing functionality /// @code /// // Must receive the next layer type as template parameter /// template /// class MyLayer : public -/// nil::marshalling::protocol::ProtocolLayerBase< +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase< /// TField, /// TNextLayer, /// MyLayer @@ -676,7 +676,7 @@ /// public: /// // Implement read /// template -/// nil::marshalling::ErrorStatus do_read( +/// nil::crypto3::marshalling::ErrorStatus do_read( /// field_type& field, /// TMsg& msg, // can be either smart pointer (ProtocolStack::msg_ptr_type) or message object itself /// TIter& iter, @@ -686,7 +686,7 @@ /// { /// // read the field's value /// auto es = field.read(iter, size); -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// return es; /// } /// @@ -698,7 +698,7 @@ /// /// // Implement write /// template -/// nil::marshalling::ErrorStatus do_write( +/// nil::crypto3::marshalling::ErrorStatus do_write( /// field_type& field, /// const TMsg& msg, /// TIter& iter, @@ -710,7 +710,7 @@ /// /// // write the field /// auto es = field.write(iter, size); -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// return es; /// } /// @@ -719,34 +719,34 @@ /// } /// }; /// @endcode -/// Note that the third template parameter to the nil::marshalling::protocol::ProtocolLayerBase +/// Note that the third template parameter to the nil::crypto3::marshalling::protocol::ProtocolLayerBase /// base class is the inheriting class itself. /// -/// The nil::marshalling::protocol::ProtocolLayerBase implements @ref -/// nil::marshalling::protocol::ProtocolLayerBase::read() and @ref -/// nil::marshalling::protocol::ProtocolLayerBase::read_fields_cached() member functions which +/// The nil::crypto3::marshalling::protocol::ProtocolLayerBase implements @ref +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::read() and @ref +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::read_fields_cached() member functions which /// are actual "read" interface, they invoke the @b do_read() member function implemented /// the derived layer class, while providing the "nextLayerReader" object to be /// used to forward the read operation to the next layer. The signature of the /// @b nextLayerReader.read() function is the same as @ref -/// nil::marshalling::protocol::ProtocolLayerBase::read(). @b NOTE, that @b msg parameter +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::read(). @b NOTE, that @b msg parameter /// to the @b do_read() member function can be either reference to a smart pointer -/// (@b ref nil::marshalling::protocol::ProtocolLayerBase::msg_ptr_type) or a reference to the message -/// object (one that extends @b nil::marshalling::MessageBase) itself. If the message object contents +/// (@b ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::msg_ptr_type) or a reference to the message +/// object (one that extends @b nil::crypto3::marshalling::MessageBase) itself. If the message object contents /// needs to be accessed, then it is necessary to know what exactly is passed as /// @b msg parameter to the @b do_read() function. The @ref -/// nil::marshalling::protocol::ProtocolLayerBase::isMessageObjRef() can be used to help in such task +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::isMessageObjRef() can be used to help in such task /// and "tag dispatch idiom" can be used to perform right functionality. /// @code /// // Must receive the next layer type as template parameter /// template -/// class MyLayer : public nil::marshalling::protocol::ProtocolLayerBase<...> +/// class MyLayer : public nil::crypto3::marshalling::protocol::ProtocolLayerBase<...> /// { -/// using Base = nil::marshalling::protocol::ProtocolLayerBase<...>; +/// using Base = nil::crypto3::marshalling::protocol::ProtocolLayerBase<...>; /// public: /// // Implement read /// template -/// nil::marshalling::ErrorStatus do_read( +/// nil::crypto3::marshalling::ErrorStatus do_read( /// field_type& field, /// TMsg& msg, // can be either smart pointer (ProtocolStack::msg_ptr_type) or message object itself /// TIter& iter, @@ -756,7 +756,7 @@ /// { /// // read the field's value /// auto es = field.read(iter, size); -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// return es; /// } /// @@ -791,28 +791,28 @@ /// }; /// @endcode /// -/// In similar way nil::marshalling::protocol::ProtocolLayerBase implements @ref -/// nil::marshalling::protocol::ProtocolLayerBase::write() and @ref -/// nil::marshalling::protocol::ProtocolLayerBase::write_fields_cached() member functions which +/// In similar way nil::crypto3::marshalling::protocol::ProtocolLayerBase implements @ref +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::write() and @ref +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::write_fields_cached() member functions which /// are actual "write" interface, they invoke the @b do_write() member function implemented /// the derived layer class, while providing the "nextLayerWriter" object to be /// used to forward the read operation to the next layer. The signature of the /// @b nextLayerWriter.write() function is the same as @ref -/// nil::marshalling::protocol::ProtocolLayerBase::write(). If the @b do_write() function +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::write(). If the @b do_write() function /// requires modification to the used iterator (moving it back and force), it /// must determine type of the iterators (using @b std::iterator_traits). In case /// the used iterator is @b output one (not @b random-access), then such update /// may be impossible. In this case the @b do_write() function is expected to -/// write some dummy value and return @ref nil::marshalling::ErrorStatus::update_required. +/// write some dummy value and return @ref nil::crypto3::marshalling::ErrorStatus::update_required. /// It will indicate to the client application that invocation of @b update /// functionality with random access iterator needs to follow the @b write operation. /// -/// The nil::marshalling::protocol::ProtocolLayerBase base class defines also "update" -/// interface functions @ref nil::marshalling::protocol::ProtocolLayerBase::update() and -/// @ref nil::marshalling::protocol::ProtocolLayerBase::update_fields_cached(), which in the +/// The nil::crypto3::marshalling::protocol::ProtocolLayerBase base class defines also "update" +/// interface functions @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::update() and +/// @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::update_fields_cached(), which in the /// similar way invoke @b do_update(). However, @ref -/// nil::marshalling::protocol::ProtocolLayerBase class provides a default implementation -/// of @b do_update() (see @ref nil::marshalling::protocol::ProtocolLayerBase::do_update()) +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase class provides a default implementation +/// of @b do_update() (see @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::do_update()) /// member function, which does nothing, just advances the iterator. If there /// is a need for a custom update functionality, please provide it in you /// layer class by implementing the custom version of @b do_update() member function. @@ -820,7 +820,7 @@ /// // Must receive the next layer type as template parameter /// template /// class MyLayer : public -/// nil::marshalling::protocol::ProtocolLayerBase< +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase< /// TField, /// TNextLayer, /// MyLayer @@ -829,7 +829,7 @@ /// public: /// ... /// template -/// nil::marshalling::ErrorStatus do_update( +/// nil::crypto3::marshalling::ErrorStatus do_update( /// field_type& field, /// TIter& iter, /// std::size_t size, @@ -838,7 +838,7 @@ /// // Update field with the new value and rewrite it to the output buffer /// field.value() = ...; /// auto es = field.write(iter, size); -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// return es; /// } /// @@ -849,16 +849,16 @@ /// @endcode /// The signature of the /// @b nextLayerUpdater.update() function is the same as @ref -/// nil::marshalling::protocol::ProtocolLayerBase::update(). +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase::update(). /// -/// If the new layer being implemented is similar to @ref nil::marshalling::protocol::MsgIdLayer, +/// If the new layer being implemented is similar to @ref nil::crypto3::marshalling::protocol::MsgIdLayer, /// i.e. creates message objects when id of the message is known, then it must -/// also override (hide) the inherited @ref nil::marshalling::protocol::ProtocolLayerBase::create_msg() +/// also override (hide) the inherited @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::create_msg() /// and implement its own version: /// @code /// template /// class MyLayer : public -/// nil::marshalling::protocol::ProtocolLayerBase< +/// nil::crypto3::marshalling::protocol::ProtocolLayerBase< /// TField, /// TNextLayer, /// MyLayer diff --git a/crypto3/libs/marshalling/core/docs/page_use_prot.dox b/crypto3/libs/marshalling/core/docs/page_use_prot.dox index bc02d4298b..47c72794e3 100644 --- a/crypto3/libs/marshalling/core/docs/page_use_prot.dox +++ b/crypto3/libs/marshalling/core/docs/page_use_prot.dox @@ -21,13 +21,13 @@ /// to run a script after library installation to replace /// the following strings with new name: /// @li "namespace marshalling" - replace with "namespace marshalling2" -/// @li @b "nil::marshalling::" - replace with "marshalling2::" +/// @li @b "nil::crypto3::marshalling::" - replace with "marshalling2::" /// @li @b "marshalling/" - replace with "marshalling2/" /// /// @section page_use_prot_error_handling Error Handling /// The Marshalling library is intended to be used in embedded systems (including /// bare metal), which means the library does not use exceptions to report errors. -/// The runtime errors are reported via @ref nil::marshalling::ErrorStatus return values. All +/// The runtime errors are reported via @ref nil::crypto3::marshalling::ErrorStatus return values. All /// pre- and post-conditions are checked using MARSHALLING_ASSERT() macro. /// It is, just like regular standard @b assert(), is compiled in if @b NDEBUG symbol /// is not defined. In case the provided condition doesn't hold true, the macro @@ -59,9 +59,9 @@ /// /// template /// using Message = -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, // endian -/// nil::marshalling::option::msg_id_type, // type of message ID +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, // endian +/// nil::crypto3::marshalling::option::msg_id_type, // type of message ID /// TOptions... /// >; /// @@ -72,13 +72,13 @@ /// namespace my_protocol /// { /// -/// class Message : public nil::marshalling::Message -/// // nil::marshalling::field_type class with the same endian option. +/// class Message : public nil::crypto3::marshalling::Message +/// // nil::crypto3::marshalling::field_type class with the same endian option. /// // Can (and should) be provided as a base class to all the /// // fields. -/// typedef nil::marshalling::field_type<.../* Same endian option*/> field_type; +/// typedef nil::crypto3::marshalling::field_type<.../* Same endian option*/> field_type; /// -/// // type of the ID, same as the one passed with nil::marshalling::option::msg_id_type +/// // type of the ID, same as the one passed with nil::crypto3::marshalling::option::msg_id_type /// typedef msg_id msg_id_type; /// /// // type of the ID, when it is passed as a parameter and/or returned from the function: @@ -120,20 +120,20 @@ /// the same name, but with @b Impl suffix. /// /// All the variants of message interface class that are going to be described -/// below are descendants of @ref nil::marshalling::Message class. Please refer to the +/// below are descendants of @ref nil::crypto3::marshalling::Message class. Please refer to the /// documentation of the latter for detailed info on the described functions and /// their parameters. /// /// @subsection page_use_prot_interface_id_retrieve Polymorphic Retrieval of Message ID /// When there is a need to be able to polymorphically retrieve message ID, -/// the nil::marshalling::option::id_info_interface option needs to be used. Note, that this -/// option requires presence of @ref nil::marshalling::option::msg_id_type (which is expected to +/// the nil::crypto3::marshalling::option::id_info_interface option needs to be used. Note, that this +/// option requires presence of @ref nil::crypto3::marshalling::option::msg_id_type (which is expected to /// be used in protocol definition) to specify type /// of the message ID in order to work properly. /// @code /// using MyMessage = /// my_protocol::Message< -/// nil::marshalling::option::id_info_interface, +/// nil::crypto3::marshalling::option::id_info_interface, /// ... /// >; /// @endcode @@ -152,26 +152,26 @@ /// virtual msg_id_param_type get_id_impl() const = 0; // Automatically implemented in the actual message class /// } /// @endcode -/// The usage of nil::marshalling::option::id_info_interface without nil::marshalling::option::msg_id_type +/// The usage of nil::crypto3::marshalling::option::id_info_interface without nil::crypto3::marshalling::option::msg_id_type /// will be ignored, and @b get_id() as well as @b get_id_impl() member functions /// won't be created. /// -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_get_id() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_get_id() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::id_info_interface option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::id_info_interface option has been used, i.e. /// the message interface class defines mentioned earlier /// functions. /// /// @subsection page_use_prot_interface_read Polymorphic Read of Payload (Deserialization) /// If the implementation requires polymorphic read and process of input messages, the @b read() /// operation needs to be added to the interface. It is achieved by using -/// @ref nil::marshalling::option::read_iterator option to provide a type of the iterator that +/// @ref nil::crypto3::marshalling::option::read_iterator option to provide a type of the iterator that /// is going to be used for reading: /// @code /// using MyMessage = /// my_protocol::Message< /// ... -/// nil::marshalling::option::read_iterator, +/// nil::crypto3::marshalling::option::read_iterator, /// ... /// >; /// @endcode @@ -181,20 +181,20 @@ /// { /// public: /// // type of the the iterator used for reading, the same as provided with -/// // nil::marshalling::option::read_iterator option. +/// // nil::crypto3::marshalling::option::read_iterator option. /// typedef ... read_iterator; /// /// // API function to perform read -/// nil::marshalling::ErrorStatus read(read_iterator& iter, std::size_t len) +/// nil::crypto3::marshalling::ErrorStatus read(read_iterator& iter, std::size_t len) /// { /// return readImpl(iter, len); /// } /// /// protected: /// // Expected to be overriden in the derived class. -/// virtual nil::marshalling::ErrorStatus readImpl(read_iterator& iter, std::size_t len) +/// virtual nil::crypto3::marshalling::ErrorStatus readImpl(read_iterator& iter, std::size_t len) /// { -/// return nil::marshalling::ErrorStatus::not_supported; +/// return nil::crypto3::marshalling::ErrorStatus::not_supported; /// } /// } /// @endcode @@ -210,7 +210,7 @@ /// { /// MyMessage::read_iterator readIter = buf; /// auto es = msg->read(readIter, len); // readIter is advanced in the read operation -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// ... // Report and handle error /// return 0U; /// } @@ -220,22 +220,22 @@ /// return bytesCount; /// } /// @endcode -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_read() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_read() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::read_iterator option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::read_iterator option has been used, i.e. /// the message interface class defines mentioned earlier /// types and functions. /// /// @subsection page_use_prot_interface_write Polymorphic Write of Payload (Serialisation) /// If the implementation requires polymorphic serialization of the messages and sending them over I/O /// link, the @b write() operation needs to be added to the interface. It is -/// achieved by using nil::marshalling::option::write_iterator option to provide a type of +/// achieved by using nil::crypto3::marshalling::option::write_iterator option to provide a type of /// the iterator that is going to be used for writing: /// @code /// using MyMessage = /// my_protocol::Message< /// ... -/// nil::marshalling::option::write_iterator > >, +/// nil::crypto3::marshalling::option::write_iterator > >, /// ... /// >; /// @endcode @@ -245,20 +245,20 @@ /// { /// public: /// // type of the the iterator used for writing, the same as provided with -/// // nil::marshalling::option::write_iterator option. +/// // nil::crypto3::marshalling::option::write_iterator option. /// typedef ... write_iterator; /// /// // API function to perform write -/// nil::marshalling::ErrorStatus write(write_iterator& iter, std::size_t len) +/// nil::crypto3::marshalling::ErrorStatus write(write_iterator& iter, std::size_t len) /// { /// return write_impl(iter, len); /// } /// /// protected: /// // Expected to be overriden in the derived class. -/// virtual nil::marshalling::ErrorStatus write_impl(write_iterator& iter, std::size_t len) +/// virtual nil::crypto3::marshalling::ErrorStatus write_impl(write_iterator& iter, std::size_t len) /// { -/// return nil::marshalling::ErrorStatus::not_supported; +/// return nil::crypto3::marshalling::ErrorStatus::not_supported; /// } /// } /// @endcode @@ -272,22 +272,22 @@ /// Also @b note, that iterator is passed by reference, which allows advancing /// operator when write operation is performed. /// -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_write() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_write() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::write_iterator option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::write_iterator option has been used, i.e. /// the message interface class defines mentioned earlier /// types and functions. /// /// @subsection page_use_prot_interface_length Polymorphic Serialisation length Retrieval /// Sometimes it may be needed to polymorphically retrieve the serialization length of the message /// in order to be able to reserve or allocate enough space for output buffer. -/// The Marshalling library provides nil::marshalling::option::length_info_interface option that +/// The Marshalling library provides nil::crypto3::marshalling::option::length_info_interface option that /// adds @b length() member function to the interface. /// @code /// using MyMessage = /// my_protocol::Message< /// ... -/// nil::marshalling::option::length_info_interface, +/// nil::crypto3::marshalling::option::length_info_interface, /// ... /// >; /// @endcode @@ -306,21 +306,21 @@ /// virtual std::size_t length_impl() const = 0; // Implemented in the derived class /// }; /// @endcode -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_length() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_length() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::length_info_interface option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::length_info_interface option has been used, i.e. /// the message interface class defines mentioned earlier /// functions. /// /// @subsection page_use_prot_interface_valid Polymorphic Validity Check /// Sometimes it may be needed to be able to check whether the message contents -/// (fields) have valid values. The Marshalling library provides nil::marshalling::option::valid_check_interface +/// (fields) have valid values. The Marshalling library provides nil::crypto3::marshalling::option::valid_check_interface /// option that adds @b valid() member function to the interface: /// @code /// using MyMessage = /// my_protocol::Message< /// ... -/// nil::marshalling::option::valid_check_interface, +/// nil::crypto3::marshalling::option::valid_check_interface, /// ... /// >; /// @endcode @@ -342,9 +342,9 @@ /// } /// }; /// @endcode -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_valid() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_valid() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::valid_check_interface option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::valid_check_interface option has been used, i.e. /// the message interface class defines mentioned earlier /// functions. /// @@ -360,7 +360,7 @@ /// to dispatch messages to appropriate handler. /// /// The handler class needs to be forward declared and passed -/// to the definition of @b MyMessage interface via nil::marshalling::option::handler option. +/// to the definition of @b MyMessage interface via nil::crypto3::marshalling::option::handler option. /// @code /// // Forward declaration /// class MyHandler; @@ -368,7 +368,7 @@ /// using MyHandler = /// my_protocol::Message< /// ... -/// nil::marshalling::option::handler, +/// nil::crypto3::marshalling::option::handler, /// ... /// >; /// @endcode @@ -378,7 +378,7 @@ /// class MyMessage /// { /// public: -/// // The same type as passed via nil::marshalling::option::handler option +/// // The same type as passed via nil::crypto3::marshalling::option::handler option /// typedef ... handler; /// /// // Return type of the dispatch function, which is the same as return type of @@ -398,9 +398,9 @@ /// More detail about polymorphic dispatching and handling will be provided /// below in @ref page_use_prot_handling section. /// -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_dispatch() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_dispatch() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::handler option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::handler option has been used, i.e. /// the message interface class defines mentioned earlier /// types and functions. /// @@ -412,13 +412,13 @@ /// After updating such fields directly, using the interface of the message object, /// the message contents may end up being in an inconsistent (or invalid) state. /// There may be a need to polymorphically normalise the state of the message object. The -/// Marshalling library provides nil::marshalling::option::refresh_interface option, that adds +/// Marshalling library provides nil::crypto3::marshalling::option::refresh_interface option, that adds /// @b refresh() member function to the message interface. /// @code /// using MyMessage = -/// nil::marshalling::Message< +/// nil::crypto3::marshalling::Message< /// ... -/// nil::marshalling::option::refresh_interface, +/// nil::crypto3::marshalling::option::refresh_interface, /// ... /// >; /// @endcode @@ -447,22 +447,22 @@ /// virtual function. The message object that require proper "refresh" functionality /// may just override it with proper implementation. /// -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_refresh() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_refresh() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::refresh_interface option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::refresh_interface option has been used, i.e. /// the message interface class defines mentioned earlier /// functions. /// /// @subsection page_use_prot_interface_name Polymorphic Message Name Retrieval /// Some applications may require knowledge about and report the name of the received / sent -/// message. The @b Marshalling library provides @ref nil::marshalling::option::name_interface +/// message. The @b Marshalling library provides @ref nil::crypto3::marshalling::option::name_interface /// option, that adds @b name() member function to the message interface -/// (see @ref nil::marshalling::Message::name()). +/// (see @ref nil::crypto3::marshalling::Message::name()). /// @code /// using MyMessage = -/// nil::marshalling::Message< +/// nil::crypto3::marshalling::Message< /// ... -/// nil::marshalling::option::name_interface, +/// nil::crypto3::marshalling::option::name_interface, /// ... /// >; /// @endcode @@ -481,27 +481,27 @@ /// virtual const char* name_impl() const = 0; /// }; /// @endcode -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_name() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_name() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::name_interface option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::name_interface option has been used, i.e. /// the message interface class defines mentioned earlier /// functions. /// /// @subsection page_use_prot_interface_virt_destructor Virtual Destructor -/// By default the @ref nil::marshalling::Message class defines its +/// By default the @ref nil::crypto3::marshalling::Message class defines its /// destructor as @b virtual if and only if it exhibits a polymorphic behaviour, /// i.e. if there is at least one other virtual function defined. There are a couple of /// ways to change this default behaviour. /// @li If the definition of the common message interface class using /// exhibits polymorphic /// behaviour (i.e. has other virtual functions), but mustn't define its -/// destructor as @b virtual, use @ref nil::marshalling::option::no_virtual_destructor +/// destructor as @b virtual, use @ref nil::crypto3::marshalling::option::no_virtual_destructor /// option in the interface class definition. /// @code /// using MyMessage = /// my_protocol::Message< /// ..., -/// nil::marshalling::option::no_virtual_destructor +/// nil::crypto3::marshalling::option::no_virtual_destructor /// >; /// @endcode /// @li If the definition of the common interface class @@ -523,14 +523,14 @@ /// priority over (or overrides) the same option defined later. @n /// For example, the definition below defines @b write_iterator to be /// std::uint8_t*, because it was defined with first -/// nil::marshalling::option::write_iterator option: +/// nil::crypto3::marshalling::option::write_iterator option: /// @code /// using MyMessage = /// my_protocol::Message< /// ... -/// nil::marshalling::option::write_iterator, +/// nil::crypto3::marshalling::option::write_iterator, /// ... -/// nil::marshalling::option::write_iterator >, +/// nil::crypto3::marshalling::option::write_iterator >, /// ... /// >; /// @endcode @@ -539,14 +539,14 @@ /// @b length(), @b valid(), @b refresh(), and @b name(). /// @code /// using MyMessage = my_protocol::Message< -/// nil::marshalling::option::id_info_interface, // Add an ability to retrieve message ID value -/// nil::marshalling::option::read_iterator, // Use const std::uint8_t* as iterator for reading -/// nil::marshalling::option::write_iterator, // Use std::uint8_t* as iterator for writing -/// nil::marshalling::option::handler, // My MyHandler class declared earlier as a handler for messages -/// nil::marshalling::option::length_info_interface, // Add an ability to retrieve serialization length -/// nil::marshalling::option::valid_check_interface, // Add an ability to check contents validity -/// nil::marshalling::option::refresh_interface, // Add an ability to refresh message contents -/// nil::marshalling::option::name_interface // Add an ability to retrieve message name +/// nil::crypto3::marshalling::option::id_info_interface, // Add an ability to retrieve message ID value +/// nil::crypto3::marshalling::option::read_iterator, // Use const std::uint8_t* as iterator for reading +/// nil::crypto3::marshalling::option::write_iterator, // Use std::uint8_t* as iterator for writing +/// nil::crypto3::marshalling::option::handler, // My MyHandler class declared earlier as a handler for messages +/// nil::crypto3::marshalling::option::length_info_interface, // Add an ability to retrieve serialization length +/// nil::crypto3::marshalling::option::valid_check_interface, // Add an ability to check contents validity +/// nil::crypto3::marshalling::option::refresh_interface, // Add an ability to refresh message contents +/// nil::crypto3::marshalling::option::name_interface // Add an ability to retrieve message name /// >; /// @endcode /// @@ -563,7 +563,7 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, /// ... /// > @@ -577,26 +577,26 @@ /// @endcode /// The interface class that was defined for the application (@b MyMessage) needs /// to be passed as @b TBase template parameter. The defined message class -/// extends @ref nil::marshalling::MessageBase, which in turn extends provided interface -/// class @b TBase, which in turn extends @ref nil::marshalling::Message. The inheritence +/// extends @ref nil::crypto3::marshalling::MessageBase, which in turn extends provided interface +/// class @b TBase, which in turn extends @ref nil::crypto3::marshalling::Message. The inheritence /// hierarchy may look like this: /// @diafile message_class_hierarchy.dia /// -/// Due to the fact that every protocol message class extends @ref nil::marshalling::MessageBase, +/// Due to the fact that every protocol message class extends @ref nil::crypto3::marshalling::MessageBase, /// the detailed documentation on available member types and functions -/// can be viewed on @ref nil::marshalling::MessageBase reference page. +/// can be viewed on @ref nil::crypto3::marshalling::MessageBase reference page. /// /// All the protocol message classes implement non-virtual functions that may be /// used to implement polymorphic behavior. These function has the same name as /// described earlier interface, but start with @b do* prefix. /// -/// @li @b do_read() - implements message read functionality (see @ref nil::marshalling::MessageBase::do_read()) -/// @li @b do_write() - implements message write functionality (see @ref nil::marshalling::MessageBase::do_write()) -/// @li @b do_length() - implements message serialization length calculation (see @ref nil::marshalling::MessageBase::do_length()) -/// @li @b do_valid() - implements message contents validity check (see @ref nil::marshalling::MessageBase::do_valid()) -/// @li @b do_refresh() - implements bringing message to a consistent state (see @ref nil::marshalling::MessageBase::do_refresh()) +/// @li @b do_read() - implements message read functionality (see @ref nil::crypto3::marshalling::MessageBase::do_read()) +/// @li @b do_write() - implements message write functionality (see @ref nil::crypto3::marshalling::MessageBase::do_write()) +/// @li @b do_length() - implements message serialization length calculation (see @ref nil::crypto3::marshalling::MessageBase::do_length()) +/// @li @b do_valid() - implements message contents validity check (see @ref nil::crypto3::marshalling::MessageBase::do_valid()) +/// @li @b do_refresh() - implements bringing message to a consistent state (see @ref nil::crypto3::marshalling::MessageBase::do_refresh()) /// -/// Based on the requested polymorphic functionality, the @b nil::marshalling::MessageBase +/// Based on the requested polymorphic functionality, the @b nil::crypto3::marshalling::MessageBase /// class automatically implements virtual @b *Impl() member functions (but only when needed). /// @code /// namespace my_protocol @@ -607,26 +607,26 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, /// ... /// > /// { /// public: /// template -/// nil::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) {...} +/// nil::crypto3::marshalling::ErrorStatus do_read(TIter& iter, std::size_t len) {...} /// /// template -/// nil::marshalling::ErrorStatus do_write(TIter& iter, std::size_t len) const {...} +/// nil::crypto3::marshalling::ErrorStatus do_write(TIter& iter, std::size_t len) const {...} /// /// ... /// protected: -/// virtual nil::marshalling::ErrorStatus readImpl(read_iterator& iter, std::size_t len) +/// virtual nil::crypto3::marshalling::ErrorStatus readImpl(read_iterator& iter, std::size_t len) /// { /// return do_read(iter, len); /// } /// -/// virtual nil::marshalling::ErrorStatus write_impl(write_iterator& iter, std::size_t len) const +/// virtual nil::crypto3::marshalling::ErrorStatus write_impl(write_iterator& iter, std::size_t len) const /// { /// return do_write(iter, len); /// } @@ -657,8 +657,8 @@ /// } /// @endcode /// Every message has zero or more fields, which are stored in @b std::tuple -/// as private members of @ref nil::marshalling::MessageBase. The access to the fields -/// can be obtained using @b fields() member function (see @ref nil::marshalling::MessageBase::fields()). +/// as private members of @ref nil::crypto3::marshalling::MessageBase. The access to the fields +/// can be obtained using @b fields() member function (see @ref nil::crypto3::marshalling::MessageBase::fields()). /// /// However, every message that has at least one field is expected to use /// @ref MARSHALLING_MSG_FIELDS_ACCESS() macro to provide names to inner fields. @@ -671,7 +671,7 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, /// ... /// > @@ -695,7 +695,7 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, /// ... /// > @@ -770,14 +770,14 @@ /// In order to continue with the tutorial, it is paramount to understand a /// concept of @b fields, which are abstractions around value storage primitives and/or objects, /// such as integral values, floating point values, strings, arrays, etc.. -/// Every @b field class is defined in @ref nil::marshalling::field namespace and +/// Every @b field class is defined in @ref nil::crypto3::marshalling::field namespace and /// exposes predefined interface in order to /// make template meta-programming as easy as possible. As an example let's -/// take a look at @ref nil::marshalling::types::IntValue class which is used to +/// take a look at @ref nil::crypto3::marshalling::types::IntValue class which is used to /// define integral value field. /// @code /// template -/// class nil::marshalling::types::IntValue : public TBase +/// class nil::crypto3::marshalling::types::IntValue : public TBase /// { /// public: /// // Define inner storage type @@ -789,11 +789,11 @@ /// /// // Read /// template -/// nil::marshalling::ErrorStatus read(TIter& iter, std::size_t len) {...} +/// nil::crypto3::marshalling::ErrorStatus read(TIter& iter, std::size_t len) {...} /// /// // Write /// template -/// nil::marshalling::ErrorStatus write(TIter& iter, std::size_t len) const {...} +/// nil::crypto3::marshalling::ErrorStatus write(TIter& iter, std::size_t len) const {...} /// /// // Serialisation length /// std::size_t length() const {...} @@ -811,12 +811,12 @@ /// The main things to note are that every field definition class: /// @li receives its base class as the first /// template parameter. It is expected to be a variant of @ref -/// nil::marshalling::field_type with @ref nil::marshalling::option::big_endian or @ref -/// nil::marshalling::option::little_endian option to specify the serialization endian. +/// nil::crypto3::marshalling::field_type with @ref nil::crypto3::marshalling::option::big_endian or @ref +/// nil::crypto3::marshalling::option::little_endian option to specify the serialization endian. /// It may be inner @b field_type type of @b MyMessage interface class defined -/// earlier (@b MyMessage::field_type - documented as @ref nil::marshalling::Message::field_type) +/// earlier (@b MyMessage::field_type - documented as @ref nil::crypto3::marshalling::Message::field_type) /// @li exhibits some default behaviour which can be modified by -/// passing various options from @ref nil::marshalling::option namespace as additional template +/// passing various options from @ref nil::crypto3::marshalling::option namespace as additional template /// parameters. The options that define how field is serialized are expected /// to be used as part of protocol definition. The protocol definition is /// also expected to allow passing extra options that are relevant to application @@ -848,28 +848,28 @@ /// message contents and provide other useful functionality. /// /// The available fields abstractions are: -/// @li @ref nil::marshalling::types::IntValue - used to define @ref page_use_prot_fields_int_value -/// @li @ref nil::marshalling::types::EnumValue - used to define @ref page_use_prot_fields_enum_value -/// @li @ref nil::marshalling::types::BitmaskValue - used to define @ref page_use_prot_fields_bitmask_value -/// @li @ref nil::marshalling::types::Bitfield - used to define @ref page_use_prot_fields_bitfield -/// @li @ref nil::marshalling::types::Bundle - used to define @ref page_use_prot_fields_bundle -/// @li @ref nil::marshalling::types::array_list - used to define @ref page_use_prot_fields_array_list -/// @li @ref nil::marshalling::types::String - used to define @ref page_use_prot_fields_string -/// @li @ref nil::marshalling::types::FloatValue - used to define @ref page_use_prot_fields_fp_value -/// @li @ref nil::marshalling::types::Optional - used to define @ref page_use_prot_fields_optional -/// @li @ref nil::marshalling::types::Variant - used to define @ref page_use_prot_fields_variant +/// @li @ref nil::crypto3::marshalling::types::IntValue - used to define @ref page_use_prot_fields_int_value +/// @li @ref nil::crypto3::marshalling::types::EnumValue - used to define @ref page_use_prot_fields_enum_value +/// @li @ref nil::crypto3::marshalling::types::BitmaskValue - used to define @ref page_use_prot_fields_bitmask_value +/// @li @ref nil::crypto3::marshalling::types::Bitfield - used to define @ref page_use_prot_fields_bitfield +/// @li @ref nil::crypto3::marshalling::types::Bundle - used to define @ref page_use_prot_fields_bundle +/// @li @ref nil::crypto3::marshalling::types::array_list - used to define @ref page_use_prot_fields_array_list +/// @li @ref nil::crypto3::marshalling::types::String - used to define @ref page_use_prot_fields_string +/// @li @ref nil::crypto3::marshalling::types::FloatValue - used to define @ref page_use_prot_fields_fp_value +/// @li @ref nil::crypto3::marshalling::types::Optional - used to define @ref page_use_prot_fields_optional +/// @li @ref nil::crypto3::marshalling::types::Variant - used to define @ref page_use_prot_fields_variant /// /// @subsection page_use_prot_fields_int_value Integral value fields_type -/// Integral value fields are defined using @ref nil::marshalling::types::IntValue class. +/// Integral value fields are defined using @ref nil::crypto3::marshalling::types::IntValue class. /// Its inner @b value_type type is the same as second template parameter. Most /// integral value fields are defined and used "as-is" /// @code /// // base class for all the fields, usually defined by the protocol definition library -/// using MyFieldBase = nil::marshalling::field_type +/// using MyFieldBase = nil::crypto3::marshalling::field_type /// /// // definition of integral field /// using MyIntField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, // base class for all the fields, defined by the protocol definition library /// std::uint16_t /// >; @@ -878,18 +878,18 @@ /// MyIntField field; /// field.value() = 5; // serialized as "00 05" /// @endcode -/// Some field's definitions may use @ref nil::marshalling::option::num_value_ser_offset +/// Some field's definitions may use @ref nil::crypto3::marshalling::option::num_value_ser_offset /// option, which adds predefined offset to the field before serialising and /// subtracts it before deserialising. Classic example would be having a "year" /// information, but serialized as offset from year @b 2000 with a single byte. /// Such field may be defined as following: /// @code /// using YearField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::int16_t, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::num_value_ser_offset<-2000> +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::num_value_ser_offset<-2000> /// >; /// @endcode /// @b NOTE, that while serialization takes only 1 byte, the client application @@ -902,18 +902,18 @@ /// integral ones. For example, multiply the floating point value by 1000 before /// the serialization, and upon reception divide the received value by 1000 to /// get the floating point one. Such fields will be defined using @ref -/// nil::marshalling::types::IntValue type with using @ref nil::marshalling::option::scaling_ratio +/// nil::crypto3::marshalling::types::IntValue type with using @ref nil::crypto3::marshalling::option::scaling_ratio /// option /// @code /// using MyFpField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, // base class for all the fields, defined by the protocol definition library /// std::int32_t, -/// nil::marshalling::option::scaling_ratio<1, 1000> +/// nil::crypto3::marshalling::option::scaling_ratio<1, 1000> /// >; /// @endcode /// The inner value of such field is integral one. However, there are -/// @ref nil::marshalling::types::IntValue::get_scaled() and @ref nil::marshalling::types::IntValue::set_scaled() +/// @ref nil::crypto3::marshalling::types::IntValue::get_scaled() and @ref nil::crypto3::marshalling::types::IntValue::set_scaled() /// member functions that allow get and set original floating point value without /// worrying what math operation needs to be performed. /// @code @@ -928,35 +928,35 @@ /// this /// @code /// using MyDistance = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::int32_t, -/// nil::marshalling::option::scaling_ratio<1, 10>, -/// nil::marshalling::option::units_millimeters +/// nil::crypto3::marshalling::option::scaling_ratio<1, 10>, +/// nil::crypto3::marshalling::option::units_millimeters /// @endcode /// The @b Marshalling library provides a set of units conversion functions in -/// @ref nil::marshalling::units namespace. When using the provided conversion function the application developer +/// @ref nil::crypto3::marshalling::units namespace. When using the provided conversion function the application developer /// doesn't need to remember the original units and/or scaling factor. The @b Marshalling library /// does all the math. It also prevents (at compile time) usage of wrong conversion /// functions, say calculating time (@b milliseconds), when specified units are /// @b distance (@b millimetres). /// @code /// MyDistance field; -/// nil::marshalling::units::setMeters(field, 1.2345); +/// nil::crypto3::marshalling::units::setMeters(field, 1.2345); /// std::cout << "distance in 1/10 of mm:" << field.value() << std::endl; // prints 12345 -/// std::cout << "distance in mm" << nil::marshalling::units::get_millimeters(field); // prints 1234.5 -/// std::cout << "distance in cm" << nil::marshalling::units::get_centimeters(field); // prints 123.45 +/// std::cout << "distance in mm" << nil::crypto3::marshalling::units::get_millimeters(field); // prints 1234.5 +/// std::cout << "distance in cm" << nil::crypto3::marshalling::units::get_centimeters(field); // prints 123.45 /// @endcode -/// By default, When @ref nil::marshalling::types::IntValue field is constructed, the inner +/// By default, When @ref nil::crypto3::marshalling::types::IntValue field is constructed, the inner /// value is constructed to be 0. However, the field definition may use -/// @ref nil::marshalling::option::default_num_value option to specify some other value +/// @ref nil::crypto3::marshalling::option::default_num_value option to specify some other value /// @code /// // definition of integral field /// using MyIntField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, // base class for all the fields, defined by the protocol definition library /// std::uint16_t, -/// nil::marshalling::option::default_num_value<25> +/// nil::crypto3::marshalling::option::default_num_value<25> /// >; /// /// MyIntField field; @@ -964,7 +964,7 @@ /// @endcode /// /// @subsection page_use_prot_fields_enum_value Enum value fields_type -/// The @b enum values are defined using @ref nil::marshalling::types::EnumValue class. It +/// The @b enum values are defined using @ref nil::crypto3::marshalling::types::EnumValue class. It /// is very similar to @ref page_use_prot_fields_int_value. The main difference, /// that second template parameter as well as inner @b value_type type is @b enum. /// The @b enum can be scoped (enum class) or regular (just enum). @@ -978,11 +978,11 @@ /// }; /// /// using SomeEnumField = -/// nil::marshalling::types::EnumValue< +/// nil::crypto3::marshalling::types::EnumValue< /// MyFieldBase, /// SomeEnumVal, -/// nil::marshalling::option::valid_num_value_range<0, (int)SomeEnumVal::NumOfValues - 1>, -/// nil::marshalling::option::default_num_value<(int)SomeEnumVal::Val3> +/// nil::crypto3::marshalling::option::valid_num_value_range<0, (int)SomeEnumVal::NumOfValues - 1>, +/// nil::crypto3::marshalling::option::default_num_value<(int)SomeEnumVal::Val3> /// >; /// /// SomeEnumField field; @@ -992,26 +992,26 @@ /// /// @subsection page_use_prot_fields_bitmask_value Bitmask value fields_type /// Bitmasks (or bitsets) are also numeric values where every bit has separate, -/// independent meaning. Such fields are defined using @ref nil::marshalling::types::BitmaskValue +/// independent meaning. Such fields are defined using @ref nil::crypto3::marshalling::types::BitmaskValue /// class. /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 /// > /// { /// ... /// }; /// @endcode -/// The field definition will use @ref nil::marshalling::option::fixed_length option in +/// The field definition will use @ref nil::crypto3::marshalling::option::fixed_length option in /// order to specify its serialization length. The inner @b value_type type will /// be calculated automatically and defined as one of the unsigned types: /// @b std::uint8_t, @b std::uint16_t, @b std::uint32_t, or @b std::uint64_t. -/// The usage of @ref nil::marshalling::option::bitmask_reserved_bits option will mark +/// The usage of @ref nil::crypto3::marshalling::option::bitmask_reserved_bits option will mark /// certain bits as "reserved". It influences only validity check functionality -/// (see @ref nil::marshalling::types::BitmaskValue::valid()). If any of the reserved bits +/// (see @ref nil::crypto3::marshalling::types::BitmaskValue::valid()). If any of the reserved bits /// doesn't have an expected value, the call to @b valid() member function will /// return @b false. /// @@ -1023,10 +1023,10 @@ /// effect. /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> // Second bit is reserved and must be 0 /// > /// { /// MARSHALLING_BITMASK_BITS(first, third=2, fourth, fifth, sixth, seventh, eighth); @@ -1036,10 +1036,10 @@ /// is equivalent to defining: /// @code /// struct MyBitmask : public -/// nil::marshalling::types::BitmaskValue< +/// nil::crypto3::marshalling::types::BitmaskValue< /// MyFieldBase, -/// nil::marshalling::option::fixed_length<1>, -/// nil::marshalling::option::bitmask_reserved_bits<0x2, 0> +/// nil::crypto3::marshalling::option::fixed_length<1>, +/// nil::crypto3::marshalling::option::bitmask_reserved_bits<0x2, 0> /// > /// { /// enum BitIdx @@ -1064,8 +1064,8 @@ /// } /// @endcode /// The generated convenience access functions use existing -/// @ref nil::marshalling::types::BitmaskValue::get_bit_value() and -/// @ref nil::marshalling::types::BitmaskValue::set_bit_value() member functions. +/// @ref nil::crypto3::marshalling::types::BitmaskValue::get_bit_value() and +/// @ref nil::crypto3::marshalling::types::BitmaskValue::set_bit_value() member functions. /// /// It is also possible to set multiple bits at the same time by accessing /// the stored value directly @@ -1111,7 +1111,7 @@ /// | Hardware | 1 | /// | Software | 2 | /// -/// The field definition will use @ref nil::marshalling::types::Bitfield and probably look similar to code below +/// The field definition will use @ref nil::crypto3::marshalling::types::Bitfield and probably look similar to code below /// @code /// enum class Baud {...} /// enum class Parity {...} @@ -1119,23 +1119,23 @@ /// enum class FlowControl {...} /// /// struct SerialConfigField : public -/// nil::marshalling::types::Bitfield< +/// nil::crypto3::marshalling::types::Bitfield< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::IntValue > +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::IntValue > /// > /// > /// { /// MARSHALLING_FIELD_MEMBERS_ACCESS(baud, parity, stopBits, flowControl, reserved); /// } /// @endcode -/// All the member fields of the @ref nil::marshalling::types::Bitfield are stored internally +/// All the member fields of the @ref nil::crypto3::marshalling::types::Bitfield are stored internally /// as @b std::tuple, as the result the inner @b value_type of such field is -/// @b std::tuple of all member fields and call to @ref nil::marshalling::types::Bitfield::value() +/// @b std::tuple of all member fields and call to @ref nil::crypto3::marshalling::types::Bitfield::value() /// member function will give an access to it. /// /// The field definition is expected to use @ref MARSHALLING_FIELD_MEMBERS_ACCESS() macro, @@ -1143,14 +1143,14 @@ /// functions. The code becomes equivalent to: /// @code /// struct SerialConfigField : public -/// nil::marshalling::types::Bitfield< +/// nil::crypto3::marshalling::types::Bitfield< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::EnumValue >, -/// nil::marshalling::types::IntValue > +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::EnumValue >, +/// nil::crypto3::marshalling::types::IntValue > /// > /// > /// { @@ -1204,8 +1204,8 @@ /// calculating length, checking field's contents validity, and bringing field's /// value into a consistent state. It may be required /// when a message contains sequence (see @ref page_use_prot_fields_array_list) -/// of such bundles/structs. The Marshalling library provides @ref nil::marshalling::types::Bundle -/// field for this purpose. It is quite similar to @ref nil::marshalling::types::Bitfield described +/// of such bundles/structs. The Marshalling library provides @ref nil::crypto3::marshalling::types::Bundle +/// field for this purpose. It is quite similar to @ref nil::crypto3::marshalling::types::Bitfield described /// earlier. The difference is that every member field /// doesn't specify any length in bits, just bytes. For example: /// @code @@ -1218,12 +1218,12 @@ /// } /// /// struct MyBundle : public -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::IntValue // 2 bytes int value -/// nil::marshalling::types::EnumValue, // 1 byte enum value -/// nil::marshalling::types::BitmaskValue > // 1 byte bitmask +/// nil::crypto3::marshalling::types::IntValue // 2 bytes int value +/// nil::crypto3::marshalling::types::EnumValue, // 1 byte enum value +/// nil::crypto3::marshalling::types::BitmaskValue > // 1 byte bitmask /// > /// > /// { @@ -1236,12 +1236,12 @@ /// inner @b FieldIdx enum and convenience access member functions: /// @code /// struct MyBundle : public -/// nil::marshalling::types::Bundle< +/// nil::crypto3::marshalling::types::Bundle< /// MyFieldBase, /// std::tuple< -/// nil::marshalling::types::IntValue // 2 bytes int value -/// nil::marshalling::types::EnumValue, // 1 byte enum value -/// nil::marshalling::types::BitmaskValue > // 1 byte bitmask +/// nil::crypto3::marshalling::types::IntValue // 2 bytes int value +/// nil::crypto3::marshalling::types::EnumValue, // 1 byte enum value +/// nil::crypto3::marshalling::types::BitmaskValue > // 1 byte bitmask /// > /// > /// { @@ -1278,20 +1278,20 @@ /// @subsection page_use_prot_fields_array_list Array List fields_type /// Some communication protocols may define messages that transmit sequence /// of similar fields and/or raw data buffers. To make it easier to handle, the -/// Marshalling library provides nil::marshalling::types::array_list field which provide a required +/// Marshalling library provides nil::crypto3::marshalling::types::array_list field which provide a required /// interface to properly handle such sequences of data. It supports a /// sequence of raw bytes /// @code /// using MySimpleList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// std::uint8_t // raw byte type as second template parameter /// >; /// @endcode -/// as well as using sequence of any fields defined in nil::marshalling::field namespace +/// as well as using sequence of any fields defined in nil::crypto3::marshalling::field namespace /// @code /// using MyComplexList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// MyBundle // Complex bundle field, defined in previous section /// >; @@ -1317,13 +1317,13 @@ /// auto mem1Value = firstMember1.value(); // get the actual value of "member1" /// @endcode /// Some protocols may define fixed size lists. In such case lists are defined -/// with usage of @ref nil::marshalling::option::sequence_fixed_size option. +/// with usage of @ref nil::crypto3::marshalling::option::sequence_fixed_size option. /// @code /// using MyList = -/// nil::marshalling::types::array_list< +/// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::sequence_fixed_size<4> +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::sequence_fixed_size<4> /// >; /// @endcode /// Usage of this option just ensures right amount of elements "on the wire" after @@ -1336,11 +1336,11 @@ /// /// @subsection page_use_prot_fields_string String fields_type /// Many protocols have to transfer strings. They are defined using -/// @ref nil::marshalling::types::String field. +/// @ref nil::crypto3::marshalling::types::String field. /// @code -/// using MyString = nil::marshalling::types::String; +/// using MyString = nil::crypto3::marshalling::types::String; /// @endcode -/// It is very similar to nil::marshalling::types::array_list +/// It is very similar to nil::crypto3::marshalling::types::array_list /// it terms of value storage, read/write operations, and supported options. /// By default the value is stored as /// std::string. @@ -1354,14 +1354,14 @@ /// in more detail in @ref page_use_prot_fields_customisation section below. /// /// Also similar to @ref page_use_prot_fields_array_list, fixed length strings -/// are defined using @ref nil::marshalling::option::sequence_fixed_size option, and just +/// are defined using @ref nil::crypto3::marshalling::option::sequence_fixed_size option, and just /// like with lists it doesn't automatically resize inner string, just ensures /// right amount of characters "on the wire" when field is serialized. /// @code /// using MyFixedString = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, -/// nil::marshalling::option::sequence_fixed_size<32> +/// nil::crypto3::marshalling::option::sequence_fixed_size<32> /// >; /// /// MyFixedString field; @@ -1369,7 +1369,7 @@ /// @endcode /// /// @subsection page_use_prot_fields_fp_value Floating Point value fields_type -/// Floating point value fields are defined using @ref nil::marshalling::types::FloatValue +/// Floating point value fields are defined using @ref nil::crypto3::marshalling::types::FloatValue /// They are very similar to /// @ref page_use_prot_fields_int_value, but use @b float or @b double as its /// internal storage type. They abstract the IEEE 754 floating point @@ -1383,12 +1383,12 @@ /// "flags" bitmask field which specifies whether the following field exists or /// missing. The optional field may also be tentative, i.e. if there is enough /// data in the input buffer it exists, and missing otherwise. The Marshalling -/// library provides @ref nil::marshalling::types::Optional which is a mere wrapper around +/// library provides @ref nil::crypto3::marshalling::types::Optional which is a mere wrapper around /// other fields and provides an ability to set the optional state of the field. /// @code /// using OptField = -/// nil::marshalling::types::Optional< -/// nil::marshalling::types::IntValue +/// nil::crypto3::marshalling::types::Optional< +/// nil::crypto3::marshalling::types::IntValue /// >; /// @endcode /// The default mode of such field is "tentative". @@ -1396,20 +1396,20 @@ /// OptField field; /// assert(field.is_tentative()); /// @endcode -/// The default mode can be changed using @ref nil::marshalling::option::exists_by_default -/// or @ref nil::marshalling::option::missing_by_default options. For example +/// The default mode can be changed using @ref nil::crypto3::marshalling::option::exists_by_default +/// or @ref nil::crypto3::marshalling::option::missing_by_default options. For example /// @code /// using ExistingOptField = -/// nil::marshalling::types::Optional< -/// nil::marshalling::types::IntValue, -/// nil::marshalling::option::exists_by_default +/// nil::crypto3::marshalling::types::Optional< +/// nil::crypto3::marshalling::types::IntValue, +/// nil::crypto3::marshalling::option::exists_by_default /// >; /// /// ExistingOptField field; /// assert(field.does_exist()); /// @endcode /// @b NOTE, that inner @b value_type of such field is wrapped actual field and -/// both @ref nil::marshalling::types::Optional::value() and @ref nil::marshalling::types::Optional::field() +/// both @ref nil::crypto3::marshalling::types::Optional::value() and @ref nil::crypto3::marshalling::types::Optional::field() /// member functions allow to access it. For example: /// @code /// OptField field; @@ -1424,7 +1424,7 @@ /// would be a list of @b properties, where every property is a key/value pair. The /// key is a numeric ID of the property, while value can be a numeric field of /// any length or a string one. Such fields are defined using -/// @ref nil::marshalling::types::Variant class. It is very similar to @ref +/// @ref nil::crypto3::marshalling::types::Variant class. It is very similar to @ref /// page_use_prot_fields_bundle, but serves as one big union of provided member /// fields, i.e. only one can be used at a time. These fields are quite rare /// and if your protocol defines one, please read @ref sec_field_tutorial_variant @@ -1459,7 +1459,7 @@ /// using field1 = ...; /// using field2 = ... /// using field3 = -/// nil::marshalling::types::String< +/// nil::crypto3::marshalling::types::String< /// MyFieldBase, /// typename TOpt::message::Message1Fields::field3 // Extra option(s) /// > @@ -1475,11 +1475,11 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::fields_impl::All>, // using fields with extra options -/// nil::marshalling::option::msg_type > +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::fields_impl::All>, // using fields with extra options +/// nil::crypto3::marshalling::option::msg_type > /// > /// { /// // Provide names for the fields @@ -1502,9 +1502,9 @@ /// { /// struct Message1Fields /// { -/// using field1 = nil::marshalling::option::empty_option; // no extra functionality by default -/// using field2 = nil::marshalling::option::empty_option; // no extra functionality by default -/// using field3 = nil::marshalling::option::empty_option; // no extra functionality by default +/// using field1 = nil::crypto3::marshalling::option::empty_option; // no extra functionality by default +/// using field2 = nil::crypto3::marshalling::option::empty_option; // no extra functionality by default +/// using field3 = nil::crypto3::marshalling::option::empty_option; // no extra functionality by default /// }; /// }; /// }; @@ -1520,7 +1520,7 @@ /// { /// struct Message1Fields : public my_protocol::DefaultOptions::message::Message1Fields /// { -/// using field3 = nil::marshalling::option::fixed_size_storage<32>; +/// using field3 = nil::crypto3::marshalling::option::fixed_size_storage<32>; /// }; /// }; /// }; @@ -1554,19 +1554,19 @@ /// /// The @b Marshalling library provides /// multiple options to change the default storage type. -/// There is @ref nil::marshalling::option::fixed_size_storage option. When passed to the -/// @ref nil::marshalling::types::array_list or @ref nil::marshalling::types::String, it changes the -/// default storage type to be @ref nil::marshalling::container::static_vector or -/// @ref nil::marshalling::processing::StaticString respectively. These types expose the same +/// There is @ref nil::crypto3::marshalling::option::fixed_size_storage option. When passed to the +/// @ref nil::crypto3::marshalling::types::array_list or @ref nil::crypto3::marshalling::types::String, it changes the +/// default storage type to be @ref nil::crypto3::marshalling::container::static_vector or +/// @ref nil::crypto3::marshalling::processing::StaticString respectively. These types expose the same /// public API as @b std::vector or @b std::string, but use pre-allocated /// storage area (as their private member) to store the elements / characters. -/// Note, that the @ref nil::marshalling::option::fixed_size_storage option has a template +/// Note, that the @ref nil::crypto3::marshalling::option::fixed_size_storage option has a template /// parameter, which specify number of elements (not necessarily bytes) to be -/// stored. If the field definition already uses @ref nil::marshalling::option::sequence_fixed_size +/// stored. If the field definition already uses @ref nil::crypto3::marshalling::option::sequence_fixed_size /// option to specify that number of elements is fixed, there is -/// @ref nil::marshalling::option::sequence_fixed_size_use_fixed_size_storage -/// option which has the same effect of forcing @ref nil::marshalling::container::static_vector -/// or @ref nil::marshalling::processing::StaticString to be storage types, but does not +/// @ref nil::crypto3::marshalling::option::sequence_fixed_size_use_fixed_size_storage +/// option which has the same effect of forcing @ref nil::crypto3::marshalling::container::static_vector +/// or @ref nil::crypto3::marshalling::processing::StaticString to be storage types, but does not /// require repeating specification of storage area size. /// For example, if message type is defined to use provided @b DefaultOptions, then /// the storage type of @b field3 will be @b std::string @@ -1576,21 +1576,21 @@ /// std::string& field3Str = msg.field_value3().value(); /// @endcode /// However, if message type is defined to used described earlier @b MyOptions, then -/// the storage type of @b field3 will be @ref nil::marshalling::processing::StaticString +/// the storage type of @b field3 will be @ref nil::crypto3::marshalling::processing::StaticString /// @code /// using MyMessage1 = my_protocol::Message1; /// MyMessage1 msg; -/// nil::marshalling::container::static_string<32>& field3Str = msg.field_value3().value(); +/// nil::crypto3::marshalling::container::static_string<32>& field3Str = msg.field_value3().value(); /// @endcode /// NOTE, that using default @b std::vector / @b std::string or provided -/// @ref nil::marshalling::container::static_vector / @ref nil::marshalling::processing::StaticString will involve +/// @ref nil::crypto3::marshalling::container::static_vector / @ref nil::crypto3::marshalling::processing::StaticString will involve /// copying of the data to these storage areas during the @b read operation. If /// the input buffer is contiguous, i.e the pointer to the last element is @b always /// greater than pointer to the first one (not some kind of circular buffer), then -/// to copying of the data may be avoided by using @ref nil::marshalling::option::orig_data_view +/// to copying of the data may be avoided by using @ref nil::crypto3::marshalling::option::orig_data_view /// option. The option will change the default storage types to be -/// @ref nil::marshalling::processing::ArrayView or @ref nil::marshalling::processing::StringView. @b NOTE, that -/// passing @ref nil::marshalling::option::orig_data_view option to @ref nil::marshalling::types::array_list +/// @ref nil::crypto3::marshalling::processing::ArrayView or @ref nil::crypto3::marshalling::processing::StringView. @b NOTE, that +/// passing @ref nil::crypto3::marshalling::option::orig_data_view option to @ref nil::crypto3::marshalling::types::array_list /// is possible only if it is list of raw data (@b std::uint8_t is used as element type). /// @code /// struct MyOptions : public my_protocol::DefaultOptions @@ -1599,7 +1599,7 @@ /// { /// struct Message1Fields : public my_protocol::DefaultOptions::message::Message1Fields /// { -/// using field3 = nil::marshalling::option::orig_data_view; +/// using field3 = nil::crypto3::marshalling::option::orig_data_view; /// }; /// }; /// }; @@ -1608,7 +1608,7 @@ /// If default standard @b std::vector / @b std::string or all the provided /// by the @b Marshalling library storage type are /// not good enough, it is possible to specify custom storage type -/// using @ref nil::marshalling::option::custom_storage_type option. For example: +/// using @ref nil::crypto3::marshalling::option::custom_storage_type option. For example: /// @code /// struct MyOptions : public my_protocol::DefaultOptions /// { @@ -1617,7 +1617,7 @@ /// struct Message1Fields : public my_protocol::DefaultOptions::message::Message1Fields /// { /// using field3 = -/// nil::marshalling::option::custom_storage_type< +/// nil::crypto3::marshalling::option::custom_storage_type< /// boost::container::pmr::string /// >; /// }; @@ -1648,23 +1648,23 @@ /// struct Message1Fields /// { /// using field1 = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint8_t, /// typename TOpt::message::Message1Fields::field1, // Extra options -/// nil::marshalling::option::default_num_value<10>, -/// nil::marshalling::option::valid_num_value_range<10, 20> +/// nil::crypto3::marshalling::option::default_num_value<10>, +/// nil::crypto3::marshalling::option::valid_num_value_range<10, 20> /// >; /// ... /// }; /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::fields_impl::All>, // using fields with extra options -/// nil::marshalling::option::msg_type > +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::fields_impl::All>, // using fields with extra options +/// nil::crypto3::marshalling::option::msg_type > /// > /// { /// ... @@ -1689,8 +1689,8 @@ /// { /// using field1 = /// std::tuple< -/// nil::marshalling::option::default_num_value<5>, -/// nil::marshalling::option::ValidNumValue<5> +/// nil::crypto3::marshalling::option::default_num_value<5>, +/// nil::crypto3::marshalling::option::ValidNumValue<5> /// >; /// }; /// }; @@ -1700,24 +1700,24 @@ /// equivalent to /// @code /// using field1 = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint8_t, -/// nil::marshalling::option::default_num_value<5>, // overrides default value 10 defined below -/// nil::marshalling::option::ValidNumValue<5>, // added to previously defined range [10, 20] -/// nil::marshalling::option::default_num_value<10>, -/// nil::marshalling::option::valid_num_value_range<10, 20> +/// nil::crypto3::marshalling::option::default_num_value<5>, // overrides default value 10 defined below +/// nil::crypto3::marshalling::option::ValidNumValue<5>, // added to previously defined range [10, 20] +/// nil::crypto3::marshalling::option::default_num_value<10>, +/// nil::crypto3::marshalling::option::valid_num_value_range<10, 20> /// >; /// @endcode /// @b NOTE that @b Marshalling library processes all the options @b bottom-up, i.e. -/// starts with @b nil::marshalling::option::valid_num_value_range<10, 20> (which records initial -/// valid range [10, 20]), then processes @b nil::marshalling::option::default_num_value<10> -/// (which records default value to be 10), then processes @b nil::marshalling::option::ValidNumValue<5> +/// starts with @b nil::crypto3::marshalling::option::valid_num_value_range<10, 20> (which records initial +/// valid range [10, 20]), then processes @b nil::crypto3::marshalling::option::default_num_value<10> +/// (which records default value to be 10), then processes @b nil::crypto3::marshalling::option::ValidNumValue<5> /// (which @b adds value 5 to the existing valid ranges), then processes -/// @b nil::marshalling::option::default_num_value<5> (which changes the default value to be 5). +/// @b nil::crypto3::marshalling::option::default_num_value<5> (which changes the default value to be 5). /// /// In case the application needs to override originally defined valid range(s) of -/// the field, it can use @ref nil::marshalling::option::valid_ranges_clear +/// the field, it can use @ref nil::crypto3::marshalling::option::valid_ranges_clear /// option, which will clear all /// previously defined valid ranges and will start accumulating them anew. For /// example: @@ -1730,16 +1730,16 @@ /// { /// using field1 = /// std::tuple< -/// nil::marshalling::option::default_num_value<5>, // change the default value -/// nil::marshalling::option::ValidNumValue<5>, // add 5 to valid ranges of [40, 50] -/// nil::marshalling::option::valid_num_value_range<40, 50>, // new range -/// nil::marshalling::option::valid_ranges_clear // clear the default ranges +/// nil::crypto3::marshalling::option::default_num_value<5>, // change the default value +/// nil::crypto3::marshalling::option::ValidNumValue<5>, // add 5 to valid ranges of [40, 50] +/// nil::crypto3::marshalling::option::valid_num_value_range<40, 50>, // new range +/// nil::crypto3::marshalling::option::valid_ranges_clear // clear the default ranges /// >; /// }; /// }; /// }; /// @endcode -/// Additional option that may be quite useful is @ref nil::marshalling::option::fail_on_invalid. +/// Additional option that may be quite useful is @ref nil::crypto3::marshalling::option::fail_on_invalid. /// It causes the @b read operation to fail with provided error status when /// read value is not valid (@b valid() member function returns @b false). /// @@ -1753,7 +1753,7 @@ /// over the I/O link to the other side. The serialized message payload must /// be wrapped in some kind of transport information prior to being sent and /// unwrapped on the other side when received. The @b Marshalling protocol defines -/// multiple so called @b layers (defined in @b nil::marshalling::protocol namespace). +/// multiple so called @b layers (defined in @b nil::crypto3::marshalling::protocol namespace). /// The transport framing will be defined using those @b layer classes and will /// probably be called @b ProtocolStack. Its definition is expected to /// looke something like this: @@ -1764,8 +1764,8 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for nil::marshalling::protocol::MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for nil::crypto3::marshalling::protocol::MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// struct ProtocolStack : public /// MySyncPrefix @@ -1786,9 +1786,9 @@ /// /// The third template parameter (@b TAllocationOptions) is extra option(s) /// (bundled in @b std::tuple if more than one) to be passed to -/// @ref nil::marshalling::protocol::MsgIdLayer class which is responsible for message +/// @ref nil::crypto3::marshalling::protocol::MsgIdLayer class which is responsible for message /// allocation. By default the message object is dynamically allocated, it is -/// possible to modify such behaviour by using @ref nil::marshalling::option::in_place_allocation +/// possible to modify such behaviour by using @ref nil::crypto3::marshalling::option::in_place_allocation /// option. It will be explained in more detail further below. /// /// The fourth template parameter (@b TPayloadOptions) is irrelevant in @@ -1796,9 +1796,9 @@ /// for further analysis. It will also be explained in more detail further below. /// /// @b NOTE, that @b ProtocolStack definition is actually an alias to one -/// of the classes from @ref nil::marshalling::protocol namespace. To get a detailed +/// of the classes from @ref nil::crypto3::marshalling::protocol namespace. To get a detailed /// information on available public API please reference to one of them, for -/// example @ref nil::marshalling::protocol::SyncPrefixLayer. +/// example @ref nil::crypto3::marshalling::protocol::SyncPrefixLayer. /// /// @subsection page_use_prot_transport_read Reading Transport Framing and Message Payload /// Below is an example of how to implement data processing loop, which parses @@ -1824,22 +1824,22 @@ /// using msg_type = ProtStack::msg_ptr_type::element_type; /// /// // Get the iterator for reading -/// auto begIter = nil::marshalling::readIteratorFor(buf + consumed); +/// auto begIter = nil::crypto3::marshalling::readIteratorFor(buf + consumed); /// auto iter = begIter; /// /// // Do the read /// auto es = protStack.read(msgPtr, iter, len - consumed); -/// if (es == nil::marshalling::ErrorStatus::not_enough_data) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::not_enough_data) { /// break; // Not enough data in the buffer, stop processing /// } /// -/// if (es == nil::marshalling::ErrorStatus::protocol_error) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::protocol_error) { /// // Something is not right with the data, remove one character and try again /// ++consumed; /// continue; /// } /// -/// if (es == nil::marshalling::ErrorStatus::success) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::success) { /// assert(msgPtr); // If read is successful, msgPtr is expected to hold a valid pointer /// msgPtr->dispatch(handler); // Dispatch message for handling /// } @@ -1870,12 +1870,12 @@ /// using msg_type = ProtStack::msg_ptr_type::element_type; /// @endcode /// @li During the read operation, when message object has been successfully allocated, -/// the message payload will be read by invoking the @ref nil::marshalling::Message::read() +/// the message payload will be read by invoking the @ref nil::crypto3::marshalling::Message::read() /// member function. It means that common message interface class must support /// polymorphic read (see @ref page_use_prot_interface_read). /// It means that the iterator used -/// for reading needs to be convertible to @ref nil::marshalling::Message::read_iterator. It -/// can be achieved by using @ref nil::marshalling::read_iterator_for() template function, +/// for reading needs to be convertible to @ref nil::crypto3::marshalling::Message::read_iterator. It +/// can be achieved by using @ref nil::crypto3::marshalling::read_iterator_for() template function, /// which will initialise and return appropriate iterator type. Another /// possible way of allocating the iterator can be as following: /// @code @@ -1908,24 +1908,24 @@ /// /// MyAckMsg msg; // actual message object /// auto es = protStack.read(msg, iter, len - consumed); -/// if (es == nil::marshalling::ErrorStatus::not_enough_data) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::not_enough_data) { /// break; // Not enough data in the buffer, stop processing /// } /// -/// if (es == nil::marshalling::ErrorStatus::invalid_msg_id) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::invalid_msg_id) { /// // Unexpected message (not AckMsg) has been received, report or handle error /// ... /// consumed += std::distance(begIter, iter); /// continue; /// } /// -/// if (es == nil::marshalling::ErrorStatus::protocol_error) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::protocol_error) { /// // Something is not right with the data, remove one character and try again /// ++consumed; /// continue; /// } /// -/// if (es == nil::marshalling::ErrorStatus::success) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::success) { /// handler.handle(msg); // Handle message without polymorphic dispatch /// } /// @@ -1944,7 +1944,7 @@ /// @subsection page_use_prot_transport_msg_alloc Message Object Allocation /// By default, the message object is dynamically allocated. However, some /// applications (especially bare-metal ones) may require something different. -/// The @b Marshalling library has @ref nil::marshalling::option::in_place_allocation option, +/// The @b Marshalling library has @ref nil::crypto3::marshalling::option::in_place_allocation option, /// which may be passed as third template parameter (@b TAllocationOptions) /// to @b ProtocolStack type definition. It statically allocates (in private data /// members) storage area, that is capable to store any message object from @@ -1962,13 +1962,13 @@ /// number of input messages, all the rest need to be forwarded "as-is" or /// maybe wrapped in different transport frame before sending it over /// different I/O link. To help with such task @b Marshalling library provides -/// @ref nil::marshalling::generic_message class. There is also @ref nil::marshalling::option::support_generic_message +/// @ref nil::crypto3::marshalling::generic_message class. There is also @ref nil::crypto3::marshalling::option::support_generic_message /// option that can be passed as third template parameter (@b TAllocationOptions) /// to the @b ProtocolStack type definition. It will force of creation -/// @ref nil::marshalling::generic_message object when appropriate message object is not found. +/// @ref nil::crypto3::marshalling::generic_message object when appropriate message object is not found. /// @code /// // Define generic message type -/// using MyGenericMessage = nil::marshalling::generic_message; +/// using MyGenericMessage = nil::crypto3::marshalling::generic_message; /// /// // Limited number of supported messages /// using MyInputMessages = @@ -1982,24 +1982,24 @@ /// my_protocol::ProtocolStack< /// MyMessage, /// MyInputMessages, -/// nil::marshalling::option::support_generic_message +/// nil::crypto3::marshalling::option::support_generic_message /// >; /// @endcode -/// @b NOTE, that @ref nil::marshalling::generic_message has only single field, which -/// is a list of raw data (@ref nil::marshalling::types::array_list). The @b read operation +/// @b NOTE, that @ref nil::crypto3::marshalling::generic_message has only single field, which +/// is a list of raw data (@ref nil::crypto3::marshalling::types::array_list). The @b read operation /// of such field will result in copying the data from input buffer to -/// internal storage of this field. The @ref nil::marshalling::generic_message +/// internal storage of this field. The @ref nil::crypto3::marshalling::generic_message /// class has also other template parameters (except common message interface class). /// The second template parameter is option(s) that are going to be passed to this -/// nil::marshalling::types::array_list field. If allocated message is @b not going to -/// outlive input buffer, than it may make sense to pass @ref nil::marshalling::option::orig_data_view -/// as second template parameter to @ref nil::marshalling::generic_message. +/// nil::crypto3::marshalling::types::array_list field. If allocated message is @b not going to +/// outlive input buffer, than it may make sense to pass @ref nil::crypto3::marshalling::option::orig_data_view +/// as second template parameter to @ref nil::crypto3::marshalling::generic_message. /// @code -/// using MyGenericMessage = nil::marshalling::generic_message; +/// using MyGenericMessage = nil::crypto3::marshalling::generic_message; /// @endcode /// -/// Also @b note, that it is possible to combine usage of @ref nil::marshalling::option::in_place_allocation -/// and @ref nil::marshalling::option::support_generic_message as the third template parameter to +/// Also @b note, that it is possible to combine usage of @ref nil::crypto3::marshalling::option::in_place_allocation +/// and @ref nil::crypto3::marshalling::option::support_generic_message as the third template parameter to /// @b ProtocolStack type definition using @b std::tuple bundling. /// @code /// using ProtStack = @@ -2007,8 +2007,8 @@ /// MyMessage, /// MyInputMessages, /// std::tuple< -/// nil::marshalling::option::in_place_allocation, -/// nil::marshalling::option::support_generic_message +/// nil::crypto3::marshalling::option::in_place_allocation, +/// nil::crypto3::marshalling::option::support_generic_message /// > /// >; /// @endcode @@ -2020,9 +2020,9 @@ /// ProtStack protStack; // Protocol stack defined in one of previous sections /// void sendMessage(const MyMessage& msg, std::uint8_t* buf, std::size_t len) /// { -/// auto writeIter = nil::marshalling::write_iterator_for(&buf[0]); +/// auto writeIter = nil::crypto3::marshalling::write_iterator_for(&buf[0]); /// auto es = protStack.write(msg, writeIter, len); -/// if (es == nil::marshalling::ErrorStatus::success) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::success) { /// ... // Send contents of dataToSend via I/O link /// } /// } @@ -2040,12 +2040,12 @@ /// the number of written bytes will be calculated and the previously written /// dummy value updated accordingly. @b NOTE, that such update is possible only /// if iterator used for writing is random-access one. Such update won't be -/// possible. In this case @ref nil::marshalling::ErrorStatus::update_required error status +/// possible. In this case @ref nil::crypto3::marshalling::ErrorStatus::update_required error status /// will be returned. It means that the write operation is incomplete, there /// is a need to perform @b update() call with random-access iterator. /// For example, let's assume the @ref page_use_prot_interface_length is /// not supported and std::back_insert_iterator\ \> -/// is passed to @b MyMessage with @ref nil::marshalling::option::write_iterator option. +/// is passed to @b MyMessage with @ref nil::crypto3::marshalling::option::write_iterator option. /// the message object to perform polymorphic write /// @code /// ProtStack protStack; // Protocol stack defined in one of previous sections @@ -2054,17 +2054,17 @@ /// assert(outBuf.empty()) // Make sure buffer is empty /// auto writeIter = std::back_inserter(outBuf); /// auto es = protStack.write(msg, writeIter, outBuf.max_size()); -/// if (es == nil::marshalling::ErrorStatus::update_required) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::update_required) { /// auto updateIter = &outBuf[0]; /// es = protStack.update(updateIter, outBuf.size()); /// } /// -/// if (es == nil::marshalling::ErrorStatus::success) { +/// if (es == nil::crypto3::marshalling::ErrorStatus::success) { /// ... // Send contents of dataToSend via I/O link /// } /// } /// @endcode -/// Similar scenario of a need to handle @ref nil::marshalling::ErrorStatus::update_required +/// Similar scenario of a need to handle @ref nil::crypto3::marshalling::ErrorStatus::update_required /// error status may occur when transport framing contains checksum value and /// output (not random-access) iterator is used. The checksum calculation requires /// going over the written data to calculate the value. However, it won't be @@ -2087,9 +2087,9 @@ /// @endcode /// Such implementation does not require any polymorphic behaviour from the /// message object being sent, it takes all the required information from the -/// direct calls to non-virtual @b do_get_id() (see @ref nil::marshalling::MessageBase::do_get_id()) and -/// @b do_length() (see @ref nil::marshalling::MessageBase::do_length()). The payload write is also performed using -/// direct call to @b do_write() (see @ref nil::marshalling::MessageBase::do_write()). +/// direct calls to non-virtual @b do_get_id() (see @ref nil::crypto3::marshalling::MessageBase::do_get_id()) and +/// @b do_length() (see @ref nil::crypto3::marshalling::MessageBase::do_length()). The payload write is also performed using +/// direct call to @b do_write() (see @ref nil::crypto3::marshalling::MessageBase::do_write()). /// /// @subsection page_use_prot_transport_caching Access to Processed Stack fields_type /// All the examples above do not store the read/written transport fields @@ -2098,8 +2098,8 @@ /// also defines @b all_fields_type type which is @b std::tuple of all the fields used by all the /// layer classes. @n /// Also, the @b ProtocolStack defines @b read_fields_cached() (see -/// @ref nil::marshalling::protocol::ProtocolLayerBase::read_fields_cached()) and @b write_fields_cached() -/// (see @ref nil::marshalling::protocol::ProtocolLayerBase::write_fields_cached()) +/// @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::read_fields_cached()) and @b write_fields_cached() +/// (see @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::write_fields_cached()) /// member functions which are substitutes to normal read() and write(). The first /// parameter to these functions is reference to the @b all_fields_type bundle /// object. @@ -2108,22 +2108,22 @@ /// auto es = protStack.read_fields_cached(fields, msgPtr, readIter, bufSize); /// @endcode /// The layer class that is responsible to read/write payload data -/// (see @ref nil::marshalling::protocol::MsgDataLayer) uses @ref nil::marshalling::types::array_list +/// (see @ref nil::crypto3::marshalling::protocol::MsgDataLayer) uses @ref nil::crypto3::marshalling::types::array_list /// to define a field that will store the payload when "caching" operations are /// performed. That's where the fourth template parameter (@b TPayloadOptions) /// to @b ProtocolStack definition comes in play. /// In case the the input / output buffer outlives the @b all_fields_type -/// object, consider passing @ref nil::marshalling::option::orig_data_view option as the +/// object, consider passing @ref nil::crypto3::marshalling::option::orig_data_view option as the /// fourth template parameter to @b ProtocolStack definition, which will pass it to /// to the field containing the message payload raw data. Otherwise, the /// payload part from the read / written buffer will also be copied to storage /// area of the cached payload field. /// /// As was mentioned earlier, the protocol stack is defined using so called -/// @b layer classes (defined in @ref nil::marshalling::protocol namespace) by wrapping +/// @b layer classes (defined in @ref nil::crypto3::marshalling::protocol namespace) by wrapping /// one another. Access to the appropriate layer may be obtained using a /// sequence of calls to @b next_layer() member functions (see -/// @ref nil::marshalling::protocol::ProtocolLayerBase::next_layer()). Alternatively, the protocol stack +/// @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::next_layer()). Alternatively, the protocol stack /// definition is also expected to use @ref MARSHALLING_PROTOCOL_LAYERS_ACCESS() /// macro to generate a convenience access functions. For example /// @code @@ -2133,8 +2133,8 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// struct ProtocolStack : public /// MySyncPrefix @@ -2151,8 +2151,8 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// struct ProtocolStack : public /// MySyncPrefix @@ -2190,13 +2190,13 @@ /// @endcode /// Then the access to the appropriate layer as as simple as calling appropriate /// @b layer_*() member function. Once the access is obtained, it is possible to -/// call @b access_cached_field() (see @ref nil::marshalling::protocol::ProtocolLayerBase::access_cached_field()) +/// call @b access_cached_field() (see @ref nil::crypto3::marshalling::protocol::ProtocolLayerBase::access_cached_field()) /// member function to get an access to appropriate field. For example: /// @code /// ProtStack protStack; // Protocol stack object /// ProtStack::all_fields_type fields; // Transport fields /// auto es = protStack.read_fields_cached(fields, msgPtr, readIter, bufSize); -/// if (es != nil::marshalling::ErrorStatus::success) { +/// if (es != nil::crypto3::marshalling::ErrorStatus::success) { /// ... // handle error /// return; /// } @@ -2219,7 +2219,7 @@ /// /// The @b Marshalling library has a built-in efficient (O(1)) dispatch mechanism, which /// uses "Double Dispatch" idiom. The @ref page_use_prot_interface_handle -/// section above described using @b nil::marshalling::option::handler option, which +/// section above described using @b nil::crypto3::marshalling::option::handler option, which /// adds polymorphic @b dispatch() member function to the common interface class /// (@b MyMessage). The provided handling class (@b MyHandler) is expected /// to define @b handle() member function for every message class it is expected to @@ -2307,7 +2307,7 @@ /// /// @subsection page_use_prot_handling_generic Generic handler /// The Marshalling library provides some help in defining custom message handlers. -/// There is @ref nil::marshalling::generic_handler class that receives at least two template +/// There is @ref nil::crypto3::marshalling::generic_handler class that receives at least two template /// parameters. The first one is a common interface class for all the handled messages /// (@b MyMessage). The second template parameter is /// all the types of all the custom messages the handler is supposed to handle, @@ -2317,9 +2317,9 @@ /// @code /// using MyMessagesToHandle = MyInputMessages; /// @endcode -/// As the result the nil::marshalling::generic_handler implements @b virtual @b handle() +/// As the result the nil::crypto3::marshalling::generic_handler implements @b virtual @b handle() /// function for all the provided messages including the provided interface one. -/// The code that automatically generated by @b nil::marshalling::generic_message is equivalent +/// The code that automatically generated by @b nil::crypto3::marshalling::generic_message is equivalent /// to the one below. /// @code /// template<> @@ -2341,10 +2341,10 @@ /// ... /// }; /// @endcode -/// Now, what remains is to inherit from nil::marshalling::generic_handler and override +/// Now, what remains is to inherit from nil::crypto3::marshalling::generic_handler and override /// the functions that need to be overridden: /// @code -/// class MyHandler : public nil::marshalling::generic_handler +/// class MyHandler : public nil::crypto3::marshalling::generic_handler /// { /// public: /// // Enable polymorphic delete @@ -2363,7 +2363,7 @@ /// } /// }; /// @endcode -/// Pay attention that @ref nil::marshalling::generic_handler doesn't declare its destructor as virtual. +/// Pay attention that @ref nil::crypto3::marshalling::generic_handler doesn't declare its destructor as virtual. /// If the handler object requires support for polymorphic delete (destruction), /// make sure to declare its destructor as virtual. /// @@ -2386,13 +2386,13 @@ /// }; /// @endcode /// If inner @b RetType type is defined, it is propagated to be also the return type of -/// the @ref nil::marshalling::Message::dispatch() member function as well. As the result the developer may +/// the @ref nil::crypto3::marshalling::Message::dispatch() member function as well. As the result the developer may /// use constructs like this: /// @code /// bool result = msg->dispatch(handler); /// @endcode /// -/// If @ref nil::marshalling::generic_handler class is used to define the handler class, its +/// If @ref nil::crypto3::marshalling::generic_handler class is used to define the handler class, its /// third template parameter (which defaults to @b void), can be used to /// specify the return type of handling functions. /// @@ -2404,7 +2404,7 @@ /// not (because they were introduced in later version of the protocol). /// Such extra information is stored in the message object itself. If this is /// the case, the protocol definition is expected to use -/// @ref nil::marshalling::option::extra_transport_fields option in addition to specifying +/// @ref nil::crypto3::marshalling::option::extra_transport_fields option in addition to specifying /// serialization endian and message ID type (described in @ref /// page_use_prot_interface). /// (see @ref page_field_tutorial) and bundled in @b std::tuple: @@ -2414,10 +2414,10 @@ /// /// // field_type describing protocol version. /// using MyVersionField = -/// nil::marshalling::types::IntValue< +/// nil::crypto3::marshalling::types::IntValue< /// MyFieldBase, /// std::uint16_t, -/// nil::marshalling::option::default_num_value<5> // Implementing v5 of the protocol by default +/// nil::crypto3::marshalling::option::default_num_value<5> // Implementing v5 of the protocol by default /// >; /// /// // Relevant extra transport fields, bundled in std::tuple @@ -2428,10 +2428,10 @@ /// /// template /// class Message : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, -/// nil::marshalling::option::extra_transport_fields, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::option::extra_transport_fields, /// TOptions... /// > /// { @@ -2441,7 +2441,7 @@ /// /// } // namespace my_protocol /// @endcode -/// Usage of @ref nil::marshalling::option::extra_transport_fields option as well as +/// Usage of @ref nil::crypto3::marshalling::option::extra_transport_fields option as well as /// @ref MARSHALLING_MSG_TRANSPORT_FIELDS_ACCESS() macro in the message class definition /// is equivalent to having the following types and member functions defined /// @code @@ -2450,9 +2450,9 @@ /// /// template /// class Message : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, /// TOptions... /// > /// { @@ -2486,7 +2486,7 @@ /// /// } // namespace my_protocol /// @endcode -/// For reference see also description of @ref nil::marshalling::Message::transport_fields() +/// For reference see also description of @ref nil::crypto3::marshalling::Message::transport_fields() /// member function. /// /// Access to the version information given a reference to message object may @@ -2505,9 +2505,9 @@ /// object itself. These fields are @b NOT getting serialized / deserialized when message /// object (payload) being read / written. /// -/// The @ref nil::marshalling::Message interface class defines @ref nil::marshalling::Message::has_transport_fields() +/// The @ref nil::crypto3::marshalling::Message interface class defines @ref nil::crypto3::marshalling::Message::has_transport_fields() /// static constexpr member function, which may be used at compile time to -/// determine whether the @ref nil::marshalling::option::extra_transport_fields option has been used, i.e. +/// determine whether the @ref nil::crypto3::marshalling::option::extra_transport_fields option has been used, i.e. /// the message interface class defines mentioned earlier /// types and functions. /// @@ -2515,15 +2515,15 @@ /// The @b Marshalling library contain a built-in protocol version support when /// version info is provided within @ref page_use_prot_extra_transport. To support /// this feature, the -/// message interface definition class needs to use @ref nil::marshalling::option::version_in_extra_transport_fields -/// option, in addition to @ref nil::marshalling::option::extra_transport_fields option itself, to +/// message interface definition class needs to use @ref nil::crypto3::marshalling::option::version_in_extra_transport_fields +/// option, in addition to @ref nil::crypto3::marshalling::option::extra_transport_fields option itself, to /// specify which field is @b version. /// @code /// namespace my_protocol /// { /// /// // field_type describing protocol version. -/// using MyVersionField = nil::marshalling::types::IntValue<...>; +/// using MyVersionField = nil::crypto3::marshalling::types::IntValue<...>; /// /// // Relevant extra transport fields, bundled in std::tuple /// using MyExtraTransportFields = @@ -2533,11 +2533,11 @@ /// /// template /// class Message : public -/// nil::marshalling::Message< -/// nil::marshalling::option::big_endian, -/// nil::marshalling::option::msg_id_type, -/// nil::marshalling::option::extra_transport_fields, -/// nil::marshalling::option::version_in_extra_transport_fields<0> +/// nil::crypto3::marshalling::Message< +/// nil::crypto3::marshalling::option::big_endian, +/// nil::crypto3::marshalling::option::msg_id_type, +/// nil::crypto3::marshalling::option::extra_transport_fields, +/// nil::crypto3::marshalling::option::version_in_extra_transport_fields<0> /// TOptions... /// > /// { @@ -2546,9 +2546,9 @@ /// /// } // namespace my_protocol /// @endcode -/// Usage of @ref nil::marshalling::option::version_in_extra_transport_fields option generates -/// inner @b version_type type (see @ref nil::marshalling::Message::version_type) as well -/// as @b version() access functions (see @ref nil::marshalling::Message::version()) for direct +/// Usage of @ref nil::crypto3::marshalling::option::version_in_extra_transport_fields option generates +/// inner @b version_type type (see @ref nil::crypto3::marshalling::Message::version_type) as well +/// as @b version() access functions (see @ref nil::crypto3::marshalling::Message::version()) for direct /// access to it. It is equivalent to having the following functions defined: /// @code /// namespace my_protocol @@ -2556,7 +2556,7 @@ /// /// template /// class Message : public -/// nil::marshalling::Message<...> +/// nil::crypto3::marshalling::Message<...> /// { /// public: /// ... @@ -2573,7 +2573,7 @@ /// @b NOTE, that updating the version information only modifies the value /// of the relevant transport fields itself. The message contents are not /// being updated. There is a need to invoke @b do_fields_version_update() member -/// function (see @ref nil::marshalling::MessageBase::do_fields_version_update()), +/// function (see @ref nil::crypto3::marshalling::MessageBase::do_fields_version_update()), /// which will do the job of updating message /// contents accordingly. /// @code @@ -2598,8 +2598,8 @@ /// the way how other messages being deserialized and/or handled. Usually it is /// some kind of @b CONNECT message. Such scenario is implemented in the /// very similar way to @ref page_use_prot_extra_transport. The protocol stack -/// is still defined using @ref nil::marshalling::protocol::TransportValueLayer but with @ref -/// nil::marshalling::option::pseudo_value option. Such layer contains the "pseudo" field in +/// is still defined using @ref nil::crypto3::marshalling::protocol::TransportValueLayer but with @ref +/// nil::crypto3::marshalling::option::pseudo_value option. Such layer contains the "pseudo" field in /// its internal data members and pretends to read it during @b read operation. /// /// Let's assume the protocol framing is defined to be @@ -2621,8 +2621,8 @@ /// template < /// typename TMessage, // common interface class defined by the application /// typename TInputMessages = all_messages_type, // Input messages that need to be recognised -/// typename TAllocationOptions = nil::marshalling::option::empty_option, // Extra options for MsgIdLayer -/// typename TPayloadOptions = nil::marshalling::option::empty_option // Extra options for payload storage +/// typename TAllocationOptions = nil::crypto3::marshalling::option::empty_option, // Extra options for MsgIdLayer +/// typename TPayloadOptions = nil::crypto3::marshalling::option::empty_option // Extra options for payload storage /// > /// struct ProtocolStack : public /// MySizePrefix @@ -2634,8 +2634,8 @@ /// @endcode /// Then after reception and handling of the mentioned @b CONNECT message, the /// stored pseudo version field may be accessed using @b pseudo_field() member -/// function of @ref nil::marshalling::protocol::TransportValueLayer layer (see @ref -/// nil::marshalling::protocol::TransportValueLayer::pseudo_field()) and updated with +/// function of @ref nil::crypto3::marshalling::protocol::TransportValueLayer layer (see @ref +/// nil::crypto3::marshalling::protocol::TransportValueLayer::pseudo_field()) and updated with /// reported value. /// @code /// ProtStack protStack; // Protocol stack object @@ -2654,15 +2654,15 @@ /// @code /// using MyInputMessage = /// my_protocol::Message< -/// nil::marshalling::option::read_iterator, // polymorphic read -/// nil::marshalling::option::handler // polymorphic dispatch +/// nil::crypto3::marshalling::option::read_iterator, // polymorphic read +/// nil::crypto3::marshalling::option::handler // polymorphic dispatch /// >; /// /// using MyOutputMessage = /// my_protocol::Message< -/// nil::marshalling::option::write_iterator, // polymorphic write -/// nil::marshalling::option::id_info_interface, // polymorphic ID retrieve -/// nil::marshalling::option::length_info_interface // polymorphic serialization length retrieve +/// nil::crypto3::marshalling::option::write_iterator, // polymorphic write +/// nil::crypto3::marshalling::option::id_info_interface, // polymorphic ID retrieve +/// nil::crypto3::marshalling::option::length_info_interface // polymorphic serialization length retrieve /// >; /// /// using MyInputMessage1 = my_protocol::Message1; @@ -2682,12 +2682,12 @@ /// functions for bare-metal application may be a heavy price to pay, especially /// when ROM size is small. The @b Marshalling library provides several /// options that inhibit generation of virtual functions. These extra options -/// need to be passed to @ref nil::marshalling::MessageBase class when defining a message +/// need to be passed to @ref nil::crypto3::marshalling::MessageBase class when defining a message /// class. Available options are: -/// @li @ref nil::marshalling::option::no_read_impl -/// @li @ref nil::marshalling::option::no_write_impl -/// @li @ref nil::marshalling::option::no_valid_impl -/// @li @ref nil::marshalling::option::no_length_impl +/// @li @ref nil::crypto3::marshalling::option::no_read_impl +/// @li @ref nil::crypto3::marshalling::option::no_write_impl +/// @li @ref nil::crypto3::marshalling::option::no_valid_impl +/// @li @ref nil::crypto3::marshalling::option::no_length_impl /// /// In order to be able to pass these extra options to message definition classes, /// the support from the latter is required. If the protocol definition @@ -2702,8 +2702,8 @@ /// { /// struct message /// { -/// using Message1 = nil::marshalling::option::empty_option; -/// using Message2 = nil::marshalling::option::empty_option; +/// using Message1 = nil::crypto3::marshalling::option::empty_option; +/// using Message2 = nil::crypto3::marshalling::option::empty_option; /// ... /// }; /// }; @@ -2713,11 +2713,11 @@ /// /// template /// class Message1 : public -/// nil::marshalling::MessageBase< +/// nil::crypto3::marshalling::MessageBase< /// TBase, -/// nil::marshalling::option::static_num_id_impl, -/// nil::marshalling::option::fields_impl::All>, -/// nil::marshalling::option::msg_type >, +/// nil::crypto3::marshalling::option::static_num_id_impl, +/// nil::crypto3::marshalling::option::fields_impl::All>, +/// nil::crypto3::marshalling::option::msg_type >, /// typename TOpt::message::Message1 // Extra options /// > /// { @@ -2737,8 +2737,8 @@ /// { /// struct message : public my_protocol::DefaultOptions::message /// { -/// using Message1 = nil::marshalling::option::no_read_impl; -/// using Message2 = nil::marshalling::option::no_write_impl; +/// using Message1 = nil::crypto3::marshalling::option::no_read_impl; +/// using Message2 = nil::crypto3::marshalling::option::no_write_impl; /// }; /// }; /// @@ -2748,7 +2748,7 @@ /// /// @section page_use_prot_msg_extension Message Interface Extension /// Sometimes the public interface of the messages, generated by the -/// @b Marshalling library out of available options passed to @ref nil::marshalling::Message, +/// @b Marshalling library out of available options passed to @ref nil::crypto3::marshalling::Message, /// may be insufficient for some applications and its interface needs to be extended /// with custom member functions. It is easy to achieve by /// just implementing required function in common message interface class @@ -2789,7 +2789,7 @@ /// >; /// /// using MyProtocolStack = my_protocol::ProtocolStack; -/// using MyHandler = nil::marshalling::generic_handler; +/// using MyHandler = nil::crypto3::marshalling::generic_handler; /// ... /// @endcode /// diff --git a/crypto3/libs/marshalling/core/example/endian.cpp b/crypto3/libs/marshalling/core/example/endian.cpp index a0bdd7ab4e..7080386547 100644 --- a/crypto3/libs/marshalling/core/example/endian.cpp +++ b/crypto3/libs/marshalling/core/example/endian.cpp @@ -50,7 +50,7 @@ #include #include -using namespace nil::marshalling; +using namespace nil::crypto3::marshalling; int main(int argc, char *argv[]) { status_type status; @@ -82,4 +82,4 @@ int main(int argc, char *argv[]) { assert(status == status_type::success); assert(out3 == res3); -} \ No newline at end of file +} diff --git a/crypto3/libs/marshalling/core/example/interfaces.cpp b/crypto3/libs/marshalling/core/example/interfaces.cpp index 6d5b67a5ac..0c10fba26a 100644 --- a/crypto3/libs/marshalling/core/example/interfaces.cpp +++ b/crypto3/libs/marshalling/core/example/interfaces.cpp @@ -49,7 +49,7 @@ #include #include -using namespace nil::marshalling; +using namespace nil::crypto3::marshalling; using T = std::vector; const std::vector in = {{0x1234, 0x5678}}; @@ -112,4 +112,4 @@ int main(int argc, char *argv[]) { std::cout << std::endl << "Result type as iterator parameter:" << std::endl; result_as_iterator_parameter(); -} \ No newline at end of file +} diff --git a/crypto3/libs/marshalling/core/example/pack.cpp b/crypto3/libs/marshalling/core/example/pack.cpp index c3ea0a844f..6a615d3868 100644 --- a/crypto3/libs/marshalling/core/example/pack.cpp +++ b/crypto3/libs/marshalling/core/example/pack.cpp @@ -50,7 +50,7 @@ #include #include -using namespace nil::marshalling; +using namespace nil::crypto3::marshalling; template void to_big_vector(T input) { @@ -59,7 +59,7 @@ void to_big_vector(T input) { const TOut out = {0x12345678}; TOut result = pack(input, status); - if (status == nil::marshalling::status_type::success && equal(result.begin(), result.end(), out.begin())) { + if (status == nil::crypto3::marshalling::status_type::success && equal(result.begin(), result.end(), out.begin())) { std::cout << "success" << std::endl; } else { std::cout << "fail" << std::endl; @@ -73,7 +73,7 @@ void to_small_vector(T input) { const TOut out = {0x12, 0x34, 0x56, 0x78}; TOut result = pack(input, status); - if (status == nil::marshalling::status_type::success && std::equal(result.begin(), result.end(), out.begin())) { + if (status == nil::crypto3::marshalling::status_type::success && std::equal(result.begin(), result.end(), out.begin())) { std::cout << "success" << std::endl; } else { std::cout << "fail" << std::endl; @@ -87,7 +87,7 @@ void to_big_array(T input) { const TOut out = {0x12345678}; TOut result = pack(input, status); - if (status == nil::marshalling::status_type::success && std::equal(result.begin(), result.end(), out.begin())) { + if (status == nil::crypto3::marshalling::status_type::success && std::equal(result.begin(), result.end(), out.begin())) { std::cout << "success" << std::endl; } else { std::cout << "fail" << std::endl; @@ -101,7 +101,7 @@ void to_small_array(T input) { TOut out = {0x12, 0x34, 0x56, 0x78}; TOut result = pack(input, status); - if (status == nil::marshalling::status_type::success && std::equal(result.begin(), result.end(), out.begin())) { + if (status == nil::crypto3::marshalling::status_type::success && std::equal(result.begin(), result.end(), out.begin())) { std::cout << "success" << std::endl; } else { std::cout << "fail" << std::endl; @@ -115,7 +115,7 @@ void to_type(T input) { TOut out = 0x12345678; TOut result = pack(input, status); - if (status == nil::marshalling::status_type::success && result == out) { + if (status == nil::crypto3::marshalling::status_type::success && result == out) { std::cout << "success" << std::endl; } else { std::cout << "fail" << std::endl; @@ -129,7 +129,7 @@ void to_marshalling_type(T input) { std::uint16_t out = 0x1234; TOut result = pack(input, status); - if (status == nil::marshalling::status_type::success && result.value() == out) { + if (status == nil::crypto3::marshalling::status_type::success && result.value() == out) { std::cout << "success" << std::endl; } else { std::cout << "fail" << std::endl; @@ -181,4 +181,4 @@ int main(int argc, char *argv[]) { to_different_types(type_in); std::cout << "From marshalling type to:" << std::endl; to_different_types(marshalling_type_in); -} \ No newline at end of file +} diff --git a/crypto3/libs/marshalling/core/include/nil/detail/type_traits.hpp b/crypto3/libs/marshalling/core/include/nil/detail/type_traits.hpp index 9873546cca..7c57066c01 100644 --- a/crypto3/libs/marshalling/core/include/nil/detail/type_traits.hpp +++ b/crypto3/libs/marshalling/core/include/nil/detail/type_traits.hpp @@ -34,6 +34,7 @@ #include #include +#ifndef GENERATE_HAS_MEMBER_TYPE #define GENERATE_HAS_MEMBER_TYPE(Type) \ template \ class HasMemberType_##Type { \ @@ -63,7 +64,9 @@ \ template \ struct has_##Type : public std::integral_constant::RESULT> { }; +#endif +#ifndef GENERATE_HAS_MEMBER #define GENERATE_HAS_MEMBER(member) \ template \ class HasMember_##member { \ @@ -93,7 +96,9 @@ \ template \ struct has_##member : public std::integral_constant::RESULT> { }; +#endif +#ifndef GENERATE_HAS_MEMBER_FUNCTION #define GENERATE_HAS_MEMBER_FUNCTION(Function, ...) \ \ template \ @@ -115,7 +120,9 @@ \ static bool const value = sizeof(f(0)) == 2; \ }; +#endif +#ifndef GENERATE_HAS_MEMBER_CONST_FUNCTION #define GENERATE_HAS_MEMBER_CONST_FUNCTION(Function, ...) \ \ template \ @@ -137,7 +144,9 @@ \ static bool const value = sizeof(f(0)) == 2; \ }; +#endif +#ifndef GENERATE_HAS_MEMBER_RETURN_FUNCTION #define GENERATE_HAS_MEMBER_RETURN_FUNCTION(Function, ReturnType, ...) \ \ template \ @@ -165,7 +174,9 @@ \ static bool const value = sizeof(f(0)) == 2; \ }; +#endif +#ifndef GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION #define GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(Function, ReturnType, ...) \ \ template \ @@ -193,8 +204,9 @@ \ static bool const value = sizeof(f(0)) == 2; \ }; +#endif -namespace nil { +namespace nil::crypto3::marshalling { namespace detail { GENERATE_HAS_MEMBER_TYPE(iterator) @@ -294,4 +306,4 @@ namespace nil { } // namespace detail } // namespace nil -#endif // NIL_DETAIL_TYPE_TRAITS_HPP \ No newline at end of file +#endif // NIL_DETAIL_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/algorithms/pack.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/algorithms/pack.hpp index e114944a13..5a6f207318 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/algorithms/pack.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/algorithms/pack.hpp @@ -29,7 +29,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { /*! * @defgroup marshalling Marshalling @@ -60,7 +60,7 @@ namespace nil { */ template typename std::enable_if< - nil::detail::is_range::value, + detail::is_range::value, detail::range_repack_impl>::type pack(const SinglePassRange &val, status_type &status) { @@ -69,7 +69,7 @@ namespace nil { } template - typename std::enable_if::value, + typename std::enable_if::value, detail::value_repack_impl>::type pack(const TInput &val, status_type &status) { @@ -93,7 +93,7 @@ namespace nil { */ template typename std::enable_if< - nil::detail::is_iterator::value + detail::is_iterator::value && std::is_integral::value_type>::value, detail::range_repack_impl>::type pack(InputIterator first, InputIterator last, status_type &status) { @@ -102,7 +102,7 @@ namespace nil { } template - typename std::enable_if::value && nil::detail::is_iterator::value, + typename std::enable_if::value && detail::is_iterator::value, TOutputIterator>::type pack(const TInput &val, TOutputIterator out, status_type &status) { using T = typename std::iterator_traits::value_type; @@ -111,8 +111,8 @@ namespace nil { } template - typename std::enable_if::value - && nil::detail::is_iterator::value, + typename std::enable_if::value + && detail::is_iterator::value, TOutputIterator>::type pack(const SinglePassRange &rng_input, TOutputIterator out, status_type &status) { BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); @@ -122,8 +122,8 @@ namespace nil { } template - typename std::enable_if::value - && nil::detail::is_iterator::value, + typename std::enable_if::value + && detail::is_iterator::value, TOutputIterator>::type pack(InputIterator first, InputIterator last, TOutputIterator out, status_type &status) { using T = typename std::iterator_traits::value_type; @@ -132,7 +132,7 @@ namespace nil { } template - typename std::enable_if::value && nil::detail::is_range::value + typename std::enable_if::value && detail::is_range::value && std::is_constructible::const_iterator, typename std::vector::const_iterator>::value, @@ -147,7 +147,7 @@ namespace nil { } template - typename std::enable_if::value && nil::detail::is_range::value + typename std::enable_if::value && detail::is_range::value && !std::is_constructible::const_iterator, typename std::vector::const_iterator>::value, @@ -161,8 +161,8 @@ namespace nil { } template - typename std::enable_if::value - && nil::detail::is_range::value + typename std::enable_if::value + && detail::is_range::value && std::is_constructible::value, @@ -179,7 +179,7 @@ namespace nil { template typename std::enable_if< - nil::detail::is_range::value && nil::detail::is_range::value + detail::is_range::value && detail::is_range::value && !std::is_constructible< SinglePassRange2, typename std::vector::const_iterator, @@ -195,7 +195,7 @@ namespace nil { template typename std::enable_if< - nil::detail::is_iterator::value && nil::detail::is_range::value + detail::is_iterator::value && detail::is_range::value && std::is_constructible< SinglePassRange, typename std::vector::const_iterator, @@ -211,8 +211,8 @@ namespace nil { } template - typename std::enable_if::value - && nil::detail::is_range::value + typename std::enable_if::value + && detail::is_range::value && !std::is_constructible::value, @@ -225,8 +225,8 @@ namespace nil { } template - typename std::enable_if::value - && !(nil::detail::is_range::value || nil::detail::is_array::value) + typename std::enable_if::value + && !(detail::is_range::value || detail::is_array::value) && !std::is_same::value, status_type>::type pack(InputIterator first, InputIterator last, TOutput &rng_output) { @@ -237,8 +237,8 @@ namespace nil { } template - typename std::enable_if::value - && !(nil::detail::is_range::value || nil::detail::is_array::value) + typename std::enable_if::value + && !(detail::is_range::value || detail::is_array::value) && !std::is_same::value, status_type>::type pack(const SinglePassRange &rng_input, TOutput &rng_output) { @@ -249,7 +249,7 @@ namespace nil { } template - typename std::enable_if::value && nil::detail::is_iterator::value, + typename std::enable_if::value && detail::is_iterator::value, status_type>::type pack(const TInput &val, TOutputIterator out) { @@ -261,8 +261,8 @@ namespace nil { } template - typename std::enable_if::value - && nil::detail::is_iterator::value, + typename std::enable_if::value + && detail::is_iterator::value, status_type>::type pack(const SinglePassRange &rng_input, TOutputIterator out) { BOOST_RANGE_CONCEPT_ASSERT((boost::SinglePassRangeConcept)); @@ -274,8 +274,8 @@ namespace nil { } template - typename std::enable_if::value - && nil::detail::is_iterator::value, + typename std::enable_if::value + && detail::is_iterator::value, status_type>::type pack(InputIterator first, InputIterator last, TOutputIterator out) { using T = typename std::iterator_traits::value_type; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/assert_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/assert_type.hpp index 87359e5f3e..40d75e1846 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/assert_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/assert_type.hpp @@ -34,7 +34,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { /// @brief Base class for any custom assertion behaviour. @@ -103,7 +103,7 @@ namespace nil { /// assertion failure. /// @tparam TAssert Class derived from Assert that implements new custom /// behaviour of the assertion failure. - /// @pre TAssert class must be derived from nil::marshalling::assert_type. + /// @pre TAssert class must be derived from nil::crypto3::marshalling::assert_type. /// @headerfile nil/marshalling/assert_type.hpp template class enable_assert { @@ -154,7 +154,7 @@ namespace nil { #ifndef NOSTDLIB #define MARSHALLING_ASSERT_FAIL_FUNC(expr) assert(expr) #else // #ifndef NOSTDLIB -#define MARSHALLING_ASSERT_FAIL_FUNC(expr) nil::marshalling::assert_manager::instance().infinite_loop() +#define MARSHALLING_ASSERT_FAIL_FUNC(expr) nil::crypto3::marshalling::assert_manager::instance().infinite_loop() #endif // #ifndef NOSTDLIB /// @endcond @@ -167,8 +167,8 @@ namespace nil { /// @param expr Boolean expression #define MARSHALLING_ASSERT(expr) \ ((expr) ? static_cast(0) : \ - (nil::marshalling::assert_manager::instance().has_assert_registered() ? \ - nil::marshalling::assert_manager::instance().get_assert()->fail( \ + (nil::crypto3::marshalling::assert_manager::instance().has_assert_registered() ? \ + nil::crypto3::marshalling::assert_manager::instance().get_assert()->fail( \ #expr, __FILE__, __LINE__, MARSHALLING_ASSERT_FUNCTION_STR) : \ MARSHALLING_ASSERT_FAIL_FUNC(expr))) diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/container/array_view.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/container/array_view.hpp index f1c4752df5..7e1cb12f34 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/container/array_view.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/container/array_view.hpp @@ -24,7 +24,7 @@ //---------------------------------------------------------------------------// /// @file -/// @brief Contains nil::marshalling::container::array_view class. +/// @brief Contains nil::crypto3::marshalling::container::array_view class. #ifndef MARSHALLING_ARRAY_VIEW_HPP #define MARSHALLING_ARRAY_VIEW_HPP @@ -34,7 +34,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace container { @@ -271,9 +271,9 @@ namespace nil { namespace std { /// @brief Specializes the std::swap algorithm. - /// @related nil::marshalling::container::ArrayView + /// @related nil::crypto3::marshalling::container::ArrayView template - void swap(nil::marshalling::container::array_view &view1, nil::marshalling::container::array_view &view2) { + void swap(nil::crypto3::marshalling::container::array_view &view1, nil::crypto3::marshalling::container::array_view &view2) { view1.swap(view2); } diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_queue.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_queue.hpp deleted file mode 100644 index 039de509ba..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_queue.hpp +++ /dev/null @@ -1,2804 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -/// @file nil/marshalling/container/static_queue.hpp -/// This file contains the definition and implementation of the static queue, -/// which also can be used as circular buffer. - -#ifndef MARSHALLING_STATIC_QUEUE_HPP -#define MARSHALLING_STATIC_QUEUE_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace nil { - namespace marshalling { - namespace container { - namespace detail { - - template - class static_queue_base { - public: - template - class iterator_base; - - class const_iterator; - - class iterator; - - protected: - using value_type = T; - using storage_type = - typename std::aligned_storage::value>::type; - using storage_type_ptr = storage_type *; - using const_storage_type_ptr = const storage_type *; - using size_type = std::size_t; - using reference = value_type &; - using const_reference = const value_type &; - using pointer = value_type *; - using const_pointer = const value_type *; - using linearised_iterator = pointer; - using const_linearised_iterator = const_pointer; - using reverse_linearised_iterator = std::reverse_iterator; - using const_reverse_linearised_iterator = std::reverse_iterator; - using linearised_iterator_range = std::pair; - using const_linearised_iterator_range - = std::pair; - - static_queue_base(storage_type_ptr data, std::size_t capacity) : - data_(data), capacity_(capacity), startIdx_(0), count_(0) { - } - - static_queue_base(const static_queue_base &) = delete; - - static_queue_base(static_queue_base &&) = delete; - - ~static_queue_base() noexcept { - clear(); - } - - static_queue_base &operator=(const static_queue_base &other) { - if (this == &other) { - return *this; - } - - clear(); - assignElements(other); - return *this; - } - - static_queue_base &operator=(static_queue_base &&other) { - if (this == &other) { - return *this; - } - - clear(); - assignElements(std::move(other)); - return *this; - } - - constexpr std::size_t capacity() const { - return capacity_; - } - - std::size_t size() const { - return count_; - } - - void clear() { - while (!empty()) { - popFront(); - } - } - - bool empty() const { - return (size() == 0); - } - - bool full() const { - return (size() == capacity()); - } - - reference front() { - MARSHALLING_ASSERT(!empty()); - return (*this)[0]; - } - - const_reference front() const { - MARSHALLING_ASSERT(!empty()); - return (*this)[0]; - } - - reference back() { - auto constThis = static_cast(this); - return const_cast(constThis->back()); - } - - const_reference back() const { - MARSHALLING_ASSERT(!empty()); - if (empty()) { - return (*this)[0]; // Back() on empty queue - } - - return (*this)[count_ - 1]; - } - - void pop_front() { - MARSHALLING_ASSERT(!empty()); // Queue musn't be empty - if (empty()) { - // Do nothing - return; - } - - reference element = front(); - element.~T(); - - --count_; - ++startIdx_; - if ((capacity() <= startIdx_) || (empty())) { - startIdx_ = 0; - } - } - - void pop_front(std::size_t count) { - MARSHALLING_ASSERT(count <= size()); - while ((!empty()) && (count > 0)) { - popFront(); - --count; - } - } - - void pop_back() { - MARSHALLING_ASSERT(!empty()); - if (empty()) { - // Do nothing - return; - } - - reference element = back(); - element.~T(); - - --count_; - } - - void pop_back(std::size_t count) { - MARSHALLING_ASSERT(count <= size()); - while ((!empty()) && (count > 0)) { - popBack(); - --count; - } - } - - reference operator[](std::size_t index) { - auto constThis = static_cast(this); - return const_cast((*constThis)[index]); - } - - const_reference operator[](std::size_t index) const { - MARSHALLING_ASSERT(index < size()); - return element_at_index(index); - } - - reference at(std::size_t index) { - auto constThis = static_cast(this); - return const_cast(constThis->at(index)); - } - - const_reference at(std::size_t index) const { - if (index >= size()) { - throw std::out_of_range(std::string("Index is out of range")); - } - return (*this)[index]; - } - - int index_of(const_reference element) const { - const_pointer elementPtr = &element; - auto cellPtr = reinterpret_cast(elementPtr); - if ((cellPtr < &data_[0]) || (&data_[capacity()] <= cellPtr)) { - // invalid, element is not within array boundaries - return -1; - } - - auto rawIdx = cellPtr - &data_[0]; - std::size_t actualIdx = capacity(); // invalid value - if (rawIdx < startIdx_) { - actualIdx = (capacity() - startIdx_) + rawIdx; - } else { - actualIdx = rawIdx - startIdx_; - } - - if (size() <= actualIdx) { - // Element is out of range - return -1; - } - - return actualIdx; - } - - linearised_iterator invalid_iter() { - return reinterpret_cast(&data_[capacity()]); - } - - const_linearised_iterator invalid_iter() const { - return reinterpret_cast(&data_[capacity()]); - } - - reverse_linearised_iterator invalid_reverse_iter() { - return reverse_linearised_iterator(reinterpret_cast(&data_[0])); - } - - const_reverse_linearised_iterator invalid_reverse_iter() const { - return reverse_linearised_iterator(reinterpret_cast(&data_[0])); - } - - linearised_iterator lbegin() { - if (!linearised()) { - return invalidIter(); - } - - return reinterpret_cast(&data_[0] + startIdx_); - } - - const_linearised_iterator lbegin() const { - return clbegin(); - } - - const_linearised_iterator clbegin() const { - if (!linearised()) { - return invalidIter(); - } - - return reinterpret_cast(&data_[0] + startIdx_); - } - - reverse_linearised_iterator rlbegin() { - if (!linearised()) { - return invalidReverseIter(); - } - - return reverse_linearised_iterator(lend()); - } - - const_reverse_linearised_iterator rlbegin() const { - return crlbegin(); - } - - const_reverse_linearised_iterator crlbegin() const { - if (!linearised()) { - return invalidReverseIter(); - } - return const_reverse_linearised_iterator(lend()); - } - - linearised_iterator lend() { - if (!linearised()) { - return invalidIter(); - } - - return lbegin() + size(); - } - - const_linearised_iterator lend() const { - return clend(); - } - - const_linearised_iterator clend() const { - if (!linearised()) { - return invalidIter(); - } - - return clbegin() + size(); - } - - reverse_linearised_iterator rlend() { - if (!linearised()) { - return invalidReverseIter(); - } - - return rlbegin() + size(); - } - - const_reverse_linearised_iterator rlend() const { - return crlend(); - } - - const_reverse_linearised_iterator crlend() const { - if (!linearised()) { - return invalidReverseIter(); - } - - return rlbegin() + size(); - } - - void linearise() { - if (linearised()) { - // Nothing to do - return; - } - - auto rangeOne = arrayOne(); - auto rangeOneSize = std::distance(rangeOne.first, rangeOne.second); - MARSHALLING_ASSERT(0 < rangeOneSize); - auto rangeTwo = arrayTwo(); - auto rangeTwoSize = std::distance(rangeTwo.first, rangeTwo.second); - MARSHALLING_ASSERT(0 < rangeTwoSize); - MARSHALLING_ASSERT((rangeOneSize + rangeTwoSize) == size()); - auto remSpaceSize = capacity() - size(); - - if (rangeTwoSize <= remSpaceSize) { - linearise_by_move_one_two(rangeOne, rangeTwo); - return; - } - - if (rangeOneSize <= remSpaceSize) { - linearise_by_move_two_one(rangeOne, rangeTwo); - return; - } - - if (rangeOneSize < rangeTwoSize) { - linearise_by_pop_one(); - } - - linearise_by_pop_two(); - } - - bool linearised() const { - return (empty() || ((startIdx_ + size()) <= capacity())); - } - - linearised_iterator_range array_one() { - auto constThis = static_cast(this); - auto constRange = constThis->arrayOne(); - return linearised_iterator_range(const_cast(constRange.first), - const_cast(constRange.second)); - } - - const_linearised_iterator_range array_one() const { - auto begCell = &data_[startIdx_]; - auto endCell = std::min(&data_[startIdx_ + size()], &data_[capacity()]); - return const_linearised_iterator_range(reinterpret_cast(begCell), - reinterpret_cast(endCell)); - } - - linearised_iterator_range array_two() { - auto constThis = static_cast(this); - auto constRange = constThis->arrayTwo(); - return linearised_iterator_range(const_cast(constRange.first), - const_cast(constRange.second)); - } - - const_linearised_iterator_range array_two() const { - if (linearised()) { - auto iter = arrayOne().second; - return const_linearised_iterator_range(iter, iter); - } - - auto begCell = &data_[0]; - auto endCell = &data_[(startIdx_ + size()) - capacity()]; - - return const_linearised_iterator_range(reinterpret_cast(begCell), - reinterpret_cast(endCell)); - } - - void resize(std::size_t newSize) { - MARSHALLING_ASSERT(newSize <= capacity()); - if (capacity() < newSize) { - return; - } - - if (size() <= newSize) { - while (size() < newSize) { - push_back_not_full(value_type()); - } - - return; - } - - // New requested size is less than existing now - popBack(size() - newSize); - } - - linearised_iterator erase(linearised_iterator pos) { - MARSHALLING_ASSERT(pos != invalidIter()); - MARSHALLING_ASSERT(!empty()); - auto rangeOne = arrayOne(); - auto rangeTwo = arrayTwo(); - - auto isInRangeFunc - = [](linearised_iterator pos, const linearised_iterator_range range) -> bool { - return ((range.first <= pos) && (pos < range.second)); - }; - - MARSHALLING_ASSERT(isInRangeFunc(pos, rangeOne) || isInRangeFunc(pos, rangeTwo)); - - if (isInRangeFunc(pos, rangeOne)) { - std::move_backward(rangeOne.first, pos, pos + 1); - - popFront(); - rangeOne = arrayOne(); - if (isInRangeFunc(pos, rangeOne)) { - return pos + 1; - } - - return rangeOne.first; - } - - if (isInRangeFunc(pos, rangeTwo)) { - std::move(pos + 1, rangeTwo.second, pos); - popBack(); - if (!linearised()) { - return pos; - } - return arrayOne().second; - } - - MARSHALLING_ASSERT(!"Invalid iterator is used"); - return invalidIter(); - } - - iterator erase(iterator pos) { - MARSHALLING_ASSERT(pos != end()); - MARSHALLING_ASSERT(!empty()); - pointer elem = &(*pos); - auto rangeOne = arrayOne(); - auto rangeTwo = arrayTwo(); - - auto isInRangeFunc = [](pointer elemPtr, const linearised_iterator_range range) -> bool { - return ((&(*range.first) <= elemPtr) && (elemPtr < &(*range.second))); - }; - - MARSHALLING_ASSERT(isInRangeFunc(elem, rangeOne) || isInRangeFunc(elem, rangeTwo)); - - if (isInRangeFunc(elem, rangeOne)) { - std::move_backward(rangeOne.first, elem, elem + 1); - - popFront(); - rangeOne = arrayOne(); - if (isInRangeFunc(elem, rangeOne)) { - return pos + 1; - } - - return begin(); - } - - if (isInRangeFunc(elem, rangeTwo)) { - std::move(elem + 1, rangeTwo.second, elem); - popBack(); - if (!linearised()) { - return pos; - } - return end(); - } - - MARSHALLING_ASSERT(!"Invalid iterator is used"); - return end(); - } - - iterator begin() { - return iterator(*this, reinterpret_cast(&data_[0])); - } - - const_iterator begin() const { - return cbegin(); - } - - const_iterator cbegin() const { - return const_iterator(*this, reinterpret_cast(&data_[0])); - } - - iterator end() { - return iterator(*this, reinterpret_cast(&data_[size()])); - } - - const_iterator end() const { - return cend(); - } - - const_iterator cend() const { - return const_iterator(*this, reinterpret_cast(&data_[size()])); - } - - template - void assign_elements(TOther &&other) { - static_assert(std::is_base_of::type>::value, - "Assignment works only on the same types"); - - using DecayedQueueType = typename std::decay::type; - using NonRefQueueType = typename std::remove_reference::type; - - using QueueValueType = typename std::conditional::value, - const typename DecayedQueueType::value_type, - typename DecayedQueueType::value_type>::type; - - using ElemRefType = - typename std::conditional::value, - typename std::add_rvalue_reference::type, - typename std::add_lvalue_reference::type>::type; - - MARSHALLING_ASSERT(other.size() <= capacity()); - MARSHALLING_ASSERT(empty()); - - auto rangeOne = other.arrayOne(); - for (auto iter = rangeOne.first; iter != rangeOne.second; ++iter) { - push_back_not_full(std::forward(*iter)); - } - - auto rangeTwo = other.arrayTwo(); - for (auto iter = rangeTwo.first; iter != rangeTwo.second; ++iter) { - push_back_not_full(std::forward(*iter)); - } - } - - template - void push_back(U &&value) { - MARSHALLING_ASSERT(!full()); - if (full()) { - return; - } - push_back_not_full(std::forward(value)); - } - - template - void emplace_back(TArgs &&...args) { - MARSHALLING_ASSERT(!full()); - if (full()) { - return; - } - emplace_back_not_full(std::forward(args)...); - } - - template - void push_front(U &&value) { - MARSHALLING_ASSERT(!full()); - if (full()) { - return; - } - - push_front_not_full(std::forward(value)); - } - - template - linearised_iterator insert(linearised_iterator pos, U &&value) { - MARSHALLING_ASSERT(!full()); - if (full()) { - return invalidIter(); - } - - return insert_not_full(pos, std::forward(value)); - } - - bool operator==(const static_queue_base &other) const { - if (size() != other.size()) { - return false; - } - - auto rangeOne = arrayOne(); - auto rangeOneSize = std::distance(rangeOne.first, rangeOne.second); - auto rangeTwo = arrayTwo(); - auto otherRangeOne = other.arrayOne(); - auto otherRangeOneSize = std::distance(otherRangeOne.first, otherRangeOne.second); - auto otherRangeTwo = other.arrayTwo(); - - auto firstCompSize = std::min(rangeOneSize, otherRangeOneSize); - auto firstCompEnd = rangeOne.first + firstCompSize; - - auto currIter = rangeOne.first; - auto otherCurrIter = otherRangeOne.first; - if (!std::equal(currIter, firstCompEnd, otherCurrIter)) { - return false; - } - - currIter = firstCompEnd; - otherCurrIter += firstCompSize; - - if (currIter != rangeOne.first) { - otherCurrIter = otherRangeTwo.first; - if (!std::equal(currIter, rangeOne.second, otherCurrIter)) { - return false; - } - otherCurrIter += rangeOne.second - currIter; - currIter = rangeTwo.first; - } else { - currIter = rangeTwo.first; - if (!std::equal(otherCurrIter, otherRangeOne.second, currIter)) { - return false; - } - - currIter += otherRangeOne.second - otherCurrIter; - otherCurrIter = otherRangeOne.first; - } - - MARSHALLING_ASSERT(std::distance(currIter, rangeTwo.second) - == std::distance(otherCurrIter, otherRangeTwo.second)); - return std::equal(currIter, rangeTwo.second, otherCurrIter); - } - - bool operator!=(const static_queue_base &other) const { - return !(*this == other); - } - - private: - template - void create_value_at_index(U &&value, std::size_t index) { - MARSHALLING_ASSERT(index < capacity()); - reference elementRef = element_at_index(index); - auto elementPtr = new (&elementRef) value_type(std::forward(value)); - static_cast(elementPtr); - } - - template - void push_back_not_full(U &&value) { - MARSHALLING_ASSERT(!full()); - create_value_at_index(std::forward(value), size()); - ++count_; - } - - template - void emplace_back_not_full(TArgs &&...args) { - MARSHALLING_ASSERT(!full()); - reference elementRef = element_at_index(size()); - auto elementPtr = new (&elementRef) value_type(std::forward(args)...); - static_cast(elementPtr); - ++count_; - } - - template - void push_front_not_full(U &&value) { - MARSHALLING_ASSERT(!full()); - create_value_at_index(std::forward(value), capacity() - 1); - if (startIdx_ == 0) { - startIdx_ = capacity() - 1; - } else { - --startIdx_; - } - - ++count_; - } - - template - linearised_iterator insert_not_full(linearised_iterator pos, U &&value) { - MARSHALLING_ASSERT(!full()); - MARSHALLING_ASSERT(pos != invalidIter()); - auto rangeOne = arrayOne(); - auto rangeTwo = arrayTwo(); - - if (pos == rangeOne.first) { - push_front_not_full(std::forward(value)); - return arrayOne().first; - } - - if (pos == rangeTwo.second) { - push_back_not_full(std::forward(value)); - return arrayTwo().second - 1; - } - - auto isInRangeFunc - = [](linearised_iterator pos, const linearised_iterator_range range) -> bool { - return ((range.first <= pos) && (pos < range.second)); - }; - - MARSHALLING_ASSERT(isInRangeFunc(pos, rangeOne) || isInRangeFunc(pos, rangeTwo)); - - if (isInRangeFunc(pos, rangeOne)) { - push_front_not_full(std::move(front())); // move first element - - std::move(rangeOne.first + 1, pos, rangeOne.first); - *pos = std::forward(value); - return pos; - } - - if (isInRangeFunc(pos, rangeTwo)) { - push_back_not_full(std::move(back())); // move last element - std::move_backward(pos, rangeTwo.second - 1, rangeTwo.second); - *pos = std::forward(value); - return pos; - } - - return invalidIter(); - } - - reference element_at_index(std::size_t index) { - auto constThis = static_cast(this); - return const_cast(constThis->element_at_index(index)); - } - - const_reference element_at_index(std::size_t index) const { - std::size_t rawIdx = startIdx_ + index; - while (capacity() <= rawIdx) { - rawIdx = rawIdx - capacity(); - } - - auto cellAddr = &data_[rawIdx]; - return *(reinterpret_cast(cellAddr)); - } - - template - void linearise_by_move(const std::pair firstRange, - const std::pair - secondRange) { - auto movConstructFirstSize = std::min( - std::size_t(std::distance(firstRange.first, firstRange.second)), capacity() - size()); - auto movConstructFirstEnd = firstRange.first + movConstructFirstSize; - MARSHALLING_ASSERT(movConstructFirstEnd <= firstRange.second); - MARSHALLING_ASSERT(movConstructFirstSize <= (firstRange.second - firstRange.first)); - - auto newPlacePtr = secondRange.second; - for (auto iter = firstRange.first; iter != movConstructFirstEnd; ++iter) { - auto ptr = new (&(*newPlacePtr)) value_type(std::move(*iter)); - static_cast(ptr); - ++newPlacePtr; - } - - std::move(movConstructFirstEnd, firstRange.second, newPlacePtr); - newPlacePtr += (firstRange.second - movConstructFirstEnd); - - auto movConstructTwoSize = 0; - if (newPlacePtr < firstRange.first) { - movConstructTwoSize = std::min(std::distance(newPlacePtr, firstRange.first), - std::distance(secondRange.first, secondRange.second)); - } - - auto movConstructTwoEnd = secondRange.first + movConstructTwoSize; - for (auto iter = secondRange.first; iter != movConstructTwoEnd; ++iter) { - auto ptr = new (&(*newPlacePtr)) value_type(std::move(*iter)); - static_cast(ptr); - ++newPlacePtr; - } - - std::move(movConstructTwoEnd, secondRange.second, newPlacePtr); - newPlacePtr += (secondRange.second - movConstructTwoEnd); - - for (auto iter = std::max(newPlacePtr, firstRange.first); iter != firstRange.second; ++iter) { - iter->~T(); - } - - for (auto iter = secondRange.first; iter != secondRange.second; ++iter) { - iter->~T(); - } - } - - void linearise_by_move_one_two(const linearised_iterator_range &rangeOne, - const linearised_iterator_range &rangeTwo) { - linearise_by_move(rangeOne, rangeTwo); - startIdx_ = std::distance(rangeTwo.first, rangeTwo.second); - } - - void linearise_by_move_two_one(const linearised_iterator_range &rangeOne, - const linearised_iterator_range &rangeTwo) { - using RevIter = std::reverse_iterator; - linearise_by_move(std::make_pair(RevIter(rangeTwo.second), RevIter(rangeTwo.first)), - std::make_pair(RevIter(rangeOne.second), RevIter(rangeOne.first))); - - startIdx_ = (capacity() - std::distance(rangeOne.first, rangeOne.second)) - size(); - } - - void linearise_by_pop_one() { - if (linearised()) { - return; - } - - value_type tmp(std::move(front())); - popFront(); - linearise_by_pop_one(); - if (startIdx_ == 0) { - using RevIter = std::reverse_iterator; - auto target = RevIter(reinterpret_cast(&data_[capacity()])); - move_range(rlbegin(), rlend(), target); - startIdx_ = capacity() - size(); - } - pushFront(std::move(tmp)); - MARSHALLING_ASSERT(linearised()); - } - - void linearise_by_pop_two() { - if (linearised()) { - return; - } - - value_type tmp(std::move(back())); - popBack(); - linearise_by_pop_two(); - if (startIdx_ != 0) { - auto target = reinterpret_cast(&data_[0]); - move_range(lbegin(), lend(), target); - startIdx_ = 0; - } - push_back(std::move(tmp)); - MARSHALLING_ASSERT(linearised()); - } - - template - void move_range(TIter rangeBeg, TIter rangeEnd, TIter target) { - MARSHALLING_ASSERT(target < rangeBeg); - auto moveConstructSize - = std::min(std::distance(rangeBeg, rangeEnd), std::distance(target, rangeBeg)); - - TIter moveConstructEnd = rangeBeg + moveConstructSize; - for (auto iter = rangeBeg; iter != moveConstructEnd; ++iter) { - auto ptr = new (&(*target)) value_type(std::move(*iter)); - static_cast(ptr); - ++target; - } - - MARSHALLING_ASSERT(target < moveConstructEnd); - std::move(moveConstructEnd, rangeEnd, target); - target += std::distance(moveConstructEnd, rangeEnd); - - for (auto iter = std::max(target, rangeBeg); iter != rangeEnd; ++iter) { - iter->~T(); - } - } - - storage_type_ptr const data_; - const std::size_t capacity_; - std::size_t startIdx_; - std::size_t count_; - }; - - template - template - class static_queue_base::iterator_base { - friend class StaticQueueBase; - - public: - iterator_base(const iterator_base &) = default; - - ~iterator_base() noexcept = default; - - protected: - using Derived = TDerived; - using QueueType = TQueueType; - using ArrayIterator = decltype(std::declval().lbegin()); - using IteratorCategory = typename std::iterator_traits::iterator_category; - using iterator_category = IteratorCategory; - using value_type = typename std::iterator_traits::value_type; - using value_type = value_type; - using DifferenceType = typename std::iterator_traits::difference_type; - using difference_type = DifferenceType; - using Pointer = typename std::iterator_traits::pointer; - using pointer = Pointer; - using ConstPointer = typename std::add_pointer< - typename std::add_const::type>::type>::type; - using Reference = typename std::iterator_traits::reference; - using reference = Reference; - using ConstReference = typename std::add_const::type; - - iterator_base(QueueType &queue, ArrayIterator iterator) : queue_(queue), iterator_(iterator) { - } - - Derived &operator=(const iterator_base &other) { - MARSHALLING_ASSERT(&queue_ == &other.queue_); - iterator_ = other.iterator_; // No need to check for self assignment - return static_cast(*this); - } - - Derived &operator++() { - ++iterator_; - return static_cast(*this); - } - - Derived operator++(int) { - iterator_base copy(*this); - ++iterator_; - return std::move(*(static_cast(©))); - } - - Derived &operator--() { - --iterator_; - return static_cast(*this); - } - - Derived operator--(int) { - iterator_base copy(*this); - --iterator_; - return std::move(*(static_cast(©))); - } - - Derived &operator+=(DifferenceType value) { - iterator_ += value; - return static_cast(*this); - } - - Derived &operator-=(DifferenceType value) { - iterator_ -= value; - return static_cast(*this); - } - - Derived operator+(DifferenceType value) const { - iterator_base copy(*this); - copy += value; - return std::move(*(static_cast(©))); - } - - Derived operator-(DifferenceType value) const { - iterator_base copy(*this); - copy -= value; - return std::move(*(static_cast(©))); - } - - DifferenceType operator-(const iterator_base &other) const { - return iterator_ - other.iterator_; - } - - bool operator==(const iterator_base &other) const { - return (iterator_ == other.iterator_); - } - - bool operator!=(const iterator_base &other) const { - return (iterator_ != other.iterator_); - } - - bool operator<(const iterator_base &other) const { - return iterator_ < other.iterator_; - } - - bool operator<=(const iterator_base &other) const { - return iterator_ <= other.iterator_; - } - - bool operator>(const iterator_base &other) const { - return iterator_ > other.iterator_; - } - - bool operator>=(const iterator_base &other) const { - return iterator_ >= other.iterator_; - } - - Reference operator*() { - auto &constThisRef = static_cast(*this); - auto &constRef = *constThisRef; - return const_cast(constRef); - } - - ConstReference operator*() const { - auto begCell = reinterpret_cast(&queue_.data_[0]); - auto idx = iterator_ - begCell; - MARSHALLING_ASSERT(0 <= idx); - return queue_[static_cast(idx)]; - } - - Pointer operator->() { - return &(*(*this)); - } - - ConstPointer operator->() const { - return &(*(*this)); - } - - QueueType &getQueue() { - return queue_; - } - - typename std::add_const::type getQueue() const { - return queue_; - } - - ArrayIterator &getIterator() { - return iterator_; - } - - typename std::add_const::type &getIterator() const { - return iterator_; - } - - private: - QueueType &queue_; ///< Queue - ArrayIterator iterator_; ///< Low level array iterator - }; - - template - class static_queue_base::const_iterator - : public static_queue_base::template iterator_base::const_iterator, - const static_queue_base> { - using Base = typename static_queue_base::template iterator_base< - typename static_queue_base::const_iterator, - const static_queue_base>; - - public: - using QueueType = typename Base::QueueType; - using ArrayIterator = typename Base::ArrayIterator; - - const_iterator(const const_iterator &) = default; - - ~const_iterator() noexcept = default; - - const_iterator(QueueType &queue, ArrayIterator iterator) : Base(queue, iterator) { - } - }; - - template - class static_queue_base::iterator - : public static_queue_base::template iterator_base::iterator, - static_queue_base> { - using Base = - typename static_queue_base::template iterator_base::iterator, - static_queue_base>; - - public: - using QueueType = typename Base::QueueType; - using ArrayIterator = typename Base::ArrayIterator; - - iterator(const iterator &) = default; - - ~iterator() noexcept = default; - - iterator(QueueType &queue, ArrayIterator iterator) : Base(queue, iterator) { - } - - operator const_iterator() const { - return const_iterator(Base::getQueue(), Base::getIterator()); - } - }; - - template - class CastWrapperQueueBase : public static_queue_base { - using Base = static_queue_base; - using WrapperElemType = TWrapperElemType; - - using BaseValueType = typename Base::value_type; - using BaseStorageTypePtr = typename Base::storage_type_ptr; - using BaseReference = typename Base::reference; - using BaseConstReference = typename Base::const_reference; - using BasePointer = typename Base::pointer; - using BaseConstPointer = typename Base::const_pointer; - using BaseLinearisedIterator = typename Base::linearised_iterator; - using BaseConstLinearisedIterator = typename Base::const_linearised_iterator; - using BaseReverseLinearisedIterator = typename Base::reverse_linearised_iterator; - using BaseConstReverseLinearisedIterator = typename Base::const_reverse_linearised_iterator; - using BaseLinearisedIteratorRange = typename Base::linearised_iterator_range; - using BaseConstLinearisedIteratorRange = typename Base::const_linearised_iterator_range; - - public: - class ConstIterator; - - class Iterator; - - protected: - using value_type = WrapperElemType; - using storage_type = - typename std::aligned_storage::value>::type; - using StorageTypePtr = storage_type *; - using Reference = value_type &; - using ConstReference = const value_type &; - using Pointer = value_type *; - using ConstPointer = const value_type *; - using LinearisedIterator = Pointer; - using ConstLinearisedIterator = ConstPointer; - using ReverseLinearisedIterator = std::reverse_iterator; - using ConstReverseLinearisedIterator = std::reverse_iterator; - using LinearisedIteratorRange = std::pair; - using ConstLinearisedIteratorRange = std::pair; - - CastWrapperQueueBase(StorageTypePtr data, std::size_t capacity) : - Base(reinterpret_cast(data), capacity) { - static_assert(sizeof(value_type) == sizeof(BaseValueType), - "The times must have identical size."); - } - - ~CastWrapperQueueBase() noexcept = default; - - CastWrapperQueueBase &operator=(const CastWrapperQueueBase &other) = default; - - CastWrapperQueueBase &operator=(CastWrapperQueueBase &&other) = default; - - Reference front() { - return reinterpret_cast(Base::front()); - } - - ConstReference front() const { - return reinterpret_cast(Base::front()); - } - - Reference back() { - return reinterpret_cast(Base::back()); - } - - ConstReference back() const { - return reinterpret_cast(Base::back()); - } - - Reference operator[](std::size_t index) { - return reinterpret_cast(Base::operator[](index)); - } - - ConstReference operator[](std::size_t index) const { - return reinterpret_cast(Base::operator[](index)); - } - - Reference at(std::size_t index) { - return reinterpret_cast(Base::at(index)); - } - - ConstReference at(std::size_t index) const { - return reinterpret_cast(Base::at(index)); - } - - int indexOf(ConstReference element) const { - return Base::indexOf(reinterpret_cast(element)); - } - - LinearisedIterator invalidIter() { - return reinterpret_cast(Base::invalidIter()); - } - - ConstLinearisedIterator invalidIter() const { - return reinterpret_cast(Base::invalidIter()); - } - - ReverseLinearisedIterator invalidReverseIter() { - return ReverseLinearisedIterator( - reinterpret_cast(Base::invalidReverseIter().base())); - } - - ConstReverseLinearisedIterator invalidReverseIter() const { - return ConstReverseLinearisedIterator( - reinterpret_cast(Base::invalidReverseIter().base())); - } - - LinearisedIterator lbegin() { - return reinterpret_cast(Base::lbegin()); - } - - ConstLinearisedIterator lbegin() const { - return reinterpret_cast(Base::lbegin()); - } - - ConstLinearisedIterator clbegin() const { - return reinterpret_cast(Base::clbegin()); - } - - ReverseLinearisedIterator rlbegin() { - return ReverseLinearisedIterator(reinterpret_cast(Base::rlbegin().base())); - } - - ConstReverseLinearisedIterator rlbegin() const { - return ConstReverseLinearisedIterator( - reinterpret_cast(Base::rlbegin().base())); - } - - ConstReverseLinearisedIterator crlbegin() const { - return ConstReverseLinearisedIterator( - reinterpret_cast(Base::crlbegin().base())); - } - - LinearisedIterator lend() { - return reinterpret_cast(Base::lend()); - } - - ConstLinearisedIterator lend() const { - return reinterpret_cast(Base::lend()); - } - - ConstLinearisedIterator clend() const { - return reinterpret_cast(Base::clend()); - } - - ReverseLinearisedIterator rlend() { - return ReverseLinearisedIterator(reinterpret_cast(Base::rlend().base())); - } - - ConstReverseLinearisedIterator rlend() const { - return ConstReverseLinearisedIterator( - reinterpret_cast(Base::rlend().base())); - } - - ConstReverseLinearisedIterator crlend() const { - return ConstReverseLinearisedIterator( - reinterpret_cast(Base::crlend().base())); - } - - LinearisedIteratorRange arrayOne() { - auto range = Base::arrayOne(); - return LinearisedIteratorRange(reinterpret_cast(range.first), - reinterpret_cast(range.second)); - } - - ConstLinearisedIteratorRange arrayOne() const { - auto range = Base::arrayOne(); - return ConstLinearisedIteratorRange(reinterpret_cast(range.first), - reinterpret_cast(range.second)); - } - - LinearisedIteratorRange arrayTwo() { - auto range = Base::arrayTwo(); - return LinearisedIteratorRange(reinterpret_cast(range.first), - reinterpret_cast(range.second)); - } - - ConstLinearisedIteratorRange arrayTwo() const { - auto range = Base::arrayTwo(); - return ConstLinearisedIteratorRange(reinterpret_cast(range.first), - reinterpret_cast(range.second)); - } - - LinearisedIterator erase(LinearisedIterator pos) { - return reinterpret_cast( - Base::erase(reinterpret_cast(pos))); - } - - iterator erase(iterator pos) { - auto tmp = Base::erase(pos); - return *(reinterpret_cast(&tmp)); - } - - iterator begin() { - auto tmp = Base::begin(); - return *(reinterpret_cast(&tmp)); - } - - const_iterator begin() const { - auto tmp = Base::begin(); - return *(reinterpret_cast(&tmp)); - } - - const_iterator cbegin() const { - auto tmp = Base::cbegin(); - return *(reinterpret_cast(&tmp)); - } - - iterator end() { - auto tmp = Base::end(); - return *(reinterpret_cast(&tmp)); - } - - const_iterator end() const { - auto tmp = Base::end(); - return *(reinterpret_cast(&tmp)); - } - - const_iterator cend() const { - auto tmp = Base::cend(); - return *(reinterpret_cast(&tmp)); - } - - void push_back(ConstReference value) { - Base::push_back(reinterpret_cast(value)); - } - - void pushFront(ConstReference value) { - Base::pushFront(reinterpret_cast(value)); - } - - LinearisedIterator insert(LinearisedIterator pos, ConstReference value) { - return reinterpret_cast( - Base::insert(reinterpret_cast(pos), - reinterpret_cast(value))); - } - - void assignElements(const CastWrapperQueueBase &other) { - Base::assignElements(static_cast(other)); - } - - void assignElements(CastWrapperQueueBase &&other) { - Base::assignElements(static_cast(std::move(other))); - } - }; - - template - class CastWrapperQueueBase::ConstIterator - : public static_queue_base::const_iterator { - using Base = typename static_queue_base::const_iterator; - - public: - ConstIterator(const ConstIterator &) = default; - - ConstIterator &operator=(const ConstIterator &) = default; - - ~ConstIterator() noexcept = default; - - protected: - using ExpectedQueueType = const static_queue_base; - using ActualQueueType = const static_queue_base; - using value_type = TWrapperElemType; - using Reference = const value_type &; - using ConstReference = const value_type &; - using Pointer = const value_type *; - using ConstPointer = const value_type *; - using DifferenceType = typename Base::DifferenceType; - - ConstIterator(ExpectedQueueType &queue, Pointer iterator) : - Base(reinterpret_cast(queue), iterator) { - } - - ConstIterator &operator++() { - Base::operator++(); - return *this; - } - - ConstIterator operator++(int dummy) { - auto tmp = Base::operator++(dummy); - return *(static_cast(&tmp)); - } - - ConstIterator &operator--() { - Base::operator--(); - return *this; - } - - ConstIterator operator--(int dummy) { - auto tmp = Base::operator--(dummy); - return *(static_cast(&tmp)); - } - - ConstIterator &operator+=(DifferenceType value) { - Base::operator+=(value); - return *this; - } - - ConstIterator &operator-=(DifferenceType value) { - Base::operator-=(value); - return *this; - } - - ConstIterator operator+(DifferenceType value) const { - auto tmp = Base::operator+(value); - return *(static_cast(&tmp)); - } - - ConstIterator operator-(DifferenceType value) const { - auto tmp = Base::operator-(value); - return *(static_cast(&tmp)); - } - - DifferenceType operator-(const ConstIterator &other) const { - return Base::operator-(other); - } - - Reference operator*() { - auto &ref = Base::operator*(); - return reinterpret_cast(ref); - } - - ConstReference operator*() const { - auto &ref = Base::operator*(); - return reinterpret_cast(ref); - } - - Pointer operator->() { - auto *ptr = Base::operator->(); - return reinterpret_cast(ptr); - } - - ConstPointer operator->() const { - auto *ptr = Base::operator->(); - return reinterpret_cast(ptr); - } - }; - - template - class CastWrapperQueueBase::Iterator - : public static_queue_base::iterator { - using Base = typename static_queue_base::iterator; - - public: - Iterator(const Iterator &) = default; - - Iterator &operator=(const Iterator &) = default; - - ~Iterator() noexcept = default; - - protected: - using ExpectedQueueType = const static_queue_base; - using ActualQueueType = const static_queue_base; - using value_type = TWrapperElemType; - using Reference = value_type &; - using ConstReference = const value_type &; - using Pointer = value_type *; - using ConstPointer = const value_type *; - using DifferenceType = typename Base::DifferenceType; - - Iterator(ExpectedQueueType &queue, Pointer iterator) : - Base(reinterpret_cast(queue), iterator) { - } - - Iterator &operator++() { - Base::operator++(); - return *this; - } - - Iterator operator++(int dummy) { - auto tmp = Base::operator++(dummy); - return *(static_cast(&tmp)); - } - - Iterator &operator--() { - Base::operator--(); - return *this; - } - - Iterator operator--(int dummy) { - auto tmp = Base::operator--(dummy); - return *(static_cast(&tmp)); - } - - Iterator &operator+=(DifferenceType value) { - Base::operator+=(value); - return *this; - } - - Iterator &operator-=(DifferenceType value) { - Base::operator-=(value); - return *this; - } - - Iterator operator+(DifferenceType value) const { - auto tmp = Base::operator+(value); - return *(static_cast(&tmp)); - } - - Iterator operator-(DifferenceType value) const { - auto tmp = Base::operator-(value); - return *(static_cast(&tmp)); - } - - DifferenceType operator-(const Iterator &other) const { - return Base::operator-(other); - } - - Reference operator*() { - auto &ref = Base::operator*(); - return reinterpret_cast(ref); - } - - ConstReference operator*() const { - auto &ref = Base::operator*(); - return reinterpret_cast(ref); - } - - Pointer operator->() { - auto *ptr = Base::operator->(); - return reinterpret_cast(ptr); - } - - ConstPointer operator->() const { - auto *ptr = Base::operator->(); - return reinterpret_cast(ptr); - } - }; - - template - class StaticQueueBaseOptimised : public static_queue_base { - using Base = static_queue_base; - - protected: - using StorageTypePtr = typename Base::storage_type_ptr; - - StaticQueueBaseOptimised(StorageTypePtr data, std::size_t capacity) : Base(data, capacity) { - } - - ~StaticQueueBaseOptimised() noexcept = default; - - StaticQueueBaseOptimised &operator=(const StaticQueueBaseOptimised &other) = default; - - StaticQueueBaseOptimised &operator=(StaticQueueBaseOptimised &&other) = default; - }; - - template<> - class StaticQueueBaseOptimised : public CastWrapperQueueBase { - using Base = CastWrapperQueueBase; - - protected: - using StorageTypePtr = typename Base::StorageTypePtr; - - StaticQueueBaseOptimised(StorageTypePtr data, std::size_t capacity) : Base(data, capacity) { - } - - ~StaticQueueBaseOptimised() noexcept = default; - - StaticQueueBaseOptimised &operator=(const StaticQueueBaseOptimised &other) = default; - - StaticQueueBaseOptimised &operator=(StaticQueueBaseOptimised &&other) = default; - }; - - template<> - class StaticQueueBaseOptimised - : public CastWrapperQueueBase { - using Base = CastWrapperQueueBase; - - protected: - using StorageTypePtr = typename Base::StorageTypePtr; - - StaticQueueBaseOptimised(StorageTypePtr data, std::size_t capacity) : Base(data, capacity) { - } - - ~StaticQueueBaseOptimised() noexcept = default; - - StaticQueueBaseOptimised &operator=(const StaticQueueBaseOptimised &other) = default; - - StaticQueueBaseOptimised &operator=(StaticQueueBaseOptimised &&other) = default; - }; - - template<> - class StaticQueueBaseOptimised - : public CastWrapperQueueBase { - using Base = CastWrapperQueueBase; - - protected: - using StorageTypePtr = typename Base::StorageTypePtr; - - StaticQueueBaseOptimised(StorageTypePtr data, std::size_t capacity) : Base(data, capacity) { - } - - ~StaticQueueBaseOptimised() noexcept = default; - - StaticQueueBaseOptimised &operator=(const StaticQueueBaseOptimised &other) = default; - - StaticQueueBaseOptimised &operator=(StaticQueueBaseOptimised &&other) = default; - }; - - template<> - class StaticQueueBaseOptimised - : public CastWrapperQueueBase { - using Base = CastWrapperQueueBase; - - protected: - using StorageTypePtr = typename Base::StorageTypePtr; - - StaticQueueBaseOptimised(StorageTypePtr data, std::size_t capacity) : Base(data, capacity) { - } - - ~StaticQueueBaseOptimised() noexcept = default; - - StaticQueueBaseOptimised &operator=(const StaticQueueBaseOptimised &other) = default; - - StaticQueueBaseOptimised &operator=(StaticQueueBaseOptimised &&other) = default; - }; - - template - class StaticQueueBaseOptimised - : public CastWrapperQueueBase< - T *, - typename processing::size_to_type::type> { - using Base - = CastWrapperQueueBase::type>; - - protected: - using Base = typename Base::StorageTypePtr; - - StaticQueueBaseOptimised(StorageTypePtr data, std::size_t capacity) : Base(data, capacity) { - } - - ~StaticQueueBaseOptimised() noexcept = default; - - StaticQueueBaseOptimised &operator=(const StaticQueueBaseOptimised &other) = default; - - StaticQueueBaseOptimised &operator=(StaticQueueBaseOptimised &&other) = default; - }; - - } // namespace detail - - /// @cond SKIP_DOC - - /// @brief Template class for definition of the static queues or circular - /// buffers. - /// @details The main distinction of this class from the alternatives - /// such as std::vector, std::deque or boost::circular_buffer is - /// that this implementation doesn't use dynamic memory allocation - /// and exceptions (except in "at()" member function). Hence, it - /// is suitable for use in pure embedded environment. - /// @tparam T Type of the stored element. - /// @tparam TSize Size of the queue in number - maximum number of stored - /// elements. - template - class static_queue : public detail::StaticQueueBaseOptimised { - using Base = detail::StaticQueueBaseOptimised; - - using storage_type = typename Base::storage_type; - - public: - /// @brief Type of the stored elements. - using value_type = typename Base::value_type; - - /// @brief Size type. - using size_type = typename Base::size_type; - - /// @brief Reference type to the stored elements. - using Reference = typename Base::reference; - - /// @brief Const reference type to the stored elements. - using ConstReference = typename Base::const_reference; - - /// @brief Pointer type to the stored elements. - using Pointer = typename Base::pointer; - - /// @brief Const pointer type to the stored elements. - using ConstPointer = typename Base::const_pointer; - - /// @brief Linearised iterator type - using LinearisedIterator = typename Base::linearised_iterator; - - /// @brief Const linearised iterator type - using ConstLinearisedIterator = typename Base::const_linearised_iterator; - - /// @brief Reverse linearised iterator type - using ReverseLinearisedIterator = typename Base::reverse_linearised_iterator; - - /// @brief Const reverse linearised iterator type - using ConstReverseLinearisedIterator = typename Base::const_reverse_linearised_iterator; - - /// @brief Linearised iterator range type - std::pair of (first, one-past-last) iterators. - using LinearisedIteratorRange = typename Base::linearised_iterator_range; - - /// @brief Const version of IteratorRange - using ConstLinearisedIteratorRange = typename Base::const_linearised_iterator_range; - - /// @brief Const iterator class - class ConstIterator; - - /// @brief Same as ConstIterator - using const_iterator = const_iterator; - - /// @brief Iterator class - class Iterator; - - // Member functions - /// @brief Default constructor. - /// @details Creates empty queue. - /// @note Thread safety: Safe - /// @note Exception guarantee: No throw - static_queue() : Base(&array_[0], TSize) { - } - - /// @brief Copy constructor - /// @details Copies all the elements from the provided queue using - /// copy constructor of the elements. - /// @param[in] queue Other queue. - /// @note Thread safety: Depends of thread safety of the copy constructor - /// of the copied elements. - /// @note Exception guarantee: No throw in case copy constructor - /// of the internal elements do not throw, Basic otherwise. - static_queue(const static_queue &queue) : Base(&array_[0], TSize) { - Base::assignElements(queue); - } - - /// @brief Move constructor - /// @details Copies all the elements from the provided queue using - /// move constructor of the elements. - /// @param[in] queue Other queue. - /// @note Thread safety: Depends of thread safety of the move constructor - /// of the copied elements. - /// @note Exception guarantee: No throw in case move constructor - /// of the internal elements do not throw, Basic otherwise. - static_queue(static_queue &&queue) : Base(&array_[0], TSize) { - Base::assignElements(std::move(queue)); - } - - /// @brief Pseudo copy constructor - /// @details Copies all the elements from a queue of any static size using - /// copy constructor of the elements. - /// @param[in] queue Other queue. - /// @note Thread safety: Depends of thread safety of the copy constructor - /// of the copied elements. - /// @note Exception guarantee: No throw in case copy constructor - /// of the internal elements do not throw, Basic otherwise. - template - static_queue(const static_queue &queue) : Base(&array_[0], TSize) { - Base::assignElements(queue); - } - - /// @brief Pseudo move constructor - /// @details Copies all the elements from a queue of any static size using - /// move constructor of the elements. - /// @param[in] queue Other queue. - /// @note Thread safety: Depends of thread safety of the move constructor - /// of the copied elements. - /// @note Exception guarantee: No throw in case move constructor - /// of the internal elements do not throw, Basic otherwise. - template - static_queue(static_queue &&queue) : Base(&array_[0], TSize) { - Base::assignElements(std::move(queue)); - } - - /// @brief Destructor - /// @details The queue is cleared - the destructors of all the elements - /// in the queue are called - /// @note Thread safety: Safe - /// @note Exception guarantee: No throw in case the destructor of the - /// stored elements doesn't throw. Basic guarantee otherwise. - ~static_queue() noexcept { - clear(); - } - - /// @brief Copy assignment operator. - /// @details Copies all the elements from the provided queue. Before the - /// copy, all the existing elements are cleared, i.e. their - /// destructors are called. To use this function the type of - /// stored element must provide copy constructor. - /// @param[in] queue Queue to copy elements from - /// @return Reference to current queue. - /// @note Thread safety: Unsafe. - /// @note Exception guarantee: No throw in case the copy constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - static_queue &operator=(const static_queue &queue) { - return static_cast(Base::operator=(queue)); - } - - /// @brief Move assignment operator. - /// @details Copies all the elements from the provided queue. Before the - /// copy, all the existing elements are cleared, i.e. their - /// destructors are called. To use this function the type of - /// stored element must provide move constructor. - /// @param[in] queue Queue to copy elements from - /// @return Reference to current queue. - /// @note Thread safety: Unsafe. - /// @note Exception guarantee: No throw in case the move constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - static_queue &operator=(static_queue &&queue) { - return static_cast(Base::operator=(std::move(queue))); - } - - /// @brief Pseudo copy assignment operator. - /// @details Copies all the elements from the provided queue of any static - /// size. Before the copy, all the existing elements are cleared, - /// i.e. their destructors are called. To use this function the - /// type of stored element must provide copy constructor. - /// @param[in] queue Queue to copy elements from - /// @return Reference to current queue. - /// @pre @code capacity() <= other.size() @endcode - /// @note Thread safety: Unsafe. - /// @note Exception guarantee: No throw in case the copy constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - template - static_queue &operator=(const static_queue &queue) { - return static_cast(Base::operator=(queue)); - } - - /// @brief Pseudo move assignment operator. - /// @details Moves all the elements from the provided queue of any static - /// size. Before the move, all the existing elements are cleared, - /// i.e. their destructors are called. To use this function the - /// type of stored element must provide move constructor. - /// @param[in] queue Queue to copy elements from - /// @pre @code capacity() <= other.size() @endcode - /// @return Reference to current queue. - /// @note Thread safety: Unsafe. - /// @note Exception guarantee: No throw in case the move constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - template - static_queue &operator=(static_queue &&queue) { - return static_cast(Base::operator=(std::move(queue))); - } - - /// @brief Returns capacity of the current queue - /// @details Returns size of the queue provided in the class template - /// arguments - /// @return Unsigned value, capacity of the queue. - /// @note Thread safety: Safe - /// @note Exception guarantee: No throw. - static constexpr std::size_t capacity() { - return TSize; - } - - /// @brief Returns current size of the queue. - /// @details When queue is empty 0 will be returned. - /// When queue is full the returned size is equal to the value - /// returned by capacity() member function. - /// @return Unsigned value, size of the current queue. - /// @note Thread safety: Safe for multiple readers. - /// @note Exception guarantee: No throw. - std::size_t size() const { - return Base::size(); - } - - /// @brief Returns whether the queue is empty. - /// @return Returns true if and only if (size() == 0U) is true, - /// false otherwise. - /// @note Thread safety: Safe for multiple readers. - /// @note Exception guarantee: No throw. - bool empty() const { - return Base::empty(); - } - - /// @brief Same as empty() - bool isEmpty() const { - return empty(); - } - - /// @brief Returns whether the queue is full. - /// @return Returns true if and only if (size() == capacity()) is true, - /// false otherwise. - /// @note Thread safety: Safe for multiple readers. - /// @note Exception guarantee: No throw. - bool full() const { - return Base::full(); - } - - /// @brief Same as full(); - bool isFull() const { - return full(); - } - - /// @brief Clears the queue from all the existing elements. - /// @details The destructors of the stored elements will be called. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the destructor of the - /// stored elements doesn't throw. Basic guarantee otherwise. - void clear() { - Base::clear(); - } - - /// @brief Pop the element from the back of the queue. - /// @details The destructor of the popped element is called. - /// @pre The queue is not empty. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the destructor of the - /// popped element doesn't throw. Basic guarantee otherwise. - void popBack() { - Base::popBack(); - } - - /// @brief Same as popBack() - inline void pop_back() { - popBack(); - } - - /// @brief Pop number of the elements from the back of the queue. - /// @details The destructors of the popped elements are called. In case the - /// queue is or gets empty in the process, no exception is - /// thrown. - /// @param[in] count number of elements to pop. - /// @pre @code count <= size() @endcode. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the destructor of the - /// popped element doesn't throw. Basic guarantee otherwise. - void popBack(std::size_t count) { - Base::popBack(count); - } - - /// @brief Same as popBack(std::size_t) - void pop_back(std::size_t count) { - popBack(count); - } - - /// @brief Pop the element from the front of the queue. - /// @details The destructor of the popped element is called. - /// @pre The queue is not empty. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the destructor of the - /// popped element doesn't throw. Basic guarantee otherwise. - void popFront() { - Base::popFront(); - } - - /// @brief Same as popFront() - inline void pop_front() { - popFront(); - } - - /// @brief Pop number of the elements from the front of the queue. - /// @details The destructors of the popped elements are called. - /// @param[in] count number of elements to pop. - /// @pre @code count <= size() @endcode - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the destructor of the - /// popped element doesn't throw. Basic guarantee otherwise. - void popFront(std::size_t count) { - Base::popFront(count); - } - - /// @brief Same as popFront(std::size_t) - inline void pop_front(std::size_t count) { - popFront(count); - } - - /// @brief Add new element to the end of the queue. - /// @details Uses copy/move constructor to copy/move the provided element. - /// @param[in] value Value to insert - /// @pre The queue is not full - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the copy constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - template - void push_back(U &&value) { - Base::push_back(std::forward(value)); - } - - /// @brief Construct new element at the end of the queue. - /// @details Passes all the provided arguments to the constructor of the - /// element. - /// @param[in] args Parameters to the constructor of the element - /// @pre The queue is not full - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the copy constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - template - void emplaceBack(TArgs &&...args) { - Base::emplaceBack(std::forward(args)...); - } - - /// @brief Same as push_back(U&&); - template - inline void push_back(U &&value) { - push_back(std::forward(value)); - } - - /// @brief Add new element to the beginning of the queue. - /// @details Uses copy/move constructor to copy/move the provided element. - /// @param[in] value Value to insert - /// @pre The queue is not full. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the copy constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - template - void pushFront(U &&value) { - Base::pushFront(std::forward(value)); - } - - /// @brief Same as pushFront(U&&); - template - inline void push_front(U &&value) { - pushFront(std::forward(value)); - } - - /// @brief Insert new element at specified position. - /// @details The function uses linearised iterator to specify position. - /// @param[in] pos Linearised iterator to the insert position. - /// @param[in] value New value to insert. - /// @return Linearised iterator to the newly inserted element. - /// @pre (pos != invalidIter()) - /// @pre pos is either in iterator range returned by arrayOne() or - /// returned by arrayTwo() or equal to arrayTwo().second. - /// @pre The queue is not full. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case the move/copy constructor - /// of the stored elements doesn't throw. Basic guarantee otherwise. - /// @see invalidIter() - /// @see arrayOne() - /// @see arrayTwo() - template - LinearisedIterator insert(LinearisedIterator pos, U &&value) { - return Base::insert(pos, std::forward(value)); - } - - /// @brief Provides reference to the front element. - /// @return Reference to the front element. - /// @pre The queue is not empty. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - Reference front() { - return Base::front(); - } - - /// @brief Const version of front(). - ConstReference front() const { - return Base::front(); - } - - /// @brief Provides reference to the last element. - /// @return Reference to the last element. - /// @pre the queue is not empty. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - Reference back() { - return Base::back(); - } - - /// @brief Const version of back(). - ConstReference back() const { - return Base::back(); - } - - /// @brief Provides reference to the specified element - /// @details In case the index is out of range, the returned value will be - /// a reference to some cell of the internal array. There is no - /// guarantee that the referenced object will be a valid one. - /// @param[in] index Index of the object from the front of the queue. - /// @return Reference to the stored element. - /// @pre The index must be within the closed-open range of [0 - size()). - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - Reference operator[](std::size_t index) { - return Base::operator[](index); - } - - /// @brief Const version of operator[](). - ConstReference operator[](std::size_t index) const { - return Base::operator[](index); - } - - /// @brief Provides reference to the specified element - /// @details In case the index is out of range, the std::out_of_range - /// exception is thrown. This function is not suitable for the - /// pure embedded environment with small memory footprint - /// where exceptions mustn't be used. In this case use regular - /// boundary check combined with operator[]. - /// @param[in] index Index of the object from the front of the queue. - /// @return Reference to the stored element. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: Strong. - Reference at(std::size_t index) { - return Base::at(index); - } - - /// @brief Const version of at(). - ConstReference at(std::size_t index) const { - return Base::at(index); - } - - /// @brief Return index of the element in the current queue. - /// @param[in] element Reference to the element. - /// @return Non-negative value in case the element is stored in the - /// current queue, -1 otherwise. - /// @post if returned index is not -1, than the operator[]() - /// returns reference to the same parameter element. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - int indexOf(ConstReference element) const { - return Base::indexOf(element); - } - - /// @brief Invalid iterator - /// @details Returns value of invalid iterator, always equal to the end - /// of underlying array. - /// @return Value of invalid iterator - /// @note Thread safety: Safe - /// @note Exception guarantee: No throw - LinearisedIterator invalidIter() { - return Base::invalidIter(); - } - - /// @brief Const version of invalidIter() - ConstLinearisedIterator invalidIter() const { - return Base::invalidIter(); - } - - /// @brief Invalid reverse iterator - /// @details Returns value of invalid reverse iterator. - /// @return Value of invalid reverse iterator - /// @note Thread safety: Safe - /// @note Exception guarantee: No throw - ReverseLinearisedIterator invalidReverseIter() { - return Base::invalidReverseIter(); - } - - /// @brief Const version of invalidReverseIter() - ConstReverseLinearisedIterator invalidReverseIter() const { - return Base::invalidReverseIter(); - } - - /// @brief Returns iterator to the linearised beginning. - /// @details In case the queue is not linearised - /// the returned iterator will be the same as one returned - /// by the invalidIter() member function. Like in most standard - /// sequential containers the iterator may get invalid in - /// case the queue is updated in the middle of the iteration. - /// @return Linearised iterator pointing to the first element in the queue. - /// @pre The queue is linearised. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - /// @see isLinearised() - /// @see linearise() - /// @see invalidIter() - LinearisedIterator lbegin() { - return Base::lbegin(); - } - - /// @brief Same as clbegin(). - ConstLinearisedIterator lbegin() const { - return Base::lbegin(); - } - - /// @brief Const version of lbegin(). - ConstLinearisedIterator clbegin() const { - return Base::clbegin(); - } - - /// @brief Returns reverse iterator to the reverse linearised beginning. - /// @details In case the queue is not linearised - /// the returned iterator will be the same as one returned - /// by the invalidReverseIter() member function. Like in most - /// standard sequential containers the iterator may get invalid - /// in case the queue is updated in the middle of the iteration. - /// @return Reverse iterator pointing to the last element in the queue. - /// @pre The queue is linearised. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - /// @see isLinearised() - /// @see linearise() - /// @see invalidReverseIter() - ReverseLinearisedIterator rlbegin() { - return Base::rlbegin(); - } - - /// @brief Same as crlbegin(). - ConstReverseLinearisedIterator rlbegin() const { - return Base::rlbegin(); - } - - /// @brief Const version of rlbegin(). - ConstReverseLinearisedIterator crlbegin() const { - return Base::crlbegin(); - } - - /// @brief Returns iterator to the linearised end. - /// @details In case the queue is not linearised the returned iterator - /// will the same as returned by invalidIter(). - /// @return Linearised iterator referring to the past-the-end element in - /// the queue. - /// @pre The queue is linearised. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - /// @see isLinearised() - /// @see linearise() - /// @see invalidIter() - LinearisedIterator lend() { - return Base::lend(); - } - - /// @brief Same as clend(). - ConstLinearisedIterator lend() const { - return Base::lend(); - } - - /// @brief Const version of lend(). - ConstLinearisedIterator clend() const { - return Base::clend(); - } - - /// @brief Returns reverse iterator to the reverse linearised end. - /// @details In case the queue is not linearised the returned iterator - /// will be the same as returned by invalidReverseIter(). - /// @return Reverse iterator pointing to the element right before the - /// first element in the queue. - /// @pre The queue is linearised. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - /// @see isLinearised() - /// @see linearise() - /// @see invalidReverseIter() - ReverseLinearisedIterator rlend() { - return Base::rlend(); - } - - /// @brief Same as crlend(). - ConstReverseLinearisedIterator rlend() const { - return Base::rlend(); - } - - /// @brief Const version of rlend(); - ConstReverseLinearisedIterator crlend() const { - return Base::crlend(); - } - - /// @brief Linearise internal elements. - /// @details The elements of the queue are considered to be linearised - /// when the the pointer to every subsequent element will be - /// greater than the pointer to its predecessor. This queue is - /// implemented as a circular buffer over std::array. - /// After several push/pop operations there could - /// be a case when the pointer to the first element will be - /// greater than the one to the last element. In this situation - /// it is not possible to safely iterate over the elements - /// without introducing a complexity of checking for this - /// particular case when the iterator is incremented or - /// decremented. The design decision was to create two types of - /// iterators: LinearisedIterator and Iterator. LinearisedIterator - /// may be safely used for iteration only when the queue is - /// linearised. - /// When linearising elements of the queue, the move constructor - /// of the type T may be called several times when moving elements - /// around. - /// @post The queue elements are linearised. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case move constructor/desctructor - /// of the internal elements do not throw, Basic otherwise. - /// @see isLinearised() - /// @see arrayOne() - /// @see arrayTwo() - void linearise() { - Base::linearise(); - } - - /// @brief Returns whether the internal elements are linearised. - /// @details The elements of the queue are considered to be linearised - /// when the the pointer to every subsequent element will be - /// greater than the pointer to its predecessor. In this case - /// it is possible to iterate over all the elements in a single - /// loop. - /// @return true in case the element are linearised, false otherwise. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - bool linearised() const { - return Base::linearised(); - } - - /// @brief Same as linearised(); - bool isLinearised() const { - return linearised(); - } - - /// @brief Get the first continuous array of the internal buffer. - /// @details This queue is implemented as a circular buffer over std::array. - /// After several push/pop operations there could - /// be a case when the pointer to the first element will be - /// greater than the one to the last element. As a result - /// it is not possible to properly iterate over all the elements - /// in a single loop. This function returns range of the linearised - /// iterators for the first continuous array of the internal buffer. - /// @return Closed-open range (std::pair) of the iterators. Where the first - /// iterator refers to the front element of the queue while the - /// second iterator refers to either one-past-last or - /// one-past-some-middle element. In case the queue is empty, - /// both iterators are equal. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - /// @see linearise() - /// @see isLinearised() - /// @see arrayTwo() - LinearisedIteratorRange arrayOne() { - return Base::arrayOne(); - } - - /// @brief Const version of former arrayOne(). - ConstLinearisedIteratorRange arrayOne() const { - return Base::arrayOne(); - } - - /// @brief Get the second continuous array of the internal buffer. - /// @details This queue is implemented as a circular buffer over std::array. - /// After several push/pop operations there could - /// be a case when the pointer to the first element will be - /// greater than the one to the last element. As a result - /// it is not possible to properly iterate over all the elements - /// in a single loop. This function returns range of the iterators - /// for the second continuous array of the internal buffer. - /// @return Closed-open range (std::pair) of the iterators. Where the first - /// iterator refers to the one of the middle elements of the queue - /// while the second iterator refers to either one-past-last - /// element. In case the queue is empty or linearised, - /// both iterators are equal to one returned by end() member - /// function. - /// @post In case the queue is empty or linearised the first - /// iterator in the returned pair is equal to the second iterator - /// returned by the arrayOne() function. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - /// @see linearise() - /// @see isLinearised() - /// @see arrayOne() - LinearisedIteratorRange arrayTwo() { - return Base::arrayTwo(); - } - - /// @brief Const version of former arrayTwo(). - ConstLinearisedIteratorRange arrayTwo() const { - return Base::arrayTwo(); - } - - /// @brief Resize the queue. - /// @details In case the new size is greater than the existing one, - /// new elements are added to the back of the queue (default - /// constructor is required). In case the new size is less - /// than existing one, existing elements are popped from the - /// back of the queue. - /// @param[in] newSize New size of the queue. - /// @pre New size can not be greater than the capacity of the queue. - /// @post The queue is resized to new size or unchanged in case - /// precondition wasn't satisfied. - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case constructor/desctructor - /// of the internal elements do not throw, Basic otherwise. - void resize(std::size_t newSize) { - Base::resize(newSize); - } - - /// @brief Erase element. - /// @details Erases element from specified position - /// @param[in] pos Linearised iterator to the element to be erased - /// @return Linearised iterator pointing to new location of - /// the next element after the erased one. - /// @pre (pos != invalidIter()) - /// @pre pos is either in iterator range returned by arrayOne() or - /// returned by arrayTwo() - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case copy assignment operator - /// of the internal elements do not throw, Basic otherwise. - LinearisedIterator erase(LinearisedIterator pos) { - return Base::erase(pos); - } - - /// @brief Erase element. - /// @details Erases element from specified position - /// @param[in] pos Iterator to the element to be erased - /// @return Iterator pointing to new location of - /// the next element after the erased one. - /// @pre (pos != end()) - /// @pre pos is in range [begin(), end()) - /// @note Thread safety: Unsafe - /// @note Exception guarantee: No throw in case copy assignment operator - /// of the internal elements do not throw, Basic otherwise. - iterator erase(iterator pos) { - auto iter = Base::erase(pos); - return *(static_cast(&iter)); - } - - /// @brief Returns iterator to the beginning. - /// @details This iterator works on the non-linearised queue. It has extra - /// overhead to check for wrap arounds. - /// @return Iterator pointing to the first element in the queue. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - iterator begin() { - auto iter = Base::begin(); - return *(static_cast(&iter)); - } - - /// @brief Same as cbegin(); - const_iterator begin() const { - auto iter = Base::begin(); - return *(static_cast(&iter)); - } - - /// @brief Const version of begin(); - const_iterator cbegin() const { - auto iter = Base::cbegin(); - return *(static_cast(&iter)); - } - - /// @brief Returns iterator to the end. - /// @details This iterator works on the non-linearised queue. It has extra - /// overhead to check for wrap arounds. - /// @return Iterator referring to the past-the-end element in - /// the queue. - /// @note Thread safety: Safe for multiple readers, unsafe if there is - /// a writer. - /// @note Exception guarantee: No throw. - iterator end() { - auto iter = Base::end(); - return *(static_cast(&iter)); - } - - /// @brief Same as cend(); - const_iterator end() const { - auto iter = Base::end(); - return *(static_cast(&iter)); - } - - /// @brief Const version of end(); - const_iterator cend() const { - auto iter = Base::end(); - return *(static_cast(&iter)); - } - - /// @brief Equality comparison operator - template - bool operator==(const static_queue &other) const { - return Base::operator==(other); - } - - /// @brief Non-equality comparison operator - template - bool operator!=(const static_queue &other) const { - return Base::operator!=(other); - } - - private: - using ArrayType = std::array; - ArrayType array_; - }; - - /// @brief Const iterator for the elements of StaticQueue. - /// @details May be used to iterate over all the elements without worrying - /// about linearisation of the queue. - template - class static_queue::ConstIterator : public static_queue::Base::const_iterator { - using Base = typename static_queue::Base::const_iterator; - - public: - /// @brief Type of iterator category - using IteratorCategory = typename Base::IteratorCategory; - - /// @brief Same as IteratorCategory - using iterator_category = IteratorCategory; - - /// @brief Type of the value referenced by the iterator - using value_type = typename Base::value_type; - - /// @brief Same as value_type - using value_type = value_type; - - /// @brief Type of the difference between two iterators - using DifferenceType = typename Base::DifferenceType; - - /// @brief Same as DifferenceType - using difference_type = DifferenceType; - - /// @brief Type of the pointer to the value referenced by the iterator - using Pointer = typename Base::Pointer; - - /// @brief Same as Pointer - using pointer = Pointer; - - /// @brief Const pointer type - using ConstPointer = typename Base::ConstPointer; - - /// @brief Type of the reference to the value referenced by the iterator - using Reference = typename Base::Reference; - - /// @brief Same as Reference - using reference = Reference; - - /// @brief Const reference type - using ConstReference = typename Base::ConstReference; - - /// @brief Queue type - using QueueType = static_queue; - - /// @brief Const linearised iterator - using ConstLinearisedIterator = typename QueueType::ConstLinearisedIterator; - - /// @brief Constructor - /// @param queue Reference to queue - /// @param iterator Low level array iterator - ConstIterator(const QueueType &queue, ConstLinearisedIterator iterator) : Base(queue, iterator) { - } - - /// @brief Copy constructor is default. - ConstIterator(const ConstIterator &) = default; - - /// @brief Copy assignment operator. - /// @param other Other iterator - /// @pre Other iterator must be iterator of the same queue. - ConstIterator &operator=(const ConstIterator &other) { - return static_cast(Base::operator=(other)); - } - - /// @brief Pre increment operator. - ConstIterator &operator++() { - return static_cast(Base::operator++()); - } - - /// @brief Post increment operator. - ConstIterator operator++(int dummyParam) { - auto tmp = Base::operator++(dummyParam); - return *(static_cast(&tmp)); - } - - /// @brief Pre decrement operator. - ConstIterator &operator--() { - return static_cast(Base::operator--()); - } - - /// @brief Post-decrement operator. - ConstIterator operator--(int dummyParam) { - auto tmp = Base::operator--(dummyParam); - return *(static_cast(&tmp)); - } - - /// @brief Operator of adding constant value to the iterator - /// @param value Value to be added - ConstIterator &operator+=(DifferenceType value) { - return static_cast(Base::operator+=(value)); - } - - /// @brief Operator of substructing constant value from the iterator - /// @param value Value to be substructed - ConstIterator &operator-=(DifferenceType value) { - return static_cast(Base::operator-=(value)); - } - - /// @brief Operator + - /// @details Creates new iterator object by adding constant to - /// current operator without changing it. - /// @param value Value to be added - ConstIterator operator+(DifferenceType value) const { - auto tmp = Base::operator+(value); - return *(static_cast(&tmp)); - } - - /// @brief Operator - - /// @details Creates new iterator object by substructing constant from - /// current operator without changing it. - /// @param value Value to be substructed - ConstIterator operator-(DifferenceType value) const { - auto tmp = Base::operator-(value); - return *(static_cast(&tmp)); - } - - /// @brief Computes the distance between two iterators - /// @param other Other iterator - /// @pre other iterator must be of the same queue. - DifferenceType operator-(const ConstIterator &other) const { - return Base::operator-(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator==(const ConstIterator &other) const { - return Base::operator==(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator!=(const ConstIterator &other) const { - return Base::operator!=(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator<(const ConstIterator &other) const { - return Base::operator<(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator<=(const ConstIterator &other) const { - return Base::operator<=(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator>(const ConstIterator &other) const { - return Base::operator>(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator>=(const ConstIterator &other) const { - return Base::operator>=(other); - } - - /// @brief Iterator dereference operator - Reference operator*() { - return Base::operator*(); - } - - /// @brief Const version of operator* - ConstReference operator*() const { - return Base::operator*(); - } - - /// @brief Iterator dereference operator - Pointer operator->() { - return Base::operator->(); - } - - /// @brief Const version of operator-> - ConstPointer operator->() const { - return Base::operator->(); - } - }; - - /// @brief Iterator for the elements of StaticQueue. - /// @details May be used to iterate over all the elements without worrying - /// about linearisation of the queue. - template - class static_queue::Iterator : public static_queue::Base::iterator { - using Base = typename static_queue::Base::iterator; - - public: - /// @brief Type of iterator category - using IteratorCategory = typename Base::IteratorCategory; - - /// @brief Same as IteratorCategory - using iterator_category = IteratorCategory; - - /// @brief Type of the value referenced by the iterator - using value_type = typename Base::value_type; - - /// @brief Same as value_type - using value_type = value_type; - - /// @brief Type of the difference between two iterators - using DifferenceType = typename Base::DifferenceType; - - /// @brief Same as DifferenceType - using difference_type = DifferenceType; - - /// @brief Type of the pointer to the value referenced by the iterator - using Pointer = typename Base::Pointer; - - /// @brief Same as Pointer - using pointer = Pointer; - - /// @brief Const pointer type - using ConstPointer = typename Base::ConstPointer; - - /// @brief Type of the reference to the value referenced by the iterator - using Reference = typename Base::Reference; - - /// @brief Same as Reference - using reference = Reference; - - /// @brief Const reference type - using ConstReference = typename Base::ConstReference; - - /// @brief Queue type - using QueueType = static_queue; - - /// @brief Linearised iterator - using LinearisedIterator = typename QueueType::LinearisedIterator; - - /// @brief Const linearised iterator - using ConstLinearisedIterator = typename QueueType::ConstLinearisedIterator; - - /// @brief Constructor - /// @param queue Reference to queue - /// @param iterator Low level array iterator - Iterator(QueueType &queue, LinearisedIterator iterator) : Base(queue, iterator) { - } - - /// @brief Copy constructor is default. - Iterator(const Iterator &) = default; - - /// @brief Copy assignment operator. - /// @param other Other iterator - /// @pre Other iterator must be iterator of the same queue. - Iterator &operator=(const Iterator &other) { - return static_cast(Base::operator=(other)); - } - - /// @brief Pre increment operator. - Iterator &operator++() { - return static_cast(Base::operator++()); - } - - /// @brief Post increment operator. - Iterator operator++(int dummyParam) { - auto tmp = Base::operator++(dummyParam); - return *(static_cast(&tmp)); - } - - /// @brief Pre decrement operator. - Iterator &operator--() { - return static_cast(Base::operator--()); - } - - /// @brief Post-decrement operator. - Iterator operator--(int dummyParam) { - auto tmp = Base::operator--(dummyParam); - return *(static_cast(&tmp)); - } - - /// @brief Operator of adding constant value to the iterator - /// @param value Value to be added - Iterator &operator+=(DifferenceType value) { - return static_cast(Base::operator+=(value)); - } - - /// @brief Operator of substructing constant value from the iterator - /// @param value Value to be substructed - Iterator &operator-=(DifferenceType value) { - return static_cast(Base::operator-=(value)); - } - - /// @brief Operator + - /// @details Creates new iterator object by adding constant to - /// current operator without changing it. - /// @param value Value to be added - Iterator operator+(DifferenceType value) const { - auto tmp = Base::operator+(value); - return *(static_cast(&tmp)); - } - - /// @brief Operator - - /// @details Creates new iterator object by substructing constant from - /// current operator without changing it. - /// @param value Value to be substructed - Iterator operator-(DifferenceType value) const { - auto tmp = Base::operator-(value); - return *(static_cast(&tmp)); - } - - /// @brief Computes the distance between two iterators - /// @param other Other iterator - /// @pre other iterator must be of the same queue. - DifferenceType operator-(const Iterator &other) const { - return Base::operator-(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator==(const Iterator &other) const { - return Base::operator==(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator!=(const Iterator &other) const { - return Base::operator!=(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator<(const Iterator &other) const { - return Base::operator<(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator<=(const Iterator &other) const { - return Base::operator<=(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator>(const Iterator &other) const { - return Base::operator>(other); - } - - /// @brief Iterator comparison operator - /// @param other Other iterator - bool operator>=(const Iterator &other) const { - return Base::operator>=(other); - } - - /// @brief Iterator dereference operator - Reference operator*() { - return Base::operator*(); - } - - /// @brief Const version of operator* - ConstReference operator*() const { - return Base::operator*(); - } - - /// @brief Iterator dereference operator - Pointer operator->() { - return Base::operator->(); - } - - /// @brief Const version of operator-> - ConstPointer operator->() const { - return Base::operator->(); - } - - operator ConstIterator() const { - auto iter = static_cast(Base::getIterator()); - const auto &queue = static_cast(Base::getQueue()); - return ConstIterator(queue, iter); - } - }; - - /// @endcond - - } // namespace container - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_STATIC_QUEUE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_string.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_string.hpp index f90d2f2894..ae681a7bd9 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_string.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_string.hpp @@ -34,7 +34,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace container { namespace detail { @@ -1679,10 +1679,10 @@ namespace std { /// @brief Specializes the std::swap algorithm. /// @see Reference - /// @related nil::marshalling::container::static_string + /// @related nil::crypto3::marshalling::container::static_string template - void swap(nil::marshalling::container::static_string &str1, - nil::marshalling::container::static_string &str2) { + void swap(nil::crypto3::marshalling::container::static_string &str1, + nil::crypto3::marshalling::container::static_string &str2) { str1.swap(str2); } diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_vector.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_vector.hpp index 7148dd3873..d568de30f8 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_vector.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/container/static_vector.hpp @@ -34,11 +34,16 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace container { namespace detail { + template + struct alignas(T) element_type_placeholder { + std::byte __data[sizeof(T)]; + }; + template class static_vector_base { public: @@ -53,7 +58,7 @@ namespace nil { using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; - using cell_type = typename std::aligned_storage::value>::type; + using cell_type = element_type_placeholder; static_assert(sizeof(cell_type) == sizeof(T), "type T must be padded"); @@ -473,8 +478,7 @@ namespace nil { template struct static_vector_storage_base { - using element_type = typename std::aligned_storage::value>::type; - + using element_type = element_type_placeholder; using storage_type = std::array; storage_type data_; }; @@ -1266,10 +1270,10 @@ namespace std { /// @brief Specializes the std::swap algorithm. /// @see Reference - /// @related nil::marshalling::container::static_vector + /// @related nil::crypto3::marshalling::container::static_vector template - void swap(nil::marshalling::container::static_vector &v1, - nil::marshalling::container::static_vector &v2) { + void swap(nil::crypto3::marshalling::container::static_vector &v1, + nil::crypto3::marshalling::container::static_vector &v2) { v1.swap(v2); } diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/container/string_view.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/container/string_view.hpp index ec0c2f0808..fa3bfebd3e 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/container/string_view.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/container/string_view.hpp @@ -24,7 +24,7 @@ //---------------------------------------------------------------------------// /// @file -/// @brief Contains nil::marshalling::container::string_view class. +/// @brief Contains nil::crypto3::marshalling::container::string_view class. #ifndef MARSHALLING_STRING_VIEW_HPP #define MARSHALLING_STRING_VIEW_HPP @@ -37,7 +37,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace container { @@ -604,8 +604,8 @@ namespace std { /// @brief Specializes the std::swap algorithm. /// @see Reference - /// @related nil::marshalling::container::string_view - inline void swap(nil::marshalling::container::string_view &str1, nil::marshalling::container::string_view &str2) { + /// @related nil::crypto3::marshalling::container::string_view + inline void swap(nil::crypto3::marshalling::container::string_view &str1, nil::crypto3::marshalling::container::string_view &str2) { str1.swap(str2); } diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/container/type_traits.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/container/type_traits.hpp index ff9a73e39f..12b914017f 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/container/type_traits.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/container/type_traits.hpp @@ -28,7 +28,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace container { namespace detail { @@ -39,7 +39,7 @@ namespace nil { }; template - struct is_static_string> { + struct is_static_string> { static const bool value = true; }; @@ -49,23 +49,23 @@ namespace nil { }; template - struct is_static_vector> { + struct is_static_vector> { static const bool value = true; }; } // namespace detail /// @brief Compile time check whether the provided type is a variant of - /// @ref nil::marshalling::container::static_string - /// @related nil::marshalling::container::static_string + /// @ref nil::crypto3::marshalling::container::static_string + /// @related nil::crypto3::marshalling::container::static_string template static constexpr bool is_static_string() { return detail::is_static_string::value; - } + } /// @brief Compile time check whether the provided type is a variant of - /// @ref nil::marshalling::container::static_vector - /// @related nil::marshalling::container::static_vector + /// @ref nil::crypto3::marshalling::container::static_vector + /// @related nil::crypto3::marshalling::container::static_vector template static constexpr bool is_static_vector() { return detail::is_static_vector::value; @@ -74,4 +74,4 @@ namespace nil { } // namespace marshalling } // namespace nil -#endif // MARSHALLING_CONTAINER_TYPE_TRAITS_HPP \ No newline at end of file +#endif // MARSHALLING_CONTAINER_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/base_detection.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/base_detection.hpp deleted file mode 100644 index 2e5c498cb7..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/base_detection.hpp +++ /dev/null @@ -1,42 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASE_DETECTION_HPP -#define MARSHALLING_BASE_DETECTION_HPP - -#if __cplusplus < 201402L - -#ifdef __clang__ -#define MARSHALLING_MUST_DEFINE_BASE -#endif - -#if !defined(MARSHALLING_MUST_DEFINE_BASE) && defined(__GNUC__) -#if __GNUC__ < 5 -#define MARSHALLING_MUST_DEFINE_BASE -#endif // #if __GNUC__ < 5 -#endif // #if !defined(MARSHALLING_MUST_DEFINE_BASE) && defined(__GNUC__) - -#endif // #if __cplusplus < 201402L -#endif // MARSHALLING_BASE_DETECTION_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/bits_access.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/bits_access.hpp deleted file mode 100644 index 4f546e6be8..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/bits_access.hpp +++ /dev/null @@ -1,202 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_DETAIL_BIT_ACCESS_HPP -#define MARSHALLING_DETAIL_BIT_ACCESS_HPP - -#include -#include - -#include -#include -#include - -#ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_AS_BITMASK_FUNC Base& asBitmask() -#define MARSHALLING_AS_BITMASK_CONST_FUNC const Base& asBitmask() const -#else // #ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_AS_BITMASK_FUNC \ - FUNC_AUTO_REF_RETURN(asBitmask, decltype(nil::marshalling::types::to_field_base(*this))) -#define MARSHALLING_AS_BITMASK_CONST_FUNC \ - FUNC_AUTO_REF_RETURN_CONST(asBitmask, decltype(nil::marshalling::types::to_field_base(*this))) -#endif // #ifdef MARSHALLING_MUST_DEFINE_BASE - -#define MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - bool MARSHALLING_CONCATENATE(getBitValue_, n_)() const { \ - return f_.get_bit_value(MARSHALLING_CONCATENATE(BitIdx_, n_)); \ - } \ - void MARSHALLING_CONCATENATE(set_bit_value_, n_)(bool val) { \ - f_.set_bit_value(MARSHALLING_CONCATENATE(BitIdx_, n_), val); \ - } - -#define MARSHALLING_BIT_ACC_FUNC_1(f_, n_) MARSHALLING_BIT_ACC_FUNC(f_, n_) -#define MARSHALLING_BIT_ACC_FUNC_2(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_1(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_3(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_2(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_4(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_3(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_5(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_4(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_6(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_5(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_7(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_6(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_8(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_7(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_9(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_8(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_10(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_9(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_11(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_10(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_12(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_11(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_13(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_12(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_14(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_13(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_15(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_14(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_16(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_15(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_17(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_16(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_18(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_17(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_19(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_18(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_20(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_19(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_21(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_20(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_22(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_21(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_23(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_22(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_24(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_23(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_25(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_24(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_26(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_25(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_27(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_26(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_28(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_27(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_29(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_28(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_30(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_29(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_31(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_30(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_32(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_31(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_33(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_32(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_34(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_33(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_35(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_34(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_36(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_35(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_37(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_36(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_38(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_37(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_39(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_38(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_40(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_39(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_41(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_40(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_42(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_41(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_43(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_42(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_44(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_43(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_45(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_44(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_46(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_45(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_47(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_46(f_, __VA_ARGS__)) -#define MARSHALLING_BIT_ACC_FUNC_48(f_, n_, ...) \ - MARSHALLING_BIT_ACC_FUNC(f_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_47(f_, __VA_ARGS__)) - -#define MARSHALLING_CHOOSE_BIT_ACC_FUNC_(N, f_, ...) MARSHALLING_EXPAND(MARSHALLING_BIT_ACC_FUNC_##N(f_, __VA_ARGS__)) -#define MARSHALLING_CHOOSE_BIT_ACC_FUNC(N, f_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_BIT_ACC_FUNC_(N, f_, __VA_ARGS__)) -#define MARSHALLING_DO_BIT_ACC_FUNC(f_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_BIT_ACC_FUNC(MARSHALLING_NUM_ARGS(__VA_ARGS__), f_, __VA_ARGS__)) -#endif // MARSHALLING_DETAIL_BIT_ACCESS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/field_base.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/field_base.hpp index c35c95ebce..872f71b8a5 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/field_base.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/field_base.hpp @@ -29,7 +29,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace detail { @@ -40,27 +40,24 @@ namespace nil { class field_base<> { protected: // Use big endian by default - using endian_type = nil::marshalling::endian::big_endian; + using endian_type = nil::crypto3::marshalling::endian::big_endian; // Use unsigned type by default for versioning using version_type = unsigned; }; template - class field_base, TOptions...> : public field_base { + class field_base, TOptions...> : public field_base { protected: using endian_type = TEndian; }; template - class field_base, TOptions...> : public field_base { + class field_base, TOptions...> : public field_base { protected: using version_type = T; }; - template - class field_base : public field_base { }; - template class field_base, TOptions...> : public field_base { }; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/fields_access.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/fields_access.hpp deleted file mode 100644 index 3214d9b120..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/fields_access.hpp +++ /dev/null @@ -1,386 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_FIELDS_ACCESS_HPP -#define MARSHALLING_FIELDS_ACCESS_HPP - -#include -#include - -#include -#include -#include - -#ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_FIELD_VALUE_ACCESS_FUNC typename Base::value_type& value() -#define MARSHALLING_FIELD_VALUE_ACCESS_CONST_FUNC const typename Base::value_type& value() const -#define MARSHALLING_ACCESS_MEMBER_FIELD_FUNC(T_, t_, n_) \ - typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(field_, n_)() -#define MARSHALLING_ACCESS_MEMBER_FIELD_CONST_FUNC(T_, t_, n_) \ - const typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(field_, n_)() const -#define MARSHALLING_MSG_FIELDS_ACCESS_FUNC typename Base::all_fields_type& fields() -#define MARSHALLING_MSG_FIELDS_ACCESS_CONST_FUNC const typename Base::all_fields_type& fields() const - -#else // #ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_FIELD_VALUE_ACCESS_FUNC \ - FUNC_AUTO_REF_RETURN(value, decltype(nil::marshalling::types::to_field_base(*this).value())) -#define MARSHALLING_FIELD_VALUE_ACCESS_CONST_FUNC \ - FUNC_AUTO_REF_RETURN_CONST(value, decltype(nil::marshalling::types::to_field_base(*this).value())) -#define MARSHALLING_ACCESS_MEMBER_FIELD_FUNC(T_, t_, n_) \ - FUNC_AUTO_REF_RETURN(MARSHALLING_CONCATENATE(field_, n_), \ - decltype(std::get(t_))) -#define MARSHALLING_ACCESS_MEMBER_FIELD_CONST_FUNC(T_, t_, n_) \ - FUNC_AUTO_REF_RETURN_CONST(MARSHALLING_CONCATENATE(field_, n_), \ - decltype(std::get(t_))) -#define MARSHALLING_MSG_FIELDS_ACCESS_FUNC \ - FUNC_AUTO_REF_RETURN(fields, decltype(nil::marshalling::to_message_base(*this).fields())) -#define MARSHALLING_MSG_FIELDS_ACCESS_CONST_FUNC \ - FUNC_AUTO_REF_RETURN_CONST(fields, decltype(nil::marshalling::to_message_base(*this).fields())) -#endif // #ifdef MARSHALLING_MUST_DEFINE_BASE - -#define MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_ACCESS_MEMBER_FIELD_FUNC(T_, t_, n_) { \ - return std::get(t_); \ - } \ - MARSHALLING_ACCESS_MEMBER_FIELD_CONST_FUNC(T_, t_, n_) { \ - return std::get(t_); \ - } - -#define MARSHALLING_FIELD_ACC_FUNC_1(T_, t_, n_) MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) -#define MARSHALLING_FIELD_ACC_FUNC_2(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_1(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_3(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_2(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_4(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_3(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_5(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_4(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_6(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_5(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_7(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_6(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_8(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_7(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_9(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_8(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_10(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_9(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_11(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_10(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_12(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_11(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_13(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_12(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_14(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_13(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_15(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_14(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_16(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_15(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_17(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_16(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_18(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_17(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_19(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_18(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_20(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_19(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_21(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_20(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_22(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_21(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_23(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_22(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_24(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_23(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_25(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_24(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_26(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_25(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_27(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_26(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_28(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_27(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_29(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_28(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_30(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_29(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_31(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_30(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_32(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_31(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_33(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_32(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_34(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_33(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_35(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_34(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_36(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_35(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_37(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_36(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_38(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_37(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_39(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_38(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_40(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_39(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_41(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_40(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_42(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_41(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_43(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_42(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_44(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_43(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_45(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_44(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_46(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_45(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_47(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_46(T_, t_, __VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_48(T_, t_, n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_47(T_, t_, __VA_ARGS__)) - -#define MARSHALLING_CHOOSE_FIELD_ACC_FUNC_(N, T_, t_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_##N(T_, t_, __VA_ARGS__)) -#define MARSHALLING_CHOOSE_FIELD_ACC_FUNC(N, T_, t_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_FIELD_ACC_FUNC_(N, T_, t_, __VA_ARGS__)) -#define MARSHALLING_DO_FIELD_ACC_FUNC(T_, t_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_FIELD_ACC_FUNC(MARSHALLING_NUM_ARGS(__VA_ARGS__), T_, t_, __VA_ARGS__)) - -#define MARSHALLING_DEFINE_FIELD_ENUM(...) MARSHALLING_EXPAND(MARSHALLING_DEFINE_ENUM(FieldIdx, __VA_ARGS__)) - -// ---------------------------------------------- - -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - typename std::tuple_element::type& MARSHALLING_CONCATENATE( \ - field_, n_)() { \ - return std::get(value()); \ - } \ - const typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(field_, n_)() const { \ - return std::get(value()); \ - } - -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_1(n_) MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_2(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_1(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_3(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_2(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_4(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_3(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_5(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_4(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_6(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_5(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_7(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_6(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_8(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_7(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_9(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_8(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_10(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_9(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_11(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_10(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_12(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_11(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_13(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_12(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_14(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_13(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_15(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_14(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_16(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_15(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_17(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_16(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_18(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_17(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_19(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_18(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_20(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_19(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_21(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_20(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_22(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_21(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_23(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_22(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_24(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_23(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_25(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_24(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_26(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_25(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_27(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_26(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_28(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_27(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_29(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_28(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_30(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_29(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_31(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_30(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_32(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_31(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_33(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_32(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_34(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_33(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_35(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_34(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_36(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_35(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_37(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_36(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_38(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_37(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_39(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_38(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_40(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_39(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_41(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_40(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_42(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_41(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_43(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_42(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_44(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_43(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_45(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_44(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_46(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_45(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_47(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_46(__VA_ARGS__)) -#define MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_48(n_, ...) \ - MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_47(__VA_ARGS__)) - -#define MARSHALLING_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE_(N, ...) \ - MARSHALLING_EXPAND(MARSHALLING_FIELD_ACC_FUNC_NOTEMPLATE_##N(__VA_ARGS__)) -#define MARSHALLING_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE(N, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE_(N, __VA_ARGS__)) -#define MARSHALLING_DO_FIELD_ACC_FUNC_NOTEMPLATE(...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE(MARSHALLING_NUM_ARGS(__VA_ARGS__), __VA_ARGS__)) -#endif // MARSHALLING_FIELDS_ACCESS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/gen_enum.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/gen_enum.hpp deleted file mode 100644 index de3bbf9410..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/gen_enum.hpp +++ /dev/null @@ -1,142 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_GEN_ENUM_HPP -#define MARSHALLING_GEN_ENUM_HPP - -#include - -#define MARSHALLING_WRAP_ENUM(p_, v_) MARSHALLING_CONCATENATE(p_, v_) - -#define MARSHALLING_ENUM_VAL_0(...) -#define MARSHALLING_ENUM_VAL_1(p_, v_) MARSHALLING_WRAP_ENUM(p_, v_) -#define MARSHALLING_ENUM_VAL_2(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_1(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_3(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_2(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_4(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_3(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_5(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_4(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_6(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_5(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_7(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_6(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_8(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_7(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_9(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_8(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_10(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_9(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_11(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_10(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_12(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_11(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_13(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_12(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_14(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_13(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_15(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_14(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_16(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_15(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_17(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_16(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_18(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_17(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_19(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_18(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_20(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_19(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_21(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_20(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_22(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_21(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_23(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_22(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_24(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_23(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_25(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_24(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_26(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_25(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_27(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_26(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_28(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_27(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_29(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_28(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_30(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_29(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_31(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_30(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_32(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_31(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_33(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_32(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_34(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_33(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_35(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_34(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_36(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_35(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_37(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_36(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_38(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_37(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_39(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_38(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_40(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_39(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_41(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_40(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_42(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_41(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_43(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_42(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_44(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_43(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_45(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_44(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_46(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_45(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_47(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_46(p_, __VA_ARGS__)) -#define MARSHALLING_ENUM_VAL_48(p_, v_, ...) \ - MARSHALLING_WRAP_ENUM(p_, v_), MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_47(p_, __VA_ARGS__)) - -#define MARSHALLING_CHOOSE_ENUM_(N, p_, ...) MARSHALLING_EXPAND(MARSHALLING_ENUM_VAL_##N(p_, __VA_ARGS__)) -#define MARSHALLING_CHOOSE_ENUM(N, p_, ...) MARSHALLING_EXPAND(MARSHALLING_CHOOSE_ENUM_(N, p_, __VA_ARGS__)) -#define MARSHALLING_DO_ENUM(p_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_ENUM(MARSHALLING_NUM_ARGS(__VA_ARGS__), p_, __VA_ARGS__)) - -#define MARSHALLING_END_ENUM(p_) MARSHALLING_CONCATENATE(p_, _numOfValues) - -#define MARSHALLING_DEFINE_ENUM(p_, ...) \ - enum p_ { \ - MARSHALLING_EXPAND(MARSHALLING_DO_ENUM(MARSHALLING_CONCATENATE(p_, _), __VA_ARGS__)), \ - MARSHALLING_END_ENUM(p_) \ - }; -#endif // MARSHALLING_GEN_ENUM_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/macro_common.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/macro_common.hpp deleted file mode 100644 index 31d42658eb..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/macro_common.hpp +++ /dev/null @@ -1,55 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_MACRO_COMMON_HPP -#define MARSHALLING_MACRO_COMMON_HPP - -#define MARSHALLING_EXPAND(x_) x_ -#define MARSHALLING_CONCATENATE_(x_, y_) x_##y_ -#define MARSHALLING_CONCATENATE(x_, y_) MARSHALLING_CONCATENATE_(x_, y_) - -#define MARSHALLING_NUM_ARGS_(X, X64, X63, X62, X61, X60, X59, X58, X57, X56, X55, X54, X53, X52, X51, X50, X49, X48, \ - X47, X46, X45, X44, X43, X42, X41, X40, X39, X38, X37, X36, X35, X34, X33, X32, X31, \ - X30, X29, X28, X27, X26, X25, X24, X23, X22, X21, X20, X19, X18, X17, X16, X15, X14, \ - X13, X12, X11, X10, X9, X8, X7, X6, X5, X4, X3, X2, X1, N, ...) \ - N -#define MARSHALLING_NUM_ARGS(...) \ - MARSHALLING_EXPAND(MARSHALLING_NUM_ARGS_(0, __VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \ - 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, \ - 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, \ - 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) - -#if __cplusplus < 201402L -#define FUNC_AUTO_REF_RETURN(name_, ret_) auto name_()->ret_ -#define FUNC_AUTO_REF_RETURN_CONST(name_, ret_) auto name_() const->ret_ -#define FUNC_ARGS_AUTO_REF_RETURN(name_, args_, ret_) auto name_(args_)->ret_ -#define FUNC_ARGS_AUTO_REF_RETURN_CONST(name_, args_, ret_) auto name_(args_) const->ret_ -#else // #if __cplusplus < 201402L -#define FUNC_AUTO_REF_RETURN(name_, ret_) decltype(auto) name_() -#define FUNC_AUTO_REF_RETURN_CONST(name_, ret_) decltype(auto) name_() const -#define FUNC_ARGS_AUTO_REF_RETURN(name_, args_, ret_) decltype(auto) name_(args_) -#define FUNC_ARGS_AUTO_REF_RETURN_CONST(name_, args_, ret_) decltype(auto) name_(args_) const -#endif // #if __cplusplus < 201402L -#endif // MARSHALLING_MACRO_COMMON_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/pack_value.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/pack_value.hpp index 6d8816c754..aa6e5eabf9 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/pack_value.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/pack_value.hpp @@ -43,7 +43,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace detail { @@ -92,7 +92,7 @@ namespace nil { template::template type<>>::value>::type> + !detail::is_container::template type<>>::value>::type> inline operator std::array() { return similar_std_array_marshalling>(); @@ -100,7 +100,7 @@ namespace nil { template::template type<>>::value>::type> + !detail::is_container::template type<>>::value>::type> inline operator boost::array() { return similar_std_array_marshalling>(); @@ -117,7 +117,7 @@ namespace nil { } template::value>::type, - typename = typename std::enable_if::template type<>>::value>::type> inline operator TOutput() const { using marshalling_type = typename is_compatible::template type; @@ -131,8 +131,8 @@ namespace nil { template::value && !is_marshalling_type::value - && !nil::marshalling::is_container::value && !is_marshalling_type::value + && !nil::crypto3::marshalling::is_container::template type<>>::value>::type> inline operator OutputRange() { using T = typename OutputRange::value_type; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/repack_value.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/repack_value.hpp index ec83e70374..fef7255109 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/repack_value.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/repack_value.hpp @@ -44,7 +44,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace detail { @@ -60,7 +60,7 @@ namespace nil { template::value && is_marshalling_type::value - && !nil::marshalling::is_supported_representation_type::value>::type> + && !nil::crypto3::marshalling::is_supported_representation_type::value>::type> inline operator T() { status_type status_unpack, status_pack; std::vector buffer = value_unpack_impl(input, status_unpack); @@ -75,7 +75,7 @@ namespace nil { template::value && !is_marshalling_type::value - && !nil::marshalling::is_supported_representation_type::value>::type, + && !nil::crypto3::marshalling::is_supported_representation_type::value>::type, bool Enable = true> inline operator T() { status_type status_unpack, status_pack; @@ -93,7 +93,7 @@ namespace nil { template::value && !is_marshalling_type::value - && nil::marshalling::is_supported_representation_type::value>::type, + && nil::crypto3::marshalling::is_supported_representation_type::value>::type, bool Enable1 = true, bool Enable2 = true> inline operator T() { status_type status_unpack; @@ -109,7 +109,7 @@ namespace nil { template::value && is_marshalling_type::value - && nil::marshalling::is_supported_representation_type::value>::type, + && nil::crypto3::marshalling::is_supported_representation_type::value>::type, bool Enable1 = true, bool Enable2 = true, bool Enable3 = true> inline operator T() { status_type status_unpack; @@ -146,7 +146,7 @@ namespace nil { template::value - && nil::marshalling::is_supported_representation_type::value>::type> + && nil::crypto3::marshalling::is_supported_representation_type::value>::type> inline operator T() { T result = range_pack_impl(iterator, count_elements, status_pack); @@ -157,9 +157,9 @@ namespace nil { template::value - && !nil::marshalling::is_supported_representation_type::value - && (nil::marshalling::is_supported_representation_type::value - || nil::marshalling::is_supported_representation_type< + && !nil::crypto3::marshalling::is_supported_representation_type::value + && (nil::crypto3::marshalling::is_supported_representation_type::value + || nil::crypto3::marshalling::is_supported_representation_type< typename T::value_type>::value)>::type, bool Enable = true> inline operator T() { @@ -171,8 +171,8 @@ namespace nil { template::value - && !nil::marshalling::is_supported_representation_type::value - && !nil::marshalling::is_supported_representation_type::value>::type, + && !nil::crypto3::marshalling::is_supported_representation_type::value + && !nil::crypto3::marshalling::is_supported_representation_type::value>::type, bool Enable1 = true, bool Enable2 = true> inline operator T() { std::vector buffer @@ -211,7 +211,7 @@ namespace nil { template::value - && nil::marshalling::is_supported_representation_type< + && nil::crypto3::marshalling::is_supported_representation_type< typename std::iterator_traits::value_type>::value>::type> inline operator T() { status_type status_pack; @@ -226,8 +226,8 @@ namespace nil { template::value - && !nil::marshalling::is_supported_representation_type::value - && nil::marshalling::is_supported_representation_type::value>::type, + && !nil::crypto3::marshalling::is_supported_representation_type::value + && nil::crypto3::marshalling::is_supported_representation_type::value>::type, bool Enable = true> inline operator T() { status_type status_unpack; @@ -242,7 +242,7 @@ namespace nil { template::value - && !nil::marshalling::is_supported_representation_type< + && !nil::crypto3::marshalling::is_supported_representation_type< typename std::iterator_traits::value_type>::value>::type, bool Enable1 = true, bool Enable2 = true> inline operator T() { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/reverse_macro_args.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/reverse_macro_args.hpp deleted file mode 100644 index bbfee349db..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/reverse_macro_args.hpp +++ /dev/null @@ -1,102 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_REVERSE_MACRO_ARGS_HPP -#define MARSHALLING_REVERSE_MACRO_ARGS_HPP - -#include - -//#define MARSHALLING_DO_REVERSE_MACRO_ARGS_0() -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_1(n_) MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_2(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_1(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_3(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_2(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_4(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_3(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_5(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_4(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_6(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_5(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_7(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_6(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_8(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_7(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_9(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_8(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_10(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_9(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_11(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_10(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_12(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_11(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_13(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_12(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_14(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_13(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_15(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_14(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_16(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_15(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_17(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_16(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_18(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_17(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_19(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_18(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_20(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_19(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_21(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_20(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_22(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_21(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_23(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_22(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_24(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_23(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_25(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_24(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_26(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_25(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_27(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_26(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_28(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_27(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_29(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_28(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_30(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_29(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_31(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_30(__VA_ARGS__)), MARSHALLING_EXPAND(n_) -#define MARSHALLING_DO_REVERSE_MACRO_ARGS_32(n_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_31(__VA_ARGS__)), MARSHALLING_EXPAND(n_) - -#define MARSHALLING_REVERSE_MACRO_ARGS_INTERNAL_(N, ...) \ - MARSHALLING_EXPAND(MARSHALLING_DO_REVERSE_MACRO_ARGS_##N(__VA_ARGS__)) -#define MARSHALLING_REVERSE_MACRO_ARGS_INTERNAL(N, ...) \ - MARSHALLING_EXPAND(MARSHALLING_REVERSE_MACRO_ARGS_INTERNAL_(N, __VA_ARGS__)) -#define MARSHALLING_REVERSE_MACRO_ARGS(...) \ - MARSHALLING_EXPAND(MARSHALLING_REVERSE_MACRO_ARGS_INTERNAL(MARSHALLING_NUM_ARGS(__VA_ARGS__), __VA_ARGS__)) -#endif // MARSHALLING_REVERSE_MACRO_ARGS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/transport_fields_access.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/transport_fields_access.hpp deleted file mode 100644 index 98654d55d3..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/transport_fields_access.hpp +++ /dev/null @@ -1,222 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_TRANSPORT_FIELDS_ACCESS_HPP -#define MARSHALLING_TRANSPORT_FIELDS_ACCESS_HPP - -#include -#include - -#include -#include -#include - -#ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_ACCESS_TRANSPORT_FIELD_FUNC(T_, t_, n_) \ - typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(transportField_, n_)() -#define MARSHALLING_ACCESS_TRANSPORT_FIELD_CONST_FUNC(T_, t_, n_) \ - const typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(transportField_, n_)() const -#define MARSHALLING_MSG_TRANSPORT_FIELDS_ACCESS_FUNC typename Base::transport_fields_type& transport_fields() -#define MARSHALLING_MSG_TRANSPORT_FIELDS_ACCESS_CONST_FUNC \ - const typename Base::transport_fields_type& transport_fields() const - -#else // #ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_ACCESS_TRANSPORT_FIELD_FUNC(T_, t_, n_) \ - FUNC_AUTO_REF_RETURN(MARSHALLING_CONCATENATE(transportField_, n_), \ - decltype(std::get(t_))) -#define MARSHALLING_ACCESS_TRANSPORT_FIELD_CONST_FUNC(T_, t_, n_) \ - FUNC_AUTO_REF_RETURN_CONST(MARSHALLING_CONCATENATE(transportField_, n_), \ - decltype(std::get(t_))) -#define MARSHALLING_MSG_TRANSPORT_FIELDS_ACCESS_FUNC \ - FUNC_AUTO_REF_RETURN(transport_fields, decltype(nil::marshalling::to_message(*this).transport_fields())) -#define MARSHALLING_MSG_TRANSPORT_FIELDS_ACCESS_CONST_FUNC \ - FUNC_AUTO_REF_RETURN_CONST(transport_fields, decltype(nil::marshalling::to_message(*this).transport_fields())) -#endif // #ifdef MARSHALLING_MUST_DEFINE_BASE - -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_ACCESS_TRANSPORT_FIELD_FUNC(T_, t_, n_) { \ - return std::get(t_); \ - } \ - MARSHALLING_ACCESS_TRANSPORT_FIELD_CONST_FUNC(T_, t_, n_) { \ - return std::get(t_); \ - } - -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_1(T_, t_, n_) MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_2(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_1(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_3(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_2(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_4(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_3(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_5(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_4(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_6(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_5(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_7(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_6(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_8(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_7(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_9(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_8(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_10(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_9(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_11(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_10(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_12(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_11(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_13(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_12(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_14(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_13(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_15(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_14(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_16(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_15(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_17(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_16(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_18(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_17(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_19(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_18(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_20(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_19(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_21(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_20(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_22(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_21(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_23(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_22(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_24(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_23(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_25(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_24(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_26(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_25(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_27(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_26(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_28(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_27(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_29(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_28(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_30(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_29(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_31(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_30(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_32(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_31(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_33(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_32(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_34(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_33(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_35(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_34(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_36(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_35(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_37(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_36(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_38(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_37(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_39(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_38(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_40(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_39(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_41(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_40(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_42(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_41(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_43(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_42(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_44(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_43(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_45(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_44(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_46(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_45(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_47(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_46(T_, t_, __VA_ARGS__)) -#define MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_48(T_, t_, n_, ...) \ - MARSHALLING_TRANSPORT_FIELD_ACC_FUNC(T_, t_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_47(T_, t_, __VA_ARGS__)) - -#define MARSHALLING_CHOOSE_TRANSPORT_FIELD_ACC_FUNC_(N, T_, t_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_TRANSPORT_FIELD_ACC_FUNC_##N(T_, t_, __VA_ARGS__)) -#define MARSHALLING_CHOOSE_TRANSPORT_FIELD_ACC_FUNC(N, T_, t_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_TRANSPORT_FIELD_ACC_FUNC_(N, T_, t_, __VA_ARGS__)) -#define MARSHALLING_DO_TRANSPORT_FIELD_ACC_FUNC(T_, t_, ...) \ - MARSHALLING_EXPAND( \ - MARSHALLING_CHOOSE_TRANSPORT_FIELD_ACC_FUNC(MARSHALLING_NUM_ARGS(__VA_ARGS__), T_, t_, __VA_ARGS__)) - -#define MARSHALLING_DEFINE_TRANSPORT_FIELD_ENUM(...) \ - MARSHALLING_EXPAND(MARSHALLING_DEFINE_ENUM(TransportFieldIdx, __VA_ARGS__)); - -#endif // MARSHALLING_TRANSPORT_FIELDS_ACCESS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/unpack_value.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/unpack_value.hpp index a35579e664..c4a6a6eb60 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/unpack_value.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/unpack_value.hpp @@ -43,7 +43,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace detail { @@ -139,7 +139,7 @@ namespace nil { // using marshalling_vector = typename // std::conditional::fixed_size, - // nil::marshalling::container::static_vector, std::vector>::type; using marshalling_vector = std::vector; marshalling_vector values; @@ -171,7 +171,7 @@ namespace nil { // using marshalling_vector = typename // std::conditional::fixed_size, - // nil::marshalling::container::static_vector, std::vector>::type; using marshalling_vector = std::vector; marshalling_vector values; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/variant_access.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/detail/variant_access.hpp deleted file mode 100644 index df4cea31d1..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/detail/variant_access.hpp +++ /dev/null @@ -1,395 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_VARIANT_ACCESS_HPP -#define MARSHALLING_VARIANT_ACCESS_HPP - -#include -#include - -#include -#include -#include - -#ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_AS_VARIANT_FUNC Base& as_variant() -#define MARSHALLING_AS_VARIANT_CONST_FUNC const Base& as_variant() const -#define MARSHALLING_VARIANT_INIT_FIELD_FUNC(v_, n_) \ - typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(initField_, n_)(TArgs && ... args) -#define MARSHALLING_VARIANT_ACCESS_FIELD_FUNC(v_, n_) \ - typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(accessField_, n_)() -#define MARSHALLING_VARIANT_ACCESS_FIELD_CONST_FUNC(v_, n_) \ - const typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(accessField_, n_)() const - -#else // #ifdef MARSHALLING_MUST_DEFINE_BASE -#define MARSHALLING_AS_VARIANT_FUNC \ - FUNC_AUTO_REF_RETURN(as_variant, decltype(nil::marshalling::types::to_field_base(*this))) -#define MARSHALLING_AS_VARIANT_CONST_FUNC \ - FUNC_AUTO_REF_RETURN_CONST(as_variant, decltype(nil::marshalling::types::to_field_base(*this))) -#define MARSHALLING_VARIANT_INIT_FIELD_FUNC(v_, n_) \ - FUNC_ARGS_AUTO_REF_RETURN( \ - MARSHALLING_CONCATENATE(initField_, n_), TArgs&&... args, \ - decltype(v_.template init_field(std::forward(args)...))) -#define MARSHALLING_VARIANT_ACCESS_FIELD_FUNC(v_, n_) \ - FUNC_AUTO_REF_RETURN(MARSHALLING_CONCATENATE(accessField_, n_), \ - decltype(v_.template access_field())) -#define MARSHALLING_VARIANT_ACCESS_FIELD_CONST_FUNC(v_, n_) \ - FUNC_AUTO_REF_RETURN_CONST(MARSHALLING_CONCATENATE(accessField_, n_), \ - decltype(v_.template access_field())) -#endif // #ifdef MARSHALLING_MUST_DEFINE_BASE - -#define MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - template \ - MARSHALLING_VARIANT_INIT_FIELD_FUNC(v_, n_) { \ - return v_.template init_field(std::forward(args)...); \ - } \ - MARSHALLING_VARIANT_ACCESS_FIELD_FUNC(v_, n_) { \ - return v_.template access_field(); \ - } \ - MARSHALLING_VARIANT_ACCESS_FIELD_CONST_FUNC(v_, n_) { \ - return v_.template access_field(); \ - } - -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_1(v_, n_) MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_2(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_1(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_3(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_2(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_4(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_3(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_5(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_4(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_6(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_5(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_7(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_6(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_8(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_7(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_9(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_8(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_10(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_9(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_11(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_10(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_12(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_11(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_13(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_12(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_14(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_13(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_15(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_14(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_16(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_15(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_17(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_16(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_18(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_17(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_19(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_18(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_20(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_19(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_21(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_20(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_22(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_21(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_23(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_22(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_24(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_23(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_25(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_24(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_26(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_25(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_27(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_26(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_28(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_27(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_29(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_28(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_30(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_29(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_31(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_30(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_32(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_31(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_33(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_32(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_34(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_33(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_35(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_34(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_36(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_35(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_37(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_36(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_38(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_37(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_39(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_38(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_40(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_39(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_41(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_40(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_42(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_41(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_43(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_42(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_44(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_43(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_45(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_44(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_46(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_45(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_47(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_46(v_, __VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_48(v_, n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC(v_, n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_47(v_, __VA_ARGS__)) - -#define MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC_(N, v_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_##N(v_, __VA_ARGS__)) -#define MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC(N, v_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC_(N, v_, __VA_ARGS__)) -#define MARSHALLING_DO_VARIANT_MEM_ACC_FUNC(v_, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC(MARSHALLING_NUM_ARGS(__VA_ARGS__), v_, __VA_ARGS__)) - -// -------------------------------------------- - -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - template \ - typename std::tuple_element::type& MARSHALLING_CONCATENATE( \ - initField_, n_)(TArgs && ... args) { \ - return init_field(std::forward(args)...); \ - } \ - typename std::tuple_element::type& MARSHALLING_CONCATENATE( \ - accessField_, n_)() { \ - return access_field(); \ - } \ - const typename std::tuple_element::type& \ - MARSHALLING_CONCATENATE(accessField_, n_)() const { \ - return access_field(); \ - } - -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_1(n_) MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_2(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_1(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_3(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_2(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_4(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_3(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_5(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_4(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_6(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_5(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_7(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_6(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_8(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_7(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_9(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_8(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_10(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_9(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_11(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_10(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_12(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_11(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_13(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_12(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_14(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_13(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_15(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_14(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_16(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_15(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_17(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_16(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_18(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_17(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_19(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_18(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_20(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_19(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_21(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_20(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_22(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_21(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_23(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_22(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_24(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_23(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_25(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_24(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_26(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_25(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_27(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_26(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_28(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_27(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_29(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_28(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_30(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_29(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_31(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_30(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_32(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_31(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_33(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_32(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_34(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_33(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_35(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_34(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_36(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_35(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_37(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_36(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_38(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_37(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_39(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_38(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_40(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_39(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_41(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_40(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_42(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_41(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_43(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_42(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_44(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_43(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_45(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_44(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_46(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_45(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_47(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_46(__VA_ARGS__)) -#define MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_48(n_, ...) \ - MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(n_) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_47(__VA_ARGS__)) - -#define MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_(N, ...) \ - MARSHALLING_EXPAND(MARSHALLING_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_##N(__VA_ARGS__)) -#define MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(N, ...) \ - MARSHALLING_EXPAND(MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC_NOTEMPLATE_(N, __VA_ARGS__)) -#define MARSHALLING_DO_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(...) \ - MARSHALLING_EXPAND( \ - MARSHALLING_CHOOSE_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(MARSHALLING_NUM_ARGS(__VA_ARGS__), __VA_ARGS__)) -#endif // MARSHALLING_VARIANT_ACCESS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/endianness.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/endianness.hpp index ae202e4384..9bb878c44e 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/endianness.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/endianness.hpp @@ -34,7 +34,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace endian { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/field_cast.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/field_cast.hpp index dd90b875be..2d7ee1698d 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/field_cast.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/field_cast.hpp @@ -36,7 +36,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace detail { template diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/field_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/field_type.hpp index 913b2bd0cd..9fef49dfd0 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/field_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/field_type.hpp @@ -24,25 +24,21 @@ //---------------------------------------------------------------------------// /// @file -/// @brief Contains definition of @ref nil::marshalling::field_type class. +/// @brief Contains definition of @ref nil::crypto3::marshalling::field_type class. #ifndef MARSHALLING_FIELD_TYPE_HPP #define MARSHALLING_FIELD_TYPE_HPP -#include - #include #include -#include -#include -namespace nil { +namespace nil::crypto3 { namespace marshalling { /// @brief Base class to all the field classes. /// @details Every custom "field" class should inherit from this one. /// @tparam TOptions Zero or more options. The supported options are: - /// @li nil::marshalling::option::big_endian or nil::marshalling::option::little_endian - Option to + /// @li nil::crypto3::marshalling::option::big_endian or nil::crypto3::marshalling::option::little_endian - Option to /// specify serialization endian. If none is provided big endian is /// assumed. /// @headerfile nil/marshalling/field_type.hpp @@ -52,8 +48,8 @@ namespace nil { public: /// @brief endian_type type - /// @details Equal to either @ref nil::marshalling::endian::big_endian or - /// @ref nil::marshalling::endian::little_endian + /// @details Equal to either @ref nil::crypto3::marshalling::endian::big_endian or + /// @ref nil::crypto3::marshalling::endian::little_endian using endian_type = typename base_impl_type::endian_type; /// @brief Version type @@ -165,310 +161,6 @@ namespace nil { } }; -/// @brief Add convenience access enum and functions to the members of -/// bundle fields, such as nil::marshalling::types::bundle or nil::marshalling::types::bitfield. -/// @details The fields of "bundle" types, such as nil::marshalling::types::bundle or -/// nil::marshalling::types::bitfield keep their members bundled in -/// std::tuple -/// and provide access to them via @b value() member functions. -/// The access to the specific member field can be obtained using -/// std::get -/// later on: -/// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using ... Field1; -/// using ... Field2; -/// using ... Field3; -/// using MyField = -/// nil::marshalling::types::bitfield< -/// MyFieldBase, -/// std::tuple -/// >; -/// -/// MyField field; -/// auto& members = field.value(); -/// auto& firstMember = std::get<0>(members); -/// auto& secondMember = std::get<1>(members); -/// auto& thirdMember = std::get<2>(members); -/// @endcode -/// However, it would be convenient to provide names and easier access to -/// the member fields. The MARSHALLING_FIELD_MEMBERS_ACCESS() macro does exactly -/// that when used inside the field class definition. Just inherit from -/// the "bundle" field and use the macro inside with the names for the -/// member fields: -/// @code -/// class MyField : public nil::marshalling::types::bitfield<...> -/// { -/// public: -/// MARSHALLING_FIELD_MEMBERS_ACCESS(member1, member2, member3); -/// } -/// @endcode -/// It would be equivalent to having the following types and functions -/// definitions: -/// @code -/// class MyField : public nil::marshalling::types::bitfield<...> -/// { -/// public: -/// // Access indices for member fields -/// enum FieldIdx { -/// FieldIdx_member1, -/// FieldIdx_member2, -/// FieldIdx_member3, -/// FieldIdx_numOfValues -/// }; -/// -/// // Accessor to "member1" member field. -/// auto field_member1() -> decltype(std::get(value())) -/// { -/// return std::get(value()); -/// } -/// -/// // Accessor to const "member1" member field. -/// auto field_member1() const -> decltype(std::get(value())) -/// { -/// return std::get(value()); -/// } -/// -/// // Accessor to "member2" member field. -/// auto field_member2() -> decltype(std::get(value())) -/// { -/// return std::get(value()); -/// } -/// -/// // Accessor to const "member2" member field. -/// auto field_member2() const -> decltype(std::get(value())) -/// { -/// return std::get(value()); -/// } -/// -/// // Accessor to "member3" member field. -/// auto field_member3() -> decltype(std::get(value())) -/// { -/// return std::get(value()); -/// } -/// -/// // Accessor to const "member3" member field. -/// auto field_member2() const -> decltype(std::get(value())) -/// { -/// return std::get(value()); -/// } -/// }; -/// @endcode -/// @b NOTE, that provided names @b member1, @b member2, and @b member3, have -/// found their way to the following definitions: -/// @li @b FieldIdx enum. The names are prefixed with @b FieldIdx_. The -/// @b FieldIdx_nameOfValues value is automatically added at the end. -/// @li Accessor functions prefixed with @b field_ -/// -/// See @ref sec_field_tutorial_bitfield for more examples and details -/// @param[in] ... List of member fields' names. -/// @related nil::marshalling::types::bitfield -/// @warning Some compilers, such as @b clang or early versions of @b g++ -/// may have problems compiling code generated by this macro even -/// though it uses valid C++11 constructs in attempt to automatically identify the -/// type of the base class. If the compilation fails, -/// and this macro resides inside a @b NON-template class, please use -/// @ref MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE() macro instead. In -/// case this macro needs to reside inside a @b template class, then -/// there is a need to define inner @b Base type, which specifies -/// exact type of the @ref nil::marshalling::types::bitfield class. For example: -/// @code -/// template -/// class MyField : public -/// nil::marshalling::types::bitfield< -/// MyFieldBase, -/// std::tuple, -/// TExtraOptions... -/// > -/// { -/// // Define type of the base class -/// using Base = -/// nil::marshalling::types::bitfield< -/// MyFieldBase, -/// std::tuple, -/// TExtraOptions... -/// >; -/// public: -/// MARSHALLING_FIELD_MEMBERS_ACCESS(member1, member2, member3); -/// }; -/// @endcode -#define MARSHALLING_FIELD_MEMBERS_ACCESS(...) \ - MARSHALLING_EXPAND(MARSHALLING_DEFINE_FIELD_ENUM(__VA_ARGS__)) \ - MARSHALLING_FIELD_VALUE_ACCESS_FUNC { \ - auto &val = nil::marshalling::types::to_field_base(*this).value(); \ - using AllFieldsTuple = typename std::decay::type; \ - static_assert(std::tuple_size::value == FieldIdx_numOfValues, \ - "Invalid number of names for fields tuple"); \ - return val; \ - } \ - MARSHALLING_FIELD_VALUE_ACCESS_CONST_FUNC { \ - auto &val = nil::marshalling::types::to_field_base(*this).value(); \ - using AllFieldsTuple = typename std::decay::type; \ - static_assert(std::tuple_size::value == FieldIdx_numOfValues, \ - "Invalid number of names for fields tuple"); \ - return val; \ - } \ - MARSHALLING_EXPAND(MARSHALLING_DO_FIELD_ACC_FUNC(value_type, value(), __VA_ARGS__)) - -/// @brief Similar to @ref MARSHALLING_FIELD_MEMBERS_ACCESS(), but dedicated for -/// non-template classes. -/// @details The @ref MARSHALLING_FIELD_MEMBERS_ACCESS() macro is a generic one, -/// which can be used in any class (template, or non-template). However, -/// some compilers (such as g++-4.9 and below, @b clang-4.0 and below) may fail -/// to compile it even though it uses valid C++11 constructs. If the -/// compilation fails and the class it is being used in is @b NOT a -/// template one, please use @ref MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE() -/// instead. -/// @related nil::marshalling::types::bitfield -#define MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE(...) \ - MARSHALLING_EXPAND(MARSHALLING_DEFINE_FIELD_ENUM(__VA_ARGS__)) \ - MARSHALLING_EXPAND(MARSHALLING_DO_FIELD_ACC_FUNC_NOTEMPLATE(__VA_ARGS__)) - -#ifdef FOR_DOXYGEN_DOC_ONLY - /// @brief Add convenience access enum and functions to the members of - /// bundle fields, such as nil::marshalling::types::bundle or nil::marshalling::types::bitfield. - /// @detail The fields of "bundle" types, such as nil::marshalling::types::bundle or - /// nil::marshalling::types::bitfield keep their members bundled in - /// std::tuple - /// and provide access to them via @b value() member functions. - /// The access to the specific member field can be obtained using - /// std::get - /// later on: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using ... Field1; - /// using ... Field2; - /// using ... Field3; - /// using MyField = - /// nil::marshalling::types::bundle< - /// MyFieldBase, - /// std::tuple - /// >; - /// - /// MyField field; - /// auto& members = field.value(); - /// auto& firstMember = std::get<0>(members); - /// auto& secondMember = std::get<1>(members); - /// auto& thirdMember = std::get<2>(members); - /// @endcode - /// However, it would be convenient to provide names and easier access to - /// the member fields. The MARSHALLING_FIELD_MEMBERS_ACCESS() macro does exaclty - /// that when used inside the field class definition. Just inherit from - /// the "bundle" field and use the macro inside with names for the - /// member fields: - /// @code - /// class MyField : public nil::marshalling::types::bundle<...> - /// { - /// public: - /// MARSHALLING_FIELD_MEMBERS_ACCESS(member1, member2, member3); - /// } - /// @endcode - /// It would be equivalent to having the following types and functions - /// definitions: - /// @code - /// class MyField : public nil::marshalling::types::bundle<...> - /// { - /// public: - /// // Access indices for member fields - /// enum FieldIdx { - /// FieldIdx_member1, - /// FieldIdx_member2, - /// FieldIdx_member3, - /// FieldIdx_numOfValues - /// }; - /// - /// // Accessor to "member1" member field. - /// auto field_member1() -> decltype(std::get(value())) - /// { - /// return std::get(value()); - /// } - /// - /// // Accessor to const "member1" member field. - /// auto field_member1() const -> decltype(std::get(value())) - /// { - /// return std::get(value()); - /// } - /// - /// // Accessor to "member2" member field. - /// auto field_member2() -> decltype(std::get(value())) - /// { - /// return std::get(value()); - /// } - /// - /// // Accessor to const "member2" member field. - /// auto field_member2() const -> decltype(std::get(value())) - /// { - /// return std::get(value()); - /// } - /// - /// // Accessor to "member3" member field. - /// auto field_member3() -> decltype(std::get(value())) - /// { - /// return std::get(value()); - /// } - /// - /// // Accessor to const "member3" member field. - /// auto field_member2() const -> decltype(std::get(value())) - /// { - /// return std::get(value()); - /// } - /// }; - /// @endcode - /// @b NOTE, that provided names @b member1, @b member2, and @b member3, have - /// found their way to the following definitions: - /// @li @b FieldIdx enum. The names are prefixed with @b FieldIdx_. The - /// @b FieldIdx_nameOfValues value is automatically added at the end. - /// @li Accessor functions prefixed with @b field_ - /// - /// See @ref sec_field_tutorial_bundle for more examples and detail - /// @param[in] ... List of member fields' names. - /// @related nil::marshalling::types::bundle - /// @warning Some compilers, such as @b clang or early versions of @b g++ - /// may have problems compiling code generated by this macro even - /// though it uses valid C++11 constructs in attempt to automatically identify the - /// type of the base class. If the compilation fails, - /// and this macro resides inside a @b NON-template class, please use - /// @ref MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE() macro instead. In - /// case this macro needs to reside inside a @b template class, then - /// there is a need to define inner @b Base type, which specifies - /// exact type of the @ref nil::marshalling::types::bundle class. For example: - /// @code - /// template - /// class MyField : public - /// nil::marshalling::types::bundle< - /// MyFieldBase, - /// std::tuple, - /// TExtraOptions... - /// > - /// { - /// // Define type of the base class - /// using Base = - /// nil::marshalling::types::bundle< - /// MyFieldBase, - /// std::tuple, - /// TExtraOptions... - /// >; - /// public: - /// MARSHALLING_FIELD_MEMBERS_ACCESS(member1, member2, member3); - /// }; - /// @endcode -#define MARSHALLING_FIELD_MEMBERS_ACCESS(...) - - /// @brief Similar to @ref MARSHALLING_FIELD_MEMBERS_ACCESS(), but dedicated for - /// non-template classes. - /// @detail The @ref MARSHALLING_FIELD_MEMBERS_ACCESS() macro is a generic one, - /// which can be used in any class (template, or non-template). However, - /// some compilers (such as g++-4.9 and below, @b clang-4.0 and below) may fail - /// to compile it even though it uses valid C++11 constructs. If the - /// compilation fails and the class it is being used in is @b NOT a - /// template one, please use @ref MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE() - /// instead. - /// @related nil::marshalling::types::bundle -#define MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE(...) \ - MARSHALLING_EXPAND(MARSHALLING_DEFINE_FIELD_ENUM(__VA_ARGS__)) \ - MARSHALLING_EXPAND(MARSHALLING_DO_FIELD_ACC_FUNC_NOTEMPLATE(__VA_ARGS__)) -#endif // #ifdef FOR_DOXYGEN_DOC_ONLY - } // namespace marshalling } // namespace nil #endif // MARSHALLING_FIELD_TYPE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/inference.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/inference.hpp index c57e92ebfa..f0f5fb7f6c 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/inference.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/inference.hpp @@ -31,10 +31,9 @@ #include #include -#include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { template @@ -50,16 +49,6 @@ namespace nil { static const bool fixed_size = true; }; - template - class is_compatible ::value>::type> { - using default_endianness = option::big_endian; - public: - template - using type = typename types::float_value, T>; - static const bool value = true; - static const bool fixed_size = true; - }; - template class is_compatible , typename std::enable_if::value && is_compatible::fixed_size>::type> { @@ -104,4 +93,4 @@ namespace nil { } // namespace marshalling } // namespace nil -#endif // MARSHALLING_INFERENCE_TYPE_TRAITS_HPP \ No newline at end of file +#endif // MARSHALLING_INFERENCE_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/marshalling_state.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/marshalling_state.hpp index b5829c04ba..1c8185a033 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/marshalling_state.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/marshalling_state.hpp @@ -32,7 +32,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { template #include -#include #include -#include -namespace nil { +namespace nil::crypto3 { namespace marshalling { + namespace types { // We cannot include integral.hpp, it includes this file. So just declare the class. template @@ -72,218 +71,70 @@ namespace nil { // message/field_t common options /// @brief options to specify endian. - /// @tparam TEndian endian_type type. Must be either nil::marshalling::endian::big_endian or - /// nil::marshalling::endian::little_endian. + /// @tparam TEndian endian_type type. Must be either nil::crypto3::marshalling::endian::big_endian or + /// nil::crypto3::marshalling::endian::little_endian. /// @headerfile nil/marshalling/options.hpp template struct endian { }; /// @brief Alias option to endian_type specifying big endian. /// @headerfile nil/marshalling/options.hpp - using big_endian = endian; + using big_endian = endian; /// @brief Alias option to endian_type specifying little endian. /// @headerfile nil/marshalling/options.hpp - using little_endian = endian; - - /// @brief No-op option, doesn't have any effect. - /// @headerfile nil/marshalling/options.hpp - struct empty_option { }; - - /// @brief Option used to specify number of bytes that is used for field serialization. - /// @details Applicable only to numeric fields, such as nil::marshalling::types::integral or - /// nil::marshalling::types::enumeration. - /// - /// For example, protocol specifies that some field is serialized using - /// only 3 bytes. There is no basic integral type that takes 3 bytes - /// of space exactly. The closest alternative is std::int32_t or - /// std::uint32_t. Such field may be defined as: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::integral< - /// MyFieldBase, - /// std::uint32_t, - /// nil::marshalling::option::fixed_length<3> - /// >; - /// @endcode - /// @tparam TLen length of the serialized value. - /// @tparam TSignExtend Perform sign extension, relevant only to signed types. - /// @headerfile nil/marshalling/options.hpp - template - struct fixed_length { }; - - /// @brief Option used to specify number of bits that is used for field serialization - /// when a field is a member of nil::marshalling::types::bitfield. - /// @details For example, the protocol specifies that two independent integer - /// values of 6 and 10 bits respectively packed into two bytes to save space. - /// Such combined field may be defined as: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::bitfield< - /// MyFieldBase, - /// std::tuple< - /// nil::marshalling::types::integral< - /// MyFieldBase, - /// std::uint8_t, - /// nil::marshalling::option::fixed_bit_length<6> - /// >, - /// nil::marshalling::types::integral< - /// MyFieldBase, - /// std::uint16_t, - /// nil::marshalling::option::fixed_bit_length<10> - /// > - /// > - /// >; - /// @endcode - /// @tparam TLen length of the serialized value in bits. - /// @headerfile nil/marshalling/options.hpp - template - struct fixed_bit_length { }; - - /// @brief Option used to specify that field may have variable serialization length - /// @details Applicable only to numeric fields, such as nil::marshalling::types::integral - /// or nil::marshalling::types::enumeration. - /// Use this option to specify that serialized value has - /// Base-128 - /// encoding, i.e. the most significant bit in the byte indicates whether - /// the encoding of the value is complete or the next byte in - /// sequence still encodes the current integer value. For example field - /// which value can be serialized using between 1 and 4 bytes can be - /// defined as: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::integral< - /// MyFieldBase, - /// std::uint32_t, - /// nil::marshalling::option::var_length<1, 4> - /// >; - /// @endcode - /// @tparam TMin Minimal length the field may consume. - /// @tparam TMax Maximal length the field may consume. - /// @pre TMin <= TMax - /// @headerfile nil/marshalling/options.hpp - template - struct var_length { - static_assert(TMin <= TMax, "TMin must not be greater that TMax."); - }; - - /// @brief Option to specify numeric value serialization offset. - /// @details Applicable only to numeric fields such as nil::marshalling::types::integral or - /// nil::marshalling::types::enumeration. - /// The provided value will be added to the field's value and the - /// result will be written to the buffer when serialising. Good example - /// for such option would be serialising a "current year" value. Most protocols - /// now specify it as an offset from year 2000 or later and written as a - /// single byte, i.e. to specify year 2015 is to write value 15. - /// However it may be inconvenient to manually adjust serialized/deserialized - /// value by predefined offset 2000. To help with such case option - /// nil::marshalling::option::num_value_ser_offset can be used. For example: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::integral< - /// MyFieldBase, - /// std::uint16_t, - /// nil::marshalling::option::fixed_length<1>, - /// nil::marshalling::option::num_value_ser_offset<-2000> - /// >; - /// @endcode - /// Note that in the example above the field value (accessible by @b value() member - /// function of the field) will have type std::uint16_t and will be equal to - /// say 2015, while when serialized it consumes only 1 byte (thanks to - /// nil::marshalling::option::fixed_length option) and reduced value of 15 is written. - /// @tparam TOffset Offset value to be added when serialising field. - /// @headerfile nil/marshalling/options.hpp - template - struct num_value_ser_offset { }; + using little_endian = endian; /// @brief Option that forces usage of embedded uninitialised data area instead /// of dynamic memory allocation. /// @details Applicable to fields that represent collection of raw data or other - /// fields, such as nil::marshalling::types::array_list or nil::marshalling::types::string. By + /// fields, such as nil::crypto3::marshalling::types::array_list or nil::crypto3::marshalling::types::string. By /// default, these fields will use /// std::vector or /// std::string /// for their internal data storage. If this option is used, it will force - /// such fields to use @ref nil::marshalling::container::static_vector or @ref - /// nil::marshalling::container::static_string with the capacity provided by this option. + /// such fields to use @ref nil::crypto3::marshalling::container::static_vector or @ref + /// nil::crypto3::marshalling::container::static_string with the capacity provided by this option. /// @tparam TSize Size of the storage area in number of elements, for strings it does @b NOT include /// the '\0' terminating character. /// @headerfile nil/marshalling/options.hpp template struct fixed_size_storage { }; - /// @brief Set custom storage type for fields like nil::marshalling::types::string or - /// nil::marshalling::types::array_list. - /// @details By default nil::marshalling::types::string uses + /// @brief Set custom storage type for fields like nil::crypto3::marshalling::types::string or + /// nil::crypto3::marshalling::types::array_list. + /// @details By default nil::crypto3::marshalling::types::string uses /// std::string - /// and nil::marshalling::types::array_list uses + /// and nil::crypto3::marshalling::types::array_list uses /// std::vector as /// their internal storage types. The @ref fixed_size_storage option forces - /// them to use nil::marshalling::container::static_string and - /// nil::marshalling::container::static_vector instead. This option can be used to provide any other + /// them to use nil::crypto3::marshalling::container::static_string and + /// nil::crypto3::marshalling::container::static_vector instead. This option can be used to provide any other /// third party type. Such type must define the same public interface as @b std::string (when used with - /// nil::marshalling::types::string) or @b std::vector (when used with - /// nil::marshalling::types::array_list). + /// nil::crypto3::marshalling::types::string) or @b std::vector (when used with + /// nil::crypto3::marshalling::types::array_list). /// @tparam TType Custom storage type /// @headerfile nil/marshalling/options.hpp template struct custom_storage_type { }; - /// @brief Option to specify scaling ratio. - /// @details Applicable only to nil::marshalling::types::integral. - /// Sometimes the protocol specifies values being transmitted in - /// one units while when handling the message they are better to be handled - /// in another. For example, some distance information is transmitted as - /// integer value of millimetres, but while processing it should be handled as floating - /// point value of meters. Such field is defined as: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::integral< - /// MyFieldBase, - /// std::int32_t, - /// nil::marshalling::option::scaling_ratio<1, 100> - /// >; - /// @endcode - /// Then, to accessed the scaled value of the field use @b scale_as() or - /// @b set_scaled() methods of nil::marshalling::types::integral field: - /// @code - /// void processField(const MyField& field) - /// { - /// auto distInMillimetres = field.value(); - /// auto distInMeters = field.scale_as(); - /// } - /// @endcode - /// @tparam TNum Numerator of the scaling ratio. - /// @tparam TDenom Denominator of the scaling ratio. - /// @headerfile nil/marshalling/options.hpp - template - struct scaling_ratio { - static_assert(TNum != 0, "Wrong scaling ratio"); - static_assert(TDenom != 0, "Wrong scaling ratio"); - }; - /// @brief Option that modifies the default behaviour of collection fields to /// prepend the serialized data with number of @b elements information. /// @details Quite often when collection of fields is serialized it must be /// prepended with one or more bytes indicating number of elements that will /// follow. /// Applicable to fields that represent collection of raw data or other - /// fields, such as nil::marshalling::types::array_list or nil::marshalling::types::string.@n + /// fields, such as nil::crypto3::marshalling::types::array_list or nil::crypto3::marshalling::types::string.@n /// For example sequence of raw bytes must be prefixed with 2 bytes stating /// the size of the sequence: /// @code - /// using MyFieldBase = nil::marshalling::field_type; + /// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using MyField = - /// nil::marshalling::types::array_list< + /// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// std::uint8_t, - /// nil::marshalling::option::sequence_size_field_prefix< - /// nil::marshalling::types::integral + /// nil::crypto3::marshalling::option::sequence_size_field_prefix< + /// nil::crypto3::marshalling::types::integral /// > /// >; /// @endcode @@ -293,834 +144,31 @@ namespace nil { struct sequence_size_field_prefix { }; template - using size_t_sequence_size_field_prefix = sequence_size_field_prefix< - nil::marshalling::types::integral>; - - /// @brief Option that modifies the default behaviour of collection fields to - /// prepend the serialized data with number of @b bytes information. - /// @details Similar to @ref sequence_size_field_prefix, but instead of - /// number of @b elements to follow, the prefix field contains number of - /// @b bytes that will follow. - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::array_list< - /// MyFieldBase, - /// nil::marshalling::types::bundle< - /// std::tuple< - /// nil::marshalling::types::integral, - /// nil::marshalling::types::string - /// > - /// >, - /// nil::marshalling::option::sequence_ser_length_field_prefix< - /// nil::marshalling::types::integral - /// > - /// >; - /// @endcode - /// @tparam TField Type of the field that represents serialization length - /// @tparam TReadErrorStatus Error status to return in case read operation fails when should not - /// @headerfile nil/marshalling/options.hpp - template - struct sequence_ser_length_field_prefix { }; - - /// @brief Option that forces every element of @ref nil::marshalling::types::array_list to - /// be prefixed with its serialization length. - /// @details Similar to @ref sequence_ser_length_field_prefix but instead of the whole - /// list, every element is prepended with its serialization length. - /// @tparam TField Type of the field that represents serialization length - /// @tparam TReadErrorStatus Error status to return in case read operation fails when should not - /// @headerfile nil/marshalling/options.hpp - template - struct sequence_elem_ser_length_field_prefix { }; - - /// @brief Option that forces @b first element only of @ref nil::marshalling::types::array_list to - /// be prefixed with its serialization length. - /// @details Similar to @ref sequence_elem_ser_length_field_prefix, but - /// applicable only to the lists where elements are of the same - /// fixed size, where there is no need to prefix @b every element - /// with its size. - /// @tparam TField Type of the field that represents serialization length - /// @tparam TReadErrorStatus Error status to return in case read operation fails when should not - /// @headerfile nil/marshalling/options.hpp - template - struct sequence_elem_fixed_ser_length_field_prefix { }; - - /// @brief Option that forces termination of the sequence when predefined value - /// is encountered. - /// @details Sometimes protocols use zero-termination for strings instead of - /// prefixing them with their size. Below is an example of how to achieve - /// such termination using sequence_termination_field_suffix option. - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::string< - /// MyFieldBase, - /// nil::marshalling::option::sequence_termination_field_suffix< - /// nil::marshalling::types::integral > - /// > - /// >; - /// @endcode - /// @tparam TField Type of the field that represents suffix - /// @headerfile nil/marshalling/options.hpp - template - struct sequence_termination_field_suffix { }; - - /// @brief Option that forces collection fields to append provides suffix every - /// time it is serialized. - /// @details It is a bit looser version than sequence_termination_field_suffix. - /// Encountering the expected termination value doesn't terminate the - /// read operation on the sequence. The size of the sequence should - /// be defined by other means. For example, zero termination string that - /// occupies exactly 6 bytes when serialized (padded with zeroes at the end) - /// will be defined like this: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::string< - /// MyFieldBase, - /// nil::marshalling::option::sequence_fixed_size<5>, - /// nil::marshalling::option::sequence_trailing_field_suffix< - /// nil::marshalling::types::integral > - /// > - /// >; - /// @endcode - /// @tparam TField Type of the field that represents suffix - /// @headerfile nil/marshalling/options.hpp - template - struct sequence_trailing_field_suffix { }; - - /// @brief Option to enable external forcing of the collection's elements count. - /// @details Sometimes the size information is detached from the data sequence - /// itself, i.e. there may be one or more independent fields between the - /// size field and the first byte of the collection. In such case it becomes - /// impossible to use @ref sequence_size_field_prefix option. Instead, the size - /// information must be provided by external calls. Usage of this option - /// enables @b force_read_elem_count() and @b clear_read_elem_count() functions in - /// the collection fields, such as nil::marshalling::types::array_list or - /// nil::marshalling::types::string which can be used to specify the size information after it was read - /// independently. - /// @headerfile nil/marshalling/options.hpp - struct sequence_size_forcing_enabled { }; - - /// @brief Option to enable external forcing of the collection's serialization length - /// duting "read" operation. - /// @details Sometimes the length information is detached from the data sequence - /// itself, i.e. there may be one or more independent fields between the - /// length field and the first byte of the collection. In such case it becomes - /// impossible to use @ref sequence_ser_length_field_prefix option. Instead, the length - /// information must be provided by external calls. Usage of this option - /// enables @b force_read_length() and @b clear_read_length_forcing() functions in - /// the collection fields, such as nil::marshalling::types::array_list or - /// nil::marshalling::types::string which can be used to specify the size information after it was read - /// independently. - /// @headerfile nil/marshalling/options.hpp - struct sequence_length_forcing_enabled { }; - - /// @brief Option to enable external forcing of the collection element - /// serialization length. - /// @details Some protocols may prefix the variable length lists with serialization - /// length of a single element in addition to the number of elements - /// in the list. Usage of this option - /// enables @b force_read_elem_length() and @b clear_read_elem_length_forcing() functions in - /// the nil::marshalling::types::array_list - /// which can be used to specify the element serialization length after it was read - /// independently. @n - /// @headerfile nil/marshalling/options.hpp - struct sequence_elem_length_forcing_enabled { }; - - /// @brief Option used to define exact number of elements in the collection field. - /// @details Protocol specification may define that there is exact number of - /// elements in the sequence. Use sequence_fixed_size option to convey - /// this information to the field definition, which will force @b read() and - /// @b write() member functions of the collection field to behave as expected. - /// @headerfile nil/marshalling/options.hpp - template - struct sequence_fixed_size { }; + using size_t_sequence_size_field_prefix = sequence_size_field_prefix< + nil::crypto3::marshalling::types::integral>; /// @brief Option that forces usage of fixed size storage for sequences with fixed /// size. /// @details Equivalent to @ref fixed_size_storage option, but applicable only - /// to sequence types @ref nil::marshalling::types::array_list or @ref nil::marshalling::types::string, + /// to sequence types @ref nil::crypto3::marshalling::types::array_list or @ref nil::crypto3::marshalling::types::string, /// that alrady use @ref sequence_fixed_size option. Usage of this option do not require knowledge of /// the storage area size. /// @headerfile nil/marshalling/options.hpp struct sequence_fixed_size_use_fixed_size_storage { }; - /// @brief Option that specifies default initialisation class. - /// @details Use this option when default constructor of the field must assign - /// some special value. The initializer class provided as template argument - /// must define the following member function: - /// @code - /// struct MyInitialiser - /// { - /// template - /// void operator()(TField& field) {...} - /// }; - /// @endcode - /// For example, we want string field that will have "hello" as its default - /// value. The provided initializer class with the option will be instantiated - /// and its operator() is invoked which is responsible to assign proper - /// value to the field. - /// @code - /// struct MyStringInitialiser - /// { - /// template - /// void operator()(TField& field) const - /// { - /// field.value() = hello; - /// } - /// }; - /// - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::string< - /// MyFieldBase, - /// nil::marshalling::option::default_value_initializer - /// >; - /// @endcode - /// @tparam T Type of the initializer class. - /// @headerfile nil/marshalling/options.hpp - template - struct default_value_initializer { }; - - /// @brief Option that specifies custom validation class. - /// @details By default, value of every field is considered to be valid - /// (@b valid() member function of the field returns @b true). If there is a need - /// to validate the value of the function, use this option to define - /// custom validation logic for the field. The validation class provided as - /// a template argument to this option must define the following member function: - /// @code - /// struct MyValidator - /// { - /// template - /// bool operator()(const TField& field) {...} - /// }; - /// @endcode - /// For example, value of the string field considered to be valid if it's - /// not empty and starts with '$' character. - /// The provided validator class with the option will be instantiated - /// and its operator() will be invoked. - /// @code - /// struct MyStringValidator - /// { - /// template - /// bool operator()(TField& field) const - /// { - /// auto& str = field.value(); - /// return (!str.empty()) && (str[0] == '$'); - /// } - /// }; - /// - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::string< - /// MyFieldBase, - /// nil::marshalling::option::contents_validator - /// >; - /// @endcode - /// Note that in the example above the default constructed MyField will - /// have invalid value. To fix that you must also use - /// nil::marshalling::option::default_value_initializer option to specify proper default - /// value. - /// @tparam T Type of the validator class. - /// @headerfile nil/marshalling/options.hpp - template - struct contents_validator { }; - - /// @brief Option that specifies custom refreshing class. - /// @details The "refreshing" functionality is there to allow bringing field's - /// contents into a consistent state if it's not. The default "refreshing" - /// functionality does nothing and returns @b false (meaning nothing has - /// been changed). If there is a need to provide custom refreshing functionality - /// use this option and provide custom refresher class. It must - /// define the following member function: - /// @code - /// struct MyRefresher - /// { - /// template - /// bool operator()(TField& field) { - /// ... // return true if field's contents changed - /// } - /// }; - /// @endcode - /// @tparam T Type of the refresher class. - /// @headerfile nil/marshalling/options.hpp - template - struct contents_refresher { }; - - /// @brief Option that specifies custom value reader class. - /// @details It may be useful to override default reading functionality for complex - /// fields, such as nil::marshalling::types::bundle, where the way members are read is - /// defined by the values of other members. For example, bundle of two integer - /// fields, the first one is normal, and the second one is optional. - /// The optional mode of the latter is determined by - /// the value of the first field. If its value is 0, than the second - /// member exists, otherwise it's missing. - /// @code - /// typedef nil::marshalling::types::bundle< - /// nil::marshalling::field_type, - /// std::tuple< - /// nil::marshalling::types::integral< - /// nil::marshalling::field_type, - /// std::uint8_t - /// >, - /// nil::marshalling::types::optional< - /// nil::marshalling::types::integral< - /// nil::marshalling::field_type, - /// std::uint16_t - /// > - /// > - /// >, - /// nil::marshalling::option::custom_value_reader - /// > field_type; - /// @endcode - /// The @b MyCustomReader custom reading class may implement required - /// functionality of reading the first member, analysing its value, setting - /// appropriate mode for the second one and read the second member. - /// - /// The custom value reader class provided as template argument - /// must define the following member function: - /// @code - /// struct MyCustomReader - /// { - /// template - /// nil::marshalling::ErrorStatus operator()(TField& field, TIter& iter, std::size_t len) {...} - /// }; - /// @endcode - /// - /// The custom reader for the example above may be implemented as: - /// @code - /// struct MyCustomReader - /// { - /// template - /// nil::marshalling::ErrorStatus operator()(TField& field, TIter& iter, std::size_t len) const - /// { - /// auto& members = field.value(); - /// auto& first = std::get<0>(members); - /// auto& second = std::get<1>(members); - /// - /// auto es = first.read(iter, len); - /// if (es != nil::marshalling::ErrorStatus::Success) { - /// return es; - /// } - /// - /// if (first.value() != 0) { - /// second.set_mode(nil::marshalling::types::optional_mode::missing); - /// } - /// else { - /// second.set_mode(nil::marshalling::types::optional_mode::exists); - /// } - /// - /// return second.read(iter, len - first.length()); - /// } - /// }; - /// @endcode - /// @tparam T Type of the custom reader class. - /// @headerfile nil/marshalling/options.hpp - template - struct custom_value_reader { }; - - /// @brief Option that forces field's read operation to fail if invalid value - /// is received. - /// @details Sometimes protocol is very strict about what field's values are - /// allowed and forces to abandon a message if invalid value is received. - /// If nil::marshalling::option::fail_on_invalid is provided as an option to a field, - /// the validity is going to checked automatically after the read. If invalid - /// value is identified, error will be returned from the @b read() operation. - /// @tparam TStatus Error status to return when the content of the read field is invalid. - /// @headerfile nil/marshalling/options.hpp - template - struct fail_on_invalid { }; - - /// @brief Option that forces field's read operation to ignore read data if invalid value - /// is received. - /// @details If this option is provided to the field, the read operation will - /// check the validity of the read value. If it is identified as invalid, - /// the read value is not assigned to the field, i.e. the field's value - /// remains unchanged, although no error is reported. - /// @headerfile nil/marshalling/options.hpp - struct ignore_invalid { }; - - /// @brief options to specify units of the field. - /// @tparam TType Type of the unints, can be any type from nil::marshalling::traits::units - /// namespace. - /// @tparam TRatio Ratio within the units type, must be a variant of - /// @b std::ratio type. - /// @headerfile nil/marshalling/options.hpp - template - struct units { - static_assert(detail::is_ratio_t(), "TRatio parameter must be a variant of std::ratio"); - - static_assert(TRatio::num != 0, "Wrong ratio value"); - static_assert(TRatio::den != 0, "Wrong ratio value"); - }; - - /// @brief Alias option, specifying field value units are "nanoseconds". - /// @headerfile nil/marshalling/options.hpp - using units_nanoseconds - = units; - - /// @brief Alias option, specifying field value units are "microseconds". - /// @headerfile nil/marshalling/options.hpp - using units_microseconds - = units; - - /// @brief Alias option, specifying field value units are "milliseconds". - /// @headerfile nil/marshalling/options.hpp - using units_milliseconds - = units; - - /// @brief Alias option, specifying field value units are "seconds". - /// @headerfile nil/marshalling/options.hpp - using units_seconds - = units; - - /// @brief Alias option, specifying field value units are "minutes". - /// @headerfile nil/marshalling/options.hpp - using units_minutes - = units; - - /// @brief Alias option, specifying field value units are "hours". - /// @headerfile nil/marshalling/options.hpp - using units_hours - = units; - - /// @brief Alias option, specifying field value units are "days". - /// @headerfile nil/marshalling/options.hpp - using units_days - = units; - - /// @brief Alias option, specifying field value units are "weeks". - /// @headerfile nil/marshalling/options.hpp - using units_weeks - = units; - - /// @brief Alias option, specifying field value units are "nanometers". - /// @headerfile nil/marshalling/options.hpp - using units_nanometers - = units; - - /// @brief Alias option, specifying field value units are "micrometers". - /// @headerfile nil/marshalling/options.hpp - using units_micrometers - = units; - - /// @brief Alias option, specifying field value units are "millimeters". - /// @headerfile nil/marshalling/options.hpp - using units_millimeters - = units; - - /// @brief Alias option, specifying field value units are "centimeters". - /// @headerfile nil/marshalling/options.hpp - using units_centimeters - = units; - - /// @brief Alias option, specifying field value units are "meters". - /// @headerfile nil/marshalling/options.hpp - using units_meters - = units; - - /// @brief Alias option, specifying field value units are "kilometers". - /// @headerfile nil/marshalling/options.hpp - using units_kilometers - = units; - - /// @brief Alias option, specifying field value units are "nanometers per second". - /// @headerfile nil/marshalling/options.hpp - using units_nanometers_per_second = units; - - /// @brief Alias option, specifying field value units are "micrometers per second". - /// @headerfile nil/marshalling/options.hpp - using units_micrometers_per_second = units; - - /// @brief Alias option, specifying field value units are "millimeters per second". - /// @headerfile nil/marshalling/options.hpp - using units_millimeters_per_second = units; - - /// @brief Alias option, specifying field value units are "centimeters per second". - /// @headerfile nil/marshalling/options.hpp - using units_centimeters_per_second = units; - - /// @brief Alias option, specifying field value units are "meters per second". - /// @headerfile nil/marshalling/options.hpp - using units_meters_per_second = units; - - /// @brief Alias option, specifying field value units are "kilometers per second". - /// @headerfile nil/marshalling/options.hpp - using units_kilometers_per_second = units; - - /// @brief Alias option, specifying field value units are "kilometers per hour". - /// @headerfile nil/marshalling/options.hpp - using units_kilometers_per_hour = units; - - /// @brief Alias option, specifying field value units are "hertz". - /// @headerfile nil/marshalling/options.hpp - using units_hertz - = units; - - /// @brief Alias option, specifying field value units are "kilohertz". - /// @headerfile nil/marshalling/options.hpp - using units_kilohertz - = units; - - /// @brief Alias option, specifying field value units are "megahertz". - /// @headerfile nil/marshalling/options.hpp - using units_megahertz - = units; - - /// @brief Alias option, specifying field value units are "gigahertz". - /// @headerfile nil/marshalling/options.hpp - using units_gigahertz - = units; - - /// @brief Alias option, specifying field value units are "degrees". - /// @headerfile nil/marshalling/options.hpp - using units_degrees - = units; - - /// @brief Alias option, specifying field value units are "radians". - /// @headerfile nil/marshalling/options.hpp - using units_radians - = units; - - /// @brief Alias option, specifying field value units are "nanoamps". - /// @headerfile nil/marshalling/options.hpp - using units_nanoamps - = units; - - /// @brief Alias option, specifying field value units are "microamps". - /// @headerfile nil/marshalling/options.hpp - using units_microamps - = units; - - /// @brief Alias option, specifying field value units are "milliamps". - /// @headerfile nil/marshalling/options.hpp - using units_milliamps - = units; - - /// @brief Alias option, specifying field value units are "amps". - /// @headerfile nil/marshalling/options.hpp - using units_amps - = units; - - /// @brief Alias option, specifying field value units are "kiloamps". - /// @headerfile nil/marshalling/options.hpp - using units_kiloamps - = units; - - /// @brief Alias option, specifying field value units are "nanovolts". - /// @headerfile nil/marshalling/options.hpp - using units_nanovolts - = units; - - /// @brief Alias option, specifying field value units are "microvolts". - /// @headerfile nil/marshalling/options.hpp - using units_microvolts - = units; - - /// @brief Alias option, specifying field value units are "millivolts". - /// @headerfile nil/marshalling/options.hpp - using units_millivolts - = units; - - /// @brief Alias option, specifying field value units are "volts". - /// @headerfile nil/marshalling/options.hpp - using units_volts - = units; - - /// @brief Alias option, specifying field value units are "kilovolts". - /// @headerfile nil/marshalling/options.hpp - using units_kilovolts - = units; - - namespace detail { - - template - struct default_num_value_initializer { - template - void operator()(TField &&field) { - using field_type = typename std::decay::type; - using value_type = typename field_type::value_type; - field.value() = static_cast(TVal); - } - }; - - template - struct num_value_range_validator { - static_assert(TMinValue <= TMaxValue, "Min value must be not greater than Max value"); - - template - constexpr bool operator()(const TField &field) const { - using MinTag = - typename std::conditional<(std::numeric_limits::min() < MinValue), - compare_tag, return_true_tag>::type; - - using MaxTag = - typename std::conditional<(MaxValue < std::numeric_limits::max()), - compare_tag, return_true_tag>::type; - - return above_min(field.value(), MinTag()) && below_max(field.value(), MaxTag()); - } - - private: - struct return_true_tag { }; - struct compare_tag { }; - - template - static constexpr bool above_min(const TValue &value, compare_tag) { - using value_type = typename std::decay::type; - return (static_cast(MinValue) <= static_cast(value)); - } - - template - static constexpr bool above_min(const TValue &, return_true_tag) { - return true; - } - - template - static constexpr bool below_max(const TValue &value, compare_tag) { - using value_type = typename std::decay::type; - return (value <= static_cast(MaxValue)); - } - - template - static constexpr bool below_max(const TValue &, return_true_tag) { - return true; - } - - static const auto MinValue = TMinValue; - static const auto MaxValue = TMaxValue; - }; - - template - struct bitmask_reserved_bits_validator { - template - constexpr bool operator()(TField &&field) const { - using field_type = typename std::decay::type; - using value_type = typename field_type::value_type; - - return (field.value() & static_cast(TMask)) == static_cast(TValue); - } - }; - - template - struct default_opt_mode_initializer { - template - void operator()(TField &field) const { - field.set_mode(TVal); - } - }; - - template - struct default_variant_index_initializer { - template - void operator()(TField &field) { - field.template init_field(); - } - }; - - } // namespace detail - - /// @brief Alias to default_value_initializer, it defines initializer class that - /// assigns numeric value provided as the template argument to this option. - /// @details If the required numeric value is too big (doesn't fit into @b - /// std::intmax_t type), please use @ref DefaultBigUnsignedNumValue option - /// class instead. - /// @tparam TVal Numeric value is to be assigned to the field in default constructor. - /// @see @ref DefaultBigUnsignedNumValue - /// @headerfile nil/marshalling/options.hpp - template - using default_num_value - = default_value_initializer>; - - /// @brief Alias to default_value_initializer, it defines initializer class that - /// assigns big unsigned numeric value provided as the template argument to this option. - /// @details If the required numeric value is small enough to fit into @b - /// std::intmax_t type, it is recommended to use @ref default_num_value option - /// class instead. - /// @tparam TVal Numeric value is to be assigned to the field in default constructor. - /// @see @ref DefaultBigUnsignedNumValue - /// @headerfile nil/marshalling/options.hpp - template - using default_big_unsigned_num_value - = default_value_initializer>; - - /// @brief Provide range of valid numeric values. - /// @details Quite often numeric fields such as nil::marshalling::types::integral or - /// nil::marshalling::types::enumeration have limited number of valid values ranges. - /// This option can be used multiple times to provide several valid ranges.@n - /// If values are too big to fit into @b std::intmax_t type, please use - /// @ref valid_big_unsigned_num_value_range option instead. - /// @tparam TMinValue Minimal valid numeric value - /// @tparam TMaxValue Maximal valid numeric value - /// @note The intersection of the provided multiple ranges is @b NOT checked. - /// @warning Some older compilers (@b gcc-4.7) fail to compile valid C++11 code - /// that allows usage of multiple @ref valid_num_value_range options. If this is - /// the case, please don't pass more than one @ref valid_num_value_range option. - /// @see @ref valid_num_value - /// @see @ref valid_big_unsigned_num_value_range - /// @headerfile nil/marshalling/options.hpp - template - struct valid_num_value_range { - static_assert(TMinValue <= TMaxValue, "Invalid range"); - }; - - /// @brief Clear accumulated ranges of valid values. - struct valid_ranges_clear { }; - - /// @brief Similar to @ref valid_num_value_range, but overrides (nullifies) - /// all previously set valid values ranges. - /// @see @ref ValidNumValueOverride - /// @see @ref ValidBigUnsignedNumValueRangeOverride - /// @deprecated Use @ref valid_ranges_clear instead. - template - using valid_num_value_range_override - = std::tuple, valid_ranges_clear>; - - /// @brief Alias to @ref valid_num_value_range. - /// @details Equivalent to @b valid_num_value_range - template - using valid_num_value = valid_num_value_range; - - /// @brief Alias to @ref valid_num_value_rangeOverride. - /// @details Equivalent to @b valid_num_value_rangeOverride - /// @deprecated Use @ref valid_ranges_clear instead. - template - using valid_num_value_override = valid_num_value_range_override; - - /// @brief Provide range of valid unsigned numeric values. - /// @details Similar to @ref valid_num_value_range, but dedicated to - /// big unsigned numbers, which don't fit into @b std::intmax_t type. - /// @tparam TMinValue Minimal valid numeric value - /// @tparam TMaxValue Maximal valid numeric value - /// @note The intersection of the provided multiple ranges is @b NOT checked. - /// @warning Some older compilers (@b gcc-4.7) fail to compile valid C++11 code - /// that allows usage of multiple @ref valid_num_value_range options. If this is - /// the case, please don't pass more than one - /// @ref valid_num_value_range or @ref valid_big_unsigned_num_value_range option. - /// @see @ref valid_num_value_range - /// @see @ref valid_big_unsigned_num_value_range - /// @headerfile nil/marshalling/options.hpp - template - struct valid_big_unsigned_num_value_range { - static_assert(TMinValue <= TMaxValue, "Invalid range"); - }; - - /// @brief Similar to @ref valid_big_unsigned_num_value_range, but overrides (nullifies) - /// all previously set valid values ranges. - /// @see @ref ValidNumValueOverride - /// @see @ref ValidBigUnsignedNumValueOverride - /// @deprecated Use @ref valid_ranges_clear instead. - template - using valid_big_unsigned_num_value_range_override - = std::tuple, valid_ranges_clear>; - - /// @brief Alias to @ref valid_big_unsigned_num_value_range. - /// @details Equivalent to @b valid_big_unsigned_num_value_range - template - using valid_big_unsigned_num_value = valid_big_unsigned_num_value_range; - - /// @brief Alias to @ref ValidBigUnsignedNumValueRangeOverride. - /// @details Equivalent to @b ValidBigUnsignedNumValueRangeOverride - /// @deprecated Use @ref valid_ranges_clear instead. - template - using valid_big_unsigned_num_value_override = valid_big_unsigned_num_value_range_override; - - /// @brief Alias to contents_validator, it defines validator class that checks - /// that reserved bits of the field have expected values. - /// @details It is usually used with nil::marshalling::types::BitmaskValue field to - /// specify values of the unused/reserved bits. - /// The custom validator will return true if - /// @code - /// (field.value() & TMask) == TValue - /// @endcode - /// @tparam TMask Mask that specifies reserved bits. - /// @tparam TValue Expected value of the reserved bits. Defaults to 0. - /// @headerfile nil/marshalling/options.hpp - template - using bitmask_reserved_bits = contents_validator>; - - /// @brief Alias to default_value_initializer, it sets default mode - /// to types::optional field. - /// @tparam TVal optional mode value is to be assigned to the field in default constructor. - /// @see @ref MissingByDefault - /// @see @ref ExistsByDefault - /// @headerfile nil/marshalling/options.hpp - template - using default_optional_mode = default_value_initializer>; - - /// @brief Alias to @ref default_optional_mode. - /// @details Equivalent to - /// @code - /// default_optional_mode - /// @endcode - using missing_by_default = default_optional_mode; - - /// @brief Alias to @ref default_optional_mode. - /// @details Equivalent to - /// @code - /// default_optional_mode - /// @endcode - using exists_by_default = default_optional_mode; - - /// @brief Alias to default_optional_mode - using optional_missing_by_default = missing_by_default; - - /// @brief Alias to default_optional_mode - using optional_exists_by_default = exists_by_default; - - /// @brief Alias to default_value_initializer, it initalises nil::marshalling::types::variant field - /// to contain valid default value of the specified member. - /// @tparam TIdx Index of the default member. - /// @headerfile nil/marshalling/options.hpp - template - using default_variant_index = default_value_initializer>; - /// @brief Use "view" on original raw data instead of copying it. - /// @details Can be used with @ref nil::marshalling::types::string and raw data @ref - /// nil::marshalling::types::array_list, - /// will force usage of @ref nil::marshalling::container::string_view and - /// nil::marshalling::container::array_view respectively as data storage type. + /// @details Can be used with @ref nil::crypto3::marshalling::types::string and raw data @ref + /// nil::crypto3::marshalling::types::array_list, + /// will force usage of @ref nil::crypto3::marshalling::container::string_view and + /// nil::crypto3::marshalling::container::array_view respectively as data storage type. /// @note The original data must be preserved until destruction of the field /// that uses the "view". /// @note Incompatible with other options that contol data storage type, - /// such as @ref nil::marshalling::option::custom_storage_type or @ref - /// nil::marshalling::option::fixed_size_storage + /// such as @ref nil::crypto3::marshalling::option::custom_storage_type or @ref + /// nil::crypto3::marshalling::option::fixed_size_storage /// @headerfile nil/marshalling/options.hpp struct orig_data_view { }; - /// @brief Force field not to be serialized during read/write operations - /// @details Some protocols may define some constant values that are predefined - /// and are not present on I/O link when serialized. Sometimes it is convenient - /// to have such values abstracted away as fields, which are not actually - /// serialized. Using this option will have such effect: read/write operaitons - /// will not change the value of iterators and will report immediate success. - /// The serialization length is always reported as 0. - /// @headerfile nil/marshalling/options.hpp - struct empty_serialization { }; - - /// @brief Mark this class to have custom - /// implementation of @b read functionality. - /// @headerfile nil/marshalling/options.hpp - struct has_custom_read { }; - - /// @brief Mark this class to have custom - /// implementation of @b refresh functionality. - /// @headerfile nil/marshalling/options.hpp - struct has_custom_refresh { }; - /// @brief Provide type to be used for versioning /// @tparam T Type of the version value. Expected to be unsigned integral one. template @@ -1134,37 +182,6 @@ namespace nil { /// @headerfile nil/marshalling/options.hpp struct has_custom_version_update { }; - /// @brief Mark an @ref nil::marshalling::types::optional field as existing - /// between specified versions. - /// @tparam TFrom First version when field has been added - /// @tparam TUntil Last version when field still hasn't been removed. - /// @pre @b TFrom <= @b TUntil - template - struct exists_between_versions { - static_assert(TFrom <= TUntil, "Invalid version parameters"); - }; - - /// @brief Mark an @ref nil::marshalling::types::optional field as existing - /// starting from specified version. - /// @details Alias to @ref ExistsBetweenVersions - /// @tparam TVer First version when field has been added - template - using exists_since_version = exists_between_versions::max()>; - - /// @brief Mark an @ref nil::marshalling::types::optional field as existing - /// only until specified version. - /// @details Alias to @ref ExistsBetweenVersions - /// @tparam TVer Last version when field still hasn't been removed. - template - using exists_until_version = exists_between_versions<0, TVer>; - - /// @brief Make the field's contents to be invalid by default. - struct invalid_by_default { }; - - /// @brief Add storage of version information inside private data members. - /// @details The version information can be accessed using @b get_version() member function. - struct version_storage { }; - } // namespace option } // namespace marshalling } // namespace nil diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/access.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/access.hpp index 92f844675b..b0d1815905 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/access.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/access.hpp @@ -35,7 +35,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace processing { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/aligned_union.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/aligned_union.hpp deleted file mode 100644 index 960f2a8ce6..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/aligned_union.hpp +++ /dev/null @@ -1,65 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_PROCESSING_ALIGNED_UNION_HPP -#define MARSHALLING_PROCESSING_ALIGNED_UNION_HPP - -#include - -namespace nil { - namespace marshalling { - namespace processing { - - /// @cond SKIP_DOC - template - class aligned_union { - using other_storage_type = typename aligned_union::type; - static const std::size_t other_size = sizeof(other_storage_type); - static const std::size_t other_alignment = std::alignment_of::value; - using first_storage_type = typename aligned_union::type; - static const std::size_t first_size = sizeof(first_storage_type); - static const std::size_t first_alignment = std::alignment_of::value; - static const std::size_t max_size = first_size > other_size ? first_size : other_size; - static const std::size_t max_alignment - = first_alignment > other_alignment ? first_alignment : other_alignment; - - public: - /// Type that has proper size and proper alignment to keep any of the - /// specified types - using type = typename std::aligned_storage::type; - }; - - template - class aligned_union { - public: - using type = typename std::aligned_storage::value>::type; - }; - - /// @endcond - - } // namespace processing - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_PROCESSING_ALIGNED_UNION_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/bit_size_to_byte_size.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/bit_size_to_byte_size.hpp index f13b703a79..0fa4e025b7 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/bit_size_to_byte_size.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/bit_size_to_byte_size.hpp @@ -28,7 +28,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace processing { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/access.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/access.hpp index 49c02b0bcb..91cbc905ce 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/access.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/access.hpp @@ -34,7 +34,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace processing { namespace detail { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/size_to_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/size_to_type.hpp index 9e6d90da28..098e880c65 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/size_to_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/detail/size_to_type.hpp @@ -29,7 +29,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace processing { namespace detail { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/size_to_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/size_to_type.hpp index 997c6fe073..3b0923c184 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/size_to_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/size_to_type.hpp @@ -31,7 +31,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace processing { /// @cond SKIP_DOC diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/tuple.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/tuple.hpp index 281de480c6..47f7506dbe 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/processing/tuple.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/processing/tuple.hpp @@ -34,45 +34,15 @@ #include #include -#include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace processing { - /// @brief Calculated "aligned union" storage type for all the types in - /// provided tuple. - /// @tparam TTuple Tuple - /// @pre @code IsTuple::value == true @endcode - template - struct tuple_as_aligned_union { - /// @cond DOCUMENT_STATIC_ASSERT - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); - /// @endcond - - /// @brief Type definition is invalid for any type that is not - /// std::tuple, - /// will be specialised to proper value. - using type = void; - }; - - /// @cond SKIP_DOC - template - struct tuple_as_aligned_union> { - using type = typename aligned_union::type; - }; - /// @endcond - - /// @brief Alias to @ref tuple_as_aligned_union::type - template - using tuple_as_aligned_union_type = typename tuple_as_aligned_union::type; - - //---------------------------------------- - /// @brief Check whether tuple is unique, i.e. doesn't have contain types. template struct tuple_is_unique { - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); /// @brief Value is set to true when tuple is discovered to be unique. static const bool value = false; @@ -81,7 +51,7 @@ namespace nil { /// @cond SKIP_DOC template struct tuple_is_unique> { - static const bool value = (!nil::detail::is_in_tuple>::value) + static const bool value = (!marshalling::detail::is_in_tuple>::value) && tuple_is_unique>::value; }; @@ -103,7 +73,7 @@ namespace nil { template static void exec(TTuple &&tuple, TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static const std::size_t TupleSize = std::tuple_size::value; static const std::size_t OffsetedRem = TRem + TOff; static_assert(OffsetedRem <= TupleSize, "Incorrect parameters"); @@ -220,7 +190,7 @@ namespace nil { template static void exec(TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static const std::size_t TupleSize = std::tuple_size::value; static_assert(TRem <= TupleSize, "Incorrect TRem"); @@ -276,7 +246,7 @@ namespace nil { template static void exec(TTuple &&tuple, TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static const std::size_t TupleSize = std::tuple_size::value; static_assert(TRem <= TupleSize, "Incorrect TRem"); @@ -332,7 +302,7 @@ namespace nil { template static void exec(TTuple &&tuple, TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static const std::size_t TupleSize = std::tuple_size::value; static_assert(TRem <= TupleSize, "Incorrect TRem"); @@ -397,7 +367,7 @@ namespace nil { template static constexpr TValue exec(TTuple &&tuple, const TValue &value, TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static_assert((TOff + TRem) <= std::tuple_size::value, "Incorrect params"); return tuple_accumulate_helper::exec( @@ -482,7 +452,7 @@ namespace nil { template static constexpr TValue exec(const TValue &value, TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static_assert((TOff + TRem) <= std::tuple_size::value, "Incorrect TRem"); return tuple_type_accumulate_helper::template exec( @@ -562,8 +532,8 @@ namespace nil { /// @tparam TSecond Type of the second tuple. template struct tuple_cat { - static_assert(nil::detail::is_tuple::value, "TFirst must be tuple"); - static_assert(nil::detail::is_tuple::value, "TSecond must be tuple"); + static_assert(marshalling::detail::is_tuple::value, "TFirst must be tuple"); + static_assert(marshalling::detail::is_tuple::value, "TSecond must be tuple"); /// @brief Result type of tuples concatenation. using type = typename std::decay(), @@ -588,7 +558,7 @@ namespace nil { template static void exec(std::size_t idx, TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static const std::size_t TupleSize = std::tuple_size::value; static_assert(TCount <= TupleSize, "Incorrect TCount"); static_assert(0U < TCount, "Incorrect instantiation"); @@ -653,7 +623,7 @@ namespace nil { template void tuple_for_selected_type(std::size_t idx, TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "Provided tupe must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "Provided tupe must be std::tuple"); static const std::size_t TupleSize = std::tuple_size::value; static_assert(0U < TupleSize, "Empty tuples are not supported"); @@ -694,8 +664,8 @@ namespace nil { /// @tparam TTuple Containing tuple template constexpr bool tuple_is_tail_of() { - static_assert(nil::detail::is_tuple::value, "TTail param must be tuple"); - static_assert(nil::detail::is_tuple::value, "TTuple param must be tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTail param must be tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple param must be tuple"); return std::tuple_size::value <= std::tuple_size::value && detail::tuple_tail_check_helpler< TTail, TTuple, std::tuple_size::value - std::tuple_size::value>::value; @@ -712,7 +682,7 @@ namespace nil { template static constexpr bool check(TFunc &&func) { using Tuple = typename std::decay::type; - static_assert(nil::detail::is_tuple::value, "TTuple must be std::tuple"); + static_assert(marshalling::detail::is_tuple::value, "TTuple must be std::tuple"); static_assert(TRem <= std::tuple_size::value, "Incorrect TRem"); using ElemType = typename std::tuple_element::value - TRem, Tuple>::type; return @@ -740,7 +710,7 @@ namespace nil { template constexpr bool tuple_type_is_any_of(TFunc &&func) { - static_assert(nil::detail::is_tuple::value, "Tuple as argument is expected"); + static_assert(marshalling::detail::is_tuple::value, "Tuple as argument is expected"); return detail::tuple_type_is_any_of_helper::value>::template check( std::forward(func)); } diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/status_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/status_type.hpp index 16d7ea79ba..728cc516e4 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/status_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/status_type.hpp @@ -32,7 +32,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { /// @brief Error statuses. @@ -70,7 +70,7 @@ namespace nil { { public: // Return a short descriptive name for the category - virtual const char *name() const noexcept override final { return "nil::marshalling::status_type"; } + virtual const char *name() const noexcept override final { return "nil::crypto3::marshalling::status_type"; } // Return what each enum means in text virtual std::string message(int c) const override final { @@ -106,21 +106,21 @@ namespace nil { namespace std { - template <> struct is_error_code_enum : true_type + template <> struct is_error_code_enum : true_type { }; } -inline std::error_code make_error_code(nil::marshalling::status_type e) +inline std::error_code make_error_code(nil::crypto3::marshalling::status_type e) { - static nil::marshalling::status_type_category category; + static nil::crypto3::marshalling::status_type_category category; return {static_cast(e), category}; } #if defined(CRYPTO3_MARSHALLING_THROWS) #define THROW_IF_ERROR_STATUS(status, message) \ - if (nil::marshalling::status_type::success != status) { \ + if (nil::crypto3::marshalling::status_type::success != status) { \ std::stringstream os; os << "While performing operation " << std::string(message) \ << " marshalling error status received: " << make_error_code(status) \ << " @" << __FILE__ << ":" << __LINE__ << std::endl; \ @@ -130,7 +130,7 @@ inline std::error_code make_error_code(nil::marshalling::status_type e) #else #define THROW_IF_ERROR_STATUS(status, message) \ - BOOST_VERIFY_MSG(nil::marshalling::status_type::success == status, message) + BOOST_VERIFY_MSG(nil::crypto3::marshalling::status_type::success == status, message) #endif #endif // MARSHALLING_STATUS_TYPE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/type_traits.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/type_traits.hpp index 9bf9278b41..512698e83e 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/type_traits.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/type_traits.hpp @@ -34,15 +34,15 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { BOOST_TTI_HAS_TYPE(tag) /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::array_list. + /// variant of nil::crypto3::marshalling::types::array_list. /// @tparam T Any type. /// @return true in case provided type is any variant of @ref array_list - /// @related nil::marshalling::types::array_list + /// @related nil::crypto3::marshalling::types::array_list template struct is_array_list { @@ -57,32 +57,10 @@ namespace nil { }; /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::bitfield. - /// @tparam T Any type. - /// @return true in case provided type is any variant of @ref bitfield - /// @related nil::marshalling::types::bitfield - template - struct is_bitfield { - static const bool value = has_type_tag>::value; - }; - - /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::bitmask_value. - /// @tparam T Any type. - /// @return true in case provided type is any variant of @ref bitmask_value - /// @related nil::marshalling::types::bitmask_value - template - struct is_bitmask_value { - static const bool value = has_type_tag>::value; - }; - - /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::bundle. + /// variant of nil::crypto3::marshalling::types::bundle. /// @tparam T Any type. /// @return true in case provided type is any variant of @ref bundle - /// @related nil::marshalling::types::bundle + /// @related nil::crypto3::marshalling::types::bundle template struct is_bundle { static const bool value = has_type_tag - struct is_enumeration { - static const bool value = has_type_tag>::value; - }; - - /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::float_value. - /// @tparam T Any type. - /// @return true in case provided type is any variant of @ref float_value - /// @related nil::marshalling::types::float_value - template - struct is_float_value { - static const bool value = has_type_tag>::value; - }; - - /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::integral. + /// variant of nil::crypto3::marshalling::types::integral. /// @tparam T Any type. /// @return true in case provided type is any variant of @ref integral - /// @related nil::marshalling::types::integral + /// @related nil::crypto3::marshalling::types::integral template struct is_integral { static const bool value = has_type_tag - struct is_no_value { - static const bool value = has_type_tag>::value; - }; - - /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::optional. - /// @tparam T Any type. - /// @return true in case provided type is any variant of @ref optional - /// @related nil::marshalling::types::optional - template - struct is_optional { - static const bool value = has_type_tag>::value; - }; - - /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::string. + /// variant of nil::crypto3::marshalling::types::string. /// @tparam T Any type. /// @return true in case provided type is any variant of @ref string - /// @related nil::marshalling::types::string + /// @related nil::crypto3::marshalling::types::string template struct is_string { static const bool value = has_type_tag>::value; }; - /// @brief Compile time check function of whether a provided type is any - /// variant of nil::marshalling::types::variant. - /// @tparam T Any type. - /// @return true in case provided type is any variant of @ref variant - /// @related nil::marshalling::types::variant - template - struct is_variant { - static const bool value = has_type_tag>::value; - }; - template struct is_marshalling_type { static const bool value = @@ -176,8 +99,7 @@ namespace nil { struct is_container; template - struct is_container ::value - || is_float_value::value>::type> { + struct is_container ::value>::type> { static const bool value = false; }; @@ -273,4 +195,4 @@ namespace nil { } // namespace marshalling } // namespace nil -#endif // MARSHALLING_TYPE_TRAITS_HPP \ No newline at end of file +#endif // MARSHALLING_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_refresher.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_refresher.hpp deleted file mode 100644 index 328b79345b..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_refresher.hpp +++ /dev/null @@ -1,67 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_CUSTOM_REFRESHER_HPP -#define MARSHALLING_CUSTOM_REFRESHER_HPP - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class custom_refresher : public TBase { - using base_impl_type = TBase; - using refresher_type = TRefresher; - - public: - using value_type = typename base_impl_type::value_type; - - custom_refresher() = default; - - explicit custom_refresher(const value_type &val) : base_impl_type(val) { - } - - explicit custom_refresher(value_type &&val) : base_impl_type(std::move(val)) { - } - - custom_refresher(const custom_refresher &) = default; - - custom_refresher(custom_refresher &&) = default; - - custom_refresher &operator=(const custom_refresher &) = default; - - custom_refresher &operator=(custom_refresher &&) = default; - - bool refresh() { - return (refresher_type()(*this)); - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_CUSTOM_REFRESHER_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_validator.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_validator.hpp deleted file mode 100644 index 6ef8ef0d31..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_validator.hpp +++ /dev/null @@ -1,67 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_CUSTOM_VALIDATOR_HPP -#define MARSHALLING_CUSTOM_VALIDATOR_HPP - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class custom_validator : public TBase { - using base_impl_type = TBase; - using validator_type = TValidator; - - public: - using value_type = typename base_impl_type::value_type; - - custom_validator() = default; - - explicit custom_validator(const value_type &val) : base_impl_type(val) { - } - - explicit custom_validator(value_type &&val) : base_impl_type(std::move(val)) { - } - - custom_validator(const custom_validator &) = default; - - custom_validator(custom_validator &&) = default; - - custom_validator &operator=(const custom_validator &) = default; - - custom_validator &operator=(custom_validator &&) = default; - - bool valid() const { - return base_impl_type::valid() && (validator_type()(*this)); - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_CUSTOM_VALIDATOR_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_value_reader.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_value_reader.hpp deleted file mode 100644 index 05617d5997..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/custom_value_reader.hpp +++ /dev/null @@ -1,90 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_CUSTOM_VALUE_READER_HPP -#define MARSHALLING_CUSTOM_VALUE_READER_HPP - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class custom_value_reader : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - - custom_value_reader() = default; - - explicit custom_value_reader(const value_type &val) : base_impl_type(val) { - } - - explicit custom_value_reader(value_type &&val) : base_impl_type(std::move(val)) { - } - - custom_value_reader(const custom_value_reader &) = default; - - custom_value_reader(custom_value_reader &&) = default; - - custom_value_reader &operator=(const custom_value_reader &) = default; - - custom_value_reader &operator=(custom_value_reader &&) = default; - - template - status_type read(TIter &iter, std::size_t size) { - return T()(static_cast(*this), iter, size); - } - - template - status_type read_from(TIter &iter, std::size_t size) = delete; - - template - status_type read_until(TIter &iter, std::size_t size) = delete; - - template - status_type read_from_until(TIter &iter, std::size_t size) = delete; - - template - void read_no_status(TIter &iter) = delete; - - template - void read_from_no_status(TIter &iter) = delete; - - template - void read_until_no_status(TIter &iter) = delete; - - template - void read_from_until_no_status(TIter &iter) = delete; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_CUSTOM_VALUE_READER_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/default_value_initializer.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/default_value_initializer.hpp deleted file mode 100644 index f95dfa95da..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/default_value_initializer.hpp +++ /dev/null @@ -1,67 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_DEFAULT_VALUE_INITIALISER_HPP -#define MARSHALLING_DEFAULT_VALUE_INITIALISER_HPP - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class default_value_initializer : public TBase { - using base_impl_type = TBase; - using initializer_type = TInitializer; - - public: - using value_type = typename base_impl_type::value_type; - - default_value_initializer() { - initializer_type()(*this); - } - - explicit default_value_initializer(const value_type &val) : base_impl_type(val) { - } - - explicit default_value_initializer(value_type &&val) : base_impl_type(std::move(val)) { - } - - default_value_initializer(const default_value_initializer &) = default; - - default_value_initializer(default_value_initializer &&) = default; - - default_value_initializer &operator=(const default_value_initializer &) = default; - - default_value_initializer &operator=(default_value_initializer &&) = default; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_DEFAULT_VALUE_INITIALISER_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/empty_serialization.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/empty_serialization.hpp deleted file mode 100644 index 87e86f6242..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/empty_serialization.hpp +++ /dev/null @@ -1,95 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_EMPTY_SERIALIZATION_HPP -#define MARSHALLING_EMPTY_SERIALIZATION_HPP - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class empty_serialization : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - - empty_serialization() = default; - - explicit empty_serialization(const value_type &val) : base_impl_type(val) { - } - - explicit empty_serialization(value_type &&val) : base_impl_type(std::move(val)) { - } - - empty_serialization(const empty_serialization &) = default; - - empty_serialization(empty_serialization &&) = default; - - empty_serialization &operator=(const empty_serialization &) = default; - - empty_serialization &operator=(empty_serialization &&) = default; - - static constexpr std::size_t length() { - return 0U; - } - - static constexpr std::size_t min_length() { - return length(); - } - - static constexpr std::size_t max_length() { - return length(); - } - - template - static status_type read(TIter &, std::size_t) { - return status_type::success; - } - - template - static void read_no_status(TIter &) { - } - - template - static status_type write(TIter &, std::size_t) { - return status_type::success; - } - - template - static void write_no_status(TIter &) { - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_EMPTY_SERIALIZATION_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/exists_between_versions.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/exists_between_versions.hpp deleted file mode 100644 index aefdae7f4c..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/exists_between_versions.hpp +++ /dev/null @@ -1,130 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_EXISTS_BETWEEN_VERSIONS_HPP -#define MARSHALLING_EXISTS_BETWEEN_VERSIONS_HPP - -#include -#include -#include -#include - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class exists_between_versions : public TBase { - using base_impl_type = TBase; - static_assert(TFrom <= TUntil, "Invalid parameters"); - - public: - using value_type = typename base_impl_type::value_type; - using version_type = typename base_impl_type::version_type; - - exists_between_versions() = default; - - explicit exists_between_versions(const value_type &val) : base_impl_type(val) { - } - - explicit exists_between_versions(value_type &&val) : base_impl_type(std::move(val)) { - } - - exists_between_versions(const exists_between_versions &) = default; - - exists_between_versions(exists_between_versions &&) = default; - - exists_between_versions &operator=(const exists_between_versions &) = default; - - exists_between_versions &operator=(exists_between_versions &&) = default; - - static constexpr bool is_version_dependent() { - return true; - } - - bool set_version(version_type version) { - bool updated = base_impl_type::set_version(version); - typename types::optional_mode mode = - types::optional_mode::missing; - if (above_from(version) && below_until(version)) { - mode = types::optional_mode::exists; - } - - if (mode == base_impl_type::get_mode()) { - return updated; - } - - base_impl_type::set_mode(mode); - return true; - } - - private: - struct always_true_tag { }; - struct compare_tag { }; - - static bool above_from(version_type version) { - using tag = typename std::conditional::type; - return above_from(version, tag()); - } - - static constexpr bool above_from(version_type, always_true_tag) { - return true; - } - - static bool above_from(version_type version, compare_tag) { - static const version_type min_version = static_cast( - std::min(static_cast(std::numeric_limits::max()), TFrom)); - - return min_version <= version; - } - - static bool below_until(version_type version) { - using tag = typename std::conditional< - static_cast(std::numeric_limits::max()) <= TUntil, - always_true_tag, compare_tag>::type; - return below_until(version, tag()); - } - - static constexpr bool below_until(version_type, always_true_tag) { - return true; - } - - static bool below_until(version_type version, compare_tag) { - static const version_type max_version = static_cast( - std::min(static_cast(std::numeric_limits::max()), TUntil)); - - return version <= max_version; - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_EXISTS_BETWEEN_VERSIONS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fail_on_invalid.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fail_on_invalid.hpp deleted file mode 100644 index afe660e66f..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fail_on_invalid.hpp +++ /dev/null @@ -1,84 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_FAIL_ON_INVALID_HPP -#define MARSHALLING_FAIL_ON_INVALID_HPP - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class fail_on_invalid : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - - fail_on_invalid() = default; - - explicit fail_on_invalid(const value_type &val) : base_impl_type(val) { - } - - explicit fail_on_invalid(value_type &&val) : base_impl_type(std::move(val)) { - } - - fail_on_invalid(const fail_on_invalid &) = default; - - fail_on_invalid(fail_on_invalid &&) = default; - - fail_on_invalid &operator=(const fail_on_invalid &) = default; - - fail_on_invalid &operator=(fail_on_invalid &&) = default; - - template - status_type read(TIter &iter, std::size_t len) { - base_impl_type tmp; - status_type es = tmp.read(iter, len); - if (es != status_type::success) { - return es; - } - - if (!tmp.valid()) { - return TStatus; - } - - static_cast(*this) = std::move(tmp); - return status_type::success; - } - - template - void read_no_status(TIter &iter) = delete; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_FAIL_ON_INVALID_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fixed_bit_length.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fixed_bit_length.hpp deleted file mode 100644 index 0b83f08120..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fixed_bit_length.hpp +++ /dev/null @@ -1,203 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_FIXED_BIT_LENGTH_HPP -#define MARSHALLING_FIXED_BIT_LENGTH_HPP - -#include -#include - -#include -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class fixed_bit_length : public TBase { - using base_impl_type = TBase; - using base_serialized_type = typename base_impl_type::serialized_type; - - static const std::size_t bit_length = TLen; - static const std::size_t byte_length - = processing::bit_size_to_byte_size::value; - - static_assert(0 < bit_length, "Bit length is expected to be greater than 0"); - static_assert(byte_length <= sizeof(base_serialized_type), "The provided length limit is too big"); - - public: - using value_type = typename base_impl_type::value_type; - - using serialized_type = typename std::conditional< - (byte_length < sizeof(base_serialized_type)), - typename processing:: - size_to_type::value>::type, - base_serialized_type>::type; - - using endian_type = typename base_impl_type::endian_type; - - fixed_bit_length() = default; - - explicit fixed_bit_length(const value_type &val) : base_impl_type(val) { - } - - fixed_bit_length(const fixed_bit_length &) = default; - - fixed_bit_length(fixed_bit_length &&) = default; - - fixed_bit_length &operator=(const fixed_bit_length &) = default; - - fixed_bit_length &operator=(fixed_bit_length &&) = default; - - static constexpr std::size_t length() { - return byte_length; - } - - static constexpr std::size_t min_length() { - return length(); - } - - static constexpr std::size_t max_length() { - return length(); - } - - static constexpr serialized_type to_serialized(value_type val) { - return adjust_to_serialized(base_impl_type::to_serialized(val), has_sign_tag()); - } - - static constexpr value_type from_serialized(serialized_type val) { - return base_impl_type::from_serialized(adjust_from_serialized(val, has_sign_tag())); - } - - template - status_type read(TIter &iter, std::size_t size) { - if (size < length()) { - return status_type::not_enough_data; - } - - read_no_status(iter); - return status_type::success; - } - - template - void read_no_status(TIter &iter) { - serialized_type serializedValue = - processing::read_data( - iter, endian_type()); - base_impl_type::value() = from_serialized(serializedValue); - } - - template - status_type write(TIter &iter, std::size_t size) const { - if (size < length()) { - return status_type::buffer_overflow; - } - - write_no_status(iter); - return status_type::success; - } - - template - void write_no_status(TIter &iter) const { - base_impl_type::template write_data(to_serialized(base_impl_type::value()), iter); - } - - private: - struct unsigned_tag { }; - struct signed_tag { }; - struct no_sign_ext_tag { }; - struct must_sign_ext_tag { }; - - using has_sign_tag = typename std:: - conditional::value, signed_tag, unsigned_tag>::type; - - using unsigned_serialized_type = typename std::make_unsigned::type; - - using sign_ext_tag = - typename std::conditional - < bit_length(std::numeric_limits::digits), - must_sign_ext_tag, - no_sign_ext_tag>::type; - - static serialized_type adjust_to_serialized(base_serialized_type val, unsigned_tag) { - return static_cast(val & UnsignedValueMask); - } - - static serialized_type adjust_to_serialized(base_serialized_type val, signed_tag) { - unsigned_serialized_type valueTmp = - static_cast(val) & UnsignedValueMask; - - return sign_ext_unsigned_serialized(valueTmp); - } - - static base_serialized_type adjust_from_serialized(serialized_type val, unsigned_tag) { - return static_cast(val & UnsignedValueMask); - } - - static base_serialized_type adjust_from_serialized(serialized_type val, signed_tag) { - unsigned_serialized_type valueTmp = - static_cast(val) & UnsignedValueMask; - return static_cast(sign_ext_unsigned_serialized(valueTmp)); - } - - static serialized_type sign_ext_unsigned_serialized(unsigned_serialized_type val) { - return sign_ext_unsigned_serialized_internal(val, sign_ext_tag()); - } - - static serialized_type sign_ext_unsigned_serialized_internal(unsigned_serialized_type val, - must_sign_ext_tag) { - static_assert(bit_length < std::numeric_limits::digits, - "bit_length is expected to be less than number of bits in the value type"); - - static const unsigned_serialized_type SignExtMask - = ~((static_cast(1U) << bit_length) - 1); - static const unsigned_serialized_type SignMask = static_cast(1U) - << (bit_length - 1); - - if ((val & SignMask) != 0) { - val |= SignExtMask; - } - return static_cast(val); - } - - static serialized_type sign_ext_unsigned_serialized_internal(unsigned_serialized_type val, - no_sign_ext_tag) { - return static_cast(val); - } - - private: - static const unsigned_serialized_type UnsignedValueMask - = (static_cast(1U) << bit_length) - 1; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_FIXED_BIT_LENGTH_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fixed_length.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fixed_length.hpp deleted file mode 100644 index 86f7b5ddfa..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/fixed_length.hpp +++ /dev/null @@ -1,193 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_FIXED_LENGTH_HPP -#define MARSHALLING_FIXED_LENGTH_HPP - -#include -#include - -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class fixed_length : public TBase { - using base_impl_type = TBase; - using base_serialized_type = typename base_impl_type::serialized_type; - - public: - using value_type = typename base_impl_type::value_type; - - static_assert(TLen <= sizeof(base_serialized_type), "The provided length limit is too big"); - - using serialized_type = typename std::conditional< - (TLen < sizeof(base_serialized_type)), - typename processing:: - size_to_type::value>::type, - base_serialized_type>::type; - - using endian_type = typename base_impl_type::endian_type; - - fixed_length() = default; - - explicit fixed_length(const value_type &val) : base_impl_type(val) { - } - - fixed_length(const fixed_length &) = default; - - fixed_length(fixed_length &&) = default; - - fixed_length &operator=(const fixed_length &) = default; - - fixed_length &operator=(fixed_length &&) = default; - - static constexpr std::size_t length() { - return byte_length; - } - - static constexpr std::size_t min_length() { - return length(); - } - - static constexpr std::size_t max_length() { - return length(); - } - - static constexpr serialized_type to_serialized(value_type val) { - return adjust_to_serialized(base_impl_type::to_serialized(val), conversion_tag()); - } - - static constexpr value_type from_serialized(serialized_type val) { - return base_impl_type::from_serialized(adjust_from_serialized(val, conversion_tag())); - } - - template - status_type read(TIter &iter, std::size_t size) { - if (size < length()) { - return status_type::not_enough_data; - } - - read_no_status(iter); - return status_type::success; - } - - template - void read_no_status(TIter &iter) { - serialized_type serializedValue = processing::read_data( - iter, endian_type()); - base_impl_type::value() = from_serialized(serializedValue); - } - - template - status_type write(TIter &iter, std::size_t size) const { - if (size < length()) { - return status_type::buffer_overflow; - } - - write_no_status(iter); - return status_type::success; - } - - template - void write_no_status(TIter &iter) const { - base_impl_type::template write_data(to_serialized(base_impl_type::value()), iter); - } - - private: - struct just_cast_tag { }; - struct sign_extend_tag { }; - struct unsigned_tag { }; - struct signed_tag { }; - - using conversion_tag = typename std:: - conditional<(TLen < sizeof(serialized_type)), sign_extend_tag, just_cast_tag>::type; - - using has_sign_tag = - typename std::conditional::value && TSignExtend, - signed_tag, - unsigned_tag>::type; - - using unsigned_serialized_type = typename std::make_unsigned::type; - - static constexpr serialized_type adjust_to_serialized(base_serialized_type val, just_cast_tag) { - return static_cast(val); - } - - static serialized_type adjust_to_serialized(base_serialized_type val, sign_extend_tag) { - unsigned_serialized_type valueTmp = - static_cast(val) & UnsignedValueMask; - - return sign_ext_unsigned_serialized(valueTmp, has_sign_tag()); - } - - static constexpr base_serialized_type adjust_from_serialized(serialized_type val, just_cast_tag) { - return static_cast(val); - } - - static base_serialized_type adjust_from_serialized(serialized_type val, sign_extend_tag) { - unsigned_serialized_type valueTmp = - static_cast(val) & UnsignedValueMask; - return static_cast( - sign_ext_unsigned_serialized(valueTmp, has_sign_tag())); - } - - static constexpr serialized_type sign_ext_unsigned_serialized(unsigned_serialized_type val, - unsigned_tag) { - return static_cast(val); - } - - static serialized_type sign_ext_unsigned_serialized(unsigned_serialized_type val, signed_tag) { - static const unsigned_serialized_type SignExtMask - = ~((static_cast(1U) << bit_length) - 1); - static const unsigned_serialized_type SignMask = static_cast(1U) - << (bit_length - 1); - - if ((val & SignMask) != 0) { - val |= SignExtMask; - } - return static_cast(val); - } - - static const std::size_t byte_length = TLen; - static const std::size_t bits_in_byte = std::numeric_limits::digits; - static const std::size_t bit_length = byte_length * bits_in_byte; - - static const unsigned_serialized_type UnsignedValueMask - = static_cast((static_cast(1U) << bit_length) - 1); - - static_assert(0 < byte_length, "length is expected to be greater than 0"); - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_FIXED_LENGTH_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/ignore_invalid.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/ignore_invalid.hpp deleted file mode 100644 index cae39bf6b9..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/ignore_invalid.hpp +++ /dev/null @@ -1,90 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_IGNORE_INVALID_HPP -#define MARSHALLING_IGNORE_INVALID_HPP - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class ignore_invalid : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - - ignore_invalid() = default; - - explicit ignore_invalid(const value_type &val) : base_impl_type(val) { - } - - explicit ignore_invalid(value_type &&val) : base_impl_type(std::move(val)) { - } - - ignore_invalid(const ignore_invalid &) = default; - - ignore_invalid(ignore_invalid &&) = default; - - ignore_invalid &operator=(const ignore_invalid &) = default; - - ignore_invalid &operator=(ignore_invalid &&) = default; - - template - status_type read(TIter &iter, std::size_t len) { - base_impl_type tmp; - status_type es = tmp.read(iter, len); - if (es != status_type::success) { - return es; - } - - if (tmp.valid()) { - static_cast(*this) = std::move(tmp); - } - - return status_type::success; - } - - template - void read_no_status(TIter &iter) { - base_impl_type tmp; - tmp.read_no_status(iter); - - if (tmp.valid()) { - static_cast(*this) = std::move(tmp); - } - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_IGNORE_INVALID_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/invalid_by_default.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/invalid_by_default.hpp deleted file mode 100644 index 469fd77dee..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/invalid_by_default.hpp +++ /dev/null @@ -1,66 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_INVALID_BY_DEFAULT_HPP -#define MARSHALLING_INVALID_BY_DEFAULT_HPP - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class invalid_by_default : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - - invalid_by_default() = default; - - explicit invalid_by_default(const value_type &val) : base_impl_type(val) { - } - - explicit invalid_by_default(value_type &&val) : base_impl_type(std::move(val)) { - } - - invalid_by_default(const invalid_by_default &) = default; - - invalid_by_default(invalid_by_default &&) = default; - - invalid_by_default &operator=(const invalid_by_default &) = default; - - invalid_by_default &operator=(invalid_by_default &&) = default; - - static constexpr bool valid() { - return false; - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_INVALID_BY_DEFAULT_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/num_value_multi_range_validator.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/num_value_multi_range_validator.hpp deleted file mode 100644 index a70cc1eb8d..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/num_value_multi_range_validator.hpp +++ /dev/null @@ -1,102 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_NUM_VALUE_MULTI_RANGE_VALIDATOR_HPP -#define MARSHALLING_NUM_VALUE_MULTI_RANGE_VALIDATOR_HPP - -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class num_value_multi_range_validator : public TBase { - using base_impl_type = TBase; - - static_assert(nil::detail::is_tuple::value, "TRanges must be a tuple"); - - public: - using value_type = typename base_impl_type::value_type; - - static_assert(std::is_integral::value || std::is_enum::value - || std::is_floating_point::value, - "Only numeric fields are supported for multi range validation."); - - num_value_multi_range_validator() = default; - - explicit num_value_multi_range_validator(const value_type &val) : base_impl_type(val) { - } - - explicit num_value_multi_range_validator(value_type &&val) : base_impl_type(std::move(val)) { - } - - num_value_multi_range_validator(const num_value_multi_range_validator &) = default; - - num_value_multi_range_validator(num_value_multi_range_validator &&) = default; - - num_value_multi_range_validator &operator=(const num_value_multi_range_validator &) = default; - - num_value_multi_range_validator &operator=(num_value_multi_range_validator &&) = default; - - bool valid() const { - return base_impl_type::valid() - && processing::tuple_type_accumulate( - false, Validator(base_impl_type::value())); - } - - private: - class Validator { - public: - Validator(value_type val) : m_val(val) { - } - - template - bool operator()(bool val) const { - static_cast(val); - static_assert(nil::detail::is_tuple::value, - "TRange must be a tuple"); - static_assert(std::tuple_size::value == 2, "Tuple with 2 elements is expected"); - using MinVal = typename std::tuple_element<0, TRange>::type; - using MaxVal = typename std::tuple_element<1, TRange>::type; - static_assert(MinVal::value <= MaxVal::value, "Invalid range"); - return val - || ((static_cast(MinVal::value) <= m_val) - && (m_val <= static_cast(MaxVal::value))); - } - - private: - value_type m_val; - }; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_NUM_VALUE_MULTI_RANGE_VALIDATOR_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_fixed_ser_length_field_prefix.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_fixed_ser_length_field_prefix.hpp deleted file mode 100644 index 2269d8058a..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_fixed_ser_length_field_prefix.hpp +++ /dev/null @@ -1,270 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_ELEM_FIXED_SER_LENGTH_FIELD_PREFIX_HPP -#define MARSHALLING_SEQUENCE_ELEM_FIXED_SER_LENGTH_FIELD_PREFIX_HPP - -#include - -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_elem_fixed_ser_length_field_prefix : public TBase { - using base_impl_type = TBase; - using len_field_type = TLenField; - - static_assert(!len_field_type::is_version_dependent(), - "Prefix fields must not be version dependent"); - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_elem_fixed_ser_length_field_prefix() = default; - - explicit sequence_elem_fixed_ser_length_field_prefix(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_elem_fixed_ser_length_field_prefix(value_type &&val) : - base_impl_type(std::move(val)) { - } - - sequence_elem_fixed_ser_length_field_prefix(const sequence_elem_fixed_ser_length_field_prefix &) - = default; - - sequence_elem_fixed_ser_length_field_prefix(sequence_elem_fixed_ser_length_field_prefix &&) - = default; - - sequence_elem_fixed_ser_length_field_prefix & - operator=(const sequence_elem_fixed_ser_length_field_prefix &) - = default; - - sequence_elem_fixed_ser_length_field_prefix & - operator=(sequence_elem_fixed_ser_length_field_prefix &&) - = default; - - std::size_t length() const { - return length_internal(Len_field_length_tag()); - } - - static constexpr std::size_t min_length() { - return len_field_type::min_length() + base_impl_type::min_length(); - } - - static constexpr std::size_t max_length() { - return detail::common_funcs::max_supported_length(); - } - - template - status_type read_element(element_type &elem, TIter &iter, std::size_t &len) const { - MARSHALLING_ASSERT(elemLen_ < max_length_limit); - - if (len < elemLen_) { - return status_type::not_enough_data; - } - - std::size_t elemLen = elemLen_; - status_type es = base_impl_type::read_element(elem, iter, elemLen); - if (es == status_type::not_enough_data) { - return TStatus; - } - - if (es != status_type::success) { - return es; - } - - MARSHALLING_ASSERT(elemLen <= elemLen_); - std::advance(iter, elemLen); - len -= elemLen_; - return status_type::success; - } - - template - void read_element_no_status(element_type &elem, TIter &iter) const = delete; - - template - status_type read(TIter &iter, std::size_t len) { - status_type es = read_len(iter, len); - if (es != status_type::success) { - return es; - } - - return detail::common_funcs::read_sequence(*this, iter, len); - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type read_n(std::size_t count, TIter &iter, std::size_t &len) { - if (0U < count) { - status_type es = read_len(iter, len); - if (es != status_type::success) { - return es; - } - } else { - elemLen_ = 0U; - } - return detail::common_funcs::read_sequence_n(*this, count, iter, len); - } - - template - void read_no_status_n(std::size_t count, TIter &iter) = delete; - - template - status_type write(TIter &iter, std::size_t len) const { - if (!base_impl_type::value().empty()) { - status_type es = write_len(iter, len); // len is updated - if (es != status_type::success) { - return es; - } - } - - return detail::common_funcs::write_sequence(*this, iter, len); - } - - template - void write_no_status(TIter &iter) const { - if (!base_impl_type::value().empty()) { - write_len_no_status(iter); - } - detail::common_funcs::write_sequence_no_status(*this, iter); - } - - template - status_type write_n(std::size_t count, TIter &iter, std::size_t &len) const { - if (0U < count) { - status_type es = write_len(iter, len); // len is updated - if (es != status_type::success) { - return es; - } - } - - return detail::common_funcs::write_sequence_n(*this, count, iter, len); - } - - template - void write_no_status_n(std::size_t count, TIter &iter) const { - if (0U < count) { - write_len_no_status(iter); - } - detail::common_funcs::write_sequence_no_status_n(*this, count, iter); - } - - private: - struct fixed_length_len_field_tag { }; - struct var_length_len_field_tag { }; - - using Len_field_length_tag = - typename std::conditional::type; - - std::size_t length_internal(fixed_length_len_field_tag) const { - std::size_t prefixLen = 0U; - if (!base_impl_type::value().empty()) { - prefixLen = len_field_type::min_length(); - } - return (prefixLen + base_impl_type::length()); - } - - std::size_t length_internal(var_length_len_field_tag) const { - std::size_t prefixLen = 0U; - if (!base_impl_type::value().empty()) { - len_field_type lenField; - lenField.value() = base_impl_type::min_element_length(); - prefixLen = lenField.length(); - } - - return (prefixLen + base_impl_type::length()); - } - - template - static void advance_write_iterator(TIter &iter, std::size_t len) { - detail::common_funcs::advance_write_iterator(iter, len); - } - - template - status_type read_len(TIter &iter, std::size_t &len) { - len_field_type lenField; - status_type es = lenField.read(iter, len); - if (es != status_type::success) { - return es; - } - - len -= lenField.length(); - - elemLen_ = static_cast(lenField.value()); - if (elemLen_ == max_length_limit) { - return TStatus; - } - - return status_type::success; - } - - template - status_type write_len(TIter &iter, std::size_t &len) const { - std::size_t elemLength = base_impl_type::min_element_length(); - len_field_type lenField; - lenField.value() = elemLength; - status_type es = lenField.write(iter, len); - if (es != status_type::success) { - return es; - } - - len -= lenField.length(); - return es; - } - - template - void write_len_no_status(TIter &iter) const { - std::size_t elemLength = base_impl_type::min_element_length(); - len_field_type lenField; - lenField.value() = elemLength; - lenField.write_no_status(iter); - } - - static_assert( - base_impl_type::min_element_length() == base_impl_type::max_element_length(), - "Option sequence_elem_fixed_ser_length_field_prefix can be used only with fixed length " - "elements."); - static_assert(1U <= len_field_type::min_length(), "Invalid min length assumption"); - - static const std::size_t max_length_limit = std::numeric_limits::max(); - std::size_t elemLen_ = max_length_limit; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_ELEM_FIXED_SER_LENGTH_FIELD_PREFIX_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_length_forcing.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_length_forcing.hpp deleted file mode 100644 index e796f5128b..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_length_forcing.hpp +++ /dev/null @@ -1,168 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_ELEM_LENGTH_FORCING_HPP -#define MARSHALLING_SEQUENCE_ELEM_LENGTH_FORCING_HPP - -#include -#include - -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_elem_length_forcing : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_elem_length_forcing() = default; - - explicit sequence_elem_length_forcing(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_elem_length_forcing(value_type &&val) : base_impl_type(std::move(val)) { - } - - sequence_elem_length_forcing(const sequence_elem_length_forcing &) = default; - - sequence_elem_length_forcing(sequence_elem_length_forcing &&) = default; - - sequence_elem_length_forcing &operator=(const sequence_elem_length_forcing &) = default; - - sequence_elem_length_forcing &operator=(sequence_elem_length_forcing &&) = default; - - void force_read_elem_length(std::size_t val) { - MARSHALLING_ASSERT(val != cleared); - forced_ = val; - } - - void clear_read_elem_length_forcing() { - forced_ = cleared; - } - - std::size_t length() const { - if (forced_ != cleared) { - return base_impl_type::value().size() * forced_; - } - - return base_impl_type::length(); - } - - std::size_t element_length(const element_type &elem) const { - if (forced_ != cleared) { - return forced_; - } - return base_impl_type::element_length(elem); - } - - static constexpr std::size_t max_element_length() { - return detail::common_funcs::max_supported_length(); - } - - template - status_type read_element(element_type &elem, TIter &iter, std::size_t &len) const { - using IterType = typename std::decay::type; - using IterTag = typename std::iterator_traits::iterator_category; - static_assert(std::is_base_of::value, - "Only random access iterator for reading is supported with " - "nil::marshalling::option::SequenceElemLengthForcingEnabled option"); - - if (forced_ == cleared) { - return base_impl_type::read_element(elem, iter, len); - } - - if (len < forced_) { - return status_type::not_enough_data; - } - - auto iterTmp = iter; - auto remLen = forced_; - std::advance(iter, forced_); - len -= forced_; - return base_impl_type::read_element(elem, iterTmp, remLen); - } - - // Why is this so? Function declared void, but in fact it returns status_type - template - void read_element_no_status(element_type &elem, TIter &iter) const { - using IterType = typename std::decay::type; - using IterTag = typename std::iterator_traits::iterator_category; - static_assert(std::is_base_of::value, - "Only random access iterator for reading is supported with " - "nil::marshalling::option::SequenceElemLengthForcingEnabled option"); - - if (forced_ == cleared) { - return base_impl_type::read_element_no_status(elem, iter); - } - - auto fromIter = iter; - auto es = base_impl_type::read_element_no_status(elem, iter); - if (es != status_type::success) { - return es; - } - - auto consumed = std::distance(fromIter, iter); - if (consumed < forced_) { - std::advance(iter, forced_ - consumed); - } - } - - template - status_type read(TIter &iter, std::size_t len) { - return detail::common_funcs::read_sequence(*this, iter, len); - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type read_n(std::size_t count, TIter &iter, std::size_t &len) { - return detail::common_funcs::read_sequence_n(*this, count, iter, len); - } - - template - void read_no_status_n(std::size_t count, TIter &iter) { - detail::common_funcs::read_sequence_no_status_n(*this, count, iter); - } - - private: - static const std::size_t cleared = std::numeric_limits::max(); - std::size_t forced_ = cleared; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_ELEM_LENGTH_FORCING_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_ser_length_field_prefix.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_ser_length_field_prefix.hpp deleted file mode 100644 index e25f8445a6..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_elem_ser_length_field_prefix.hpp +++ /dev/null @@ -1,252 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_ELEM_SER_LENGTH_FIELD_PREFIX_HPP -#define MARSHALLING_SEQUENCE_ELEM_SER_LENGTH_FIELD_PREFIX_HPP - -#include - -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_elem_ser_length_field_prefix : public TBase { - using base_impl_type = TBase; - using LenField = TLenField; - - static_assert(!LenField::is_version_dependent(), "Prefix fields must not be version dependent"); - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_elem_ser_length_field_prefix() = default; - - explicit sequence_elem_ser_length_field_prefix(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_elem_ser_length_field_prefix(value_type &&val) : base_impl_type(std::move(val)) { - } - - sequence_elem_ser_length_field_prefix(const sequence_elem_ser_length_field_prefix &) = default; - - sequence_elem_ser_length_field_prefix(sequence_elem_ser_length_field_prefix &&) = default; - - sequence_elem_ser_length_field_prefix &operator=(const sequence_elem_ser_length_field_prefix &) - = default; - - sequence_elem_ser_length_field_prefix &operator=(sequence_elem_ser_length_field_prefix &&) - = default; - - std::size_t length() const { - return length_internal(Len_field_length_tag(), ElemLengthTag()); - } - - std::size_t element_length(const element_type &elem) const { - return element_length_internal(elem, Len_field_length_tag()); - } - - static constexpr std::size_t min_element_length() { - return LenField::min_length() + base_impl_type::min_element_length(); - } - - static constexpr std::size_t max_element_length() { - return LenField::max_length() + base_impl_type::max_element_length(); - } - - template - status_type read_element(element_type &elem, TIter &iter, std::size_t &len) const { - LenField lenField; - status_type es = lenField.read(iter, len); - if (es != status_type::success) { - return es; - } - - len -= lenField.length(); - if (len < lenField.value()) { - return status_type::not_enough_data; - } - - const auto reqLen = static_cast(lenField.value()); - std::size_t elemLen = reqLen; - es = base_impl_type::read_element(elem, iter, elemLen); - if (es == status_type::not_enough_data) { - return TStatus; - } - - if (es != status_type::success) { - return es; - } - - MARSHALLING_ASSERT(elemLen <= reqLen); - std::advance(iter, elemLen); - len -= reqLen; - return status_type::success; - } - - template - void read_element_no_status(element_type &elem, TIter &iter) const = delete; - - template - status_type read(TIter &iter, std::size_t len) { - return detail::common_funcs::read_sequence(*this, iter, len); - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type read_n(std::size_t count, TIter &iter, std::size_t &len) { - return detail::common_funcs::read_sequence_n(*this, count, iter, len); - } - - template - void read_no_status_n(std::size_t count, TIter &iter) = delete; - - template - status_type write_element(const element_type &elem, TIter &iter, std::size_t &len) const { - auto elemLength = base_impl_type::element_length(elem); - LenField lenField; - lenField.value() = elemLength; - status_type es = lenField.write(iter, len); - if (es != status_type::success) { - return es; - } - - len -= lenField.length(); - return base_impl_type::write_element(elem, iter, len); - } - - template - static void write_element_no_status(const element_type &elem, TIter &iter) { - auto elemLength = base_impl_type::element_length(elem); - LenField lenField; - lenField.value() = elemLength; - lenField.write_no_status(iter); - base_impl_type::write_element_no_status(elem, iter); - } - - template - status_type write(TIter &iter, std::size_t len) const { - return detail::common_funcs::write_sequence(*this, iter, len); - } - - template - void write_no_status(TIter &iter) const { - detail::common_funcs::write_sequence_no_status(*this, iter); - } - - template - status_type write_n(std::size_t count, TIter &iter, std::size_t &len) const { - return detail::common_funcs::write_sequence_n(*this, count, iter, len); - } - - template - void write_no_status_n(std::size_t count, TIter &iter) const { - detail::common_funcs::write_sequence_no_status_n(*this, count, iter); - } - - private: - struct FixedLengthLenFieldTag { }; - struct VarLengthLenFieldTag { }; - struct FixedLengthElemTag { }; - struct VarLengthElemTag { }; - - using Len_field_length_tag = - typename std::conditional::type; - - using ElemLengthTag = typename std::conditional::type; - - std::size_t length_internal(FixedLengthLenFieldTag, FixedLengthElemTag) const { - return (LenField::min_length() + base_impl_type::min_element_length()) - * base_impl_type::value().size(); - } - - std::size_t length_internal(FixedLengthLenFieldTag, VarLengthElemTag) const { - std::size_t result = 0U; - for (auto &elem : base_impl_type::value()) { - result += (LenField::min_length() + base_impl_type::element_length(elem)); - } - return result; - } - - std::size_t length_internal(VarLengthLenFieldTag, FixedLengthElemTag) const { - LenField lenField; - lenField.value() = base_impl_type::min_element_length(); - return (lenField.length() + base_impl_type::min_element_length()) - * base_impl_type::value().size(); - } - - std::size_t length_internal(VarLengthLenFieldTag, VarLengthElemTag) const { - std::size_t result = 0U; - for (auto &elem : base_impl_type::value()) { - LenField lenField; - auto elemLength = base_impl_type::element_length(elem); - lenField.value() = elemLength; - result += (lenField.length() + elemLength); - } - return result; - } - - std::size_t element_length_internal(const element_type &elem, FixedLengthLenFieldTag) const { - return LenField::min_length() + base_impl_type::element_length(elem); - } - - std::size_t element_length_internal(const VarLengthLenFieldTag &elem, - FixedLengthLenFieldTag) const { - LenField lenField; - auto elemLength = base_impl_type::element_length(elem); - lenField.value() = elemLength; - return lenField.length() + elemLength; - } - - template - static void advance_write_iterator(TIter &iter, std::size_t len) { - using IterType = typename std::decay::type; - using byte_type = typename std::iterator_traits::value_type; - while (len > 0U) { - *iter = byte_type(); - ++iter; - --len; - } - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_ELEM_SER_LENGTH_FIELD_PREFIX_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_fixed_size.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_fixed_size.hpp deleted file mode 100644 index 1273ef22d0..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_fixed_size.hpp +++ /dev/null @@ -1,246 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_FIXED_SIZE_HPP -#define MARSHALLING_SEQUENCE_FIXED_SIZE_HPP - -#include - -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_fixed_size_base : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - explicit sequence_fixed_size_base(std::size_t maxSize) : fixedSize_(maxSize) { - } - - sequence_fixed_size_base(std::size_t maxSize, const value_type &val) : - base_impl_type(val), fixedSize_(maxSize) { - } - - sequence_fixed_size_base(std::size_t maxSize, value_type &&val) : - base_impl_type(std::move(val)), fixedSize_(maxSize) { - } - - sequence_fixed_size_base(const sequence_fixed_size_base &) = default; - - sequence_fixed_size_base(sequence_fixed_size_base &&) = default; - - sequence_fixed_size_base &operator=(const sequence_fixed_size_base &) = default; - - sequence_fixed_size_base &operator=(sequence_fixed_size_base &&) = default; - - std::size_t length() const { - auto currSize = base_impl_type::value().size(); - if (currSize == fixedSize_) { - return base_impl_type::length(); - } - - if (currSize < fixedSize_) { - auto remSize = fixedSize_ - currSize; - auto dummyElem = element_type(); - return base_impl_type::length() + (remSize * base_impl_type::element_length(dummyElem)); - } - - using tag = typename std::conditional::value - && (sizeof(element_type) == sizeof(std::uint8_t)), - has_raw_data_tag, has_fields_tag>::type; - - return recalc_len(tag()); - } - - template - status_type read(TIter &iter, std::size_t len) { - return base_impl_type::read_n(fixedSize_, iter, len); - } - - template - void read_no_status(TIter &iter) { - return base_impl_type::read_no_status_n(fixedSize_, iter); - } - - template - status_type write(TIter &iter, std::size_t len) const { - auto writeCount = std::min(base_impl_type::value().size(), fixedSize_); - status_type es = base_impl_type::write_n(writeCount, iter, len); - if (es != status_type::success) { - return es; - } - - auto remCount = fixedSize_ - writeCount; - if (remCount == 0) { - return es; - } - - auto dummyElem = element_type(); - while (0 < remCount) { - es = base_impl_type::write_element(dummyElem, iter, len); - if (es != status_type::success) { - break; - } - - --remCount; - } - - return es; - } - - template - void write_no_status(TIter &iter) const { - auto writeCount = std::min(base_impl_type::value().size(), fixedSize_); - base_impl_type::write_no_status_n(writeCount, iter); - - auto remCount = fixedSize_ - writeCount; - if (remCount == 0) { - return; - } - - auto dummyElem = element_type(); - while (0 < remCount) { - base_impl_type::write_element_no_status(dummyElem, iter); - --remCount; - } - } - - bool valid() const { - return base_impl_type::valid() && (base_impl_type::value().size() <= fixedSize_); - } - - bool refresh() { - if (!base_impl_type::refresh()) { - return false; - } - - using tag = - typename std::conditional::value, - has_resize_tag, no_resize_tag>::type; - - return eval_refresh(tag()); - } - - private: - struct has_raw_data_tag { }; - struct has_fields_tag { }; - struct has_fixed_length_elems_tag { }; - struct has_var_length_elems_tag { }; - struct has_resize_tag { }; - struct no_resize_tag { }; - - std::size_t recalc_len(has_fields_tag) const { - using tag = - typename std::conditional::type; - return recalc_len(tag()); - } - - std::size_t recalc_len(has_raw_data_tag) const { - return fixedSize_; - } - - std::size_t recalc_len(has_fixed_length_elems_tag) const { - return fixedSize_ * element_type::min_length(); - } - - std::size_t recalc_len(has_var_length_elems_tag) const { - std::size_t result = 0U; - auto count = fixedSize_; - for (auto &elem : base_impl_type::value()) { - if (count == 0U) { - break; - } - - result += base_impl_type::element_length(elem); - --count; - } - return result; - } - - bool eval_refresh(has_resize_tag) { - if (base_impl_type::value() == fixedSize_) { - return false; - } - - base_impl_type::value().resize(fixedSize_); - return true; - } - - static constexpr bool eval_refresh(no_resize_tag) { - return false; - } - - std::size_t fixedSize_ = 0; - }; - - template - class sequence_fixed_size : public sequence_fixed_size_base { - using base_impl_type = sequence_fixed_size_base; - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - explicit sequence_fixed_size() : base_impl_type(TSize) { - } - - explicit sequence_fixed_size(const value_type &val) : base_impl_type(TSize, val) { - } - - sequence_fixed_size(value_type &&val) : base_impl_type(TSize, std::move(val)) { - } - - sequence_fixed_size(const sequence_fixed_size &) = default; - - sequence_fixed_size(sequence_fixed_size &&) = default; - - sequence_fixed_size &operator=(const sequence_fixed_size &) = default; - - sequence_fixed_size &operator=(sequence_fixed_size &&) = default; - - static constexpr std::size_t min_length() { - return base_impl_type::min_length() + base_impl_type::min_element_length() * TSize; - } - - static constexpr std::size_t max_length() { - return base_impl_type::min_length() + base_impl_type::max_element_length() * TSize; - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_FIXED_SIZE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_length_forcing.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_length_forcing.hpp deleted file mode 100644 index cb8441a6bd..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_length_forcing.hpp +++ /dev/null @@ -1,114 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_LENGTH_FORCING_HPP -#define MARSHALLING_SEQUENCE_LENGTH_FORCING_HPP - -#include -#include - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_length_forcing : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_length_forcing() = default; - - explicit sequence_length_forcing(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_length_forcing(value_type &&val) : base_impl_type(std::move(val)) { - } - - sequence_length_forcing(const sequence_length_forcing &) = default; - - sequence_length_forcing(sequence_length_forcing &&) = default; - - sequence_length_forcing &operator=(const sequence_length_forcing &) = default; - - sequence_length_forcing &operator=(sequence_length_forcing &&) = default; - - void force_read_length(std::size_t val) { - MARSHALLING_ASSERT(val != Cleared); - forced_ = val; - } - - void clear_read_length_forcing() { - forced_ = Cleared; - } - - template - status_type read(TIter &iter, std::size_t len) { - if (forced_ == Cleared) { - return base_impl_type::read(iter, len); - } - - if (len < forced_) { - return status_type::not_enough_data; - } - - return base_impl_type::read(iter, forced_); - } - - template - status_type read_n(std::size_t count, TIter &iter, std::size_t &len) { - if (forced_ == Cleared) { - return base_impl_type::read(iter, len); - } - - if (len < forced_) { - return status_type::not_enough_data; - } - - return base_impl_type::read_n(count, iter, forced_); - } - - template - void read_no_status(TIter &iter) = delete; - - template - void read_no_status_n(std::size_t count, TIter &iter) = delete; - - private: - static const std::size_t Cleared = std::numeric_limits::max(); - std::size_t forced_ = Cleared; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_LENGTH_FORCING_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_ser_length_field_prefix.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_ser_length_field_prefix.hpp deleted file mode 100644 index 955b33c282..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_ser_length_field_prefix.hpp +++ /dev/null @@ -1,136 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_SER_LENGTH_FIELD_PREFIX_HPP -#define MARSHALLING_SEQUENCE_SER_LENGTH_FIELD_PREFIX_HPP - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_ser_length_field_prefix : public TBase { - using base_impl_type = TBase; - using len_field_type = TLenField; - - static_assert(!len_field_type::is_version_dependent(), - "Prefix fields must not be version dependent"); - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_ser_length_field_prefix() = default; - - explicit sequence_ser_length_field_prefix(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_ser_length_field_prefix(value_type &&val) : base_impl_type(std::move(val)) { - } - - sequence_ser_length_field_prefix(const sequence_ser_length_field_prefix &) = default; - - sequence_ser_length_field_prefix(sequence_ser_length_field_prefix &&) = default; - - sequence_ser_length_field_prefix &operator=(const sequence_ser_length_field_prefix &) = default; - - sequence_ser_length_field_prefix &operator=(sequence_ser_length_field_prefix &&) = default; - - std::size_t length() const { - using LenValueType = typename len_field_type::value_type; - auto valLength = base_impl_type::length(); - len_field_type lenField; - lenField.value() = static_cast(valLength); - return lenField.length() + valLength; - } - - static constexpr std::size_t min_length() { - return len_field_type::min_length() + base_impl_type::min_length(); - } - - static constexpr std::size_t max_length() { - return len_field_type::max_length() + base_impl_type::max_length(); - } - - bool valid() const { - len_field_type lenField; - lenField.value() = base_impl_type::length(); - return lenField.valid() && base_impl_type::valid(); - } - - template - status_type read(TIter &iter, std::size_t len) { - len_field_type lenField; - status_type es = lenField.read(iter, len); - if (es != status_type::success) { - return es; - } - - es = base_impl_type::read(iter, static_cast(lenField.value())); - if (es == status_type::not_enough_data) { - return TStatus; - } - - return es; - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type write(TIter &iter, std::size_t len) const { - using LenValueType = typename len_field_type::value_type; - auto lenVal = base_impl_type::length(); - len_field_type lenField; - lenField.value() = static_cast(lenVal); - status_type es = lenField.write(iter, len); - if (es != status_type::success) { - return es; - } - - MARSHALLING_ASSERT(lenField.length() <= len); - return base_impl_type::write(iter, lenVal); - } - - template - void write_no_status(TIter &iter) const { - using LenValueType = typename len_field_type::value_type; - auto lenVal = base_impl_type::length(); - len_field_type lenField; - lenField.value() = static_cast(lenVal); - lenField.write_no_status(iter); - base_impl_type::write_no_status(iter); - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_SER_LENGTH_FIELD_PREFIX_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_size_field_prefix.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_size_field_prefix.hpp index 9caa6459b7..1ec3741a52 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_size_field_prefix.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_size_field_prefix.hpp @@ -29,7 +29,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_size_forcing.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_size_forcing.hpp deleted file mode 100644 index f7af28cb45..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_size_forcing.hpp +++ /dev/null @@ -1,106 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_SIZE_FORCING_HPP -#define MARSHALLING_SEQUENCE_SIZE_FORCING_HPP - -#include -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_size_forcing : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_size_forcing() = default; - - explicit sequence_size_forcing(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_size_forcing(value_type &&val) : base_impl_type(std::move(val)) { - } - - sequence_size_forcing(const sequence_size_forcing &) = default; - - sequence_size_forcing(sequence_size_forcing &&) = default; - - sequence_size_forcing &operator=(const sequence_size_forcing &) = default; - - sequence_size_forcing &operator=(sequence_size_forcing &&) = default; - - void force_read_elem_count(std::size_t val) { - MARSHALLING_ASSERT(val != cleared); - forced_ = val; - } - - void clear_read_elem_count() { - forced_ = cleared; - } - - template - status_type read(TIter &iter, std::size_t len) { - if (forced_ == cleared) { - return base_impl_type::read(iter, len); - } - - return base_impl_type::read_n(forced_, iter, len); - } - - template - status_type read_n(std::size_t count, TIter &iter, std::size_t &len) = delete; - - template - void read_no_status(TIter &iter) { - if (forced_ == cleared) { - base_impl_type::read_no_status(iter); - return; - } - - base_impl_type::read_no_status_n(forced_, iter); - } - - template - void read_no_status_n(std::size_t count, TIter &iter) = delete; - - private: - static const std::size_t cleared = std::numeric_limits::max(); - std::size_t forced_ = cleared; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_SIZE_FORCING_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_termination_field_suffix.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_termination_field_suffix.hpp deleted file mode 100644 index 3f0e7c0cfc..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_termination_field_suffix.hpp +++ /dev/null @@ -1,175 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_TERMINATION_FIELD_SUFFIX_HPP -#define MARSHALLING_SEQUENCE_TERMINATION_FIELD_SUFFIX_HPP - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_termination_field_suffix : public TBase { - using base_impl_type = TBase; - using term_field_type = TTermFieldType; - - static_assert(!term_field_type::is_version_dependent(), - "Suffix fields must not be version dependent"); - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_termination_field_suffix() = default; - - explicit sequence_termination_field_suffix(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_termination_field_suffix(value_type &&val) : base_impl_type(std::move(val)) { - } - - sequence_termination_field_suffix(const sequence_termination_field_suffix &) = default; - - sequence_termination_field_suffix(sequence_termination_field_suffix &&) = default; - - sequence_termination_field_suffix &operator=(const sequence_termination_field_suffix &) = default; - - sequence_termination_field_suffix &operator=(sequence_termination_field_suffix &&) = default; - - constexpr std::size_t length() const { - return term_field_type().length() + base_impl_type::length(); - } - - static constexpr std::size_t min_length() { - return term_field_type::min_length() + base_impl_type::min_length(); - } - - static constexpr std::size_t max_length() { - return term_field_type::max_length() + base_impl_type::max_length(); - } - - template - status_type read(TIter &iter, std::size_t len) { - using IterType = typename std::decay::type; - using IterTag = typename std::iterator_traits::iterator_category; - static_assert(std::is_base_of::value, - "Only random access iterator for reading is supported with " - "nil::marshalling::option::sequence_termination_field_suffix option"); - - using elem_tag = - typename std::conditional::value - && (sizeof(element_type) == sizeof(std::uint8_t)), - raw_data_tag, - field_tag>::type; - - return read_internal(iter, len, elem_tag()); - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type write(TIter &iter, std::size_t len) const { - term_field_type termField; - auto trailLen = termField.length(); - status_type es = base_impl_type::write(iter, len - trailLen); - if (es != status_type::success) { - return es; - } - - return termField.write(iter, trailLen); - } - - template - void write_no_status(TIter &iter) const { - term_field_type termField; - base_impl_type::write_no_status(iter); - termField.write_no_status(iter); - } - - private: - struct raw_data_tag { }; - struct field_tag { }; - - template - status_type read_internal(TIter &iter, std::size_t len, field_tag) { - base_impl_type::clear(); - term_field_type termField; - while (true) { - auto iterCpy = iter; - status_type es = termField.read(iterCpy, len); - if ((es == status_type::success) && (termField == term_field_type())) { - std::advance(iter, termField.length()); - return es; - } - - auto &elem = base_impl_type::create_back(); - es = base_impl_type::read_element(elem, iter, len); - if (es != status_type::success) { - base_impl_type::value().pop_back(); - return es; - } - } - - return status_type::success; - } - - template - status_type read_internal(TIter &iter, std::size_t len, raw_data_tag) { - term_field_type termField; - std::size_t consumed = 0; - while (consumed < len) { - auto iterCpy = iter + consumed; - status_type es = termField.read(iterCpy, len); - if ((es == status_type::success) && (termField == term_field_type())) { - break; - } - - ++consumed; - } - - if (len <= consumed) { - return status_type::not_enough_data; - } - - status_type es = base_impl_type::read(iter, consumed); - if (es != status_type::success) { - return es; - } - - std::advance(iter, termField.length()); - return status_type::success; - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_TERMINATION_FIELD_SUFFIX_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_trailing_field_suffix.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_trailing_field_suffix.hpp deleted file mode 100644 index 3d01ad3cd2..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/sequence_trailing_field_suffix.hpp +++ /dev/null @@ -1,119 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SEQUENCE_TRAILING_FIELD_SUFFIX_HPP -#define MARSHALLING_SEQUENCE_TRAILING_FIELD_SUFFIX_HPP - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class sequence_trailing_field_suffix : public TBase { - using base_impl_type = TBase; - using trail_field_type = TTrailField; - - static_assert(!trail_field_type::is_version_dependent(), - "Suffix fields must not be version dependent"); - - public: - using value_type = typename base_impl_type::value_type; - using element_type = typename base_impl_type::element_type; - - sequence_trailing_field_suffix() = default; - - explicit sequence_trailing_field_suffix(const value_type &val) : base_impl_type(val) { - } - - explicit sequence_trailing_field_suffix(value_type &&val) : base_impl_type(std::move(val)) { - } - - sequence_trailing_field_suffix(const sequence_trailing_field_suffix &) = default; - - sequence_trailing_field_suffix(sequence_trailing_field_suffix &&) = default; - - sequence_trailing_field_suffix &operator=(const sequence_trailing_field_suffix &) = default; - - sequence_trailing_field_suffix &operator=(sequence_trailing_field_suffix &&) = default; - - constexpr std::size_t length() const { - return trailField_.length() + base_impl_type::length(); - } - - static constexpr std::size_t min_length() { - return trail_field_type::min_length() + base_impl_type::min_length(); - } - - static constexpr std::size_t max_length() { - return trail_field_type::max_length() + base_impl_type::max_length(); - } - - bool valid() const { - return trailField_.valid() && base_impl_type::valid(); - } - - template - status_type read(TIter &iter, std::size_t len) { - status_type es = base_impl_type::read(iter, len - trail_field_type::min_length()); - if (es != status_type::success) { - return es; - } - - return trailField_.read(iter, len - base_impl_type::length()); - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type write(TIter &iter, std::size_t len) const { - auto trailLen = trailField_.length(); - status_type es = base_impl_type::write(iter, len - trailLen); - if (es != status_type::success) { - return es; - } - - return trailField_.write(iter, trailLen); - } - - template - void write_no_status(TIter &iter) const { - base_impl_type::write_no_status(iter); - trailField_.write_no_status(iter); - } - - private: - trail_field_type trailField_; - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SEQUENCE_TRAILING_FIELD_SUFFIX_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/ser_offset.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/ser_offset.hpp deleted file mode 100644 index 5255ea9e41..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/ser_offset.hpp +++ /dev/null @@ -1,118 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_SER_OFFSET_HPP -#define MARSHALLING_SER_OFFSET_HPP - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class ser_offset : public TBase { - using base_impl_type = TBase; - static const auto offset = TOffset; - - public: - using value_type = typename base_impl_type::value_type; - using serialized_type = typename base_impl_type::serialized_type; - using endian_type = typename base_impl_type::endian_type; - - ser_offset() = default; - - explicit ser_offset(const value_type &val) : base_impl_type(val) { - } - - explicit ser_offset(value_type &&val) : base_impl_type(std::move(val)) { - } - - ser_offset(const ser_offset &) = default; - - ser_offset(ser_offset &&) = default; - - ser_offset &operator=(const ser_offset &) = default; - - ser_offset &operator=(ser_offset &&) = default; - - template - status_type read(TIter &iter, std::size_t size) { - if (size < base_impl_type::length()) { - return status_type::not_enough_data; - } - - read_no_status(iter); - return status_type::success; - } - - template - void read_no_status(TIter &iter) { - auto serializedValue - = processing::read_data(iter, endian_type()); - base_impl_type::value() = from_serialized(serializedValue); - } - - template - status_type write(TIter &iter, std::size_t size) const { - if (size < base_impl_type::length()) { - return status_type::buffer_overflow; - } - - write_no_status(iter); - return status_type::success; - } - - template - void write_no_status(TIter &iter) const { - processing::write_data(to_serialized(base_impl_type::value()), iter, - endian_type()); - } - - static constexpr serialized_type to_serialized(value_type val) { - return adjust_to_serialized(base_impl_type::to_serialized(val)); - } - - static constexpr value_type from_serialized(serialized_type val) { - return base_impl_type::from_serialized(adjust_from_serialized(val)); - } - - private: - static serialized_type adjust_to_serialized(serialized_type val) { - return static_cast(offset + val); - } - - static serialized_type adjust_from_serialized(serialized_type val) { - return static_cast((-offset) + val); - } - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_SER_OFFSET_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/var_length.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/var_length.hpp deleted file mode 100644 index e8c137c74b..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/var_length.hpp +++ /dev/null @@ -1,375 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_VAR_LENGTH_HPP -#define MARSHALLING_VAR_LENGTH_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class var_length : public TBase { - using base_impl_type = TBase; - using base_serialized_type = typename base_impl_type::serialized_type; - - public: - using value_type = typename base_impl_type::value_type; - - static_assert(TMaxLen <= sizeof(base_serialized_type), "The provided max length limit is too big"); - - using serialized_type = - typename std::conditional<(TMaxLen < sizeof(base_serialized_type)), - typename processing::size_to_type< - TMaxLen, std::is_signed::value>::type, - base_serialized_type>::type; - - using endian_type = typename base_impl_type::endian_type; - - var_length() = default; - - explicit var_length(const value_type &val) : base_impl_type(val) { - } - - explicit var_length(value_type &&val) : base_impl_type(std::move(val)) { - } - - var_length(const var_length &) = default; - - var_length(var_length &&) = default; - - var_length &operator=(const var_length &) = default; - - var_length &operator=(var_length &&) = default; - - std::size_t length() const { - auto serValue - = adjust_to_unsigned_serialized_var_length(to_serialized(base_impl_type::value())); - std::size_t len = 0U; - while (0 < serValue) { - serValue >>= var_length_shift; - ++len; - } - - MARSHALLING_ASSERT(len <= max_length()); - return std::max(std::size_t(min_length_), len); - } - - static constexpr std::size_t min_length() { - return min_length_; - } - - static constexpr std::size_t max_length() { - return max_length_; - } - - static constexpr serialized_type to_serialized(value_type val) { - return sign_ext_unsigned_serialized( - adjust_to_unsigned_serialized_var_length(base_impl_type::to_serialized(val)), - has_sign_tag()); - } - - static constexpr value_type from_serialized(serialized_type val) { - return base_impl_type::from_serialized( - static_cast(sign_ext_unsigned_serialized( - adjust_to_unsigned_serialized_var_length(val), has_sign_tag()))); - } - - template - status_type read(TIter &iter, std::size_t size) { - unsigned_serialized_type val = 0; - std::size_t byteCount = 0; - while (true) { - if (size == 0) { - return status_type::not_enough_data; - } - - auto byte = processing::read_data(iter, endian_type()); - auto byteValue = byte & var_length_value_bits_mask; - add_byte_to_serialized_value(byteValue, byteCount, val, - typename base_impl_type::endian_type()); - - ++byteCount; - - if ((byte & var_length_continue_bit) == 0) { - break; - } - - if (max_length_ <= byteCount) { - return status_type::protocol_error; - } - --size; - } - - if (byteCount < min_length()) { - return status_type::protocol_error; - } - - auto adjustedValue = sign_ext_unsigned_serialized(val, byteCount, has_sign_tag()); - base_impl_type::value() = base_impl_type::from_serialized(adjustedValue); - return status_type::success; - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type write(TIter &iter, std::size_t size) const { - auto val = adjust_to_unsigned_serialized_var_length( - base_impl_type::to_serialized(base_impl_type::value())); - std::size_t byteCount = 0; - bool lastByte = false; - auto minLen = std::max(length(), min_length()); - while ((!lastByte) && (byteCount < max_length())) { - if (size == 0) { - return status_type::buffer_overflow; - } - auto byte - = remove_byte_from_serialized_value(val, byteCount, minLen, lastByte, endian_type()); - if (!lastByte) { - MARSHALLING_ASSERT((byte & var_length_continue_bit) == 0); - byte |= var_length_continue_bit; - } - - processing::write_data(byte, iter, endian_type()); - ++byteCount; - MARSHALLING_ASSERT(byteCount <= max_length()); - --size; - } - - return status_type::success; - } - - template - void write_no_status(TIter &iter) const { - auto val = adjust_to_unsigned_serialized_var_length( - base_impl_type::to_serialized(base_impl_type::value())); - std::size_t byteCount = 0; - bool lastByte = false; - auto minLen = std::max(length(), min_length()); - while ((!lastByte) && (byteCount < max_length())) { - auto byte - = remove_byte_from_serialized_value(val, byteCount, minLen, lastByte, endian_type()); - if (!lastByte) { - MARSHALLING_ASSERT((byte & var_length_continue_bit) == 0); - byte |= var_length_continue_bit; - } - - processing::write_data(byte, iter, endian_type()); - ++byteCount; - MARSHALLING_ASSERT(byteCount <= max_length()); - } - } - - private: - struct unsigned_tag { }; - struct signed_tag { }; - - using has_sign_tag = typename std::conditional::value, signed_tag, - unsigned_tag>::type; - - using unsigned_serialized_type = typename std::make_unsigned::type; - - static unsigned_serialized_type adjust_to_unsigned_serialized_var_length(serialized_type val) { - static_assert(max_length_ <= sizeof(unsigned_serialized_type), - "max_length is expected to be shorter than size of serialized type."); - - static const auto ZeroBitsCount = ((sizeof(unsigned_serialized_type) - max_length_) - * std::numeric_limits::digits) - + max_length_; - - static const auto TotalBits - = sizeof(unsigned_serialized_type) * std::numeric_limits::digits; - - static const unsigned_serialized_type Mask - = (static_cast(1U) << (TotalBits - ZeroBitsCount)) - 1; - - return static_cast(val) & Mask; - } - - static void add_byte_to_serialized_value_big_endian(std::uint8_t byte, - unsigned_serialized_type &val) { - MARSHALLING_ASSERT((byte & var_length_continue_bit) == 0); - val <<= var_length_shift; - val |= byte; - } - - static void add_byte_to_serialized_value_little_endian(std::uint8_t byte, std::size_t byteCount, - unsigned_serialized_type &val) { - MARSHALLING_ASSERT((byte & var_length_continue_bit) == 0); - auto shift = byteCount * var_length_shift; - val = (static_cast(byte) << shift) | val; - } - - static void add_byte_to_serialized_value(std::uint8_t byte, std::size_t byteCount, - unsigned_serialized_type &val, - nil::marshalling::endian::big_endian) { - static_cast(byteCount); - add_byte_to_serialized_value_big_endian(byte, val); - } - - static void add_byte_to_serialized_value(std::uint8_t byte, std::size_t byteCount, - unsigned_serialized_type &val, - nil::marshalling::endian::little_endian) { - add_byte_to_serialized_value_little_endian(byte, byteCount, val); - } - - static std::uint8_t remove_byte_from_serialized_value_big_endian(unsigned_serialized_type &val, - std::size_t byteCount, - std::size_t min_length, - bool &lastByte) { - static const unsigned_serialized_type Mask - = ~(static_cast(var_length_value_bits_mask)); - - if ((byteCount + 1) < min_length) { - auto remLen = min_length - (byteCount + 1); - auto minValue = (static_cast(1U) << (var_length_shift * remLen)); - if (val < minValue) { - lastByte = false; - return std::uint8_t(0); - } - } - - auto valueTmp = val; - std::size_t shift = 0; - std::size_t count = 0; - while ((valueTmp & Mask) != 0) { - valueTmp >>= var_length_shift; - shift += var_length_shift; - ++count; - } - - auto clearMask = ~(static_cast(var_length_value_bits_mask) << shift); - val &= clearMask; - lastByte = (0U == count); - return static_cast(valueTmp); - } - - static std::uint8_t remove_byte_from_serialized_value_little_endian(unsigned_serialized_type &val, - std::size_t byteCount, - std::size_t min_length, - bool &lastByte) { - auto byte = static_cast(val & var_length_value_bits_mask); - val >>= var_length_shift; - lastByte = ((val == 0) && (min_length <= byteCount + 1)); - return byte; - } - - static std::uint8_t remove_byte_from_serialized_value(unsigned_serialized_type &val, - std::size_t byteCount, std::size_t min_length, - bool &lastByte, - nil::marshalling::endian::big_endian) { - return remove_byte_from_serialized_value_big_endian(val, byteCount, min_length, lastByte); - } - - static std::uint8_t remove_byte_from_serialized_value(unsigned_serialized_type &val, - std::size_t byteCount, std::size_t min_length, - bool &lastByte, - nil::marshalling::endian::little_endian) { - return remove_byte_from_serialized_value_little_endian(val, byteCount, min_length, lastByte); - } - - static constexpr serialized_type sign_ext_unsigned_serialized(unsigned_serialized_type val, - unsigned_tag) { - return static_cast(val); - } - - static constexpr serialized_type sign_ext_unsigned_serialized(unsigned_serialized_type val, - std::size_t, unsigned_tag) { - return static_cast(val); - } - - static serialized_type sign_ext_unsigned_serialized(unsigned_serialized_type val, signed_tag) { - static const auto ZeroBitsCount = ((sizeof(unsigned_serialized_type) - max_length_) - * std::numeric_limits::digits) - + max_length_; - - static const auto TotalBits - = sizeof(unsigned_serialized_type) * std::numeric_limits::digits; - - static const auto Mask - = (static_cast(1U) << (TotalBits - ZeroBitsCount)) - 1; - - static const unsigned_serialized_type SignExtMask = ~Mask; - - static const auto SignMask = (Mask + 1) >> 1; - - if ((val & SignMask) != 0) { - val |= SignExtMask; - } - return static_cast(val); - } - - static serialized_type sign_ext_unsigned_serialized(unsigned_serialized_type val, - std::size_t byteCount, signed_tag) { - auto zeroBitsCount = ((sizeof(unsigned_serialized_type) - byteCount) - * std::numeric_limits::digits) - + max_length_; - - static const auto TotalBits - = sizeof(unsigned_serialized_type) * std::numeric_limits::digits; - - auto mask = (static_cast(1U) << (TotalBits - zeroBitsCount)) - 1; - - unsigned_serialized_type signExtMask = ~mask; - - auto signMask = (mask + 1) >> 1; - - if ((val & signMask) != 0) { - val |= signExtMask; - } - return static_cast(val); - } - - static const std::size_t min_length_ = TMinLen; - static const std::size_t max_length_ = TMaxLen; - static const std::size_t max_bit_length = max_length_ * std::numeric_limits::digits; - static const std::size_t var_length_shift = 7; - static const std::uint8_t var_length_value_bits_mask - = (static_cast(1U) << var_length_shift) - 1; - static const std::uint8_t var_length_continue_bit - = static_cast(~(var_length_value_bits_mask)); - - static_assert(min_length_ > 0, "min_length is expected to be greater than 0"); - static_assert(min_length_ <= max_length_, - "min_length is expected to be no greater than max_length"); - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_VAR_LENGTH_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/version_storage.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/version_storage.hpp deleted file mode 100644 index 4667fec30d..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/adapter/version_storage.hpp +++ /dev/null @@ -1,83 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_VERSION_STORAGE_HPP -#define MARSHALLING_VERSION_STORAGE_HPP - -namespace nil { - namespace marshalling { - namespace types { - namespace adapter { - - template - class version_storage : public TBase { - using base_impl_type = TBase; - - public: - using value_type = typename base_impl_type::value_type; - using version_type = typename base_impl_type::version_type; - - version_storage() = default; - - explicit version_storage(const value_type &val) : base_impl_type(val) { - } - - explicit version_storage(value_type &&val) : base_impl_type(std::move(val)) { - } - - version_storage(const version_storage &) = default; - - version_storage(version_storage &&) = default; - - version_storage &operator=(const version_storage &) = default; - - version_storage &operator=(version_storage &&) = default; - - static constexpr bool is_version_dependent() { - return true; - } - - version_type get_version() const { - return m_version; - } - - bool set_version(version_type val) { - bool updated = base_impl_type::set_version(val); - if (m_version != val) { - m_version = val; - return true; - } - return updated; - } - - private: - version_type m_version = static_cast(0); - }; - - } // namespace adapter - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_VERSION_STORAGE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list.hpp index e675cb2c51..cd7d41e0a4 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list.hpp @@ -37,35 +37,35 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { /// @brief field_type that represents a sequential collection of fields. /// @details By default uses /// std::vector, - /// for internal storage, unless nil::marshalling::option::fixed_size_storage option is used, - /// which forces usage of nil::marshalling::container::static_vector instead. + /// for internal storage, unless nil::crypto3::marshalling::option::fixed_size_storage option is used, + /// which forces usage of nil::crypto3::marshalling::container::static_vector instead. /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. + /// nil::crypto3::marshalling::field_type. /// @tparam TElement Element of the collection, can be either basic integral value - /// (such as std::uint8_t) or any other field from nil::marshalling::types namespace.@n + /// (such as std::uint8_t) or any other field from nil::crypto3::marshalling::types namespace.@n /// For example: /// @code - /// using MyFieldBase = nil::marshalling::field_type; + /// using MyFieldBase = nil::crypto3::marshalling::field_type; /// using RawDataSeqField = - /// nil::marshalling::types::array_list< + /// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// std::uint8_t /// >; /// using CollectionOfBundlesField = - /// nil::marshalling::types::array_list< + /// nil::crypto3::marshalling::types::array_list< /// MyFieldBase, /// std::types::bundle< /// MyFieldBase, /// std::tuple< - /// nil::marshalling::types::integral - /// nil::marshalling::types::integral - /// nil::marshalling::types::integral + /// nil::crypto3::marshalling::types::integral + /// nil::crypto3::marshalling::types::integral + /// nil::crypto3::marshalling::types::integral /// > /// > /// >; @@ -73,29 +73,29 @@ namespace nil { /// @tparam TOptions Zero or more options that modify/refine default behaviour /// of the field.@n /// Supported options are: - /// @li @ref nil::marshalling::option::fixed_size_storage - /// @li @ref nil::marshalling::option::custom_storage_type - /// @li @ref nil::marshalling::option::sequence_size_field_prefix - /// @li @ref nil::marshalling::option::sequence_ser_length_field_prefix - /// @li @ref nil::marshalling::option::sequence_elem_ser_length_field_prefix - /// @li @ref nil::marshalling::option::sequence_elem_fixed_ser_length_field_prefix - /// @li @ref nil::marshalling::option::sequence_size_forcing_enabled - /// @li @ref nil::marshalling::option::sequence_length_forcing_enabled - /// @li @ref nil::marshalling::option::sequence_fixed_size - /// @li @ref nil::marshalling::option::sequence_termination_field_suffix - /// @li @ref nil::marshalling::option::sequence_trailing_field_suffix - /// @li @ref nil::marshalling::option::default_value_initializer - /// @li @ref nil::marshalling::option::contents_validator - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::fail_on_invalid - /// @li @ref nil::marshalling::option::ignore_invalid - /// @li @ref nil::marshalling::option::orig_data_view (valid only if TElement is integral type + /// @li @ref nil::crypto3::marshalling::option::fixed_size_storage + /// @li @ref nil::crypto3::marshalling::option::custom_storage_type + /// @li @ref nil::crypto3::marshalling::option::sequence_size_field_prefix + /// @li @ref nil::crypto3::marshalling::option::sequence_ser_length_field_prefix + /// @li @ref nil::crypto3::marshalling::option::sequence_elem_ser_length_field_prefix + /// @li @ref nil::crypto3::marshalling::option::sequence_elem_fixed_ser_length_field_prefix + /// @li @ref nil::crypto3::marshalling::option::sequence_size_forcing_enabled + /// @li @ref nil::crypto3::marshalling::option::sequence_length_forcing_enabled + /// @li @ref nil::crypto3::marshalling::option::sequence_fixed_size + /// @li @ref nil::crypto3::marshalling::option::sequence_termination_field_suffix + /// @li @ref nil::crypto3::marshalling::option::sequence_trailing_field_suffix + /// @li @ref nil::crypto3::marshalling::option::default_value_initializer + /// @li @ref nil::crypto3::marshalling::option::contents_validator + /// @li @ref nil::crypto3::marshalling::option::contents_refresher + /// @li @ref nil::crypto3::marshalling::option::has_custom_read + /// @li @ref nil::crypto3::marshalling::option::has_custom_refresh + /// @li @ref nil::crypto3::marshalling::option::fail_on_invalid + /// @li @ref nil::crypto3::marshalling::option::ignore_invalid + /// @li @ref nil::crypto3::marshalling::option::orig_data_view (valid only if TElement is integral type /// of 1 byte size. - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type + /// @li @ref nil::crypto3::marshalling::option::empty_serialization + /// @li @ref nil::crypto3::marshalling::option::version_storage + /// @extends nil::crypto3::marshalling::field_type /// @headerfile nil/marshalling/types/array_list.hpp template class array_list : private detail::array_list_base_type { @@ -116,10 +116,10 @@ namespace nil { tag::array_list>::type; /// @brief Type of underlying value. - /// @details If nil::marshalling::option::fixed_size_storage option is NOT used, the + /// @details If nil::crypto3::marshalling::option::fixed_size_storage option is NOT used, the /// value_type is std::vector, otherwise it becomes - /// nil::marshalling::container::static_vector, where TSize is a size - /// provided to nil::marshalling::option::fixed_size_storage option. + /// nil::crypto3::marshalling::container::static_vector, where TSize is a size + /// provided to nil::crypto3::marshalling::option::fixed_size_storage option. using value_type = typename base_impl_type::value_type; /// @brief Type of the element. @@ -174,10 +174,10 @@ namespace nil { /// @brief Read field value from input data sequence /// @details By default, the read operation will try to consume all the /// data available, unless size limiting option (such as - /// nil::marshalling::option::sequence_size_field_prefix, - /// nil::marshalling::option::sequence_fixed_size, - /// nil::marshalling::option::sequence_size_forcing_enabled, - /// nil::marshalling::option::sequence_length_forcing_enabled) is used. + /// nil::crypto3::marshalling::option::sequence_size_field_prefix, + /// nil::crypto3::marshalling::option::sequence_fixed_size, + /// nil::crypto3::marshalling::option::sequence_size_forcing_enabled, + /// nil::crypto3::marshalling::option::sequence_length_forcing_enabled) is used. /// @param[in, out] iter Iterator to read the data. /// @param[in] len Number of bytes available for reading. /// @return Status of read operation. @@ -199,7 +199,7 @@ namespace nil { /// @brief Write current field value to output data sequence /// @details By default, the write operation will write all the - /// elements the field contains. If nil::marshalling::option::sequence_fixed_size option + /// elements the field contains. If nil::crypto3::marshalling::option::sequence_fixed_size option /// is used, the number of elements, that is going to be written, is /// exactly as the option specifies. If underlying vector storage /// doesn't contain enough data, the default constructed elements will @@ -226,7 +226,7 @@ namespace nil { /// @brief Check validity of the field value. /// @details The collection is valid if all the elements are valid. In case - /// nil::marshalling::option::contents_validator option is used, the validator, + /// nil::crypto3::marshalling::option::contents_validator option is used, the validator, /// it provides, is invoked IN ADDITION to the validation of the elements. /// @return true in case the field's value is valid, false otherwise. bool valid() const { @@ -250,63 +250,13 @@ namespace nil { return base_impl_type::max_length(); } - /// @brief Force number of elements that must be read in the next read() - /// invocation. - /// @details Exists only if nil::marshalling::option::sequence_size_forcing_enabled option has been - /// used. - /// @param[in] count Number of elements to read during following read operation. - void force_read_elem_count(std::size_t count) { - return base_impl_type::force_read_elem_count(count); - } - - /// @brief Clear forcing of the number of elements that must be read in the next read() - /// invocation. - /// @details Exists only if nil::marshalling::option::sequence_size_forcing_enabled option has been - /// used. - void clear_read_elem_count() { - return base_impl_type::clear_read_elem_count(); - } - - /// @brief Force available length for the next read() invocation. - /// @details Exists only if @ref nil::marshalling::option::sequence_length_forcing_enabled option has been - /// used. - /// @param[in] count Number of elements to read during following read operation. - void force_read_length(std::size_t count) { - return base_impl_type::force_read_length(count); - } - - /// @brief Clear forcing of the available length in the next read() - /// invocation. - /// @details Exists only if @ref nil::marshalling::option::sequence_length_forcing_enabled option has been - /// used. - void clear_read_length_forcing() { - return base_impl_type::clear_read_length_forcing(); - } - - /// @brief Force serialization length of a single element. - /// @details The function can be used to force a serialization length of a - /// single element within the array_list. - /// Exists only if @ref nil::marshalling::option::SequenceElemLengthForcingEnabled option has been - /// used. - /// @param[in] count Number of elements to read during following read operation. - void force_read_elem_length(std::size_t count) { - return base_impl_type::force_read_elem_length(count); - } - - /// @brief Clear forcing the serialization length of the single element. - /// @details Exists only if nil::marshalling::option::SequenceElemLengthForcingEnabled option has been - /// used. - void clear_read_elem_length_forcing() { - return base_impl_type::clear_read_elem_length_forcing(); - } - /// @brief Compile time check if this class is version dependent static constexpr bool is_version_dependent() { return parsed_options_type::has_custom_version_update || base_impl_type::is_version_dependent(); } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -322,36 +272,11 @@ namespace nil { using base_impl_type::write_data; private: - static_assert( - !parsed_options_type::has_ser_offset, - "nil::marshalling::option::num_value_ser_offset option is not applicable to array_list field"); - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to array_list field"); - static_assert( - !parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to array_list field"); - static_assert(!parsed_options_type::has_var_length_limits, - "nil::marshalling::option::var_length option is not applicable to array_list field"); - static_assert( - !parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio_type option is not applicable to array_list field"); - static_assert(!parsed_options_type::has_units, - "nil::marshalling::option::Units option is not applicable to array_list field"); - static_assert(!parsed_options_type::has_multi_range_validation, - "nil::marshalling::option::valid_num_value_range (or similar) option is not applicable " - "to array_list field"); static_assert( (!parsed_options_type::has_orig_data_view) || (std::is_integral::value && (sizeof(TElement) == sizeof(std::uint8_t))), - "Usage of nil::marshalling::option::orig_data_view option is allowed only for raw binary data " + "Usage of nil::crypto3::marshalling::option::orig_data_view option is allowed only for raw binary data " "(std::uint8_t) types."); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "array_list field"); - static_assert( - !parsed_options_type::has_invalid_by_default, - "nil::marshalling::option::invalid_by_default option is not applicable to array_list field"); }; /// @brief Equivalence comparison operator. @@ -389,18 +314,18 @@ namespace nil { return !(field1 != field2); } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::array_list type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::array_list type /// in order to have access to its internal types. - /// @related nil::marshalling::types::array_list + /// @related nil::crypto3::marshalling::types::array_list template inline array_list & to_field_base(array_list &field) { return field; } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::array_list type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::array_list type /// in order to have access to its internal types. - /// @related nil::marshalling::types::array_list + /// @related nil::crypto3::marshalling::types::array_list template inline const array_list & to_field_base(const array_list &field) { @@ -412,19 +337,19 @@ namespace nil { using standard_array_list = array_list< TFieldBase, TElement, - nil::marshalling::option::size_t_sequence_size_field_prefix>; + nil::crypto3::marshalling::option::size_t_sequence_size_field_prefix>; // Very often we just need an array list of std::size_t, so here's another shortcut. template using standard_size_t_array_list = array_list< TFieldBase, - nil::marshalling::types::integral, - nil::marshalling::option::size_t_sequence_size_field_prefix>; + nil::crypto3::marshalling::types::integral, + nil::crypto3::marshalling::option::size_t_sequence_size_field_prefix>; // Helper functions to convert to/from an arraylist. template typename std::enable_if< - nil::detail::is_range::value, + marshalling::detail::is_range::value, standard_array_list>::type fill_standard_array_list( const Range& input_range, @@ -438,9 +363,11 @@ namespace nil { template std::vector make_standard_array_list( - const standard_array_list& filled_array, - std::function element_de_marshalling) { + const standard_array_list& filled_array, + std::function element_de_marshalling) + { std::vector result; + result.reserve(filled_array.value().size()); for (const auto& v: filled_array.value()) { result.push_back(element_de_marshalling(v)); } @@ -470,8 +397,11 @@ namespace nil { const standard_array_list& filled_keys, const standard_array_list& filled_values, std::function key_de_marshalling, - std::function value_de_marshalling) { - assert(filled_keys.value().size() == filled_values.value().size()); + std::function value_de_marshalling) + { + if (filled_keys.value().size() != filled_values.value().size()) { + throw std::invalid_argument("Number of values and keys do not match");; + } std::map result; for (std::size_t i = 0; i < filled_keys.value().size(); ++i) { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/basic_type.hpp index 8f43d3d0b1..1abdeb4d3e 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/basic_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/basic_type.hpp @@ -39,7 +39,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -291,7 +291,7 @@ namespace nil { return sum + e.length(); }); } - + constexpr std::size_t bit_length_internal(field_elem_tag) const { return bit_field_length(field_elem_tag()); } diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/behaviour.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/behaviour.hpp index 40e9f1bca5..df8c6ebe78 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/behaviour.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/behaviour.hpp @@ -37,7 +37,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -48,7 +48,7 @@ namespace nil { template<> struct array_list_orig_data_view_storage_type { template - using type = nil::marshalling::container::array_view; + using type = nil::crypto3::marshalling::container::array_view; }; template<> @@ -63,7 +63,7 @@ namespace nil { template<> struct array_list_sequence_fixed_size_use_fixed_size_storage_type { template - using type = nil::marshalling::container::static_vector; + using type = nil::crypto3::marshalling::container::static_vector; }; template<> @@ -80,7 +80,7 @@ namespace nil { template<> struct array_list_fixed_size_storage_type { template - using type = nil::marshalling::container::static_vector; + using type = nil::crypto3::marshalling::container::static_vector; }; template<> diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/type_traits.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/type_traits.hpp index 585579b0f0..fef351f9dd 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/type_traits.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/array_list/type_traits.hpp @@ -38,7 +38,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -70,12 +70,12 @@ namespace nil { template struct array_list_max_length_retrieve_helper< - nil::marshalling::container::static_vector> { + nil::crypto3::marshalling::container::static_vector> { static const std::size_t value = TSize; }; template - struct array_list_max_length_retrieve_helper> { + struct array_list_max_length_retrieve_helper> { static const std::size_t value = TSize - 1; }; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield.hpp deleted file mode 100644 index 84cdc53019..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield.hpp +++ /dev/null @@ -1,384 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BITFIELD_HPP -#define MARSHALLING_BITFIELD_HPP - -#include -#include -#include -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief bitfield field. - /// @details Sometimes one or several bytes can be logically split into two - /// or more independent values, which are packed together to save some - /// space. For example, one enum type that has only 4 possible values, i.e - /// only two bits are needed to encode such value. It would be a waste to - /// allocate full byte for it. Instead, it is packed with some other, say - /// unsigned counter that requires up to 6 bits to encode its valid - /// range of values. The following code defines such field: - /// @code - /// enum class MyEnumType : std::uint8_t - /// { - /// Value1, - /// Value2, - /// Value3, - /// Value4 - /// }; - /// - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = - /// nil::marshalling::types::bitfield< - /// MyFieldBase, - /// std::tuple< - /// nil::marshalling::types::enumeration< - /// MyFieldBase, - /// MyEnumType, - /// nil::marshalling::option::fixed_bit_length<2> - /// >, - /// nil::marshalling::types::integral< - /// MyFieldBase, - /// std::uint8_t, - /// nil::marshalling::option::fixed_bit_length<6> - /// > - /// > - /// >; - /// @endcode - /// Note, that bitfield members fields specify their length in bits using - /// nil::marshalling::option::fixed_bit_length option. - /// Also note, that all bitfield member's lengths in bits combined create - /// a round number of bytes, i.e all the bits must sum up to 8, 16, 24, 32, ... - /// bits. - /// - /// Refer to @ref sec_field_tutorial_bitfield for tutorial and usage examples. - /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. - /// @tparam TMembers All member fields bundled together in - /// std::tuple. - /// @tparam TOptions Zero or more options that modify/refine default behaviour - /// of the field.@n - /// Supported options are: - /// @li @ref nil::marshalling::option::contents_validator - All field members may specify - /// their independent validators. The bitfield field considered to - /// be valid if all the field members are valid. This option though, - /// provides an ability to add extra validation logic that can - /// observe value of more than one bitfield member. For example, - /// protocol specifies that if one specific member has value X, than - /// other member is NOT allowed to have value Y. - /// @li @ref nil::marshalling::option::contents_refresher - The default refreshing - /// behaviour is to call the @b refresh() member function of every - /// member field. This option provides an ability to set a custom - /// "refreshing" logic. - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::version_storage - /// @pre TMember is a variant of std::tuple, that contains other fields. - /// @pre Every field member specifies its length in bits using - /// nil::marshalling::option::fixed_bit_length option. - /// @extends nil::marshalling::field_type - /// @headerfile nil/marshalling/types/bitfield.hpp - /// @see @ref MARSHALLING_FIELD_MEMBERS_ACCESS() - /// @see @ref MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE() - template - class bitfield - : private detail::adapt_basic_field_type, TOptions...> { - using base_impl_type - = detail::adapt_basic_field_type, TOptions...>; - - public: - /// @brief endian_type used for serialization. - using endian_type = typename base_impl_type::endian_type; - - /// @brief Version type - using version_type = typename base_impl_type::version_type; - - /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = detail::options_parser; - - /// @brief Tag indicating type of the field - using tag = tag::bitfield; - - /// @brief Value type. - /// @details Same as TMemebers template argument, i.e. it is std::tuple - /// of all the member fields. - using value_type = typename base_impl_type::value_type; - - /// @brief Default constructor - /// @details All field members are initialised using their default constructors. - bitfield() = default; - - /// @brief Constructor - /// @param[in] val Value of the field to initialise it with. - explicit bitfield(const value_type &val) : base_impl_type(val) { - } - - /// @brief Constructor - /// @param[in] val Value of the field to initialise it with. - explicit bitfield(value_type &&val) : base_impl_type(std::move(val)) { - } - - /// @brief Retrieve number of bits specified member field consumes. - /// @tparam TIdx Index of the member field. - /// @return Number of bits, specified with nil::marshalling::option::fixed_bit_length option - /// used with the requested member. - template - static constexpr std::size_t member_bit_length() { - return base_impl_type::template member_bit_length(); - } - - /// @brief Get access to the stored tuple of fields. - /// @return Const reference to the underlying stored value. - const value_type &value() const { - return base_impl_type::value(); - } - - /// @brief Get access to the stored tuple of fields. - /// @return Reference to the underlying stored value. - value_type &value() { - return base_impl_type::value(); - } - - /// @brief Get length required to serialise the current field value. - /// @return Number of bytes it will take to serialise the field value. - constexpr std::size_t length() const { - return base_impl_type::length(); - } - - /// @brief Get minimal length that is required to serialise field of this type. - /// @return Minimal number of bytes required serialise the field value. - static constexpr std::size_t min_length() { - return base_impl_type::min_length(); - } - - /// @brief Get maximal length that is required to serialise field of this type. - /// @return Maximal number of bytes required serialise the field value. - static constexpr std::size_t max_length() { - return base_impl_type::max_length(); - } - - /// @brief Read field value from input data sequence - /// @param[in, out] iter Iterator to read the data. - /// @param[in] size Number of bytes available for reading. - /// @return Status of read operation. - /// @post Iterator is advanced. - template - status_type read(TIter &iter, std::size_t size) { - return base_impl_type::read(iter, size); - } - - /// @brief Read field value from input data sequence without error check and status report. - /// @details Similar to @ref read(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to read the data. - /// @post Iterator is advanced. - template - void read_no_status(TIter &iter) { - base_impl_type::read_no_status(iter); - } - - /// @brief Write current field value to output data sequence - /// @param[in, out] iter Iterator to write the data. - /// @param[in] size Maximal number of bytes that can be written. - /// @return Status of write operation. - /// @post Iterator is advanced. - template - status_type write(TIter &iter, std::size_t size) const { - return base_impl_type::write(iter, size); - } - - /// @brief Write current field value to output data sequence without error check and status report. - /// @details Similar to @ref write(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to write the data. - /// @post Iterator is advanced. - template - void write_no_status(TIter &iter) const { - base_impl_type::write_no_status(iter); - } - - /// @brief Check validity of the field value. - bool valid() const { - return base_impl_type::valid(); - } - - /// @brief Refresh the field's contents - /// @details Calls refresh() member function on every member field, will - /// return @b true if any of the calls returns @b true. - bool refresh() { - return base_impl_type::refresh(); - } - - /// @brief Compile time check if this class is version dependent - static constexpr bool is_version_dependent() { - return parsed_options_type::has_custom_version_update || base_impl_type::is_version_dependent(); - } - - /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. - version_type get_version() const { - return base_impl_type::get_version(); - } - - /// @brief Default implementation of version update. - /// @return @b true in case the field contents have changed, @b false otherwise - bool set_version(version_type version) { - return base_impl_type::set_version(version); - } - - protected: - using base_impl_type::read_data; - using base_impl_type::write_data; - - private: - static_assert( - !parsed_options_type::has_ser_offset, - "nil::marshalling::option::num_value_ser_offset option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_var_length_limits, - "nil::marshalling::option::var_length option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "bitfield field"); - static_assert( - !parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::sequence_size_forcing_enabled option is not applicable to bitfield field"); - static_assert( - !parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::SequenceLengthorcingEnabled option is not applicable to bitfield field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable " - "to bitfield field"); - static_assert( - !parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "bitfield field"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "bitfield field"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "bitfield field"); - static_assert(!parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "bitfield field"); - static_assert(!parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "bitfield field"); - static_assert( - !parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to bitfield field"); - static_assert( - !parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to bitfield field"); - static_assert( - !parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio_type option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_units, - "nil::marshalling::option::Units option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to bitfield field"); - static_assert(!parsed_options_type::has_multi_range_validation, - "nil::marshalling::option::valid_num_value_range (or similar) option is not applicable " - "to bitfield field"); - static_assert(!parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable " - "to bitfield field"); - static_assert( - !parsed_options_type::has_invalid_by_default, - "nil::marshalling::option::invalid_by_default option is not applicable to bitfield field"); - }; - - /// @brief Equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are equal, false otherwise. - /// @related bitfield - template - bool operator==(const bitfield &field1, - const bitfield &field2) { - return field1.value() == field2.value(); - } - - /// @brief Non-equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are NOT equal, false otherwise. - /// @related bitfield - template - bool operator!=(const bitfield &field1, - const bitfield &field2) { - return field1.value() != field2.value(); - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case value of the first field is lower than than the value of the second. - /// @related bitfield - template - bool operator<(const bitfield &field1, - const bitfield &field2) { - return field1.value() < field2.value(); - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::bitfield type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::bitfield - template - inline bitfield & - to_field_base(bitfield &field) { - return field; - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::bitfield type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::bitfield - template - inline const bitfield & - to_field_base(const bitfield &field) { - return field; - } - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BITFIELD_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield/basic_type.hpp deleted file mode 100644 index f6b09860de..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield/basic_type.hpp +++ /dev/null @@ -1,356 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASIC_BITFIELD_HPP -#define MARSHALLING_BASIC_BITFIELD_HPP - -#include -#include - -#include - -// #include -//#include -#include -#include -#include - -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - class basic_bitfield : public TFieldBase { - using base_impl_type = TFieldBase; - - static_assert(::nil::detail::is_tuple::value, - "TMembers is expected to be a tuple of BitfieldMember<...>"); - - static_assert(1U < std::tuple_size::value, - "Number of members is expected to be at least 2."); - - static const std::size_t total_bits = detail::calc_bit_length(); - static_assert((total_bits % std::numeric_limits::digits) == 0, - "Wrong number of total bits"); - - static const std::size_t length_ = total_bits / std::numeric_limits::digits; - static_assert(0U < length_, "Serialised length is expected to be greater than 0"); - using serialized_type = typename processing::size_to_type::type; - - using fixed_integral_type = types::integral>; - - using simple_integral_type = types::integral; - - using integral_type = typename std::conditional<((length_ & (length_ - 1)) == 0), - simple_integral_type, - fixed_integral_type>::type; - - public: - using endian_type = typename base_impl_type::endian_type; - using version_type = typename base_impl_type::version_type; - using value_type = TMembers; - - basic_bitfield() = default; - - explicit basic_bitfield(const value_type &val) : members_(val) { - } - - explicit basic_bitfield(value_type &&val) : members_(std::move(val)) { - } - - const value_type &value() const { - return members_; - } - - value_type &value() { - return members_; - } - - static constexpr std::size_t length() { - return length_; - } - - static constexpr std::size_t min_length() { - return length(); - } - - static constexpr std::size_t max_length() { - return length(); - } - - template - status_type read(TIter &iter, std::size_t size) { - if (size < length()) { - return status_type::not_enough_data; - } - - auto serValue = base_impl_type::template read_data(iter); - status_type es = status_type::success; - processing::tuple_for_each_with_template_param_idx(members_, - read_helper(serValue, es)); - return es; - } - - template - void read_no_status(TIter &iter) { - auto serValue = base_impl_type::template read_data(iter); - processing::tuple_for_each_with_template_param_idx( - members_, read_no_status_helper(serValue)); - } - - template - status_type write(TIter &iter, std::size_t size) const { - if (size < length()) { - return status_type::buffer_overflow; - } - - serialized_type serValue = 0; - status_type es = status_type::success; - processing::tuple_for_each_with_template_param_idx( - members_, write_helper(serValue, es)); - if (es == status_type::success) { - processing::write_data(serValue, iter, endian_type()); - } - return es; - } - - template - void write_no_status(TIter &iter) const { - serialized_type serValue = 0; - processing::tuple_for_each_with_template_param_idx( - members_, write_no_status_helper(serValue)); - processing::write_data(serValue, iter, endian_type()); - } - - constexpr bool valid() const { - return processing::tuple_accumulate(members_, true, valid_helper()); - } - - bool refresh() { - return processing::tuple_accumulate(members_, false, refresh_helper()); - } - - template - static constexpr std::size_t member_bit_length() { - static_assert(TIdx < std::tuple_size::value, "Index exceeds number of fields"); - - using field_type = typename std::tuple_element::type; - return detail::bitfield_member_length_retriever::value; - } - - static constexpr bool is_version_dependent() { - return common_funcs::are_members_version_dependent(); - } - - bool set_version(version_type version) { - return common_funcs::set_version_for_members(value(), version); - } - - private: - class read_helper { - public: - read_helper(serialized_type val, status_type &es) : value_(val), es_(es) { - } - - template - void operator()(TFieldParam &&field) { - if (es_ != status_type::success) { - return; - } - - using field_type = typename std::decay::type; - static const auto Pos = detail::get_member_shift_pos(); - static const auto Mask = (static_cast(1) - << detail::bitfield_member_length_retriever::value) - - 1; - - auto fieldSerValue = static_cast((value_ >> Pos) & Mask); - - static_assert(field_type::min_length() == field_type::max_length(), - "basic_bitfield doesn't support members with variable length"); - - static const std::size_t max_length = field_type::max_length(); - std::uint8_t buf[max_length]; - auto *writeIter = &buf[0]; - using FieldEndian = typename field_type::endian_type; - processing::write_data( - fieldSerValue, writeIter, FieldEndian()); - - const auto *readIter = &buf[0]; - es_ = field.read(readIter, max_length); - } - - private: - serialized_type value_; - status_type &es_; - }; - - class read_no_status_helper { - public: - read_no_status_helper(serialized_type val) : value_(val) { - } - - template - void operator()(TFieldParam &&field) { - using field_type = typename std::decay::type; - using FieldOptions = typename field_type::parsed_options_type; - static const auto Pos = detail::get_member_shift_pos(); - static const auto Mask - = (static_cast(1) << FieldOptions::fixed_bit_length) - 1; - - auto fieldSerValue = static_cast((value_ >> Pos) & Mask); - - static_assert(field_type::min_length() == field_type::max_length(), - "basic_bitfield doesn't support members with variable length"); - - static const std::size_t max_length = field_type::max_length(); - std::uint8_t buf[max_length]; - auto *writeIter = &buf[0]; - using FieldEndian = typename field_type::endian_type; - processing::write_data( - fieldSerValue, writeIter, FieldEndian()); - - const auto *readIter = &buf[0]; - field.read_no_status(readIter); - } - - private: - serialized_type value_; - }; - - class write_helper { - public: - write_helper(serialized_type &val, status_type &es) : value_(val), es_(es) { - } - - template - void operator()(TFieldParam &&field) { - if (es_ != status_type::success) { - return; - } - - using field_type = typename std::decay::type; - - static_assert(field_type::min_length() == field_type::max_length(), - "basic_bitfield supports fixed length members only."); - - static const std::size_t max_length = field_type::max_length(); - std::uint8_t buf[max_length]; - auto *writeIter = &buf[0]; - es_ = field.write(writeIter, max_length); - if (es_ != status_type::success) { - return; - } - - using FieldEndian = typename field_type::endian_type; - const auto *readIter = &buf[0]; - auto fieldSerValue = processing::read_data( - readIter, FieldEndian()); - - static const auto Pos = detail::get_member_shift_pos(); - static const auto Mask = (static_cast(1) - << detail::bitfield_member_length_retriever::value) - - 1; - - static const auto ClearMask = ~(Mask << Pos); - - auto valueMask = (static_cast(fieldSerValue) & Mask) << Pos; - - value_ &= ClearMask; - value_ |= valueMask; - } - - private: - serialized_type &value_; - status_type &es_; - }; - - class write_no_status_helper { - public: - write_no_status_helper(serialized_type &val) : value_(val) { - } - - template - void operator()(TFieldParam &&field) { - - using field_type = typename std::decay::type; - - static_assert(field_type::min_length() == field_type::max_length(), - "basic_bitfield supports fixed length members only."); - - static const std::size_t max_length = field_type::max_length(); - std::uint8_t buf[max_length]; - auto *writeIter = &buf[0]; - field.write_no_status(writeIter); - - using FieldEndian = typename field_type::endian_type; - const auto *readIter = &buf[0]; - auto fieldSerValue = processing::read_data( - readIter, FieldEndian()); - - using FieldOptions = typename field_type::parsed_options_type; - static const auto Pos = detail::get_member_shift_pos(); - static const auto Mask - = (static_cast(1) << FieldOptions::fixed_bit_length) - 1; - - static const auto ClearMask = ~(Mask << Pos); - - auto valueMask = (static_cast(fieldSerValue) & Mask) << Pos; - - value_ &= ClearMask; - value_ |= valueMask; - } - - private: - serialized_type &value_; - }; - - struct valid_helper { - template - bool operator()(bool soFar, const TFieldParam &field) { - return soFar && field.valid(); - } - }; - - struct refresh_helper { - template - bool operator()(bool soFar, TFieldParam &field) { - return field.refresh() || soFar; - } - }; - - value_type members_; - }; - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BASIC_BITFIELD_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield/type_traits.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield/type_traits.hpp deleted file mode 100644 index 3492a3651c..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitfield/type_traits.hpp +++ /dev/null @@ -1,115 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASIC_BITFIELD_TYPE_TRAITS_HPP -#define MARSHALLING_BASIC_BITFIELD_TYPE_TRAITS_HPP - -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - struct bitfield_member_length_retrieve_helper; - - template - struct bitfield_member_length_retrieve_helper { - static const std::size_t value = TField::parsed_options_type::fixed_bit_length; - }; - - template - struct bitfield_member_length_retrieve_helper { - static const std::size_t value = std::numeric_limits::digits; - }; - - template - struct bitfield_member_length_retriever { - static const std::size_t value = bitfield_member_length_retrieve_helper< - TField, - TField::parsed_options_type::has_fixed_bit_length_limit>::value; - }; - - template - class bitfield_bit_length_calc_helper { - static const std::size_t Idx = std::tuple_size::value - TRem; - using field_type = typename std::tuple_element::type; - - public: - static const std::size_t value = bitfield_bit_length_calc_helper::value - + bitfield_member_length_retriever::value; - }; - - template - class bitfield_bit_length_calc_helper<0, TMembers> { - public: - static const std::size_t value = 0; - }; - - template - constexpr std::size_t calc_bit_length() { - return bitfield_bit_length_calc_helper::value, TMembers>::value; - } - - template - struct bitfield_pos_retrieve_helper { - static_assert(TIdx < std::tuple_size::value, "Invalid tuple element"); - using field_type = typename std::tuple_element::type; - - static const std::size_t PrevFieldSize = bitfield_member_length_retriever::value; - - public: - static const std::size_t value - = bitfield_pos_retrieve_helper::value + PrevFieldSize; - }; - - template - struct bitfield_pos_retrieve_helper<0, TMembers> { - public: - static const std::size_t value = 0; - }; - - template - constexpr std::size_t get_member_shift_pos() { - return bitfield_pos_retrieve_helper::value; - } - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BASIC_BITFIELD_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitmask_value.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitmask_value.hpp deleted file mode 100644 index 58e6520f89..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitmask_value.hpp +++ /dev/null @@ -1,656 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BITMASK_VALUE_HPP -#define MARSHALLING_BITMASK_VALUE_HPP - -#include - -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief Bitmask value field. - /// @details Quite often communication protocols specify bitmask values, where - /// any bit has a specific meaning. Although such masks are can be handled - /// as unsigned integer values using nil::marshalling::types::integral field type, - /// using nil::marshalling::types::Bitmask may be a bit more convenient. - /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. - /// @tparam TOptions Zero or more options that modify/refine default behaviour - /// of the field. If no option is provided, the underlying type is assumed - /// to be "unsigned", which is usually 4 bytes long. To redefined the length - /// of the bitmask field, use nil::marshalling::option::fixed_length option. - /// For example: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField =nil::marshalling::types::enumeration; - /// @endcode - /// The serialized value of the field in the example above will consume - /// sizeof(unsigned) bytes, because the underlying type chosen to be "unsigned" - /// by default. Example below specifies simple bitmask value field with - /// 2 bytes serialization length: - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField =nil::marshalling::types::enumeration >; - /// @endcode - /// Supported options are: - /// @li @ref nil::marshalling::option::fixed_length - /// @li @ref nil::marshalling::option::fixed_bit_length - /// @li @ref nil::marshalling::option::default_value_initializer or - /// nil::marshalling::option::default_num_value. - /// @li @ref nil::marshalling::option::contents_validator or - /// nil::marshalling::option::bitmask_reserved_bits. - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::fail_on_invalid - /// @li @ref nil::marshalling::option::ignore_invalid - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type - /// @headerfile nil/marshalling/types/bitmask_value.hpp - /// @see MARSHALLING_BITMASK_BITS() - /// @see MARSHALLING_BITMASK_BITS_ACCESS() - /// @see MARSHALLING_BITMASK_BITS_ACCESS_NOTEMPLATE() - /// @see MARSHALLING_BITMASK_BITS_SEQ() - /// @see MARSHALLING_BITMASK_BITS_SEQ_NOTEMPLATE() - template - class bitmask_value : public TFieldBase { - using base_impl_type = TFieldBase; - public: - /// @brief endian_type used for serialization. - using endian_type = typename base_impl_type::endian_type; - - /// @brief Version type - using version_type = typename base_impl_type::version_type; - - /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = detail::options_parser; - - private: - - using bitmask_behaviour_type = - detail::bitmask_undertlying_type_type; - - using integral_type = - integral; - - public: - - /// @brief Tag indicating type of the field - using tag = tag::bitmask; - - /// @brief Type of underlying integral value. - /// @details Unsigned integral type, which depends on the length of the - /// mask determined by the nil::marshalling::option::fixed_length option. - using value_type = typename integral_type::value_type; - - /// @brief Default constructor. - /// @brief Initial bitmask has all bits cleared (equals 0) - bitmask_value() = default; - - /// @brief Constructor - /// @param[in] val Value of the field to initialise it with. - explicit bitmask_value(const value_type &val) : intValue_(val) { - } - - /// @brief Copy constructor - bitmask_value(const bitmask_value &) = default; - - /// @brief Destructor - ~bitmask_value() noexcept = default; - - /// @brief Copy assignment - bitmask_value &operator=(const bitmask_value &) = default; - - /// @brief Get access to underlying mask value storage. - /// @return Const reference to the underlying stored value. - const value_type &value() const { - return intValue_.value(); - } - - /// @brief Get access to underlying mask value storage. - /// @return Reference to the underlying stored value. - value_type &value() { - return intValue_.value(); - } - - /// @brief Get length required to serialise the current field value. - /// @return Number of bytes it will take to serialise the field value. - constexpr std::size_t length() const { - return intValue_.length(); - } - - /// @brief Get maximal length that is required to serialise field of this type. - /// @return Maximal number of bytes required serialise the field value. - static constexpr std::size_t max_length() { - return integral_type::max_length(); - } - - /// @brief Get minimal length that is required to serialise field of this type. - /// @return Minimal number of bytes required serialise the field value. - static constexpr std::size_t min_length() { - return integral_type::min_length(); - } - - /// @brief Read field value from input data sequence - /// @param[in, out] iter Iterator to read the data. - /// @param[in] size Number of bytes available for reading. - /// @return Status of read operation. - /// @post Iterator is advanced. - template - status_type read(TIter &iter, std::size_t size) { - return intValue_.read(iter, size); - } - - /// @brief Read field value from input data sequence without error check and status report. - /// @details Similar to @ref read(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to read the data. - /// @post Iterator is advanced. - template - void read_no_status(TIter &iter) { - intValue_.read_no_status(iter); - } - - /// @brief Write current field value to output data sequence - /// @param[in, out] iter Iterator to write the data. - /// @param[in] size Maximal number of bytes that can be written. - /// @return Status of write operation. - /// @post Iterator is advanced. - template - status_type write(TIter &iter, std::size_t size) const { - return intValue_.write(iter, size); - } - - /// @brief Write current field value to output data sequence without error check and status report. - /// @details Similar to @ref write(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to write the data. - /// @post Iterator is advanced. - template - void write_no_status(TIter &iter) const { - intValue_.write_no_status(iter); - } - - /// @brief Check validity of the field value. - constexpr bool valid() const { - return intValue_.valid(); - } - - /// @brief Refresh contents of the field - /// @return @b true in case the field's value has been updated, @b false otherwise - bool refresh() { - return intValue_.refresh(); - } - - /// @brief Check whether all bits from provided mask are set. - /// @param[in] mask Mask to check against - /// @return true in case all the bits are set, false otherwise - bool has_all_bits_set(value_type mask) const { - return (value() & mask) == mask; - } - - /// @brief Check whether any bits from provided mask are set. - /// @param[in] mask Mask to check against - /// @return true in case at least one of the bits is set, false otherwise. - bool has_any_bits_set(value_type mask) const { - return (value() & mask) != 0; - } - - /// @brief Set all the provided bits. - /// @details Equivalent to @code value() |= mask; @endcode - /// @param[in] mask Mask of bits to set. - void set_bits(value_type mask) { - value() |= mask; - } - - /// @brief Set all the provided bits. - /// @details Equivalent to @code value() &= (~mask); @endcode - /// @param[in] mask Mask of bits to clear. - void clear_bits(value_type mask) { - value() &= (~mask); - } - - /// @brief Get bit value - bool get_bit_value(unsigned bitNum) const { - return has_all_bits_set(static_cast(1U) << bitNum); - } - - /// @brief Set bit value - void set_bit_value(unsigned bitNum, bool val) { - auto mask = static_cast(1U) << bitNum; - if (val) { - set_bits(mask); - } else { - clear_bits(mask); - } - } - - /// @brief Compile time check if this class is version dependent - static constexpr bool is_version_dependent() { - return integral_type::is_version_dependent(); - } - - /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. - version_type get_version() const { - return intValue_.get_version(); - } - - /// @brief Default implementation of version update. - /// @return @b true in case the field contents have changed, @b false otherwise - bool set_version(version_type version) { - return intValue_.set_version(version); - } - - protected: - using base_impl_type::read_data; - using base_impl_type::write_data; - - private: - static_assert( - !parsed_options_type::has_ser_offset, - "nil::marshalling::option::num_value_ser_offset option is not applicable to bitmask_value field"); - static_assert(!parsed_options_type::has_var_length_limits, - "nil::marshalling::option::var_length option is not applicable to bitmask_value field"); - static_assert(!parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "bitmask_value field"); - static_assert(!parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::sequence_size_forcing_enabled option is not applicable to " - "bitmask_value field"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::sequence_length_forcing_enabled option is not applicable to " - "bitmask_value field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to bitmask_value field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " - "bitmask_value field"); - static_assert(!parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to " - "bitmask_value field"); - static_assert(!parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "bitmask_value field"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "bitmask_value field"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "bitmask_value field"); - static_assert(!parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "bitmask_value field"); - static_assert(!parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "bitmask_value field"); - static_assert( - !parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to bitmask_value field"); - static_assert( - !parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to bitmask_value field"); - static_assert( - !parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio_type option is not applicable to bitmask_value field"); - static_assert(!parsed_options_type::has_units, - "nil::marshalling::option::Units option is not applicable to bitmask_value field"); - static_assert( - !parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to bitmask_value field"); - static_assert( - !parsed_options_type::has_multi_range_validation, - "nil::marshalling::option::valid_num_value_range (or similar) option is not applicable to " - "bitmask_value field"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "bitmask_value field"); - static_assert( - !parsed_options_type::has_invalid_by_default, - "nil::marshalling::option::invalid_by_default option is not applicable to bitmask_value field"); - - integral_type intValue_; - }; - - // Implementation - - /// @brief Equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are equal, false otherwise. - /// @related bitmask_value - template - bool operator==(const bitmask_value &field1, - const bitmask_value &field2) { - return field1.value() == field2.value(); - } - - /// @brief Non-equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are NOT equal, false otherwise. - /// @related bitmask_value - template - bool operator!=(const bitmask_value &field1, - const bitmask_value &field2) { - return field1.value() != field2.value(); - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case value of the first field is lower than than the value of the second. - /// @related bitmask_value - template - bool operator<(const bitmask_value &field1, - const bitmask_value &field2) { - return field1.value() < field2.value(); - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::bitmask_value type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::bitmask_value - template - inline bitmask_value & - to_field_base(bitmask_value &field) { - return field; - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::bitmask_value type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::bitmask_value - template - inline const bitmask_value & - to_field_base(const bitmask_value &field) { - return field; - } - -/// @brief Provide names for bits in nil::marshalling::types::bitmask_value field. -/// @details Defines BitIdx enum with all the provided values prefixed with -/// "BitIdx_". For example usage of -/// @code -/// MARSHALLING_BITMASK_BITS(first, second, third, fourth); -/// @endcode -/// will generate the following enum type: -/// @code -/// enum BitIdx -/// { -/// BitIdx_first, -/// BitIdx_second, -/// BitIdx_third, -/// BitIdx_fourth, -/// BitIdx_numOfValues -/// }; -/// @endcode -/// @b NOTE, that provided names @b first, @b second, @b third, and @b fourth have -/// found their way to the enum @b BitIdx. @n -/// Also note, that there is automatically added @b BitIdx_nameOfValues -/// value to the end of @b BitIdx enum. -/// -/// It is possible to assign values to the provided names. It could be useful -/// when skipping some unused bits. For example -/// @code -/// MARSHALLING_BITMASK_BITS(first=1, third=3, fourth); -/// @endcode -/// will generate the following enum type: -/// @code -/// enum BitIdx -/// { -/// BitIdx_first=1, -/// BitIdx_third=3, -/// BitIdx_fourth, -/// BitIdx_numOfValues -/// }; -/// @endcode -/// -/// The macro MARSHALLING_BITMASK_BITS() should be used inside definition of the -/// bitmask field to provide names for the bits for external use: -/// @code -/// struct MyField : public nil::marshalling::types::bitmask_value<...> -/// { -/// MARSHALLING_BITMASK_BITS(first, second, third, fourth); -/// } -/// @endcode -/// @related nil::marshalling::types::bitmask_value -#define MARSHALLING_BITMASK_BITS(...) MARSHALLING_DEFINE_ENUM(BitIdx, __VA_ARGS__) - -/// @brief Generate access functions for bits in nil::marshalling::types::bitmask_value field. -/// @details The @ref MARSHALLING_BITMASK_BITS() macro defines @b BitIdx enum to -/// be able to access internal bits. However, an ability to provide -/// values to the enumeration values using @b =val suffixes doesn't -/// allow generation of convenience access functions to the bits. That's -/// why MARSHALLING_BITMASK_BITS_ACCESS() macro was introduced. For every name -/// listed in the parameters list, @b getBitValue_*() and @b set_bit_value_*() -/// functions will be generated. For example, having the following definition -/// @code -/// struct MyField : public nil::marshalling::types::bitmask_value<...> -/// { -/// ... -/// MARSHALLING_BITMASK_BITS_ACCESS(first, third, fourth); -/// } -/// @endcode -/// is equivalent to having following functions defined: -/// @code -/// struct MyField : public nil::marshalling::types::bitmask_value<...> -/// { -/// ... -/// bool getBitValue_first() const { -/// return get_bit_value(BitIdx_first); -/// } -/// -/// void set_bit_value_first(bool value) { -/// set_bit_value(BitIdx_first, value); -/// } -/// -/// bool getBitValue_third() const { -/// return get_bit_value(BitIdx_third); -/// } -/// -/// void set_bit_value_third(bool value) { -/// set_bit_value(BitIdx_third, value); -/// } -/// -/// bool getBitValue_fourth() const { -/// return get_bit_value(BitIdx_fourth); -/// } -/// -/// void set_bit_value_fourth(bool value) { -/// set_bit_value(BitIdx_fourth, value); -/// } -/// } -/// @endcode -/// @b NOTE, that generated @b getBitValue_*() and @b set_bit_value_*() -/// functions use @b BitIdx_* enum values generated by -/// @ref MARSHALLING_BITMASK_BITS(). It means that MARSHALLING_BITMASK_BITS_ACCESS() -/// macro can NOT be used without @ref MARSHALLING_BITMASK_BITS(). -/// @code -/// struct MyField : public nil::marshalling::types::bitmask_value<...> -/// { -/// MARSHALLING_BITMASK_BITS(first, third=2, fourth); -/// MARSHALLING_BITMASK_BITS_ACCESS(first, third, fourth); -/// } -/// @endcode -/// @pre Must be used together with @ref MARSHALLING_BITMASK_BITS() -/// @related nil::marshalling::types::bitmask_value -/// @warning Some compilers, such as @b clang or early versions of @b g++ -/// may have problems compiling code generated by this macro even -/// though it uses valid C++11 constructs in attempt to automatically identify the -/// type of the base class. If the compilation fails, -/// and this macro resides inside a @b NON-template class, please use -/// @ref MARSHALLING_BITMASK_BITS_ACCESS_NOTEMPLATE() macro instead. In -/// case this macro needs to reside inside a @b template class, then -/// there is a need to define inner @b Base type, which specifies -/// exact type of the @ref nil::marshalling::types::bitmask_value class. For example: -/// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// template -/// class MyField : public -/// nil::marshalling::types::bitmask_value< -/// MyFieldBase, -/// nil::marshalling::types::fixed_length<1>, -/// nil::marshalling::types::bitmask_reserved_bits<0xf2, 0>, -/// TExtraOptions... -/// > -/// { -/// // Duplicate definition of the base class -/// using Base = -/// nil::marshalling::types::bitmask_value< -/// MyFieldBase, -/// nil::marshalling::types::fixed_length<1>, -/// smarshalling::types::bitmask_reserved_bits<0xf2, 0>, -/// TExtraOptions... -/// >; -/// public: -/// MARSHALLING_BITMASK_BITS(first, third=2, fourth); -/// MARSHALLING_BITMASK_BITS_ACCESS(first, third, fourth); -/// } -/// @endcode -#define MARSHALLING_BITMASK_BITS_ACCESS(...) \ - MARSHALLING_AS_BITMASK_FUNC { \ - return nil::marshalling::types::to_field_base(*this); \ - } \ - MARSHALLING_AS_BITMASK_CONST_FUNC { \ - return nil::marshalling::types::to_field_base(*this); \ - } \ - MARSHALLING_DO_BIT_ACC_FUNC(asBitmask(), __VA_ARGS__) - -/// @brief Similar to @ref MARSHALLING_BITMASK_BITS_ACCESS(), but dedicated for -/// non-template classes. -/// @details The @ref MARSHALLING_BITMASK_BITS_ACCESS() macro is a generic one, -/// which can be used in any class (template, or non-template). However, -/// some compilers (such as g++-4.9 and below, @b clang-4.0 and below) may fail -/// to compile it even though it uses valid C++11 constructs. If the -/// compilation fails and the class it is being used in is @b NOT a -/// template one, please use @ref MARSHALLING_BITMASK_BITS_ACCESS_NOTEMPLATE() -/// instead. -/// @related nil::marshalling::types::bitmask_value -#define MARSHALLING_BITMASK_BITS_ACCESS_NOTEMPLATE(...) MARSHALLING_DO_BIT_ACC_FUNC((*this), __VA_ARGS__) - -/// @brief Combine usage of @ref MARSHALLING_BITMASK_BITS() and @ref MARSHALLING_BITMASK_BITS_ACCESS(). -/// @details When assigned bit names start at bit 0 and go sequentially without -/// any gaps in the middle, i.e. don't have any @b =val suffixes, then use -/// MARSHALLING_BITMASK_BITS_SEQ() macro to name the bits. It is defined to use -/// @ref MARSHALLING_BITMASK_BITS() and @ref MARSHALLING_BITMASK_BITS_ACCESS() with the -/// same bit names. For example -/// @code -/// struct MyField : public nil::marshalling::types::bitmask_value<...> -/// { -/// MARSHALLING_BITMASK_BITS_SEQ(first, second, third, fourth); -/// } -/// @endcode -/// is equivalent to having -/// @code -/// struct MyField : public nil::marshalling::types::bitmask_value<...> -/// { -/// enum BitIdx -/// { -/// BitIdx_first, -/// BitIdx_second, -/// BitIdx_third, -/// BitIdx_fourth, -/// BitIdx_numOfValues -/// } -/// -/// bool getBitValue_first() const {...} -/// void set_bit_value_first(bool value) {...} -/// bool getBitValue_second() const {...} -/// void set_bit_value_second(bool value) {...} -/// bool getBitValue_third() const {...} -/// void set_bit_value_third(bool value) {...} -/// bool getBitValue_fourth() const {...} -/// void set_bit_value_fourth(bool value) {...} -/// }; -/// @endcode -/// @related nil::marshalling::types::bitmask_value -/// @warning Some compilers, such as @b clang or early versions of @b g++ -/// may have problems compiling code generated by this macro even -/// though it uses valid C++11 constructs in attempt to automatically identify the -/// type of the base class. If the compilation fails, -/// and this macro resides inside a @b NON-template class, please use -/// @ref MARSHALLING_BITMASK_BITS_SEQ_NOTEMPLATE() macro instead. In -/// case this macro needs to reside inside a @b template class, then -/// there is a need to define inner @b Base type, which specifies -/// exact type of the @ref nil::marshalling::types::bitmask_value class. For example: -/// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// template -/// class MyField : public -/// nil::marshalling::types::bitmask_value< -/// MyFieldBase, -/// nil::marshalling::types::fixed_length<1>, -/// nil::marshalling::types::bitmask_reserved_bits<0xf0, 0>, -/// TExtraOptions... -/// > -/// { -/// // Duplicate definition of the base class -/// using Base = -/// nil::marshalling::types::bitmask_value< -/// MyFieldBase, -/// nil::marshalling::types::fixed_length<1>, -/// scomms::types::bitmask_reserved_bits<0xf0, 0>, -/// TExtraOptions... -/// >; -/// public: -/// MARSHALLING_BITMASK_BITS_SEQ(first, second, third, fourth); -/// } -/// @endcode -#define MARSHALLING_BITMASK_BITS_SEQ(...) \ - MARSHALLING_BITMASK_BITS(__VA_ARGS__) \ - MARSHALLING_BITMASK_BITS_ACCESS(__VA_ARGS__) - -/// @brief Similar to @ref MARSHALLING_BITMASK_BITS_SEQ(), but dedicated for -/// non-template classes. -/// @details The @ref MARSHALLING_BITMASK_BITS_SEQ() macro is a generic one, -/// which can be used in any class (template, or non-template). However, -/// some compilers (such as g++-4.9 and below, @b clang-4.0 and below) may fail -/// to compile it even though it uses valid C++11 constructs. If the -/// compilation fails and the class it is being used in is @b NOT a -/// template one, please use @ref MARSHALLING_BITMASK_BITS_SEQ_NOTEMPLATE() -/// instead. -/// @related nil::marshalling::types::bitmask_value -#define MARSHALLING_BITMASK_BITS_SEQ_NOTEMPLATE(...) \ - MARSHALLING_BITMASK_BITS(__VA_ARGS__) \ - MARSHALLING_BITMASK_BITS_ACCESS_NOTEMPLATE(__VA_ARGS__) - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BITMASK_VALUE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitmask_value/behaviour.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitmask_value/behaviour.hpp deleted file mode 100644 index d237284208..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bitmask_value/behaviour.hpp +++ /dev/null @@ -1,60 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BITMASK_VALUE_BEHAVIOUR_HPP -#define MARSHALLING_BITMASK_VALUE_BEHAVIOUR_HPP - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - struct bitmask_undertlying_type; - - template<> - struct bitmask_undertlying_type { - template - using type = - typename processing::size_to_type::type; - }; - - template<> - struct bitmask_undertlying_type { - template - using type = unsigned; - }; - - template - using bitmask_undertlying_type_type = typename bitmask_undertlying_type< - ParsedOptions::has_fixed_length_limit>::template type; - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BITMASK_VALUE_BEHAVIOUR_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle.hpp index 1ccc23bc72..1f17779faa 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle.hpp @@ -35,57 +35,57 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { /// @brief Bundles multiple fields into a single field. /// @details The class wraps nicely multiple fields and provides /// expected single field API functions, such as length(), read(), write(), - /// valid(). It may be useful when a collection (nil::marshalling::types::array_list) of + /// valid(). It may be useful when a collection (nil::crypto3::marshalling::types::array_list) of /// complex fields is required. /// /// Refer to @ref sec_field_tutorial_bundle for tutorial and usage examples. /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. + /// nil::crypto3::marshalling::field_type. /// @tparam TMembers All wrapped fields bundled together in /// std::tuple. /// @tparam TOptions Zero or more options that modify/refine default behaviour /// of the field.@n /// Supported options are: - /// @li @ref nil::marshalling::option::default_value_initializer - All wrapped fields may + /// @li @ref nil::crypto3::marshalling::option::default_value_initializer - All wrapped fields may /// specify their independent default value initializers. It is /// also possible to provide initializer for the bundle field which /// will set appropriate values to the fields based on some /// internal logic. - /// @li @ref nil::marshalling::option::contents_validator - All wrapped fields may specify + /// @li @ref nil::crypto3::marshalling::option::contents_validator - All wrapped fields may specify /// their independent validators. The bundle field considered to /// be valid if all the wrapped fields are valid. This option though, /// provides an ability to add extra validation logic that can /// observe value of more than one wrapped fields. For example, /// protocol specifies that if one specific field has value X, than /// other field is NOT allowed to have value Y. - /// @li @ref nil::marshalling::option::contents_refresher - The default refreshing + /// @li @ref nil::crypto3::marshalling::option::contents_refresher - The default refreshing /// behaviour is to call the @b refresh() member function of every /// member field. This option provides an ability to set a custom /// "refreshing" logic. - /// @li @ref nil::marshalling::option::custom_value_reader - It may be required to implement + /// @li @ref nil::crypto3::marshalling::option::custom_value_reader - It may be required to implement /// custom reading functionality instead of default behaviour of /// invoking read() member function of every member field. It is possible - /// to provide cusom reader functionality using nil::marshalling::option::custom_value_reader + /// to provide cusom reader functionality using nil::crypto3::marshalling::option::custom_value_reader /// option. - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type + /// @li @ref nil::crypto3::marshalling::option::has_custom_read + /// @li @ref nil::crypto3::marshalling::option::has_custom_refresh + /// @li @ref nil::crypto3::marshalling::option::empty_serialization + /// @li @ref nil::crypto3::marshalling::option::version_storage + /// @extends nil::crypto3::marshalling::field_type /// @headerfile nil/marshalling/types/bundle.hpp /// @see @ref MARSHALLING_FIELD_MEMBERS_ACCESS() /// @see @ref MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE() template class bundle : private detail::adapt_basic_field_type, TOptions...> { using base_impl_type = detail::adapt_basic_field_type, TOptions...>; - static_assert(nil::detail::is_tuple::value, + static_assert(marshalling::detail::is_tuple::value, "TMembers is expected to be a tuple of std::tuple<...>"); static_assert(1U <= std::tuple_size::value, @@ -489,7 +489,7 @@ namespace nil { } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -505,65 +505,18 @@ namespace nil { using base_impl_type::write_data; private: - static_assert( - !parsed_options_type::has_ser_offset, - "nil::marshalling::option::num_value_ser_offset option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_var_length_limits, - "nil::marshalling::option::var_length option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "bundle field"); - static_assert( - !parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::sequence_size_forcing_enabled option is not applicable to bundle field"); - static_assert( - !parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::sequence_length_forcing_enabled option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to bundle field"); static_assert(!parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable " + "nil::crypto3::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable " "to bundle field"); static_assert( !parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "bundle field"); - static_assert(!parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not " - "applicable to bundle field"); - static_assert(!parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not " - "applicable to bundle field"); - static_assert(!parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "bundle field"); - static_assert(!parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "bundle field"); + "nil::crypto3::marshalling::option::sequence_size_field_prefix option is not applicable to bundle field"); static_assert(!parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to bundle field"); + "nil::crypto3::marshalling::option::fixed_size_storage option is not applicable to bundle field"); static_assert(!parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio_type option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_units, - "nil::marshalling::option::Units option is not applicable to bundle field"); + "nil::crypto3::marshalling::option::custom_storage_type option is not applicable to bundle field"); static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to bundle field"); - static_assert(!parsed_options_type::has_multi_range_validation, - "nil::marshalling::option::valid_num_value_range (or similar) option is not applicable " - "to bundle field"); - static_assert(!parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable " - "to bundle field"); - static_assert(!parsed_options_type::has_invalid_by_default, - "nil::marshalling::option::invalid_by_default option is not applicable to bundle field"); + "nil::crypto3::marshalling::option::orig_data_view option is not applicable to bundle field"); }; /// @brief Equality comparison operator. @@ -628,18 +581,18 @@ namespace nil { return field1.value() >= field2.value(); } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::bundle type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::bundle type /// in order to have access to its internal types. - /// @related nil::marshalling::types::bundle + /// @related nil::crypto3::marshalling::types::bundle template inline bundle & to_field_base(bundle &field) { return field; } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::bundle type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::bundle type /// in order to have access to its internal types. - /// @related nil::marshalling::types::bundle + /// @related nil::crypto3::marshalling::types::bundle template inline const bundle & to_field_base(const bundle &field) { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle/basic_type.hpp index cf7c1538b2..225205f6c2 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle/basic_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/bundle/basic_type.hpp @@ -37,7 +37,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -407,7 +407,7 @@ namespace nil { return write_no_status_helper(iter); } - static_assert(nil::detail::is_tuple::value, + static_assert(marshalling::detail::is_tuple::value, "value_type must be tuple"); value_type members_; }; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/adapt_basic_field.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/adapt_basic_field.hpp index 313594661d..c2bdac156c 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/adapt_basic_field.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/adapt_basic_field.hpp @@ -26,35 +26,10 @@ #ifndef MARSHALLING_ADAPT_BASIC_FIELD_HPP #define MARSHALLING_ADAPT_BASIC_FIELD_HPP -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -71,243 +46,6 @@ namespace nil { + static_cast(T5) + static_cast(T6); }; - template - struct adapt_field_version_storage; - - template<> - struct adapt_field_version_storage { - template - using type = types::adapter::version_storage; - }; - - template<> - struct adapt_field_version_storage { - template - using type = TField; - }; - - template - using adapt_field_version_storage_type = - typename adapt_field_version_storage::template type; - - template - struct adapt_field_invalid_by_default; - - template<> - struct adapt_field_invalid_by_default { - template - using type = types::adapter::invalid_by_default; - }; - - template<> - struct adapt_field_invalid_by_default { - template - using type = TField; - }; - - template - using adapt_field_invalid_by_default_type = - typename adapt_field_invalid_by_default::template type; - - template - struct adapt_field_custom_value_reader; - - template<> - struct adapt_field_custom_value_reader { - template - using type - = types::adapter::custom_value_reader; - }; - - template<> - struct adapt_field_custom_value_reader { - template - using type = TField; - }; - - template - using adapt_field_custom_value_reader_type = - typename adapt_field_custom_value_reader::template type; - - template - struct adapt_field_ser_offset; - - template<> - struct adapt_field_ser_offset { - template - using type = types::adapter::ser_offset; - }; - - template<> - struct adapt_field_ser_offset { - template - using type = TField; - }; - - template - using adapt_field_ser_offset_type = - typename adapt_field_ser_offset::template type; - - template - struct adapt_field_versions_range; - - template<> - struct adapt_field_versions_range { - template - using type = types::adapter:: - exists_between_versions; - }; - - template<> - struct adapt_field_versions_range { - template - using type = TField; - }; - - template - using adapt_field_versions_range_type = - typename adapt_field_versions_range::template type; - - template - struct adapt_field_fixed_length; - - template<> - struct adapt_field_fixed_length { - template - using type = types::adapter:: - fixed_length; - }; - - template<> - struct adapt_field_fixed_length { - template - using type = TField; - }; - - template - using adapt_field_fixed_length_type = - typename adapt_field_fixed_length::template type; - - template - struct adapt_field_fixed_bit_length; - - template<> - struct adapt_field_fixed_bit_length { - template - using type = types::adapter::fixed_bit_length; - }; - - template<> - struct adapt_field_fixed_bit_length { - template - using type = TField; - }; - - template - using adapt_field_fixed_bit_length_type = - typename adapt_field_fixed_bit_length::template type; - - template - struct adapt_field_var_length; - - template<> - struct adapt_field_var_length { - template - using type = types::adapter:: - var_length; - }; - - template<> - struct adapt_field_var_length { - template - using type = TField; - }; - - template - using adapt_field_var_length_type = - typename adapt_field_var_length::template type; - - template - struct adapt_field_sequence_elem_length_forcing; - - template<> - struct adapt_field_sequence_elem_length_forcing { - template - using type = types::adapter::sequence_elem_length_forcing; - }; - - template<> - struct adapt_field_sequence_elem_length_forcing { - template - using type = TField; - }; - - template - using adapt_field_sequence_elem_length_forcing_type = typename adapt_field_sequence_elem_length_forcing< - TOpts::has_sequence_elem_length_forcing>::template type; - - template - struct adapt_field_sequence_size_forcing; - - template<> - struct adapt_field_sequence_size_forcing { - template - using type = types::adapter::sequence_size_forcing; - }; - - template<> - struct adapt_field_sequence_size_forcing { - template - using type = TField; - }; - - template - using adapt_field_sequence_size_forcing_type = - typename adapt_field_sequence_size_forcing::template type; - - template - struct adapt_field_sequence_length_forcing; - - template<> - struct adapt_field_sequence_length_forcing { - template - using type = types::adapter::sequence_length_forcing; - }; - - template<> - struct adapt_field_sequence_length_forcing { - template - using type = TField; - }; - - template - using adapt_field_sequence_length_forcing_type = typename adapt_field_sequence_length_forcing< - TOpts::has_sequence_length_forcing>::template type; - - template - struct adapt_field_sequence_fixed_size; - - template<> - struct adapt_field_sequence_fixed_size { - template - using type - = types::adapter::sequence_fixed_size; - }; - - template<> - struct adapt_field_sequence_fixed_size { - template - using type = TField; - }; - - template - using adapt_field_sequence_fixed_size_type = - typename adapt_field_sequence_fixed_size::template type; - template struct adapt_field_sequence_size_field_prefix; @@ -323,412 +61,17 @@ namespace nil { template using type = TField; }; - template using adapt_field_sequence_size_field_prefix_type = typename adapt_field_sequence_size_field_prefix< TOpts::has_sequence_size_field_prefix>::template type; - //-- - template - struct adapt_field_sequence_ser_length_field_prefix; - - template<> - struct adapt_field_sequence_ser_length_field_prefix { - template - using type = types::adapter::sequence_ser_length_field_prefix< - typename TOpts::sequence_ser_length_field_prefix, - TOpts::sequence_ser_length_field_read_error_status, - TField>; - }; - - template<> - struct adapt_field_sequence_ser_length_field_prefix { - template - using type = TField; - }; - - template - using adapt_field_sequence_ser_length_field_prefix_type = - typename adapt_field_sequence_ser_length_field_prefix< - TOpts::has_sequence_ser_length_field_prefix>::template type; - - //-- - - template - struct adapt_field_sequence_elem_ser_length_field_prefix; - - template<> - struct adapt_field_sequence_elem_ser_length_field_prefix { - template - using type = types::adapter::sequence_elem_ser_length_field_prefix< - typename TOpts::sequence_elem_ser_length_field_prefix, - TOpts::sequence_elem_ser_length_field_read_error_status, - TField>; - }; - - template<> - struct adapt_field_sequence_elem_ser_length_field_prefix { - template - using type = TField; - }; - - template - using adapt_field_sequence_elem_ser_length_field_prefix_type = - typename adapt_field_sequence_elem_ser_length_field_prefix< - TOpts::has_sequence_elem_ser_length_field_prefix>::template type; - - //-- - - template - struct adapt_field_sequence_elem_fixed_ser_length_field_prefix; - - template<> - struct adapt_field_sequence_elem_fixed_ser_length_field_prefix { - template - using type = types::adapter::sequence_elem_fixed_ser_length_field_prefix< - typename TOpts::sequence_elem_fixed_ser_length_field_prefix, - TOpts::sequence_elem_fixed_ser_length_field_read_error_status, - TField>; - }; - - template<> - struct adapt_field_sequence_elem_fixed_ser_length_field_prefix { - template - using type = TField; - }; - - template - using adapt_field_sequence_elem_fixed_ser_length_field_prefix_type = - typename adapt_field_sequence_elem_fixed_ser_length_field_prefix< - TOpts::has_sequence_elem_fixed_ser_length_field_prefix>::template type; - - //-- - - template - struct adapt_field_sequence_trailing_field_suffix; - - template<> - struct adapt_field_sequence_trailing_field_suffix { - template - using type = types::adapter:: - sequence_trailing_field_suffix; - }; - - template<> - struct adapt_field_sequence_trailing_field_suffix { - template - using type = TField; - }; - - template - using adapt_field_sequence_trailing_field_suffix_type = - typename adapt_field_sequence_trailing_field_suffix< - TOpts::has_sequence_trailing_field_suffix>::template type; - - template - struct adapt_field_sequence_termination_field_suffix; - - template<> - struct adapt_field_sequence_termination_field_suffix { - template - using type = types::adapter:: - sequence_termination_field_suffix; - }; - - template<> - struct adapt_field_sequence_termination_field_suffix { - template - using type = TField; - }; - - template - using adapt_field_sequence_termination_field_suffix_type = - typename adapt_field_sequence_termination_field_suffix< - TOpts::has_sequence_termination_field_suffix>::template type; - - template - struct adapt_field_default_value_initializer; - - template<> - struct adapt_field_default_value_initializer { - template - using type = types::adapter:: - default_value_initializer; - }; - - template<> - struct adapt_field_default_value_initializer { - template - using type = TField; - }; - - template - using adapt_field_default_value_initializer_type = typename adapt_field_default_value_initializer< - TOpts::has_default_value_initializer>::template type; - - template - struct adapt_field_num_value_multi_range_validator; - - template<> - struct adapt_field_num_value_multi_range_validator { - template - using type = types::adapter:: - num_value_multi_range_validator; - }; - - template<> - struct adapt_field_num_value_multi_range_validator { - template - using type = TField; - }; - - template - using adapt_field_num_value_multi_range_validator_type = - typename adapt_field_num_value_multi_range_validator< - TOpts::has_multi_range_validation>::template type; - - template - struct adapt_field_custom_validator; - - template<> - struct adapt_field_custom_validator { - template - using type - = types::adapter::custom_validator; - }; - - template<> - struct adapt_field_custom_validator { - template - using type = TField; - }; - - template - using adapt_field_custom_validator_type = - typename adapt_field_custom_validator::template type; - - template - struct adapt_field_custom_refresher; - - template<> - struct adapt_field_custom_refresher { - template - using type - = types::adapter::custom_refresher; - }; - - template<> - struct adapt_field_custom_refresher { - template - using type = TField; - }; - - template - using adapt_field_custom_refresher_type = - typename adapt_field_custom_refresher::template type; - - template - struct adapt_field_fail_on_invalid; - - template<> - struct adapt_field_fail_on_invalid { - template - using type - = types::adapter::fail_on_invalid; - }; - - template<> - struct adapt_field_fail_on_invalid { - template - using type = TField; - }; - - template - using adapt_field_fail_on_invalid_type = - typename adapt_field_fail_on_invalid::template type; - - template - struct adapt_field_ignore_invalid; - - template<> - struct adapt_field_ignore_invalid { - template - using type = types::adapter::ignore_invalid; - }; - - template<> - struct adapt_field_ignore_invalid { - template - using type = TField; - }; - - template - using adapt_field_ignore_invalid_type = - typename adapt_field_ignore_invalid::template type; - - template - struct adapt_field_empty_serialization; - - template<> - struct adapt_field_empty_serialization { - template - using type = types::adapter::empty_serialization; - }; - - template<> - struct adapt_field_empty_serialization { - template - using type = TField; - }; - - template - using adapt_field_empty_serialization_type = - typename adapt_field_empty_serialization::template type; - template class adapt_basic_field { using parsed_options_type = options_parser; - - static const bool custom_reader_incompatible - = parsed_options_type::has_ser_offset || parsed_options_type::has_fixed_length_limit - || parsed_options_type::has_fixed_bit_length_limit - || parsed_options_type::has_var_length_limits - || parsed_options_type::has_sequence_elem_length_forcing - || parsed_options_type::has_sequence_size_forcing - || parsed_options_type::has_sequence_length_forcing - || parsed_options_type::has_sequence_fixed_size - || parsed_options_type::has_sequence_size_field_prefix - || parsed_options_type::has_sequence_ser_length_field_prefix - || parsed_options_type::has_sequence_elem_ser_length_field_prefix - || parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix - || parsed_options_type::has_sequence_trailing_field_suffix - || parsed_options_type::has_sequence_termination_field_suffix - | parsed_options_type::has_empty_serialization; - - static_assert((!parsed_options_type::has_custom_value_reader) || (!custom_reader_incompatible), - "custom_value_reader option is incompatible with following options: " - "num_value_ser_offset, fixed_length, fixed_bit_length, var_length, " - "has_sequence_elem_length_forcing, " - "sequence_size_forcing_enabled, sequence_length_forcing_enabled, sequence_fixed_size, " - "sequence_size_field_prefix, " - "sequence_ser_length_field_prefix, sequence_elem_ser_length_field_prefix, " - "sequence_elem_fixed_ser_length_field_prefix, sequence_trailing_field_suffix, " - "sequence_termination_field_suffix, empty_serialization"); - - static const bool var_length_incompatible = parsed_options_type::has_fixed_length_limit - || parsed_options_type::has_fixed_bit_length_limit; - - static_assert((!parsed_options_type::has_var_length_limits) || (!var_length_incompatible), - "var_length option is incompatible with fixed_length and fixed_bit_length"); - - static_assert(1U >= fields_options_compatibility_calc< - parsed_options_type::has_sequence_size_field_prefix, - parsed_options_type::has_sequence_ser_length_field_prefix, - parsed_options_type::has_sequence_fixed_size, - parsed_options_type::has_sequence_size_forcing, - parsed_options_type::has_sequence_length_forcing, - parsed_options_type::has_sequence_termination_field_suffix>::value, - "The following options are incompatible, cannot be used together: " - "sequence_size_field_prefix, sequence_ser_length_field_prefix, " - "sequence_fixed_size, sequence_size_forcing_enabled, sequence_length_forcing_enabled, " - "sequence_termination_field_suffix"); - - static_assert(1U >= fields_options_compatibility_calc< - parsed_options_type::has_sequence_elem_ser_length_field_prefix, - parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - parsed_options_type::has_sequence_termination_field_suffix>::value, - "The following options are incompatible, cannot be used together: " - "sequence_elem_ser_length_field_prefix, sequence_elem_fixed_ser_length_field_prefix " - "sequence_termination_field_suffix"); - - static_assert((!parsed_options_type::has_sequence_trailing_field_suffix) - || (!parsed_options_type::has_sequence_termination_field_suffix), - "The following options are incompatible, cannot be used together: " - "sequence_trailing_field_suffix, sequence_termination_field_suffix"); - - static_assert((!parsed_options_type::has_fail_on_invalid) - || (!parsed_options_type::has_ignore_invalid), - "The following options are incompatible, cannot be used together: " - "fail_on_invalid, ignore_invalid"); - - static_assert( - 1U >= fields_options_compatibility_calc::value, - "The following options are incompatible, cannot be used together: " - "custom_storage_type, fixed_size_storage, orig_data_view"); - - static_assert( - (!parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage) - || (parsed_options_type::has_sequence_fixed_size), - "The option SequenceFixedSizeUseFixedSizeStorage cannot be used without sequence_fixed_size."); - - static_assert((!parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage) - || (!parsed_options_type::has_fixed_size_storage), - "The following options are incompatible, cannot be used together: " - "SequenceFixedSizeUseFixedSizeStorage, fixed_size_storage"); - - using invalid_by_default_adapted = adapt_field_invalid_by_default_type; - using version_storage_adapted - = adapt_field_version_storage_type; - using custom_reader_adapted - = adapt_field_custom_value_reader_type; - using ser_offset_adapted = adapt_field_ser_offset_type; - using versions_range_adapted - = adapt_field_versions_range_type; - using fixed_length_adapted - = adapt_field_fixed_length_type; - using fixed_bit_length_adapted - = adapt_field_fixed_bit_length_type; - using var_length_adapted - = adapt_field_var_length_type; - using sequence_elem_length_forcing_adapted - = adapt_field_sequence_elem_length_forcing_type; - using sequence_elem_ser_length_field_prefix_adapted - = adapt_field_sequence_elem_ser_length_field_prefix_type; - using sequence_elem_fixed_ser_length_field_prefix_adapted - = adapt_field_sequence_elem_fixed_ser_length_field_prefix_type< - sequence_elem_ser_length_field_prefix_adapted, - parsed_options_type>; - using sequence_size_forcing_adapted - = adapt_field_sequence_size_forcing_type; - using sequence_length_forcing_adapted - = adapt_field_sequence_length_forcing_type; - using sequence_fixed_size_adapted - = adapt_field_sequence_fixed_size_type; using sequence_size_field_prefix_adapted - = adapt_field_sequence_size_field_prefix_type; - using sequence_ser_length_field_prefix_adapted - = adapt_field_sequence_ser_length_field_prefix_type; - using sequence_trailing_field_suffix_adapted - = adapt_field_sequence_trailing_field_suffix_type; - using sequence_termination_field_suffix_adapted - = adapt_field_sequence_termination_field_suffix_type; - using default_value_initializer_adapted - = adapt_field_default_value_initializer_type; - using num_value_multi_range_validator_adapted - = adapt_field_num_value_multi_range_validator_type; - using custom_validator_adapted - = adapt_field_custom_validator_type; - using custom_refresher_adapted - = adapt_field_custom_refresher_type; - using fail_on_invalid_adapted - = adapt_field_fail_on_invalid_type; - using ignore_invalid_adapted - = adapt_field_ignore_invalid_type; - using empty_serialization_adapted - = adapt_field_empty_serialization_type; - + = adapt_field_sequence_size_field_prefix_type; public: - using type = empty_serialization_adapted; + using type = sequence_size_field_prefix_adapted; }; template diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/common_funcs.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/common_funcs.hpp index 28f835faec..9ded428173 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/common_funcs.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/common_funcs.hpp @@ -32,7 +32,7 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/options_parser.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/options_parser.hpp index ad1737854f..f1813a36f0 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/options_parser.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/detail/options_parser.hpp @@ -27,11 +27,10 @@ #define MARSHALLING_OPTIONS_PARSER_HPP #include -#include #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -42,382 +41,58 @@ namespace nil { template<> class options_parser<> { public: - static const bool has_custom_value_reader = false; - static const bool has_custom_read = false; - static const bool has_ser_offset = false; - static const bool has_fixed_length_limit = false; - static const bool has_fixed_bit_length_limit = false; - static const bool has_var_length_limits = false; - static const bool has_sequence_elem_length_forcing = false; - static const bool has_sequence_size_forcing = false; - static const bool has_sequence_length_forcing = false; - static const bool has_sequence_fixed_size = false; + static const bool has_orig_data_view = false; + static const bool has_custom_storage_type = false; + static const bool has_fixed_size_storage = false; static const bool has_sequence_fixed_size_use_fixed_size_storage = false; static const bool has_sequence_size_field_prefix = false; - static const bool has_sequence_ser_length_field_prefix = false; - static const bool has_sequence_elem_ser_length_field_prefix = false; - static const bool has_sequence_elem_fixed_ser_length_field_prefix = false; - static const bool has_sequence_trailing_field_suffix = false; - static const bool has_sequence_termination_field_suffix = false; - static const bool has_default_value_initializer = false; - static const bool has_custom_validator = false; - static const bool has_contents_refresher = false; - static const bool has_custom_refresh = false; - static const bool has_fail_on_invalid = false; - static const bool has_ignore_invalid = false; - static const bool has_invalid_by_default = false; - static const bool has_fixed_size_storage = false; - static const bool has_custom_storage_type = false; - static const bool has_scaling_ratio = false; - static const bool has_units = false; - static const bool has_orig_data_view = false; - static const bool has_empty_serialization = false; - static const bool has_multi_range_validation = false; static const bool has_custom_version_update = false; - static const bool has_versions_range = false; - static const bool has_version_storage = false; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_custom_value_reader = true; - using custom_value_reader = T; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_custom_read = true; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_ser_offset = true; - static const auto ser_offset = TOffset; - }; - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_fixed_length_limit = true; - static const std::size_t fixed_length = TLen; - static const bool fixed_length_sign_extend = TSignExtend; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_fixed_bit_length_limit = true; - static const std::size_t fixed_bit_length = TLen; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_var_length_limits = true; - static const std::size_t min_var_length = TMinLen; - static const std::size_t max_var_length = TMaxLen; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_sequence_size_forcing = true; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_sequence_length_forcing = true; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_sequence_elem_length_forcing = true; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_sequence_fixed_size = true; - static const auto sequence_fixed_size = TSize; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_sequence_fixed_size_use_fixed_size_storage = true; }; template - class options_parser, TOptions...> + class options_parser, TOptions...> : public options_parser { public: static const bool has_sequence_size_field_prefix = true; using sequence_size_field_prefix = TSizeField; }; - template - class options_parser< - nil::marshalling::option::sequence_ser_length_field_prefix, - TOptions...> : public options_parser { - public: - static const bool has_sequence_ser_length_field_prefix = true; - using sequence_ser_length_field_prefix = TField; - static const status_type sequence_ser_length_field_read_error_status - = TReadErrorStatus; - }; - - template - class options_parser< - nil::marshalling::option::sequence_elem_ser_length_field_prefix, - TOptions...> : public options_parser { - public: - static const bool has_sequence_elem_ser_length_field_prefix = true; - using sequence_elem_ser_length_field_prefix = TField; - static const status_type sequence_elem_ser_length_field_read_error_status - = TReadErrorStatus; - }; - - template - class options_parser< - nil::marshalling::option::sequence_elem_fixed_ser_length_field_prefix, - TOptions...> : public options_parser { - public: - static const bool has_sequence_elem_fixed_ser_length_field_prefix = true; - using sequence_elem_fixed_ser_length_field_prefix = TField; - static const status_type sequence_elem_fixed_ser_length_field_read_error_status - = TReadErrorStatus; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_sequence_trailing_field_suffix = true; - using sequence_trailing_field_suffix = TTrailField; - }; - - template - class options_parser, - TOptions...> : public options_parser { - public: - static const bool has_sequence_termination_field_suffix = true; - using sequence_termination_field_suffix = TTermField; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_default_value_initializer = true; - using default_value_initializer = TInitialiser; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_custom_validator = true; - using custom_validator = TValidator; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_contents_refresher = true; - using custom_refresher = TRefresher; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_custom_refresh = true; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_fail_on_invalid = true; - static const status_type fail_on_invalid_status = TStatus; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_ignore_invalid = true; - }; - template - class options_parser + class options_parser : public options_parser { public: - static const bool has_invalid_by_default = true; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_fixed_size_storage = true; - static const std::size_t fixed_size_storage = TSize; + static const bool has_orig_data_view = true; }; template - class options_parser, TOptions...> + class options_parser, TOptions...> : public options_parser { public: static const bool has_custom_storage_type = true; using custom_storage_type = TType; }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_scaling_ratio = true; - using scaling_ratio_type = std::ratio; - }; - - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_units = true; - using units_type = TType; - using units_ratio = TRatio; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_orig_data_view = true; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_empty_serialization = true; - }; - - template - struct multi_range_assembler; - - template<> - struct multi_range_assembler { - template - using type = std::tuple< - std::tuple, std::integral_constant>>; - }; - - template<> - struct multi_range_assembler { - using false_assembler_type = multi_range_assembler; - - template - using type = typename std::decay(), - std::declval< - typename false_assembler_type::template type>()))>::type; - }; - - template - using multi_range_assembler_type = typename multi_range_assembler< - TBase::has_multi_range_validation>::template type; - - template - class options_parser, TOptions...> + template + class options_parser, TOptions...> : public options_parser { - using base_impl_type = options_parser; - public: -#ifdef CC_COMPILER_GCC47 - static_assert( - !base_impl_type::has_multi_range_validation, - "Sorry gcc-4.7 fails to compile valid C++11 code that allows multiple usage" - "of nil::marshalling::option::valid_num_value_range options. Either use it only once or" - "upgrade your compiler."); -#endif - using multi_range_validation_ranges - = multi_range_assembler_type; - static const bool has_multi_range_validation = true; + static const bool has_fixed_size_storage = true; + static const std::size_t fixed_size_storage = TSize; }; - template - class options_parser + class options_parser : public options_parser { - using base_impl_type = options_parser; - - public: - using multi_range_validation_ranges = void; - static const bool has_multi_range_validation = false; - }; - - template - class options_parser, - TOptions...> : public options_parser { - using base_impl_type = options_parser; - public: -#ifdef CC_COMPILER_GCC47 - static_assert( - !base_impl_type::has_multi_range_validation, - "Sorry gcc-4.7 fails to compile valid C++11 code that allows multiple usage" - "of nil::marshalling::option::valid_num_value_range options. Either use it only once or" - "upgrade your compiler."); -#endif - using multi_range_validation_ranges - = multi_range_assembler_type; - static const bool has_multi_range_validation = true; + static const bool has_sequence_fixed_size_use_fixed_size_storage = true; }; template - class options_parser + class options_parser : public options_parser { public: static const bool has_custom_version_update = true; }; - template - class options_parser, TOptions...> - : public options_parser { - public: - static const bool has_versions_range = true; - static const std::uintmax_t exists_from_version = TFrom; - static const std::uintmax_t exists_until_version = TUntil; - }; - - template - class options_parser - : public options_parser { - public: - static const bool has_version_storage = true; - }; - - template - class options_parser - : public options_parser { }; - template class options_parser, TOptions...> : public options_parser { }; @@ -425,5 +100,5 @@ namespace nil { } // namespace detail } // namespace types } // namespace marshalling -} // namespace nil +} // namespace nil::crypto3 #endif // MARSHALLING_OPTIONS_PARSER_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/enumeration.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/enumeration.hpp deleted file mode 100644 index 93c6254585..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/enumeration.hpp +++ /dev/null @@ -1,344 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -/// @file -/// Contains definition of nil::marshalling::types::enumeration - -#ifndef MARSHALLING_ENUM_VALUE_HPP -#define MARSHALLING_ENUM_VALUE_HPP - -#include - -#include -#include -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief Enumerator value field. - /// @details Sometimes dealing with enum values is much more convenient that - /// using integral values. nil::marshalling::types::enumeration is very similar to - /// nil::marshalling::types::integral, but receives underlying enum type in its - /// template parameters instead of integral one. - /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. - /// @tparam TEnum Enderlying enum type, can be either unscoped or scoped (enum class). - /// @tparam TOptions Zero or more options that modify/refine default behaviour - /// of the field. If no option is provided, the field's value is serialized as is, - /// where the length of the field is equal to the length of the underlying - /// enum type. For example: - /// @code - /// enum class MyEnum : std::uint16_t - /// { - /// Value1, - /// Value2, - /// Value3 - /// } - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField =nil::marshalling::types::enumeration; - /// @endcode - /// The serialized value of the field in the example above will consume - /// 2 bytes, because the underlying type of MyEnum is - /// defined to be std::uint16_t. The value is serialized using big endian - /// notation because base field class receives nil::marshalling::option::BigEndian option.@n - /// Supported options are: - /// @li @ref nil::marshalling::option::fixed_length - /// @li @ref nil::marshalling::option::fixed_bit_length - /// @li @ref nil::marshalling::option::var_length - /// @li @ref nil::marshalling::num_value_ser_offset - /// @li @ref nil::marshalling::option::default_value_initializer or - /// nil::marshalling::option::default_num_value. - /// @li @ref nil::marshalling::option::contents_validator - /// @li @ref nil::marshalling::option::valid_num_value_range, @ref nil::marshalling::option::valid_num_value, - /// @ref nil::marshalling::option::valid_big_unsigned_num_value_range, @ref - /// nil::marshalling::option::valid_big_unsigned_num_value_range - /// @li @ref nil::marshalling::option::valid_ranges_clear - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::fail_on_invalid - /// @li @ref nil::marshalling::option::ignore_invalid - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::invalid_by_default - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type - /// @headerfile nil/marshalling/types/enumeration.hpp - template - class enumeration - : private detail::adapt_basic_field_type, TOptions...> { - using base_impl_type - = detail::adapt_basic_field_type, TOptions...>; - static_assert(std::is_enum::value, "TEnum must be enum type"); - - public: - /// @brief endian_type used for serialization. - using endian_type = typename base_impl_type::endian_type; - - /// @brief Version type - using version_type = typename base_impl_type::version_type; - - /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = detail::options_parser; - - /// @brief Tag indicating type of the field - using tag = tag::enumeration; - - /// @brief Type of underlying enum value. - /// @details Same as template parameter TEnum to this class. - using value_type = typename base_impl_type::value_type; - - /// @brief Default constructor. - enumeration() = default; - - /// @brief Constructor - explicit enumeration(const value_type &val) : base_impl_type(val) { - } - - /// @brief Copy constructor - enumeration(const enumeration &) = default; - - /// @brief Destructor - ~enumeration() noexcept = default; - - /// @brief Copy assignment - enumeration &operator=(const enumeration &) = default; - - /// @brief Get access to enum value storage. - const value_type &value() const { - return base_impl_type::value(); - } - - /// @brief Get access to enum value storage. - value_type &value() { - return base_impl_type::value(); - } - - /// @brief Get length required to serialise the current field value. - /// @return Number of bytes it will take to serialise the field value. - constexpr std::size_t length() const { - return base_impl_type::length(); - } - - /// @brief Get minimal length that is required to serialise field of this type. - /// @return Minimal number of bytes required serialise the field value. - static constexpr std::size_t min_length() { - return base_impl_type::min_length(); - } - - /// @brief Get maximal length that is required to serialise field of this type. - /// @return Maximal number of bytes required serialise the field value. - static constexpr std::size_t max_length() { - return base_impl_type::max_length(); - } - - /// @brief Read field value from input data sequence - /// @param[in, out] iter Iterator to read the data. - /// @param[in] size Number of bytes available for reading. - /// @return Status of read operation. - /// @post Iterator is advanced. - template - status_type read(TIter &iter, std::size_t size) { - return base_impl_type::read(iter, size); - } - - /// @brief Read field value from input data sequence without error check and status report. - /// @details Similar to @ref read(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to read the data. - /// @post Iterator is advanced. - template - void read_no_status(TIter &iter) { - base_impl_type::read_no_status(iter); - } - - /// @brief Write current field value to output data sequence - /// @param[in, out] iter Iterator to write the data. - /// @param[in] size Maximal number of bytes that can be written. - /// @return Status of write operation. - /// @post Iterator is advanced. - template - status_type write(TIter &iter, std::size_t size) const { - return base_impl_type::write(iter, size); - } - - /// @brief Write current field value to output data sequence without error check and status report. - /// @details Similar to @ref write(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to write the data. - /// @post Iterator is advanced. - template - void write_no_status(TIter &iter) const { - base_impl_type::write_no_status(iter); - } - - /// @brief Check validity of the field value. - bool valid() const { - return base_impl_type::valid(); - } - - /// @brief Refresh the field's value - /// @return @b true if the value has been updated, @b false otherwise - bool refresh() { - return base_impl_type::refresh(); - } - - /// @brief Compile time check if this class is version dependent - static constexpr bool is_version_dependent() { - return parsed_options_type::has_custom_version_update || base_impl_type::is_version_dependent(); - } - - /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. - version_type get_version() const { - return base_impl_type::get_version(); - } - - /// @brief Default implementation of version update. - /// @return @b true in case the field contents have changed, @b false otherwise - bool set_version(version_type version) { - return base_impl_type::set_version(version); - } - - protected: - using base_impl_type::read_data; - using base_impl_type::write_data; - - private: - static_assert(!parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "enumeration field"); - static_assert(!parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::sequence_size_forcing_enabled option is not applicable to " - "enumeration field"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::sequence_length_forcing_enabled option is not applicable to " - "enumeration field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to enumeration field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " - "enumeration field"); - static_assert(!parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to " - "enumeration field"); - static_assert(!parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "enumeration field"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "enumeration field"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "enumeration field"); - static_assert(!parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "enumeration field"); - static_assert(!parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "enumeration field"); - static_assert( - !parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to enumeration field"); - static_assert( - !parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to enumeration field"); - static_assert( - !parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio_type option is not applicable to enumeration field"); - static_assert(!parsed_options_type::has_units, - "nil::marshalling::option::Units option is not applicable to enumeration field"); - static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to enumeration field"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "enumeration field"); - }; - - // Implementation - - /// @brief Equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are equal, false otherwise. - /// @related enumeration - template - bool operator==(const enumeration &field1, - const enumeration &field2) { - return field1.value() == field2.value(); - } - - /// @brief Non-equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are NOT equal, false otherwise. - /// @related enumeration - template - bool operator!=(const enumeration &field1, - const enumeration &field2) { - return field1.value() != field2.value(); - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case value of the first field is lower than than the value of the second. - /// @related enumeration - template - bool operator<(const enumeration &field1, - const enumeration &field2) { - return field1.value() < field2.value(); - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::enumeration type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::enumeration - template - inline enumeration & - to_field_base(enumeration &field) { - return field; - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::enumeration type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::enumeration - template - inline const enumeration & - to_field_base(const enumeration &field) { - return field; - } - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_ENUM_VALUE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/enumeration/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/enumeration/basic_type.hpp deleted file mode 100644 index f5d5e50b3f..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/enumeration/basic_type.hpp +++ /dev/null @@ -1,137 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASIC_ENUMERATION_HPP -#define MARSHALLING_BASIC_ENUMERATION_HPP - -#include - -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - class basic_enumeration : public TFieldBase { - static_assert(std::is_enum::value, "T must be enum"); - - using underlying_type = typename std::underlying_type::type; - - using base_impl_type = TFieldBase; - - using integral_type = basic_integral; - - using integral_value_type = typename integral_type::value_type; - - public: - using value_type = T; - - using serialized_type = typename integral_type::value_type; - - using scaling_ratio_type = typename integral_type::scaling_ratio_type; - - basic_enumeration() = default; - - explicit basic_enumeration(value_type val) : value_(val) { - } - - basic_enumeration(const basic_enumeration &) = default; - - basic_enumeration(basic_enumeration &&) = default; - - ~basic_enumeration() noexcept = default; - - basic_enumeration &operator=(const basic_enumeration &) = default; - - basic_enumeration &operator=(basic_enumeration &&) = default; - - const value_type &value() const { - return value_; - } - - value_type &value() { - return value_; - } - - static constexpr std::size_t length() { - return integral_type::length(); - } - - static constexpr std::size_t min_length() { - return length(); - } - - static constexpr std::size_t max_length() { - return length(); - } - - static constexpr serialized_type to_serialized(value_type val) { - return integral_type::to_serialized(static_cast(val)); - } - - static constexpr value_type from_serialized(serialized_type val) { - return static_cast(integral_type::from_serialized(val)); - } - - template - status_type read(TIter &iter, std::size_t size) { - integral_type intField; - status_type es = intField.read(iter, size); - if (es == status_type::success) { - value_ = static_cast(intField.value()); - } - return es; - } - - template - void read_no_status(TIter &iter) { - integral_type intField; - intField.read_no_status(iter); - value_ = static_cast(intField.value()); - } - - template - status_type write(TIter &iter, std::size_t size) const { - return integral_type(static_cast(value_)).write(iter, size); - } - - template - void write_no_status(TIter &iter) const { - integral_type(static_cast(value_)).write_no_status(iter); - } - - private: - value_type value_; - }; - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BASIC_ENUMERATION_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/float_value.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/float_value.hpp deleted file mode 100644 index d2a49f1218..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/float_value.hpp +++ /dev/null @@ -1,312 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_FLOAT_VALUE_HPP -#define MARSHALLING_FLOAT_VALUE_HPP - -#include -#include -#include -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief field_type that represent floating point value. - /// @details Represents IEEE 754 floating point value, which means the value is - /// serialized as is (consumes 4 bytes for float, and 8 bytes for double), - /// using big or little endian. - /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. - /// @tparam T Basic underlying floating point type, must be either float or double. - /// @tparam TOptions Zero or more options that modify/refine default behaviour - /// of the field. If no option is provided The field's value is serialized as is. - /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField =nil::marshalling::types::float_value; - /// @endcode - /// In the example above it will - /// consume 4 bytes (because sizeof(float) == 4) and will - /// be serialized using big endian notation.@n - /// Supported options are: - /// @li @ref nil::marshalling::option::default_value_initializer or @ref - /// nil::marshalling::option::default_num_value. - /// @li @ref nil::marshalling::option::contents_validator - /// @li @ref nil::marshalling::option::valid_num_value_range, @ref nil::marshalling::option::valid_num_value, - /// @ref nil::marshalling::option::valid_big_unsigned_num_value_range, @ref - /// nil::marshalling::option::valid_big_unsigned_num_value_range - /// @li @ref nil::marshalling::option::valid_ranges_clear - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::fail_on_invalid - /// @li @ref nil::marshalling::option::ignore_invalid - /// @li @b nil::marshalling::option::Units* - all variants of value units, see - /// @ref sec_field_tutorial_integral_units for details. - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::invalid_by_default - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type - /// @headerfile nil/marshalling/types/float_value.hpp - template - class float_value : private detail::adapt_basic_field_type, TOptions...> { - using base_impl_type = detail::adapt_basic_field_type, TOptions...>; - - public: - /// @brief endian_type used for serialization. - using endian_type = typename base_impl_type::endian_type; - - /// @brief Version type - using version_type = typename base_impl_type::version_type; - - /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = detail::options_parser; - - /// @brief Tag indicating type of the field - using tag = tag::floating_point; - - /// @brief Type of underlying floating point value. - /// @details Same as template parameter T to this class. - using value_type = typename base_impl_type::value_type; - - /// @brief Default constructor - /// @details Initialises internal value to 0. - float_value() = default; - - /// @brief Constructor - explicit float_value(const value_type &val) : base_impl_type(val) { - } - - /// @brief Get access to floating point value storage. - const value_type &value() const { - return base_impl_type::value(); - } - - /// @brief Get access to floating point value storage. - value_type &value() { - return base_impl_type::value(); - } - - /// @brief Get length required to serialise the current field value. - /// @return Number of bytes it will take to serialise the field value. - constexpr std::size_t length() const { - return base_impl_type::length(); - } - - /// @brief Get minimal length that is required to serialise field of this type. - /// @return Minimal number of bytes required serialise the field value. - static constexpr std::size_t min_length() { - return base_impl_type::min_length(); - } - - /// @brief Get maximal length that is required to serialise field of this type. - /// @return Maximal number of bytes required serialise the field value. - static constexpr std::size_t max_length() { - return base_impl_type::max_length(); - } - - /// @brief Check validity of the field value. - bool valid() const { - return base_impl_type::valid(); - } - - /// @brief Refresh the field's value - /// @return @b true if the value has been updated, @b false otherwise - bool refresh() { - return base_impl_type::refresh(); - } - - /// @brief Read field value from input data sequence - /// @param[in, out] iter Iterator to read the data. - /// @param[in] size Number of bytes available for reading. - /// @return Status of read operation. - /// @post Iterator is advanced. - template - status_type read(TIter &iter, std::size_t size) { - return base_impl_type::read(iter, size); - } - - /// @brief Read field value from input data sequence without error check and status report. - /// @details Similar to @ref read(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to read the data. - /// @post Iterator is advanced. - template - void read_no_status(TIter &iter) { - base_impl_type::read_no_status(iter); - } - - /// @brief Write current field value to output data sequence - /// @param[in, out] iter Iterator to write the data. - /// @param[in] size Maximal number of bytes that can be written. - /// @return Status of write operation. - /// @post Iterator is advanced. - template - status_type write(TIter &iter, std::size_t size) const { - return base_impl_type::write(iter, size); - } - - /// @brief Write current field value to output data sequence without error check and status report. - /// @details Similar to @ref write(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to write the data. - /// @post Iterator is advanced. - template - void write_no_status(TIter &iter) const { - base_impl_type::write_no_status(iter); - } - - /// @brief Compile time check if this class is version dependent - static constexpr bool is_version_dependent() { - return parsed_options_type::has_custom_version_update || base_impl_type::is_version_dependent(); - } - - /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. - version_type get_version() const { - return base_impl_type::get_version(); - } - - /// @brief Default implementation of version update. - /// @return @b true in case the field contents have changed, @b false otherwise - bool set_version(version_type version) { - return base_impl_type::set_version(version); - } - - protected: - using base_impl_type::read_data; - using base_impl_type::write_data; - - private: - static_assert(!parsed_options_type::has_var_length_limits, - "nil::marshalling::option::var_length option is not applicable to float_value field"); - static_assert(!parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "float_value field"); - static_assert(!parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::sequence_size_forcing_enabled option is not applicable to " - "float_value field"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::sequence_length_forcing_enabled option is not applicable to " - "float_value field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to float_value field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " - "float_value field"); - static_assert(!parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to " - "float_value field"); - static_assert(!parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "float_value field"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "float_value field"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "float_value field"); - static_assert(!parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "float_value field"); - static_assert(!parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "float_value field"); - static_assert( - !parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to float_value field"); - static_assert( - !parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to float_value field"); - static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to float_value field"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "float_value field"); - }; - - /// @brief Equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are equal, false otherwise. - /// @related float_value - template - bool operator==(const float_value &field1, - const float_value &field2) { - return field1.value() == field2.value(); - } - - /// @brief Non-equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are NOT equal, false otherwise. - /// @related float_value - template - bool operator!=(const float_value &field1, - const float_value &field2) { - return field1.value() != field2.value(); - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case value of the first field is lower than than the value of the second. - /// @related float_value - template - bool operator<(const float_value &field1, - const float_value &field2) { - return field1.value() < field2.value(); - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::float_value type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::float_value - template - inline float_value & - to_field_base(float_value &field) { - return field; - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::float_value type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::float_value - template - inline const float_value & - to_field_base(const float_value &field) { - return field; - } - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_FLOAT_VALUE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/float_value/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/float_value/basic_type.hpp deleted file mode 100644 index aa4fcff00d..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/float_value/basic_type.hpp +++ /dev/null @@ -1,146 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASIC_FLOAT_VALUE_HPP -#define MARSHALLING_BASIC_FLOAT_VALUE_HPP - -#include -#include - -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - class basic_float_value : public TFieldBase { - static_assert(std::is_floating_point::value, "T must be floating point value"); - - using base_impl_type = TFieldBase; - - public: - using value_type = T; - - using serialized_type = - typename processing::size_to_type::type; - - using scaling_ratio_type = std::ratio<1, 1>; - - basic_float_value() = default; - - explicit basic_float_value(value_type val) : value_(val) { - } - - basic_float_value(const basic_float_value &) = default; - - basic_float_value(basic_float_value &&) = default; - - ~basic_float_value() noexcept = default; - - basic_float_value &operator=(const basic_float_value &) = default; - - basic_float_value &operator=(basic_float_value &&) = default; - - const value_type &value() const { - return value_; - } - - value_type &value() { - return value_; - } - - static constexpr std::size_t length() { - return sizeof(serialized_type); - } - - static constexpr std::size_t min_length() { - return length(); - } - - static constexpr std::size_t max_length() { - return length(); - } - - static serialized_type to_serialized(value_type val) { - CastUnion castUnion; - castUnion.value_ = val; - return castUnion.serValue_; - } - - static value_type from_serialized(serialized_type val) { - CastUnion castUnion; - castUnion.serValue_ = val; - return castUnion.value_; - } - - template - status_type read(TIter &iter, std::size_t size) { - if (size < length()) { - return status_type::not_enough_data; - } - - read_no_status(iter); - return status_type::success; - } - - template - void read_no_status(TIter &iter) { - serialized_type serializedValue = - base_impl_type::template read_data(iter); - value_ = from_serialized(serializedValue); - } - - template - status_type write(TIter &iter, std::size_t size) const { - if (size < length()) { - return status_type::buffer_overflow; - } - - write_no_status(iter); - return status_type::success; - } - - template - void write_no_status(TIter &iter) const { - base_impl_type::write_data(to_serialized(value_), iter); - } - - private: - union CastUnion { - value_type value_; - serialized_type serValue_; - }; - - value_type value_ = static_cast(0.0); - }; - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BASIC_FLOAT_VALUE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral.hpp index a38e72808c..fce9d499bf 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral.hpp @@ -36,47 +36,47 @@ #include #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { /// @brief field_type that represent integral value. /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. + /// nil::crypto3::marshalling::field_type. /// @tparam T Basic underlying integral type. /// @tparam TOptions Zero or more options that modify/refine default behaviour /// of the field. If no option is provided The field's value is serialized as is. /// @code - /// using MyFieldBase = nil::marshalling::field_type; - /// using MyField = nil::marshalling::types::integral; + /// using MyFieldBase = nil::crypto3::marshalling::field_type; + /// using MyField = nil::crypto3::marshalling::types::integral; /// @endcode /// In the example above it will /// consume 2 bytes (because sizeof(std::uint16_t) == 2) and will /// be serialized using big endian notation.@n /// Supported options are: - /// @li @ref nil::marshalling::option::fixed_length - /// @li @ref nil::marshalling::option::fixed_bit_length - /// @li @ref nil::marshalling::option::var_length - /// @li @ref nil::marshalling::option::num_value_ser_offset - /// @li @ref nil::marshalling::option::default_value_initializer or - /// nil::marshalling::option::default_num_value. - /// @li @ref nil::marshalling::option::contents_validator - /// @li @ref nil::marshalling::option::valid_num_value_range, @ref nil::marshalling::option::valid_num_value, - /// @ref nil::marshalling::option::valid_big_unsigned_num_value_range, @ref - /// nil::marshalling::option::valid_big_unsigned_num_value_range - /// @li @ref nil::marshalling::option::valid_ranges_clear - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::fail_on_invalid - /// @li @ref nil::marshalling::option::ignore_invalid - /// @li @ref nil::marshalling::option::scaling_ratio - /// @li @b nil::marshalling::option::Units* - all variants of value units, see + /// @li @ref nil::crypto3::marshalling::option::fixed_length + /// @li @ref nil::crypto3::marshalling::option::fixed_bit_length + /// @li @ref nil::crypto3::marshalling::option::var_length + /// @li @ref nil::crypto3::marshalling::option::num_value_ser_offset + /// @li @ref nil::crypto3::marshalling::option::default_value_initializer or + /// nil::crypto3::marshalling::option::default_num_value. + /// @li @ref nil::crypto3::marshalling::option::contents_validator + /// @li @ref nil::crypto3::marshalling::option::valid_num_value_range, @ref nil::crypto3::marshalling::option::valid_num_value, + /// @ref nil::crypto3::marshalling::option::valid_big_unsigned_num_value_range, @ref + /// nil::crypto3::marshalling::option::valid_big_unsigned_num_value_range + /// @li @ref nil::crypto3::marshalling::option::valid_ranges_clear + /// @li @ref nil::crypto3::marshalling::option::contents_refresher + /// @li @ref nil::crypto3::marshalling::option::has_custom_read + /// @li @ref nil::crypto3::marshalling::option::has_custom_refresh + /// @li @ref nil::crypto3::marshalling::option::fail_on_invalid + /// @li @ref nil::crypto3::marshalling::option::ignore_invalid + /// @li @ref nil::crypto3::marshalling::option::scaling_ratio + /// @li @b nil::crypto3::marshalling::option::Units* - all variants of value units, see /// @ref sec_field_tutorial_integral_units for details. - /// @li nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::invalid_by_default - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type + /// @li nil::crypto3::marshalling::option::empty_serialization + /// @li @ref nil::crypto3::marshalling::option::invalid_by_default + /// @li @ref nil::crypto3::marshalling::option::version_storage + /// @extends nil::crypto3::marshalling::field_type /// @headerfile nil/marshalling/types/integral.hpp template class integral : private detail::adapt_basic_field_type, TOptions...> { @@ -116,41 +116,6 @@ namespace nil { /// @brief Copy assignment integral &operator=(const integral &) = default; - /// @brief Scales value according to ratio specified in provided - /// nil::marshalling::option::scaling_ratio option. - /// @details If nil::marshalling::option::scaling_ratio option wasn't used, then - /// nil::marshalling::option::scaling_ratio<1,1> is assumed. - /// @tparam TRet Return type for the scaled value. - /// @return "(value() * Scaling_Num) / Scaling_Denom" when all values are - /// casted to TRet type. - template - constexpr TRet get_scaled() const { - using TagTmp = typename std::conditional::type; - - return scale_as_internal(TagTmp()); - } - - /// @brief Same as get_scaled() - template - constexpr TRet scale_as() const { - return get_scaled(); - } - - /// @brief Opposite operation to get_scaled(). - /// @details Allows to assign scaled value, assigns "(val * Scaling_Denom) / Scaling_Num" - /// to the value of the field. - /// @param[in] val Scaled value. - template - void set_scaled(TScaled val) { - using TagTmp = typename std::conditional::type; - - return scale_scaled_internal(val, TagTmp()); - } - /// @brief Get access to integral value storage. const value_type &value() const { return base_impl_type::value(); @@ -236,7 +201,7 @@ namespace nil { } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -252,141 +217,22 @@ namespace nil { using base_impl_type::write_data; private: - struct has_scaling_ratio_tag { }; - struct no_scaling_ratio_tag { }; - struct scale_as_fp_tag { }; - struct scale_as_int_tag { }; - - template - TRet scale_as_internal(has_scaling_ratio_tag) const { - using TagTmp = typename std:: - conditional::value, scale_as_fp_tag, scale_as_int_tag>::type; - - return scale_as_internal(TagTmp()); - } - - template - TRet scale_as_internal(scale_as_fp_tag) const { - static_assert(std::is_floating_point::value, "TRet is expected to be floating point type"); - return static_cast(base_impl_type::value()) - * (static_cast(parsed_options_type::scaling_ratio_type::num) - / static_cast(parsed_options_type::scaling_ratio_type::den)); - } - - template - TRet scale_as_internal(scale_as_int_tag) const { - static_assert(std::is_integral::value, "TRet is expected to be integral type"); - - using CastType = - typename std::conditional::value, std::intmax_t, std::uintmax_t>::type; - - return static_cast( - (static_cast(base_impl_type::value()) * parsed_options_type::scaling_ratio_type::num) - / parsed_options_type::scaling_ratio_type::den); - } - - template - TRet scale_as_internal(no_scaling_ratio_tag) const { - return static_cast(base_impl_type::value()); - } - - template - void scale_scaled_internal(TScaled val, has_scaling_ratio_tag) { - using TagTmp = typename std::conditional< - std::is_floating_point::type>::value, - scale_as_fp_tag, - scale_as_int_tag>::type; - scale_scaled_internal(val, TagTmp()); - } - - template - void scale_scaled_internal(TScaled val, scale_as_fp_tag) { - using DecayedType = typename std::decay::type; - auto epsilon = DecayedType(0); - if (parsed_options_type::scaling_ratio_type::num < parsed_options_type::scaling_ratio_type::den) { - epsilon = static_cast(parsed_options_type::scaling_ratio_type::num) - / static_cast(parsed_options_type::scaling_ratio_type::den + 1); - } - - if (epsilon < DecayedType(0)) { - epsilon = -epsilon; - } - - if (val < DecayedType(0)) { - epsilon = -epsilon; - } - - base_impl_type::value() = static_cast( - ((val + epsilon) * static_cast(parsed_options_type::scaling_ratio_type::den)) - / static_cast(parsed_options_type::scaling_ratio_type::num)); - } - - template - void scale_scaled_internal(TScaled val, scale_as_int_tag) { - using CastType = - typename std::conditional::type>::value, - std::intmax_t, - std::uintmax_t>::type; - - base_impl_type::value() = static_cast( - (static_cast(val) * parsed_options_type::scaling_ratio_type::den) - / static_cast(parsed_options_type::scaling_ratio_type::num)); - } - - template - void scale_scaled_internal(TScaled val, no_scaling_ratio_tag) { - base_impl_type::value() = static_cast(val); - } - - static_assert(!parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "integral field"); - static_assert( - !parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::sequence_size_forcing_enabled option is not applicable to integral field"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::sequence_length_forcing_enabled option is not applicable to " - "integral field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to integral field"); static_assert( !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " + "nil::crypto3::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " "integral field"); static_assert( !parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to integral field"); - static_assert(!parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "integral field"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "integral field"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "integral field"); - static_assert(!parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "integral field"); - static_assert(!parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "integral field"); + "nil::crypto3::marshalling::option::sequence_size_field_prefix option is not applicable to integral field"); static_assert( !parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to integral field"); + "nil::crypto3::marshalling::option::fixed_size_storage option is not applicable to integral field"); static_assert( !parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to integral field"); + "nil::crypto3::marshalling::option::custom_storage_type option is not applicable to integral field"); static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to integral field"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "integral field"); + "nil::crypto3::marshalling::option::orig_data_view option is not applicable to integral field"); }; /// @brief Equality comparison operator. @@ -422,17 +268,17 @@ namespace nil { return field1.value() < field2.value(); } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::integral type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::integral type /// in order to have access to its internal types. - /// @related nil::marshalling::types::integral + /// @related nil::crypto3::marshalling::types::integral template inline integral &to_field_base(integral &field) { return field; } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::integral type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::integral type /// in order to have access to its internal types. - /// @related nil::marshalling::types::integral + /// @related nil::crypto3::marshalling::types::integral template inline const integral & to_field_base(const integral &field) { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral/basic_type.hpp index b5ef57ffa5..022b0f102f 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral/basic_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/integral/basic_type.hpp @@ -30,7 +30,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -45,7 +45,6 @@ namespace nil { using value_type = T; using serialized_type = value_type; - using scaling_ratio_type = std::ratio<1, 1>; basic_integral() = default; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/no_value.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/no_value.hpp deleted file mode 100644 index c45cb7803b..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/no_value.hpp +++ /dev/null @@ -1,226 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_NO_VALUE_HPP -#define MARSHALLING_NO_VALUE_HPP - -#include -#include -#include - -#include -#include -#include -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief Dummy field with "do-nothing" read/write operations. - /// @details Can be used with other classes that require field types. - /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. - /// @extends nil::marshalling::field_type - /// @headerfile nil/marshalling/types/no_value.hpp - template - class no_value : private detail::adapt_basic_field_type> { - using base_impl_type = detail::adapt_basic_field_type>; - - public: - /// @brief endian_type used for serialization. - using endian_type = typename base_impl_type::endian_type; - - /// @brief Version type - using version_type = typename base_impl_type::version_type; - - /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = detail::options_parser<>; - - /// @brief Tag indicating type of the field - using tag = tag::no_value; - - /// @brief Type of underlying value. - /// @details Defined to be "unsigned", not really used - using value_type = typename base_impl_type::value_type; - - /// @brief Default constructor - /// @details Initialises internal value to 0. - no_value() = default; - - /// @brief Constructor - explicit no_value(value_type val) { - base_impl_type::value() = val; - } - - /// @brief Copy constructor - no_value(const no_value &) = default; - - /// @brief Copy assignment - no_value &operator=(const no_value &) = default; - - /// @brief Get access to the value storage. - /// @details Should not really be used. - /// @return Reference to a static value. All the independent get/set - /// operations on the different @ref no_value fields access the same - /// static value. - static value_type &value() { - return base_impl_type::value(); - } - - /// @brief Get length required to serialise the current field value. - /// @return Always 0. - static constexpr std::size_t length() { - return base_impl_type::length(); - } - - /// @brief Get minimal length that is required to serialise field of this type. - /// @return Always 0. - static constexpr std::size_t min_length() { - return base_impl_type::min_length(); - } - - /// @brief Get maximal length that is required to serialise field of this type. - /// @return Always 0. - static constexpr std::size_t max_length() { - return base_impl_type::max_length(); - } - - /// @brief Check validity of the field value. - bool valid() const { - return base_impl_type::valid(); - } - - /// @brief Refresh the field's value - /// @return @b true if the value has been updated, @b false otherwise - bool refresh() { - return base_impl_type::refresh(); - } - - /// @brief Read field value from input data sequence. - /// @details The function does nothing, always reporting success. - /// @param[in, out] iter Iterator to read the data. - /// @param[in] size Number of bytes available for reading. - /// @return Status of read operation. - template - static status_type read(TIter &iter, std::size_t size) { - return base_impl_type::read(iter, size); - } - - /// @brief Read field value from input data sequence without error check and status report. - /// @details Similar to @ref read(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to read the data. - /// @post Iterator is advanced. - template - void read_no_status(TIter &iter) { - base_impl_type::read_no_status(iter); - } - - /// @brief Write current field value to output data sequence - /// @details The function does nothing, always reporting success. - /// @param[in, out] iter Iterator to write the data. - /// @param[in] size Maximal number of bytes that can be written. - /// @return Status of write operation. - template - static status_type write(TIter &iter, std::size_t size) { - return base_impl_type::write(iter, size); - } - - /// @brief Write current field value to output data sequence without error check and status report. - /// @details Similar to @ref write(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to write the data. - /// @post Iterator is advanced. - template - void write_no_status(TIter &iter) const { - base_impl_type::write_no_status(iter); - } - - /// @brief Compile time check if this class is version dependent - static constexpr bool is_version_dependent() { - return parsed_options_type::has_custom_version_update || base_impl_type::is_version_dependent(); - } - - /// @brief Default implementation of version update. - /// @return @b true in case the field contents have changed, @b false otherwise - bool set_version(version_type version) { - return base_impl_type::set_version(version); - } - - protected: - using base_impl_type::read_data; - using base_impl_type::write_data; - - private: -#ifdef _MSC_VER - // VS compiler has problems having 0 size objects in tuple. - int dummy_ = 0; -#endif - }; - - /// @brief Equality comparison operator. - /// @details To @ref no_value fields are always equal. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Always true. - /// @related no_value - template - bool operator==(const no_value &field1, const no_value &field2) { - static_cast(field1); - static_cast(field2); - return true; - } - - /// @brief Non-equality comparison operator. - /// @details To @ref no_value fields are always equal. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Always false. - /// @related no_value - template - bool operator!=(const no_value &field1, const no_value &field2) { - return !(field1 == field2); - } - - /// @brief Equivalence comparison operator. - /// @details To @ref no_value fields are always equal. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Always false. - /// @related no_value - template - bool operator<(const no_value &field1, const no_value &field2) { - static_cast(field1); - static_cast(field2); - return false; - } - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_NO_VALUE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/no_value/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/no_value/basic_type.hpp deleted file mode 100644 index 7d294e46d4..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/no_value/basic_type.hpp +++ /dev/null @@ -1,112 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASIC_NO_VALUE_HPP -#define MARSHALLING_BASIC_NO_VALUE_HPP - -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - class basic_no_value : public TFieldBase { - using base_impl_type = TFieldBase; - - public: - using value_type = unsigned; - using serialized_type = value_type; - - basic_no_value() = default; - - basic_no_value(const basic_no_value &) = default; - - basic_no_value(basic_no_value &&) = default; - - ~basic_no_value() noexcept = default; - - basic_no_value &operator=(const basic_no_value &) = default; - - basic_no_value &operator=(basic_no_value &&) = default; - - static value_type &value() { - static value_type value = value_type(); - return value; - } - - static constexpr std::size_t length() { - return 0U; - } - - static constexpr std::size_t min_length() { - return length(); - } - - static constexpr std::size_t max_length() { - return length(); - } - - static constexpr serialized_type to_serialized(value_type val) { - return static_cast(val); - } - - static constexpr value_type from_serialized(serialized_type val) { - return static_cast(val); - } - - template - static status_type read(TIter &iter, std::size_t size) { - static_cast(iter); - static_cast(size); - return status_type::success; - } - - template - static void read_no_status(TIter &iter) { - static_cast(iter); - } - - template - static status_type write(TIter &iter, std::size_t size) { - static_cast(iter); - static_cast(size); - return status_type::success; - } - - template - static void write_no_status(TIter &iter) { - static_cast(iter); - } - }; - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BASIC_NO_VALUE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional.hpp deleted file mode 100644 index 48c4542bc1..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional.hpp +++ /dev/null @@ -1,406 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_OPTIONAL_HPP -#define MARSHALLING_OPTIONAL_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief Adaptor class to any other field, that makes the field optional. - /// @details When field is optional, it may either exist or not. The behaviour - /// of length(), read() and write() operations depends on the current field's mode. - /// @tparam TField Proper type of the field that needs to be optional. - /// @tparam TOptions Zero or more options that modify/refine default behaviour - /// of the field.@n - /// Supported options are: - /// @li @ref nil::marshalling::option::default_value_initializer, @ref - /// nil::marshalling::option::default_optional_mode, - /// @ref nil::marshalling::option::optional_missing_by_default, or @ref - /// nil::marshalling::option::optional_exists_by_default. - /// @li @ref nil::marshalling::option::contents_validator. - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type - /// @headerfile nil/marshalling/types/optional.hpp - template - class optional : private detail::adapt_basic_field_type, TOptions...> { - using base_impl_type = detail::adapt_basic_field_type, TOptions...>; - - public: - /// @brief endian_type used for serialization. - using endian_type = typename base_impl_type::endian_type; - - /// @brief Version type - using version_type = typename base_impl_type::version_type; - - /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = detail::options_parser; - - /// @brief Tag indicating type of the field - using tag = tag::optional; - - /// @brief Type of the field. - using field_type = TField; - - /// @brief Value type of this field, equal to @ref field_type - using value_type = field_type; - - /// @brief Mode of the field. - /// @see optional_mode - using Mode = optional_mode; - - /// @brief Default constructor - /// @details The mode it is created in is optional_mode::tentative. - optional() = default; - - /// @brief Construct the field. - /// @param[in] fieldSrc field_type to be copied from during construction. - explicit optional(const field_type &fieldSrc) : base_impl_type(fieldSrc) { - } - - /// @brief Construct the field. - /// @param[in] fieldSrc field_type to be moved from during construction. - explicit optional(field_type &&fieldSrc) : base_impl_type(std::move(fieldSrc)) { - } - - /// @brief Copy constructor - optional(const optional &) = default; - - /// @brief Move constructor - optional(optional &&) = default; - - /// @brief Destructor - ~optional() noexcept = default; - - /// @brief Copy assignment - optional &operator=(const optional &) = default; - - /// @brief Move assignment - optional &operator=(optional &&) = default; - - /// @brief Check whether mode is equivalent to Mode::tentative - /// @details Convenience wrapper for get_mode(), equivalent to - /// @code return get_mode() == Mode::tentative; @endcode - bool is_tentative() const { - return base_impl_type::get_mode() == Mode::tentative; - } - - /// @brief Set mode to Mode::tentative - /// @details Convenience wrapper for set_mode(), equivalent to - /// @code set_mode(Mode::tentative); @endcode - void set_tentative() { - base_impl_type::set_mode(Mode::tentative); - } - - /// @brief Check whether mode is equivalent to Mode::missing - /// @details Convenience wrapper for get_mode(), equivalent to - /// @code return get_mode() == Mode::missing; @endcode - bool is_missing() const { - return base_impl_type::get_mode() == Mode::missing; - } - - /// @brief Set mode to Mode::missing - /// @details Convenience wrapper for set_mode(), equivalent to - /// @code set_mode(Mode::missing); @endcode - void set_missing() { - base_impl_type::set_mode(Mode::missing); - } - - /// @brief Check whether mode is equivalent to Mode::exists - /// @details Convenience wrapper for get_mode(), equivalent to - /// @code return get_mode() == Mode::exists; @endcode - bool does_exist() const { - return base_impl_type::get_mode() == Mode::exists; - } - - /// @brief Set mode to Mode::exists - /// @details Convenience wrapper for set_mode(), equivalent to - /// @code set_mode(Mode::exists); @endcode - void set_exists() { - base_impl_type::set_mode(Mode::exists); - } - - /// @brief Get an access to the wrapped field object - field_type &field() { - return base_impl_type::field(); - } - - /// @brief Get an access to the wrapped field object - const field_type &field() const { - return base_impl_type::field(); - } - - /// @brief Get an access to the wrapped field object - value_type &value() { - return base_impl_type::value(); - } - - /// @brief Get an access to the wrapped field object - const value_type &value() const { - return base_impl_type::value(); - } - - /// @brief Get current optional mode - Mode get_mode() const { - return base_impl_type::get_mode(); - } - - /// @brief Get optional mode - void set_mode(Mode val) { - base_impl_type::set_mode(val); - } - - /// @brief Get length required to serialise the current field value. - /// @return If current mode is optional_mode::exists, then the function - /// returns whatever length() member function of the wrapped field - /// returns. Otherwise (for both optional_mode::missing and - /// optional_mode::tentative) 0 is returned. - std::size_t length() const { - return base_impl_type::length(); - } - - /// @brief Get minimal length that is required to serialise field of this type. - /// @return Same as field_type::min_length() - static constexpr std::size_t min_length() { - return base_impl_type::min_length(); - } - - /// @brief Get maximal length that is required to serialise field of this type. - /// @return Same as field_type::max_length() - static constexpr std::size_t max_length() { - return base_impl_type::max_length(); - } - - /// @brief Check validity of the field value. - /// @return If field is marked to be missing (mode is optional_mode::missing), - /// "true" is returned, otherwise valid() member function of the wrapped - /// field is called. - bool valid() const { - return base_impl_type::valid(); - } - - /// @brief Refresh the field's value - /// @details Will invoke the refresh() member function of the contained - /// field, only if it is marked as "exists", otherwise @b false will be - /// returned. - /// @return @b true if the value has been updated, @b false otherwise - bool refresh() { - return base_impl_type::refresh(); - } - - /// @brief Read field value from input data sequence - /// @details If field is marked as missing (mode is optional_mode::missing), - /// function returns nil::marshalling::ErrorStatus::Success without advancing iterator.@n - /// If field is marked as existing (mode is optional_mode::exists) the - /// read() member function of the wrapped field object is invoked.@n - /// If field is marked to be tentative (mode is optional_mode::tentative), - /// the call redirected to wrapped field's read() member function if - /// value of the "len" parameter is greater than 0, i.e. there are - /// still bytes available for reading, and field itself is marked as - /// existing.@n Otherwise, field is marked as missing and - /// nil::marshalling::ErrorStatus::Success is returned. - /// @param[in, out] iter Iterator to read the data. - /// @param[in] len Number of bytes available for reading. - /// @return Status of read operation. - /// @post Iterator is advanced. - template - status_type read(TIter &iter, std::size_t len) { - return base_impl_type::read(iter, len); - } - - /// @brief Read field value from input data sequence without error check and status report. - /// @details Similar to @ref read(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to read the data. - /// @post Iterator is advanced. - template - void read_no_status(TIter &iter) { - base_impl_type::read_no_status(iter); - } - - /// @brief Write current field value to output data sequence - /// @details If field is marked as missing (mode is optional_mode::missing), - /// function returns nil::marshalling::ErrorStatus::Success without advancing iterator.@n - /// If field is marked as existing (mode is optional_mode::exists) the - /// write() member function of the wrapped field object is invoked.@n - /// If field is marked to be tentative (mode is optional_mode::tentative), - /// the call redirected to wrapped field's write() member function if - /// value of the "len" parameter is greater than 0, i.e. there is - /// space available for writing.@n Otherwise, nil::marshalling::ErrorStatus::Success - /// is returned. - /// @param[in, out] iter Iterator to write the data. - /// @param[in] len Maximal number of bytes that can be written. - /// @return Status of write operation. - /// @post Iterator is advanced. - template - status_type write(TIter &iter, std::size_t len) const { - return base_impl_type::write(iter, len); - } - - /// @brief Write current field value to output data sequence without error check and status report. - /// @details Similar to @ref write(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to write the data. - /// @post Iterator is advanced. - template - void write_no_status(TIter &iter) const { - base_impl_type::write_no_status(iter); - } - - /// @brief Compile time check if this class is version dependent - static constexpr bool is_version_dependent() { - return parsed_options_type::has_custom_version_update || base_impl_type::is_version_dependent(); - } - - /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. - version_type get_version() const { - return base_impl_type::get_version(); - } - - /// @brief Default implementation of version update. - /// @return @b true in case the field contents have changed, @b false otherwise - bool set_version(version_type version) { - return base_impl_type::set_version(version); - } - - protected: - using base_impl_type::read_data; - using base_impl_type::write_data; - - private: - static_assert( - !parsed_options_type::has_invalid_by_default, - "nil::marshalling::option::invalid_by_default option is not applicable to optional field"); - }; - - /// @brief Equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Result of the equality comparison of the contained fields. - /// @related optional - template - bool operator==(const optional &field1, const optional &field2) { - if (field1.get_mode() != field2.get_mode()) { - return false; - } - - if (field1.is_missing()) { - return true; - } - - return field1.field() == field2.field(); - } - - /// @brief Non-equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Result of the non-equality comparison of the contained fields. - /// @related optional - template - bool operator!=(const optional &field1, const optional &field2) { - return !(field1 == field2); - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Result of the equivalence comparison of the contained fields. - /// @related optional - template - bool operator<(const optional &field1, const optional &field2) { - if (field1.is_missing()) { - return !field2.is_missing(); - } - - if (field2.is_missing()) { - return false; - } - - return false; - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Result of the equivalence comparison of the contained fields. - /// @related optional - template - bool operator>(const optional &field1, const optional &field2) { - return (field2 < field1); - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Result of the equivalence comparison of the contained fields. - /// @related optional - template - bool operator<=(const optional &field1, const optional &field2) { - return (field1 < field2) || (field1 == field2); - } - - /// @brief Equivalence comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return Result of the equivalence comparison of the contained fields. - /// @related optional - template - bool operator>=(const optional &field1, const optional &field2) { - return field2 <= field1; - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::optional type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::optional - template - inline optional &to_field_base(optional &field) { - return field; - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::optional type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::optional - template - inline const optional &to_field_base(const optional &field) { - return field; - } - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_OPTIONAL_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional/basic_type.hpp deleted file mode 100644 index 8063481b44..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional/basic_type.hpp +++ /dev/null @@ -1,197 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASIC_OPTIONAL_HPP -#define MARSHALLING_BASIC_OPTIONAL_HPP - -#include -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - class basic_optional : public nil::marshalling::field_type< - nil::marshalling::option::endian, - nil::marshalling::option::version_type> { - using base_impl_type = nil::marshalling::field_type< - nil::marshalling::option::endian, - nil::marshalling::option::version_type>; - - public: - using field_type = TField; - using value_type = TField; - using mode_type = types::optional_mode; - using version_type = typename base_impl_type::version_type; - - basic_optional() = default; - - explicit basic_optional(const field_type &fieldSrc, mode_type mode = mode_type::tentative) : - field_(fieldSrc), mode_(mode) { - } - - explicit basic_optional(field_type &&fieldSrc, mode_type mode = mode_type::tentative) : - field_(std::move(fieldSrc)), mode_(mode) { - } - - basic_optional(const basic_optional &) = default; - - basic_optional(basic_optional &&) = default; - - ~basic_optional() noexcept = default; - - basic_optional &operator=(const basic_optional &) = default; - - basic_optional &operator=(basic_optional &&) = default; - - field_type &field() { - return field_; - } - - const field_type &field() const { - return field_; - } - - value_type &value() { - return field(); - } - - const value_type &value() const { - return field(); - } - - mode_type get_mode() const { - return mode_; - } - - void set_mode(mode_type val) { - MARSHALLING_ASSERT(val < mode_type::modes_amount); - mode_ = val; - } - - std::size_t length() const { - if (mode_ != mode_type::exists) { - return 0U; - } - - return field_.length(); - } - - static constexpr std::size_t min_length() { - return 0U; - } - - static constexpr std::size_t max_length() { - return field_type::max_length(); - } - - bool valid() const { - if (mode_ == mode_type::missing) { - return true; - } - - return field_.valid(); - } - - bool refresh() { - if (mode_ != mode_type::exists) { - return false; - } - return field_.refresh(); - } - - template - status_type read(TIter &iter, std::size_t len) { - if (mode_ == mode_type::missing) { - return status_type::success; - } - - if ((mode_ == mode_type::tentative) && (0U == len)) { - mode_ = mode_type::missing; - return status_type::success; - } - - status_type es = field_.read(iter, len); - if (es == status_type::success) { - mode_ = mode_type::exists; - } - return es; - } - - template - void read_no_status(TIter &iter) { - if (mode_ != mode_type::exists) { - mode_ = mode_type::missing; - return; - } - - mode_ = mode_type::exists; - field_.read_no_status(iter); - } - - template - status_type write(TIter &iter, std::size_t len) const { - if (mode_ == mode_type::missing) { - return status_type::success; - } - - if ((mode_ == mode_type::tentative) && (0U == len)) { - return status_type::success; - } - - return field_.write(iter, len); - } - - template - void write_no_status(TIter &iter) const { - if (mode_ != mode_type::exists) { - return; - } - - field_.write_no_status(iter); - } - - static constexpr bool is_version_dependent() { - return field_type::is_version_dependent(); - } - - bool set_version(version_type version) { - return field_.set_version(static_cast(version)); - } - - private: - field_type field_; - mode_type mode_ = mode_type::tentative; - }; - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BASIC_OPTIONAL_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional_mode.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional_mode.hpp deleted file mode 100644 index ba0e2941bd..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/optional_mode.hpp +++ /dev/null @@ -1,50 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -/// @file nil/marshalling/types/optional_mode.hpp -/// Contains definition of the mode used for nil::marshalling::types::optional fields. - -#ifndef MARSHALLING_OPTIONAL_MODE_HPP -#define MARSHALLING_OPTIONAL_MODE_HPP - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief Mode to be used by nil::marshalling::types::optional - /// @headerfile nil/marshalling/types/optional_mode.hpp - enum class optional_mode { - tentative, ///< The field existence is tentative, i.e. If there is enough bytes - /// to read the field's value, than field exists, if not - /// then it doesn't exist. - exists, ///< field_type must exist - missing, ///< field_type doesn't exist - modes_amount ///< Number of possible modes, must be last - }; - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_OPTIONAL_MODE_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string.hpp index a83edbd0ac..dda05dff7e 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string.hpp @@ -35,41 +35,41 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { /// @brief field_type that represents a string. /// @details By default uses /// std::string, - /// for internal storage, unless nil::marshalling::option::fixed_size_storage option is used, - /// which forces usage of nil::marshalling::container::static_string instead. + /// for internal storage, unless nil::crypto3::marshalling::option::fixed_size_storage option is used, + /// which forces usage of nil::crypto3::marshalling::container::static_string instead. /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. + /// nil::crypto3::marshalling::field_type. /// @tparam TOptions Zero or more options that modify/refine default behaviour /// of the field.@n /// Supported options are: - /// @li @ref nil::marshalling::option::fixed_size_storage - /// @li @ref nil::marshalling::option::custom_storage_type - /// @li @ref nil::marshalling::option::sequence_size_field_prefix - /// @li @ref nil::marshalling::option::sequence_ser_length_field_prefix - /// @li @ref nil::marshalling::option::sequence_size_forcing_enabled - /// @li @ref nil::marshalling::option::sequence_length_forcing_enabled - /// @li @ref nil::marshalling::option::sequence_fixed_size - /// @li @ref nil::marshalling::option::sequence_termination_field_suffix - /// @li @ref nil::marshalling::option::sequence_trailing_field_suffix - /// @li @ref nil::marshalling::option::default_value_initializer - /// @li @ref nil::marshalling::option::contents_validator - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::fail_on_invalid - /// @li @ref nil::marshalling::option::ignore_invalid - /// @li @ref nil::marshalling::option::orig_data_view - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::invalid_by_default - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type + /// @li @ref nil::crypto3::marshalling::option::fixed_size_storage + /// @li @ref nil::crypto3::marshalling::option::custom_storage_type + /// @li @ref nil::crypto3::marshalling::option::sequence_size_field_prefix + /// @li @ref nil::crypto3::marshalling::option::sequence_ser_length_field_prefix + /// @li @ref nil::crypto3::marshalling::option::sequence_size_forcing_enabled + /// @li @ref nil::crypto3::marshalling::option::sequence_length_forcing_enabled + /// @li @ref nil::crypto3::marshalling::option::sequence_fixed_size + /// @li @ref nil::crypto3::marshalling::option::sequence_termination_field_suffix + /// @li @ref nil::crypto3::marshalling::option::sequence_trailing_field_suffix + /// @li @ref nil::crypto3::marshalling::option::default_value_initializer + /// @li @ref nil::crypto3::marshalling::option::contents_validator + /// @li @ref nil::crypto3::marshalling::option::contents_refresher + /// @li @ref nil::crypto3::marshalling::option::has_custom_read + /// @li @ref nil::crypto3::marshalling::option::has_custom_refresh + /// @li @ref nil::crypto3::marshalling::option::fail_on_invalid + /// @li @ref nil::crypto3::marshalling::option::ignore_invalid + /// @li @ref nil::crypto3::marshalling::option::orig_data_view + /// @li @ref nil::crypto3::marshalling::option::empty_serialization + /// @li @ref nil::crypto3::marshalling::option::invalid_by_default + /// @li @ref nil::crypto3::marshalling::option::version_storage + /// @extends nil::crypto3::marshalling::field_type /// @headerfile nil/marshalling/types/string.hpp template class string : private detail::string_base_type { @@ -89,10 +89,10 @@ namespace nil { using tag = tag::string; /// @brief Type of underlying value. - /// @details If nil::marshalling::option::fixed_size_storage option is NOT used, the + /// @details If nil::crypto3::marshalling::option::fixed_size_storage option is NOT used, the /// value_type is std::string, otherwise it becomes - /// nil::marshalling::container::static_string, where TSize is a size - /// provided to nil::marshalling::option::fixed_size_storage option. + /// nil::crypto3::marshalling::container::static_string, where TSize is a size + /// provided to nil::crypto3::marshalling::option::fixed_size_storage option. using value_type = typename base_impl_type::value_type; /// @brief Default constructor @@ -129,10 +129,10 @@ namespace nil { /// @brief Read field value from input data sequence /// @details By default, the read operation will try to consume all the /// data available, unless size limiting option (such as - /// nil::marshalling::option::sequence_size_field_prefix, - /// nil::marshalling::option::sequence_fixed_size, - /// nil::marshalling::option::sequence_size_forcing_enabled, - /// nil::marshalling::option::sequence_length_forcing_enabled) is used. + /// nil::crypto3::marshalling::option::sequence_size_field_prefix, + /// nil::crypto3::marshalling::option::sequence_fixed_size, + /// nil::crypto3::marshalling::option::sequence_size_forcing_enabled, + /// nil::crypto3::marshalling::option::sequence_length_forcing_enabled) is used. /// @param[in, out] iter Iterator to read the data. /// @param[in] len Number of bytes available for reading. /// @return Status of read operation. @@ -191,7 +191,7 @@ namespace nil { /// @brief Write current field value to output data sequence /// @details By default, the write operation will write all the - /// characters the field contains. If nil::marshalling::option::sequence_fixed_size option + /// characters the field contains. If nil::crypto3::marshalling::option::sequence_fixed_size option /// is used, the number of characters, that is going to be written, is /// exactly as the option specifies. If underlying string storage /// doesn't contain enough data, the '\0' characters will @@ -228,7 +228,7 @@ namespace nil { /// @brief Force number of characters that must be read in the next read() /// invocation. - /// @details Exists only if nil::marshalling::option::sequence_size_forcing_enabled option has been + /// @details Exists only if nil::crypto3::marshalling::option::sequence_size_forcing_enabled option has been /// used. /// @param[in] count Number of elements to read during following read operation. void force_read_elem_count(std::size_t count) { @@ -237,14 +237,14 @@ namespace nil { /// @brief Clear forcing of the number of characters that must be read in /// the next read() invocation. - /// @details Exists only if nil::marshalling::option::sequence_size_forcing_enabled option has been + /// @details Exists only if nil::crypto3::marshalling::option::sequence_size_forcing_enabled option has been /// used. void clear_read_elem_count() { base_impl_type::clear_read_elem_count(); } /// @brief Force available length for the next read() invocation. - /// @details Exists only if @ref nil::marshalling::option::sequence_length_forcing_enabled option has been + /// @details Exists only if @ref nil::crypto3::marshalling::option::sequence_length_forcing_enabled option has been /// used. /// @param[in] count Number of elements to read during following read operation. void force_read_length(std::size_t count) { @@ -253,7 +253,7 @@ namespace nil { /// @brief Clear forcing of the available length in the next read() /// invocation. - /// @details Exists only if @ref nil::marshalling::option::sequence_length_forcing_enabled option has been + /// @details Exists only if @ref nil::crypto3::marshalling::option::sequence_length_forcing_enabled option has been /// used. void clear_read_length_forcing() { return base_impl_type::clear_read_length_forcing(); @@ -265,7 +265,7 @@ namespace nil { } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -322,32 +322,6 @@ namespace nil { void eval_resize(std::size_t count, has_remove_suffix_tag) { base_impl_type::value().remove_suffix(base_impl_type::value().size() - count); } - - static_assert( - !parsed_options_type::has_ser_offset, - "nil::marshalling::option::num_value_ser_offset option is not applicable to string field"); - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to string field"); - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to string field"); - static_assert(!parsed_options_type::has_var_length_limits, - "nil::marshalling::option::var_length option is not applicable to string field"); - static_assert(!parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio_type option is not applicable to string field"); - static_assert(!parsed_options_type::has_units, - "nil::marshalling::option::Units option is not applicable to string field"); - static_assert(!parsed_options_type::has_multi_range_validation, - "nil::marshalling::option::valid_num_value_range (or similar) option is not applicable " - "to string field"); - static_assert(!parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not " - "applicable to string field"); - static_assert(!parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not " - "applicable to string field"); - static_assert(!parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable " - "to string field"); }; /// @brief Equality comparison operator. @@ -384,17 +358,17 @@ namespace nil { return field1.value() < field2.value(); } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::string type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::string type /// in order to have access to its internal types. - /// @related nil::marshalling::types::string + /// @related nil::crypto3::marshalling::types::string template inline string &to_field_base(string &field) { return field; } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::string type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::string type /// in order to have access to its internal types. - /// @related nil::marshalling::types::string + /// @related nil::crypto3::marshalling::types::string template inline const string &to_field_base(const string &field) { return field; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/basic_type.hpp index 87815e7bfc..ba13ad7734 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/basic_type.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/basic_type.hpp @@ -39,7 +39,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/behaviour.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/behaviour.hpp index 4601d71f57..bbe02dc1fc 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/behaviour.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/behaviour.hpp @@ -38,7 +38,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -48,7 +48,7 @@ namespace nil { template<> struct string_orig_data_view_storage_type { - using type = nil::marshalling::container::string_view; + using type = nil::crypto3::marshalling::container::string_view; }; template<> @@ -62,7 +62,7 @@ namespace nil { template<> struct string_fixed_size_use_fixed_size_storage_type { template - using type = nil::marshalling::container::static_string; + using type = nil::crypto3::marshalling::container::static_string; }; template<> @@ -77,7 +77,7 @@ namespace nil { template<> struct string_fixed_size_storage_type { template - using type = nil::marshalling::container::static_string; + using type = nil::crypto3::marshalling::container::static_string; }; template<> diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/type_traits.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/type_traits.hpp index 4491253b95..526b433547 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/type_traits.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/string/type_traits.hpp @@ -39,7 +39,7 @@ #include -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace detail { @@ -50,7 +50,7 @@ namespace nil { }; template - struct string_max_length_retrieve_helper> { + struct string_max_length_retrieve_helper> { static const std::size_t value = TSize - 1; }; diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/tag.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/tag.hpp index 07bb457102..56b3e9d944 100644 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/tag.hpp +++ b/crypto3/libs/marshalling/core/include/nil/marshalling/types/tag.hpp @@ -26,7 +26,7 @@ #ifndef MARSHALLING_TAG_HPP #define MARSHALLING_TAG_HPP -namespace nil { +namespace nil::crypto3 { namespace marshalling { namespace types { namespace tag { @@ -35,26 +35,12 @@ namespace nil { struct array_list { }; - struct bitfield { }; - - struct bitmask { }; - struct bundle { }; - struct enumeration { }; - - struct floating_point { }; - struct integral { }; - struct no_value { }; - - struct optional { }; - struct string { }; - struct variant { }; - } // namespace tag } // namespace types } // namespace marshalling diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/variant.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/variant.hpp deleted file mode 100644 index 90a4eb25f5..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/variant.hpp +++ /dev/null @@ -1,702 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_VARIANT_HPP -#define MARSHALLING_VARIANT_HPP - -#include - -#include -#include -#include -#include -#include -#include - -#include - -namespace nil { - namespace marshalling { - namespace types { - - /// @brief Defines a "variant" field, that can contain any of the provided ones. - /// @details The @b variant object contains uninitialised buffer that can - /// fit any of the provided field types (as second template parameter). - /// At any given point of time this space can be initialised and used to - /// contain at most one of the specified field types. It resembles - /// a classic @b union, but disallows set value of one field type and read - /// it as other. The @b variant field abstraction provides - /// expected single field API functions, such as length(), read(), write(), - /// valid(). - /// - /// Refer to @ref sec_field_tutorial_variant for tutorial and usage examples. - /// @tparam TFieldBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. - /// @tparam TMembers All supported field types bundled together in - /// std::tuple. - /// This parameter is used to determine the size of the contained buffer - /// to be able to fit any of the specified types. - /// @tparam TOptions Zero or more options that modify/refine default behaviour - /// of the field.@n - /// Supported options are: - /// @li @ref nil::marshalling::option::default_value_initializer - All wrapped fields may - /// specify their independent default value initializers. It is - /// also possible to provide initializer for the variant field which - /// will set appropriate values to the fields based on some - /// internal logic. - /// @li @ref nil::marshalling::option::contents_validator - All wrapped fields may specify - /// their independent validators. The bundle field considered to - /// be valid if all the wrapped fields are valid. This option though, - /// provides an ability to add extra validation logic that can - /// observe value of more than one wrapped fields. For example, - /// protocol specifies that if one specific field has value X, than - /// other field is NOT allowed to have value Y. - /// @li @ref nil::marshalling::option::contents_refresher - The default @b refresh() - /// behavior is to call @b refresh() member function of the contained - /// field (if such exists). This option allows specifying the custom - /// refreshing behaviour. - /// @li @ref nil::marshalling::option::custom_value_reader - It may be required to implement - /// custom reading functionality instead of default behaviour of - /// invoking read() member function of every member field. It is possible - /// to provide cusom reader functionality using nil::marshalling::option::custom_value_reader - /// option. - /// @li @ref nil::marshalling::option::default_variant_index - By default the variant field - /// doesn't have any valid contents. This option may be used to specify - /// the index of the default member field. - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type - /// @headerfile nil/marshalling/types/variant.hpp - /// @see MARSHALLING_VARIANT_MEMBERS_ACCESS() - /// @see MARSHALLING_VARIANT_MEMBERS_ACCESS_NOTEMPLATE() - template - class variant : private detail::adapt_basic_field_type, TOptions...> { - using base_impl_type - = detail::adapt_basic_field_type, TOptions...>; - - static_assert(nil::detail::is_tuple::value, - "TMembers is expected to be a tuple of std::tuple<...>"); - - static_assert(1U < std::tuple_size::value, "Number of members is expected to be at least 2."); - - public: - /// @brief endian_type used for serialization. - using endian_type = typename base_impl_type::endian_type; - - /// @brief Version type - using version_type = typename base_impl_type::version_type; - - /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = detail::options_parser; - - /// @brief Tag indicating type of the field - using tag = tag::variant; - - /// @brief Value type. - /// @details Type of the internal buffer used to store contained field, - /// should not be used in normal operation. - using value_type = typename base_impl_type::value_type; - - /// @brief All the supported types. - /// @details Same as @b TMemebers template argument, i.e. it is @b std::tuple - /// of all the wrapped fields. - using members_type = typename base_impl_type::members_type; - - /// @brief Default constructor - /// @details Invokes default constructor of every wrapped field - variant() = default; - - /// @brief Constructor - explicit variant(const value_type &val) : base_impl_type(val) { - } - - /// @brief Constructor - explicit variant(value_type &&val) : base_impl_type(std::move(val)) { - } - - /// @brief Get access to the internal storage buffer. - /// @details Should not be used in normal operation. - value_type &value() { - return base_impl_type::value(); - } - - /// @brief Get access to the internal storage buffer. - /// @details Should not be used in normal operation. - const value_type &value() const { - return base_impl_type::value(); - } - - /// @brief Get length required to serialise contained fields. - /// @details If the field doesn't contain a valid instance of other - /// field, the reported length is 0, otherwise the length of the - /// contained field is reported. - /// @return Number of bytes it will take to serialise the field value. - std::size_t length() const { - return base_impl_type::length(); - } - - /// @brief Get minimal length that is required to serialise all possible contained fields. - /// @return Always returns 0. - static constexpr std::size_t min_length() { - return base_impl_type::min_length(); - } - - /// @brief Get maximal length that is required to serialise all possible contained fields. - /// @return Maximal number of bytes required serialise the field value. - static constexpr std::size_t max_length() { - return base_impl_type::max_length(); - } - - /// @brief Read field value from input data sequence - /// @details Invokes read() member function over every possible field - /// in order of definition until nil::marshalling::ErrorStatus::Success is returned. - /// @param[in, out] iter Iterator to read the data. - /// @param[in] size Number of bytes available for reading. - /// @return Status of read operation. - /// @post Iterator is advanced. - template - status_type read(TIter &iter, std::size_t size) { - return base_impl_type::read(iter, size); - } - - /// @brief Read operation without error check and status report is not supported. - template - void read_no_status(TIter &iter) = delete; - - /// @brief Write current field value to output data sequence - /// @details Invokes write() member function of the contained field if such - /// exists. If the variant field doesn't contain any valid field, the - /// function doesn't advance the iterator, but returns nil::marshalling::ErrorStatus::Success. - /// @param[in, out] iter Iterator to write the data. - /// @param[in] size Maximal number of bytes that can be written. - /// @return Status of write operation. - /// @post Iterator is advanced. - template - status_type write(TIter &iter, std::size_t size) const { - return base_impl_type::write(iter, size); - } - - /// @brief Write current field value to output data sequence without error check and status report. - /// @details Similar to @ref write(), but doesn't perform any correctness - /// checks and doesn't report any failures. - /// @param[in, out] iter Iterator to write the data. - /// @post Iterator is advanced. - template - void write_no_status(TIter &iter) const { - base_impl_type::write_no_status(iter); - } - - /// @brief Check validity of all the contained field. - /// @details Returns @b false if doesn't contain any field. - bool valid() const { - return base_impl_type::valid(); - } - - /// @brief Refresh the field's value - /// @details Invokes refresh() member function of the current field - /// if such exists, otherwise returns false. - /// @return @b true if the value has been updated, @b false otherwise - bool refresh() { - return base_impl_type::refresh(); - } - - /// @brief Get index of the current field (within the @ref Members tuple). - /// @details If the variant field doesn't contain any valid field, the - /// returned index is equivalent to size of the @ref Members tuple. - std::size_t current_field() const { - return base_impl_type::current_field(); - } - - /// @brief Select type of the variant field. - /// @details If the same index has been selected before, the function does - /// nothing, otherwise the currently selected member field is destructed, - /// and the new one is default constructed.@n - /// If provided index is equal or exceeds the size of the @ref Members - /// tuple, no new field is constructed. - /// @param[in] idx Index of the type within @ref Members tuple. - void select_field(std::size_t idx) { - base_impl_type::select_field(idx); - } - - /// @brief Execute provided function object with current field as - /// parameter. - /// @details The provided function object must define all the public @b operator() - /// member functions to handle all possible types. - /// @code - /// struct MyFunc - /// { - /// template - /// void operator()(Type1& field) {...} - /// - /// template - /// void operator()(Type2& field) {...} - /// ... - /// } - /// @endcode - /// @b NOTE, that every @b operator() is expecting to receive - /// an index of the type within the holding tuple as a template - /// parameter. If the index information is not needed it may be - /// either ignored or static_assert-ed upon. - /// - /// The @b operator() may also receive a member field type as a - /// template parameter. - /// @code - /// struct MyFunc - /// { - /// template - /// void operator()(TField& field) - /// { - /// ... // do somethign with the field - /// } - /// } - /// @endcode - /// The TField will be the actual type of the contained field. - /// If the variant field doesn't contain any valid field, the functor - /// will @b NOT be called. - template - void current_field_exec(TFunc &&func) { - base_impl_type::current_field_exec(std::forward(func)); - } - - /// @brief Execute provided function object with current field as - /// parameter (const variant). - /// @details Similar to other current_field_exec() variant, but with @b const. - /// Note, the constness of the parameter. - /// @code - /// struct MyFunc - /// { - /// template - /// void operator()(const TField& field) - /// { - /// ... // do somethign with the field - /// } - /// } - /// @endcode - /// The TField will be the actual type of the contained field. - /// If the variant field doesn't contain any valid field, the functor - /// will @b NOT be called. - template - void current_field_exec(TFunc &&func) const { - base_impl_type::current_field_exec(std::forward(func)); - } - - /// @brief Construct and initialise specified contained field in the - /// internal buffer. - /// @details If the field already contains a valid field of any other - /// field type, the latter will be destructed. - /// @tparam TIdx Index of the field type witin the @ref Members tuple. - /// @tparam TArgs Types of the agurments for the field's constructor - /// @param[in] args Arguments for the constructed field. - /// @return Reference to the constructed field. - template - typename std::tuple_element::type &init_field(TArgs &&...args) { - return base_impl_type::template init_field(std::forward(args)...); - } - - /// @brief Access already constructed field at specifed index (known at compile time). - /// @details Use this function to get a reference to the contained field type - /// @tparam TIdx Index of the field type witin the @ref Members tuple. - /// @return Reference to the contained field. - /// @pre @code current_field() == TIdx @endcode - template - typename std::tuple_element::type &access_field() { - return base_impl_type::template access_field(); - } - - /// @brief Access already constructed field at specifed index (known at compile time). - /// @details Use this function to get a const reference to the contained field type. - /// @tparam TIdx Index of the field type witin the @ref Members tuple. - /// @return Const reference to the contained field. - /// @pre @code current_field() == TIdx @endcode - template - const typename std::tuple_element::type &access_field() const { - return base_impl_type::template access_field(); - } - - /// @brief Check whether the field contains a valid instance of other field. - /// @details Returns @b true if and only if current_field() returns a valid - /// index inside the @ref Members tuple. - bool current_field_valid() const { - return base_impl_type::current_field_valid(); - } - - /// @brief Invalidate current state - /// @details Destructs currently contained field if such exists. - void reset() { - base_impl_type::reset(); - } - - /// @brief Compile time check if this class is version dependent - static constexpr bool is_version_dependent() { - return parsed_options_type::has_custom_version_update || base_impl_type::is_version_dependent(); - } - - /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. - version_type get_version() const { - return base_impl_type::get_version(); - } - - /// @brief Default implementation of version update. - /// @return @b true in case the field contents have changed, @b false otherwise - bool set_version(version_type version) { - return base_impl_type::set_version(version); - } - - protected: - using base_impl_type::read_data; - using base_impl_type::write_data; - - private: - static_assert( - !parsed_options_type::has_ser_offset, - "nil::marshalling::option::num_value_ser_offset option is not applicable to variant field"); - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to variant field"); - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to variant field"); - static_assert(!parsed_options_type::has_var_length_limits, - "nil::marshalling::option::var_length option is not applicable to variant field"); - static_assert(!parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "variant field"); - static_assert( - !parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::sequence_size_forcing_enabled option is not applicable to variant field"); - static_assert( - !parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::sequence_length_forcing_enabled option is not applicable to variant field"); - static_assert( - !parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to variant field"); - static_assert(!parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable " - "to variant field"); - static_assert( - !parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to variant field"); - static_assert(!parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "variant field"); - static_assert(!parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not " - "applicable to variant field"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_fixed_ser_length_field_prefix option is not applicable " - "to variant field"); - static_assert(!parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "variant field"); - static_assert(!parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "variant field"); - static_assert(!parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to variant field"); - static_assert( - !parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to variant field"); - static_assert(!parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio_type option is not applicable to variant field"); - static_assert(!parsed_options_type::has_units, - "nil::marshalling::option::Units option is not applicable to variant field"); - static_assert(!parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to variant field"); - static_assert(!parsed_options_type::has_multi_range_validation, - "nil::marshalling::option::valid_num_value_range (or similar) option is not applicable " - "to variant field"); - static_assert(!parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable " - "to variant field"); - static_assert(!parsed_options_type::has_invalid_by_default, - "nil::marshalling::option::invalid_by_default option is not applicable to variant field"); - }; - - namespace detail { - - template - class variant_equality_comp_helper { - public: - variant_equality_comp_helper(const TVar &other, bool &result) : other_(other), result_(result) { - } - - template - void operator()(const TField &field) { - result_ = (field == other_.template access_field()); - } - - private: - const TVar &other_; - bool &result_; - }; - - template - variant_equality_comp_helper make_variant_equality_comp_helper(TVar &other, bool &result) { - return variant_equality_comp_helper(other, result); - } - - } // namespace detail - - /// @brief Equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are equal, false otherwise. - /// @related variant - template - bool operator==(const variant &field1, - const variant &field2) { - if (&field1 == &field2) { - return true; - } - - if (field1.current_field_valid() != field2.current_field_valid()) { - return false; - } - - if (!field1.current_field_valid()) { - return true; - } - - if (field1.current_field() != field2.current_field()) { - return false; - } - - bool result = false; - field1.current_field_exec(detail::make_variant_equality_comp_helper(field2, result)); - return result; - } - - /// @brief Non-equality comparison operator. - /// @param[in] field1 First field. - /// @param[in] field2 Second field. - /// @return true in case fields are NOT equal, false otherwise. - /// @related variant - template - bool operator!=(const variant &field1, - const variant &field2) { - return field1.value() != field2.value(); - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::variant type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::variant - template - inline variant & - to_field_base(variant &field) { - return field; - } - - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::variant type - /// in order to have access to its internal types. - /// @related nil::marshalling::types::variant - template - inline const variant & - to_field_base(const variant &field) { - return field; - } - -/// @brief Add convenience access enum and functions to the members of -/// @ref nil::marshalling::types::variant field. -/// @details All the possible field types the @ref nil::marshalling::types::variant field -/// can contain are bundled in -/// std::tuple -/// and provided as a template parameter to the definition of the -/// nil::marshalling::types::variant field. -/// @code -/// using MyFieldBase = nil::marshalling::field_type; -/// using ... Field1; -/// using ... Field2; -/// using ... Field3; -/// using MyField = -/// nil::marshalling::types::variant< -/// MyFieldBase, -/// std::tuple -/// >; -/// -/// MyField field; -/// auto& field1 = field.init_field<0>(); // Initialise the field to contain Field1 value -/// field1.value() = ...; -/// @endcode -/// However, it would be convenient to provide names and easier access to -/// all the poisble variants. The MARSHALLING_VARIANT_MEMBERS_ACCESS() macro does exactly -/// that when used inside the field class definition. Just inherit from -/// the nil::marshalling::types::variant class and use the macro inside with the names for the -/// member fields: -/// @code -/// class MyField : public nil::marshalling::types::variant<...> -/// { -/// public: -/// MARSHALLING_FIELD_MEMBERS_ACCESS(member1, member2, member3); -/// } -/// @endcode -/// It would be equivalent to having the following types and functions -/// definitions: -/// @code -/// class MyField : public nil::marshalling::types::variant<...> -/// { -/// public: -/// // Access indices for member fields -/// enum FieldIdx { -/// FieldIdx_member1, -/// FieldIdx_member2, -/// FieldIdx_member3, -/// FieldIdx_numOfValues -/// }; -/// -/// // Initialise as first member (Field1) -/// template -/// Field1& initField_member1(TArgs&&... args) -/// { -/// rerturn init_field(std::forward(args)...); -/// } -/// -/// // Accessor to the stored field as first member (Field1) -/// Field1& accessField_member1() -/// { -/// return access_field(); -/// } -/// -/// // Const variant of the accessor to the stored field as first member (Field1) -/// const Field1& accessField_member1() const -/// { -/// return access_field(); -/// } -/// -/// // Initialise as second member (Field2) -/// template -/// Field2& initField_member2(TArgs&&... args) -/// { -/// rerturn init_field(std::forward(args)...); -/// } -/// -/// // Accessor to the stored field as second member (Field2) -/// Field2& accessField_member2() -/// { -/// return access_field(); -/// } -/// -/// // Const variant of the accessor to the stored field as second member (Field2) -/// const Field2& accessField_member2() const -/// { -/// return access_field(); -/// } -/// -/// // Initialise as third member (Field3) -/// template -/// Field3& initField_member3(TArgs&&... args) -/// { -/// rerturn init_field(std::forward(args)...); -/// } -/// -/// // Accessor to the stored field as third member (Field3) -/// Field3& accessField_member3() -/// { -/// return access_field(); -/// } -/// -/// // Const variant of the accessor to the stored field as third member (Field3) -/// const Field3& accessField_member3() const -/// { -/// return access_field(); -/// } -/// }; -/// @endcode -/// @b NOTE, that provided names @b member1, @b member2, and @b member3, have -/// found their way to the following definitions: -/// @li @b FieldIdx enum. The names are prefixed with @b FieldIdx_. The -/// @b FieldIdx_nameOfValues value is automatically added at the end. -/// @li Initialisation functions prefixed with @b initField_ -/// @li Accessor functions prefixed with @b accessField_ -/// -/// See @ref sec_field_tutorial_variant for more examples and details -/// @param[in] ... List of member fields' names. -/// @related nil::marshalling::types::variant -/// @warning Some compilers, such as @b clang or early versions of @b g++ -/// may have problems compiling code generated by this macro even -/// though it uses valid C++11 constructs in attempt to automatically identify the -/// type of the base class. If the compilation fails, -/// and this macro resides inside a @b NON-template class, please use -/// MARSHALLING_VARIANT_MEMBERS_ACCESS_NOTEMPLATE() macro instead. In -/// case this macro needs to reside inside a @b template class, then -/// there is a need to define inner @b Base type, which specifies -/// exact type of the @ref nil::marshalling::types::variant class. For example: -/// @code -/// template -/// class MyField : public -/// nil::marshalling::types::variant< -/// MyFieldBase, -/// std::tuple, -/// TExtraOptions... -/// > -/// { -/// // Duplicate the base class definition -/// using Base = -/// nil::marshalling::types::variant< -/// MyFieldBase, -/// std::tuple, -/// TExtraOptions... -/// >; -/// public: -/// MARSHALLING_VARIANT_MEMBERS_ACCESS(member1, member2, member3); -/// }; -/// @endcode -#define MARSHALLING_VARIANT_MEMBERS_ACCESS(...) \ - MARSHALLING_EXPAND(MARSHALLING_DEFINE_FIELD_ENUM(__VA_ARGS__)) \ - MARSHALLING_AS_VARIANT_FUNC { \ - auto &var = nil::marshalling::types::to_field_base(*this); \ - using Var = typename std::decay::type; \ - static_assert(std::tuple_size::value == FieldIdx_numOfValues, \ - "Invalid number of names for variant field"); \ - return var; \ - } \ - MARSHALLING_AS_VARIANT_CONST_FUNC { \ - auto &var = nil::marshalling::types::to_field_base(*this); \ - using Var = typename std::decay::type; \ - static_assert(std::tuple_size::value == FieldIdx_numOfValues, \ - "Invalid number of names for variant field"); \ - return var; \ - } \ - MARSHALLING_DO_VARIANT_MEM_ACC_FUNC(as_variant(), __VA_ARGS__) - -/// @brief Similar to MARSHALLING_VARIANT_MEMBERS_ACCESS(), but dedicated for -/// non-template classes. -/// @details The MARSHALLING_VARIANT_MEMBERS_ACCESS() macro is a generic one, -/// which can be used in any class (template, or non-template). However, -/// some compilers (such as g++-4.9 and below, @b clang-4.0 and below) may fail -/// to compile it even though it uses valid C++11 constructs. If the -/// compilation fails and the class it is being used in is @b NOT a -/// template one, please use @ref MARSHALLING_VARIANT_MEMBERS_ACCESS_NOTEMPLATE() -/// instead. -/// @related nil::marshalling::types::variant -#define MARSHALLING_VARIANT_MEMBERS_ACCESS_NOTEMPLATE(...) \ - MARSHALLING_EXPAND(MARSHALLING_DEFINE_FIELD_ENUM(__VA_ARGS__)) \ - MARSHALLING_DO_VARIANT_MEM_ACC_FUNC_NOTEMPLATE(__VA_ARGS__) - - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_VARIANT_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/types/variant/basic_type.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/types/variant/basic_type.hpp deleted file mode 100644 index 413b7ed644..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/types/variant/basic_type.hpp +++ /dev/null @@ -1,589 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef MARSHALLING_BASIC_VARIANT_HPP -#define MARSHALLING_BASIC_VARIANT_HPP - -#include -#include - -#include - -#include -#include -#include - -namespace nil { - namespace marshalling { - namespace types { - namespace detail { - - template - class basic_variant : public TFieldBase { - public: - using members_type = TMembers; - using value_type = processing::tuple_as_aligned_union_type; - - basic_variant() = default; - - basic_variant(const value_type &val) : storage_(val) { - } - - basic_variant(value_type &&val) : storage_(std::move(val)) { - } - - basic_variant(const basic_variant &other) { - if (!other.current_field_valid()) { - return; - } - - processing::tuple_for_selected_type( - other.memIdx_, copy_construct_helper(&storage_, &other.storage_)); - - memIdx_ = other.memIdx_; - } - - basic_variant(basic_variant &&other) { - if (!other.current_field_valid()) { - return; - } - - processing::tuple_for_selected_type( - other.memIdx_, move_construct_helper(&storage_, &other.storage_)); - - memIdx_ = other.memIdx_; - } - - ~basic_variant() noexcept { - check_destruct(); - } - - basic_variant &operator=(const basic_variant &other) { - if (this == &other) { - return *this; - } - - check_destruct(); - if (!other.current_field_valid()) { - return *this; - } - - processing::tuple_for_selected_type( - other.memIdx_, copy_construct_helper(&storage_, &other.storage_)); - - memIdx_ = other.memIdx_; - return *this; - } - - basic_variant &operator=(basic_variant &&other) { - if (this == &other) { - return *this; - } - - check_destruct(); - - if (!other.current_field_valid()) { - return *this; - } - - processing::tuple_for_selected_type( - other.memIdx_, move_construct_helper(&storage_, &other.storage_)); - - memIdx_ = other.memIdx_; - return *this; - } - - const value_type &value() const { - return storage_; - } - - value_type &value() { - return storage_; - } - - std::size_t length() const { - if (!current_field_valid()) { - return 0U; - } - - std::size_t len = std::numeric_limits::max(); - processing::tuple_for_selected_type( - memIdx_, length_calc_helper(len, &storage_)); - return len; - } - - static constexpr std::size_t min_length() { - return 0U; - } - - static constexpr std::size_t max_length() { - return processing::tuple_type_accumulate( - std::size_t(0), max_length_calc_helper()); - } - - bool valid() const { - if (!current_field_valid()) { - return false; - } - - bool val = false; - processing::tuple_for_selected_type( - memIdx_, valid_check_helper(val, &storage_)); - return val; - } - - bool refresh() { - if (!current_field_valid()) { - return false; - } - - bool val = false; - processing::tuple_for_selected_type( - memIdx_, refresh_helper(val, &storage_)); - return val; - } - - template - status_type read(TIter &iter, std::size_t len) { - check_destruct(); - status_type es = status_type::error_status_amount; - processing::tuple_for_each_type( - make_read_helper(es, iter, len, &storage_)); - MARSHALLING_ASSERT((es == status_type::success) - || (members_count <= memIdx_)); - MARSHALLING_ASSERT((es != status_type::success) || (memIdx_ < members_count)); - - return es; - } - - template - void read_no_status(TIter &iter) = delete; - - template - status_type write(TIter &iter, std::size_t len) const { - if (!current_field_valid()) { - return status_type::success; - } - - status_type es = status_type::error_status_amount; - processing::tuple_for_selected_type( - memIdx_, make_write_helper(es, iter, len, &storage_)); - return es; - } - - template - void write_no_status(TIter &iter) const { - if (!current_field_valid()) { - return; - } - - processing::tuple_for_selected_type( - memIdx_, make_write_no_status_helper(iter, &storage_)); - } - - std::size_t current_field() const { - return memIdx_; - } - - void select_field(std::size_t idx) { - if (idx == memIdx_) { - return; - } - - check_destruct(); - if (!is_idx_valid(idx)) { - return; - } - - processing::tuple_for_selected_type( - idx, construct_helper(&storage_)); - memIdx_ = idx; - } - - template - void current_field_exec(TFunc &&func) { - if (!current_field_valid()) { - MARSHALLING_ASSERT(!"Invalid field execution"); - return; - } - - processing::tuple_for_selected_type( - memIdx_, make_exec_helper(std::forward(func))); - } - - template - void current_field_exec(TFunc &&func) const { - if (!current_field_valid()) { - MARSHALLING_ASSERT(!"Invalid field execution"); - return; - } - - processing::tuple_for_selected_type( - memIdx_, make_const_exec_helper(std::forward(func))); - } - - template - typename std::tuple_element::type &init_field(TArgs &&...args) { - static_assert(is_idx_valid(TIdx), "Only valid field index can be used"); - check_destruct(); - - using field_type = typename std::tuple_element::type; - new (&storage_) field_type(std::forward(args)...); - memIdx_ = TIdx; - return reinterpret_cast(storage_); - } - - template - typename std::tuple_element::type &access_field() { - static_assert(is_idx_valid(TIdx), "Only valid field index can be used"); - MARSHALLING_ASSERT(TIdx == memIdx_); // Accessing non initialised field - - using field_type = typename std::tuple_element::type; - return reinterpret_cast(storage_); - } - - template - const typename std::tuple_element::type &access_field() const { - static_assert(is_idx_valid(TIdx), "Something is wrong"); - MARSHALLING_ASSERT(TIdx == memIdx_); // Accessing non initialised field - - using field_type = typename std::tuple_element::type; - return reinterpret_cast(storage_); - } - - bool current_field_valid() const { - return is_idx_valid(memIdx_); - } - - void reset() { - check_destruct(); - MARSHALLING_ASSERT(!current_field_valid()); - } - - private: - class construct_helper { - public: - construct_helper(void *storage) : storage_(storage) { - } - - template - void operator()() const { - new (storage_) TField; - } - - private: - void *storage_ = nullptr; - }; - - class copy_construct_helper { - public: - copy_construct_helper(void *storage, const void *other) : storage_(storage), other_(other) { - } - - template - void operator()() const { - new (storage_) TField(*(reinterpret_cast(other_))); - } - - private: - void *storage_ = nullptr; - const void *other_ = nullptr; - }; - - class move_construct_helper { - public: - move_construct_helper(void *storage, void *other) : storage_(storage), other_(other) { - } - - template - void operator()() const { - new (storage_) TField(std::move(*(reinterpret_cast(other_)))); - } - - private: - void *storage_ = nullptr; - void *other_ = nullptr; - }; - - class destruct_helper { - public: - destruct_helper(void *storage) : storage_(storage) { - } - - template - void operator()() const { - reinterpret_cast(storage_)->~TField(); - } - - private: - void *storage_ = nullptr; - }; - - class length_calc_helper { - public: - length_calc_helper(std::size_t &len, const void *storage) : len_(len), storage_(storage) { - } - - template - void operator()() { - len_ = reinterpret_cast(storage_)->length(); - } - - private: - std::size_t &len_; - const void *storage_; - }; - - struct max_length_calc_helper { - template - constexpr std::size_t operator()(std::size_t val) const { - return val >= TField::max_length() ? val : TField::max_length(); - } - }; - - class valid_check_helper { - public: - valid_check_helper(bool &result, const void *storage) : result_(result), storage_(storage) { - } - - template - void operator()() { - result_ = reinterpret_cast(storage_)->valid(); - } - - private: - bool &result_; - const void *storage_; - }; - - class refresh_helper { - public: - refresh_helper(bool &result, void *storage) : result_(result), storage_(storage) { - } - - template - void operator()() { - result_ = reinterpret_cast(storage_)->refresh(); - } - - private: - bool &result_; - void *storage_ = nullptr; - }; - - template - class exec_helper { - static_assert(std::is_lvalue_reference::value || std::is_rvalue_reference::value, - "Wrong type of template parameter"); - - public: - template - exec_helper(void *storage, U &&func) : storage_(storage), func_(std::forward(func)) { - } - - template - void operator()() { -#ifdef _MSC_VER - // VS compiler - func_.operator()(*(reinterpret_cast(storage_))); -#else // #ifdef _MSC_VER - func_.template operator()(*(reinterpret_cast(storage_))); -#endif // #ifdef _MSC_VER - } - - private: - void *storage_ = nullptr; - TFunc func_; - }; - - template - auto make_exec_helper(TFunc &&func) -> exec_helper(func))> { - using FuncType = decltype(std::forward(func)); - return exec_helper(&storage_, std::forward(func)); - } - - template - class const_exec_helper { - static_assert(std::is_lvalue_reference::value || std::is_rvalue_reference::value, - "Wrong type of template parameter"); - - public: - template - const_exec_helper(const void *storage, U &&func) : - storage_(storage), func_(std::forward(func)) { - } - - template - void operator()() { -#ifdef _MSC_VER - // VS compiler - func_.operator()(*(reinterpret_cast(storage_))); -#else // #ifdef _MSC_VER - func_.template operator()(*(reinterpret_cast(storage_))); -#endif // #ifdef _MSC_VER - } - - private: - const void *storage_ = nullptr; - TFunc func_; - }; - - template - auto make_const_exec_helper(TFunc &&func) const - -> const_exec_helper(func))> { - using FuncType = decltype(std::forward(func)); - return const_exec_helper(&storage_, std::forward(func)); - } - - template - class read_helper { - public: - read_helper(std::size_t &idx, status_type &es, TIter &iter, std::size_t len, - void *storage) : - idx_(idx), - es_(es), iter_(iter), len_(len), storage_(storage) { - using IterType = typename std::decay::type; - using IterCategory = typename std::iterator_traits::iterator_category; - static_assert(std::is_base_of::value, - "basic_variant field only supports read with random access iterators"); - - es_ = status_type::error_status_amount; - } - - template - void operator()() { - if (readComplete_) { - return; - } - - auto *field = new (storage_) TField; - - auto iterTmp = iter_; - status_type es = field->read(iterTmp, len_); - if (es == status_type::success) { - iter_ = iterTmp; - es_ = es; - readComplete_ = true; - return; - } - - field->~TField(); - - if ((es_ == status_type::error_status_amount) - || (es == status_type::not_enough_data)) { - es_ = es; - } - - ++idx_; - } - - private: - std::size_t &idx_; - status_type &es_; - TIter &iter_; - std::size_t len_ = 0; - void *storage_ = nullptr; - bool readComplete_ = false; - }; - - template - read_helper make_read_helper(status_type &es, TIter &iter, std::size_t len, - void *storage) { - memIdx_ = 0; - return read_helper(memIdx_, es, iter, len, storage); - } - - template - class write_helper { - public: - write_helper(status_type &es, TIter &iter, std::size_t len, const void *storage) : - es_(es), iter_(iter), len_(len), storage_(storage) { - } - - template - void operator()() { - es_ = reinterpret_cast(storage_)->write(iter_, len_); - } - - private: - status_type &es_; - TIter &iter_; - std::size_t len_ = 0U; - const void *storage_ = nullptr; - }; - - template - static write_helper make_write_helper(status_type &es, TIter &iter, - std::size_t len, const void *storage) { - return write_helper(es, iter, len, storage); - } - - template - class write_no_status_helper { - public: - write_no_status_helper(TIter &iter, const void *storage) : iter_(iter), storage_(storage) { - } - - template - void operator()() { - reinterpret_cast(storage_)->write_no_status(iter_); - } - - private: - TIter &iter_; - const void *storage_ = nullptr; - }; - - template - static write_no_status_helper make_write_no_status_helper(TIter &iter, const void *storage) { - return write_no_status_helper(iter, storage); - } - - void check_destruct() { - if (current_field_valid()) { - processing::tuple_for_selected_type( - memIdx_, destruct_helper(&storage_)); - memIdx_ = members_count; - } - } - - static constexpr bool is_idx_valid(std::size_t idx) { - return idx < members_count; - } - - value_type storage_; - std::size_t memIdx_ = members_count; - - static const std::size_t members_count = std::tuple_size::value; - static_assert(nil::detail::is_tuple::value, - "value_type must be tuple"); - static_assert(0U < members_count, "value_type must be non-empty tuple"); - }; - - } // namespace detail - } // namespace types - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_BASIC_VARIANT_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/units.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/units.hpp deleted file mode 100644 index d78f878c43..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/units.hpp +++ /dev/null @@ -1,1546 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -/// @file -/// This file contains all the functions required for proper units conversion. - -#ifndef MARSHALLING_UNITS_HPP -#define MARSHALLING_UNITS_HPP - -#include -#include - -#include - -namespace nil { - namespace marshalling { - namespace units { - namespace detail { - - template - struct scaling_ratio_retriever { - using type = std::ratio<1, 1>; - }; - - template - struct scaling_ratio_retriever { - using type = typename TField::parsed_options_type::scaling_ratio_type; - }; - - template - using scaling_ratio_of = - typename scaling_ratio_retriever::type; - - template - using full_units_ratio_of = typename std::ratio_divide< - typename std::ratio_multiply, - typename TField::parsed_options_type::units_ratio>::type, - TConvRatio>::type; - - struct units_value_converter { - template - static TRet get_value(const TField &field) { - using Ratio = full_units_ratio_of; - using tag = typename std::conditional>::value, - no_conversion_tag, - has_conversion_tag>::type; - - return get_value_internal(field, tag()); - } - - template - static void set_value(TField &field, TVal &&value) { - using Ratio = full_units_ratio_of; - using tag = typename std::conditional>::value, - no_conversion_tag, - has_conversion_tag>::type; - - return set_value_internal(field, std::forward(value), tag()); - } - - private: - struct has_conversion_tag { }; - struct no_conversion_tag { }; - struct convert_to_fp_tag { }; - struct convert_to_int_tag { }; - - template - static TRet get_value_internal(const TField &field, no_conversion_tag) { - return static_cast(field.value()); - } - - template - static TRet get_value_internal(const TField &field, has_conversion_tag) { - using tag = typename std::conditional::value, - convert_to_fp_tag, - convert_to_int_tag>::type; - - return get_value_internal(field, tag()); - } - - template - static TRet get_value_internal(const TField &field, convert_to_fp_tag) { - static_assert(std::is_floating_point::value, - "TRet is expected to be floating point type"); - return static_cast(field.value()) - * (static_cast(TRatio::num) / static_cast(TRatio::den)); - } - - template - static TRet get_value_internal(const TField &field, convert_to_int_tag) { - static_assert(std::is_integral::value, "TRet is expected to be integral type"); - - using field_type = typename std::decay::type; - using value_type = typename field_type::value_type; - - static_assert(std::is_integral::value || std::is_floating_point::value - || std::is_enum::value, - "Unexpected field in units conversion"); - - using cast_type = typename std::conditional< - std::is_floating_point::value, - typename std::conditional::value, double, value_type>::type, - typename std::conditional::value, std::intmax_t, std::uintmax_t>:: - type>::type; - - return static_cast((static_cast(field.value()) * TRatio::num) / TRatio::den); - } - - template - static void set_value_internal(TField &field, TVal &&value, no_conversion_tag) { - using field_type = typename std::decay::type; - using value_type = typename field_type::value_type; - field.value() = static_cast(value); - } - - template - static void set_value_internal(TField &field, TVal &&value, has_conversion_tag) { - using tag = typename std::conditional< - std::is_floating_point::type>::value, - convert_to_fp_tag, - convert_to_int_tag>::type; - - set_value_internal(field, std::forward(value), tag()); - } - - template - static void set_value_internal(TField &field, TVal &&value, convert_to_int_tag) { - using field_type = typename std::decay::type; - using value_type = typename field_type::value_type; - - static_assert(std::is_integral::value || std::is_floating_point::value - || std::is_enum::value, - "Unexpected field in units conversion"); - - using cast_type = typename std::conditional< - std::is_floating_point::value, - typename std::conditional::value, double, value_type>::type, - typename std::conditional::type>::value, - std::intmax_t, - std::uintmax_t>::type>::type; - - field.value() = static_cast((static_cast(value) * TRatio::den) - / static_cast(TRatio::num)); - } - - template - static void set_value_internal(TField &field, TVal &&value, convert_to_fp_tag) { - using DecayedType = typename std::decay::type; - using field_type = typename std::decay::type; - using value_type = typename field_type::value_type; - - auto epsilon = DecayedType(0); - if ((TRatio::num < TRatio::den) && std::is_integral::value) { - epsilon = static_cast(TRatio::num) / static_cast(TRatio::den + 1); - } - - if (epsilon < DecayedType(0)) { - epsilon = -epsilon; - } - - if (value < DecayedType(0)) { - epsilon = -epsilon; - } - - field.value() - = static_cast(((value + epsilon) * static_cast(TRatio::den)) - / static_cast(TRatio::num)); - } - }; - - template - struct units_checker { - static const bool value = false; - }; - - template - struct units_checker { - static const bool value - = std::is_same::value; - }; - - template - constexpr bool has_expected_units() { - return units_checker::value; - } - - template - TRet get_time(const TField &field) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::Time>(), - "The field is expected to contain \"time\" units."); - return units_value_converter::get_value(field); - } - - template - void set_time(TField &field, TVal &&val) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::Time>(), - "The field is expected to contain \"time\" units."); - units_value_converter::set_value(field, std::forward(val)); - } - - template - TRet get_distance(const TField &field) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::distance>(), - "The field is expected to contain \"distance\" units."); - return units_value_converter::get_value(field); - } - - template - void set_distance(TField &field, TVal &&val) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::distance>(), - "The field is expected to contain \"distance\" units."); - units_value_converter::set_value(field, std::forward(val)); - } - - template - TRet get_speed(const TField &field) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::speed>(), - "The field is expected to contain \"speed\" units."); - return units_value_converter::get_value(field); - } - - template - void set_speed(TField &field, TVal &&val) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::speed>(), - "The field is expected to contain \"speed\" units."); - units_value_converter::set_value(field, std::forward(val)); - } - - template - TRet get_frequency(const TField &field) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::frequency>(), - "The field is expected to contain \"frequency\" units."); - return units_value_converter::get_value(field); - } - - template - void set_frequency(TField &field, TVal &&val) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::frequency>(), - "The field is expected to contain \"frequency\" units."); - units_value_converter::set_value(field, std::forward(val)); - } - - template - struct PI { - static constexpr T value = static_cast( - 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899L); - }; - - struct angle_value_converter { - template - static TRet get_value(const TField &field) { - using field_type = typename std::decay::type; - static_assert(detail::has_expected_units(), - "The field is expected to contain \"angle\" units."); - - using tag = typename std::conditional< - std::is_same::value, - same_units_tag, - typename ::std::conditional< - std::is_same::value, - degrees_to_radians_tag, - radians_to_degrees_tag>::type>::type; - - return get_value_internal(field, tag()); - } - - template - static void set_value(TField &field, TVal &&val) { - using field_type = typename std::decay::type; - static_assert(detail::has_expected_units(), - "The field is expected to contain \"angle\" units."); - - using tag = typename std::conditional< - std::is_same::value, - same_units_tag, - typename ::std::conditional< - std::is_same::value, - radians_to_degrees_tag, - degrees_to_radians_tag>::type>::type; - - set_value_internal(field, std::forward(val), tag()); - } - - private: - struct same_units_tag { }; - struct degrees_to_radians_tag { }; - struct radians_to_degrees_tag { }; - - template - static TRet get_value_internal(const TField &field, same_units_tag) { - return field.template get_scaled(); - } - - template - static TRet get_value_internal(const TField &field, degrees_to_radians_tag) { - using field_type = typename std::decay::type; - static_assert(std::is_same::value, - "The field is expected to contain degrees."); - - return PI::value * units_value_converter::get_value(field); - } - - template - static TRet get_value_internal(const TField &field, radians_to_degrees_tag) { - using field_type = typename std::decay::type; - static_assert(std::is_same::value, - "The field is expected to contain radians."); - - return units_value_converter::get_value(field) / PI::value; - } - - template - static void set_value_internal(TField &field, TVal &&val, same_units_tag) { - field.set_scaled(std::forward(val)); - } - - template - static void set_value_internal(TField &field, TVal &&val, degrees_to_radians_tag) { - using field_type = typename std::decay::type; - static_assert(std::is_same::value, - "The field is expected to contain radians."); - - using value_type = typename std::decay::type; - using PiType = typename std:: - conditional::value, value_type, double>::type; - - units_value_converter::set_value(field, val * PI::value); - } - - template - static void set_value_internal(TField &field, TVal &&val, radians_to_degrees_tag) { - using field_type = typename std::decay::type; - static_assert(std::is_same::value, - "The field is expected to contain degrees."); - - using value_type = typename std::decay::type; - using PiType = typename std:: - conditional::value, value_type, double>::type; - - units_value_converter::set_value(field, - static_cast(val) / PI::value); - } - }; - - template - TRet get_angle(const TField &field) { - return angle_value_converter::get_value(field); - } - - template - void set_angle(TField &field, TVal &&val) { - angle_value_converter::set_value(field, std::forward(val)); - } - - template - TRet get_current(const TField &field) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::current>(), - "The field is expected to contain \"current\" units."); - return units_value_converter::get_value(field); - } - - template - void set_current(TField &field, TVal &&val) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::current>(), - "The field is expected to contain \"current\" units."); - units_value_converter::set_value(field, std::forward(val)); - } - - template - TRet get_voltage(const TField &field) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::voltage>(), - "The field is expected to contain \"voltage\" units."); - return units_value_converter::get_value(field); - } - - template - void set_voltage(TField &field, TVal &&val) { - static_assert(detail::has_expected_units::type, - nil::marshalling::traits::units::voltage>(), - "The field is expected to contain \"voltage\" units."); - units_value_converter::set_value(field, std::forward(val)); - } - - } // namespace detail - - /// @brief Retrieve field's value as nanoseconds. - /// @details The function will do all the necessary math operations to convert - /// stored value to nanoseconds and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_nanoseconds(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing nanoseconds value. - /// @details The function will do all the necessary math operations to convert - /// provided nanoseconds into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_nanoseconds(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as microseconds. - /// @details The function will do all the necessary math operations to convert - /// stored value to microseconds and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_microseconds(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing microseconds value. - /// @details The function will do all the necessary math operations to convert - /// provided microseconds into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_microseconds(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as milliseconds. - /// @details The function will do all the necessary math operations to convert - /// stored value to milliseconds and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_milliseconds(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing milliseconds value. - /// @details The function will do all the necessary math operations to convert - /// provided milliseconds into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_milliseconds(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as seconds. - /// @details The function will do all the necessary math operations to convert - /// stored value to seconds and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_seconds(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing seconds value. - /// @details The function will do all the necessary math operations to convert - /// provided seconds into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_seconds(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as minutes. - /// @details The function will do all the necessary math operations to convert - /// stored value to minutes and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_minutes(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing minutes value. - /// @details The function will do all the necessary math operations to convert - /// provided minutes into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_minutes(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as hours. - /// @details The function will do all the necessary math operations to convert - /// stored value to hours and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_hours(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing hours value. - /// @details The function will do all the necessary math operations to convert - /// provided hours into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_hours(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as days. - /// @details The function will do all the necessary math operations to convert - /// stored value to days and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_days(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing days value. - /// @details The function will do all the necessary math operations to convert - /// provided days into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_days(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as weeks. - /// @details The function will do all the necessary math operations to convert - /// stored value to weeks and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - TRet get_weeks(const TField &field) { - return detail::get_time(field); - } - - /// @brief Update field's value accordingly, while providing weeks value. - /// @details The function will do all the necessary math operations to convert - /// provided weeks into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any time value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliseconds, - /// nil::marshalling::option::UnitsSeconds, etc... - template - void set_weeks(TField &field, TVal &&val) { - detail::set_time(field, std::forward(val)); - } - - /// @brief Retrieve field's value as nanometers. - /// @details The function will do all the necessary math operations to convert - /// stored value to nanometers and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - TRet get_nanometers(const TField &field) { - return detail::get_distance(field); - } - - /// @brief Update field's value accordingly, while providing nanometers value. - /// @details The function will do all the necessary math operations to convert - /// provided nanometers into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - void set_nanometers(TField &field, TVal &&val) { - detail::set_distance(field, std::forward(val)); - } - - /// @brief Retrieve field's value as micrometers. - /// @details The function will do all the necessary math operations to convert - /// stored value to micrometers and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - TRet get_micrometers(const TField &field) { - return detail::get_distance(field); - } - - /// @brief Update field's value accordingly, while providing micrometers value. - /// @details The function will do all the necessary math operations to convert - /// provided micrometers into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - void set_micrometers(TField &field, TVal &&val) { - detail::set_distance(field, - std::forward(val)); - } - - /// @brief Retrieve field's value as millimeters. - /// @details The function will do all the necessary math operations to convert - /// stored value to millimeters and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - TRet get_millimeters(const TField &field) { - return detail::get_distance(field); - } - - /// @brief Update field's value accordingly, while providing millimeters value. - /// @details The function will do all the necessary math operations to convert - /// provided millimeters into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - void set_millimeters(TField &field, TVal &&val) { - detail::set_distance(field, - std::forward(val)); - } - - /// @brief Retrieve field's value as centimeters. - /// @details The function will do all the necessary math operations to convert - /// stored value to centimeters and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - TRet get_centimeters(const TField &field) { - return detail::get_distance(field); - } - - /// @brief Update field's value accordingly, while providing centimeters value. - /// @details The function will do all the necessary math operations to convert - /// provided centimeters into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - void setCentimeters(TField &field, TVal &&val) { - detail::set_distance(field, - std::forward(val)); - } - - /// @brief Retrieve field's value as meters. - /// @details The function will do all the necessary math operations to convert - /// stored value to meters and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - TRet getMeters(const TField &field) { - return detail::get_distance(field); - } - - /// @brief Update field's value accordingly, while providing meters value. - /// @details The function will do all the necessary math operations to convert - /// provided meters into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - void setMeters(TField &field, TVal &&val) { - detail::set_distance(field, std::forward(val)); - } - - /// @brief Retrieve field's value as kilometers. - /// @details The function will do all the necessary math operations to convert - /// stored value to kilometers and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - TRet getKilometers(const TField &field) { - return detail::get_distance(field); - } - - /// @brief Update field's value accordingly, while providing kilometers value. - /// @details The function will do all the necessary math operations to convert - /// provided kilometers into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any distance value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimeters, - /// nil::marshalling::option::UnitsMeters, etc... - template - void setKilometers(TField &field, TVal &&val) { - detail::set_distance(field, std::forward(val)); - } - - /// @brief Retrieve field's value as nanometers per second. - /// @details The function will do all the necessary math operations to convert - /// stored value to nm/s and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - TRet getNanometersPerSecond(const TField &field) { - return detail::get_speed(field); - } - - /// @brief Update field's value accordingly, while providing nanometers per second value. - /// @details The function will do all the necessary math operations to convert - /// provided nm/s into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - void setNanometersPerSecond(TField &field, TVal &&val) { - detail::set_speed( - field, std::forward(val)); - } - - /// @brief Retrieve field's value as micrometers per second. - /// @details The function will do all the necessary math operations to convert - /// stored value to um/s and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - TRet getMicrometersPerSecond(const TField &field) { - return detail::get_speed(field); - } - - /// @brief Update field's value accordingly, while providing micrometers per second value. - /// @details The function will do all the necessary math operations to convert - /// provided um/s into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - void setMicrometersPerSecond(TField &field, TVal &&val) { - detail::set_speed( - field, std::forward(val)); - } - - /// @brief Retrieve field's value as millimeters per second. - /// @details The function will do all the necessary math operations to convert - /// stored value to mm/s and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - TRet getMillimetersPerSecond(const TField &field) { - return detail::get_speed(field); - } - - /// @brief Update field's value accordingly, while providing millimeters per second value. - /// @details The function will do all the necessary math operations to convert - /// provided mm/s into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - void setMillimetersPerSecond(TField &field, TVal &&val) { - detail::set_speed( - field, std::forward(val)); - } - - /// @brief Retrieve field's value as centimeters per second. - /// @details The function will do all the necessary math operations to convert - /// stored value to cm/s and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - TRet getCentimetersPerSecond(const TField &field) { - return detail::get_speed(field); - } - - /// @brief Update field's value accordingly, while providing centimeters per second value. - /// @details The function will do all the necessary math operations to convert - /// provided cm/s into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - void setCentimetersPerSecond(TField &field, TVal &&val) { - detail::set_speed( - field, std::forward(val)); - } - - /// @brief Retrieve field's value as meters per second. - /// @details The function will do all the necessary math operations to convert - /// stored value to m/s and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - TRet getMetersPerSecond(const TField &field) { - return detail::get_speed(field); - } - - /// @brief Update field's value accordingly, while providing meters per second value. - /// @details The function will do all the necessary math operations to convert - /// provided m/s into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - void setMetersPerSecond(TField &field, TVal &&val) { - detail::set_speed(field, - std::forward(val)); - } - - /// @brief Retrieve field's value as kilometers per second. - /// @details The function will do all the necessary math operations to convert - /// stored value to km/s and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - TRet getKilometersPerSecond(const TField &field) { - return detail::get_speed(field); - } - - /// @brief Update field's value accordingly, while providing kilometers per second value. - /// @details The function will do all the necessary math operations to convert - /// provided km/s into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - void setKilometersPerSecond(TField &field, TVal &&val) { - detail::set_speed( - field, std::forward(val)); - } - - /// @brief Retrieve field's value as kilometers per hour. - /// @details The function will do all the necessary math operations to convert - /// stored value to km/h and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - TRet getKilometersPerHour(const TField &field) { - return detail::get_speed(field); - } - - /// @brief Update field's value accordingly, while providing kilometers per hour value. - /// @details The function will do all the necessary math operations to convert - /// provided km/h into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any speed value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillimetersPerSecond, - /// nil::marshalling::option::UnitsMetersPerSecond, etc... - template - void setKilometersPerHour(TField &field, TVal &&val) { - detail::set_speed(field, - std::forward(val)); - } - - /// @brief Retrieve field's value as hertz. - /// @details The function will do all the necessary math operations to convert - /// stored value to hertz and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - TRet getHertz(const TField &field) { - return detail::get_frequency(field); - } - - /// @brief Update field's value accordingly, while providing hertz value. - /// @details The function will do all the necessary math operations to convert - /// provided hertz into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - void setHertz(TField &field, TVal &&val) { - detail::set_frequency(field, std::forward(val)); - } - - /// @brief Retrieve field's value as kilohertz. - /// @details The function will do all the necessary math operations to convert - /// stored value to kilohertz and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - TRet getKilohertz(const TField &field) { - return detail::get_frequency(field); - } - - /// @brief Update field's value accordingly, while providing kilohertz value. - /// @details The function will do all the necessary math operations to convert - /// provided kilohertz into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - void setKilohertz(TField &field, TVal &&val) { - detail::set_frequency(field, std::forward(val)); - } - - /// @brief Retrieve field's value as megahertz. - /// @details The function will do all the necessary math operations to convert - /// stored value to megahertz and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - TRet getMegahertz(const TField &field) { - return detail::get_frequency(field); - } - - /// @brief Update field's value accordingly, while providing megahertz value. - /// @details The function will do all the necessary math operations to convert - /// provided megahertz into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - void setMegahertz(TField &field, TVal &&val) { - detail::set_frequency(field, std::forward(val)); - } - - /// @brief Retrieve field's value as gigahertz. - /// @details The function will do all the necessary math operations to convert - /// stored value to gigahertz and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - TRet getGigahertz(const TField &field) { - return detail::get_frequency(field); - } - - /// @brief Update field's value accordingly, while providing gigahertz value. - /// @details The function will do all the necessary math operations to convert - /// provided gigahertz into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any frequency value, using - /// any of the relevant options: nil::marshalling::option::UnitsHertz, - /// nil::marshalling::option::UnitsKilohertz, etc... - template - void setGigahertz(TField &field, TVal &&val) { - detail::set_frequency(field, std::forward(val)); - } - - /// @brief Retrieve field's value as degrees. - /// @details The function will do all the necessary math operations to convert - /// stored value to degrees and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any angle measurement value, using - /// any of the relevant options: nil::marshalling::option::UnitsDegrees or - /// nil::marshalling::option::UnitsRadians - template - TRet getDegrees(const TField &field) { - return detail::get_angle(field); - } - - /// @brief Update field's value accordingly, while providing degrees value. - /// @details The function will do all the necessary math operations to convert - /// provided degrees into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any angle measurement value, using - /// any of the relevant options: nil::marshalling::option::UnitsDegrees or - /// nil::marshalling::option::UnitsRadians - template - void setDegrees(TField &field, TVal &&val) { - detail::set_angle(field, std::forward(val)); - } - - /// @brief Retrieve field's value as radians. - /// @details The function will do all the necessary math operations to convert - /// stored value to radians and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any angle measurement value, using - /// any of the relevant options: nil::marshalling::option::UnitsDegrees or - /// nil::marshalling::option::UnitsRadians - template - TRet getRadians(const TField &field) { - return detail::get_angle(field); - } - - /// @brief Update field's value accordingly, while providing radians value. - /// @details The function will do all the necessary math operations to convert - /// provided radians into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any angle measurement value, using - /// any of the relevant options: nil::marshalling::option::UnitsDegrees or - /// nil::marshalling::option::UnitsRadians - template - void setRadians(TField &field, TVal &&val) { - detail::set_angle(field, std::forward(val)); - } - - /// @brief Retrieve field's value as nanoamps. - /// @details The function will do all the necessary math operations to convert - /// stored value to nanoamps and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - TRet getNanoamps(const TField &field) { - return detail::get_current(field); - } - - /// @brief Update field's value accordingly, while providing nanoamps value. - /// @details The function will do all the necessary math operations to convert - /// provided nanoamps into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - void setNanoamps(TField &field, TVal &&val) { - detail::set_current(field, std::forward(val)); - } - - /// @brief Retrieve field's value as microamps. - /// @details The function will do all the necessary math operations to convert - /// stored value to microamps and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - TRet getMicroamps(const TField &field) { - return detail::get_current(field); - } - - /// @brief Update field's value accordingly, while providing microamps value. - /// @details The function will do all the necessary math operations to convert - /// provided microamps into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - void setMicroamps(TField &field, TVal &&val) { - detail::set_current(field, std::forward(val)); - } - - /// @brief Retrieve field's value as milliamps. - /// @details The function will do all the necessary math operations to convert - /// stored value to milliamps and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - TRet getMilliamps(const TField &field) { - return detail::get_current(field); - } - - /// @brief Update field's value accordingly, while providing milliamps value. - /// @details The function will do all the necessary math operations to convert - /// provided milliamps into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - void setMilliamps(TField &field, TVal &&val) { - detail::set_current(field, std::forward(val)); - } - - /// @brief Retrieve field's value as amps. - /// @details The function will do all the necessary math operations to convert - /// stored value to amps and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - TRet getAmps(const TField &field) { - return detail::get_current(field); - } - - /// @brief Update field's value accordingly, while providing amps value. - /// @details The function will do all the necessary math operations to convert - /// provided amps into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - void setAmps(TField &field, TVal &&val) { - detail::set_current(field, std::forward(val)); - } - - /// @brief Retrieve field's value as kiloamps. - /// @details The function will do all the necessary math operations to convert - /// stored value to kiloamps and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - TRet getKiloamps(const TField &field) { - return detail::get_current(field); - } - - /// @brief Update field's value accordingly, while providing kiloamps value. - /// @details The function will do all the necessary math operations to convert - /// provided kiloamps into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMilliamps, - /// nil::marshalling::option::UnitsAmps, etc... - template - void setKiloamps(TField &field, TVal &&val) { - detail::set_current(field, std::forward(val)); - } - - /// @brief Retrieve field's value as nanovolts. - /// @details The function will do all the necessary math operations to convert - /// stored value to nanovolts and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical current value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - TRet getNanovolts(const TField &field) { - return detail::get_voltage(field); - } - - /// @brief Update field's value accordingly, while providing nanovolts value. - /// @details The function will do all the necessary math operations to convert - /// provided nanovolts into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - void setNanovolts(TField &field, TVal &&val) { - detail::set_voltage(field, std::forward(val)); - } - - /// @brief Retrieve field's value as microvolts. - /// @details The function will do all the necessary math operations to convert - /// stored value to microvolts and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - TRet getMicrovolts(const TField &field) { - return detail::get_voltage(field); - } - - /// @brief Update field's value accordingly, while providing microvolts value. - /// @details The function will do all the necessary math operations to convert - /// provided microvolts into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - void setMicrovolts(TField &field, TVal &&val) { - detail::set_voltage(field, std::forward(val)); - } - - /// @brief Retrieve field's value as millivolts. - /// @details The function will do all the necessary math operations to convert - /// stored value to millivolts and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - TRet getMillivolts(const TField &field) { - return detail::get_voltage(field); - } - - /// @brief Update field's value accordingly, while providing millivolts value. - /// @details The function will do all the necessary math operations to convert - /// provided millivolts into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - void setMillivolts(TField &field, TVal &&val) { - detail::set_voltage(field, std::forward(val)); - } - - /// @brief Retrieve field's value as volts. - /// @details The function will do all the necessary math operations to convert - /// stored value to volts and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - TRet getVolts(const TField &field) { - return detail::get_voltage(field); - } - - /// @brief Update field's value accordingly, while providing volts value. - /// @details The function will do all the necessary math operations to convert - /// provided volts into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - void setVolts(TField &field, TVal &&val) { - detail::set_voltage(field, std::forward(val)); - } - - /// @brief Retrieve field's value as kilovolts. - /// @details The function will do all the necessary math operations to convert - /// stored value to kilovolts and return the result in specified return - /// type. - /// @tparam TRet Return type - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - TRet getKilovolts(const TField &field) { - return detail::get_voltage(field); - } - - /// @brief Update field's value accordingly, while providing kilovolts value. - /// @details The function will do all the necessary math operations to convert - /// provided kilovolts into the units stored by the field and update the - /// internal value of the latter accordingly. - /// @tparam TField Type of the field, expected to be a field with integral - /// internal value, such as a variant of nil::marshalling::types::integral. - /// @tparam TVal Type of value to assign. - /// @pre The @b TField type must be defined containing any electrical voltage value, using - /// any of the relevant options: nil::marshalling::option::UnitsMillivolts, - /// nil::marshalling::option::UnitsVolts, etc... - template - void setKilovolts(TField &field, TVal &&val) { - detail::set_voltage(field, std::forward(val)); - } - } // namespace units - } // namespace marshalling -} // namespace nil -#endif // MARSHALLING_UNITS_HPP diff --git a/crypto3/libs/marshalling/core/include/nil/marshalling/units_types.hpp b/crypto3/libs/marshalling/core/include/nil/marshalling/units_types.hpp deleted file mode 100644 index 1494348c46..0000000000 --- a/crypto3/libs/marshalling/core/include/nil/marshalling/units_types.hpp +++ /dev/null @@ -1,118 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -/// @file nil/marshalling/units_types.hpp -/// This file contains all the classes necessary to properly -/// define message traits. - -#ifndef MARSHALLING_TRAITS_HPP -#define MARSHALLING_TRAITS_HPP - -#include - -#include - -namespace nil { - namespace marshalling { - namespace traits { - namespace units { - - /// @brief Tag class used to indicate time value - struct Time { }; - - /// @brief Tag class used to indicate distance value - struct distance { }; - - /// @brief Tag class used to indicate speed value - struct speed { }; - - /// @brief Tag class used to indicate frequency value - struct frequency { }; - - /// @brief Tag class used to indicate angle value - struct angle { }; - - /// @brief Tag class used to indicate electrical current value - struct current { }; - - /// @brief Tag class used to indicate electrical voltage value - struct voltage { }; - - using nanoseconds_ratio = std::nano; - using microseconds_ratio = std::micro; - using milliseconds_ratio = std::milli; - using seconds_ratio = std::ratio<1, 1>; - using minutes_ratio = std::ratio<60>; - using hours_ratio = std::ratio<60 * 60>; - using days_ratio = std::ratio<24L * 60 * 60>; - using weeks_ratio = std::ratio<7L * 24 * 60 * 60>; - - using nanometers_ratio = std::nano; - using micrometers_ratio = std::micro; - using millimeters_ratio = std::milli; - using centimeters_ratio = std::centi; - using meters_ratio = std::ratio<1, 1>; - using kilometers_ratio = std::kilo; - - using nanometers_per_second_ratio = typename std::ratio_divide::type; - - using micrometers_per_second_ratio = typename std::ratio_divide::type; - - using millimeters_per_second_ratio = typename std::ratio_divide::type; - - using centimeters_per_second_ratio = typename std::ratio_divide::type; - - using meters_per_second_ratio = typename std::ratio_divide::type; - - using kilometers_per_second_ratio = typename std::ratio_divide::type; - - using kilometers_per_hour_ratio = typename std::ratio_divide::type; - - using hz_ratio = std::ratio<1, 1>; - using kilo_hz_ratio = std::kilo; - using mega_hz_ratio = std::mega; - using giga_hz_ratio = std::giga; - - using degrees_ratio = std::ratio<1, 1>; - using radians_ratio = std::ratio<180, 1>; - - using nanoamps_ratio = std::nano; - using microamps_ratio = std::micro; - using milliamps_ratio = std::milli; - using amps_ratio = std::ratio<1, 1>; - using kiloamps_ratio = std::kilo; - - using nanovolts_ratio = std::nano; - using microvolts_ratio = std::micro; - using millivolts_ratio = std::milli; - using volts_ratio = std::ratio<1, 1>; - using kilovolts_ratio = std::kilo; - - } // namespace units - } // namespace traits - } // namespace marshalling -} // namespace nil - -#endif // MARSHALLING_TRAITS_HPP diff --git a/crypto3/libs/marshalling/core/test/CMakeLists.txt b/crypto3/libs/marshalling/core/test/CMakeLists.txt index 4cb22d618e..f9ebe1188f 100644 --- a/crypto3/libs/marshalling/core/test/CMakeLists.txt +++ b/crypto3/libs/marshalling/core/test/CMakeLists.txt @@ -28,14 +28,13 @@ macro(define_marshalling_test name) ${Boost_INCLUDE_DIRS}) set_target_properties(marshalling_core_${name}_test PROPERTIES - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) endmacro() set(TESTS_NAMES "pack" "processing" - "types" "interfaces") foreach(TEST_NAME ${TESTS_NAMES}) diff --git a/crypto3/libs/marshalling/core/test/interfaces.cpp b/crypto3/libs/marshalling/core/test/interfaces.cpp index 7675fbe38a..160091d53c 100644 --- a/crypto3/libs/marshalling/core/test/interfaces.cpp +++ b/crypto3/libs/marshalling/core/test/interfaces.cpp @@ -35,16 +35,9 @@ #include #include -#include -#include #include #include -#include -#include #include -#include -#include -#include #include @@ -55,7 +48,7 @@ #include #include -using namespace nil::marshalling; +using namespace nil::crypto3::marshalling; BOOST_AUTO_TEST_SUITE(pack_interfaces_test_suite) @@ -79,28 +72,28 @@ void resize(boost::array &t, size_t count) { } template -typename std::enable_if::value, void>::type repack_2(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_2(TInput in, size_t result_size) { } template -typename std::enable_if::value, void>::type repack_4(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_4(TInput in, size_t result_size) { } template -typename std::enable_if::value, void>::type repack_5(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_5(TInput in, size_t result_size) { } template -typename std::enable_if::value || !nil::detail::has_begin::value, void>::type +typename std::enable_if::value || !detail::has_begin::value, void>::type repack_6(TInput in, size_t result_size) { } template -typename std::enable_if::value, void>::type repack_7(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_7(TInput in, size_t result_size) { } template -typename std::enable_if::value || !nil::detail::has_begin::value, void>::type +typename std::enable_if::value || !detail::has_begin::value, void>::type repack_8(TInput in, size_t result_size) { } @@ -112,7 +105,7 @@ void repack_1(TInput in, size_t result_size) { } template -typename std::enable_if::value, void>::type repack_2(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_2(TInput in, size_t result_size) { status_type status; T result = pack(in.begin(), in.end(), status); BOOST_CHECK(status == status_type::success); @@ -127,7 +120,7 @@ void repack_3(TInput in, size_t result_size) { } template -typename std::enable_if::value, void>::type repack_4(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_4(TInput in, size_t result_size) { status_type status; T result; status = pack(in.begin(), in.end(), result); @@ -135,7 +128,7 @@ typename std::enable_if::value, void>::type repac } template -typename std::enable_if::value, void>::type repack_5(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_5(TInput in, size_t result_size) { status_type status; T result; resize(result, result_size); @@ -145,7 +138,7 @@ typename std::enable_if::value, void>::type repack_5(T } template -typename std::enable_if::value && nil::detail::has_begin::value, void>::type +typename std::enable_if::value && detail::has_begin::value, void>::type repack_6(TInput in, size_t result_size) { status_type status; T result; @@ -156,7 +149,7 @@ typename std::enable_if::value && nil::detail::has_beg } template -typename std::enable_if::value, void>::type repack_7(TInput in, size_t result_size) { +typename std::enable_if::value, void>::type repack_7(TInput in, size_t result_size) { status_type status; T result; resize(result, result_size); @@ -165,7 +158,7 @@ typename std::enable_if::value, void>::type repack_7(T } template -typename std::enable_if::value && nil::detail::has_begin::value, void>::type +typename std::enable_if::value && detail::has_begin::value, void>::type repack_8(TInput in, size_t result_size) { status_type status; T result; diff --git a/crypto3/libs/marshalling/core/test/pack.cpp b/crypto3/libs/marshalling/core/test/pack.cpp index 5d73d97923..deac7bcce7 100644 --- a/crypto3/libs/marshalling/core/test/pack.cpp +++ b/crypto3/libs/marshalling/core/test/pack.cpp @@ -35,22 +35,15 @@ #include #include -#include -#include #include #include -#include -#include #include -#include -#include -#include #include #include -using namespace nil::marshalling; +using namespace nil::crypto3::marshalling; BOOST_AUTO_TEST_SUITE(pack_imploder_test_suite) diff --git a/crypto3/libs/marshalling/core/test/processing.cpp b/crypto3/libs/marshalling/core/test/processing.cpp index 025f17b302..b700434ac3 100644 --- a/crypto3/libs/marshalling/core/test/processing.cpp +++ b/crypto3/libs/marshalling/core/test/processing.cpp @@ -39,7 +39,7 @@ #include #include -using namespace nil::marshalling; +using namespace nil::crypto3::marshalling; BOOST_TEST_DONT_PRINT_LOG_VALUE(status_type) diff --git a/crypto3/libs/marshalling/core/test/types.cpp b/crypto3/libs/marshalling/core/test/types.cpp deleted file mode 100755 index 6b96b5e8f6..0000000000 --- a/crypto3/libs/marshalling/core/test/types.cpp +++ /dev/null @@ -1,3629 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE marshalling_types_test - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include - -using namespace nil::marshalling; - -static_assert(has_member_function_clear::value, "Invalid function presence detection"); -static_assert(has_member_function_clear>::value, "Invalid function presence detection"); -static_assert(has_member_function_clear>::value, "Invalid function presence detection"); -static_assert(has_member_function_clear>::value, - "Invalid function presence detection"); -static_assert(!has_member_function_clear::value, "Invalid function presence detection"); -static_assert(!has_member_function_clear>::value, - "Invalid function presence detection"); - -static_assert(has_member_function_resize::value, "Invalid function presence detection"); -static_assert(has_member_function_resize>::value, "Invalid function presence detection"); -static_assert(has_member_function_resize>::value, "Invalid function presence detection"); -static_assert(has_member_function_resize>::value, - "Invalid function presence detection"); -static_assert(!has_member_function_resize::value, "Invalid function presence detection"); -static_assert(!has_member_function_resize>::value, - "Invalid function presence detection"); - -static_assert(has_member_function_reserve::value, "Invalid function presence detection"); -static_assert(has_member_function_reserve>::value, "Invalid function presence detection"); -static_assert(has_member_function_reserve>::value, "Invalid function presence detection"); -static_assert(has_member_function_reserve>::value, - "Invalid function presence detection"); -static_assert(!has_member_function_reserve::value, "Invalid function presence detection"); -static_assert(!has_member_function_reserve>::value, - "Invalid function presence detection"); - -struct types_fixture { - typedef option::big_endian BigEndianOpt; - typedef option::little_endian LittleEndianOpt; - - enum Enum1 { Enum1_Value1, Enum1_Value2, Enum1_Value3, Enum1_NumOfValues }; - - enum class Enum2 : unsigned { Value1, Value2, Value3, Value4, NumOfValues }; - - template - void write_read_field(const TField &field, const OutputIterator expectedBuf, std::size_t size, - status_type expectedStatus = status_type::success) { - - status_type status; - std::vector outDataBuf = pack(field, status); - - BOOST_CHECK(expectedStatus == status); - - bool bufAsExpected = std::equal(expectedBuf, expectedBuf + size, outDataBuf.begin()); - if (!bufAsExpected) { - std::cout << "Expected buffer: " << std::hex; - std::copy_n(expectedBuf, size, std::ostream_iterator(std::cout, " ")); - std::cout << "\nActual buffer: "; - std::copy_n(&outDataBuf[0], size, std::ostream_iterator(std::cout, " ")); - std::cout << std::dec << std::endl; - } - BOOST_CHECK(bufAsExpected); - - TField newField = pack(outDataBuf, status); - - BOOST_CHECK(expectedStatus == status); - BOOST_CHECK(field == newField); - BOOST_CHECK(field.value() == newField.value()); - } - - template - bool fpEquals(TFP value1, TFP value2) { - return (std::abs(value1 - value2) < std::numeric_limits::epsilon()); - } -}; - -BOOST_FIXTURE_TEST_SUITE(types_accumulator_test_suite, types_fixture) - -BOOST_AUTO_TEST_CASE(types_accumulator_test_minus1) { - - using big_endian_array_type = types::array_list, std::uint32_t>; - - static const std::vector buf - = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10}; - - status_type status; - big_endian_array_type be_array = pack(buf, status); - - std::vector v = be_array.value(); - - BOOST_CHECK_EQUAL(v[0], 0x01020304); - BOOST_CHECK_EQUAL(v[1], 0x05060708); - BOOST_CHECK_EQUAL(v[2], 0x090a0b0c); - BOOST_CHECK_EQUAL(v[3], 0x0d0e0f10); - - BOOST_CHECK(be_array.valid()); - BOOST_CHECK(!be_array.set_version(5)); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test_minus2) { - - using little_endian_array_type = types::array_list, std::uint32_t>; - - static const std::vector Buf - = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10}; - - status_type status; - little_endian_array_type le_array = pack(Buf, status); - - std::vector v = le_array.value(); - - BOOST_CHECK_EQUAL(v[0], 0x04030201); - BOOST_CHECK_EQUAL(v[1], 0x08070605); - BOOST_CHECK_EQUAL(v[2], 0x0c0b0a09); - BOOST_CHECK_EQUAL(v[3], 0x100f0e0d); - - BOOST_CHECK(le_array.valid()); - BOOST_CHECK(!le_array.set_version(5)); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test_minus3) { - - using big_endian_array_type = - types::array_list< - field_type, - types::integral< - field_type, - std::uint32_t>, - option::sequence_fixed_size<5> - >; - - static const std::vector Buf = {0x01, 0x02, 0x03, 0x04, - 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0a, 0x0b, 0x0c, - 0x0d, 0x0e, 0x0f, 0x10, - 0x11, 0x12, 0x13, 0x14, - 0x15, 0x16, 0x17, 0x18, - 0x19, 0x1a, 0x1b, 0x1c, - 0x1d, 0x1e, 0x1f, 0x20}; - - status_type status; - big_endian_array_type be_array = pack(Buf, status); - - BOOST_CHECK_EQUAL((be_array.value())[0].value(), 0x01020304); - BOOST_CHECK_EQUAL((be_array.value())[1].value(), 0x05060708); - BOOST_CHECK_EQUAL((be_array.value())[2].value(), 0x090a0b0c); - BOOST_CHECK_EQUAL((be_array.value())[3].value(), 0x0d0e0f10); - BOOST_CHECK_EQUAL((be_array.value())[4].value(), 0x11121314); - - BOOST_CHECK(be_array.valid()); - BOOST_CHECK(!be_array.set_version(5)); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test1) { - typedef types::integral, std::uint32_t> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - static const std::vector Buf = {0x01, 0x02, 0x03, 0x04}; - - status_type status; - testing_type field = pack(Buf, status); - - BOOST_CHECK_EQUAL(field.length(), sizeof(std::uint32_t)); - BOOST_CHECK_EQUAL(field.value(), 0x01020304); - BOOST_CHECK(field.valid()); - BOOST_CHECK(!field.set_version(5)); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test2) { - typedef types::integral, std::uint32_t, option::fixed_length<3>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::vector Buf = {0x01, 0x02, 0x03, 0x04}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK_EQUAL(field.length(), 3); - - BOOST_CHECK_EQUAL(field.value(), 0x010203); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test3) { - typedef types::integral, std::int16_t> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::vector Buf = {0x01, 0x02}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK_EQUAL(field.length(), sizeof(std::int16_t)); - BOOST_CHECK_EQUAL(field.value(), static_cast(0x0102)); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test4) { - typedef types::integral, std::int16_t> testing_type; - - static const std::vector Buf = {(char)0xff, (char)0xff}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK_EQUAL(field.length(), sizeof(std::int16_t)); - BOOST_CHECK_EQUAL(field.value(), -1); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test5) { - typedef types::integral, std::int16_t> testing_type; - - static const std::vector Buf = {0x0, (char)0x80}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK_EQUAL(field.length(), sizeof(std::int16_t)); - BOOST_CHECK_EQUAL(field.value(), std::numeric_limits::min()); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test6) { - typedef types::integral, std::int16_t, option::fixed_length<1>> testing_type; - - static const std::vector Buf = {(char)0xff, 0x00}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK_EQUAL(field.length(), 1); - BOOST_CHECK_EQUAL(field.value(), -1); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test7) { - typedef types::integral, std::int16_t, option::fixed_length<1>, - option::num_value_ser_offset<-2000>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::vector Buf = {13}; - - status_type status; - testing_type field = pack(Buf, status); - - BOOST_CHECK(field.length() == 1); - BOOST_CHECK(field.value() == 2013); - BOOST_CHECK(field.valid()); - - field.value() = 2000; - static const std::vector ExpectedBuf = {0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value() = 2000 + 0x7f; - static const std::vector ExpectedBuf2 = {(char)0x7f}; - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); -} - -// BOOST_AUTO_TEST_CASE(types_accumulator_test8) { -// typedef types::integral, std::uint32_t, option::fixed_length<3>, -// option::valid_num_value_range<0, 0x010200>> -// testing_type; - -// static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); -// testing_type field; -// BOOST_CHECK(field.valid()); -// BOOST_CHECK(field.value() == 0U); -// field.value() = 0x010200; -// BOOST_CHECK(field.value() == 0x010200); -// BOOST_CHECK(field.valid()); - -// accumulator_set acc = accumulator_set(field); - -// static const std::vector Buf = {0x01, 0x02, 0x03, 0x04}; - -// field = pack(Buf, acc); -// BOOST_CHECK(field.length() == 3); -// BOOST_CHECK(field.value() == 0x010203); -// BOOST_CHECK(!field.valid()); -// } - -// BOOST_AUTO_TEST_CASE(types_accumulator_test9) { -// typedef types::integral, std::uint8_t, option::valid_num_value_range<0, 10>, -// #ifndef CC_COMPILER_GCC47 -// option::valid_num_value_range<20, 30>, -// #endif -// option::default_num_value<100>> -// testing_type; - -// static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - -// testing_type field; -// BOOST_CHECK(field.value() == 100); -// BOOST_CHECK(!field.valid()); -// field.value() = 5U; -// BOOST_CHECK(field.valid()); -// field.value() = 15U; -// BOOST_CHECK(!field.valid()); -// #ifndef CC_COMPILER_GCC47 -// field.value() = 25U; -// BOOST_CHECK(field.valid()); -// #endif - -// accumulator_set acc = accumulator_set(field); - -// static const std::vector Buf = {0x05, 0x02}; - -// field = pack(Buf, acc); -// BOOST_CHECK(field.length() == 1); -// BOOST_CHECK(field.value() == 0x05); -// BOOST_CHECK(field.valid()); -// } - -BOOST_AUTO_TEST_CASE(types_accumulator_test10) { - typedef types::bitmask_value, option::fixed_length<2>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value() == 0U); - - static const std::vector Buf = { - (char)0xde, - (char)0xad, - }; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(field.length() == 2); - BOOST_CHECK(field.value() == 0xdead); - BOOST_CHECK(field.get_bit_value(0U) == true); - BOOST_CHECK(field.get_bit_value(1U) == false); - BOOST_CHECK(field.get_bit_value(2U) == true); - BOOST_CHECK(field.get_bit_value(3U) == true); - BOOST_CHECK(field.get_bit_value(4U) == false); - BOOST_CHECK(field.get_bit_value(5U) == true); - BOOST_CHECK(field.get_bit_value(6U) == false); - BOOST_CHECK(field.get_bit_value(7U) == true); - BOOST_CHECK(field.get_bit_value(8U) == false); - BOOST_CHECK(field.get_bit_value(9U) == true); - BOOST_CHECK(field.get_bit_value(10U) == true); - BOOST_CHECK(field.get_bit_value(11U) == true); - BOOST_CHECK(field.get_bit_value(12U) == true); - BOOST_CHECK(field.get_bit_value(13U) == false); - BOOST_CHECK(field.get_bit_value(14U) == true); - BOOST_CHECK(field.get_bit_value(15U) == true); - - field.set_bit_value(1U, true); - BOOST_CHECK(field.value() == 0xdeaf); - - field.set_bits(0x2); - BOOST_CHECK(field.value() == 0xdeaf); - BOOST_CHECK(field.valid()); - - static const std::vector ExpectedBuf = {(char)0xde, (char)0xaf}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test11) { - typedef types::bitmask_value, option::fixed_length<3>, - option::default_num_value<0xffffff>, option::bitmask_reserved_bits<0xff0000, 0>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - testing_type field; - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.value() == 0xffffff); - - static const std::vector Buf = {(char)0xde, (char)0xad, (char)0x00, (char)0xff}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 3); - BOOST_CHECK(field.value() == 0xadde); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.get_bit_value(0U) == false); - BOOST_CHECK(field.get_bit_value(1U) == true); - BOOST_CHECK(field.get_bit_value(2U) == true); - BOOST_CHECK(field.get_bit_value(3U) == true); - BOOST_CHECK(field.get_bit_value(4U) == true); - BOOST_CHECK(field.get_bit_value(5U) == false); - BOOST_CHECK(field.get_bit_value(6U) == true); - BOOST_CHECK(field.get_bit_value(7U) == true); - BOOST_CHECK(field.get_bit_value(8U) == true); - BOOST_CHECK(field.get_bit_value(9U) == false); - BOOST_CHECK(field.get_bit_value(10U) == true); - BOOST_CHECK(field.get_bit_value(11U) == true); - BOOST_CHECK(field.get_bit_value(12U) == false); - BOOST_CHECK(field.get_bit_value(13U) == true); - BOOST_CHECK(field.get_bit_value(14U) == false); - BOOST_CHECK(field.get_bit_value(15U) == true); - BOOST_CHECK(field.get_bit_value(16U) == false); - BOOST_CHECK(field.get_bit_value(17U) == false); - BOOST_CHECK(field.get_bit_value(18U) == false); - BOOST_CHECK(field.get_bit_value(19U) == false); - BOOST_CHECK(field.get_bit_value(20U) == false); - BOOST_CHECK(field.get_bit_value(21U) == false); - BOOST_CHECK(field.get_bit_value(22U) == false); - BOOST_CHECK(field.get_bit_value(23U) == false); - - field.set_bits(0x10000); - BOOST_CHECK(field.value() == 0x1adde); - BOOST_CHECK(!field.valid()); - - field.set_bit_value(0U, true); - BOOST_CHECK(field.value() == 0x1addf); - field.set_bit_value(16U, false); - BOOST_CHECK(field.value() == 0xaddf); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test12) { - typedef types::enumeration, Enum1, option::fixed_length<1>, - option::valid_num_value_range<0, Enum1_NumOfValues - 1>, - option::default_num_value> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.value() == Enum1_NumOfValues); - - static const std::vector Buf = {(char)Enum1_Value1, (char)0x3f}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 1); - BOOST_CHECK(field.value() == Enum1_Value1); - BOOST_CHECK(field.valid()); - - field.value() = Enum1_NumOfValues; - BOOST_CHECK(!field.valid()); - field.value() = Enum1_Value2; - - static const std::vector ExpectedBuf = {(char)Enum1_Value2}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test13) { - typedef types::enumeration, Enum2, option::fixed_length<2>, - option::valid_num_value_range<0, (int)(Enum2::NumOfValues)-1>, - option::default_num_value<(int)Enum2::NumOfValues>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.value() == Enum2::NumOfValues); - - static const std::vector Buf = {0x0, (char)Enum2::Value4, (char)0x3f}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 2); - - BOOST_CHECK(field.value() == Enum2::Value4); - BOOST_CHECK(field.valid()); - - field.value() = Enum2::NumOfValues; - BOOST_CHECK(!field.valid()); - field.value() = Enum2::Value3; - - static const std::vector ExpectedBuf = {0x0, (char)Enum2::Value3}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test14) { - typedef types::array_list, types::integral, std::uint8_t>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - - static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(field.valid()); - BOOST_CHECK(!field.refresh()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test15) { - typedef types::array_list, types::integral, std::uint8_t>, - option::fixed_size_storage<32>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - - static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(field.valid()); - - static const std::vector Buf2 = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc}; - - field = pack(Buf2, status); - BOOST_CHECK(field.length() == Buf2.size()); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test16) { - struct SizeField : public types::integral, std::uint8_t> { }; - - typedef types::string, option::sequence_size_field_prefix> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix, - option::fixed_size_storage<256>> - StaticStorageField; - - static_assert(!StaticStorageField::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().empty()); - - StaticStorageField staticStorageField; - BOOST_CHECK(staticStorageField.valid()); - BOOST_CHECK(staticStorageField.value().empty()); - - static const std::vector ExpectedBuf = {0x0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - write_read_field(staticStorageField, ExpectedBuf.begin(), ExpectedBuf.size()); - - static const std::vector Buf = {0x5, 'h', 'e', 'l', 'l', 'o', 'g', 'a', 'r'}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.value().size() == static_cast(Buf[0])); - BOOST_CHECK(field.length() == field.value().size() + 1U); - BOOST_CHECK(field.valid()); - - staticStorageField = pack(Buf, status); - BOOST_CHECK(staticStorageField.value().size() == static_cast(Buf[0])); - BOOST_CHECK(staticStorageField.length() == staticStorageField.value().size() + 1U); - BOOST_CHECK(staticStorageField.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test17) { - typedef types::integral, std::uint8_t, option::valid_num_value_range<0, 4>> SizeField; - - static_assert(!SizeField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == SizeField::max_length()); - BOOST_CHECK(testing_type::max_length() == SizeField::max_length() + std::numeric_limits::max()); - - typedef types::string, option::sequence_size_field_prefix, - option::fixed_size_storage<256>> - StaticStorageField; - - static_assert(!StaticStorageField::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(StaticStorageField::min_length() == SizeField::max_length()); - BOOST_CHECK(StaticStorageField::max_length() == SizeField::max_length() + 255); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().empty()); - - StaticStorageField staticStorageField; - BOOST_CHECK(staticStorageField.valid()); - BOOST_CHECK(staticStorageField.value().empty()); - - static const std::vector Buf = {0x5, 'h', 'e', 'l', 'l', 'o', 'g', 'a', 'r'}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.value().size() == static_cast(Buf[0])); - BOOST_CHECK(field.length() == field.value().size() + 1U); - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.value() == "hello"); - - staticStorageField = pack(Buf, status); - BOOST_CHECK(staticStorageField.value().size() == static_cast(Buf[0])); - BOOST_CHECK(staticStorageField.length() == field.value().size() + 1U); - BOOST_CHECK(!staticStorageField.valid()); - BOOST_CHECK(std::string(staticStorageField.value().c_str()) == std::string("hello")); -} - -struct HelloInitialiser { - template - void operator()(TField &&field) { - field.value() = "hello"; - } -}; - -BOOST_AUTO_TEST_CASE(types_accumulator_test18) { - typedef types::integral, std::uint16_t> SizeField; - - static_assert(!SizeField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix, - option::default_value_initializer> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix, - option::default_value_initializer, option::fixed_size_storage<64>> - StaticStorageField; - - static_assert(!StaticStorageField::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(!field.value().empty()); - BOOST_CHECK(field.value() == "hello"); - field.value().clear(); - BOOST_CHECK(field.value().empty()); - field.value() = "bla"; - BOOST_CHECK(field.value() == "bla"); - BOOST_CHECK(field.value().size() == 3); - BOOST_CHECK(field.length() == 5); - - StaticStorageField staticStorageField; - BOOST_CHECK(staticStorageField.valid()); - BOOST_CHECK(!staticStorageField.value().empty()); - BOOST_CHECK(std::string(staticStorageField.value().c_str()) == std::string("hello")); - staticStorageField.value().clear(); - BOOST_CHECK(staticStorageField.value().empty()); - staticStorageField.value() = "bla"; - BOOST_CHECK(std::string(staticStorageField.value().c_str()) == std::string("bla")); - BOOST_CHECK(staticStorageField.value().size() == 3); - BOOST_CHECK(staticStorageField.length() == 5); - - static const std::vector ExpectedBuf = {0x0, 0x3, 'b', 'l', 'a'}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - write_read_field(staticStorageField, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test19) { - typedef types::integral, std::uint8_t> SizeField; - - static_assert(!SizeField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix, - option::fixed_size_storage<64>> - StaticStorageField; - - static_assert(!StaticStorageField::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - auto &fieldStr = field.value(); - BOOST_CHECK(field.valid()); - BOOST_CHECK(fieldStr.empty()); - - StaticStorageField staticStorageField; - auto &staticStorageFieldStr = staticStorageField.value(); - BOOST_CHECK(staticStorageField.valid()); - BOOST_CHECK(staticStorageFieldStr.empty()); - - static const std::string Str("hello"); - std::copy(Str.begin(), Str.end(), std::back_inserter(fieldStr)); - BOOST_CHECK(!fieldStr.empty()); - BOOST_CHECK(fieldStr.size() == Str.size()); - BOOST_CHECK(fieldStr == Str); - - std::copy(Str.begin(), Str.end(), std::back_inserter(staticStorageFieldStr)); - BOOST_CHECK(!staticStorageFieldStr.empty()); - BOOST_CHECK(staticStorageFieldStr.size() == Str.size()); - BOOST_CHECK(std::string(staticStorageFieldStr.c_str()) == std::string(Str.c_str())); - - static const std::vector ExpectedBuf = {0x5, 'h', 'e', 'l', 'l', 'o'}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - write_read_field(staticStorageField, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test20) { - typedef types::integral, std::uint16_t, option::var_length<1, 2>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::vector Buf = {(char)0x81, 0x01}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK_EQUAL(field.length(), 2U); - BOOST_CHECK_EQUAL(field.value(), static_cast(0x81)); - BOOST_CHECK(field.valid()); - - field.value() = 0x7ff; - BOOST_CHECK_EQUAL(field.length(), 2U); - static const std::vector ExpectedBuf = {(char)0xff, 0x0f}; - - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test21) { - typedef types::integral, std::uint32_t, option::var_length<1, 3>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::vector Buf = {(char)0x83, 0x0f}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK_EQUAL(field.length(), 2U); - BOOST_CHECK_EQUAL(field.value(), static_cast(0x18f)); - BOOST_CHECK(field.valid()); - - field.value() = 0x7ff; - BOOST_CHECK_EQUAL(field.length(), 2U); - static const std::vector ExpectedBuf = {(char)0x8f, (char)0x7f}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value() = 0x7f; - BOOST_CHECK_EQUAL(field.length(), 1U); - BOOST_CHECK_EQUAL(field.value(), 0x7f); - static const std::vector ExpectedBuf2 = {(char)0x7f}; - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - static const std::vector Buf2 = {(char)0x91, (char)0xc2, (char)0x3f, (char)0xff}; - field = pack(Buf2, status); - BOOST_CHECK_EQUAL(field.length(), 3U); - BOOST_CHECK_EQUAL(field.value(), static_cast(0x4613f)); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test22) { - typedef types::integral, std::uint32_t, option::var_length<1, 3>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::vector Buf = {(char)0x83, (char)0x8f, (char)0x8c, (char)0x3f, (char)0xff}; - - status_type status; - testing_type field = pack(Buf, status); - - BOOST_CHECK(status == status_type::protocol_error); - static_cast(field); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test23) { - typedef types::integral, std::int16_t, option::var_length<1, 2>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - - field.value() = static_cast(0xe000); - BOOST_CHECK_EQUAL(field.length(), 2U); - - static const std::vector ExpectedMinValueBuf = {(char)0x80, (char)0x40}; - write_read_field(field, ExpectedMinValueBuf.begin(), ExpectedMinValueBuf.size()); - - field.value() = 0x1fff; - BOOST_CHECK_EQUAL(field.length(), 2U); - - static const std::vector ExpectedMaxValueBuf = {(char)0xff, (char)0x3f}; - write_read_field(field, ExpectedMaxValueBuf.begin(), ExpectedMaxValueBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test24) { - typedef types::integral, unsigned, option::fixed_length<2>, - option::num_value_ser_offset<2>, option::valid_num_value_range<0, 2>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::vector Buf = {0x00, 0x02}; - - status_type status; - testing_type field = pack(Buf, status); - BOOST_CHECK(field.length() == 2); - BOOST_CHECK(field.value() == 0x0); - BOOST_CHECK(field.valid()); - field.value() = 3; - BOOST_CHECK(!field.valid()); - - static const std::vector ExpectedBuf = {0x00, 0x05}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(types_accumulator_test25) { - typedef std::tuple< - types::integral, std::uint8_t, option::fixed_bit_length<2>>, - types::bitmask_value, option::fixed_length<1>, option::fixed_bit_length<6>>> - BitfileMembers; - - typedef types::bitfield, BitfileMembers> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - static_cast(field); - BOOST_CHECK(field.length() == 1U); - BOOST_CHECK(field.member_bit_length<0>() == 2U); - BOOST_CHECK(field.member_bit_length<1>() == 6U); - - static const std::vector Buf = {(char)0x41, (char)0xff}; - - status_type status; - field = pack(Buf, status); - auto &members = field.value(); - auto &mem1 = std::get<0>(members); - BOOST_CHECK(mem1.value() == 0x1); - - auto &mem2 = std::get<1>(members); - BOOST_CHECK(mem2.value() == 0x10); -} - -BOOST_AUTO_TEST_CASE(test26) { - typedef std::tuple< - types::integral, std::uint8_t, option::fixed_bit_length<3>>, - types::bitmask_value, option::fixed_length<1>, option::fixed_bit_length<5>>> - BitfileMembers; - - typedef types::bitfield, BitfileMembers> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - static_cast(field); - BOOST_CHECK(field.length() == 1U); - BOOST_CHECK(field.member_bit_length<0>() == 3U); - BOOST_CHECK(field.member_bit_length<1>() == 5U); - - static const std::vector Buf = {(char)0x09, (char)0xff}; - - status_type status; - field = pack(Buf, status); - auto &members = field.value(); - auto &mem1 = std::get<0>(members); - BOOST_CHECK(mem1.value() == 0x1); - - auto &mem2 = std::get<1>(members); - BOOST_CHECK(mem2.value() == 0x1); -} - -using Test27_FieldBase = field_type; - -typedef std::tuple>, - types::bitmask_value, option::fixed_bit_length<8>>, - types::enumeration>> - Test27_BitfildMembers; - -template -class Test27_Field : public types::bitfield { - using Base = types::bitfield; - -public: - MARSHALLING_FIELD_MEMBERS_ACCESS(mem1, mem2, mem3); -}; - -BOOST_AUTO_TEST_CASE(test27) { - using testing_type = Test27_Field<>; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.length() == 2U); - BOOST_CHECK(field.member_bit_length() == 4U); - BOOST_CHECK(field.member_bit_length() == 8U); - BOOST_CHECK(field.member_bit_length() == 4U); - - static const std::vector Buf = {(char)0x4f, (char)0xa1, (char)0xaa}; - - status_type status; - field = pack(Buf, status); - auto &mem1 = field.field_mem1(); - BOOST_CHECK(mem1.value() == 0x1); - - auto &mem2 = field.field_mem2(); - BOOST_CHECK(mem2.value() == 0xfa); - - auto &mem3 = field.field_mem3(); - BOOST_CHECK(mem3.value() == 0x4); -} - -BOOST_AUTO_TEST_CASE(test28) { - typedef types::array_list< - field_type, - types::integral, std::uint8_t, option::valid_num_value_range<0, 5>>, - option::sequence_size_field_prefix, std::uint16_t>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == sizeof(std::uint16_t)); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 0U); - - static const std::vector Buf = {0x0, 0xa, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.value().size() == 10U); - - field.value().resize(5); - static const std::vector ExpectedBuf = {0x0, 0x5, 0x0, 0x1, 0x2, 0x3, 0x4}; - BOOST_CHECK(field.valid()); - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test29) { - typedef types::enumeration, Enum1, option::fixed_length<2>, - option::valid_num_value_range<0, Enum1_NumOfValues - 1>, - option::default_num_value, - option::fail_on_invalid> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value() == Enum1_Value2); - - static const std::vector Buf = {0x0, (char)Enum1_Value1, (char)0x3f}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 2); - BOOST_CHECK(field.value() == Enum1_Value1); - BOOST_CHECK(field.valid()); - - static const std::vector Buf2 = {0x0, (char)Enum1_NumOfValues, (char)0x3f}; - - field = pack(Buf2, status); - - BOOST_CHECK(status_type::protocol_error == status); - - field.value() = Enum1_Value3; - BOOST_CHECK(field.valid()); - - static const std::vector ExpectedBuf = {0x0, (char)Enum1_Value3}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test30) { - typedef types::integral, std::uint8_t, option::default_num_value<0x2>, - option::valid_num_value_range<0x2, 0x2>, option::ignore_invalid> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value() == 0x2); - - static const std::vector Buf = {0x0f}; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(field.value() == 0x2); - BOOST_CHECK(field.valid()); - - static const std::vector Buf2 = {0x00, 0x02, (char)0xff}; - - field = pack(Buf2, status); - - BOOST_CHECK(field.value() == 0x2); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(test31) { - - typedef types::optional< - types::integral, std::uint16_t, option::valid_num_value_range<0, 10>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - typedef testing_type::Mode Mode; - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.field().value() == 0U); - BOOST_CHECK(field.get_mode() == Mode::tentative); - - static const std::vector Buf = {0x0f, (char)0xf0}; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(field.field().value() == 0xff0); - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.get_mode() == Mode::exists); - field.set_mode(Mode::missing); -} - -BOOST_AUTO_TEST_CASE(test32) { - - typedef types::bundle< - field_type, - std::tuple, std::uint16_t, option::valid_num_value_range<0, 10>, - option::default_num_value<5>>, - types::enumeration, Enum1, option::fixed_length<1>, - option::valid_num_value_range<0, Enum1_NumOfValues - 1>, - option::default_num_value>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 3U, "Invalid min_length"); - static_assert(testing_type::min_length_from<1>() == 1U, "Invalid min_length"); - static_assert(testing_type::min_length_until<1>() == 2U, "Invalid min_length"); - static_assert(testing_type::max_length() == 3U, "Invalid max_length"); - static_assert(testing_type::max_length_from<1>() == 1U, "Invalid min_length"); - static_assert(testing_type::max_length_until<1>() == 2U, "Invalid min_length"); - - testing_type field; - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.length_from<1>() == 1U); - BOOST_CHECK(field.length_until<1>() == 2U); - BOOST_CHECK(field.valid()); - auto &intValField = std::get<0>(field.value()); - auto &enumValField = std::get<1>(field.value()); - BOOST_CHECK(intValField.value() == 5U); - BOOST_CHECK(enumValField.value() == Enum1_Value2); - - intValField.value() = 50U; - BOOST_CHECK(!field.valid()); - intValField.value() = 1U; - BOOST_CHECK(field.valid()); - enumValField.value() = Enum1_NumOfValues; - BOOST_CHECK(!field.valid()); - - static const std::vector Buf = {0x00, 0x3, Enum1_Value3, (char)0xff}; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.valid()); - BOOST_CHECK(intValField.value() == 3U); - BOOST_CHECK(enumValField.value() == Enum1_Value3); - - intValField.value() = 0xabcd; - enumValField.value() = Enum1_Value1; - - static const std::vector ExpectedBuf = {(char)0xab, (char)0xcd, (char)Enum1_Value1}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - testing_type fieldTmp; - auto readIter = &ExpectedBuf[0]; - status_type es = fieldTmp.read_from_until<0, 2>(readIter, ExpectedBuf.size()); - BOOST_CHECK(es == status_type::success); - BOOST_CHECK(fieldTmp == field); - - fieldTmp = testing_type(); - BOOST_CHECK(fieldTmp != field); - - readIter = &ExpectedBuf[0]; - es = fieldTmp.read_until<1>(readIter, 2); - BOOST_CHECK(es == status_type::success); - es = fieldTmp.read_from<1>(readIter, 1); - BOOST_CHECK(es == status_type::success); - BOOST_CHECK(fieldTmp == field); - - std::vector outBuf; - auto writeIter = std::back_inserter(outBuf); - es = fieldTmp.write_from_until<0, 2>(writeIter, outBuf.max_size()); - BOOST_CHECK(es == status_type::success); - BOOST_CHECK(outBuf.size() == ExpectedBuf.size()); - BOOST_CHECK(std::equal(outBuf.begin(), outBuf.end(), (const std::uint8_t *)&ExpectedBuf[0])); - - outBuf.clear(); - writeIter = std::back_inserter(outBuf); - es = fieldTmp.write_until<1>(writeIter, outBuf.max_size()); - BOOST_CHECK(es == status_type::success); - es = fieldTmp.write_from<1>(writeIter, outBuf.max_size()); - BOOST_CHECK(es == status_type::success); - BOOST_CHECK(outBuf.size() == ExpectedBuf.size()); - BOOST_CHECK(std::equal(outBuf.begin(), outBuf.end(), (const std::uint8_t *)&ExpectedBuf[0])); -} - -BOOST_AUTO_TEST_CASE(test33) { - typedef types::integral, std::uint8_t> SizeField; - - static_assert(!SizeField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix> StringField; - - static_assert(!StringField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::array_list, StringField> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == 0U); - BOOST_CHECK(testing_type::max_length() == 0xffff * StringField::max_length()); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().empty()); - - static const std::vector Buf = {0x05, 'h', 'e', 'l', 'l', 'o', 0x03, 'b', 'l', 'a'}; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value()[0].value() == "hello"); - BOOST_CHECK(field.value()[1].value() == "bla"); -} - -// BOOST_AUTO_TEST_CASE(test34) { -// typedef types::array_list, types::integral, std::uint8_t>, -// option::sequence_size_forcing_enabled> -// testing_type; - -// static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - -// testing_type field; -// BOOST_CHECK(field.valid()); -// BOOST_CHECK(field.value().empty()); -// static const std::size_t MaxCount = 5; -// field.force_read_elem_count(MaxCount); - -// accumulator_set acc = accumulator_set(field); - -// static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - -// field = pack(Buf.begin(), Buf.end(), acc); - -// BOOST_CHECK(field.length() == MaxCount); -// BOOST_CHECK(field.valid()); -// BOOST_CHECK(field.value().size() == MaxCount); -// } - -BOOST_AUTO_TEST_CASE(test35) { - typedef types::float_value, float> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(fpEquals(field.value(), 0.0f)); - field.value() = 1.23f; - BOOST_CHECK(fpEquals(field.value(), 1.23f)); - - std::vector buf; - auto writeIter = std::back_inserter(buf); - status_type es = field.write(writeIter, buf.max_size()); - BOOST_CHECK(es == status_type::success); - BOOST_CHECK(buf.size() == sizeof(float)); - - field = testing_type(); - BOOST_CHECK(fpEquals(field.value(), 0.0f)); - - const auto *readIter = &buf[0]; - - status_type status; - field = pack(buf, status); - - BOOST_CHECK(fpEquals(field.value(), 1.23f)); -} - -BOOST_AUTO_TEST_CASE(test36) { - typedef types::array_list, std::uint8_t, option::sequence_fixed_size<5>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 5U, "Invalid min length"); - static_assert(testing_type::max_length() == 5U, "Invalid max length"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(testing_type::min_length() == 5U); - BOOST_CHECK(testing_type::max_length() == 5U); - - static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == Buf.size()); - - BOOST_CHECK(!field.refresh()); -} - -BOOST_AUTO_TEST_CASE(test37) { - typedef types::array_list, types::integral, std::uint16_t>, - option::sequence_fixed_size<3>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 6U, "Invalid min length"); - static_assert(testing_type::max_length() == 6U, "Invalid max length"); - - testing_type field; - BOOST_CHECK(field.valid()); - - static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 6U); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 3U); - BOOST_CHECK((field.value())[0].value() == 0x1); - BOOST_CHECK((field.value())[1].value() == 0x203); - BOOST_CHECK((field.value())[2].value() == 0x405); -} - -BOOST_AUTO_TEST_CASE(test38) { - typedef types::integral, std::uint8_t, option::valid_num_value_range<0, 0>> TrailField; - - static_assert(!TrailField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_fixed_size<5>, - option::sequence_trailing_field_suffix> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(std::is_same::value, "Invalid storage assumption assumption"); - - static_assert(testing_type::min_length() == 6U, "Invalid min length"); - static_assert(testing_type::max_length() == 6U, "Invalid max length"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 6U); - - field.value() = "hello"; - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf = {'h', 'e', 'l', 'l', 'o', 0x0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value() = "foo"; - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf2 = {'f', 'o', 'o', 0x0, 0x0, 0x0}; - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - status_type status; - field = pack(ExpectedBuf2, status); - BOOST_CHECK(field.value() == "foo"); -} - -BOOST_AUTO_TEST_CASE(test39) { - typedef types::float_value, float, option::valid_num_value_range<5, 10>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(fpEquals(field.value(), 0.0f)); - BOOST_CHECK(!field.valid()); - field.value() = 4.999999f; - BOOST_CHECK(fpEquals(field.value(), 4.999999f)); - BOOST_CHECK(!field.valid()); - field.value() = 5.00001f; - BOOST_CHECK(fpEquals(field.value(), 5.00001f)); - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(test40) { - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 100>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.value() == 0U); - BOOST_CHECK(field.scale_as() == 0.0); - - field.set_scaled(0.15); - BOOST_CHECK(field.value() == 15U); - - static const std::vector Buf = {115}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.value() == 115); - BOOST_CHECK(fpEquals(field.scale_as(), 1.15f)); -} - -BOOST_AUTO_TEST_CASE(test41) { - typedef types::integral, std::uint8_t, option::valid_num_value_range<0, 0>> TermField; - - static_assert(!TermField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_termination_field_suffix> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 1U); - - field.value() = "hello"; - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf = {'h', 'e', 'l', 'l', 'o', 0x0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - static const std::vector InputBuf = {'f', 'o', 'o', 0x0, 'b', 'l', 'a'}; - - status_type status; - field = pack(InputBuf, status); - - BOOST_CHECK(field.value() == "foo"); - BOOST_CHECK(field.value().size() == 3U); -} - -BOOST_AUTO_TEST_CASE(test42) { - typedef types::integral, std::uint32_t, option::var_length<1, 4>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.value() == 0U); - BOOST_CHECK(field.length() == 1U); - - field.value() = 127U; - BOOST_CHECK(field.length() == 1U); - static const std::vector ExpectedBuf1 = {(char)0x7f}; - - write_read_field(field, ExpectedBuf1.begin(), ExpectedBuf1.size()); - - field.value() = 128U; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf2 = {(char)0x81, 0x00}; - - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - field.value() = 0x3fff; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf3 = {(char)0xff, (char)0x7f}; - - write_read_field(field, ExpectedBuf3.begin(), ExpectedBuf3.size()); - - field.value() = 0x4000; - BOOST_CHECK(field.length() == 3U); - static const std::vector ExpectedBuf4 = {(char)0x81, (char)0x80, (char)0x00}; - - write_read_field(field, ExpectedBuf4.begin(), ExpectedBuf4.size()); - - field.value() = 0x1fffff; - BOOST_CHECK(field.length() == 3U); - static const std::vector ExpectedBuf5 = {(char)0xff, (char)0xff, (char)0x7f}; - - write_read_field(field, ExpectedBuf5.begin(), ExpectedBuf5.size()); - - field.value() = 0x200000; - BOOST_CHECK(field.length() == 4U); - static const std::vector ExpectedBuf6 = {(char)0x81, (char)0x80, (char)0x80, (char)0x00}; - - write_read_field(field, ExpectedBuf6.begin(), ExpectedBuf6.size()); -} - -BOOST_AUTO_TEST_CASE(test43) { - typedef types::integral, std::uint32_t, option::var_length<1, 4>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.value() == 0U); - BOOST_CHECK(field.length() == 1U); - - field.value() = 127U; - BOOST_CHECK(field.length() == 1U); - static const std::vector ExpectedBuf1 = {(char)0x7f}; - - write_read_field(field, ExpectedBuf1.begin(), ExpectedBuf1.size()); - - field.value() = 128U; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf2 = {(char)0x80, 0x01}; - - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - field.value() = 0x3fff; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf3 = {(char)0xff, (char)0x7f}; - - write_read_field(field, ExpectedBuf3.begin(), ExpectedBuf3.size()); - - field.value() = 0x4000; - BOOST_CHECK(field.length() == 3U); - static const std::vector ExpectedBuf4 = {(char)0x80, (char)0x80, (char)0x01}; - - write_read_field(field, ExpectedBuf4.begin(), ExpectedBuf4.size()); - - field.value() = 0x1fffff; - BOOST_CHECK(field.length() == 3U); - static const std::vector ExpectedBuf5 = {(char)0xff, (char)0xff, (char)0x7f}; - - write_read_field(field, ExpectedBuf5.begin(), ExpectedBuf5.size()); - - field.value() = 0x200000; - BOOST_CHECK(field.length() == 4U); - static const std::vector ExpectedBuf6 = {(char)0x80, (char)0x80, (char)0x80, (char)0x01}; - - write_read_field(field, ExpectedBuf6.begin(), ExpectedBuf6.size()); -} - -BOOST_AUTO_TEST_CASE(test44) { - typedef types::integral, std::uint32_t, option::var_length<2, 4>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.value() == 0U); - BOOST_CHECK(field.length() == 2U); - - static const std::vector ExpectedBuf1 = {(char)0x80, 0x00}; - - write_read_field(field, ExpectedBuf1.begin(), ExpectedBuf1.size()); - - field.value() = 127U; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf2 = {(char)0x80, 0x7f}; - - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - field.value() = 128U; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf3 = {(char)0x81, 0x00}; - - write_read_field(field, ExpectedBuf3.begin(), ExpectedBuf3.size()); -} - -BOOST_AUTO_TEST_CASE(test45) { - typedef types::integral, std::uint32_t, option::var_length<2, 4>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.value() == 0U); - BOOST_CHECK(field.length() == 2U); - - static const std::vector ExpectedBuf1 = {(char)0x80, 0x00}; - - write_read_field(field, ExpectedBuf1.begin(), ExpectedBuf1.size()); - - field.value() = 127U; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf2 = {(char)0xff, 0x00}; - - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - field.value() = 128U; - BOOST_CHECK(field.length() == 2U); - static const std::vector ExpectedBuf3 = {(char)0x80, 0x01}; - - write_read_field(field, ExpectedBuf3.begin(), ExpectedBuf3.size()); -} - -BOOST_AUTO_TEST_CASE(test46) { - typedef types::no_value> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - - static const std::vector ExpectedBuf = {0}; - write_read_field(field, ExpectedBuf.begin(), 0); -} - -struct BundleInitialiserTest47 { - template - void operator()(TField &field) const { - auto &members = field.value(); - auto &first = std::get<0>(members); - auto &second = std::get<1>(members); - first.value() = 1; - second.value() = 2; - } -}; - -BOOST_AUTO_TEST_CASE(test47) { - typedef types::bundle, - std::tuple, std::uint16_t>, - types::integral, std::uint8_t>>, - option::default_value_initializer> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == 3U); - BOOST_CHECK(testing_type::max_length() == 3U); - - testing_type field; - - static const std::vector ExpectedBuf = {(char)0x0, (char)0x1, (char)0x2}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test48) { - - typedef types::optional, std::uint16_t>, - option::default_optional_mode> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - typedef testing_type::Mode Mode; - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.field().value() == 0U); - BOOST_CHECK(field.get_mode() == Mode::exists); - - field.field().value() = 0xff0; - - static const std::vector Buf = {0x0f, (char)0xf0}; - - write_read_field(field, Buf.begin(), Buf.size()); -} - -struct BundleCustomReaderTest49 { - template - status_type operator()(TField &field, TIter &iter, std::size_t len) const { - auto &members = field.value(); - auto &first = std::get<0>(members); - auto &second = std::get<1>(members); - - status_type es = first.read(iter, len); - if (es != status_type::success) { - return es; - } - - if (first.value() != 0) { - second.set_mode(types::optional_mode::missing); - } else { - second.set_mode(types::optional_mode::exists); - } - return second.read(iter, len - first.length()); - } -}; - -// BOOST_AUTO_TEST_CASE(test49) { - -// typedef types::bundle, -// std::tuple, std::uint8_t>, -// types::optional, std::uint16_t>>>, -// option::custom_value_reader> -// testing_type; - -// static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - -// static_assert(testing_type::min_length() == 1U, "Invalid min_length"); -// static_assert(testing_type::max_length() == 3U, "Invalid max_length"); -// static_assert(testing_type::min_length_until<1>() == 1U, "Invalid min_length"); -// static_assert(testing_type::max_length_until<1>() == 1U, "Invalid max_length"); -// static_assert(testing_type::min_length_from<1>() == 0U, "Invalid min_length"); -// static_assert(testing_type::max_length_from<1>() == 2U, "Invalid max_length"); - -// testing_type field; -// BOOST_CHECK(field.valid()); -// auto &mem1 = std::get<0>(field.value()); -// auto &mem2 = std::get<1>(field.value()); - -// static const std::vector Buf = {0x00, 0x10, 0x20, (char)0xff}; - -// field = pack(Buf, status); -// BOOST_CHECK(field.length() == 3U); -// BOOST_CHECK(mem1.value() == 0U); -// BOOST_CHECK(mem2.field().value() == 0x1020); -// BOOST_CHECK(mem2.get_mode() == types::optional_mode::exists); - -// accumulator_set acc = accumulator_set(field); - -// static const std::vector Buf2 = {0x01, 0x10, 0x20, (char)0xff}; - -// field = pack(Buf2, status, acc); -// BOOST_CHECK(field.length() == 1U); -// BOOST_CHECK(mem1.value() == 1U); -// BOOST_CHECK(mem2.get_mode() == types::optional_mode::missing); -// } - -struct Test50_Field : public types::bitmask_value, option::fixed_length<1>> { - MARSHALLING_BITMASK_BITS(first, second, third, fourth, sixth = 5, seventh, eighth); - - MARSHALLING_BITMASK_BITS_ACCESS_NOTEMPLATE(first, second, third, fourth, sixth, seventh, eighth); -}; - -template -class Test50_Field2 - : public types::bitmask_value, option::fixed_length<1>, TExtraOpts...> { - using Base = types::bitmask_value, option::fixed_length<1>, TExtraOpts...>; - -public: - MARSHALLING_BITMASK_BITS_SEQ(first, second, third, fourth, fifth, sixth, seventh, eighth); -}; - -BOOST_AUTO_TEST_CASE(test50) { - using testing_type = Test50_Field; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 0xaa; - BOOST_CHECK(field.getBitValue_first() == false); - BOOST_CHECK(field.getBitValue_second() == true); - BOOST_CHECK(field.getBitValue_third() == false); - BOOST_CHECK(field.getBitValue_fourth() == true); - BOOST_CHECK(field.getBitValue_sixth() == true); - BOOST_CHECK(field.getBitValue_seventh() == false); - BOOST_CHECK(field.getBitValue_eighth() == true); - - field.set_bit_value_first(true); - field.set_bit_value_second(false); - field.set_bit_value_third(true); - field.set_bit_value_fourth(false); - field.set_bit_value_sixth(false); - field.set_bit_value_seventh(true); - field.set_bit_value_eighth(false); - - BOOST_CHECK(field.value() == 0x45); - - using Field2 = Test50_Field2<>; - Field2 field2; - static_cast(field2); - - static_assert(!Field2::is_version_dependent(), "Invalid version dependency assumption"); -} - -class Field_51 - : public types::bitfield, - std::tuple, std::uint8_t, - option::fixed_bit_length<2>>, - types::bitmask_value, - option::fixed_length<1>, option::fixed_bit_length<6>>>> { -public: - MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE(name1, name2) -}; - -BOOST_AUTO_TEST_CASE(test51) { - typedef Field_51 testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.length() == 1U); - BOOST_CHECK(field.member_bit_length() == 2U); - BOOST_CHECK(field.member_bit_length() == 6U); - - static const std::vector Buf = {(char)0x41, (char)0xff}; - - status_type status; - field = pack(Buf, status); - auto &mem1 = field.field_name1(); - BOOST_CHECK(mem1.value() == 0x1); - - auto &mem2 = field.field_name2(); - BOOST_CHECK(mem2.value() == 0x10); -} - -BOOST_AUTO_TEST_CASE(test52) { - typedef std::tuple, std::uint8_t, option::fixed_bit_length<8>>, - types::integral, std::int8_t, option::fixed_bit_length<8>>> - BitfildMembers; - - typedef types::bitfield, BitfildMembers> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - static_cast(field); - BOOST_CHECK(field.length() == 2U); - BOOST_CHECK(field.member_bit_length<0>() == 8U); - BOOST_CHECK(field.member_bit_length<1>() == 8U); - - static const std::vector Buf = {(char)0xff, (char)0xff}; - - status_type status; - field = pack(Buf, status); - auto &members = field.value(); - auto &mem1 = std::get<0>(members); - BOOST_CHECK(mem1.value() == 255); - - auto &mem2 = std::get<1>(members); - BOOST_CHECK(mem2.value() == -1); -} - -BOOST_AUTO_TEST_CASE(test53) { - typedef types::integral, std::int32_t, option::fixed_bit_length<23>, - option::scaling_ratio<180, 0x800000>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field(std::numeric_limits::max()); - static const double ExpVal1 = (static_cast(std::numeric_limits::max()) * 180) / 0x800000; - BOOST_CHECK(field.scale_as() == ExpVal1); -} - -BOOST_AUTO_TEST_CASE(test54) { - typedef types::integral, std::int8_t, option::scaling_ratio<100, 1>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field(1); - - BOOST_CHECK(field.value() == 1); - BOOST_CHECK(field.scale_as() == 100); - - field.set_scaled(1000); - BOOST_CHECK(field.value() == 10); - - field.set_scaled(260.38); - BOOST_CHECK(field.value() == 2); - - field.set_scaled(-200.00); - BOOST_CHECK(field.value() == -2); -} - -BOOST_AUTO_TEST_CASE(test55) { - typedef types::integral, std::int16_t, option::scaling_ratio<1, 100>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - - field.set_scaled(-0.1); - BOOST_CHECK(field.value() == -10); - - field.value() = -123; - BOOST_CHECK(field.scale_as() == -1.23f); -} - -BOOST_AUTO_TEST_CASE(test56) { - typedef types::integral, std::uint8_t, option::valid_num_value_range<0, 0>> TrailField; - - static_assert(!TrailField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_fixed_size<5>, option::fixed_size_storage<5>, - option::sequence_trailing_field_suffix> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 6U, "Invalid min length"); - static_assert(testing_type::max_length() == 6U, "Invalid max length"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 6U); - - field.value() = "hello"; - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf = {'h', 'e', 'l', 'l', 'o', 0x0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value() = "foo"; - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf2 = {'f', 'o', 'o', 0x0, 0x0, 0x0}; - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - status_type status; - field = pack(ExpectedBuf2, status); - - BOOST_CHECK(field.value() == "foo"); -} - -BOOST_AUTO_TEST_CASE(test57) { - typedef types::integral, std::uint32_t, option::scaling_ratio<1, 10>, - option::units_milliseconds> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static const std::uint32_t InitVal = 600000; - testing_type field; - field.value() = InitVal; - BOOST_CHECK(units::get_milliseconds(field) == InitVal / 10); - BOOST_CHECK(units::get_microseconds(field) == (InitVal * 1000L) / 10); - BOOST_CHECK(units::get_nanoseconds(field) == (InitVal * 1000ULL * 1000) / 10); - BOOST_CHECK(units::get_seconds(field) == InitVal / (10 * 1000)); - BOOST_CHECK(units::get_minutes(field) == InitVal / (10 * 60 * 1000)); - BOOST_CHECK(units::get_hours(field) == (double)InitVal / (10 * 60 * 60 * 1000)); - BOOST_CHECK(units::get_days(field) == (double)InitVal / (10 * 24L * 60 * 60 * 1000)); - BOOST_CHECK(units::get_weeks(field) == (double)InitVal / (10 * 7ULL * 24 * 60 * 60 * 1000)); - - units::set_nanoseconds(field, 500000U); - BOOST_CHECK(units::get_nanoseconds(field) == 500000U); - BOOST_CHECK(field.value() == 5); - - units::set_microseconds(field, 300U); - BOOST_CHECK(units::get_microseconds(field) == 300U); - BOOST_CHECK(field.value() == 3); - - units::set_milliseconds(field, 100U); - BOOST_CHECK(units::get_milliseconds(field) == 100U); - BOOST_CHECK(std::abs(units::get_seconds(field) - 0.1f) <= std::numeric_limits::epsilon()); - BOOST_CHECK(field.value() == 1000); - - units::set_seconds(field, 1.2); - BOOST_CHECK(std::abs(units::get_seconds(field) - 1.2f) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_milliseconds(field) == 1200U); - BOOST_CHECK(field.value() == 12000); - - units::set_minutes(field, (double)1 / 3); - BOOST_CHECK(std::abs(units::get_minutes(field) - (double)1 / 3) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::get_hours(field) - (double)1 / (3 * 60)) - <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_seconds(field) == 20U); - BOOST_CHECK(units::get_milliseconds(field) == 20000U); - BOOST_CHECK(field.value() == 200000); - - units::set_hours(field, 0.5f); - BOOST_CHECK(std::abs(units::get_hours(field) - 0.5) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_minutes(field) == 30U); - BOOST_CHECK(units::get_seconds(field) == 30U * 60U); - BOOST_CHECK(units::get_milliseconds(field) == 30U * 60U * 1000U); - BOOST_CHECK(field.value() == 30U * 60U * 1000U * 10U); - - units::set_days(field, (float)1 / 3); - BOOST_CHECK(std::abs(units::get_days(field) - (double)1 / 3) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_hours(field) == 8U); - BOOST_CHECK(units::get_minutes(field) == 8U * 60); - BOOST_CHECK(units::get_seconds(field) == 8U * 60U * 60U); - BOOST_CHECK(units::get_milliseconds(field) == 8UL * 60U * 60U * 1000U); - BOOST_CHECK(field.value() == 8UL * 60U * 60U * 1000U * 10U); - - units::set_weeks(field, (double)2 / 7); - BOOST_CHECK(std::abs(units::get_weeks(field) - (double)2 / 7) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_days(field) == 2U); - BOOST_CHECK(units::get_hours(field) == 2U * 24U); - BOOST_CHECK(units::get_minutes(field) == 2U * 24 * 60); - BOOST_CHECK(units::get_seconds(field) == 2UL * 24U * 60U * 60U); - BOOST_CHECK(units::get_milliseconds(field) == 2UL * 24U * 60U * 60U * 1000U); - BOOST_CHECK(field.value() == 2UL * 24U * 60U * 60U * 1000U * 10U); -} - -BOOST_AUTO_TEST_CASE(test58) { - - typedef types::integral, std::uint8_t, option::scaling_ratio<100, 1>, - option::units_nanoseconds> - Field1; - - static_assert(!Field1::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field1 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(units::get_nanoseconds(field) == 100U); - BOOST_CHECK(std::abs(units::get_microseconds(field) - 0.1) <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<100, 1>, - option::units_microseconds> - Field2; - - static_assert(!Field2::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field2 field(5U); - BOOST_CHECK(field.value() == 5U); - BOOST_CHECK(units::get_microseconds(field) == 500U); - BOOST_CHECK(std::abs(units::get_milliseconds(field) - 0.5) <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::units_milliseconds> Field3; - - static_assert(!Field3::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field3 field(200U); - BOOST_CHECK(field.value() == 200U); - BOOST_CHECK(units::get_milliseconds(field) == 200U); - BOOST_CHECK(std::abs(units::get_seconds(field) - 0.2) <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, - option::units_seconds> - Field4; - - static_assert(!Field4::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field4 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::get_seconds(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_milliseconds(field) == 100U); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, - option::units_minutes> - Field5; - - static_assert(!Field5::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field5 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::get_minutes(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_seconds(field) == 6U); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, option::units_hours> - Field6; - - static_assert(!Field6::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field6 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::get_hours(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_seconds(field) == 6U * 60U); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 12>, option::units_days> - Field7; - - static_assert(!Field7::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field7 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::get_days(field) - (double)1 / 12) - <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_hours(field) == 2U); - } while (false); - - typedef types::integral, std::uint8_t, option::units_weeks> Field8; - - static_assert(!Field8::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field8 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(units::get_weeks(field) == 1U); - BOOST_CHECK(units::get_hours(field) == 24U * 7U); - } while (false); -} - -BOOST_AUTO_TEST_CASE(test59) { - typedef types::integral, std::uint32_t, option::units_millimeters> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 345U; - BOOST_CHECK(units::get_nanometers(field) == 345000000UL); - BOOST_CHECK(units::get_micrometers(field) == 345000U); - BOOST_CHECK(units::get_millimeters(field) == 345U); - BOOST_CHECK(std::abs(units::get_centimeters(field) - 34.5) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getMeters(field) - 0.345) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getKilometers(field) - 0.000345) <= std::numeric_limits::epsilon()); - - units::set_nanometers(field, 100000000UL); - BOOST_CHECK(field.value() == 100U); - BOOST_CHECK(units::get_millimeters(field) == 100U); - - units::set_micrometers(field, 222000UL); - BOOST_CHECK(field.value() == 222U); - BOOST_CHECK(units::get_millimeters(field) == 222U); - - units::set_millimeters(field, 400); - BOOST_CHECK(field.value() == 400U); - BOOST_CHECK(units::get_micrometers(field) == 400000U); - - units::setCentimeters(field, 10); - BOOST_CHECK(units::get_millimeters(field) == 100U); - - units::setMeters(field, 0.025); - BOOST_CHECK(units::get_millimeters(field) == 25U); - - units::setKilometers(field, 0.025); - BOOST_CHECK(units::getMeters(field) == 25U); -} - -BOOST_AUTO_TEST_CASE(test60) { - typedef types::integral, std::uint8_t, option::scaling_ratio<100, 1>, - option::units_nanometers> - Field1; - - static_assert(!Field1::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field1 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(units::get_nanometers(field) == 100U); - BOOST_CHECK(std::abs(units::get_micrometers(field) - 0.1) <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<100, 1>, - option::units_micrometers> - Field2; - - static_assert(!Field2::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field2 field(5U); - BOOST_CHECK(field.value() == 5U); - BOOST_CHECK(units::get_micrometers(field) == 500U); - BOOST_CHECK(std::abs(units::get_millimeters(field) - 0.5) <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::units_millimeters> Field3; - - static_assert(!Field3::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field3 field(200U); - BOOST_CHECK(field.value() == 200U); - BOOST_CHECK(units::get_millimeters(field) == 200U); - BOOST_CHECK(std::abs(units::getMeters(field) - 0.2) <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, option::units_meters> - Field4; - - static_assert(!Field4::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field4 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::getMeters(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_millimeters(field) == 100U); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, - option::units_centimeters> - Field5; - - static_assert(!Field5::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field5 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::get_centimeters(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_millimeters(field) == 1U); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, - option::units_kilometers> - Field6; - - static_assert(!Field6::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field6 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::getKilometers(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::getMeters(field) == 100U); - } while (false); -} - -BOOST_AUTO_TEST_CASE(test61) { - typedef types::integral, std::uint32_t, option::units_centimeters_per_second> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 10U; - BOOST_CHECK(units::getNanometersPerSecond(field) == 100000000UL); - BOOST_CHECK(units::getMicrometersPerSecond(field) == 100000U); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 100U); - BOOST_CHECK(units::getCentimetersPerSecond(field) == 10U); - BOOST_CHECK(std::abs(units::getMetersPerSecond(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getKilometersPerSecond(field) - 0.0001) - <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getKilometersPerHour(field) - (0.1 * 3600) / 1000) - <= std::numeric_limits::epsilon()); - - units::setNanometersPerSecond(field, 50000000UL); - BOOST_CHECK(field.value() == 5U); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 50U); - - units::setMicrometersPerSecond(field, 10000UL); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 10U); - - units::setMillimetersPerSecond(field, 400); - BOOST_CHECK(field.value() == 40U); - BOOST_CHECK(units::getCentimetersPerSecond(field) == 40U); - - units::setCentimetersPerSecond(field, 10); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 100U); - - units::setMetersPerSecond(field, 0.02); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 20U); - - units::setKilometersPerSecond(field, 0.00002); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 20U); - - units::setKilometersPerHour(field, 36); - BOOST_CHECK(units::getMetersPerSecond(field) == 10U); -} - -BOOST_AUTO_TEST_CASE(test62) { - typedef types::integral, std::uint8_t, option::scaling_ratio<100, 1>, - option::units_nanometers_per_second> - Field1; - - static_assert(!Field1::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field1 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(units::getNanometersPerSecond(field) == 100U); - BOOST_CHECK(std::abs(units::getMicrometersPerSecond(field) - 0.1) - <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<100, 1>, - option::units_micrometers_per_second> - Field2; - - static_assert(!Field2::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field2 field(5U); - BOOST_CHECK(field.value() == 5U); - BOOST_CHECK(units::getMicrometersPerSecond(field) == 500U); - BOOST_CHECK(std::abs(units::getMillimetersPerSecond(field) - 0.5) - <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::units_millimeters_per_second> Field3; - - static_assert(!Field3::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field3 field(200U); - BOOST_CHECK(field.value() == 200U); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 200U); - BOOST_CHECK(std::abs(units::getMetersPerSecond(field) - 0.2) <= std::numeric_limits::epsilon()); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, - option::units_meters_per_second> - Field4; - - static_assert(!Field4::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field4 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::getMetersPerSecond(field) - 0.1) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 100U); - } while (false); - - typedef types::integral, std::uint8_t, option::scaling_ratio<1, 10>, - option::units_centimeters_per_second> - Field5; - - static_assert(!Field5::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field5 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(std::abs(units::getCentimetersPerSecond(field) - 0.1) - <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::getMillimetersPerSecond(field) == 1U); - } while (false); - - typedef types::integral, std::uint8_t, option::units_kilometers_per_hour> Field6; - - static_assert(!Field6::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field6 field(36U); - BOOST_CHECK(field.value() == 36U); - BOOST_CHECK(units::getMetersPerSecond(field) == 10U); - } while (false); - - typedef types::integral, std::uint8_t, option::units_kilometers_per_second> Field7; - - static_assert(!Field7::is_version_dependent(), "Invalid version dependency assumption"); - - do { - Field7 field(1U); - BOOST_CHECK(field.value() == 1U); - BOOST_CHECK(units::getMetersPerSecond(field) == 1000U); - } while (false); -} - -BOOST_AUTO_TEST_CASE(test63) { - typedef types::integral, std::uint32_t, option::units_kilohertz> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 10U; - BOOST_CHECK(units::getHertz(field) == 10000UL); - BOOST_CHECK(units::getKilohertz(field) == 10U); - BOOST_CHECK(std::abs(units::getMegahertz(field) - 0.01) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getGigahertz(field) - 0.00001) <= std::numeric_limits::epsilon()); - - units::setHertz(field, 20000U); - BOOST_CHECK(units::getKilohertz(field) == 20U); - - units::setKilohertz(field, 1); - BOOST_CHECK(units::getHertz(field) == 1000L); - - units::setMegahertz(field, 2); - BOOST_CHECK(units::getHertz(field) == 2000000UL); - - units::setGigahertz(field, 3); - BOOST_CHECK(units::getKilohertz(field) == 3000000UL); -} - -BOOST_AUTO_TEST_CASE(test64) { - typedef types::integral, std::uint32_t, option::scaling_ratio<1, 10>, - option::units_degrees> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 300U; - BOOST_CHECK(units::getDegrees(field) == 30U); - BOOST_CHECK(std::abs(units::getRadians(field) - 0.523599) <= 0.000001); - - units::setDegrees(field, 50U); - BOOST_CHECK(field.value() == 500U); - BOOST_CHECK(units::getDegrees(field) == 50U); - BOOST_CHECK(std::abs(units::getRadians(field) - 0.872665) <= 0.000001); - - units::setRadians(field, 1.04719); - BOOST_CHECK(units::getDegrees(field) == 60U); - BOOST_CHECK(field.value() == 600U); - BOOST_CHECK(std::abs(units::getRadians(field) - 1.04719) <= 0.00001); -} - -BOOST_AUTO_TEST_CASE(test65) { - typedef types::integral, std::uint32_t, option::scaling_ratio<1, 100>, - option::units_radians> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 100U; - BOOST_CHECK(units::getRadians(field) == 1U); - BOOST_CHECK(std::abs(units::getDegrees(field) - 57.2958) <= 0.0001); - - units::setRadians(field, 0.5); - BOOST_CHECK(field.value() == 50U); - BOOST_CHECK(std::abs(units::getRadians(field) - 0.5) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getDegrees(field) - 28.6479) <= 0.0001); - - units::setDegrees(field, 114.592); - BOOST_CHECK(units::getRadians(field) == 2U); - BOOST_CHECK(field.value() == 200U); - BOOST_CHECK(std::abs(units::getDegrees(field) - 114.592) <= 0.001); -} - -BOOST_AUTO_TEST_CASE(test66) { - typedef types::integral, std::uint32_t, option::units_milliamps> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 345U; - BOOST_CHECK(units::getNanoamps(field) == 345000000UL); - BOOST_CHECK(units::getMicroamps(field) == 345000U); - BOOST_CHECK(units::getMilliamps(field) == 345U); - BOOST_CHECK(std::abs(units::getAmps(field) - 0.345) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getKiloamps(field) - 0.000345) <= std::numeric_limits::epsilon()); - - units::setNanoamps(field, 100000000UL); - BOOST_CHECK(field.value() == 100U); - BOOST_CHECK(units::getMilliamps(field) == 100U); - - units::setMicroamps(field, 222000UL); - BOOST_CHECK(field.value() == 222U); - BOOST_CHECK(units::getMilliamps(field) == 222U); - - units::setMilliamps(field, 400); - BOOST_CHECK(field.value() == 400U); - BOOST_CHECK(units::getMicroamps(field) == 400000U); - - units::setAmps(field, 0.025); - BOOST_CHECK(units::getMilliamps(field) == 25U); - - units::setKiloamps(field, 0.025); - BOOST_CHECK(units::getAmps(field) == 25U); -} - -BOOST_AUTO_TEST_CASE(test67) { - typedef types::integral, std::uint32_t, option::units_millivolts> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 345U; - BOOST_CHECK(units::getNanovolts(field) == 345000000UL); - BOOST_CHECK(units::getMicrovolts(field) == 345000U); - BOOST_CHECK(units::getMillivolts(field) == 345U); - BOOST_CHECK(std::abs(units::getVolts(field) - 0.345) <= std::numeric_limits::epsilon()); - BOOST_CHECK(std::abs(units::getKilovolts(field) - 0.000345) <= std::numeric_limits::epsilon()); - - units::setNanovolts(field, 100000000UL); - BOOST_CHECK(field.value() == 100U); - BOOST_CHECK(units::getMillivolts(field) == 100U); - - units::setMicrovolts(field, 222000UL); - BOOST_CHECK(field.value() == 222U); - BOOST_CHECK(units::getMillivolts(field) == 222U); - - units::setMillivolts(field, 400); - BOOST_CHECK(field.value() == 400U); - BOOST_CHECK(units::getMicrovolts(field) == 400000U); - - units::setVolts(field, 0.025); - BOOST_CHECK(units::getMillivolts(field) == 25U); - - units::setKilovolts(field, 0.025); - BOOST_CHECK(units::getVolts(field) == 25U); -} - -BOOST_AUTO_TEST_CASE(test68) { - typedef types::float_value, float, option::units_seconds> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - field.value() = 1.345f; - - BOOST_CHECK(std::abs(field.value() - 1.345f) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_microseconds(field) == 1345000U); - BOOST_CHECK(units::get_milliseconds(field) == 1345U); - BOOST_CHECK(std::abs(units::get_seconds(field) - 1.345f) <= std::numeric_limits::epsilon()); - - units::set_milliseconds(field, 500U); - BOOST_CHECK(std::abs(field.value() - 0.5f) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_milliseconds(field) == 500U); - BOOST_CHECK(std::abs(units::get_seconds(field) - 0.5f) <= std::numeric_limits::epsilon()); - - units::set_minutes(field, (float)1 / 180); - BOOST_CHECK(std::abs(units::get_seconds(field) - (float)1 / 3) <= std::numeric_limits::epsilon()); - BOOST_CHECK(units::get_milliseconds(field) == 333U); - BOOST_CHECK(std::abs(units::get_milliseconds(field) - (333 + (float)1 / 3)) - <= std::numeric_limits::epsilon()); -} - -BOOST_AUTO_TEST_CASE(test69) { - struct LenField : public types::integral, std::uint8_t> { }; - - static_assert(!LenField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::array_list, types::integral, std::uint16_t>, - option::sequence_ser_length_field_prefix> - testing_type; - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().empty()); - - static const std::vector ExpectedBuf = {0x0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - static const std::vector Buf = {0x8, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(field.value().size() == static_cast(Buf[0]) / 2U); - BOOST_CHECK(field.length() == (field.value().size() * 2) + 1U); - BOOST_CHECK(field.value()[0].value() == 0x0102); - BOOST_CHECK(field.value()[1].value() == 0x0304); - BOOST_CHECK(field.value()[2].value() == 0x0506); - BOOST_CHECK(field.value()[3].value() == 0x0708); - - static const std::vector Buf2 = {0x7, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}; - - field = pack(Buf2, status); - - BOOST_CHECK(status_type::invalid_msg_data == status); - - static const std::vector Buf3 = {0x4, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}; - field = pack(Buf3, status); - BOOST_CHECK(field.value().size() == static_cast(Buf3[0]) / 2U); - BOOST_CHECK(field.length() == (field.value().size() * 2) + 1U); - BOOST_CHECK(field.value()[0].value() == 0x0a0b); - BOOST_CHECK(field.value()[1].value() == 0x0c0d); -} - -using Test70_FieldBase = field_type; - -template -using Test70_IntKeyField = types::integral, - option::valid_num_value_range, option::fail_on_invalid<>>; - -using Test70_Mem1 = types::bundle, types::integral>>; - -using Test70_Mem2 = types::bundle, types::integral>>; - -template -class Test70_Field : public types::variant, TExtra...> { - using Base = types::variant, TExtra...>; - -public: - MARSHALLING_VARIANT_MEMBERS_ACCESS(mem1, mem2); -}; - -class Test70_LengthRetriever { -public: - Test70_LengthRetriever(std::size_t &val) : val_(val) { - } - - template - void operator()(const TField &field) { - val_ = field.length(); - } - -private: - std::size_t &val_; -}; - -BOOST_AUTO_TEST_CASE(test70) { - using testing_type = Test70_Field<>; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.length() == 0U); - BOOST_CHECK(field.current_field() == std::tuple_size::value); - - auto &mem1 = field.initField_mem1(); - std::get<1>(field.accessField_mem1().value()).value() = 0x0a0b; - BOOST_CHECK(std::get<1>(mem1.value()).value() == 0x0a0b); - BOOST_CHECK(field.current_field() == 0U); - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.valid()); - - testing_type field2(field); - BOOST_CHECK(field2 == field); - - testing_type field3(std::move(field2)); - BOOST_CHECK(field3 == field); - - auto &mem2 = field.initField_mem2(); - std::get<1>(field.accessField_mem2().value()).value() = 0x0c0c0c0c; - BOOST_CHECK(std::get<1>(mem2.value()).value() == 0x0c0c0c0c); - BOOST_CHECK(field.current_field() == 1U); - BOOST_CHECK(field.length() == 5U); - BOOST_CHECK(field.valid()); - - field.reset(); - BOOST_CHECK(!field.current_field_valid()); - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.length() == 0U); - BOOST_CHECK(field.current_field() == std::tuple_size::value); - - static const std::vector Buf = {0x1, 0x2, 0x3}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.current_field() == 0U); - - static const std::vector Buf2 = {0x2, 0x3, 0x4}; - field = pack(Buf2, status); - - BOOST_CHECK(status_type::not_enough_data == status); - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.length() == 0U); - BOOST_CHECK(field.current_field() == std::tuple_size::value); - - static const std::vector Buf3 = {0x2, 0x3, 0x4, 0x5, 0x6}; - field = pack(Buf3, status); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 5U); - BOOST_CHECK(field.current_field() == 1U); - - std::size_t len1 = 0U; - field.current_field_exec(Test70_LengthRetriever(len1)); - BOOST_CHECK(field.length() == len1); - - std::size_t len2 = 0U; - Test70_LengthRetriever lenRetriever(len2); - field.current_field_exec(lenRetriever); - BOOST_CHECK(len2 == len1); - - std::size_t len3 = 0U; - static_cast(field).current_field_exec(Test70_LengthRetriever(len3)); - BOOST_CHECK(len3 == len1); - - field.initField_mem1(); - std::get<1>(field.accessField_mem1().value()).value() = 0x0a0b; - BOOST_CHECK(field3 == field); - - using InitialisedField = Test70_Field>; - InitialisedField iniField; - BOOST_CHECK(iniField.valid()); - BOOST_CHECK(iniField.length() == 3U); - BOOST_CHECK(iniField.current_field() == 0); - - auto &iniMem1 = iniField.initField_mem1(); - BOOST_CHECK(std::get<0>(iniMem1.value()).value() == 1U); - BOOST_CHECK(std::get<1>(iniMem1.value()).value() == 0U); - BOOST_CHECK(field.current_field() == 0U); - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.valid()); - - std::size_t len4 = 0U; - field.current_field_exec(Test70_LengthRetriever(len4)); - BOOST_CHECK(field.length() == len4); -} - -struct Test71_Field - : public types::bundle, - std::tuple, std::uint8_t>, - types::optional, std::uint8_t>, - option::default_optional_mode>>, - option::has_custom_read, option::has_custom_refresh> { - MARSHALLING_FIELD_MEMBERS_ACCESS_NOTEMPLATE(mask, val); - - template - status_type read(TIter &iter, std::size_t len) { - status_type es = field_mask().read(iter, len); - - if (es != status_type::success) { - return es; - } - - if (field_mask().value() == 0) { - field_val().set_missing(); - } else { - field_val().set_exists(); - } - - len -= field_mask().length(); - return field_val().read(iter, len); - } - - bool refresh() { - bool exists = (field_mask().value() != 0); - if (exists == field_val().does_exist()) { - return false; - } - - if (exists) { - field_val().set_exists(); - } else { - field_val().set_missing(); - } - return true; - } -}; - -BOOST_AUTO_TEST_CASE(test71) { - using testing_type = Test71_Field; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.length() == 1U); - BOOST_CHECK(field.field_val().is_missing()); - - field.field_mask().value() = 1; - bool result = field.refresh(); - BOOST_CHECK(result); - BOOST_CHECK(field.length() == 2U); - BOOST_CHECK(!field.refresh()); - field.field_mask().value() = 0; - BOOST_CHECK(field.refresh()); - BOOST_CHECK(field.length() == 1U); - - static const std::vector Buf = {0, 0, 0}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 1U); - BOOST_CHECK(field.field_val().is_missing()); - - static const std::vector Buf2 = {1, 5, 0}; - - field = pack(Buf2, status); - BOOST_CHECK(field.length() == 2U); - BOOST_CHECK(field.field_val().does_exist()); - BOOST_CHECK(field.field_val().field().value() == (unsigned)Buf2[1]); -} - -BOOST_AUTO_TEST_CASE(test72) { - static_assert(!types::detail::string_has_push_back::value, - "string_view doesn't have push_back"); - - typedef types::integral, std::uint8_t> SizeField; - - static_assert(!SizeField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_size_field_prefix, - option::orig_data_view> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().empty()); - - static const std::vector Buf = {0x5, 'h', 'e', 'l', 'l', 'o', 'g', 'a', 'r'}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.value().size() == static_cast(Buf[0])); - BOOST_CHECK(field.length() == field.value().size() + 1U); - BOOST_CHECK(field.valid()); - BOOST_CHECK(&(*field.value().begin()) == &Buf[1]); - - static const std::string Str("blabla"); - field.value() = testing_type::value_type(Str.c_str(), Str.size()); - BOOST_CHECK(&(*field.value().begin()) == &Str[0]); - - static const std::vector ExpectedBuf = {0x6, 'b', 'l', 'a', 'b', 'l', 'a'}; - - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test73) { - typedef types::integral, std::uint8_t, option::valid_num_value_range<0, 0>> TermField; - - static_assert(!TermField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_termination_field_suffix, - option::orig_data_view> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 1U); - - static const char *HelloStr = "hello"; - - field.value() = HelloStr; - BOOST_CHECK(&(*field.value().begin()) == HelloStr); - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf = {'h', 'e', 'l', 'l', 'o', 0x0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - static const std::vector InputBuf = {'f', 'o', 'o', 0x0, 'b', 'l', 'a'}; - - status_type status; - field = pack(InputBuf, status); - - BOOST_CHECK(field.value() == "foo"); - BOOST_CHECK(field.value().size() == 3U); -} - -BOOST_AUTO_TEST_CASE(test74) { - typedef types::integral, std::uint8_t, option::valid_num_value_range<0, 0>> TrailField; - - static_assert(!TrailField::is_version_dependent(), "Invalid version dependency assumption"); - - typedef types::string, option::sequence_fixed_size<5>, - option::sequence_trailing_field_suffix, option::orig_data_view> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 6U, "Invalid min length"); - static_assert(testing_type::max_length() == 6U, "Invalid max length"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 6U); - - static const char *HelloStr = "hello"; - - field.value() = HelloStr; - BOOST_CHECK(field.value().size() == 5U); - BOOST_CHECK(field.length() == 6U); - BOOST_CHECK(&(*field.value().begin()) == HelloStr); - - static const std::vector ExpectedBuf = {'h', 'e', 'l', 'l', 'o', 0x0}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value() = "foo"; - BOOST_CHECK(field.value().size() == 3U); - BOOST_CHECK(std::string(field.value().data()) == "foo"); - BOOST_CHECK(field.value() == container::string_view("foo")); - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf2 = {'f', 'o', 'o', 0x0, 0x0, 0x0}; - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - status_type status; - field = pack(ExpectedBuf2, status); - BOOST_CHECK(field.value() == "foo"); -} - -BOOST_AUTO_TEST_CASE(test75) { - typedef types::array_list, std::uint8_t, option::orig_data_view> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(std::is_same>::value, - "Expected to be array view"); - - testing_type field; - BOOST_CHECK(field.valid()); - - BOOST_CHECK(field.value().empty()); - - static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(field.valid()); - - auto &view = field.value(); - auto *viewStart = reinterpret_cast(&(*view.begin())); - BOOST_CHECK(viewStart == &Buf[0]); - BOOST_CHECK(!field.refresh()); -} - -BOOST_AUTO_TEST_CASE(test76) { - typedef types::array_list< - field_type, std::uint8_t, - option::sequence_size_field_prefix, std::uint16_t>>, - option::orig_data_view> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == sizeof(std::uint16_t)); - - testing_type field; - BOOST_CHECK(field.value().size() == 0U); - BOOST_CHECK(field.value().empty()); - - static const std::vector Buf = {0x0, 0xa, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xf, 0xf}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 12); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 10U); - BOOST_CHECK(&(*field.value().begin()) == reinterpret_cast(&Buf[2])); - - field.value().remove_suffix(5); - BOOST_CHECK(field.valid()); - static const std::vector ExpectedBuf = {0x0, 0x5, 0x0, 0x1, 0x2, 0x3, 0x4}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test77) { - typedef types::array_list, std::uint8_t, option::sequence_fixed_size<6>, - option::orig_data_view> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 6U, "Invalid min length"); - static_assert(testing_type::max_length() == 6U, "Invalid max length"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 0U); - BOOST_CHECK(field.value().empty()); - - static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 6U); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 6U); - BOOST_CHECK((field.value())[0] == 0x0); - BOOST_CHECK((field.value())[1] == 0x1); - BOOST_CHECK(&(*field.value().begin()) == reinterpret_cast(&Buf[0])); - - field.value().remove_prefix(3); - BOOST_CHECK(field.value().size() == 3U); - BOOST_CHECK((field.value())[0] == 0x3); - BOOST_CHECK((field.value())[1] == 0x4); - BOOST_CHECK(&(*field.value().begin()) == reinterpret_cast(&Buf[3])); - BOOST_CHECK(field.length() == 6U); - - static const std::vector ExpectedBuf = {0x3, 0x4, 0x5, 0x0, 0x0, 0x0}; - - std::vector outDataBuf(ExpectedBuf.size()); - pack(field, outDataBuf.begin()); - - bool bufAsExpected = std::equal(ExpectedBuf.begin(), ExpectedBuf.end(), outDataBuf.begin()); - BOOST_CHECK(bufAsExpected); -} - -class Test78_Field : public types::variant> { -public: - MARSHALLING_VARIANT_MEMBERS_ACCESS_NOTEMPLATE(mem1, mem2); -}; - -BOOST_AUTO_TEST_CASE(test78) { - Test78_Field field; - - static_assert(!Test78_Field::is_version_dependent(), "Invalid version dependency assumption"); - - auto &mem1_1 = field.initField_mem1(); - static_cast(mem1_1); - auto &mem1_2 = field.accessField_mem1(); - static_cast(mem1_2); - - auto &mem2_1 = field.initField_mem2(); - static_cast(mem2_1); - auto &mem2_2 = field.accessField_mem2(); - static_cast(mem2_2); -} - -BOOST_AUTO_TEST_CASE(test79) { - class testing_type - : public types::array_list, types::integral, std::uint8_t>, - option::sequence_elem_length_forcing_enabled, option::sequence_fixed_size<3>> { - public: - testing_type() { - force_read_elem_length(2U); - } - }; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.valid()); - static_assert(testing_type::min_length() == 3U, "Min length is incorrect"); - static_assert(3U < testing_type::max_length(), "Max length is incorrect"); - - static const std::vector Buf - = {0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x5, 0x0, 0x6, 0x0, 0x7, 0x0, 0x8, 0x0}; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(field.length() == 6U); - BOOST_CHECK(field.value().size() == 3U); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value()[0].value() == 0x1); - BOOST_CHECK(field.value()[1].value() == 0x2); - BOOST_CHECK(field.value()[2].value() == 0x3); -} - -BOOST_AUTO_TEST_CASE(test80) { - typedef types::bundle< - field_type, - std::tuple, std::uint16_t, option::valid_num_value_range<0, 10>, - option::default_num_value<5>>, - types::integral, std::uint8_t, option::valid_num_value_range<100, 100>, - option::default_num_value<100>, option::empty_serialization>, - types::enumeration, Enum1, option::fixed_length<1>, - option::valid_num_value_range<0, Enum1_NumOfValues - 1>, - option::default_num_value>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 3U, "Invalid min_length"); - static_assert(testing_type::max_length() == 3U, "Invalid max_length"); - static_assert(testing_type::min_length_from_until<1, 2>() == 0U, "Invalid min_length"); - static_assert(testing_type::max_length_from_until<1, 2>() == 0U, "Invalid max_length"); - static_assert(testing_type::min_length_from<1>() == 1U, "Invalid min_length"); - static_assert(testing_type::max_length_from<1>() == 1U, "Invalid max_length"); - - testing_type field; - BOOST_CHECK(field.valid()); - auto &intValField = std::get<0>(field.value()); - auto &constValField = std::get<1>(field.value()); - auto &enumValField = std::get<2>(field.value()); - BOOST_CHECK(intValField.value() == 5U); - BOOST_CHECK(constValField.value() == 100U); - BOOST_CHECK(enumValField.value() == Enum1_Value2); - - intValField.value() = 50U; - BOOST_CHECK(!field.valid()); - intValField.value() = 1U; - BOOST_CHECK(field.valid()); - enumValField.value() = Enum1_NumOfValues; - BOOST_CHECK(!field.valid()); - enumValField.value() = Enum1_Value1; - BOOST_CHECK(field.valid()); - constValField.value() = 10; - BOOST_CHECK(!field.valid()); - constValField.value() = 100; - BOOST_CHECK(field.valid()); - - static const std::vector Buf = {0x00, 0x3, Enum1_Value3, (char)0xff}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.valid()); - BOOST_CHECK(intValField.value() == 3U); - BOOST_CHECK(constValField.value() == 100U); - BOOST_CHECK(enumValField.value() == Enum1_Value3); - - intValField.value() = 0xabcd; - enumValField.value() = Enum1_Value1; - - static const std::vector ExpectedBuf = {(char)0xab, (char)0xcd, (char)Enum1_Value1}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test81) { - using testing_type = types::integral< - field_type, std::uint64_t, - option::valid_big_unsigned_num_value_range<0xffffffff, std::numeric_limits::max() - 1>, - option::default_big_unsigned_num_value::max()>>; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.value() == std::numeric_limits::max()); -} - -BOOST_AUTO_TEST_CASE(test82) { - - typedef types::bundle< - field_type, - std::tuple, std::uint16_t, option::valid_num_value_range<0, 10>, - option::default_num_value<5>>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 2U, "Invalid min_length"); - static_assert(testing_type::min_length_from<0>() == 2U, "Invalid min_length"); - static_assert(testing_type::min_length_until<1>() == 2U, "Invalid min_length"); - static_assert(testing_type::max_length() == 2U, "Invalid max_length"); - static_assert(testing_type::max_length_from<0>() == 2U, "Invalid min_length"); - static_assert(testing_type::max_length_until<1>() == 2U, "Invalid min_length"); - - testing_type field; - BOOST_CHECK(field.length() == 2U); - BOOST_CHECK(field.length_from<0>() == 2U); - BOOST_CHECK(field.length_until<1>() == 2U); - BOOST_CHECK(field.valid()); - auto &intValField = std::get<0>(field.value()); - BOOST_CHECK(intValField.value() == 5U); - - intValField.value() = 50U; - BOOST_CHECK(!field.valid()); - intValField.value() = 1U; - BOOST_CHECK(field.valid()); - static const std::vector Buf = {0x00, 0x3, (char)0xff}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == 2U); - BOOST_CHECK(field.valid()); - BOOST_CHECK(intValField.value() == 3U); - - intValField.value() = 0xabcd; - - static const std::vector ExpectedBuf = {(char)0xab, (char)0xcd}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - testing_type fieldTmp; - auto readIter = &ExpectedBuf[0]; - status_type es = fieldTmp.read_from_until<0, 1>(readIter, ExpectedBuf.size()); - BOOST_CHECK(es == status_type::success); - BOOST_CHECK(fieldTmp == field); -} - -BOOST_AUTO_TEST_CASE(test83) { - typedef types::array_list, std::uint8_t, option::sequence_fixed_size<5>, - option::sequence_fixed_size_use_fixed_size_storage> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 5U, "Invalid min length"); - static_assert(testing_type::max_length() == 5U, "Invalid max length"); - - static_assert(container::is_static_vector(), "The storage typ is incorrect"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(testing_type::min_length() == 5U); - BOOST_CHECK(testing_type::max_length() == 5U); - - static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == Buf.size()); -} - -BOOST_AUTO_TEST_CASE(test84) { - typedef types::string, option::sequence_fixed_size<5>, - option::sequence_fixed_size_use_fixed_size_storage> - testing_type; - - static_assert(testing_type::min_length() == 5U, "Invalid min length"); - static_assert(testing_type::max_length() == 5U, "Invalid max length"); - static_assert(container::is_static_string(), "Invalid storage type"); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.length() == 5U); - - static const char *HelloStr = "hello"; - field.value() = HelloStr; - BOOST_CHECK(field.value().size() == 5U); - BOOST_CHECK(field.length() == 5U); - // BOOST_CHECK(&(*field.value().begin()) == HelloStr); - - static const std::vector ExpectedBuf = {'h', 'e', 'l', 'l', 'o'}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value() = "foo"; - BOOST_CHECK(field.value().size() == 3U); - BOOST_CHECK(std::string(field.value().data()) == "foo"); - BOOST_CHECK(field.length() == 5U); - - static const std::vector ExpectedBuf2 = {'f', 'o', 'o', 0x0, 0x0}; - write_read_field(field, ExpectedBuf2.begin(), ExpectedBuf2.size()); - - status_type status; - field = pack(ExpectedBuf2, status); - BOOST_CHECK(field.value() == "foo"); -} - -BOOST_AUTO_TEST_CASE(test85) { - typedef types::string, option::sequence_fixed_size<5>> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - static_assert(testing_type::min_length() == 5U, "Invalid min length"); - static_assert(testing_type::max_length() == 5U, "Invalid max length"); - - testing_type field; - - field.value() = "blabla"; - BOOST_CHECK(field.value().size() == 6U); - BOOST_CHECK(field.length() == 5U); - - static const std::vector ExpectedBuf = {'b', 'l', 'a', 'b', 'l'}; - - std::vector outBuf; - auto writeIter = std::back_inserter(outBuf); - status_type es = field.write(writeIter, outBuf.max_size()); - BOOST_CHECK(es == status_type::success); - BOOST_CHECK(outBuf.size() == ExpectedBuf.size()); - BOOST_CHECK(std::equal(outBuf.begin(), outBuf.end(), std::begin(ExpectedBuf))); -} - -BOOST_AUTO_TEST_CASE(test86) { - typedef types::integral, std::uint8_t, option::valid_num_value_range_override<0, 10>, - option::valid_num_value_range<20, 30>, option::default_num_value<20>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.value() == 20); - BOOST_CHECK(!field.valid()); - field.value() = 5U; - BOOST_CHECK(field.valid()); -} - -BOOST_AUTO_TEST_CASE(test87) { - typedef types::array_list< - field_type, - types::integral, std::uint8_t, option::valid_num_value_range<0, 5>>, - option::sequence_size_field_prefix, std::uint16_t>>, - option::sequence_elem_ser_length_field_prefix, std::uint8_t>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == sizeof(std::uint16_t)); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 0U); - - static const std::vector Buf = {0x0, 0x4, 0x1, 0x0, 0x1, 0x1, 0x1, 0x2, 0x1, 0x3}; - - status_type status; - field = pack(Buf, status); - BOOST_CHECK(field.length() == Buf.size()); - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 4U); - - field.value().resize(5); - static const std::vector ExpectedBuf = {0x0, 0x5, 0x1, 0x0, 0x1, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x0}; - BOOST_CHECK(field.valid()); - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - static const std::vector Buf2 = {0x0, 0x4, 0x2, 0x0, 0x1, 0x2, 0x3, 0x4, 0x2, 0x5, 0x6, 0x2, 0x7, 0x8}; - - field = pack(Buf2, status); - - BOOST_CHECK(field.length() == Buf2.size() - 4U); - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.value().size() == 4U); - BOOST_CHECK(field.value()[0].value() == 0x0); - BOOST_CHECK(field.value()[1].value() == 0x3); - BOOST_CHECK(field.value()[2].value() == 0x5); - BOOST_CHECK(field.value()[3].value() == 0x7); -} - -BOOST_AUTO_TEST_CASE(test88) { - typedef types::array_list< - field_type, - types::bundle< - field_type, - std::tuple, std::uint8_t>, - types::string, option::sequence_size_field_prefix, std::uint8_t>>>>>, - option::sequence_size_field_prefix, std::uint8_t>>, - option::sequence_elem_ser_length_field_prefix< - types::integral, std::uint32_t, option::var_length<1, 4>>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == sizeof(std::uint8_t)); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 0U); - - static const std::vector Buf - = {0x2, 0x9, 0x1, 0x5, 'h', 'e', 'l', 'l', 'o', 0xa, 0xb, 0x7, 0x2, 0x3, 'b', 'l', 'a', 0xc, 0xd}; - - status_type status; - field = pack(Buf, status); - auto &vec = field.value(); - BOOST_CHECK(vec.size() == 2U); - auto &bundle0 = vec[0]; - auto &bundle1 = vec[1]; - BOOST_CHECK(std::get<0>(bundle0.value()).value() == 1U); - BOOST_CHECK(std::get<1>(bundle0.value()).value() == "hello"); - BOOST_CHECK(std::get<0>(bundle1.value()).value() == 2U); - BOOST_CHECK(std::get<1>(bundle1.value()).value() == "bla"); - - static const std::vector ExpectedBuf - = {0x2, 0x7, 0x1, 0x5, 'h', 'e', 'l', 'l', 'o', 0x5, 0x2, 0x3, 'b', 'l', 'a'}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value().resize(1); - auto &intField = std::get<0>(field.value()[0].value()); - intField.value() = 4U; - auto &stringField = std::get<1>(field.value()[0].value()); - stringField.value().clear(); - for (auto idx = 0; idx < 128; ++idx) { - stringField.value().push_back('a'); - } - - std::vector expBuf; - expBuf.push_back(0x1); // count - expBuf.push_back(0x81); // high byte of length - expBuf.push_back(0x02); // low byte of length - expBuf.push_back(0x4); // value of first integral byte - expBuf.push_back((char)128); // length of string - for (auto idx = 0; idx < 128; ++idx) { - expBuf.push_back('a'); // string itself - } - write_read_field(field, &expBuf[0], expBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test89) { - typedef types::array_list< - field_type, - types::bundle< - field_type, - std::tuple, std::uint32_t, option::var_length<1, 4>>, - types::string, - option::sequence_size_field_prefix, std::uint16_t, option::var_length<1, 2>>>>>>, - option::sequence_ser_length_field_prefix< - types::integral, std::uint32_t, option::var_length<1, 4>>>, - option::sequence_elem_ser_length_field_prefix< - types::integral, std::uint32_t, option::var_length<1, 4>>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == sizeof(std::uint8_t)); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 0U); - - static const std::vector Buf - = {18, 0x9, 0x1, 0x5, 'h', 'e', 'l', 'l', 'o', 0xa, 0xb, 0x7, 0x2, 0x3, 'b', 'l', 'a', 0xc, 0xd}; - - status_type status; - field = pack(Buf, status); - auto &vec = field.value(); - BOOST_CHECK(vec.size() == 2U); - auto &bundle0 = vec[0]; - auto &bundle1 = vec[1]; - BOOST_CHECK(std::get<0>(bundle0.value()).value() == 1U); - BOOST_CHECK(std::get<1>(bundle0.value()).value() == "hello"); - BOOST_CHECK(std::get<0>(bundle1.value()).value() == 2U); - BOOST_CHECK(std::get<1>(bundle1.value()).value() == "bla"); - - static const std::vector ExpectedBuf - = {14, 0x7, 0x1, 0x5, 'h', 'e', 'l', 'l', 'o', 0x5, 0x2, 0x3, 'b', 'l', 'a'}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value().resize(1); - auto &intField = std::get<0>(field.value()[0].value()); - intField.value() = 0x4000; - auto &stringField = std::get<1>(field.value()[0].value()); - stringField.value().clear(); - for (auto idx = 0; idx < 128; ++idx) { - stringField.value().push_back('a'); - } - - auto expTotalLength = 2 + 2 + 3 + 2 + 128; - BOOST_CHECK(field.length() == expTotalLength); - - std::vector expBuf; - static const std::vector totalLenEncoding = {(char)0x87, 0x1}; - static const std::vector elemLenEncoding = {(char)0x85, 0x1}; - static const std::vector intEncoding = {(char)0x80, (char)0x80, 0x1}; - static const std::vector stringLenEncoding = {(char)0x80, 0x1}; - - expBuf.insert(expBuf.end(), totalLenEncoding.begin(), totalLenEncoding.end()); - expBuf.insert(expBuf.end(), elemLenEncoding.begin(), elemLenEncoding.end()); - expBuf.insert(expBuf.end(), intEncoding.begin(), intEncoding.end()); - expBuf.insert(expBuf.end(), stringLenEncoding.begin(), stringLenEncoding.end()); - - for (auto idx = 0; idx < 128; ++idx) { - expBuf.push_back('a'); // string itself - } - write_read_field(field, &expBuf[0], expBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test90) { - typedef types::array_list< - field_type, - types::bundle, std::tuple, std::uint8_t>, - types::integral, std::uint16_t>>>, - option::sequence_size_field_prefix, std::uint8_t>>, - option::sequence_elem_fixed_ser_length_field_prefix< - types::integral, std::uint32_t, option::var_length<1, 4>>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == 2U); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 0U); - - static const std::vector Buf = {0x2, 0x4, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}; - - status_type status; - field = pack(Buf, status); - auto &vec = field.value(); - BOOST_CHECK(vec.size() == 2U); - auto &bundle0 = vec[0]; - auto &bundle1 = vec[1]; - BOOST_CHECK(std::get<0>(bundle0.value()).value() == 0x1); - BOOST_CHECK(std::get<1>(bundle0.value()).value() == 0x0203); - BOOST_CHECK(std::get<0>(bundle1.value()).value() == 0x5); - BOOST_CHECK(std::get<1>(bundle1.value()).value() == 0x0607); - - static const std::vector ExpectedBuf = {0x2, 0x3, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); - - field.value().clear(); - static const std::vector EmptyExpectedBuf = {0x0}; - - write_read_field(field, EmptyExpectedBuf.begin(), EmptyExpectedBuf.size()); - BOOST_CHECK(field.length() == 1U); -} - -BOOST_AUTO_TEST_CASE(test91) { - typedef types::array_list< - field_type, - types::bundle, std::tuple, std::uint8_t>, - types::integral, std::uint16_t>>>, - option::sequence_fixed_size<2>, - option::sequence_elem_fixed_ser_length_field_prefix< - types::integral, std::uint32_t, option::var_length<1, 4>>>> - testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - BOOST_CHECK(testing_type::min_length() == 7U); - - testing_type field; - BOOST_CHECK(field.valid()); - BOOST_CHECK(field.value().size() == 0U); - - static const std::vector Buf = {0x4, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}; - - status_type status; - field = pack(Buf, status); - auto &vec = field.value(); - BOOST_CHECK(vec.size() == 2U); - auto &bundle0 = vec[0]; - auto &bundle1 = vec[1]; - BOOST_CHECK(std::get<0>(bundle0.value()).value() == 0x1); - BOOST_CHECK(std::get<1>(bundle0.value()).value() == 0x0203); - BOOST_CHECK(std::get<0>(bundle1.value()).value() == 0x5); - BOOST_CHECK(std::get<1>(bundle1.value()).value() == 0x0607); - - static const std::vector ExpectedBuf = {0x3, 0x1, 0x2, 0x3, 0x5, 0x6, 0x7}; - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test92) { - typedef std::tuple, std::uint8_t>, - types::integral, std::uint8_t>, - types::integral, std::uint8_t>> - BitfileMembers; - - typedef types::bitfield, BitfileMembers> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(!field.set_version(5U)); - static_cast(field); - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.member_bit_length<0>() == 8U); - BOOST_CHECK(field.member_bit_length<1>() == 8U); - BOOST_CHECK(field.member_bit_length<2>() == 8U); - - static const std::vector Buf = {(char)0x1, (char)0x2, (char)0x3}; - - status_type status; - field = pack(Buf, status); - auto &members = field.value(); - auto &mem1 = std::get<0>(members); - BOOST_CHECK(mem1.value() == 0x1); - - auto &mem2 = std::get<1>(members); - BOOST_CHECK(mem2.value() == 0x2); - - auto &mem3 = std::get<2>(members); - BOOST_CHECK(mem3.value() == 0x3); -} - -BOOST_AUTO_TEST_CASE(test93) { - typedef std::tuple, std::uint8_t, option::fixed_bit_length<4>, - option::default_num_value<0xf>>, - types::integral, std::int16_t, option::default_num_value<2016>, - option::num_value_ser_offset<-2000>, option::fixed_bit_length<8>>, - types::integral, std::uint16_t, option::fixed_bit_length<12>, - option::default_num_value<0x801>>> - BitfileMembers; - - typedef types::bitfield, BitfileMembers> testing_type; - - static_assert(!testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - static_cast(field); - BOOST_CHECK(field.length() == 3U); - BOOST_CHECK(field.member_bit_length<0>() == 4U); - BOOST_CHECK(field.member_bit_length<1>() == 8U); - BOOST_CHECK(field.member_bit_length<2>() == 12U); - - auto &members = field.value(); - auto &mem1 = std::get<0>(members); - BOOST_CHECK(mem1.value() == 0xf); - auto &mem2 = std::get<1>(members); - BOOST_CHECK(mem2.value() == 2016); - auto &mem3 = std::get<2>(members); - BOOST_CHECK(mem3.value() == 0x801); - - static const std::vector ExpectedBuf = {0x0f, 0x11, (char)0x80}; - - write_read_field(field, ExpectedBuf.begin(), ExpectedBuf.size()); -} - -BOOST_AUTO_TEST_CASE(test94) { - using Mem1 = types::integral, std::uint16_t>; - - struct Mem2 : public types::integral, std::uint16_t, option::has_custom_version_update> { - bool set_version(unsigned) { - return true; - } - }; - - typedef types::bundle, std::tuple> testing_type; - - static_assert(testing_type::is_version_dependent(), "Invalid version dependency assumption"); - testing_type field; - BOOST_CHECK(field.set_version(5U)); -} - -BOOST_AUTO_TEST_CASE(test95) { - using Mem1 = types::integral, std::uint16_t>; - - using Mem2 = types::optional, option::exists_by_default>; - - typedef types::bundle, std::tuple> testing_type; - - static_assert(testing_type::is_version_dependent(), "Invalid version dependency assumption"); - - testing_type field; - BOOST_CHECK(field.length() == 4U); - BOOST_CHECK(!field.set_version(5U)); - BOOST_CHECK(field.length() == 4U); - BOOST_CHECK(field.set_version(4U)); - BOOST_CHECK(field.length() == 2U); - BOOST_CHECK(field.set_version(15U)); - BOOST_CHECK(field.length() == 4U); -} - -BOOST_AUTO_TEST_CASE(test96) { - using Mem1 = types::integral, std::uint8_t, option::fixed_bit_length<4>>; - - struct Mem2 : public types::integral, std::uint8_t, option::has_custom_version_update, - option::fixed_bit_length<4>> { - bool set_version(unsigned) { - return true; - } - }; - - typedef types::bitfield, std::tuple> testing_type; - - static_assert(testing_type::is_version_dependent(), "Invalid version dependency assumption"); - testing_type field; - BOOST_CHECK(field.set_version(5U)); -} - -// BOOST_AUTO_TEST_CASE(test97) { -// using Mem1 = types::integral, std::uint16_t>; - -// using Mem2 = types::optional, option::exists_by_default>; - -// using ListElem = types::bundle, std::tuple>; - -// static_assert(ListElem::is_version_dependent(), "Invalid version dependency assumption"); - -// using testing_type = types::array_list, ListElem>; - -// static_assert(testing_type::is_version_dependent(), "Invalid version dependency assumption"); - -// testing_type field; -// field.value().resize(1); -// BOOST_CHECK(field.length() == 4U); -// BOOST_CHECK(field.set_version(1U)); -// BOOST_CHECK(field.length() == 2U); - -// do { -// accumulator_set acc = accumulator_set(field); - -// static const std::vector Buf1 = {(char)0x01, (char)0x02}; - -// field = pack(Buf1.begin(), Buf1.end(), acc); -// BOOST_CHECK(field.value().size() == 1U); -// auto &members = field.value()[0].value(); -// auto &mem1 = std::get<0>(members); -// auto &mem2 = std::get<1>(members); -// BOOST_CHECK(mem1.value() == 0x102); -// BOOST_CHECK(mem2.is_missing()); - -// BOOST_CHECK(field.set_version(15U)); -// BOOST_CHECK(mem2.does_exist()); -// BOOST_CHECK(field.length() == 4U); -// } while (false); - -// do { -// accumulator_set acc = accumulator_set(field); - -// static const std::vector Buf2 = {(char)0x03, (char)0x04, (char)0x05, (char)0x06}; - -// field = pack(Buf2, status, acc); -// BOOST_CHECK(field.value().size() == 1U); -// auto &members = field.value()[0].value(); -// auto &mem1 = std::get<0>(members); -// auto &mem2 = std::get<1>(members); -// BOOST_CHECK(field.length() == 4U); -// BOOST_CHECK(mem2.does_exist()); -// BOOST_CHECK(mem1.value() == 0x304); -// BOOST_CHECK(mem2.field().value() == 0x506); -// } while (false); -// } - -BOOST_AUTO_TEST_CASE(test98) { - using testing_type - = types::integral, std::uint8_t, option::invalid_by_default, option::version_storage>; - - testing_type field; - BOOST_CHECK(!field.valid()); - BOOST_CHECK(field.get_version() == 0U); - BOOST_CHECK(field.set_version(5U)); - BOOST_CHECK(field.get_version() == 5U); - - using Field2 - = types::bitmask_value, option::fixed_length<1U>, option::default_num_value<0x6U>, - option::version_storage, option::bitmask_reserved_bits<0xc2U, 0x2U>>; - - Field2 field2; - BOOST_CHECK(field2.get_version() == 0U); - BOOST_CHECK(field2.set_version(5U)); - BOOST_CHECK(field2.get_version() == 5U); -} - -// BOOST_AUTO_TEST_CASE(test99) { -// typedef types::array_list, std::uint8_t, option::sequence_length_forcing_enabled> Field1; - -// static_assert(!Field1::is_version_dependent(), "Invalid version dependency assumption"); - -// Field1 field1; -// BOOST_CHECK(field1.valid()); - -// field1.force_read_length(4U); - -// static const std::vector Buf = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}; - -// accumulator_set acc1 = accumulator_set(field1); - -// field1 = pack(Buf.begin(), Buf.end(), acc1); -// BOOST_CHECK(field1.value().size() == 4U); -// BOOST_CHECK(field1.length() == 4U); -// BOOST_CHECK(field1.valid()); -// field1.clear_read_length_forcing(); - -// typedef types::string, option::sequence_length_forcing_enabled> Field2; - -// static_assert(!Field2::is_version_dependent(), "Invalid version dependency assumption"); - -// Field2 field2; -// BOOST_CHECK(field2.valid()); - -// field2.force_read_length(5U); - -// static const std::vector Buf2 = {'h', 'e', 'l', 'l', 'o', 'a', 'b', 'c', 'd'}; - -// accumulator_set acc2 = accumulator_set(field2); - -// field2 = pack(Buf2, status, acc2); -// BOOST_CHECK(field2.value() == "hello"); -// BOOST_CHECK(field2.valid()); -// field2.clear_read_length_forcing(); -// } - -BOOST_AUTO_TEST_CASE(test100) { - typedef types::integral, std::int64_t, option::fixed_length<5U, false>, - option::num_value_ser_offset<0x492559f64fLL>, option::scaling_ratio<1, 0x174878e800LL>> - testing_type; - - testing_type field; - - static const std::vector Buf = {(char)0x87, (char)0x54, (char)0xa2, (char)0x03, (char)0xb9}; - - status_type status; - field = pack(Buf, status); - - BOOST_CHECK(std::abs(field.get_scaled() - 2.67) < 0.1); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/expression.hpp b/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/expression.hpp index 080026cda8..a8f903cf33 100644 --- a/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/expression.hpp +++ b/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/expression.hpp @@ -28,7 +28,6 @@ #include #include -#include #include #include #include @@ -48,15 +47,15 @@ namespace nil { template struct flat_pow_operation { using type = - nil::marshalling::types::bundle< + nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // power - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // type - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // child_index - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral > >; }; @@ -65,19 +64,19 @@ namespace nil { template struct flat_binary_arithmetic_operation { using type = - nil::marshalling::types::bundle< + nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // op - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // left_type - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // left_index - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // right_type - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // right_index - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral > >; }; @@ -87,118 +86,102 @@ namespace nil { struct expression { using type = - nil::marshalling::types::bundle< + nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::vector> terms - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename term::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + typename term::type >, // std::vector pow_operations - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename flat_pow_operation::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + typename flat_pow_operation::type >, // std::vector binary_operations - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename flat_binary_arithmetic_operation::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + typename flat_binary_arithmetic_operation::type >, // flat_node_type root_type; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // size_t root_index; - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral > >; }; template - typename flat_pow_operation>::type + typename flat_pow_operation>::type fill_power_operation(const math::flat_pow_operation& power_op) { - using TTypeBase = nil::marshalling::field_type; - return typename flat_pow_operation>::type( + using TTypeBase = nil::crypto3::marshalling::field_type; + return typename flat_pow_operation>::type( std::make_tuple( - nil::marshalling::types::integral(power_op.power), - nil::marshalling::types::integral((std::uint8_t)power_op.type), - nil::marshalling::types::integral(power_op.child_index))); + nil::crypto3::marshalling::types::integral(power_op.power), + nil::crypto3::marshalling::types::integral((std::uint8_t)power_op.type), + nil::crypto3::marshalling::types::integral(power_op.child_index))); } template - typename flat_binary_arithmetic_operation>::type + typename flat_binary_arithmetic_operation>::type fill_binary_operation(const math::flat_binary_arithmetic_operation& bin_op) { - using TTypeBase = nil::marshalling::field_type; - return typename flat_binary_arithmetic_operation>::type( + using TTypeBase = nil::crypto3::marshalling::field_type; + return typename flat_binary_arithmetic_operation>::type( std::make_tuple( - nil::marshalling::types::integral((std::uint8_t)bin_op.op), - nil::marshalling::types::integral((std::uint8_t)bin_op.left_type), - nil::marshalling::types::integral(bin_op.left_index), - nil::marshalling::types::integral((std::uint8_t)bin_op.right_type), - nil::marshalling::types::integral(bin_op.right_index))); + nil::crypto3::marshalling::types::integral((std::uint8_t)bin_op.op), + nil::crypto3::marshalling::types::integral((std::uint8_t)bin_op.left_type), + nil::crypto3::marshalling::types::integral(bin_op.left_index), + nil::crypto3::marshalling::types::integral((std::uint8_t)bin_op.right_type), + nil::crypto3::marshalling::types::integral(bin_op.right_index))); } template - typename expression, ExpressionType>::type + typename expression, ExpressionType>::type fill_expression(const ExpressionType &expr) { math::expression_flattener flattener(expr); const auto& flat_expr = flattener.get_result(); - using TTypeBase = nil::marshalling::field_type; - using size_t_marshalling_type = nil::marshalling::types::integral; + using TTypeBase = nil::crypto3::marshalling::field_type; // Fill the terms. - using term_marshalling_type = - typename term::type; - using term_vector_marshalling_type = nil::marshalling::types::array_list< - TTypeBase, term_marshalling_type, - nil::marshalling::option::sequence_size_field_prefix>; - term_vector_marshalling_type filled_terms; + nil::crypto3::marshalling::types::standard_array_list::type> filled_terms; for (const auto &term : flat_expr.terms) { filled_terms.value().push_back( fill_term(term)); } // Fill the power operations. - using pow_operation_type = typename flat_pow_operation::type; - using pow_vector_marshalling_type = nil::marshalling::types::array_list< - TTypeBase, pow_operation_type, nil::marshalling::option::sequence_size_field_prefix< - size_t_marshalling_type>>; - pow_vector_marshalling_type filled_powers; + nil::crypto3::marshalling::types::standard_array_list::type> filled_powers; for (const auto &power : flat_expr.pow_operations) { filled_powers.value().push_back(fill_power_operation(power)); } // Fill the binary operations. - using binary_operation_type = typename flat_binary_arithmetic_operation::type; - using binary_operation_vector_marshalling_type = nil::marshalling::types::array_list< - TTypeBase, binary_operation_type, - nil::marshalling::option::sequence_size_field_prefix>; - binary_operation_vector_marshalling_type filled_binary_opeations; + nil::crypto3::marshalling::types::standard_array_list::type> filled_binary_operations; for (const auto &bin_op : flat_expr.binary_operations) { - filled_binary_opeations.value().push_back( + filled_binary_operations.value().push_back( fill_binary_operation(bin_op)); } - return typename expression, ExpressionType>::type( + return typename expression, ExpressionType>::type( std::make_tuple( filled_terms, filled_powers, - filled_binary_opeations, - nil::marshalling::types::integral((std::uint8_t)flat_expr.root_type), - nil::marshalling::types::integral(flat_expr.root_index))); + filled_binary_operations, + nil::crypto3::marshalling::types::integral((std::uint8_t)flat_expr.root_type), + nil::crypto3::marshalling::types::integral(flat_expr.root_index))); } template - math::flat_pow_operation - make_power_operation(const typename flat_pow_operation>::type& filled_power_op) { + math::flat_pow_operation make_power_operation( + const typename flat_pow_operation>::type& filled_power_op) + { math::flat_pow_operation power_op; power_op.power = std::get<0>(filled_power_op.value()).value(); power_op.type = static_cast(std::get<1>(filled_power_op.value()).value()); @@ -207,8 +190,9 @@ namespace nil { } template - math::flat_binary_arithmetic_operation - make_binary_operation(const typename flat_binary_arithmetic_operation>::type& filled_power_op) { + math::flat_binary_arithmetic_operation make_binary_operation( + const typename flat_binary_arithmetic_operation>::type& filled_power_op) + { math::flat_binary_arithmetic_operation bin_op; bin_op.op = static_cast(std::get<0>(filled_power_op.value()).value()); bin_op.left_type = static_cast(std::get<1>(filled_power_op.value()).value()); @@ -220,9 +204,8 @@ namespace nil { template ExpressionType make_expression( - const typename expression, - ExpressionType>::type &filled_expr) { - + const typename expression, ExpressionType>::type &filled_expr) + { using ArithmeticOperatorType = typename ExpressionType::binary_arithmetic_operation_type::ArithmeticOperatorType; math::flat_expression flat_expr; diff --git a/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/polynomial.hpp b/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/polynomial.hpp index 5cac2eb2cb..98b880018f 100644 --- a/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/polynomial.hpp +++ b/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/polynomial.hpp @@ -58,7 +58,7 @@ namespace nil { }; template - typename polynomial, PolynomialType, std::enable_if_t< + typename polynomial, PolynomialType, std::enable_if_t< nil::crypto3::math::is_polynomial::value>>::type fill_polynomial(const PolynomialType &f) { @@ -70,10 +70,9 @@ namespace nil { } template - PolynomialType - make_polynomial( + PolynomialType make_polynomial( const typename polynomial< - nil::marshalling::field_type, + nil::crypto3::marshalling::field_type, PolynomialType, std::enable_if_t::value>>::type &filled_polynomial) { auto val = nil::crypto3::marshalling::types::make_field_element_vector< @@ -90,11 +89,11 @@ namespace nil { template struct polynomial::value>> { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // degree - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // values field_element_vector > @@ -102,17 +101,17 @@ namespace nil { }; template - typename polynomial, PolynomialDFSType, std::enable_if_t< + typename polynomial, PolynomialDFSType, std::enable_if_t< nil::crypto3::math::is_polynomial_dfs::value>>::type fill_polynomial(const PolynomialDFSType &f) { - using TTypeBase = nil::marshalling::field_type; - using result_type = typename polynomial, PolynomialDFSType>::type; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = typename polynomial, PolynomialDFSType>::type; std::vector val; for( auto it=f.begin(); it != f.end(); it++){ val.push_back(*it); } return result_type(std::make_tuple( - nil::marshalling::types::integral(f.degree()), + nil::crypto3::marshalling::types::integral(f.degree()), nil::crypto3::marshalling::types::fill_field_element_vector< typename PolynomialDFSType::value_type, Endianness @@ -121,12 +120,12 @@ namespace nil { } template - PolynomialDFSType - make_polynomial(const typename polynomial< - nil::marshalling::field_type, + PolynomialDFSType make_polynomial(const typename polynomial< + nil::crypto3::marshalling::field_type, PolynomialDFSType, std::enable_if_t::value - >>::type &filled_polynomial) { + >>::type &filled_polynomial) + { auto val = nil::crypto3::marshalling::types::make_field_element_vector< typename PolynomialDFSType::value_type, Endianness>(std::get<1>(filled_polynomial.value())); @@ -138,15 +137,15 @@ namespace nil { // Polynomial vector marshalling, regardless of the form of the polynomial. /////////////////////////////////////////////// template - using polynomial_vector = nil::marshalling::types::standard_array_list< + using polynomial_vector = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, typename polynomial::type >; template - polynomial_vector, PolynomialType> + polynomial_vector, PolynomialType> fill_polynomial_vector(const std::vector &f) { - polynomial_vector, PolynomialType> result; + polynomial_vector, PolynomialType> result; for (auto it=f.begin(); it != f.end(); it++) { result.value().push_back(fill_polynomial(*it)); } @@ -155,7 +154,8 @@ namespace nil { template std::vector make_polynomial_vector( - const polynomial_vector, PolynomialType> &filled_polynomial_vector) { + const polynomial_vector, PolynomialType> &filled_polynomial_vector) + { std::vector result; result.reserve(filled_polynomial_vector.value().size()); for (std::size_t i = 0; i < filled_polynomial_vector.value().size(); i++) { diff --git a/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/term.hpp b/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/term.hpp index 6dfa6d3a78..8ca022b0c7 100644 --- a/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/term.hpp +++ b/crypto3/libs/marshalling/math/include/nil/crypto3/marshalling/math/types/term.hpp @@ -47,35 +47,30 @@ namespace nil { template struct term { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // assignment_type coeff field_element, // std::vector vars - nil::marshalling::types::array_list< - TTypeBase, typename variable::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - > + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, typename variable::type> > >; }; template - typename term, NonLinearTerm>::type + typename term, NonLinearTerm>::type fill_term(const NonLinearTerm &t) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using result_type = typename term::type; - using size_t_marshalling_type = nil::marshalling::types::integral; using field_element_marhsalling_type = field_element; using variable_marshalling_type = typename variable::type; - using variable_vector_marshalling_type = nil::marshalling::types::array_list< - TTypeBase, variable_marshalling_type, - nil::marshalling::option::sequence_size_field_prefix>; + using variable_vector_marshalling_type = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, variable_marshalling_type>; variable_vector_marshalling_type filled_vars; for (const auto &var : t.get_vars()) { @@ -87,9 +82,9 @@ namespace nil { } template - NonLinearTerm - make_term(const typename term, - NonLinearTerm>::type &filled_term) { + NonLinearTerm make_term( + const typename term, NonLinearTerm>::type &filled_term) + { std::vector vars; auto coeff = std::get<0>(filled_term.value()).value(); vars.reserve(std::get<1>(filled_term.value()).value().size()); diff --git a/crypto3/libs/marshalling/multiprecision/CMakeLists.txt b/crypto3/libs/marshalling/multiprecision/CMakeLists.txt index d3f32f2aa8..d5cd627942 100644 --- a/crypto3/libs/marshalling/multiprecision/CMakeLists.txt +++ b/crypto3/libs/marshalling/multiprecision/CMakeLists.txt @@ -18,6 +18,8 @@ cm_setup_version(VERSION 0.1.0 PREFIX ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_ add_library(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE) add_library(${CMAKE_WORKSPACE_NAME}::${CURRENT_PROJECT_NAME} ALIAS ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME}) +set_target_properties(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} PROPERTIES CXX_STANDARD 20) + set_target_properties(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} PROPERTIES EXPORT_NAME ${CURRENT_PROJECT_NAME}) diff --git a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/inference.hpp b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/inference.hpp index 93add2e5b6..58f25f8d32 100644 --- a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/inference.hpp +++ b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/inference.hpp @@ -26,33 +26,34 @@ #ifndef CRYPTO3_MARSHALLING_MULTIPRECISION_INFERENCE_TYPE_TRAITS_HPP #define CRYPTO3_MARSHALLING_MULTIPRECISION_INFERENCE_TYPE_TRAITS_HPP -namespace nil { - namespace crypto3 { - namespace marshalling { - namespace types { - template - class integral; - } // namespace types - } // namespace marshalling - } // namespace crypto3 +#include +#include +#include +#include + +namespace nil::crypto3 { + namespace marshalling { + namespace types { + template + class integral; + } // namespace types + template class is_compatible; - template - class is_compatible , void> { + template + class is_compatible , void> { using default_endianness = option::big_endian; - public: + public: template - using type = typename nil::crypto3::marshalling::types::integral, - boost::multiprecision::number, TOptions...>; + using type = typename nil::crypto3::marshalling::types::integral, + nil::crypto3::multiprecision::big_uint, TOptions...>; static const bool value = true; static const bool fixed_size = true; }; - } // namespace marshalling } // namespace nil -#endif // CRYPTO3_MARSHALLING_MULTIPRECISION_INFERENCE_TYPE_TRAITS_HPP \ No newline at end of file +#endif // CRYPTO3_MARSHALLING_MULTIPRECISION_INFERENCE_TYPE_TRAITS_HPP diff --git a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/processing/integral.hpp b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/processing/integral.hpp index 685b3f8a70..367a888d35 100644 --- a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/processing/integral.hpp +++ b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/processing/integral.hpp @@ -28,18 +28,17 @@ #include #include -#include #include -#include -#include -#include +#include +#include + #include namespace nil { namespace crypto3 { namespace marshalling { - namespace processing { + namespace multiprecision::processing { /// @brief Write part of integral value into the output area using big /// endian notation. @@ -77,8 +76,8 @@ namespace nil { if (value > 0) { std::size_t begin_index = - chunks_count - ((boost::multiprecision::msb(value) + 1) / chunk_bits + - (((boost::multiprecision::msb(value) + 1) % chunk_bits) ? 1 : 0)); + chunks_count - ((nil::crypto3::multiprecision::msb(value) + 1) / chunk_bits + + (((nil::crypto3::multiprecision::msb(value) + 1) % chunk_bits) ? 1 : 0)); std::fill(iter, iter + begin_index, 0); @@ -106,7 +105,7 @@ namespace nil { std::size_t chunk_bits = sizeof(typename std::iterator_traits::value_type) * units_bits; std::size_t chunks_count = (value_size / chunk_bits) + ((value_size % chunk_bits) ? 1 : 0); - boost::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, true); + nil::crypto3::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, true); return serializedValue; } @@ -128,7 +127,7 @@ namespace nil { std::size_t chunk_bits = sizeof(typename std::iterator_traits::value_type) * units_bits; std::size_t chunks_count = (TSize / chunk_bits) + ((TSize % chunk_bits) ? 1 : 0); - boost::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, true); + nil::crypto3::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, true); return serializedValue; } @@ -163,8 +162,8 @@ namespace nil { std::size_t chunks_count = (TSize / chunk_bits) + ((TSize % chunk_bits) ? 1 : 0); if (value > 0) { - std::size_t begin_index = ((boost::multiprecision::msb(value) + 1) / chunk_bits + - (((boost::multiprecision::msb(value) + 1) % chunk_bits) ? 1 : 0)); + std::size_t begin_index = ((nil::crypto3::multiprecision::msb(value) + 1) / chunk_bits + + (((nil::crypto3::multiprecision::msb(value) + 1) % chunk_bits) ? 1 : 0)); if (begin_index < chunks_count) { std::fill(iter + begin_index, iter + chunks_count, 0x00); @@ -192,7 +191,7 @@ namespace nil { std::size_t chunk_bits = sizeof(typename std::iterator_traits::value_type) * units_bits; std::size_t chunks_count = (value_size / chunk_bits) + ((value_size % chunk_bits) ? 1 : 0); - boost::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, false); + nil::crypto3::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, false); return serializedValue; } @@ -212,13 +211,13 @@ namespace nil { std::size_t chunk_bits = sizeof(typename std::iterator_traits::value_type) * units_bits; std::size_t chunks_count = (TSize / chunk_bits) + ((TSize % chunk_bits) ? 1 : 0); - boost::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, false); + nil::crypto3::multiprecision::import_bits(serializedValue, iter, iter + chunks_count, chunk_bits, false); return serializedValue; } /// @brief Same as write_big_endian() template - typename std::enable_if::value, + typename std::enable_if::value, void>::type write_data(T value, TIter &iter) { @@ -227,7 +226,7 @@ namespace nil { /// @brief Same as write_big_endian() template - typename std::enable_if::value, + typename std::enable_if::value, void>::type write_data(T value, TIter &iter) { @@ -236,7 +235,7 @@ namespace nil { /// @brief Same as write_little_endian() template - typename std::enable_if::value, + typename std::enable_if::value, void>::type write_data(T value, TIter &iter) { @@ -245,7 +244,7 @@ namespace nil { /// @brief Same as write_little_endian() template - typename std::enable_if::value, + typename std::enable_if::value, void>::type write_data(T value, TIter &iter) { @@ -254,7 +253,7 @@ namespace nil { /// @brief Same as read_big_endian() template - typename std::enable_if::value, T>::type + typename std::enable_if::value, T>::type read_data(TIter &iter, std::size_t value_size) { return read_big_endian(iter, value_size); @@ -262,7 +261,7 @@ namespace nil { /// @brief Same as read_little_endian() template - typename std::enable_if::value, + typename std::enable_if::value, T>::type read_data(TIter &iter, std::size_t value_size) { @@ -271,7 +270,7 @@ namespace nil { /// @brief Same as read_big_endian() template - typename std::enable_if::value, T>::type + typename std::enable_if::value, T>::type read_data(TIter &iter) { return read_big_endian(iter); @@ -279,7 +278,7 @@ namespace nil { /// @brief Same as read_little_endian() template - typename std::enable_if::value, + typename std::enable_if::value, T>::type read_data(TIter &iter) { diff --git a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_fixed_precision_type.hpp b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_fixed_precision_type.hpp deleted file mode 100644 index 3d27f0391f..0000000000 --- a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_fixed_precision_type.hpp +++ /dev/null @@ -1,171 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MARSHALLING_BASIC_INTEGRAL_FIXED_PRECISION_HPP -#define CRYPTO3_MARSHALLING_BASIC_INTEGRAL_FIXED_PRECISION_HPP - -#include - -#include - -#include - -#include -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace marshalling { - namespace types { - namespace detail { - template - class basic_integral : public TTypeBase { - - using backend_type = Backend; - using T = boost::multiprecision::number; - - using base_impl_type = TTypeBase; - - public: - using value_type = T; - using serialized_type = value_type; - - basic_integral() = default; - - explicit basic_integral(value_type val) : value_(val) { - } - - basic_integral(const basic_integral &) = default; - - basic_integral(basic_integral &&) = default; - - ~basic_integral() noexcept = default; - - basic_integral &operator=(const basic_integral &) = default; - - basic_integral &operator=(basic_integral &&) = default; - - const value_type &value() const { - return value_; - } - - value_type &value() { - return value_; - } - - static constexpr std::size_t length() { - return max_length(); - } - - static constexpr std::size_t min_length() { - return min_bit_length() / 8 + ((min_bit_length() % 8) ? 1 : 0); - } - - static constexpr std::size_t max_length() { - return max_bit_length() / 8 + ((max_bit_length() % 8) ? 1 : 0); - } - - static constexpr std::size_t bit_length() { - return max_bit_length(); - } - - static constexpr std::size_t min_bit_length() { - return boost::multiprecision::backends::min_precision::value == - UINT_MAX ? - INT_MAX : - boost::multiprecision::backends::min_precision::value; - } - - static constexpr std::size_t max_bit_length() { - return boost::multiprecision::backends::max_precision::value == - UINT_MAX ? - INT_MAX : - boost::multiprecision::backends::max_precision::value; - } - - static constexpr serialized_type to_serialized(value_type val) { - return static_cast(val); - } - - static constexpr value_type from_serialized(serialized_type val) { - return val; - } - - template - nil::marshalling::status_type read(TIter &iter, std::size_t size) { - - if (size < (std::is_same::value_type, bool>::value ? - bit_length() : length())) { - return nil::marshalling::status_type::not_enough_data; - } - - read_no_status(iter); - iter += (std::is_same::value_type, bool>::value ? - max_bit_length() : max_length()); - return nil::marshalling::status_type::success; - } - - template - void read_no_status(TIter &iter) { - value_ = crypto3::marshalling::processing:: - read_data(iter); - } - - template - nil::marshalling::status_type write(TIter &iter, std::size_t size) const { - if (size < (std::is_same::value_type, bool>::value ? - bit_length() : length())) { - return nil::marshalling::status_type::buffer_overflow; - } - - write_no_status(iter); - - iter += (std::is_same::value_type, bool>::value ? - max_bit_length() : max_length()); - return nil::marshalling::status_type::success; - } - - template - void write_no_status(TIter &iter) const { - crypto3::marshalling::processing::write_data(value_, - iter); - } - - private: - value_type value_ = static_cast(0); - }; - } // namespace detail - } // namespace types - } // namespace marshalling - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_MARSHALLING_BASIC_INTEGRAL_FIXED_PRECISION_HPP diff --git a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_non_fixed_precision_type.hpp b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_non_fixed_precision_type.hpp deleted file mode 100644 index bc512b4a14..0000000000 --- a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_non_fixed_precision_type.hpp +++ /dev/null @@ -1,163 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2017-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MARSHALLING_BASIC_INTEGRAL_NON_FIXED_PRECISION_HPP -#define CRYPTO3_MARSHALLING_BASIC_INTEGRAL_NON_FIXED_PRECISION_HPP - -#include - -#include - -#include - -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace marshalling { - namespace types { - namespace detail { - template - class basic_integral : public TTypeBase { - using T = boost::multiprecision::number; - - using base_impl_type = TTypeBase; - - std::size_t cur_length = 0; - public: - using value_type = T; - using serialized_type = value_type; - - basic_integral() = default; - - explicit basic_integral(value_type val) : value_(val) { - - std::size_t bits_count = boost::multiprecision::msb(val) + 1; - - cur_length = bits_count / 8 + (bits_count%8?1:0); - } - - basic_integral(const basic_integral &) = default; - - basic_integral(basic_integral &&) = default; - - ~basic_integral() noexcept = default; - - basic_integral &operator=(const basic_integral &) = default; - - basic_integral &operator=(basic_integral &&) = default; - - const value_type &value() const { - return value_; - } - - value_type &value() { - return value_; - } - - std::size_t length() { - return cur_length; - } - - static constexpr std::size_t min_length() { - return 0; - } - - constexpr std::size_t bit_length() { - return boost::multiprecision::msb(value_) + 1; - } - - // static constexpr std::size_t max_length() { - // return length(); - // } - - static constexpr serialized_type to_serialized(value_type val) { - return static_cast(val); - } - - static constexpr value_type from_serialized(serialized_type val) { - return val; - } - - template - nil::marshalling::status_type read(TIter &iter, std::size_t size) { - // if (size < length()) { - // return nil::marshalling::status_type::not_enough_data; - // } - - read_no_status(iter, size); - iter += size; - cur_length += size; - return nil::marshalling::status_type::success; - } - - // template - // void read_no_status(TIter &iter) { - // read_no_status(length()); - // } - - private: - template - void read_no_status(TIter &iter, std::size_t size) { - size = std::is_same_v::value_type, bool> ? - size : size * 8; - value_ = - crypto3::marshalling::processing::read_data( - iter, size); - } - - public: - template - nil::marshalling::status_type write(TIter &iter, std::size_t size) const { - // if (size < length()) { - // return nil::marshalling::status_type::buffer_overflow; - // } - - write_no_status(iter); - iter += size; - return nil::marshalling::status_type::success; - } - - template - void write_no_status(TIter &iter) const { - crypto3::marshalling::processing::write_data(value_, - iter); - } - - private: - value_type value_ = static_cast(0); - }; - } // namespace detail - } // namespace types - } // namespace marshalling - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_MARSHALLING_BASIC_INTEGRAL_NON_FIXED_PRECISION_HPP diff --git a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_type.hpp b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_type.hpp index 9179fff62e..e82b7c71e2 100644 --- a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_type.hpp +++ b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/detail/integral/basic_type.hpp @@ -23,27 +23,137 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MARSHALLING_BASIC_INTEGRAL_DEFINITION_HPP -#define CRYPTO3_MARSHALLING_BASIC_INTEGRAL_DEFINITION_HPP +#ifndef CRYPTO3_MARSHALLING_BASIC_INTEGRAL_FIXED_PRECISION_HPP +#define CRYPTO3_MARSHALLING_BASIC_INTEGRAL_FIXED_PRECISION_HPP +#include +#include #include -#include -#include +#include +#include + +#include + +#include +#include namespace nil { namespace crypto3 { namespace marshalling { namespace types { namespace detail { - template::value> - class basic_integral { }; + template + class basic_integral> : public TTypeBase { + + using base_impl_type = TTypeBase; + + public: + using value_type = nil::crypto3::multiprecision::big_uint; + using serialized_type = value_type; + + basic_integral() = default; + + explicit basic_integral(value_type val) : value_(val) { + } + + basic_integral(const basic_integral &) = default; + + basic_integral(basic_integral &&) = default; + + ~basic_integral() noexcept = default; + + basic_integral &operator=(const basic_integral &) = default; + + basic_integral &operator=(basic_integral &&) = default; + + const value_type &value() const { + return value_; + } + + value_type &value() { + return value_; + } + + static constexpr std::size_t length() { + return max_length(); + } + + static constexpr std::size_t min_length() { + return min_bit_length() / 8 + ((min_bit_length() % 8) ? 1 : 0); + } + + static constexpr std::size_t max_length() { + return max_bit_length() / 8 + ((max_bit_length() % 8) ? 1 : 0); + } + + static constexpr std::size_t bit_length() { + return max_bit_length(); + } + + static constexpr std::size_t min_bit_length() { + return value_type::Bits; + } + + static constexpr std::size_t max_bit_length() { + return value_type::Bits; + } + + static constexpr serialized_type to_serialized(value_type val) { + return static_cast(val); + } + + static constexpr value_type from_serialized(serialized_type val) { + return val; + } + + template + status_type read(TIter &iter, std::size_t size) { + + if (size < (std::is_same::value_type, bool>::value ? + bit_length() : length())) { + return status_type::not_enough_data; + } + + read_no_status(iter); + iter += (std::is_same::value_type, bool>::value ? + max_bit_length() : max_length()); + return status_type::success; + } + + template + void read_no_status(TIter &iter) { + value_ = multiprecision::processing:: + read_data(iter); + } + + template + status_type write(TIter &iter, std::size_t size) const { + if (size < (std::is_same::value_type, bool>::value ? + bit_length() : length())) { + return status_type::buffer_overflow; + } + + write_no_status(iter); + + iter += (std::is_same::value_type, bool>::value ? + max_bit_length() : max_length()); + return status_type::success; + } + + template + void write_no_status(TIter &iter) const { + multiprecision::processing:: + write_data(value_, iter); + } + + private: + value_type value_ = static_cast(0); + }; } // namespace detail } // namespace types } // namespace marshalling } // namespace crypto3 } // namespace nil -#endif // CRYPTO3_MARSHALLING_BASIC_INTEGRAL_DEFINITION_HPP +#endif // CRYPTO3_MARSHALLING_BASIC_INTEGRAL_FIXED_PRECISION_HPP diff --git a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/integral.hpp b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/integral.hpp index 93eabb2606..87d80ea525 100644 --- a/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/integral.hpp +++ b/crypto3/libs/marshalling/multiprecision/include/nil/crypto3/marshalling/multiprecision/types/integral.hpp @@ -26,12 +26,10 @@ #ifndef CRYPTO3_MARSHALLING_INTEGRAL_HPP #define CRYPTO3_MARSHALLING_INTEGRAL_HPP -#include -#include -#include +#include +#include #include - #include #include @@ -42,8 +40,7 @@ #include #include -#include -#include +#include #include namespace nil { @@ -53,61 +50,56 @@ namespace nil { /// @brief field_type that represent integral value. /// @tparam TTypeBase Base class for this field, expected to be a variant of - /// nil::marshalling::field_type. + /// nil::crypto3::marshalling::field_type. /// @tparam T Basic underlying integral type. /// @tparam TOptions Zero or more options that modify/refine default behaviour /// of the field. If no option is provided The field's value is serialized as is. /// @code - /// using MyFieldBase = nil::marshalling::field_type; + /// using MyFieldBase = nil::crypto3::marshalling::field_type; /// /// constexpr static const std::size_t modulus_bits = 381; - /// using modulus_type = - /// boost::multiprecision::number>; + /// using modulus_type = nil::crypto3::multiprecision::big_uint; /// using MyField = nil::crypto3::marshalling::types::integral; /// @endcode /// In the example above it will /// consume ?? bytes (because sizeof(modulus_type) == ??) and will /// be serialized using big endian notation.@n /// Supported options are: - /// @li @ref nil::marshalling::option::var_length - /// @li @ref nil::marshalling::option::num_value_ser_offset - /// @li @ref nil::marshalling::option::default_value_initializer or - /// nil::marshalling::option::default_num_value. - /// @li @ref nil::marshalling::option::contents_validator - /// @li @ref nil::marshalling::option::valid_num_value_range, @ref - /// nil::marshalling::option::ValidNumValue, - /// @ref nil::marshalling::option::ValidBigUnsignedNumValueRange, @ref - /// nil::marshalling::option::ValidBigUnsignedNumValue - /// @li @ref nil::marshalling::option::valid_ranges_clear - /// @li @ref nil::marshalling::option::contents_refresher - /// @li @ref nil::marshalling::option::has_custom_read - /// @li @ref nil::marshalling::option::has_custom_refresh - /// @li @ref nil::marshalling::option::fail_on_invalid - /// @li @ref nil::marshalling::option::ignore_invalid - /// @li @b nil::marshalling::option::Units* - all variants of value units, see + /// @li @ref nil::crypto3::marshalling::option::var_length + /// @li @ref nil::crypto3::marshalling::option::num_value_ser_offset + /// @li @ref nil::crypto3::marshalling::option::default_value_initializer or + /// nil::crypto3::marshalling::option::default_num_value. + /// @li @ref nil::crypto3::marshalling::option::contents_validator + /// @li @ref nil::crypto3::marshalling::option::valid_num_value_range, @ref + /// nil::crypto3::marshalling::option::ValidNumValue, + /// @ref nil::crypto3::marshalling::option::ValidBigUnsignedNumValueRange, @ref + /// nil::crypto3::marshalling::option::ValidBigUnsignedNumValue + /// @li @ref nil::crypto3::marshalling::option::valid_ranges_clear + /// @li @ref nil::crypto3::marshalling::option::contents_refresher + /// @li @ref nil::crypto3::marshalling::option::has_custom_read + /// @li @ref nil::crypto3::marshalling::option::has_custom_refresh + /// @li @ref nil::crypto3::marshalling::option::fail_on_invalid + /// @li @ref nil::crypto3::marshalling::option::ignore_invalid + /// @li @b nil::crypto3::marshalling::option::Units* - all variants of value units, see /// @ref sec_field_tutorial_integral_units for details. - /// @li nil::marshalling::option::empty_serialization - /// @li @ref nil::marshalling::option::invalid_by_default - /// @li @ref nil::marshalling::option::version_storage - /// @extends nil::marshalling::field_type + /// @li nil::crypto3::marshalling::option::empty_serialization + /// @li @ref nil::crypto3::marshalling::option::invalid_by_default + /// @li @ref nil::crypto3::marshalling::option::version_storage + /// @extends nil::crypto3::marshalling::field_type /// @headerfile nil/marshalling/types/integral.hpp template class integral; template - class integral, TOptions...> - : public ::nil::marshalling::types::detail::adapt_basic_field_type< - crypto3::marshalling::types::detail::basic_integral, - TOptions...> { + class integral, TOptions...> + : public detail::adapt_basic_field_type< + detail::basic_integral>, TOptions...> + { - using base_impl_type = ::nil::marshalling::types::detail::adapt_basic_field_type< - crypto3::marshalling::types::detail::basic_integral, - TOptions...>; + using base_impl_type = detail::adapt_basic_field_type< + detail::basic_integral>, TOptions...>; public: /// @brief endian_type used for serialization. @@ -117,10 +109,10 @@ namespace nil { using version_type = typename base_impl_type::version_type; /// @brief All the options provided to this class bundled into struct. - using parsed_options_type = ::nil::marshalling::types::detail::options_parser; + using parsed_options_type = ::nil::crypto3::marshalling::types::detail::options_parser; /// @brief Tag indicating type of the field - using tag = ::nil::marshalling::types::tag::integral; + using tag = ::nil::crypto3::marshalling::types::tag::integral; /// @brief Type of underlying integral value. /// @details Same as template parameter T to this class. @@ -194,7 +186,7 @@ namespace nil { /// @return Status of read operation. /// @post Iterator is advanced. template - nil::marshalling::status_type read(TIter &iter, std::size_t size) { + nil::crypto3::marshalling::status_type read(TIter &iter, std::size_t size) { return base_impl_type::read(iter, size); } @@ -214,7 +206,7 @@ namespace nil { /// @return Status of write operation. /// @post Iterator is advanced. template - nil::marshalling::status_type write(TIter &iter, std::size_t size) const { + nil::crypto3::marshalling::status_type write(TIter &iter, std::size_t size) const { return base_impl_type::write(iter, size); } @@ -234,7 +226,7 @@ namespace nil { } /// @brief Get version of the field. - /// @details Exists only if @ref nil::marshalling::option::version_storage option has been provided. + /// @details Exists only if @ref nil::crypto3::marshalling::option::version_storage option has been provided. version_type get_version() const { return base_impl_type::get_version(); } @@ -250,75 +242,18 @@ namespace nil { using base_impl_type::write_data; private: - // because such an adapter uses pure byte reading, - // incompatible with crypto3::multiprecision - static_assert(!parsed_options_type::has_fixed_length_limit, - "nil::marshalling::option::fixed_length option is not applicable to " - "crypto3::integral type"); - - // because such an adapter uses pure byte reading, - // incompatible with crypto3::multiprecision - static_assert(!parsed_options_type::has_fixed_bit_length_limit, - "nil::marshalling::option::fixed_bit_length option is not applicable to " - "crypto3::integral type"); - - static_assert(!parsed_options_type::has_scaling_ratio, - "nil::marshalling::option::scaling_ratio option is not applicable to " - "crypto3::integral type"); - - static_assert( - !parsed_options_type::has_sequence_elem_length_forcing, - "nil::marshalling::option::SequenceElemLengthForcingEnabled option is not applicable to " - "crypto3::integral type"); - static_assert(!parsed_options_type::has_sequence_size_forcing, - "nil::marshalling::option::SequenceSizeForcingEnabled option is not applicable to " - "crypto3::integral type"); - static_assert(!parsed_options_type::has_sequence_length_forcing, - "nil::marshalling::option::SequenceLengthForcingEnabled option is not applicable to " - "crypto3::integral type"); - static_assert(!parsed_options_type::has_sequence_fixed_size, - "nil::marshalling::option::sequence_fixed_size option is not applicable to " - "crypto3::integral type"); - static_assert( - !parsed_options_type::has_sequence_fixed_size_use_fixed_size_storage, - "nil::marshalling::option::SequenceFixedSizeUseFixedSizeStorage option is not applicable to " - "crypto3::integral type"); static_assert(!parsed_options_type::has_sequence_size_field_prefix, - "nil::marshalling::option::sequence_size_field_prefix option is not applicable to " + "nil::crypto3::marshalling::option::sequence_size_field_prefix option is not applicable to " "crypto3::integral type"); static_assert( - !parsed_options_type::has_sequence_ser_length_field_prefix, - "nil::marshalling::option::sequence_ser_length_field_prefix option is not applicable to " - "crypto3::integral type"); - static_assert( - !parsed_options_type::has_sequence_elem_ser_length_field_prefix, - "nil::marshalling::option::sequence_elem_ser_length_field_prefix option is not applicable to " - "crypto3::integral type"); - static_assert( - !parsed_options_type::has_sequence_elem_fixed_ser_length_field_prefix, - "nil::marshalling::option::SequenceElemSerLengthFixedFieldPrefix option is not applicable to " - "crypto3::integral type"); - static_assert( - !parsed_options_type::has_sequence_trailing_field_suffix, - "nil::marshalling::option::sequence_trailing_field_suffix option is not applicable to " - "crypto3::integral type"); - static_assert( - !parsed_options_type::has_sequence_termination_field_suffix, - "nil::marshalling::option::sequence_termination_field_suffix option is not applicable to " - "crypto3::integral type"); + !parsed_options_type::has_orig_data_view, + "nil::crypto3::marshalling::option::orig_data_view option is not applicable to crypto3::integral type"); static_assert(!parsed_options_type::has_fixed_size_storage, - "nil::marshalling::option::fixed_size_storage option is not applicable to " + "nil::crypto3::marshalling::option::fixed_size_storage option is not applicable to " "crypto3::integral type"); static_assert(!parsed_options_type::has_custom_storage_type, - "nil::marshalling::option::custom_storage_type option is not applicable to " + "nil::crypto3::marshalling::option::custom_storage_type option is not applicable to " "crypto3::integral type"); - static_assert( - !parsed_options_type::has_orig_data_view, - "nil::marshalling::option::orig_data_view option is not applicable to crypto3::integral type"); - static_assert( - !parsed_options_type::has_versions_range, - "nil::marshalling::option::exists_between_versions (or similar) option is not applicable to " - "crypto3::integral type"); }; /// @brief Equality comparison operator. @@ -327,13 +262,12 @@ namespace nil { /// @return true in case fields are equal, false otherwise. /// @related integral template bool operator==( - const integral, TOptions...> + const integral, TOptions...> &field1, - const integral, TOptions...> + const integral, TOptions...> &field2) { return field1.value() == field2.value(); } @@ -344,13 +278,12 @@ namespace nil { /// @return true in case fields are NOT equal, false otherwise. /// @related integral template bool operator!=( - const integral, TOptions...> + const integral, TOptions...> &field1, - const integral, TOptions...> + const integral, TOptions...> &field2) { return field1.value() != field2.value(); } @@ -361,61 +294,54 @@ namespace nil { /// @return true in case value of the first field is lower than than the value of the second. /// @related integral template bool operator<( - const integral, TOptions...> + const integral, TOptions...> &field1, - const integral, TOptions...> + const integral, TOptions...> &field2) { return field1.value() < field2.value(); } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::integral type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::integral type /// in order to have access to its internal types. - /// @related nil::marshalling::types::integral + /// @related nil::crypto3::marshalling::types::integral template - inline integral, TOptions...> & + inline integral, TOptions...> & to_field_base( - integral, TOptions...> &field) { + integral, TOptions...> &field) { return field; } - /// @brief Upcast type of the field definition to its parent nil::marshalling::types::integral type + /// @brief Upcast type of the field definition to its parent nil::crypto3::marshalling::types::integral type /// in order to have access to its internal types. - /// @related nil::marshalling::types::integral + /// @related nil::crypto3::marshalling::types::integral template - inline const integral, TOptions...> & + inline const integral, TOptions...> & to_field_base( - const integral, TOptions...> + const integral, TOptions...> &field) { return field; } template - nil::marshalling::types::array_list< - nil::marshalling::field_type, - integral, IntegralContainer>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + integral, IntegralContainer>> fill_integral_vector(std::vector integral_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using integral_type = integral; - using integral_vector_type = nil::marshalling::types::array_list< + using integral_vector_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - integral_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>>; + integral_type>; integral_vector_type result; @@ -428,20 +354,19 @@ namespace nil { template std::vector make_integral_vector( - nil::marshalling::types::array_list< - nil::marshalling::field_type, - integral, IntegralContainer>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> - integral_vector) { - - std::vector result; - std::vector, IntegralContainer>> &values = + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + integral, IntegralContainer>> + const& integral_vector) + { + std::vector, IntegralContainer>> const& values = integral_vector.value(); std::size_t size = values.size(); + std::vector result; + result.reserve(size); for (std::size_t i = 0; i < size; i++) { - result.push_back(values[i].value()); + result.emplace_back(values[i].value()); } return result; } diff --git a/crypto3/libs/marshalling/multiprecision/include/nil/detail/type_traits.hpp b/crypto3/libs/marshalling/multiprecision/include/nil/detail/type_traits.hpp deleted file mode 100644 index 9873546cca..0000000000 --- a/crypto3/libs/marshalling/multiprecision/include/nil/detail/type_traits.hpp +++ /dev/null @@ -1,297 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef NIL_DETAIL_TYPE_TRAITS_HPP -#define NIL_DETAIL_TYPE_TRAITS_HPP - -#include - -#include -#include - -#include -#include - -#define GENERATE_HAS_MEMBER_TYPE(Type) \ - template \ - class HasMemberType_##Type { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMemberType_##Type::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - struct Type { }; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(typename U::Type *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##Type : public std::integral_constant::RESULT> { }; - -#define GENERATE_HAS_MEMBER(member) \ - template \ - class HasMember_##member { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMember_##member::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - int member; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(decltype(U::member) *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##member : public std::integral_constant::RESULT> { }; - -#define GENERATE_HAS_MEMBER_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_CONST_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -namespace nil { - namespace detail { - - GENERATE_HAS_MEMBER_TYPE(iterator) - GENERATE_HAS_MEMBER_TYPE(const_iterator) - - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(begin, const_iterator) - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(end, const_iterator) - - template - struct is_iterator { - static char test(...); - - template::difference_type, - typename = typename std::iterator_traits::pointer, - typename = typename std::iterator_traits::reference, - typename = typename std::iterator_traits::value_type, - typename = typename std::iterator_traits::iterator_category> - static long test(U &&); - - constexpr static bool value = std::is_same())), long>::value; - }; - - template - struct is_range { - static const bool value = has_begin::value && has_end::value; - }; - - template - struct is_container { - static const bool value - = has_const_iterator::value && has_begin::value && has_end::value; - }; - - /// @brief Check whether provided type is a variant of - /// std::tuple. - /// @tparam TType Type to check. - template - struct is_tuple { - /// @brief By default Value has value false. Will be true for any - /// variant of std::tuple. - static const bool value = false; - }; - - /// @cond SKIP_DOC - template - struct is_tuple> { - static const bool value = true; - }; - /// @endcond - - //---------------------------------------- - - /// @brief Check whether TType type is included in the tuple TTuple - /// @tparam TType Type to check - /// @tparam TTuple Tuple - /// @pre @code IsTuple::value == true @endcode - template - class is_in_tuple { - static_assert(is_tuple::value, "TTuple must be std::tuple"); - - public: - /// @brief By default the value is false, will be set to true if TType - /// is found in TTuple. - static const bool value = false; - }; - - /// @cond SKIP_DOC - template - class is_in_tuple> { - public: - static const bool value - = std::is_same::value || is_in_tuple>::value; - }; - - template - class is_in_tuple> { - public: - static const bool value = false; - }; - - template - struct is_array { - static const bool value = false; - }; - - template - struct is_array> { - static const bool value = true; - }; - - template - struct is_array> { - static const bool value = true; - }; - - /// @endcond - } // namespace detail -} // namespace nil - -#endif // NIL_DETAIL_TYPE_TRAITS_HPP \ No newline at end of file diff --git a/crypto3/libs/marshalling/multiprecision/test/CMakeLists.txt b/crypto3/libs/marshalling/multiprecision/test/CMakeLists.txt index eee7cc4ce6..07dffa77af 100644 --- a/crypto3/libs/marshalling/multiprecision/test/CMakeLists.txt +++ b/crypto3/libs/marshalling/multiprecision/test/CMakeLists.txt @@ -39,7 +39,7 @@ macro(define_marshalling_test name) ${Boost_INCLUDE_DIRS}) set_target_properties(marshalling_${name}_test PROPERTIES - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") diff --git a/crypto3/libs/marshalling/multiprecision/test/integral.cpp b/crypto3/libs/marshalling/multiprecision/test/integral.cpp index c81473555f..5ea95824a1 100644 --- a/crypto3/libs/marshalling/multiprecision/test/integral.cpp +++ b/crypto3/libs/marshalling/multiprecision/test/integral.cpp @@ -37,8 +37,7 @@ #include #include -#include -#include +#include #include @@ -61,7 +60,8 @@ T generate_random() { // If we overflow the number, like it was 23 bits, but we filled 1 limb of 64 bits, // or it was 254 bits but we filled the upper 2 bits, the number will not complain. // Nothing will be thrown, but errors will happen. The caller is responsible to not do so. - val.backend().normalize(); + // TODO(ioxid): return this? + //val.normalize(); return val; } @@ -78,27 +78,27 @@ void test_round_trip_fixed_precision_big_endian(T val) { using namespace nil::crypto3::marshalling; std::size_t units_bits = std::is_same_v ? 1 : 8 * sizeof(OutputType); using unit_type = OutputType; - using integral_type = types::integral, T>; + using integral_type = types::integral, T>; std::size_t unitblob_size = integral_type::bit_length() / units_bits + ((integral_type::bit_length() % units_bits) ? 1 : 0); std::vector cv; cv.resize(unitblob_size, 0x00); - std::size_t begin_index = cv.size() - ((boost::multiprecision::msb(val) + 1) / units_bits + - (((boost::multiprecision::msb(val) + 1) % units_bits) ? 1 : 0)); + std::size_t begin_index = cv.size() - ((nil::crypto3::multiprecision::msb(val) + 1) / units_bits + + (((nil::crypto3::multiprecision::msb(val) + 1) % units_bits) ? 1 : 0)); export_bits(val, cv.begin() + begin_index, units_bits, true); - nil::marshalling::status_type status; - T test_val = nil::marshalling::pack(cv, status); + nil::crypto3::marshalling::status_type status; + T test_val = nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(val == test_val); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - std::vector test_cv = nil::marshalling::pack(val, status); + std::vector test_cv = nil::crypto3::marshalling::pack(val, status); BOOST_CHECK(std::equal(test_cv.begin(), test_cv.end(), cv.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template @@ -106,7 +106,7 @@ void test_round_trip_fixed_precision_little_endian(T val) { using namespace nil::crypto3::marshalling; std::size_t units_bits = std::is_same_v ? 1 : 8 * sizeof(OutputType); using unit_type = OutputType; - using integral_type = types::integral, T>; + using integral_type = types::integral, T>; std::size_t unitblob_size = integral_type::bit_length() / units_bits + ((integral_type::bit_length() % units_bits) ? 1 : 0); @@ -115,22 +115,22 @@ void test_round_trip_fixed_precision_little_endian(T val) { export_bits(val, std::back_inserter(cv), units_bits, false); cv.resize(unitblob_size, 0x00); - nil::marshalling::status_type status; - T test_val = nil::marshalling::pack(cv, status); + nil::crypto3::marshalling::status_type status; + T test_val = nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(val == test_val); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - std::vector test_cv = nil::marshalling::pack(val, status); + std::vector test_cv = nil::crypto3::marshalling::pack(val, status); BOOST_CHECK(std::equal(test_cv.begin(), test_cv.end(), cv.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template void test_round_trip_fixed_precision() { - static_assert(nil::marshalling::is_compatible::value); + static_assert(nil::crypto3::marshalling::is_compatible::value); std::cout << std::hex; std::cerr << std::hex; @@ -150,10 +150,10 @@ void test_round_trip_non_fixed_precision(T val) { std::vector cv; export_bits(val, std::back_inserter(cv), units_bits, - std::is_same::value?true:false); + std::is_same::value?true:false); - nil::marshalling::status_type status; - T test_val = nil::marshalling::pack(cv, status); + nil::crypto3::marshalling::status_type status; + T test_val = nil::crypto3::marshalling::pack(cv, status); // std::cout << std::hex << test_val << '\n' << val << '\n'; @@ -170,44 +170,44 @@ void test_round_trip_non_fixed_precision(T val) { BOOST_CHECK(val == test_val); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - std::vector test_cv = nil::marshalling::pack(val, status); + std::vector test_cv = nil::crypto3::marshalling::pack(val, status); BOOST_CHECK(std::equal(test_cv.begin(), test_cv.end(), cv.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template void test_round_trip_non_fixed_precision() { - static_assert(nil::marshalling::is_compatible::value); + static_assert(nil::crypto3::marshalling::is_compatible::value); std::cout << std::hex; std::cerr << std::hex; for (unsigned i = 0; i < 1000; ++i) { T val = generate_random(); - test_round_trip_non_fixed_precision(val); - test_round_trip_non_fixed_precision(val); + test_round_trip_non_fixed_precision(val); + test_round_trip_non_fixed_precision(val); } } BOOST_AUTO_TEST_SUITE(integral_test_suite) -BOOST_AUTO_TEST_CASE(integral_checked_int1024) { - test_round_trip_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_big_uint_1024) { + test_round_trip_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_cpp_uint512) { - test_round_trip_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_big_uint_512) { + test_round_trip_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_cpp_int_backend_64) { - test_round_trip_fixed_precision>, unsigned char>(); +BOOST_AUTO_TEST_CASE(integral_big_uint_64) { + test_round_trip_fixed_precision, unsigned char>(); } -BOOST_AUTO_TEST_CASE(integral_cpp_int_backend_23) { - test_round_trip_fixed_precision>, unsigned char>(); +BOOST_AUTO_TEST_CASE(integral_big_uint_23) { + test_round_trip_fixed_precision, unsigned char>(); } BOOST_AUTO_TEST_SUITE_END() @@ -215,20 +215,20 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(integral_test_suite_bits) -BOOST_AUTO_TEST_CASE(integral_checked_int1024_bits) { - test_round_trip_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_big_uint_1024_bits) { + test_round_trip_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_cpp_uint512_bits) { - test_round_trip_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_big_uint_512_bits) { + test_round_trip_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_cpp_int_backend_64_bits) { - test_round_trip_fixed_precision>, bool>(); +BOOST_AUTO_TEST_CASE(integral_big_uint_64_bits) { + test_round_trip_fixed_precision, bool>(); } -BOOST_AUTO_TEST_CASE(integral_cpp_int_backend_23_bits) { - test_round_trip_fixed_precision>, bool>(); +BOOST_AUTO_TEST_CASE(integral_big_uint_23_bits) { + test_round_trip_fixed_precision, bool>(); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/marshalling/multiprecision/test/integral_fixed_size_container.cpp b/crypto3/libs/marshalling/multiprecision/test/integral_fixed_size_container.cpp index 9da11155c3..24e489f493 100644 --- a/crypto3/libs/marshalling/multiprecision/test/integral_fixed_size_container.cpp +++ b/crypto3/libs/marshalling/multiprecision/test/integral_fixed_size_container.cpp @@ -30,42 +30,33 @@ #include #include #include -#include -#include +//#include + +#include #include #include -#include +//#include #include #include -#include -#include +#include #include -#include template T generate_random() { - static const unsigned limbs = std::numeric_limits::is_specialized && std::numeric_limits::is_bounded ? - std::numeric_limits::digits / std::numeric_limits::digits + 3 : - 20; + static_assert(std::numeric_limits::is_specialized + && std::numeric_limits::is_bounded + && std::numeric_limits::is_integer + && std::numeric_limits::radix == 2, "Only integer types are supported"); - static boost::random::uniform_int_distribution ui(0, limbs); + static boost::random::uniform_int_distribution len_distr(1, std::numeric_limits::digits); static boost::random::mt19937 gen; - T val = gen(); - unsigned lim = ui(gen); - for (unsigned i = 0; i < lim; ++i) { - val *= (gen.max)(); - val += gen(); - } - // If we overflow the number, like it was 23 bits, but we filled 1 limb of 64 bits, - // or it was 254 bits but we filled the upper 2 bits, the number will not complain. - // Nothing will be thrown, but errors will happen. The caller is responsible to not do so. - val.backend().normalize(); - - return val; + std::size_t len = len_distr(gen); + boost::random::uniform_int_distribution num_distr(T(1) << (len - 1), len == std::numeric_limits::digits ? ~T(0) : (T(1) << len) - 1); + return num_distr(gen); } template @@ -78,14 +69,16 @@ void print_byteblob(TIter iter_begin, TIter iter_end) { template void test_round_trip_fixed_size_container_fixed_precision_big_endian( std::array val_container) { + using namespace nil::crypto3::marshalling; + std::size_t units_bits = std::is_same_v ? 1 : sizeof(OutputType) * 8; using unit_type = OutputType; - using integral_type = types::integral, T>; + using integral_type = types::integral, T>; - using container_type = - nil::marshalling::types::array_list, - integral_type, nil::marshalling::option::fixed_size_storage>; + using container_type = nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + integral_type>; std::size_t unitblob_size = integral_type::bit_length() / units_bits + ((integral_type::bit_length() % units_bits) ? 1 : 0); @@ -97,24 +90,24 @@ void test_round_trip_fixed_size_container_fixed_precision_big_endian( for (std::size_t i = 0; i < TSize; i++) { std::size_t begin_index = - unitblob_size - ((boost::multiprecision::msb(val_container[i]) + 1) / units_bits + - (((boost::multiprecision::msb(val_container[i]) + 1) % units_bits) ? 1 : 0)); + unitblob_size - ((nil::crypto3::multiprecision::msb(val_container[i]) + 1) / units_bits + + (((nil::crypto3::multiprecision::msb(val_container[i]) + 1) % units_bits) ? 1 : 0)); export_bits(val_container[i], cv.begin() + unitblob_size * i + begin_index, units_bits, true); } - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array test_val = - nil::marshalling::pack(cv, status); + nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(std::equal(val_container.begin(), val_container.end(), test_val.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); std::vector test_cv = - nil::marshalling::pack(val_container, status); + nil::crypto3::marshalling::pack(val_container, status); BOOST_CHECK(std::equal(test_cv.begin(), test_cv.end(), cv.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template @@ -123,11 +116,11 @@ void test_round_trip_fixed_size_container_fixed_precision_little_endian( using namespace nil::crypto3::marshalling; std::size_t units_bits = std::is_same_v ? 1 : sizeof(OutputType) * 8; using unit_type = OutputType; - using integral_type = types::integral, T>; + using integral_type = types::integral, T>; - using container_type = - nil::marshalling::types::array_list, - integral_type, nil::marshalling::option::fixed_size_storage>; + using container_type = nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + integral_type>; std::size_t unitblob_size = integral_type::bit_length() / units_bits + ((integral_type::bit_length() % units_bits) ? 1 : 0); @@ -141,18 +134,18 @@ void test_round_trip_fixed_size_container_fixed_precision_little_endian( export_bits(val_container[i], cv.begin() + unitblob_size * i, units_bits, false); } - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::array test_val = - nil::marshalling::pack(cv, status); + nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(std::equal(val_container.begin(), val_container.end(), test_val.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); std::vector test_cv = - nil::marshalling::pack(val_container, status); + nil::crypto3::marshalling::pack(val_container, status); BOOST_CHECK(std::equal(test_cv.begin(), test_cv.end(), cv.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } template @@ -172,22 +165,22 @@ void test_round_trip_fixed_size_container_fixed_precision() { BOOST_AUTO_TEST_SUITE(integral_fixed_test_suite) -BOOST_AUTO_TEST_CASE(integral_fixed_uint1024) { - test_round_trip_fixed_size_container_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_1024) { + test_round_trip_fixed_size_container_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_fixed_cpp_uint512) { - test_round_trip_fixed_size_container_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_512) { + test_round_trip_fixed_size_container_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_fixed_cpp_int_backend_64) { +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_64) { test_round_trip_fixed_size_container_fixed_precision< - boost::multiprecision::number>, 128, unsigned char>(); + nil::crypto3::multiprecision::big_uint<64>, 128, unsigned char>(); } -BOOST_AUTO_TEST_CASE(integral_fixed_cpp_int_backend_23) { +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_23) { test_round_trip_fixed_size_container_fixed_precision< - boost::multiprecision::number>, 128, unsigned char>(); + nil::crypto3::multiprecision::big_uint<23>, 128, unsigned char>(); } BOOST_AUTO_TEST_SUITE_END() @@ -195,22 +188,22 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(integral_fixed_test_suite_bits) -BOOST_AUTO_TEST_CASE(integral_fixed_uint1024_bits) { - test_round_trip_fixed_size_container_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_1024_bits) { + test_round_trip_fixed_size_container_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_fixed_cpp_uint512_bits) { - test_round_trip_fixed_size_container_fixed_precision(); +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_512_bits) { + test_round_trip_fixed_size_container_fixed_precision(); } -BOOST_AUTO_TEST_CASE(integral_fixed_cpp_int_backend_23_bits) { +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_23_bits) { test_round_trip_fixed_size_container_fixed_precision< - boost::multiprecision::number>, 128, bool>(); + nil::crypto3::multiprecision::big_uint<23>, 128, bool>(); } -BOOST_AUTO_TEST_CASE(integral_fixed_cpp_int_backend_64_bits) { +BOOST_AUTO_TEST_CASE(integral_fixed_big_uint_64_bits) { test_round_trip_fixed_size_container_fixed_precision< - boost::multiprecision::number>, 128, bool>(); + nil::crypto3::multiprecision::big_uint<64>, 128, bool>(); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/marshalling/multiprecision/test/integral_non_fixed_size_container.cpp b/crypto3/libs/marshalling/multiprecision/test/integral_non_fixed_size_container.cpp index 88887067c2..0b83121edd 100644 --- a/crypto3/libs/marshalling/multiprecision/test/integral_non_fixed_size_container.cpp +++ b/crypto3/libs/marshalling/multiprecision/test/integral_non_fixed_size_container.cpp @@ -33,8 +33,6 @@ #include #include -#include - #include #include @@ -44,30 +42,22 @@ #include #include -#include +#include #include template T generate_random() { - static const unsigned limbs = std::numeric_limits::is_specialized && std::numeric_limits::is_bounded ? - std::numeric_limits::digits / std::numeric_limits::digits + 3 : - 20; + static_assert(std::numeric_limits::is_specialized + && std::numeric_limits::is_bounded + && std::numeric_limits::is_integer + && std::numeric_limits::radix == 2, "Only integer types are supported"); - static boost::random::uniform_int_distribution ui(0, limbs); + static boost::random::uniform_int_distribution len_distr(1, std::numeric_limits::digits); static boost::random::mt19937 gen; - T val = gen(); - unsigned lim = ui(gen); - for (unsigned i = 0; i < lim; ++i) { - val *= boost::random::mt19937::max(); - val += gen(); - } - // If we overflow the number, like it was 23 bits, but we filled 1 limb of 64 bits, - // or it was 254 bits but we filled the upper 2 bits, the number will not complain. - // Nothing will be thrown, but errors will happen. The caller is responsible to not do so. - val.backend().normalize(); - - return val; + std::size_t len = len_distr(gen); + boost::random::uniform_int_distribution num_distr(T(1) << (len - 1), len == std::numeric_limits::digits ? ~T(0) : (T(1) << len) - 1); + return num_distr(gen); } template @@ -82,17 +72,17 @@ void test_round_trip_non_fixed_size_container_fixed_precision(const Container &v using namespace nil::crypto3::marshalling; using unit_type = OutputType; - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector cv = - nil::marshalling::pack(val_container, status); + nil::crypto3::marshalling::pack(val_container, status); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); - std::vector test_val = nil::marshalling::pack(cv, status); + std::vector test_val = nil::crypto3::marshalling::pack(cv, status); BOOST_CHECK(std::equal(val_container.begin(), val_container.end(), test_val.begin())); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); } @@ -116,59 +106,55 @@ void test_round_trip_non_fixed_size_container_fixed_precision() { BOOST_AUTO_TEST_SUITE(integral_non_fixed_test_suite) - BOOST_AUTO_TEST_CASE(integral_non_fixed_checked_int1024_be) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_checked_int1024_le) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_uint512_be) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_uint512_le) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_64_be) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_64_be) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::big_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<64>>, + nil::crypto3::marshalling::option::big_endian, + nil::crypto3::multiprecision::big_uint<64>, 128, unsigned char>(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_64_le) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_64_le) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::little_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<64>>, + nil::crypto3::marshalling::option::little_endian, + nil::crypto3::multiprecision::big_uint<64>, 128, unsigned char>(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_23_be) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_23_be) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::big_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<23>>, + nil::crypto3::marshalling::option::big_endian, + nil::crypto3::multiprecision::big_uint<23>, 128, unsigned char>(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_23_le) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_23_le) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::little_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<23>>, + nil::crypto3::marshalling::option::little_endian, + nil::crypto3::multiprecision::big_uint<23>, 128, unsigned char>(); } @@ -177,59 +163,55 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(integral_non_fixed_test_suite_bits) - BOOST_AUTO_TEST_CASE(integral_non_fixed_checked_int1024_be_bits) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_checked_int1024_le_bits) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_uint512_be_bits) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_uint512_le_bits) { - test_round_trip_non_fixed_size_container_fixed_precision(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_64_be_bits) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_64_be_bits) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::big_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<64>>, + nil::crypto3::marshalling::option::big_endian, + nil::crypto3::multiprecision::big_uint<64>, 128, bool>(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_64_le_bits) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_64_le_bits) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::little_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<64>>, + nil::crypto3::marshalling::option::little_endian, + nil::crypto3::multiprecision::big_uint<64>, 128, bool>(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_23_be_bits) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_23_be_bits) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::big_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<23>>, + nil::crypto3::marshalling::option::big_endian, + nil::crypto3::multiprecision::big_uint<23>, 128, bool>(); } - BOOST_AUTO_TEST_CASE(integral_non_fixed_cpp_int_backend_23_le_bits) { + BOOST_AUTO_TEST_CASE(integral_non_fixed_big_uint_23_le_bits) { test_round_trip_non_fixed_size_container_fixed_precision< - nil::marshalling::option::little_endian, - boost::multiprecision::number< - boost::multiprecision::cpp_int_modular_backend<23>>, + nil::crypto3::marshalling::option::little_endian, + nil::crypto3::multiprecision::big_uint<23>, 128, bool>(); } diff --git a/crypto3/libs/marshalling/zk/CMakeLists.txt b/crypto3/libs/marshalling/zk/CMakeLists.txt index a466e511f6..817355413e 100644 --- a/crypto3/libs/marshalling/zk/CMakeLists.txt +++ b/crypto3/libs/marshalling/zk/CMakeLists.txt @@ -26,12 +26,10 @@ target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTER target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE Boost::container + Boost::random crypto3::multiprecision crypto3::algebra - crypto3::zk - crypto3::containers - crypto3::math ${CMAKE_WORKSPACE_NAME}::marshalling-multiprecision ${CMAKE_WORKSPACE_NAME}::marshalling-algebra diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/detail/random_test_data_generation.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/detail/random_test_data_generation.hpp index bc3e6452b6..6ada4a132e 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/detail/random_test_data_generation.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/detail/random_test_data_generation.hpp @@ -34,9 +34,6 @@ #include #include -#include -#include - #include #include #include diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/accumulation_vector.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/accumulation_vector.hpp index 5384217c31..fafba58737 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/accumulation_vector.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/accumulation_vector.hpp @@ -54,40 +54,40 @@ namespace nil { typename AccumulationVector, typename = typename std::enable_if< std::is_same>::value, + nil::crypto3::container::accumulation_vector>::value, bool>::type, typename... TOptions> - using accumulation_vector = nil::marshalling::types::bundle< + using accumulation_vector = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< curve_element, - sparse_vector>>>; + sparse_vector>>>; template - accumulation_vector, AccumulationVector> + accumulation_vector, AccumulationVector> fill_accumulation_vector(const AccumulationVector &accumulation_vector_inp) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_element_type = curve_element; curve_element_type filled_first = curve_element_type(accumulation_vector_inp.first); - return accumulation_vector, AccumulationVector>( + return accumulation_vector, AccumulationVector>( std::make_tuple( filled_first, - fill_sparse_vector, + fill_sparse_vector, Endianness>(accumulation_vector_inp.rest))); } template AccumulationVector make_accumulation_vector( - const accumulation_vector, AccumulationVector> + const accumulation_vector, AccumulationVector> &filled_accumulation_vector) { return AccumulationVector( std::move(std::get<0>(filled_accumulation_vector.value()).value()), - std::move(make_sparse_vector, + std::move(make_sparse_vector, Endianness>(std::get<1>(filled_accumulation_vector.value())))); } } // namespace types diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/commitment_params.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/commitment_params.hpp index d83108b5b2..1a14098c97 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/commitment_params.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/commitment_params.hpp @@ -1,5 +1,6 @@ //---------------------------------------------------------------------------// // Copyright (c) 2023 Martun Karapetyan +// Copyright (c) 2024 Vasiliy Olekhov // // MIT License // @@ -45,31 +46,20 @@ namespace nil { namespace marshalling { namespace types { template - using field_element_vector_type = nil::marshalling::types::array_list< + using field_element_vector_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element >; // ******************* Marshalling of commitment params for Basic Fri and KZG. ********************************* // template - nil::marshalling::types::array_list< - nil::marshalling::field_type, - nil::marshalling::types::integral, IntegerType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>> - > - fill_integer_vector(const std::vector& integral_vector) { + nil::crypto3::marshalling::types::standard_size_t_array_list> + fill_integer_vector(const std::vector& integral_vector) { - using TTypeBase = nil::marshalling::field_type; - using integral_type = nil::marshalling::types::integral; - using integral_vector_type = nil::marshalling::types::array_list< - TTypeBase, - integral_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - >; + using TTypeBase = nil::crypto3::marshalling::field_type; + using integral_type = nil::crypto3::marshalling::types::integral; + using integral_vector_type = nil::crypto3::marshalling::types::standard_size_t_array_list; integral_vector_type result; @@ -82,15 +72,13 @@ namespace nil { template std::vector - make_integer_vector(const nil::marshalling::types::array_list< - nil::marshalling::field_type, - nil::marshalling::types::integral, IntegerType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>> - >& filled_vector) { + make_integer_vector( + const nil::crypto3::marshalling::types::standard_size_t_array_list >& filled_vector) + { std::vector result; - for( std::size_t i = 0; i < filled_vector.value().size(); i++){ - result.push_back(filled_vector.value()[i].value()); + result.reserve(filled_vector.value().size()); + for (std::size_t i = 0; i < filled_vector.value().size(); i++) { + result.emplace_back(filled_vector.value()[i].value()); } return result; } @@ -99,11 +87,11 @@ namespace nil { // This struct will also be used for the dummy commitment params used in testing. template struct commitment_params{ - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::integral, - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral, + nil::crypto3::marshalling::types::integral > >; }; @@ -111,26 +99,30 @@ namespace nil { // Marshalling function for dummy params. template typename commitment_params< - nil::marshalling::field_type, CommitmentSchemeType, + nil::crypto3::marshalling::field_type, CommitmentSchemeType, std::enable_if_t && !nil::crypto3::zk::is_kzg> >::type fill_commitment_params(const typename CommitmentSchemeType::params_type &dummy_params) { - using TTypeBase = typename nil::marshalling::field_type; + using TTypeBase = typename nil::crypto3::marshalling::field_type; using result_type = typename commitment_params::type; return result_type(std::make_tuple( - nil::marshalling::types::integral(0), - nil::marshalling::types::integral(0) + nil::crypto3::marshalling::types::integral(0), + nil::crypto3::marshalling::types::integral(0) )); } // Define commitment_params marshalling type for LPC. template - struct commitment_params>> { + struct commitment_params< + TTypeBase, + CommitmentSchemeType, + std::enable_if_t> + > { using CommitmentParamsType = typename CommitmentSchemeType::params_type; - using integral_type = nil::marshalling::types::integral; + using integral_type = nil::crypto3::marshalling::types::integral; using type = - nil::marshalling::types::bundle< + nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // constexpr static std::size_t lambda; @@ -145,12 +137,7 @@ namespace nil { // For each evaluation_domain we will include the unity root only. field_element_vector_type, // const std::vector step_list; - nil::marshalling::types::array_list< - TTypeBase, - integral_type, - nil::marshalling::option::sequence_size_field_prefix< - integral_type> - >, + nil::crypto3::marshalling::types::standard_size_t_array_list, // const std::size_t expand_factor; integral_type > @@ -159,12 +146,15 @@ namespace nil { // Marshalling function for FRI params. template - typename commitment_params, CommitmentSchemeType, std::enable_if_t>>::type - fill_commitment_params(const typename CommitmentSchemeType::params_type &fri_params) { + typename commitment_params< + nil::crypto3::marshalling::field_type, + CommitmentSchemeType, + std::enable_if_t> + >::type fill_commitment_params(const typename CommitmentSchemeType::params_type &fri_params) { using CommitmentParamsType = typename CommitmentSchemeType::params_type; - using TTypeBase = typename nil::marshalling::field_type; + using TTypeBase = typename nil::crypto3::marshalling::field_type; using FieldType = typename CommitmentParamsType::field_type; - using result_type = typename commitment_params, CommitmentSchemeType>::type; + using result_type = typename commitment_params, CommitmentSchemeType>::type; std::vector D_unity_roots; for (const auto& domain : fri_params.D) { @@ -172,20 +162,19 @@ namespace nil { } return result_type(std::make_tuple( - nil::marshalling::types::integral(fri_params.lambda), - nil::marshalling::types::integral(fri_params.m), - nil::marshalling::types::integral(fri_params.use_grinding?fri_params.grinding_parameter:0), - nil::marshalling::types::integral(fri_params.max_degree), - nil::crypto3::marshalling::types::fill_field_element_vector< - typename FieldType::value_type, Endianness>(D_unity_roots), + nil::crypto3::marshalling::types::integral(fri_params.lambda), + nil::crypto3::marshalling::types::integral(fri_params.m), + nil::crypto3::marshalling::types::integral(fri_params.use_grinding?fri_params.grinding_parameter:0), + nil::crypto3::marshalling::types::integral(fri_params.max_degree), + fill_field_element_vector(D_unity_roots), fill_integer_vector(fri_params.step_list), - nil::marshalling::types::integral(fri_params.expand_factor) + nil::crypto3::marshalling::types::integral(fri_params.expand_factor) )); } template typename CommitmentSchemeType::params_type - make_commitment_params(const typename commitment_params, CommitmentSchemeType, std::enable_if_t>>::type &filled_params) { + make_commitment_params(const typename commitment_params, CommitmentSchemeType, std::enable_if_t>>::type &filled_params) { using CommitmentParamsType = typename CommitmentSchemeType::params_type; std::size_t lambda = std::get<0>(filled_params.value()).value(); @@ -214,49 +203,42 @@ namespace nil { // Define commitment_params marshalling type for KZG. template - struct commitment_params, CommitmentSchemeType, std::enable_if_t>> { + struct commitment_params, CommitmentSchemeType, std::enable_if_t>> { using CommitmentParamsType = typename CommitmentSchemeType::params_type; - using TTypeBase = typename nil::marshalling::field_type; + using TTypeBase = typename nil::crypto3::marshalling::field_type; using type = - nil::marshalling::types::bundle< + nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::vector::value_type> commitment_key; - nil::marshalling::types::array_list< - nil::marshalling::field_type, - curve_element, typename CommitmentSchemeType::curve_type::template g1_type<>>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + curve_element, typename CommitmentSchemeType::curve_type::template g1_type<>> +> , // verification_key_type verification_key; - nil::marshalling::types::array_list< - nil::marshalling::field_type, - curve_element, typename CommitmentSchemeType::curve_type::template g2_type<>>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + curve_element, typename CommitmentSchemeType::curve_type::template g2_type<>>> > >; }; // Marshalling function for KZG params. template - typename commitment_params, CommitmentSchemeType, std::enable_if_t>>::type + typename commitment_params, CommitmentSchemeType, std::enable_if_t>>::type fill_commitment_params(const typename CommitmentSchemeType::params_type &kzg_params) { - using result_type = typename commitment_params, CommitmentSchemeType>::type; + using result_type = typename commitment_params, CommitmentSchemeType>::type; - nil::marshalling::types::array_list< - nil::marshalling::field_type, - curve_element, typename CommitmentSchemeType::curve_type::template g1_type<>>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + curve_element, typename CommitmentSchemeType::curve_type::template g1_type<>>> filled_commitment = fill_curve_element_vector, Endianness>(kzg_params.commitment_key); - nil::marshalling::types::array_list< - nil::marshalling::field_type, - curve_element, typename CommitmentSchemeType::curve_type::template g2_type<>>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + curve_element, typename CommitmentSchemeType::curve_type::template g2_type<>>> filled_verification_key = fill_curve_element_vector, Endianness>(kzg_params.verification_key); return result_type(std::make_tuple( @@ -268,7 +250,7 @@ namespace nil { // Marshalling function for KZG params. template typename CommitmentSchemeType::params_type - make_commitment_params(const typename commitment_params, CommitmentSchemeType, std::enable_if_t>>::type &filled_kzg_params) { + make_commitment_params(const typename commitment_params, CommitmentSchemeType, std::enable_if_t>>::type &filled_kzg_params) { return result_type(std::make_tuple( make_curve_element_vector, Endianness>(std::get<0>(filled_kzg_params.value()).value()), make_curve_element_vector, Endianness>(std::get<1>(filled_kzg_params.value()).value()) diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/eval_storage.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/eval_storage.hpp index 5b446cb540..8f42d2e317 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/eval_storage.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/eval_storage.hpp @@ -59,61 +59,56 @@ namespace nil { struct eval_proof; template - using eval_storage = nil::marshalling::types::bundle< + using eval_storage = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // batch_info. // We'll check is it good for current EVM instance // All z-s are placed into plain array - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element >, - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::integral >, // evaluation_points_num. - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::integral > > >; template - eval_storage, EvalStorage> + eval_storage, EvalStorage> fill_eval_storage( const EvalStorage &z ){ - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; nil::crypto3::marshalling::types::batch_info_type batch_info; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::integral > filled_batch_info; auto batches = z.get_batches(); for( std::size_t i = 0; i < batches.size(); i++ ){ batch_info[batches[i]] = z.get_batch_size(batches[i]); - filled_batch_info.value().push_back(nil::marshalling::types::integral(batches[i])); - filled_batch_info.value().push_back(nil::marshalling::types::integral(z.get_batch_size(batches[i]))); + filled_batch_info.value().push_back(nil::crypto3::marshalling::types::integral(batches[i])); + filled_batch_info.value().push_back(nil::crypto3::marshalling::types::integral(z.get_batch_size(batches[i]))); } - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::integral > filled_eval_points_num; for( std::size_t i = 0; i < batches.size(); i++ ){ for( std::size_t j = 0; j < z.get_batch_size(batches[i]); j++ ){ filled_eval_points_num.value().push_back( - nil::marshalling::types::integral(z.get_poly_points_number(batches[i], j)) + nil::crypto3::marshalling::types::integral(z.get_poly_points_number(batches[i], j)) ); } } @@ -126,10 +121,9 @@ namespace nil { } } } - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element > filled_z = fill_field_element_vector(z_val); return eval_storage( @@ -139,13 +133,16 @@ namespace nil { template EvalStorage make_eval_storage( - const eval_storage, EvalStorage> &filled_storage - ){ + const eval_storage, EvalStorage> &filled_storage) + { EvalStorage z; typename nil::crypto3::marshalling::types::batch_info_type batch_info; std::vector eval_points_num; auto filled_batch_info = std::get<1>(filled_storage.value()).value(); + if (filled_batch_info.size() % 2 != 0) { + throw std::invalid_argument("Wrong length of batch info"); + } for( std::size_t i = 0; i < filled_batch_info.size(); i+=2 ){ batch_info[filled_batch_info[i].value()] = filled_batch_info[i+1].value(); z.set_batch_size(filled_batch_info[i].value(), filled_batch_info[i+1].value()); @@ -153,8 +150,11 @@ namespace nil { auto filled_eval_points_num = std::get<2>(filled_storage.value()).value(); std::size_t cur = 0; - for( const auto &it:batch_info){ - for( std::size_t i = 0; i < it.second; i++ ){ + for (const auto &it: batch_info){ + for (std::size_t i = 0; i < it.second; i++ ) { + if (cur >= filled_eval_points_num.size()) { + throw std::invalid_argument("Not enough eval points"); + } z.set_poly_points_number(it.first, i, filled_eval_points_num[cur].value()); cur++; } @@ -162,9 +162,12 @@ namespace nil { auto filled_z = std::get<0>(filled_storage.value()).value(); cur = 0; - for( const auto &it:batch_info){ - for( std::size_t i = 0; i < it.second; i++ ){ - for( std::size_t j = 0; j < z.get_poly_points_number(it.first, i); j++ ){ + for (const auto &it: batch_info) { + for (std::size_t i = 0; i < it.second; i++ ) { + for (std::size_t j = 0; j < z.get_poly_points_number(it.first, i); j++ ) { + if (cur >= filled_z.size()) { + throw std::invalid_argument("Not enough values for Z"); + } z.set(it.first, i, j, filled_z[cur].value()); cur++; } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/fri.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/fri.hpp index 86efdb6416..05e8678b49 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/fri.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/fri.hpp @@ -55,16 +55,15 @@ namespace nil { // fri::merkle_proofs marshalling /////////////////////////////////////////////////// template - using merkle_proof_vector_type = nil::marshalling::types::array_list< + using merkle_proof_vector_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - types::merkle_proof, - nil::marshalling::option::sequence_size_field_prefix> + types::merkle_proof >; template< typename Endianness, typename FRI > - merkle_proof_vector_type, FRI> + merkle_proof_vector_type, FRI> fill_merkle_proof_vector(const std::vector &merkle_proofs) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using filled_type = merkle_proof_vector_type; filled_type filled; @@ -80,7 +79,7 @@ namespace nil { template std::vector - make_merkle_proof_vector(merkle_proof_vector_type, FRI> &filled) { + make_merkle_proof_vector(merkle_proof_vector_type, FRI> &filled) { std::vector merkle_proofs; for( std::size_t i = 0; i < filled.value().size(); i++ ){ merkle_proofs.push_back( @@ -94,15 +93,15 @@ namespace nil { // fri::initial_proof_type marshalling /////////////////////////////////////////////////// template - using fri_initial_proof_type = nil::marshalling::types::bundle< + using fri_initial_proof_type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // polynomials_values_type values; - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, field_element>> >, @@ -112,20 +111,20 @@ namespace nil { >; template - fri_initial_proof_type, FRI> + fri_initial_proof_type, FRI> fill_fri_initial_proof( const typename FRI::initial_proof_type &initial_proof ) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using filled_type = fri_initial_proof_type; - using outer_list_type = nil::marshalling::types::standard_array_list< + using outer_list_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, field_element > >; - using inner_list_type = nil::marshalling::types::standard_array_list< + using inner_list_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, field_element >; @@ -156,7 +155,7 @@ namespace nil { template typename FRI::initial_proof_type make_fri_initial_proof( - const fri_initial_proof_type, FRI> &filled + const fri_initial_proof_type, FRI> &filled ) { typename FRI::initial_proof_type initial_proof; // polynomials_values_type values; @@ -184,14 +183,13 @@ namespace nil { // fri::round_proof_type marshalling /////////////////////////////////////////////////// template - using fri_round_proof_type = nil::marshalling::types::bundle< + using fri_round_proof_type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::vector> y; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::size_t_sequence_size_field_prefix + field_element >, // merkle_proof_type p; typename types::merkle_proof @@ -199,11 +197,11 @@ namespace nil { >; template - fri_round_proof_type, FRI> + fri_round_proof_type, FRI> fill_fri_round_proof( const typename FRI::round_proof_type &round_proof ) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using filled_type = fri_round_proof_type; filled_type filled; @@ -226,12 +224,17 @@ namespace nil { template typename FRI::round_proof_type make_fri_round_proof( - const fri_round_proof_type, FRI> &filled + const fri_round_proof_type, FRI> &filled ) { typename FRI::round_proof_type round_proof; // std::vector> y; const std::size_t size = std::get<0>(filled.value()).value().size(); - BOOST_ASSERT(size % FRI::m == 0); + if (size % FRI::m != 0) { + throw std::invalid_argument( + std::string("Number of elements should be multiple of m = ") + + std::to_string(FRI::m) + " got: " + + std::to_string(size)); + } const std::size_t coset_size = size / FRI::m; std::size_t cur = 0; round_proof.y.resize(coset_size); @@ -252,30 +255,28 @@ namespace nil { // fri::query_proof_type marshalling /////////////////////////////////////////////////// template - using fri_query_proof_type = nil::marshalling::types::bundle< + using fri_query_proof_type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::map initial_proof; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - fri_initial_proof_type, - nil::marshalling::option::size_t_sequence_size_field_prefix + fri_initial_proof_type >, // std::vector round_proofs; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - fri_round_proof_type, - nil::marshalling::option::size_t_sequence_size_field_prefix + fri_round_proof_type > > >; template - fri_query_proof_type, FRI> + fri_query_proof_type, FRI> fill_fri_query_proof( const typename FRI::query_proof_type &query_proof ) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using filled_type = fri_query_proof_type; filled_type filled; @@ -298,27 +299,35 @@ namespace nil { template typename FRI::query_proof_type make_fri_query_proof( - const fri_query_proof_type, FRI> &filled, + const fri_query_proof_type, FRI> &filled, const batch_info_type &batch_info, - const std::vector &step_list - ) { + const std::vector &step_list) + { typename FRI::query_proof_type query_proof; // std::map initial_proof; std::size_t cur = 0; std::size_t coset_size = 1 << (step_list[0] - 1); + auto const& initial_proof = std::get<0>(filled.value()).value(); for (const auto &[batch_id, batch_size] : batch_info) { + if (cur >= initial_proof.size()) { + throw std::invalid_argument("Not enough initial_proof values"); + } query_proof.initial_proof[batch_id] = make_fri_initial_proof( - std::get<0>(filled.value()).value()[cur++], batch_size, coset_size + initial_proof[cur++], batch_size, coset_size ); } // std::vector round_proofs; cur = 0; + auto const& round_proofs = std::get<1>(filled.value()).value(); for (std::size_t r = 0; r < step_list.size(); r++) { coset_size = r == step_list.size() - 1 ? 1 : (1 << (step_list[r+1]-1)); + if (cur >= round_proofs.size()) { + throw std::invalid_argument("Not enough round_proofs values"); + } query_proof.round_proofs.push_back( make_fri_round_proof( - std::get<1>(filled.value()).value()[cur++] + round_proofs[cur++] ) ); } @@ -330,56 +339,51 @@ namespace nil { // fri::proof_type marshalling /////////////////////////////////////////////////// template struct fri_proof { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // step_list.size() merkle roots // Fixed size. It's Ok - nil::marshalling::types::array_list< - TTypeBase, typename types::merkle_node_value::type, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, + typename types::merkle_node_value::type >, // step_list. // We'll check is it good for current EVM instance - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::integral >, // Polynomials' values for initial proofs // Fixed size // lambda * polynomials_num * m - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element >, // Polynomials' values for round proofs // Fixed size // lambda * \sum_rounds{m^{r_i}} - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element >, // Merkle proofs for initial proofs // Fixed size lambda * batches_num - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename types::merkle_proof, - nil::marshalling::option::sequence_size_field_prefix> + typename types::merkle_proof >, // Merkle proofs for round proofs // Fixed size lambda * |step_list| - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename types::merkle_proof, - nil::marshalling::option::sequence_size_field_prefix> + typename types::merkle_proof >, // std::select_container final_polynomials @@ -387,7 +391,7 @@ namespace nil { typename polynomial::type, // proof of work. - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral > >; }; @@ -395,14 +399,13 @@ namespace nil { using batch_info_type = std::map;// batch_id->batch_size template - typename fri_proof, FRI>::type + typename fri_proof, FRI>::type fill_fri_proof(const typename FRI::proof_type &proof, const batch_info_type &batch_info, const typename FRI::params_type& params) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; // merkle roots - nil::marshalling::types::array_list< - TTypeBase, typename types::merkle_node_value::type, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, typename types::merkle_node_value::type > filled_fri_roots; for( size_t i = 0; i < proof.fri_roots.size(); i++){ filled_fri_roots.value().push_back(fill_merkle_node_value(proof.fri_roots[i])); @@ -415,21 +418,30 @@ namespace nil { auto &query_proof = proof.query_proofs[i]; for( const auto &it: query_proof.initial_proof){ auto &initial_proof = it.second; - BOOST_ASSERT(initial_proof.values.size() == batch_info.at(it.first)); + if (initial_proof.values.size() != batch_info.at(it.first)) { + throw std::invalid_argument( + std::string("Initial proof has wrong size. Expected: ") + + std::to_string(initial_proof.values.size()) + " got: " + + std::to_string(batch_info.at(it.first))); + } for( std::size_t j = 0; j < initial_proof.values.size(); j++ ){ for(std::size_t k = 0; k < initial_proof.values[j].size(); k++ ){ for( std::size_t l = 0; l < FRI::m; l++ ){ initial_val.push_back(initial_proof.values[j][k][l]); } } - BOOST_ASSERT(std::size_t(1 << (params.step_list[0] - 1)) == initial_proof.values[j].size()); + if (std::size_t(1 << (params.step_list[0] - 1)) != initial_proof.values[j].size()) { + throw std::invalid_argument( + std::string("Initial proof element has wrong size. Expected: ") + + std::to_string(std::size_t(1 << (params.step_list[0] - 1))) + " got: " + + std::to_string(initial_proof.values[j].size())); + } } } } - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element > filled_initial_val = fill_field_element_vector(initial_val); // fill round values @@ -444,27 +456,24 @@ namespace nil { } } } - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element > filled_round_val = fill_field_element_vector(round_val); // step_list - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::integral > filled_step_list; for (const auto& step : params.step_list) { - filled_step_list.value().push_back(nil::marshalling::types::integral(step)); + filled_step_list.value().push_back(nil::crypto3::marshalling::types::integral(step)); } // initial merkle proofs - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename types::merkle_proof, - nil::marshalling::option::sequence_size_field_prefix> + typename types::merkle_proof > filled_initial_merkle_proofs; for( std::size_t i = 0; i < lambda; i++){ const auto &query_proof = proof.query_proofs[i]; @@ -477,10 +486,9 @@ namespace nil { } // round merkle proofs - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename types::merkle_proof, - nil::marshalling::option::sequence_size_field_prefix> + typename types::merkle_proof > filled_round_merkle_proofs; for( std::size_t i = 0; i < lambda; i++){ const auto &query_proof = proof.query_proofs[i]; @@ -496,11 +504,11 @@ namespace nil { ); // proof_of_work - return typename fri_proof, FRI>::type( + return typename fri_proof, FRI>::type( std::tuple( filled_fri_roots, filled_step_list, filled_initial_val, filled_round_val, filled_initial_merkle_proofs, filled_round_merkle_proofs, filled_final_polynomial, - nil::marshalling::types::integral( + nil::crypto3::marshalling::types::integral( proof.proof_of_work) ) ); @@ -509,18 +517,19 @@ namespace nil { template typename FRI::proof_type make_fri_proof( - const typename fri_proof, FRI>::type &filled_proof, const batch_info_type &batch_info - ){ + const typename fri_proof, FRI>::type &filled_proof, + const batch_info_type &batch_info) + { typename FRI::proof_type proof; // merkle roots - for( std::size_t i = 0; i < std::get<0>(filled_proof.value()).value().size(); i++){ + for (std::size_t i = 0; i < std::get<0>(filled_proof.value()).value().size(); i++) { proof.fri_roots.push_back( make_merkle_node_value(std::get<0>(filled_proof.value()).value()[i]) ); } // step_list std::vector step_list; - for( std::size_t i = 0; i < std::get<1>(filled_proof.value()).value().size(); i++){ + for (std::size_t i = 0; i < std::get<1>(filled_proof.value()).value().size(); i++) { auto c = std::get<1>(filled_proof.value()).value()[i].value(); step_list.push_back(c); } @@ -530,16 +539,21 @@ namespace nil { // initial_polynomials values std::size_t coset_size = 1 << (step_list[0] - 1); std::size_t cur = 0; - for( std::size_t i = 0; i < lambda; i++ ){ - for( const auto &it:batch_info){ + for (std::size_t i = 0; i < lambda; i++) { + for (const auto &it: batch_info) { proof.query_proofs[i].initial_proof[it.first] = typename FRI::initial_proof_type(); proof.query_proofs[i].initial_proof[it.first].values.resize(it.second); - for( std::size_t j = 0; j < it.second; j++ ){ + for (std::size_t j = 0; j < it.second; j++) { proof.query_proofs[i].initial_proof[it.first].values[j].resize(coset_size); - for( std::size_t k = 0; k < coset_size; k++){ - for( std::size_t l = 0; l < FRI::m; l++, cur++ ){ - BOOST_ASSERT(cur < std::get<2>(filled_proof.value()).value().size()); - proof.query_proofs[i].initial_proof[it.first].values[j][k][l] = std::get<2>(filled_proof.value()).value()[cur].value(); + for (std::size_t k = 0; k < coset_size; k++) { + for (std::size_t l = 0; l < FRI::m; l++, cur++ ) { + if (cur >= std::get<2>(filled_proof.value()).value().size()) { + throw std::invalid_argument( + std::string("Too few elements provided for initial_polynomials values: ") + + std::to_string(std::get<2>(filled_proof.value()).value().size())); + } + proof.query_proofs[i].initial_proof[it.first].values[j][k][l] = + std::get<2>(filled_proof.value()).value()[cur].value(); } } } @@ -548,35 +562,49 @@ namespace nil { // round polynomials values cur = 0; - for(std::size_t i = 0; i < lambda; i++ ){ + for (std::size_t i = 0; i < lambda; i++) { proof.query_proofs[i].round_proofs.resize(step_list.size()); - for(std::size_t r = 0; r < step_list.size(); r++ ){ + for (std::size_t r = 0; r < step_list.size(); r++ ) { coset_size = r == step_list.size() - 1? 1: (1 << (step_list[r+1]-1)); proof.query_proofs[i].round_proofs[r].y.resize(coset_size); - for( std::size_t j = 0; j < coset_size; j++){ - for( std::size_t k = 0; k < FRI::m; k++, cur++){ - BOOST_ASSERT(cur < std::get<3>(filled_proof.value()).value().size()); + for (std::size_t j = 0; j < coset_size; j++) { + for (std::size_t k = 0; k < FRI::m; k++, cur++) { + if (cur >= std::get<3>(filled_proof.value()).value().size()) { + throw std::invalid_argument( + std::string("Too few elements provided for round polynomials values: ") + + std::to_string(std::get<3>(filled_proof.value()).value().size())); + } proof.query_proofs[i].round_proofs[r].y[j][k] = std::get<3>(filled_proof.value()).value()[cur].value(); } } } } // initial merkle proofs + auto const& initial_merkle_proofs = std::get<4>(filled_proof.value()).value(); cur = 0; - for( std::size_t i = 0; i < lambda; i++ ){ - for( const auto &it:batch_info){ - proof.query_proofs[i].initial_proof[it.first].p = make_merkle_proof( - std::get<4>(filled_proof.value()).value()[cur++] + for (std::size_t i = 0; i < lambda; i++) { + for (const auto &it: batch_info) { + if (cur >= initial_merkle_proofs.size()) { + throw std::invalid_argument("Not enough initial_merkle_proof values"); + } + proof.query_proofs[i].initial_proof[it.first].p = + make_merkle_proof( + std::get<4>(filled_proof.value()).value()[cur++] ); } } // round merkle proofs + auto const& round_merkle_proofs = std::get<5>(filled_proof.value()).value(); cur = 0; - for( std::size_t i = 0; i < lambda; i++ ){ - for( std::size_t r = 0; r < step_list.size(); r++, cur++ ){ - proof.query_proofs[i].round_proofs[r].p = make_merkle_proof( - std::get<5>(filled_proof.value()).value()[cur] + for (std::size_t i = 0; i < lambda; i++ ) { + for (std::size_t r = 0; r < step_list.size(); r++, cur++ ) { + if (cur >= round_merkle_proofs.size()) { + throw std::invalid_argument("Not enough round_merkle_proof values"); + } + proof.query_proofs[i].round_proofs[r].p = + make_merkle_proof( + round_merkle_proofs[cur] ); } } @@ -585,22 +613,23 @@ namespace nil { proof.final_polynomial = make_polynomial( std::get<6>(filled_proof.value()) ); + // proof_of_work proof.proof_of_work = std::get<7>(filled_proof.value()).value(); return proof; } template - using initial_proofs_batch_type = nil::marshalling::types::standard_array_list< + using initial_proofs_batch_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::bundle< + nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral >, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, fri_initial_proof_type > @@ -609,18 +638,18 @@ namespace nil { >; template - initial_proofs_batch_type, FRI> + initial_proofs_batch_type, FRI> fill_initial_proofs_batch(const typename FRI::initial_proofs_batch_type &initial_proofs_batch) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using filled_type = initial_proofs_batch_type; - using bundle_type = nil::marshalling::types::bundle< + using bundle_type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral >, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, fri_initial_proof_type > @@ -630,17 +659,17 @@ namespace nil { filled_type filled; for (const auto &inital_proof : initial_proofs_batch.initial_proofs) { - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral > filled_step_list; - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, fri_initial_proof_type > filled_initial_proofs; for (const auto &[step_list, proof] : inital_proof) { filled_step_list.value().push_back( - nil::marshalling::types::integral(step_list)); + nil::crypto3::marshalling::types::integral(step_list)); filled_initial_proofs.value().push_back(fill_fri_initial_proof( proof)); } @@ -653,8 +682,8 @@ namespace nil { template typename FRI::initial_proofs_batch_type make_initial_proofs_batch( - const initial_proofs_batch_type, FRI> &filled - ) { + const initial_proofs_batch_type, FRI> &filled) + { typename FRI::initial_proofs_batch_type initial_proofs_batch; for (const auto &batch : filled.value()) { std::map batch_initial_proofs; @@ -670,24 +699,24 @@ namespace nil { } template - using round_proofs_batch_type = nil::marshalling::types::standard_array_list< + using round_proofs_batch_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, fri_round_proof_type > >; template - round_proofs_batch_type, FRI> + round_proofs_batch_type, FRI> fill_round_proofs_batch(const typename FRI::round_proofs_batch_type &round_proofs_batch) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using filled_type = round_proofs_batch_type; filled_type filled; for (const auto &round_proof_vector : round_proofs_batch.round_proofs) { - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, fri_round_proof_type > filled_round_proof_vector; @@ -703,8 +732,8 @@ namespace nil { template typename FRI::round_proofs_batch_type make_round_proofs_batch( - const round_proofs_batch_type, FRI> &filled - ) { + const round_proofs_batch_type, FRI> &filled) + { typename FRI::round_proofs_batch_type round_proofs_batch; for (const auto &round_proof_vector : filled.value()) { std::vector round_proofs; @@ -717,10 +746,10 @@ namespace nil { } template - using commitments_part_of_proof_type = nil::marshalling::types::bundle< + using commitments_part_of_proof_type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, typename types::merkle_node_value::type >, @@ -729,16 +758,16 @@ namespace nil { >; template - commitments_part_of_proof_type, FRI> + commitments_part_of_proof_type, FRI> fill_commitments_part_of_proof( const typename FRI::commitments_part_of_proof &commitments_part_of_proof ) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using filled_type = commitments_part_of_proof_type; filled_type filled; - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, typename types::merkle_node_value::type > filled_fri_roots; @@ -757,7 +786,7 @@ namespace nil { template typename FRI::commitments_part_of_proof make_commitments_part_of_proof( - const commitments_part_of_proof_type, FRI> &filled + const commitments_part_of_proof_type, FRI> &filled ) { typename FRI::commitments_part_of_proof commitments_part_of_proof; for (const auto &fri_root : std::get<0>(filled.value()).value()) { diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/kzg.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/kzg.hpp index b54055643d..1800dde8d7 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/kzg.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/kzg.hpp @@ -53,28 +53,28 @@ namespace nil { * */ template struct commitment>> { - using type = nil::marshalling::types::array_list< + using type = nil::crypto3::marshalling::types::array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::integral, + nil::crypto3::marshalling::option::sequence_size_field_prefix> >; }; template - typename commitment, KZGScheme, std::enable_if_t>>::type + typename commitment, KZGScheme, std::enable_if_t>>::type fill_commitment(typename KZGScheme::commitment_type commitment) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using result_type = typename nil::crypto3::marshalling::types::commitment::type; result_type result; for( auto it = commitment.begin(); it != commitment.end(); it++ ){ - result.value().push_back(nil::marshalling::types::integral(*it)); + result.value().push_back(nil::crypto3::marshalling::types::integral(*it)); } return result; } template typename KZGScheme::commitment_type - make_commitment(typename commitment, KZGScheme, std::enable_if_t>>::type const& filled_commitment) { + make_commitment(typename commitment, KZGScheme, std::enable_if_t>>::type const& filled_commitment) { typename KZGScheme::commitment_type result; for( std::size_t i = 0; i < filled_commitment.value().size(); i++ ){ result.push_back(filled_commitment.value()[i].value()); @@ -86,7 +86,7 @@ namespace nil { template struct eval_proof > > { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< eval_storage, @@ -97,9 +97,9 @@ namespace nil { }; template - typename eval_proof, KZGScheme, std::enable_if_t>>::type + typename eval_proof, KZGScheme, std::enable_if_t>>::type fill_eval_proof( const typename KZGScheme::proof_type &proof, typename KZGScheme::params_type const& params) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; nil::crypto3::marshalling::types::batch_info_type batch_info = proof.z.get_batch_info(); @@ -117,7 +117,7 @@ namespace nil { template typename KZGScheme::proof_type - make_eval_proof(const typename eval_proof, KZGScheme, std::enable_if_t>>::type &filled_proof) { + make_eval_proof(const typename eval_proof, KZGScheme, std::enable_if_t>>::type &filled_proof) { typename KZGScheme::proof_type proof; proof.z = make_eval_storage(std::get<0>(filled_proof.value())); diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/lpc.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/lpc.hpp index 74c4574242..4ee96db76c 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/lpc.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/lpc.hpp @@ -70,7 +70,7 @@ namespace nil { template typename commitment< - nil::marshalling::field_type, LPCScheme, + nil::crypto3::marshalling::field_type, LPCScheme, std::enable_if_t> >::type fill_commitment(typename LPCScheme::commitment_type commitment) { @@ -80,7 +80,7 @@ namespace nil { template typename LPCScheme::commitment_type make_commitment(typename commitment< - nil::marshalling::field_type, LPCScheme, + nil::crypto3::marshalling::field_type, LPCScheme, std::enable_if_t> >::type const& filled_commitment) { return make_merkle_node_value( filled_commitment ); @@ -89,23 +89,14 @@ namespace nil { // * LPCScheme is like lpc_commitment_scheme template struct commitment_preprocessed_data>> { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> - >, - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> - >, - nil::marshalling::types::array_list< - TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element > > >; @@ -113,35 +104,26 @@ namespace nil { template typename commitment_preprocessed_data< - nil::marshalling::field_type, LPCScheme, + nil::crypto3::marshalling::field_type, LPCScheme, std::enable_if_t> >::type fill_commitment_preprocessed_data(const typename LPCScheme::preprocessed_data_type& lpc_data){ - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using field_marshalling_type = field_element; using result_type = typename commitment_preprocessed_data< - nil::marshalling::field_type, LPCScheme + nil::crypto3::marshalling::field_type, LPCScheme >::type; - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> - > filled_map_ids; - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> - > filled_sizes; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_size_t_array_list filled_map_ids; + nil::crypto3::marshalling::types::standard_size_t_array_list filled_sizes; + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix> + field_element > filled_values; for (const auto&[k, v]: lpc_data) { - filled_map_ids.value().push_back(nil::marshalling::types::integral(k)); - filled_sizes.value().push_back(nil::marshalling::types::integral(v.size())); + filled_map_ids.value().push_back(nil::crypto3::marshalling::types::integral(k)); + filled_sizes.value().push_back(nil::crypto3::marshalling::types::integral(v.size())); for (std::size_t i = 0; i < v.size(); i++) { filled_values.value().push_back(field_marshalling_type((v[i]))); } @@ -159,19 +141,32 @@ namespace nil { template typename LPCScheme::preprocessed_data_type make_commitment_preprocessed_data(typename commitment_preprocessed_data< - nil::marshalling::field_type, LPCScheme, + nil::crypto3::marshalling::field_type, LPCScheme, std::enable_if_t> >::type const& filled_commitment_preprocessed_data ) { - using TTypeBase = nil::marshalling::field_type; - typename LPCScheme::preprocessed_data_type result; - for(std::size_t i = 0; i < std::get<0>(filled_commitment_preprocessed_data.value()).value().size(); i++){ - std::size_t k = std::get<0>(filled_commitment_preprocessed_data.value()).value()[i].value(); - std::size_t size = std::get<1>(filled_commitment_preprocessed_data.value()).value()[i].value(); + auto const& vector_map = std::get<0>(filled_commitment_preprocessed_data.value()).value(); + auto const& vector_sizes = std::get<1>(filled_commitment_preprocessed_data.value()).value(); + auto const& vector_values = std::get<2>(filled_commitment_preprocessed_data.value()).value(); + if (vector_map.size() != vector_sizes.size()) { + throw std::invalid_argument("Map size does not equal vector sizes"); + } + std::size_t total_size = 0; + for(auto const& size: vector_sizes) { + total_size += size.value(); + } + if (vector_values.size() != total_size) { + throw std::invalid_argument("Map size does not equal vector sizes"); + } + + for (std::size_t i = 0; i < vector_map.size(); i++) { + std::size_t k = vector_map[i].value(); + std::size_t size = vector_sizes[i].value(); std::vector v; - for(std::size_t j = 0; j < size; j++){ - v.push_back(std::get<2>(filled_commitment_preprocessed_data.value()).value()[i*size + j].value()); + v.reserve(size); + for (std::size_t j = 0; j < size; j++){ + v.emplace_back(vector_values[i*size + j].value()); } result[k] = v; } @@ -182,7 +177,7 @@ namespace nil { // FOR LPC only because of basic_fri field template struct eval_proof> > { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // Evaluation points storage z @@ -195,9 +190,9 @@ namespace nil { }; template - typename eval_proof, LPCScheme,std::enable_if_t>>::type + typename eval_proof, LPCScheme,std::enable_if_t>>::type fill_eval_proof( const typename LPCScheme::proof_type &proof, const typename LPCScheme::fri_type::params_type& fri_params){ - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; nil::crypto3::marshalling::types::batch_info_type batch_info = proof.z.get_batch_info(); @@ -215,7 +210,7 @@ namespace nil { template typename LPCScheme::proof_type make_eval_proof( const typename eval_proof< - nil::marshalling::field_type, + nil::crypto3::marshalling::field_type, LPCScheme, std::enable_if_t> >::type &filled_proof @@ -260,21 +255,14 @@ namespace nil { // changes the state of the 'lpc_commitment_scheme' class. template struct commitment_scheme_state> > { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::map _trees; - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - >, - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_size_t_array_list< TTypeBase >, + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename precommitment_type::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + typename precommitment_type::type >, // typename fri_type::params_type _fri_params; typename commitment_params::type, @@ -283,20 +271,10 @@ namespace nil { field_element, //std::map _batch_fixed; - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - >, + nil::crypto3::marshalling::types::standard_size_t_array_list, // Next value was supposed to be a vector of bool, but our marshalling core // does not allow us to create an array_list of bools. - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - >, + nil::crypto3::marshalling::types::standard_size_t_array_list, // preprocessed_data_type _fixed_polys_values; typename commitment_preprocessed_data< TTypeBase, LPCScheme, @@ -309,27 +287,19 @@ namespace nil { }; template - typename commitment_scheme_state, LPCScheme, + typename commitment_scheme_state, LPCScheme, std::enable_if_t>>::type fill_commitment_scheme(const LPCScheme &scheme) { - using TTypeBase = nil::marshalling::field_type; - using result_type = typename commitment_scheme_state, LPCScheme>::type; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = typename commitment_scheme_state, LPCScheme>::type; // std::map _trees; - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - > filled_trees_keys; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_size_t_array_list filled_trees_keys; + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename precommitment_type::type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - > filled_trees_values; + typename precommitment_type::type> filled_trees_values; for (const auto&[key, value]: scheme.get_trees()) { - filled_trees_keys.value().push_back(nil::marshalling::types::integral(key)); + filled_trees_keys.value().push_back(nil::crypto3::marshalling::types::integral(key)); // Precommitment for LPC is a merkle tree. We may want to abstract away this part into a separate // fill_precommitment function. filled_trees_values.value().push_back( @@ -337,24 +307,14 @@ namespace nil { } //std::map _batch_fixed; - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - > filled_batch_fixed_keys; - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> - > filled_batch_fixed_values; + nil::crypto3::marshalling::types::standard_size_t_array_list filled_batch_fixed_keys; + nil::crypto3::marshalling::types::standard_size_t_array_list filled_batch_fixed_values; for (const auto&[key, value]: scheme.get_batch_fixed()) { filled_batch_fixed_keys.value().push_back( - nil::marshalling::types::integral(key)); + nil::crypto3::marshalling::types::integral(key)); // Here we convert the value, that is a 'bool' into size_t, which is not good. filled_batch_fixed_values.value().push_back( - nil::marshalling::types::integral(value)); + nil::crypto3::marshalling::types::integral(value)); } return result_type(std::make_tuple( @@ -371,20 +331,18 @@ namespace nil { } template - outcome::result + outcome::result make_commitment_scheme( typename commitment_scheme_state< - nil::marshalling::field_type, LPCScheme, + nil::crypto3::marshalling::field_type, LPCScheme, std::enable_if_t>>::type& filled_commitment_scheme ) { - using TTypeBase = typename nil::marshalling::field_type; - std::map trees; const auto& filled_tree_keys = std::get<0>(filled_commitment_scheme.value()).value(); const auto& filled_tree_values = std::get<1>(filled_commitment_scheme.value()).value(); if (filled_tree_keys.size() != filled_tree_values.size()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } for (std::size_t i = 0; i < filled_tree_keys.size(); i++) { @@ -401,7 +359,7 @@ namespace nil { const auto& batch_fixed_keys = std::get<4>(filled_commitment_scheme.value()).value(); const auto& batch_fixed_values = std::get<5>(filled_commitment_scheme.value()).value(); if (batch_fixed_keys.size() != batch_fixed_values.size()) { - return nil::marshalling::status_type::invalid_msg_data; + return nil::crypto3::marshalling::status_type::invalid_msg_data; } @@ -423,7 +381,7 @@ namespace nil { } template - using initial_fri_proof_type = nil::marshalling::types::bundle< + using initial_fri_proof_type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // typename basic_fri::round_proofs_batch_type fri_round_proof; @@ -438,9 +396,9 @@ namespace nil { >; template - initial_fri_proof_type, LPCScheme> + initial_fri_proof_type, LPCScheme> fill_initial_fri_proof(const typename LPCScheme::fri_proof_type &proof) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; nil::crypto3::marshalling::types::round_proofs_batch_type< TTypeBase, @@ -456,15 +414,15 @@ namespace nil { fill_commitments_part_of_proof( proof.fri_commitments_proof_part); - return initial_fri_proof_type, LPCScheme>( + return initial_fri_proof_type, LPCScheme>( std::make_tuple(filled_round_proofs_batch, filled_commitments_part_of_proof)); } template typename LPCScheme::fri_proof_type make_initial_fri_proof( - const initial_fri_proof_type, LPCScheme> &filled_proof - ) { + const initial_fri_proof_type, LPCScheme> &filled_proof) + { typename LPCScheme::fri_proof_type proof; proof.fri_round_proof = make_round_proofs_batch< @@ -479,7 +437,7 @@ namespace nil { } template - using inital_eval_proof = nil::marshalling::types::bundle< + using inital_eval_proof = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // eval_storage_type z; @@ -490,22 +448,20 @@ namespace nil { >; template - inital_eval_proof, LPCScheme> + inital_eval_proof, LPCScheme> fill_initial_eval_proof( const typename LPCScheme::lpc_proof_type &intial_proof ){ - using TTypeBase = nil::marshalling::field_type; - auto filled_z = fill_eval_storage( intial_proof.z); initial_proofs_batch_type< - nil::marshalling::field_type, typename LPCScheme::basic_fri> filled_fri_proof = + nil::crypto3::marshalling::field_type, typename LPCScheme::basic_fri> filled_fri_proof = fill_initial_proofs_batch( intial_proof.initial_fri_proofs ); - return inital_eval_proof, LPCScheme>( + return inital_eval_proof, LPCScheme>( std::tuple(filled_z, filled_fri_proof) ); } @@ -513,8 +469,8 @@ namespace nil { template typename LPCScheme::lpc_proof_type make_initial_eval_proof( - const inital_eval_proof, LPCScheme> &filled_proof - ) { + const inital_eval_proof, LPCScheme> &filled_proof) + { typename LPCScheme::lpc_proof_type proof; proof.z = make_eval_storage( @@ -527,36 +483,36 @@ namespace nil { } template - using aggregated_proof = nil::marshalling::types::bundle< + using aggregated_proof = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // fri_proof_type fri_proof; initial_fri_proof_type, // std::vector initial_proofs_per_prover; - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, inital_eval_proof >, // typename LPCParams::grinding_type::output_type proof_of_work; - nil::marshalling::types::integral< + nil::crypto3::marshalling::types::integral< TTypeBase, typename LPCScheme::params_type::grinding_type::output_type> > >; template - aggregated_proof, LPCScheme> + aggregated_proof, LPCScheme> fill_aggregated_proof( const typename LPCScheme::aggregated_proof_type &proof, const typename LPCScheme::fri_type::params_type &fri_params ){ - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; initial_fri_proof_type filled_fri_proof = fill_initial_fri_proof( proof.fri_proof ); - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, inital_eval_proof > filled_initial_proofs; @@ -568,11 +524,11 @@ namespace nil { ); } - return aggregated_proof, LPCScheme>( + return aggregated_proof, LPCScheme>( std::make_tuple( filled_fri_proof, filled_initial_proofs, - nil::marshalling::types::integral< + nil::crypto3::marshalling::types::integral< TTypeBase, typename LPCScheme::params_type::grinding_type::output_type>( proof.proof_of_work) ) @@ -582,7 +538,7 @@ namespace nil { template typename LPCScheme::aggregated_proof_type make_aggregated_proof( - const aggregated_proof, LPCScheme> &filled_proof + const aggregated_proof, LPCScheme> &filled_proof ) { typename LPCScheme::aggregated_proof_type proof; diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/polys_evaluator.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/polys_evaluator.hpp index 924971e588..dcbefc5615 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/polys_evaluator.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/polys_evaluator.hpp @@ -50,24 +50,24 @@ namespace nil { // * PolysEvaluator is like lpc_commitment_scheme template - using polys_evaluator = nil::marshalling::types::bundle< + using polys_evaluator = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::map> _polys; - nil::marshalling::types::standard_size_t_array_list, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, polynomial_vector >, // std::map _locked; - nil::marshalling::types::standard_size_t_array_list, - nil::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_size_t_array_list, // std::map>> _points; - nil::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_size_t_array_list, // Next structure is a vector of vector of vector of field values. - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, field_element_vector > @@ -78,25 +78,25 @@ namespace nil { >; // this one closes the bundle template - polys_evaluator, PolysEvaluator> + polys_evaluator, PolysEvaluator> fill_polys_evaluator(const PolysEvaluator& evaluator) { - using nil::marshalling::types::fill_size_t; - using nil::marshalling::types::fill_std_map; - using nil::marshalling::types::standard_array_list; - using nil::marshalling::types::fill_standard_array_list; + using nil::crypto3::marshalling::types::fill_size_t; + using nil::crypto3::marshalling::types::fill_std_map; + using nil::crypto3::marshalling::types::standard_array_list; + using nil::crypto3::marshalling::types::fill_standard_array_list; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using polynomial_type = typename PolysEvaluator::polynomial_type; using value_type = typename polynomial_type::value_type; - using size_t_marshalling_type = nil::marshalling::types::integral; + using size_t_marshalling_type = nil::crypto3::marshalling::types::integral; using polynomial_vector_marshalling_type = polynomial_vector; - - using field_element_vector_type = field_element_vector>; + + using field_element_vector_type = field_element_vector>; using array_of_field_element_vector_type = standard_array_list; - using result_type = polys_evaluator, PolysEvaluator>; + using result_type = polys_evaluator, PolysEvaluator>; auto [filled_polys_keys, filled_polys_values] = fill_std_map< TTypeBase, @@ -146,25 +146,25 @@ namespace nil { template PolysEvaluator make_polys_evaluator( - const polys_evaluator, PolysEvaluator>& filled_polys_evaluator - ) { - using nil::marshalling::types::make_size_t; - using nil::marshalling::types::make_std_map; - using nil::marshalling::types::standard_array_list; - using nil::marshalling::types::make_standard_array_list; - - using TTypeBase = nil::marshalling::field_type; + const polys_evaluator, PolysEvaluator>& filled_polys_evaluator) + { + using nil::crypto3::marshalling::types::make_size_t; + using nil::crypto3::marshalling::types::make_std_map; + using nil::crypto3::marshalling::types::standard_array_list; + using nil::crypto3::marshalling::types::make_standard_array_list; + + using TTypeBase = nil::crypto3::marshalling::field_type; using polynomial_type = typename PolysEvaluator::polynomial_type; using value_type = typename polynomial_type::value_type; - using size_t_marshalling_type = nil::marshalling::types::integral; + using size_t_marshalling_type = nil::crypto3::marshalling::types::integral; using polynomial_vector_marshalling_type = polynomial_vector; - - using field_element_vector_type = field_element_vector>; + + using field_element_vector_type = field_element_vector>; using array_of_field_element_vector_type = standard_array_list; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using polynomial_type = typename PolysEvaluator::polynomial_type; using value_type = typename polynomial_type::value_type; diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/accumulator.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/accumulator.hpp deleted file mode 100644 index c832d96645..0000000000 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/accumulator.hpp +++ /dev/null @@ -1,148 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2021 Ilias Khairullin -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MARSHALLING_POWERS_OF_TAO_ACCUMULATOR_HPP -#define CRYPTO3_MARSHALLING_POWERS_OF_TAO_ACCUMULATOR_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace marshalling { - namespace types { - template>::value, - bool>::type, - typename... TOptions> - using powers_of_tau_accumulator = nil::marshalling::types::bundle< - TTypeBase, - std::tuple< - // tau_powers_g1 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // tau_powers_g2 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // alpha_tau_powers_g1 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // beta_tau_powers_g1 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // beta_g2 - fast_curve_element> - >>; - - template - powers_of_tau_accumulator, Accumulator> - fill_powers_of_tau_accumulator(const Accumulator &accumulator) { - - using TTypeBase = nil::marshalling::field_type; - - return powers_of_tau_accumulator(std::make_tuple( - std::move( - fill_fast_curve_element_vector, Endianness>( - accumulator.tau_powers_g1)), - std::move( - fill_fast_curve_element_vector, Endianness>( - accumulator.tau_powers_g2)), - std::move( - fill_fast_curve_element_vector, Endianness>( - accumulator.alpha_tau_powers_g1)), - std::move( - fill_fast_curve_element_vector, Endianness>( - accumulator.beta_tau_powers_g1)), - std::move( - fill_fast_curve_element, Endianness>( - accumulator.beta_g2)))); - } - - template - Accumulator make_powers_of_tau_accumulator( - const powers_of_tau_accumulator, Accumulator> - &filled_accumulator) { - - return Accumulator( - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<0>(filled_accumulator.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<1>(filled_accumulator.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<2>(filled_accumulator.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<3>(filled_accumulator.value()))), - std::move( - make_fast_curve_element, Endianness>( - std::get<4>(filled_accumulator.value()))) - ); - } - } // namespace types - } // namespace marshalling - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_MARSHALLING_POWERS_OF_TAO_ACCUMULATOR_HPP diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/public_key.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/public_key.hpp deleted file mode 100644 index e6908eab4a..0000000000 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/public_key.hpp +++ /dev/null @@ -1,107 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MARSHALLING_POWERS_OF_TAU_PUBLIC_KEY_HPP -#define CRYPTO3_MARSHALLING_POWERS_OF_TAU_PUBLIC_KEY_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace marshalling { - namespace types { - - template>::value, - bool>::type, - typename... TOptions> - using powers_of_tau_public_key = nil::marshalling::types::bundle< - TTypeBase, - std::tuple< - // tau_pok - element_pok, - // alpha_pok - element_pok, - // beta_pok - element_pok>>; - - template - powers_of_tau_public_key, PublicKey> - fill_powers_of_tau_public_key(const PublicKey &public_key) { - - using TTypeBase = nil::marshalling::field_type; - - return powers_of_tau_public_key( - std::make_tuple( - std::move( - fill_element_pok( - public_key.tau_pok)), - std::move( - fill_element_pok( - public_key.alpha_pok)), - std::move( - fill_element_pok( - public_key.beta_pok)) - )); - } - - template - PublicKey make_powers_of_tau_public_key( - const powers_of_tau_public_key, PublicKey> - &filled_public_key) { - - return PublicKey( - std::move( - make_element_pok( - std::get<0>(filled_public_key.value()))), - std::move( - make_element_pok( - std::get<1>(filled_public_key.value()))), - std::move( - make_element_pok( - std::get<2>(filled_public_key.value()))) - ); - } - - } // namespace types - } // namespace marshalling - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_MARSHALLING_POWERS_OF_TAU_PUBLIC_KEY_HPP diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/result.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/result.hpp deleted file mode 100644 index 71bdb54eae..0000000000 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/powers_of_tau/result.hpp +++ /dev/null @@ -1,180 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2021 Ilias Khairullin -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MARSHALLING_POWERS_OF_TAO_RESULT_HPP -#define CRYPTO3_MARSHALLING_POWERS_OF_TAO_RESULT_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace marshalling { - namespace types { - template>::value, - bool>::type, - typename... TOptions> - using powers_of_tau_result = nil::marshalling::types::bundle< - TTypeBase, - std::tuple< - // alpha_g1 - fast_curve_element>, - // beta_g1 - fast_curve_element>, - // beta_g2 - fast_curve_element>, - // coeffs_g1 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // coeffs_g2 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // alpha_coeffs_g1 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // beta_coeffs_g1 - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - // h - nil::marshalling::types::array_list< - TTypeBase, - fast_curve_element>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>> - >>; - - template - powers_of_tau_result, Result> - fill_powers_of_tau_result(const Result &result) { - - using TTypeBase = nil::marshalling::field_type; - using curve_g1_element_type = - fast_curve_element>; - using curve_g2_element_type = - fast_curve_element>; - - return powers_of_tau_result(std::make_tuple( - std::move( - fill_fast_curve_element, Endianness>( - result.alpha_g1)), - std::move( - fill_fast_curve_element, Endianness>( - result.beta_g1)), - std::move( - fill_fast_curve_element, Endianness>( - result.beta_g2)), - std::move( - fill_fast_curve_element_vector, Endianness>( - result.coeffs_g1)), - std::move( - fill_fast_curve_element_vector, Endianness>( - result.coeffs_g2)), - std::move( - fill_fast_curve_element_vector, Endianness>( - result.alpha_coeffs_g1)), - std::move( - fill_fast_curve_element_vector, Endianness>( - result.beta_coeffs_g1)), - std::move( - fill_fast_curve_element_vector, Endianness>( - result.h)) - )); - } - - template - Result make_powers_of_tau_result( - const powers_of_tau_result, Result> - &filled_result) { - - return Result( - std::move( - make_fast_curve_element, Endianness>( - std::get<0>(filled_result.value()))), - std::move( - make_fast_curve_element, Endianness>( - std::get<1>(filled_result.value()))), - std::move( - make_fast_curve_element, Endianness>( - std::get<2>(filled_result.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<3>(filled_result.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<4>(filled_result.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<5>(filled_result.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<6>(filled_result.value()))), - std::move( - make_fast_curve_element_vector, Endianness>( - std::get<7>(filled_result.value()))) - ); - } - } // namespace types - } // namespace marshalling - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_MARSHALLING_POWERS_OF_TAO_RESULT_HPP diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/proof_of_knowledge.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/proof_of_knowledge.hpp deleted file mode 100644 index 928ae9d0c4..0000000000 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/commitments/proof_of_knowledge.hpp +++ /dev/null @@ -1,105 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_MARSHALLING_PROOF_OF_KNOWLEDGE_HPP -#define CRYPTO3_MARSHALLING_PROOF_OF_KNOWLEDGE_HPP - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace marshalling { - namespace types { - - template>::value, - bool>::type, - typename... TOptions> - using element_pok = nil::marshalling::types::bundle< - TTypeBase, - std::tuple< - // g1_s - fast_curve_element>, - // g1_s_x - fast_curve_element>, - // g2_s_x - fast_curve_element>>>; - - template - element_pok, POK> - fill_element_pok(const POK &pok) { - - return element_pok, POK>( - std::make_tuple( - std::move( - fill_fast_curve_element, Endianness>( - pok.g1_s)), - std::move( - fill_fast_curve_element, Endianness>( - pok.g1_s_x)), - std::move( - fill_fast_curve_element, Endianness>( - pok.g2_s_x)) - )); - } - - template - POK make_element_pok( - const element_pok, POK> - &filled_pok) { - - return POK( - std::move( - make_fast_curve_element, Endianness>( - std::get<0>(filled_pok.value()))), - std::move( - make_fast_curve_element, Endianness>( - std::get<1>(filled_pok.value()))), - std::move( - make_fast_curve_element, Endianness>( - std::get<2>(filled_pok.value()))) - ); - } - - } // namespace types - } // namespace marshalling - } // namespace crypto3 -} // namespace nil -#endif // CRYPTO3_MARSHALLING_PROOF_OF_KNOWLEDGE_HPP diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/fast_knowledge_commitment.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/fast_knowledge_commitment.hpp index 9a3ebfe772..8adfaebe8f 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/fast_knowledge_commitment.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/fast_knowledge_commitment.hpp @@ -60,7 +60,7 @@ namespace nil { bool>::type, typename... TOptions> using fast_knowledge_commitment = - nil::marshalling::types::bundle, @@ -68,19 +68,19 @@ namespace nil { fast_curve_element>>; template - fast_knowledge_commitment, KnowledgeCommitment> + fast_knowledge_commitment, KnowledgeCommitment> fill_fast_knowledge_commitment(const typename KnowledgeCommitment::value_type &kc) { auto filled_g = fill_fast_curve_element(kc.g); auto filled_h = fill_fast_curve_element(kc.h); - return fast_knowledge_commitment, KnowledgeCommitment>( + return fast_knowledge_commitment, KnowledgeCommitment>( std::make_tuple(filled_g, filled_h)); } template typename KnowledgeCommitment::value_type - make_fast_knowledge_commitment(const fast_knowledge_commitment, + make_fast_knowledge_commitment(const fast_knowledge_commitment, KnowledgeCommitment> &filled_kc) { return typename KnowledgeCommitment::value_type(std::move(make_fast_curve_element(std::get<0>(filled_kc.value()))), @@ -88,23 +88,19 @@ namespace nil { } template - nil::marshalling::types::array_list< - nil::marshalling::field_type, - fast_knowledge_commitment, KnowledgeCommitment>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + fast_knowledge_commitment, KnowledgeCommitment>> fill_fast_knowledge_commitment_vector( const std::vector &kc_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using kc_element_type = fast_knowledge_commitment; - using kc_element_vector_type = nil::marshalling::types::array_list< + using kc_element_vector_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - kc_element_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>>; + kc_element_type>; kc_element_vector_type result; @@ -117,16 +113,14 @@ namespace nil { template std::vector make_fast_knowledge_commitment_vector( - const nil::marshalling::types::array_list< - nil::marshalling::field_type, - fast_knowledge_commitment, KnowledgeCommitment>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + const nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + fast_knowledge_commitment, KnowledgeCommitment>> &filled_kc_vector) { std::vector result; const std::vector< - fast_knowledge_commitment, KnowledgeCommitment>> &values = + fast_knowledge_commitment, KnowledgeCommitment>> &values = filled_kc_vector.value(); std::size_t size = values.size(); diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/knowledge_commitment.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/knowledge_commitment.hpp index 25dc57b4af..9d3ebe4150 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/knowledge_commitment.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/knowledge_commitment.hpp @@ -59,7 +59,7 @@ namespace nil { bool>::type, typename... TOptions> using knowledge_commitment = - nil::marshalling::types::bundle, @@ -67,47 +67,44 @@ namespace nil { curve_element>>; template - knowledge_commitment, KnowledgeCommitment> + knowledge_commitment, KnowledgeCommitment> fill_knowledge_commitment(const typename KnowledgeCommitment::value_type &kc) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_type1_element_type = curve_element; using curve_type2_element_type = curve_element; curve_type1_element_type filled_g = curve_type1_element_type(kc.g); curve_type2_element_type filled_h = curve_type2_element_type(kc.h); - return knowledge_commitment, KnowledgeCommitment>( + return knowledge_commitment, KnowledgeCommitment>( std::make_tuple(filled_g, filled_h)); } template typename KnowledgeCommitment::value_type - make_knowledge_commitment(const knowledge_commitment, - KnowledgeCommitment> &filled_kc) { - - return typename KnowledgeCommitment::value_type(std::move(std::get<0>(filled_kc.value()).value()), - std::move(std::get<1>(filled_kc.value()).value())); + make_knowledge_commitment( + const knowledge_commitment, KnowledgeCommitment> &filled_kc) + { + return typename KnowledgeCommitment::value_type( + std::move(std::get<0>(filled_kc.value()).value()), + std::move(std::get<1>(filled_kc.value()).value())); } template - nil::marshalling::types::array_list< - nil::marshalling::field_type, - knowledge_commitment, KnowledgeCommitment>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + knowledge_commitment, KnowledgeCommitment>> fill_knowledge_commitment_vector( const std::vector &kc_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using kc_element_type = knowledge_commitment; - using kc_element_vector_type = nil::marshalling::types::array_list< + using kc_element_vector_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - kc_element_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>>; + kc_element_type>; kc_element_vector_type result; @@ -120,21 +117,20 @@ namespace nil { template std::vector make_knowledge_commitment_vector( - const nil::marshalling::types::array_list< - nil::marshalling::field_type, - knowledge_commitment, KnowledgeCommitment>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> - &filled_kc_vector) { - - std::vector result; + const nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + knowledge_commitment, KnowledgeCommitment>> + &filled_kc_vector) + { const std::vector< - knowledge_commitment, KnowledgeCommitment>> &values = + knowledge_commitment, KnowledgeCommitment>> &values = filled_kc_vector.value(); std::size_t size = values.size(); + std::vector result; + result.reserve(size); for (std::size_t i = 0; i < size; i++) { - result.push_back(make_knowledge_commitment(values[i])); + result.emplace_back(make_knowledge_commitment(values[i])); } return result; } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/common_data.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/common_data.hpp index f4ab6e9979..82ac12ed79 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/common_data.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/common_data.hpp @@ -51,7 +51,7 @@ namespace nil { namespace types { // ******************* placeholder common data ********************************* // template - using placeholder_common_data = nil::marshalling::types::bundle< + using placeholder_common_data = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // typename CommonDataType::public_commitments_type commitments; @@ -59,44 +59,44 @@ namespace nil { typename commitment::type, // 1.std::array, ParamsType::arithmetization_params::TotalColumns> columns_rotations; - nil::marshalling::types::array_list , - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::array_list , + nil::crypto3::marshalling::option::sequence_size_field_prefix> >, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::option::sequence_size_field_prefix> >, // 2. std::size_t witness_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 3. std::size_t public_input_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 4. std::size_t constant_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 5. std::size_t selector_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 6. std::size_t usable_rows_amount; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 7. std::size_t rows_amount; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 8. std::size_t max_gates_degree; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 9. std::size_t permutation_parts - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 10. std::size_t lookup_parts - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 11. std::size_t max_quotient_chunks - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // 12. permuted_columns // global indices of permuted columns - nil::marshalling::types::array_list , - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::array_list , + nil::crypto3::marshalling::option::sequence_size_field_prefix> >, // 13. verification_key.constraint_system_with_params_hash - nil::marshalling::types::array_list , - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::array_list , + nil::crypto3::marshalling::option::sequence_size_field_prefix> >, // 14. commitment_scheme_type::params_type typename nil::crypto3::marshalling::types::commitment_params< @@ -110,26 +110,26 @@ namespace nil { >; template - placeholder_common_data, CommonDataType> + placeholder_common_data, CommonDataType> fill_placeholder_common_data(const CommonDataType &common_data){ - using TTypeBase = typename nil::marshalling::field_type; + using TTypeBase = typename nil::crypto3::marshalling::field_type; using result_type = placeholder_common_data; - using array_int_marshalling_type = nil::marshalling::types::array_list , - nil::marshalling::option::sequence_size_field_prefix> + using array_int_marshalling_type = nil::crypto3::marshalling::types::array_list , + nil::crypto3::marshalling::option::sequence_size_field_prefix> >; - using column_r_marshalling_type = nil::marshalling::types::array_list > + nil::crypto3::marshalling::option::sequence_size_field_prefix> >; column_r_marshalling_type filled_columns_rotations; for( const auto &column_rotation:common_data.columns_rotations){ array_int_marshalling_type filled_column; for( const auto &i:column_rotation){ - filled_column.value().push_back(nil::marshalling::types::integral(i)); + filled_column.value().push_back(nil::crypto3::marshalling::types::integral(i)); } filled_columns_rotations.value().push_back(filled_column); } @@ -139,9 +139,9 @@ namespace nil { common_data.commitments.fixed_values ); - nil::marshalling::types::array_list , - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::array_list , + nil::crypto3::marshalling::option::sequence_size_field_prefix> > filled_constraint_system_with_params_hash; if constexpr(nil::crypto3::algebra::is_field_element< @@ -152,24 +152,24 @@ namespace nil { export_bits(integral, std::back_inserter(blob), 8); for( std::size_t i = blob.size(); i > 0; i--){ filled_constraint_system_with_params_hash.value().push_back( - nil::marshalling::types::integral(blob[i-1]) + nil::crypto3::marshalling::types::integral(blob[i-1]) ); } } else { for( std::size_t i = 0; i < common_data.vk.constraint_system_with_params_hash.size(); i++){ filled_constraint_system_with_params_hash.value().push_back( - nil::marshalling::types::integral(common_data.vk.constraint_system_with_params_hash[i]) + nil::crypto3::marshalling::types::integral(common_data.vk.constraint_system_with_params_hash[i]) ); } } - using permuted_column_indices_type = nil::marshalling::types::array_list , - nil::marshalling::option::sequence_size_field_prefix> + using permuted_column_indices_type = nil::crypto3::marshalling::types::array_list , + nil::crypto3::marshalling::option::sequence_size_field_prefix> >; permuted_column_indices_type filled_permuted_columns; for( const auto &index:common_data.permuted_columns){ - filled_permuted_columns.value().push_back(nil::marshalling::types::integral(index)); + filled_permuted_columns.value().push_back(nil::crypto3::marshalling::types::integral(index)); } auto filled_commitment_params = fill_commitment_params( @@ -183,16 +183,16 @@ namespace nil { return result_type(std::make_tuple( filled_commitments, // 0 filled_columns_rotations, // 1 - nil::marshalling::types::integral(common_data.desc.witness_columns), // 2 - nil::marshalling::types::integral(common_data.desc.public_input_columns), // 3 - nil::marshalling::types::integral(common_data.desc.constant_columns), // 4 - nil::marshalling::types::integral(common_data.desc.selector_columns), // 5 - nil::marshalling::types::integral(common_data.desc.usable_rows_amount), // 6 - nil::marshalling::types::integral(common_data.desc.rows_amount), // 7 - nil::marshalling::types::integral(common_data.max_gates_degree), // 8 - nil::marshalling::types::integral(common_data.permutation_parts), // 9 - nil::marshalling::types::integral(common_data.lookup_parts), // 10 - nil::marshalling::types::integral(common_data.max_quotient_chunks), // 11 + nil::crypto3::marshalling::types::integral(common_data.desc.witness_columns), // 2 + nil::crypto3::marshalling::types::integral(common_data.desc.public_input_columns), // 3 + nil::crypto3::marshalling::types::integral(common_data.desc.constant_columns), // 4 + nil::crypto3::marshalling::types::integral(common_data.desc.selector_columns), // 5 + nil::crypto3::marshalling::types::integral(common_data.desc.usable_rows_amount), // 6 + nil::crypto3::marshalling::types::integral(common_data.desc.rows_amount), // 7 + nil::crypto3::marshalling::types::integral(common_data.max_gates_degree), // 8 + nil::crypto3::marshalling::types::integral(common_data.permutation_parts), // 9 + nil::crypto3::marshalling::types::integral(common_data.lookup_parts), // 10 + nil::crypto3::marshalling::types::integral(common_data.max_quotient_chunks), // 11 filled_permuted_columns, // 12 filled_constraint_system_with_params_hash, // 13 filled_commitment_params, // 14 @@ -202,7 +202,7 @@ namespace nil { template CommonDataType make_placeholder_common_data(const - placeholder_common_data, CommonDataType> &filled_common_data + placeholder_common_data, CommonDataType> &filled_common_data ){ auto fixed_values = make_commitment(std::get<0>(filled_common_data.value())); diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/preprocessed_public_data.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/preprocessed_public_data.hpp index 5c46a807f3..94163cdfb7 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/preprocessed_public_data.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/preprocessed_public_data.hpp @@ -47,7 +47,7 @@ namespace nil { namespace types { // ******************* placeholder preprocessed public data ********************************* // template - using placeholder_preprocessed_public_data = nil::marshalling::types::bundle< + using placeholder_preprocessed_public_data = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // plonk_public_polynomial_dfs_table public_polynomial_table; @@ -69,16 +69,16 @@ namespace nil { >; template - placeholder_preprocessed_public_data, PreprocessedPublicDataType> + placeholder_preprocessed_public_data, PreprocessedPublicDataType> fill_placeholder_preprocessed_public_data(const PreprocessedPublicDataType& preprocessed_public_data) { - using TTypeBase = typename nil::marshalling::field_type; + using TTypeBase = typename nil::crypto3::marshalling::field_type; using PolynomialDFSType = typename PreprocessedPublicDataType::polynomial_dfs_type; using result_type = placeholder_preprocessed_public_data< - nil::marshalling::field_type, PreprocessedPublicDataType>; + nil::crypto3::marshalling::field_type, PreprocessedPublicDataType>; return result_type(std::make_tuple( fill_plonk_public_table( - preprocessed_public_data.public_polynomial_table), + *preprocessed_public_data.public_polynomial_table), fill_polynomial_vector(preprocessed_public_data.permutation_polynomials), fill_polynomial_vector(preprocessed_public_data.identity_polynomials), fill_polynomial(preprocessed_public_data.q_last), @@ -89,10 +89,12 @@ namespace nil { } template - PreprocessedPublicDataType make_placeholder_preprocessed_public_data(const - placeholder_preprocessed_public_data, PreprocessedPublicDataType> &filled_preprocessed_public_data - ) { - using TTypeBase = typename nil::marshalling::field_type; + PreprocessedPublicDataType make_placeholder_preprocessed_public_data( + const placeholder_preprocessed_public_data< + nil::crypto3::marshalling::field_type, + PreprocessedPublicDataType> &filled_preprocessed_public_data) + { + using TTypeBase = typename nil::crypto3::marshalling::field_type; using PolynomialDFSType = typename PreprocessedPublicDataType::polynomial_dfs_type; return PreprocessedPublicDataType({ diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/proof.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/proof.hpp index 25c256be20..0a4f280807 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/proof.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/proof.hpp @@ -49,15 +49,15 @@ namespace nil { namespace marshalling { namespace types { template - using placeholder_partial_evaluation_proof = nil::marshalling::types::bundle< + using placeholder_partial_evaluation_proof = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // batch size integers - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral >, - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, typename commitment::type > @@ -65,25 +65,25 @@ namespace nil { >; template - placeholder_partial_evaluation_proof, Proof> + placeholder_partial_evaluation_proof, Proof> fill_placeholder_partial_evaluation_proof( const typename Proof::partial_proof_type &partial_proof) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; // batch size integers - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - nil::marshalling::types::integral + nil::crypto3::marshalling::types::integral > filled_batch_size; // batch commitments - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, typename commitment::type > filled_commitments; for (const auto &[batch_index, commitment] : partial_proof.commitments) { filled_batch_size.value().push_back( - nil::marshalling::types::integral(batch_index)); + nil::crypto3::marshalling::types::integral(batch_index)); filled_commitments.value().push_back( fill_commitment(commitment)); } @@ -96,9 +96,8 @@ namespace nil { template typename Proof::partial_proof_type make_placeholder_partial_evaluation_proof( - const placeholder_partial_evaluation_proof< - nil::marshalling::field_type, Proof> &filled_proof - ) { + const placeholder_partial_evaluation_proof, Proof> &filled_proof) + { typename Proof::partial_proof_type partial_proof; // batch size integers @@ -116,7 +115,7 @@ namespace nil { // This should be different for different commitment schemes! template - using placeholder_evaluation_proof = nil::marshalling::types::bundle< + using placeholder_evaluation_proof = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // typename FieldType::value_type challenge @@ -129,10 +128,10 @@ namespace nil { template - placeholder_evaluation_proof, Proof> + placeholder_evaluation_proof, Proof> fill_placeholder_evaluation_proof(const typename Proof::evaluation_proof &proof, const CommitmentParamsType& commitment_params) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using field_marshalling_type = field_element; @@ -151,8 +150,8 @@ namespace nil { template typename Proof::evaluation_proof make_placeholder_evaluation_proof( - const placeholder_evaluation_proof, Proof> &filled_proof) { - + const placeholder_evaluation_proof, Proof> &filled_proof) + { typename Proof::evaluation_proof proof; // typename FieldType::value_type challenge @@ -166,16 +165,16 @@ namespace nil { } template - using placeholder_proof = nil::marshalling::types::bundle< + using placeholder_proof = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // typename commitment_scheme_type::commitment_type commitments - // All of them are similar size. So no nil::marshalling::option needed + // All of them are similar size. So no nil::crypto3::marshalling::option needed // There won't be too many commitments. So uint8_t is enough for length - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::array_list< TTypeBase, typename commitment::type, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::option::sequence_size_field_prefix> >, // evaluation_proof eval_proof @@ -184,15 +183,15 @@ namespace nil { >; template - placeholder_proof, Proof> + placeholder_proof, Proof> fill_placeholder_proof(const Proof &proof, const CommitmentParamsType& commitment_params) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::array_list< TTypeBase, typename commitment::type, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::option::sequence_size_field_prefix> > filled_commitments; for( const auto &it:proof.commitments){ filled_commitments.value().push_back( @@ -207,7 +206,9 @@ namespace nil { } template - Proof make_placeholder_proof( const placeholder_proof, Proof> &filled_proof) { + Proof make_placeholder_proof( + const placeholder_proof, Proof> &filled_proof) + { Proof proof; // evaluation_proof eval_proof @@ -215,12 +216,18 @@ namespace nil { make_placeholder_evaluation_proof(std::get<1>(filled_proof.value())); auto batch_info = proof.eval_proof.eval_proof.z.get_batch_info(); + auto const& commitments = std::get<0>(filled_proof.value()).value(); std::size_t cur = 0; - for( const auto &it:batch_info ){ - if( it.first == Proof::FIXED_VALUES_BATCH ) continue; + for (const auto &it: batch_info ) { + if (it.first == Proof::FIXED_VALUES_BATCH) continue; + + if (cur >= commitments.size()) { + throw std::invalid_argument("Not enough values for commitments"); + } + proof.commitments[it.first] = make_commitment( - std::get<0>(filled_proof.value()).value()[cur++] + commitments[cur++] ); } @@ -228,10 +235,10 @@ namespace nil { } template - using placeholder_aggregated_proof_type = nil::marshalling::types::bundle< + using placeholder_aggregated_proof_type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, placeholder_partial_evaluation_proof >, @@ -240,15 +247,15 @@ namespace nil { >; template - placeholder_aggregated_proof_type, Proof> + placeholder_aggregated_proof_type, Proof> fill_placeholder_aggregated_proof( const AggregatedProof &proof, const typename Proof::commitment_scheme_type::fri_type::params_type &fri_params ) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; - nil::marshalling::types::standard_array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, placeholder_partial_evaluation_proof > filled_partial_proofs; @@ -267,12 +274,13 @@ namespace nil { template AggregatedProof make_placeholder_aggregated_proof( - const placeholder_aggregated_proof_type, Proof> &filled_proof) { + const placeholder_aggregated_proof_type, Proof> &filled_proof) + { AggregatedProof proof; // std::vector> partial_proofs; auto filled_partial_proofs = std::get<0>(filled_proof.value()).value(); - for( const auto &it:filled_partial_proofs){ + for (const auto &it: filled_partial_proofs) { proof.partial_proofs.push_back( make_placeholder_partial_evaluation_proof(it) ); diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/transcript_initialization_context.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/transcript_initialization_context.hpp index 6fdc85c67d..8939172fb9 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/transcript_initialization_context.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/placeholder/transcript_initialization_context.hpp @@ -44,27 +44,27 @@ namespace nil { namespace types { template - using marshalling_string_type = nil::marshalling::types::string; + using marshalling_string_type = nil::crypto3::marshalling::types::string; // ******************* placeholder transcript initialization context ********************************* // template - using transcript_initialization_context = nil::marshalling::types::bundle< + using transcript_initialization_context = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // constexpr static const std::size_t witness_columns = PlaceholderParamsType::witness_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // constexpr static const std::size_t public_input_columns = PlaceholderParamsType::public_input_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // constexpr static const std::size_t constant_columns = PlaceholderParamsType::constant_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // constexpr static const std::size_t selector_columns = PlaceholderParamsType::selector_columns; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // constexpr static const typename field_type::value_type delta = PlaceholderParamsType::delta; field_element, // std::size_t rows_amount; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // std::size_t usable_rows_amount; - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // typename commitment_type::params_type commitment_params; typename commitment_params::type, @@ -76,9 +76,9 @@ namespace nil { >; template - transcript_initialization_context, TranscriptInitializationContextType> + transcript_initialization_context, TranscriptInitializationContextType> fill_transcript_initialization_context(const TranscriptInitializationContextType &init_context) { - using TTypeBase = typename nil::marshalling::field_type; + using TTypeBase = typename nil::crypto3::marshalling::field_type; using result_type = transcript_initialization_context; using field_element_marshalling_type = field_element; @@ -90,13 +90,13 @@ namespace nil { ); return result_type(std::make_tuple( - nil::marshalling::types::integral(init_context.witness_columns), - nil::marshalling::types::integral(init_context.public_input_columns), - nil::marshalling::types::integral(init_context.constant_columns), - nil::marshalling::types::integral(init_context.selector_columns), + nil::crypto3::marshalling::types::integral(init_context.witness_columns), + nil::crypto3::marshalling::types::integral(init_context.public_input_columns), + nil::crypto3::marshalling::types::integral(init_context.constant_columns), + nil::crypto3::marshalling::types::integral(init_context.selector_columns), field_element_marshalling_type(init_context.delta), - nil::marshalling::types::integral(init_context.rows_amount), - nil::marshalling::types::integral(init_context.usable_rows_amount), + nil::crypto3::marshalling::types::integral(init_context.rows_amount), + nil::crypto3::marshalling::types::integral(init_context.usable_rows_amount), filled_commitment_params, field_element_marshalling_type(init_context.modulus), marshalling_string_type(init_context.application_id) diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/assignment_table.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/assignment_table.hpp index 1e7d923ca9..e2d7dccf53 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/assignment_table.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/assignment_table.hpp @@ -25,6 +25,7 @@ #ifndef CRYPTO3_MARSHALLING_ZK_PLONK_ASSIGNMENT_TABLE_HPP #define CRYPTO3_MARSHALLING_ZK_PLONK_ASSIGNMENT_TABLE_HPP +#include #include #include @@ -50,38 +51,38 @@ namespace nil { // Table description is marshalled separately, so it can be used in // other parts of system (e.g. DFRI). template - using plonk_assignment_table_description = nil::marshalling::types::bundle< + using plonk_assignment_table_description = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::integral, // witness_amount - nil::marshalling::types::integral, // public_input_amount - nil::marshalling::types::integral, // constant_amount - nil::marshalling::types::integral, // selector_amount + nil::crypto3::marshalling::types::integral, // witness_amount + nil::crypto3::marshalling::types::integral, // public_input_amount + nil::crypto3::marshalling::types::integral, // constant_amount + nil::crypto3::marshalling::types::integral, // selector_amount - nil::marshalling::types::integral, // usable_rows - nil::marshalling::types::integral // rows_amount + nil::crypto3::marshalling::types::integral, // usable_rows + nil::crypto3::marshalling::types::integral // rows_amount > >; template - plonk_assignment_table_description> fill_assignment_table_description( + plonk_assignment_table_description> fill_assignment_table_description( const zk::snark::plonk_table_description& desc ) { - using TTypeBase = nil::marshalling::field_type; - using result_type = plonk_assignment_table_description>; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = plonk_assignment_table_description>; using value_type = typename FieldType::value_type; return result_type(std::move(std::make_tuple( - nil::marshalling::types::integral(desc.witness_columns), - nil::marshalling::types::integral(desc.public_input_columns), - nil::marshalling::types::integral(desc.constant_columns), - nil::marshalling::types::integral(desc.selector_columns), - nil::marshalling::types::integral(desc.usable_rows_amount), - nil::marshalling::types::integral(desc.rows_amount)))); + nil::crypto3::marshalling::types::integral(desc.witness_columns), + nil::crypto3::marshalling::types::integral(desc.public_input_columns), + nil::crypto3::marshalling::types::integral(desc.constant_columns), + nil::crypto3::marshalling::types::integral(desc.selector_columns), + nil::crypto3::marshalling::types::integral(desc.usable_rows_amount), + nil::crypto3::marshalling::types::integral(desc.rows_amount)))); } template zk::snark::plonk_table_description make_assignment_table_description( - const plonk_assignment_table_description> &filled_description) { + const plonk_assignment_table_description> &filled_description) { zk::snark::plonk_table_description desc( std::get<0>(filled_description.value()).value(), @@ -99,64 +100,52 @@ namespace nil { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// template - using plonk_assignment_table = nil::marshalling::types::bundle< + using plonk_assignment_table = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::integral, // witness_amount - nil::marshalling::types::integral, // public_input_amount - nil::marshalling::types::integral, // constant_amount - nil::marshalling::types::integral, // selector_amount + nil::crypto3::marshalling::types::integral, // witness_amount + nil::crypto3::marshalling::types::integral, // public_input_amount + nil::crypto3::marshalling::types::integral, // constant_amount + nil::crypto3::marshalling::types::integral, // selector_amount - nil::marshalling::types::integral, // usable_rows - nil::marshalling::types::integral, // rows_amount + nil::crypto3::marshalling::types::integral, // usable_rows + nil::crypto3::marshalling::types::integral, // rows_amount // witnesses - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + field_element >, // public_inputs - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + field_element >, // constants - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + field_element >, // selectors - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral> + field_element > > >; template - nil::marshalling::types::array_list< - nil::marshalling::field_type, - field_element, FieldValueType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + field_element, FieldValueType>> fill_field_element_vector_from_columns_with_padding( const std::vector> &columns, const std::size_t size, const FieldValueType &padding) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using field_element_type = field_element; - using field_element_vector_type = nil::marshalling::types::array_list< + using field_element_vector_type = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - field_element_type, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + field_element_type>; field_element_vector_type result; result.value().reserve(size * columns.size()); @@ -172,19 +161,25 @@ namespace nil { } template - std::vector> make_field_element_columns_vector( - const nil::marshalling::types::array_list< - nil::marshalling::field_type, - field_element, FieldValueType>, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral, std::size_t>>> + std::vector> + make_field_element_columns_vector( + const nil::crypto3::marshalling::types::standard_array_list< + nil::crypto3::marshalling::field_type, + field_element, FieldValueType>> &field_elem_vector, const std::size_t columns_amount, const std::size_t rows_amount) { + if (field_elem_vector.value().size() != columns_amount * rows_amount) { + throw std::invalid_argument( + "Size of vector does not match the expected data size. Expected: " + + std::to_string(columns_amount * rows_amount) + " got " + + std::to_string(field_elem_vector.value().size())); + } + std::vector> result( columns_amount, std::vector(rows_amount)); - BOOST_ASSERT(field_elem_vector.value().size() == columns_amount * rows_amount); + std::size_t cur = 0; for (std::size_t i = 0; i < columns_amount; i++) { for (std::size_t j = 0; j < rows_amount; j++, cur++) { @@ -195,21 +190,21 @@ namespace nil { } template - plonk_assignment_table, PlonkTable> fill_assignment_table( + plonk_assignment_table, PlonkTable> fill_assignment_table( std::size_t usable_rows, const PlonkTable &assignments ) { - using TTypeBase = nil::marshalling::field_type; - using result_type = plonk_assignment_table, PlonkTable>; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = plonk_assignment_table, PlonkTable>; using value_type = typename PlonkTable::field_type::value_type; return result_type(std::move(std::make_tuple( - nil::marshalling::types::integral(assignments.witnesses_amount()), - nil::marshalling::types::integral(assignments.public_inputs_amount()), - nil::marshalling::types::integral(assignments.constants_amount()), - nil::marshalling::types::integral(assignments.selectors_amount()), - nil::marshalling::types::integral(usable_rows), - nil::marshalling::types::integral(assignments.rows_amount()), + nil::crypto3::marshalling::types::integral(assignments.witnesses_amount()), + nil::crypto3::marshalling::types::integral(assignments.public_inputs_amount()), + nil::crypto3::marshalling::types::integral(assignments.constants_amount()), + nil::crypto3::marshalling::types::integral(assignments.selectors_amount()), + nil::crypto3::marshalling::types::integral(usable_rows), + nil::crypto3::marshalling::types::integral(assignments.rows_amount()), fill_field_element_vector_from_columns_with_padding( assignments.witnesses(), assignments.rows_amount(), @@ -234,7 +229,7 @@ namespace nil { } template std::pair, PlonkTable> make_assignment_table( - const plonk_assignment_table, PlonkTable> &filled_assignments){ + const plonk_assignment_table, PlonkTable> &filled_assignments){ using value_type = typename PlonkTable::field_type::value_type; @@ -247,7 +242,7 @@ namespace nil { std::get<5>(filled_assignments.value()).value() ); - if ( desc.usable_rows_amount >= desc.rows_amount ) + if (desc.usable_rows_amount >= desc.rows_amount) throw std::invalid_argument( "Rows amount should be greater than usable rows amount. Rows amount = " + std::to_string(desc.rows_amount) + @@ -259,18 +254,21 @@ namespace nil { desc.witness_columns, desc.rows_amount ); + std::vector> public_inputs = make_field_element_columns_vector( std::get<7>(filled_assignments.value()), desc.public_input_columns, desc.rows_amount ); + std::vector> constants = make_field_element_columns_vector( std::get<8>(filled_assignments.value()), desc.constant_columns, desc.rows_amount ); + std::vector> selectors = make_field_element_columns_vector( std::get<9>(filled_assignments.value()), @@ -278,9 +276,17 @@ namespace nil { desc.rows_amount ); + + using private_table = typename PlonkTable::private_table_type; + using public_table = typename PlonkTable::public_table_type; + return std::make_pair(desc, PlonkTable( - typename PlonkTable::private_table_type(witnesses), - typename PlonkTable::public_table_type(public_inputs, constants, selectors) + std::make_shared(std::move(witnesses)), + std::make_shared( + std::move(public_inputs), + std::move(constants), + std::move(selectors) + ) )); } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint.hpp index 6e957b8347..6d92c2f0b5 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint.hpp @@ -48,30 +48,29 @@ namespace nil { using plonk_constraint = typename expression::type; template - plonk_constraint, PlonkConstraint> + plonk_constraint, PlonkConstraint> fill_plonk_constraint(const PlonkConstraint &constr) { return fill_expression(constr); } template PlonkConstraint make_plonk_constraint( - const plonk_constraint, PlonkConstraint> &filled_constr - ) { + const plonk_constraint, PlonkConstraint> &filled_constr) + { return make_expression(filled_constr); } /*********************** Vector of plonk constraints as an input to gate ****************************/ template - using plonk_constraints = nil::marshalling::types::array_list< + using plonk_constraints = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - plonk_constraint, - nil::marshalling::option::sequence_size_field_prefix> + plonk_constraint >; template - plonk_constraints, Constraint> + plonk_constraints, Constraint> fill_plonk_constraints(const std::vector &constraints) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; plonk_constraints filled_constraints; for (const auto &constraint : constraints) { @@ -83,7 +82,8 @@ namespace nil { template std::vector - make_plonk_constraints(const plonk_constraints, Constraint> &filled_constraints){ + make_plonk_constraints(const plonk_constraints, Constraint> &filled_constraints) + { std::vector constraints; for (std::size_t i = 0; i < filled_constraints.value().size(); i++) { constraints.emplace_back(make_plonk_constraint(filled_constraints.value().at(i))); diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint_system.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint_system.hpp index c98599f975..ac2209b46b 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint_system.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/constraint_system.hpp @@ -50,14 +50,10 @@ namespace nil { namespace types { template using public_input_sizes_type = - nil::marshalling::types::array_list< - TTypeBase, - nil::marshalling::types::integral, - nil::marshalling::option::sequence_size_field_prefix> - >; + nil::crypto3::marshalling::types::standard_size_t_array_list; template - using plonk_constraint_system = nil::marshalling::types::bundle< + using plonk_constraint_system = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< plonk_gates< TTypeBase, typename PlonkConstraintSystem::gates_container_type::value_type >, // gates plonk_copy_constraints< TTypeBase, typename PlonkConstraintSystem::field_type >, // copy constraints @@ -70,13 +66,13 @@ namespace nil { >; template - plonk_constraint_system, PlonkConstraintSystem> + plonk_constraint_system, PlonkConstraintSystem> fill_plonk_constraint_system(const PlonkConstraintSystem &system) { - using TTypeBase = nil::marshalling::field_type; - using result_type = plonk_constraint_system, PlonkConstraintSystem>; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = plonk_constraint_system, PlonkConstraintSystem>; public_input_sizes_type public_input_sizes; for(std::size_t i = 0; i < system.public_input_sizes_num(); i++){ - public_input_sizes.value().push_back(nil::marshalling::types::integral, std::size_t>(system.public_input_size(i))); + public_input_sizes.value().push_back(nil::crypto3::marshalling::types::integral, std::size_t>(system.public_input_size(i))); } return result_type(std::make_tuple( @@ -89,14 +85,14 @@ namespace nil { } template - PlonkConstraintSystem - make_plonk_constraint_system( - const plonk_constraint_system, PlonkConstraintSystem> &filled_system - ){ + PlonkConstraintSystem make_plonk_constraint_system( + const plonk_constraint_system, PlonkConstraintSystem> &filled_system) + { std::vector public_input_sizes; for(std::size_t i = 0; i < std::get<4>(filled_system.value()).value().size(); i++){ public_input_sizes.push_back(std::get<4>(filled_system.value()).value().at(i).value()); } + return PlonkConstraintSystem( make_plonk_gates(std::get<0>(filled_system.value())), make_plonk_copy_constraints(std::get<1>(filled_system.value())), diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/copy_constraint.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/copy_constraint.hpp index 26c33aac93..3691914130 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/copy_constraint.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/copy_constraint.hpp @@ -20,15 +20,15 @@ namespace nil { // *********************** Plonk copy constraint **************************** // template - using plonk_copy_constraint = nil::marshalling::types::bundle>::type, typename variable>::type >>; template - plonk_copy_constraint, FieldType> + plonk_copy_constraint, FieldType> fill_plonk_copy_constraint(const nil::crypto3::zk::snark::plonk_copy_constraint ©_constraint){ - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using result_type = plonk_copy_constraint; using VariableType = nil::crypto3::zk::snark::plonk_variable; @@ -42,8 +42,9 @@ namespace nil { template nil::crypto3::zk::snark::plonk_copy_constraint - make_plonk_copy_constraint(const plonk_copy_constraint, FieldType> &filled_copy_constraint - ){ + make_plonk_copy_constraint( + const plonk_copy_constraint, FieldType> &filled_copy_constraint) + { using VariableType = nil::crypto3::zk::snark::plonk_variable; return nil::crypto3::zk::snark::plonk_copy_constraint( make_variable(std::get<0>(filled_copy_constraint.value())), @@ -54,16 +55,15 @@ namespace nil { // *********************** Plonk copy constraints **************************** // template - using plonk_copy_constraints = nil::marshalling::types::array_list< + using plonk_copy_constraints = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - plonk_copy_constraint, - nil::marshalling::option::sequence_size_field_prefix> + plonk_copy_constraint >; template - plonk_copy_constraints, FieldType> + plonk_copy_constraints, FieldType> fill_plonk_copy_constraints(const std::vector> &constraints) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; plonk_copy_constraints filled_constraints; for (const auto &constraint : constraints) { @@ -78,9 +78,11 @@ namespace nil { template std::vector > make_plonk_copy_constraints( - const plonk_copy_constraints, FieldType> &filled_constraints - ){ - std::vector< nil::crypto3::zk::snark::plonk_copy_constraint > constraints; + const plonk_copy_constraints, FieldType> &filled_constraints) + { + std::vector> constraints; + constraints.reserve(filled_constraints.value().size()); + for (std::size_t i = 0; i < filled_constraints.value().size(); i++) { constraints.emplace_back(make_plonk_copy_constraint(filled_constraints.value()[i])); } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/gate.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/gate.hpp index e8402cce08..713d3d2826 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/gate.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/gate.hpp @@ -43,30 +43,27 @@ namespace nil { namespace types { template - using plonk_gate = nil::marshalling::types::bundle< + using plonk_gate = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::size_t selector_index - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // std::vector> constraints - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - plonk_constraint, - nil::marshalling::option::sequence_size_field_prefix - > + plonk_constraint > > >; template - plonk_gate, PlonkGate> fill_plonk_gate(const PlonkGate &gate) { - using TTypeBase = nil::marshalling::field_type; + plonk_gate, PlonkGate> fill_plonk_gate(const PlonkGate &gate) { + using TTypeBase = nil::crypto3::marshalling::field_type; using result_type = plonk_gate; - using size_t_marshalling_type = nil::marshalling::types::integral; + using size_t_marshalling_type = nil::crypto3::marshalling::types::integral; using constraint_marshalling_type = plonk_constraint; - using constraint_vector_marshalling_type = nil::marshalling::types::array_list< - TTypeBase, constraint_marshalling_type, - nil::marshalling::option::sequence_size_field_prefix>; + using constraint_vector_marshalling_type = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, constraint_marshalling_type>; constraint_vector_marshalling_type filled_constraints; for (const auto &constr : gate.constraints) { @@ -80,14 +77,18 @@ namespace nil { template PlonkGate make_plonk_gate( - const plonk_gate, PlonkGate> &filled_gate) { + const plonk_gate, PlonkGate> &filled_gate) + { std::size_t selector_index = std::get<0>(filled_gate.value()).value(); + auto const& filled_constraints = std::get<1>(filled_gate.value()).value(); std::vector constraints; - for (std::size_t i = 0; i < std::get<1>(filled_gate.value()).value().size(); i++) { + constraints.reserve(filled_constraints.size()); + + for (std::size_t i = 0; i < filled_constraints.size(); i++) { constraints.emplace_back(make_plonk_constraint( - std::get<1>(filled_gate.value()).value().at(i))); + filled_constraints.at(i))); } return {selector_index, constraints}; @@ -95,18 +96,14 @@ namespace nil { template using plonk_gates = - nil::marshalling::types::array_list, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + nil::crypto3::marshalling::types::standard_array_list>; template - plonk_gates, PlonkGate> + plonk_gates, PlonkGate> fill_plonk_gates(const InputRange &gates) { - using TTypeBase = nil::marshalling::field_type; - using result_type = nil::marshalling::types::array_list< - TTypeBase, plonk_gate, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, plonk_gate>; result_type filled_gates; for (const auto &gate : gates) { @@ -118,8 +115,10 @@ namespace nil { template std::vector make_plonk_gates( - const plonk_gates, PlonkGate> &filled_gates) { + const plonk_gates, PlonkGate> &filled_gates) + { std::vector gates; + gates.reserve(filled_gates.value().size()); for (std::size_t i = 0; i < filled_gates.value().size(); i++) { gates.emplace_back(make_plonk_gate(filled_gates.value().at(i))); } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_constraint.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_constraint.hpp index d4273c9f82..4d0b61d66a 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_constraint.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_constraint.hpp @@ -46,25 +46,27 @@ namespace nil { // For example selector algorithms may be completely different. // *********************** Lookup constraint **************************** // template - using plonk_lookup_constraint = nil::marshalling::types::bundle, // table_id + using plonk_lookup_constraint = nil::crypto3::marshalling::types::bundle, // table_id plonk_constraints // constraint >>; template - plonk_lookup_constraint, Constraint> + plonk_lookup_constraint, Constraint> fill_plonk_lookup_constraint(const Constraint &constraint){ - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; return plonk_lookup_constraint( std::tuple( - nil::marshalling::types::integral(constraint.table_id), + nil::crypto3::marshalling::types::integral(constraint.table_id), fill_plonk_constraints(constraint.lookup_input) ) ); } template - Constraint make_plonk_lookup_constraint(const plonk_lookup_constraint, Constraint> &filled_constraint){ + Constraint make_plonk_lookup_constraint( + const plonk_lookup_constraint, Constraint> &filled_constraint) + { return Constraint({ std::get<0>(filled_constraint.value()).value(), make_plonk_constraints(std::get<1>(filled_constraint.value())) @@ -73,16 +75,15 @@ namespace nil { // *********************** Vector of lookup constraints for a lookup gate **************************** // template - using plonk_lookup_constraints = nil::marshalling::types::array_list< + using plonk_lookup_constraints = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - plonk_lookup_constraint, - nil::marshalling::option::sequence_size_field_prefix> + plonk_lookup_constraint >; template - plonk_lookup_constraints, Constraint> + plonk_lookup_constraints, Constraint> fill_plonk_lookup_constraints(const std::vector &constraints) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; plonk_lookup_constraints filled_constraints; for (const auto &constraint : constraints) { @@ -93,9 +94,11 @@ namespace nil { } template - std::vector - make_plonk_lookup_constraints(const plonk_lookup_constraints, Constraint> &filled_constraints){ + std::vector make_plonk_lookup_constraints( + const plonk_lookup_constraints, Constraint> &filled_constraints) + { std::vector constraints; + constraints.reserve(filled_constraints.value().size()); for (std::size_t i = 0; i < filled_constraints.value().size(); i++) { constraints.emplace_back(make_plonk_lookup_constraint(filled_constraints.value().at(i))); } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_gate.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_gate.hpp index 756c558eb0..802d126f8b 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_gate.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_gate.hpp @@ -43,30 +43,27 @@ namespace nil { namespace marshalling { namespace types { template - using plonk_lookup_gate = nil::marshalling::types::bundle< + using plonk_lookup_gate = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::size_t selector_index - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // std::vector> constraints - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - plonk_lookup_constraint, - nil::marshalling::option::sequence_size_field_prefix - > + plonk_lookup_constraint > > >; template - plonk_lookup_gate, PlonkGate> fill_plonk_lookup_gate(const PlonkGate &gate) { - using TTypeBase = nil::marshalling::field_type; + plonk_lookup_gate, PlonkGate> fill_plonk_lookup_gate(const PlonkGate &gate) { + using TTypeBase = nil::crypto3::marshalling::field_type; using result_type = plonk_lookup_gate; - using size_t_marshalling_type = nil::marshalling::types::integral; + using size_t_marshalling_type = nil::crypto3::marshalling::types::integral; using constraint_marshalling_type = plonk_lookup_constraint; - using constraint_vector_marshalling_type = nil::marshalling::types::array_list< - TTypeBase, constraint_marshalling_type, - nil::marshalling::option::sequence_size_field_prefix>; + using constraint_vector_marshalling_type = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, constraint_marshalling_type>; constraint_vector_marshalling_type filled_constraints; for (const auto &constr : gate.constraints) { @@ -80,8 +77,8 @@ namespace nil { template PlonkGate make_plonk_lookup_gate( - const plonk_lookup_gate, PlonkGate> &filled_gate) { - + const plonk_lookup_gate, PlonkGate> &filled_gate) + { std::size_t selector_index = std::get<0>(filled_gate.value()).value(); std::vector constraints; @@ -95,19 +92,16 @@ namespace nil { template using plonk_lookup_gates = - nil::marshalling::types::array_list< - TTypeBase, plonk_lookup_gate, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, plonk_lookup_gate >; template - plonk_lookup_gates, PlonkGate> + plonk_lookup_gates, PlonkGate> fill_plonk_lookup_gates(const InputRange &gates) { - using TTypeBase = nil::marshalling::field_type; - using result_type = nil::marshalling::types::array_list< - TTypeBase, plonk_lookup_gate, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, plonk_lookup_gate>; result_type filled_gates; for (const auto &gate : gates) { @@ -119,8 +113,10 @@ namespace nil { template std::vector make_plonk_lookup_gates( - const plonk_lookup_gates, PlonkGate> &filled_gates) { + const plonk_lookup_gates, PlonkGate> &filled_gates) + { std::vector gates; + gates.reserve(filled_gates.value().size()); for (std::size_t i = 0; i < filled_gates.value().size(); i++) { gates.emplace_back(make_plonk_lookup_gate(filled_gates.value().at(i))); } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_table.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_table.hpp index 6659d2d60c..cb4ec7c97d 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_table.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/lookup_table.hpp @@ -42,34 +42,37 @@ namespace nil { namespace types { template - using plonk_lookup_table = nil::marshalling::types::bundle< + using plonk_lookup_table = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< - nil::marshalling::types::integral, // tag_index - nil::marshalling::types::integral, // columns_number + nil::crypto3::marshalling::types::integral, // tag_index + nil::crypto3::marshalling::types::integral, // columns_number - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename variable::type, - nil::marshalling::option::sequence_size_field_prefix> + typename variable::type > > >; template - plonk_lookup_table, LookupTable> + plonk_lookup_table, LookupTable> fill_plonk_lookup_table(const LookupTable &table){ - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using variable_type = typename LookupTable::variable_type; - nil::marshalling::types::array_list< + nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename variable::type, - nil::marshalling::option::sequence_size_field_prefix> + typename variable::type > filled_options; for( std::size_t i = 0; i < table.lookup_options.size(); i++ ){ - BOOST_ASSERT(table.lookup_options[i].size() == table.columns_number); - for( std::size_t j = 0; j < table.lookup_options[i].size(); j++){ + if (table.lookup_options[i].size() != table.columns_number) { + throw std::invalid_argument( + std::string("Number of columns do not match. Expected: ") + + std::to_string(table.lookup_options[i].size()) + " got: " + + std::to_string(table.columns_number)); + } + for (std::size_t j = 0; j < table.lookup_options[i].size(); j++) { filled_options.value().push_back( fill_variable(table.lookup_options[i][j]) ); @@ -77,8 +80,8 @@ namespace nil { } return plonk_lookup_table( std::make_tuple( - nil::marshalling::types::integral(table.tag_index), - nil::marshalling::types::integral(table.columns_number), + nil::crypto3::marshalling::types::integral(table.tag_index), + nil::crypto3::marshalling::types::integral(table.columns_number), filled_options ) ); @@ -86,19 +89,25 @@ namespace nil { template LookupTable make_plonk_lookup_table( - const plonk_lookup_table, LookupTable> &filled_table + const plonk_lookup_table, LookupTable> &filled_table ) { std::size_t tag_index = std::get<0>(filled_table.value()).value(); std::size_t columns_number = std::get<1>(filled_table.value()).value(); LookupTable result(columns_number, tag_index); + if (std::get<2>(filled_table.value()).value().size() % columns_number != 0) { + throw std::invalid_argument( + std::string("Number of elements in array should be multiple of columns number = ") + + std::to_string(columns_number) + " got: " + + std::to_string(std::get<2>(filled_table.value()).value().size())); + + } std::size_t op_n = std::get<2>(filled_table.value()).value().size() / columns_number; - BOOST_ASSERT(std::get<2>(filled_table.value()).value().size() % columns_number == 0); std::size_t cur = 0; for (std::size_t i = 0; i < op_n; i++) { std::vector row; - for( std::size_t j = 0; j < columns_number; j++, cur++ ){ + for (std::size_t j = 0; j < columns_number; j++, cur++ ) { row.emplace_back( make_variable( std::get<2>(filled_table.value()).value().at(cur) @@ -112,19 +121,16 @@ namespace nil { template using plonk_lookup_tables = - nil::marshalling::types::array_list< - TTypeBase, plonk_lookup_table, - nil::marshalling::option::sequence_size_field_prefix> + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, plonk_lookup_table >; template - plonk_lookup_tables, PlonkTable> + plonk_lookup_tables, PlonkTable> fill_plonk_lookup_tables(const InputRange &tables) { - using TTypeBase = nil::marshalling::field_type; - using result_type = nil::marshalling::types::array_list< - TTypeBase, plonk_lookup_table, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>; + using TTypeBase = nil::crypto3::marshalling::field_type; + using result_type = nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, plonk_lookup_table>; result_type filled_tables; for (const auto &table : tables) { @@ -136,8 +142,10 @@ namespace nil { template std::vector make_plonk_lookup_tables( - const plonk_lookup_tables, PlonkTable> &filled_tables) { + const plonk_lookup_tables, PlonkTable> &filled_tables) + { std::vector tables; + tables.reserve(filled_tables.value().size()); for (std::size_t i = 0; i < filled_tables.value().size(); i++) { tables.emplace_back(make_plonk_lookup_table(filled_tables.value().at(i))); } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/plonk_public_polynomial_dfs_table.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/plonk_public_polynomial_dfs_table.hpp index 61aaceb9db..ee0c004054 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/plonk_public_polynomial_dfs_table.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/plonk_public_polynomial_dfs_table.hpp @@ -45,7 +45,7 @@ namespace nil { namespace types { template - using plonk_public_polynomial_table = nil::marshalling::types::bundle< + using plonk_public_polynomial_table = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // public_inputs polynomial_vector, @@ -57,12 +57,12 @@ namespace nil { >; template - plonk_public_polynomial_table, PlonkPublicTable> fill_plonk_public_table( + plonk_public_polynomial_table, PlonkPublicTable> fill_plonk_public_table( const PlonkPublicTable &public_table ) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using PolynomialType = typename PlonkPublicTable::column_type; - using result_type = plonk_public_polynomial_table, PlonkPublicTable>; + using result_type = plonk_public_polynomial_table, PlonkPublicTable>; return result_type(std::make_tuple( fill_polynomial_vector(public_table.public_inputs()), fill_polynomial_vector(public_table.constants()), @@ -71,12 +71,15 @@ namespace nil { } template - PlonkPublicTable make_plonk_public_table( - const plonk_public_polynomial_table, PlonkPublicTable> &filled_public_table) { - using TTypeBase = nil::marshalling::field_type; + std::shared_ptr make_plonk_public_table( + const plonk_public_polynomial_table< + nil::crypto3::marshalling::field_type, + PlonkPublicTable> &filled_public_table) + { + using TTypeBase = nil::crypto3::marshalling::field_type; using PolynomialType = typename PlonkPublicTable::column_type; - - return PlonkPublicTable( + + return std::make_shared( make_polynomial_vector(std::get<0>(filled_public_table.value())), make_polynomial_vector(std::get<1>(filled_public_table.value())), make_polynomial_vector(std::get<2>(filled_public_table.value())) diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/variable.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/variable.hpp index d00f411f5f..c1bc602b3d 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/variable.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/plonk/variable.hpp @@ -47,29 +47,29 @@ namespace nil { //********************************* plonk_variable ***************************/ template struct variable { - using type = nil::marshalling::types::bundle< + using type = nil::crypto3::marshalling::types::bundle< TTypeBase, std::tuple< // std::size_t index - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // std::int32_t rotation - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, //bool relative - nil::marshalling::types::integral, + nil::crypto3::marshalling::types::integral, // enum column_type : std::uint8_t { witness, public_input, constant, selector } type - nil::marshalling::types::integral> + nil::crypto3::marshalling::types::integral> >; }; template - typename variable, Variable>::type + typename variable, Variable>::type fill_variable(const Variable &var) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using result_type = typename variable::type; - using size_t_marshalling_type = nil::marshalling::types::integral; - using int32_marshalling_type = nil::marshalling::types::integral; - using octet_marshalling_type = nil::marshalling::types::integral; - using bool_marshalling_type = nil::marshalling::types::integral; + using size_t_marshalling_type = nil::crypto3::marshalling::types::integral; + using int32_marshalling_type = nil::crypto3::marshalling::types::integral; + using octet_marshalling_type = nil::crypto3::marshalling::types::integral; + using bool_marshalling_type = nil::crypto3::marshalling::types::integral; return result_type(std::make_tuple( size_t_marshalling_type(var.index), @@ -81,8 +81,8 @@ namespace nil { template Variable make_variable( - const typename variable, Variable>::type &filled_var - ) { + const typename variable, Variable>::type &filled_var) + { return Variable(std::get<0>(filled_var.value()).value(), std::get<1>(filled_var.value()).value(), std::get<2>(filled_var.value()).value(), @@ -91,16 +91,15 @@ namespace nil { //****************** vector of plonk_variable *************************/ template - using variables = nil::marshalling::types::array_list< + using variables = nil::crypto3::marshalling::types::standard_array_list< TTypeBase, - typename variable::type, - nil::marshalling::option::sequence_size_field_prefix> + typename variable::type >; template - variables, typename Variable::assignment_type> + variables, typename Variable::assignment_type> fill_variables(const std::vector &vars) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using AssignmentType = typename Variable::assignment_type; variables filled_vars; @@ -112,9 +111,11 @@ namespace nil { } template - std::vector - make_variables(const variables, typename Variable::assignment_type> &filled_vars){ + std::vector make_variables( + const variables, typename Variable::assignment_type> &filled_vars) + { std::vector vars; + vars.reserve(filled_vars.value().size()); for (std::size_t i = 0; i < filled_vars.value().size(); i++) { vars.emplace_back(make_variable(filled_vars.value().at(i))); } diff --git a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/sparse_vector.hpp b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/sparse_vector.hpp index f4d899080c..41da1128a4 100644 --- a/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/sparse_vector.hpp +++ b/crypto3/libs/marshalling/zk/include/nil/crypto3/marshalling/zk/types/sparse_vector.hpp @@ -55,76 +55,64 @@ namespace nil { typename TTypeBase, typename SparseVector, typename = typename std::enable_if< - std::is_same>::value, + std::is_same>::value, bool>::type, typename... TOptions> - using sparse_vector = nil::marshalling::types::bundle< + using sparse_vector = nil::crypto3::marshalling::types::bundle< TTypeBase, - std::tuple, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - nil::marshalling::types::array_list< - TTypeBase, - curve_element, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - nil::marshalling::types::integral>>; + std::tuple< + nil::crypto3::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, + curve_element>, + nil::crypto3::marshalling::types::integral + > + >; template>::value, + nil::crypto3::container::sparse_vector>::value, bool>::type, typename... TOptions> - using knowledge_commitment_sparse_vector = nil::marshalling::types::bundle< + using knowledge_commitment_sparse_vector = nil::crypto3::marshalling::types::bundle< TTypeBase, - std::tuple, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - nil::marshalling::types::array_list< - TTypeBase, - knowledge_commitment, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - nil::marshalling::types::integral>>; + std::tuple< + nil::crypto3::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, + knowledge_commitment>, + nil::crypto3::marshalling::types::integral + > + >; template>::value, + nil::crypto3::container::sparse_vector>::value, bool>::type, typename... TOptions> - using fast_knowledge_commitment_sparse_vector = nil::marshalling::types::bundle< + using fast_knowledge_commitment_sparse_vector = nil::crypto3::marshalling::types::bundle< TTypeBase, - std::tuple, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - nil::marshalling::types::array_list< - TTypeBase, - fast_knowledge_commitment, - nil::marshalling::option::sequence_size_field_prefix< - nil::marshalling::types::integral>>, - nil::marshalling::types::integral>>; + std::tuple< + nil::crypto3::marshalling::types::standard_size_t_array_list, + nil::crypto3::marshalling::types::standard_array_list< + TTypeBase, + fast_knowledge_commitment>, + nil::crypto3::marshalling::types::integral + > + >; template - sparse_vector, SparseVector> + sparse_vector, SparseVector> fill_sparse_vector(const SparseVector &sparse_vector_inp) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; - using integral_type = nil::marshalling::types::integral; - using integral_vector_type = nil::marshalling::types::array_list< - TTypeBase, - integral_type, - nil::marshalling::option::sequence_size_field_prefix>; + using integral_type = nil::crypto3::marshalling::types::integral; + using integral_vector_type = nil::crypto3::marshalling::types::standard_size_t_array_list; integral_vector_type filled_indices; @@ -133,7 +121,7 @@ namespace nil { filled_indices_val.push_back(integral_type(sparse_vector_inp.indices[i])); } - return sparse_vector, SparseVector>( + return sparse_vector, SparseVector>( std::make_tuple(filled_indices, fill_curve_element_vector( sparse_vector_inp.values), @@ -142,11 +130,11 @@ namespace nil { template SparseVector make_sparse_vector( - const sparse_vector, SparseVector> &filled_sparse_vector) { + const sparse_vector, SparseVector> &filled_sparse_vector) + { + using TTypeBase = nil::crypto3::marshalling::field_type; - using TTypeBase = nil::marshalling::field_type; - - using integral_type = nil::marshalling::types::integral; + using integral_type = nil::crypto3::marshalling::types::integral; std::vector constructed_indices; const std::vector &filled_indices = @@ -167,16 +155,13 @@ namespace nil { } template - knowledge_commitment_sparse_vector, KCSparseVector> + knowledge_commitment_sparse_vector, KCSparseVector> fill_knowledge_commitment_sparse_vector(const KCSparseVector &knowledge_commitment_sparse_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; - using integral_type = nil::marshalling::types::integral; - using integral_vector_type = nil::marshalling::types::array_list< - TTypeBase, - integral_type, - nil::marshalling::option::sequence_size_field_prefix>; + using integral_type = nil::crypto3::marshalling::types::integral; + using integral_vector_type = nil::crypto3::marshalling::types::standard_size_t_array_list; integral_vector_type filled_indices; @@ -186,7 +171,7 @@ namespace nil { } return ::nil::crypto3::marshalling::types:: - knowledge_commitment_sparse_vector, KCSparseVector>( + knowledge_commitment_sparse_vector, KCSparseVector>( std::make_tuple( filled_indices, fill_knowledge_commitment_vector( @@ -196,12 +181,12 @@ namespace nil { template KCSparseVector make_knowledge_commitment_vector( - const knowledge_commitment_sparse_vector, KCSparseVector> + const knowledge_commitment_sparse_vector, KCSparseVector> &filled_kc_sparse_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; - using integral_type = nil::marshalling::types::integral; + using integral_type = nil::crypto3::marshalling::types::integral; std::vector constructed_indices; const std::vector &filled_indices = @@ -222,17 +207,14 @@ namespace nil { } template - fast_knowledge_commitment_sparse_vector, KCSparseVector> + fast_knowledge_commitment_sparse_vector, KCSparseVector> fill_fast_knowledge_commitment_sparse_vector(const KCSparseVector &knowledge_commitment_sparse_vector) { - using TTypeBase = nil::marshalling::field_type; - - using integral_type = nil::marshalling::types::integral; - using integral_vector_type = nil::marshalling::types::array_list< - TTypeBase, - integral_type, - nil::marshalling::option::sequence_size_field_prefix>; + using TTypeBase = nil::crypto3::marshalling::field_type; + using integral_type = nil::crypto3::marshalling::types::integral; + using integral_vector_type = nil::crypto3::marshalling::types::standard_size_t_array_list; + integral_vector_type filled_indices; std::vector &filled_indices_val = filled_indices.value(); @@ -241,7 +223,7 @@ namespace nil { } return ::nil::crypto3::marshalling::types:: - fast_knowledge_commitment_sparse_vector, KCSparseVector>( + fast_knowledge_commitment_sparse_vector, KCSparseVector>( std::make_tuple( filled_indices, fill_fast_knowledge_commitment_vector( @@ -251,12 +233,12 @@ namespace nil { template KCSparseVector make_fast_knowledge_commitment_vector( - const fast_knowledge_commitment_sparse_vector, KCSparseVector> + const fast_knowledge_commitment_sparse_vector, KCSparseVector> &filled_kc_sparse_vector) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; - using integral_type = nil::marshalling::types::integral; + using integral_type = nil::crypto3::marshalling::types::integral; std::vector constructed_indices; const std::vector &filled_indices = diff --git a/crypto3/libs/marshalling/zk/include/nil/detail/type_traits.hpp b/crypto3/libs/marshalling/zk/include/nil/detail/type_traits.hpp deleted file mode 100644 index 9873546cca..0000000000 --- a/crypto3/libs/marshalling/zk/include/nil/detail/type_traits.hpp +++ /dev/null @@ -1,297 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef NIL_DETAIL_TYPE_TRAITS_HPP -#define NIL_DETAIL_TYPE_TRAITS_HPP - -#include - -#include -#include - -#include -#include - -#define GENERATE_HAS_MEMBER_TYPE(Type) \ - template \ - class HasMemberType_##Type { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMemberType_##Type::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - struct Type { }; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(typename U::Type *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##Type : public std::integral_constant::RESULT> { }; - -#define GENERATE_HAS_MEMBER(member) \ - template \ - class HasMember_##member { \ - public: \ - static constexpr bool RESULT = false; \ - }; \ - \ - template \ - class HasMember_##member::value || std::is_union::value>::type> { \ - private: \ - using Yes = char[2]; \ - using No = char[1]; \ - \ - struct Fallback { \ - int member; \ - }; \ - struct Derived : T, Fallback { }; \ - \ - template \ - static No &test(decltype(U::member) *); \ - template \ - static Yes &test(U *); \ - \ - public: \ - static constexpr bool RESULT = sizeof(test(nullptr)) == sizeof(Yes); \ - }; \ - \ - template \ - struct has_##member : public std::integral_constant::RESULT> { }; - -#define GENERATE_HAS_MEMBER_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_CONST_FUNCTION(Function, ...) \ - \ - template \ - struct has_##Function { \ - struct Fallback { \ - void Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__); \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -#define GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(Function, ReturnType, ...) \ - \ - template \ - struct has_##Function { \ - struct Dummy { \ - typedef void ReturnType; \ - }; \ - typedef typename std::conditional::value, T, Dummy>::type TType; \ - typedef typename TType::ReturnType type; \ - \ - struct Fallback { \ - type Function(##__VA_ARGS__) const; \ - }; \ - \ - struct Derived : TType, Fallback { }; \ - \ - template \ - struct ChT; \ - \ - template \ - static char (&f(ChT *))[1]; \ - \ - template \ - static char (&f(...))[2]; \ - \ - static bool const value = sizeof(f(0)) == 2; \ - }; - -namespace nil { - namespace detail { - - GENERATE_HAS_MEMBER_TYPE(iterator) - GENERATE_HAS_MEMBER_TYPE(const_iterator) - - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(begin, const_iterator) - GENERATE_HAS_MEMBER_CONST_RETURN_FUNCTION(end, const_iterator) - - template - struct is_iterator { - static char test(...); - - template::difference_type, - typename = typename std::iterator_traits::pointer, - typename = typename std::iterator_traits::reference, - typename = typename std::iterator_traits::value_type, - typename = typename std::iterator_traits::iterator_category> - static long test(U &&); - - constexpr static bool value = std::is_same())), long>::value; - }; - - template - struct is_range { - static const bool value = has_begin::value && has_end::value; - }; - - template - struct is_container { - static const bool value - = has_const_iterator::value && has_begin::value && has_end::value; - }; - - /// @brief Check whether provided type is a variant of - /// std::tuple. - /// @tparam TType Type to check. - template - struct is_tuple { - /// @brief By default Value has value false. Will be true for any - /// variant of std::tuple. - static const bool value = false; - }; - - /// @cond SKIP_DOC - template - struct is_tuple> { - static const bool value = true; - }; - /// @endcond - - //---------------------------------------- - - /// @brief Check whether TType type is included in the tuple TTuple - /// @tparam TType Type to check - /// @tparam TTuple Tuple - /// @pre @code IsTuple::value == true @endcode - template - class is_in_tuple { - static_assert(is_tuple::value, "TTuple must be std::tuple"); - - public: - /// @brief By default the value is false, will be set to true if TType - /// is found in TTuple. - static const bool value = false; - }; - - /// @cond SKIP_DOC - template - class is_in_tuple> { - public: - static const bool value - = std::is_same::value || is_in_tuple>::value; - }; - - template - class is_in_tuple> { - public: - static const bool value = false; - }; - - template - struct is_array { - static const bool value = false; - }; - - template - struct is_array> { - static const bool value = true; - }; - - template - struct is_array> { - static const bool value = true; - }; - - /// @endcond - } // namespace detail -} // namespace nil - -#endif // NIL_DETAIL_TYPE_TRAITS_HPP \ No newline at end of file diff --git a/crypto3/libs/marshalling/zk/test/CMakeLists.txt b/crypto3/libs/marshalling/zk/test/CMakeLists.txt index 459e8264d4..f54dca72bc 100644 --- a/crypto3/libs/marshalling/zk/test/CMakeLists.txt +++ b/crypto3/libs/marshalling/zk/test/CMakeLists.txt @@ -22,6 +22,9 @@ cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} ${CMAKE_WORKSPACE_NAME}::marshalling-algebra ${CMAKE_WORKSPACE_NAME}::marshalling-core) +set_target_properties(_cm_internal_tests-crypto3-marshalling-zk-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-crypto3-marshalling-zk-test REUSE_FROM crypto3_precompiled_headers) + macro(define_marshalling_test test) get_filename_component(name ${test} NAME) @@ -37,7 +40,7 @@ macro(define_marshalling_test test) ${Boost_INCLUDE_DIRS}) set_target_properties(marshalling_zk_${name}_test PROPERTIES - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") @@ -45,7 +48,7 @@ macro(define_marshalling_test test) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(${full_test_name} PRIVATE "-fconstexpr-ops-limit=4294967295") endif() - + target_precompile_headers(${full_test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(TESTS_NAMES @@ -63,7 +66,6 @@ set(TESTS_NAMES "plonk_gates" "plonk_constraint_system" "plonk_assignment_table" -# "eddsa" ) foreach(TEST_NAME ${TESTS_NAMES}) diff --git a/crypto3/libs/marshalling/zk/test/accumulation_vector.cpp b/crypto3/libs/marshalling/zk/test/accumulation_vector.cpp index de88322a9b..0ef7468b14 100644 --- a/crypto3/libs/marshalling/zk/test/accumulation_vector.cpp +++ b/crypto3/libs/marshalling/zk/test/accumulation_vector.cpp @@ -36,9 +36,6 @@ #include #include -#include -#include - #include #include #include @@ -62,7 +59,7 @@ void test_accumulation_vector(nil::crypto3::container::accumulation_vector, nil::crypto3::container::accumulation_vector>; + types::accumulation_vector, nil::crypto3::container::accumulation_vector>; accumulation_vector_type filled_val = types::fill_accumulation_vector, Endianness>(val); @@ -79,14 +76,14 @@ void test_accumulation_vector(nil::crypto3::container::accumulation_vector constructed_val_read = types::make_accumulation_vector, Endianness>( @@ -117,7 +114,7 @@ BOOST_AUTO_TEST_SUITE(sparse_vector_test_suite) BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g1_be) { std::cout << "BLS12-381 g1 group accumulation vector big-endian test started" << std::endl; - test_accumulation_vector::g1_type<>, nil::marshalling::option::big_endian, + test_accumulation_vector::g1_type<>, nil::crypto3::marshalling::option::big_endian, 5>(); std::cout << "BLS12-381 g1 group accumulation vector big-endian test finished" << std::endl; } @@ -125,14 +122,14 @@ BOOST_AUTO_TEST_SUITE(sparse_vector_test_suite) // BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g1_le) { // std::cout << "BLS12-381 g1 group accumulation vector little-endian test started" << std::endl; // test_accumulation_vector::g1_type<>, -// nil::marshalling::option::little_endian, +// nil::crypto3::marshalling::option::little_endian, // 5>(); // std::cout << "BLS12-381 g1 group accumulation vector little-endian test finished" << std::endl; // } BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g2_be) { std::cout << "BLS12-381 g2 group accumulation vector big-endian test started" << std::endl; - test_accumulation_vector::g2_type<>, nil::marshalling::option::big_endian, + test_accumulation_vector::g2_type<>, nil::crypto3::marshalling::option::big_endian, 5>(); std::cout << "BLS12-381 g2 group accumulation vector big-endian test finished" << std::endl; } @@ -140,7 +137,7 @@ BOOST_AUTO_TEST_SUITE(sparse_vector_test_suite) // BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g2_le) { // std::cout << "BLS12-381 g2 group accumulation vector little-endian test started" << std::endl; // test_accumulation_vector::g2_type<>, -// nil::marshalling::option::little_endian, +// nil::crypto3::marshalling::option::little_endian, // 5>(); // std::cout << "BLS12-381 g2 group accumulation vector little-endian test finished" << std::endl; // } diff --git a/crypto3/libs/marshalling/zk/test/detail/circuits.hpp b/crypto3/libs/marshalling/zk/test/detail/circuits.hpp index b851d0aca0..ac0f819723 100644 --- a/crypto3/libs/marshalling/zk/test/detail/circuits.hpp +++ b/crypto3/libs/marshalling/zk/test/detail/circuits.hpp @@ -177,8 +177,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -316,8 +316,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -414,8 +414,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -521,8 +521,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); @@ -618,8 +618,8 @@ namespace nil { selectors_assignment[0][1] = 1u; test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -714,8 +714,8 @@ namespace nil { test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -820,8 +820,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + selector_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -972,8 +972,8 @@ namespace nil { std::vector> public_input_assignment(public_columns); test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -1128,8 +1128,8 @@ namespace nil { } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selector_assignment diff --git a/crypto3/libs/marshalling/zk/test/eddsa.cpp b/crypto3/libs/marshalling/zk/test/eddsa.cpp deleted file mode 100644 index d48a232589..0000000000 --- a/crypto3/libs/marshalling/zk/test/eddsa.cpp +++ /dev/null @@ -1,129 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Mikhail Komarov -// Copyright (c) 2022 Nikita Kaskov -// Copyright (c) 2022 Ilias Khairullin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE crypto3_marshalling_eddsa_test - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::algebra; -using namespace nil::marshalling; - -template -void print_byteblob(TIter iter_begin, TIter iter_end) { - for (TIter it = iter_begin; it != iter_end; it++) { - std::cout << std::hex << int(*it) << std::endl; - } -} - -template -void print_fp_curve_group_element(FpCurveGroupElement e) { - std::cout << e.X.data << " " << e.Y.data << " " << e.Z.data << std::endl; -} - -template -void print_fp2_curve_group_element(Fp2CurveGroupElement e) { - std::cout << "(" << e.X.data[0].data << " " << e.X.data[1].data << ") (" << e.Y.data[0].data << " " - << e.Y.data[1].data << ") (" << e.Z.data[0].data << " " << e.Z.data[1].data << ")" << std::endl; -} - - -BOOST_AUTO_TEST_SUITE(lpc_test_suite) - - BOOST_AUTO_TEST_CASE(lpc_bls12_381_be) { - using curve_type = algebra::curves::curve25519; - using group_type = typename curve_type::g1_type<>; - using group_affine_type = typename curve_type::g1_type; - using group_value_type = typename group_type::value_type; - using group_affine_value_type = typename group_affine_type::value_type; - - using params_type = void; - using scheme_type = pubkey::eddsa; - using private_key_type = pubkey::private_key; - using public_key_type = pubkey::public_key; - using _private_key_type = typename private_key_type::private_key_type; - using _public_key_type = typename public_key_type::public_key_type; - - // -----TEST 1 - _private_key_type privkey1 = {0x9d, 0x61, 0xb1, 0x9d, 0xef, 0xfd, 0x5a, 0x60, 0xba, 0x84, 0x4a, - 0xf4, 0x92, 0xec, 0x2c, 0xc4, 0x44, 0x49, 0xc5, 0x69, 0x7b, 0x32, - 0x69, 0x19, 0x70, 0x3b, 0xac, 0x03, 0x1c, 0xae, 0x7f, 0x60}; - _public_key_type etalon_pubkey1 = {0xd7, 0x5a, 0x98, 0x01, 0x82, 0xb1, 0x0a, 0xb7, 0xd5, 0x4b, 0xfe, - 0xd3, 0xc9, 0x64, 0x07, 0x3a, 0x0e, 0xe1, 0x72, 0xf3, 0xda, 0xa6, - 0x23, 0x25, 0xaf, 0x02, 0x1a, 0x68, 0xf7, 0x07, 0x51, 0x1a}; - std::array msg1 = {}; - typename private_key_type::signature_type etalon_sig1 = { - 0xe5, 0x56, 0x43, 0x00, 0xc3, 0x60, 0xac, 0x72, 0x90, 0x86, 0xe2, 0xcc, 0x80, 0x6e, 0x82, 0x8a, - 0x84, 0x87, 0x7f, 0x1e, 0xb8, 0xe5, 0xd9, 0x74, 0xd8, 0x73, 0xe0, 0x65, 0x22, 0x49, 0x01, 0x55, - 0x5f, 0xb8, 0x82, 0x15, 0x90, 0xa3, 0x3b, 0xac, 0xc6, 0x1e, 0x39, 0x70, 0x1c, 0xf9, 0xb4, 0x6b, - 0xd2, 0x5b, 0xf5, 0xf0, 0x59, 0x5b, 0xbe, 0x24, 0x65, 0x51, 0x41, 0x43, 0x8e, 0x7a, 0x10, 0x0b}; - - using endianness = nil::marshalling::option::big_endian; - public_key_type pub_k(etalon_pubkey1); - private_key_type priv_k(privkey1); - - auto filled_key = nil::crypto3::marshalling::types::fill_eddsa_public_key< - public_key_type, endianness>(pub_k); - - auto made_key = nil::crypto3::marshalling::types::make_eddsa_public_key< - public_key_type, endianness>(filled_key); - - BOOST_CHECK(made_key.pubkey_point == pub_k.pubkey_point); - BOOST_CHECK(std::equal(made_key.pubkey.begin(), made_key.pubkey.end(), pub_k.pubkey.begin())); - - auto filled_priv_key = nil::crypto3::marshalling::types::fill_eddsa_private_key< - private_key_type, endianness>(priv_k); - - auto made_priv_key = nil::crypto3::marshalling::types::make_eddsa_private_key< - private_key_type, endianness>(filled_priv_key); - - BOOST_CHECK(made_priv_key.s_reduced == priv_k.s_reduced); - BOOST_CHECK(std::equal(made_priv_key.privkey.begin(), made_priv_key.privkey.end(), priv_k.privkey.begin())); - BOOST_CHECK( - std::equal(made_priv_key.h_privkey.begin(), made_priv_key.h_privkey.end(), priv_k.h_privkey.begin())); - } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/marshalling/zk/test/fri_commitment.cpp b/crypto3/libs/marshalling/zk/test/fri_commitment.cpp index 086448fa83..a681ab71ae 100644 --- a/crypto3/libs/marshalling/zk/test/fri_commitment.cpp +++ b/crypto3/libs/marshalling/zk/test/fri_commitment.cpp @@ -40,9 +40,6 @@ #include #include -#include -#include - #include #include #include @@ -78,7 +75,7 @@ using namespace nil::crypto3; template void test_fri_proof(typename FRI::proof_type &proof, typename nil::crypto3::marshalling::types::batch_info_type batch_info, const typename FRI::params_type& params) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; auto filled_proof = nil::crypto3::marshalling::types::fill_fri_proof(proof, batch_info, params); auto _proof = nil::crypto3::marshalling::types::make_fri_proof(filled_proof, batch_info); @@ -102,12 +99,12 @@ void test_fri_proof(typename FRI::proof_type &proof, typename nil::crypto3::mars cv.resize(filled_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); typename nil::crypto3::marshalling::types::fri_proof::type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); typename FRI::proof_type constructed_val_read = nil::crypto3::marshalling::types::make_fri_proof( test_val_read, batch_info); BOOST_CHECK(proof == constructed_val_read); @@ -122,8 +119,8 @@ BOOST_FIXTURE_TEST_SUITE(marshalling_fri_proof_elements, test_tools::random_test using value_type = typename field_type::value_type; using hash_type = nil::crypto3::hashes::keccak_1600<256>; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using FRI = typename nil::crypto3::zk::commitments::detail::basic_batched_fri; BOOST_AUTO_TEST_CASE(polynomial_test) { @@ -155,17 +152,17 @@ BOOST_FIXTURE_TEST_SUITE(marshalling_fri_proof_elements, test_tools::random_test auto _f = nil::crypto3::marshalling::types::make_merkle_proof_vector(filled); BOOST_CHECK(mp == _f); - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; std::vector cv; cv.resize(filled.length(), 0x00); auto write_iter = cv.begin(); auto status = filled.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); nil::crypto3::marshalling::types::merkle_proof_vector_type test_val_read; auto read_iter = cv.begin(); test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = nil::crypto3::marshalling::types::make_merkle_proof_vector(test_val_read); BOOST_CHECK(mp == constructed_val_read); } @@ -220,7 +217,7 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_FIXTURE_TEST_SUITE(marshalling_real_fri_proofs, test_tools::random_test_initializer) - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; BOOST_AUTO_TEST_CASE(marshalling_fri_basic_test) { // setup diff --git a/crypto3/libs/marshalling/zk/test/kzg_commitment.cpp b/crypto3/libs/marshalling/zk/test/kzg_commitment.cpp index f643c573cd..1a5051f5b6 100644 --- a/crypto3/libs/marshalling/zk/test/kzg_commitment.cpp +++ b/crypto3/libs/marshalling/zk/test/kzg_commitment.cpp @@ -34,9 +34,6 @@ #include #include -#include -#include - #include #include #include @@ -92,7 +89,7 @@ struct placeholder_class_test_initializer { using kzg_type = zk::commitments::batched_kzg; typedef typename kzg_type::transcript_type transcript_type; using kzg_scheme_type = typename zk::commitments::kzg_commitment_scheme_v2; - using endianness = nil::marshalling::option::big_endian; + using endianness = nil::crypto3::marshalling::option::big_endian; scalar_value_type alpha = 7u; auto params = kzg_scheme_type::create_params(8, alpha); diff --git a/crypto3/libs/marshalling/zk/test/lpc_commitment.cpp b/crypto3/libs/marshalling/zk/test/lpc_commitment.cpp index 3236b657cc..cd051ca248 100644 --- a/crypto3/libs/marshalling/zk/test/lpc_commitment.cpp +++ b/crypto3/libs/marshalling/zk/test/lpc_commitment.cpp @@ -77,7 +77,7 @@ using namespace nil::crypto3; template void test_lpc_proof(typename LPC::proof_type &proof, typename LPC::fri_type::params_type fri_params) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; auto filled_proof = nil::crypto3::marshalling::types::fill_eval_proof(proof, fri_params); auto _proof = nil::crypto3::marshalling::types::make_eval_proof(filled_proof); @@ -87,12 +87,12 @@ void test_lpc_proof(typename LPC::proof_type &proof, typename LPC::fri_type::par cv.resize(filled_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); typename nil::crypto3::marshalling::types::eval_proof::type test_val_read; auto read_iter = cv.begin(); test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); typename LPC::proof_type constructed_val_read = nil::crypto3::marshalling::types::make_eval_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); @@ -103,7 +103,7 @@ void test_lpc_aggregated_proof( typename LPC::aggregated_proof_type &proof, typename LPC::fri_type::params_type fri_params ) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; auto filled_proof = nil::crypto3::marshalling::types::fill_aggregated_proof(proof, fri_params); @@ -114,12 +114,12 @@ void test_lpc_aggregated_proof( cv.resize(filled_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); typename nil::crypto3::marshalling::types::aggregated_proof test_val_read; auto read_iter = cv.begin(); test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); typename LPC::aggregated_proof_type constructed_val_read = nil::crypto3::marshalling::types::make_aggregated_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); @@ -128,7 +128,7 @@ void test_lpc_aggregated_proof( // This function will test saving and restoring LPC commitment scheme state to a file/buffer. template void test_lpc_state_recovery(const LPC& lpc_commitment_scheme) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; auto filled_lpc_scheme = nil::crypto3::marshalling::types::fill_commitment_scheme(lpc_commitment_scheme); auto _lpc_commitment_scheme = nil::crypto3::marshalling::types::make_commitment_scheme(filled_lpc_scheme); @@ -139,12 +139,12 @@ void test_lpc_state_recovery(const LPC& lpc_commitment_scheme) { cv.resize(filled_lpc_scheme.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_lpc_scheme.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); typename nil::crypto3::marshalling::types::commitment_scheme_state::type test_val_read; auto read_iter = cv.begin(); test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = nil::crypto3::marshalling::types::make_commitment_scheme(test_val_read); BOOST_CHECK(constructed_val_read.has_value()); @@ -165,8 +165,8 @@ BOOST_AUTO_TEST_SUITE(marshalling_random) using value_type = typename field_type::value_type; using hash_type = nil::crypto3::hashes::keccak_1600<256>; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using FRI = typename nil::crypto3::zk::commitments::detail::basic_batched_fri; using lpc_params_type = typename nil::crypto3::zk::commitments::list_polynomial_commitment_params< hash_type, hash_type, m @@ -207,7 +207,7 @@ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(marshalling_real) // Setup common types. - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; using curve_type = nil::crypto3::algebra::curves::vesta; using field_type = curve_type::scalar_field_type; using merkle_hash_type = nil::crypto3::hashes::keccak_1600<256>; diff --git a/crypto3/libs/marshalling/zk/test/merkle_proof.cpp b/crypto3/libs/marshalling/zk/test/merkle_proof.cpp index 613c8965d4..bdd3e71e7d 100644 --- a/crypto3/libs/marshalling/zk/test/merkle_proof.cpp +++ b/crypto3/libs/marshalling/zk/test/merkle_proof.cpp @@ -40,8 +40,6 @@ #include #include -#include -#include #include #include @@ -104,7 +102,7 @@ void test_merkle_proof(std::size_t tree_depth) { using merkle_tree_type = nil::crypto3::containers::merkle_tree; using merkle_proof_type = nil::crypto3::containers::merkle_proof; using merkle_proof_marshalling_type = - types::merkle_proof, merkle_proof_type>; + types::merkle_proof, merkle_proof_type>; std::size_t leafs_number = std::pow(Arity, tree_depth); // You can also lazy convert byte stream to field elements stream using @@ -136,14 +134,14 @@ void test_merkle_proof(std::size_t tree_depth) { std::vector cv; cv.resize(filled_merkle_proof.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_merkle_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_merkle_proof.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); print_merkle_proof(cv.cbegin(), cv.cend(), data[proof_idx].cbegin(), data[proof_idx].cend(), true); merkle_proof_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); merkle_proof_type constructed_val_read = types::make_merkle_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); } @@ -162,9 +160,9 @@ using HashTypes = boost::mpl::list< BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_proof_arity_2_test, HashType, HashTypes) { std::srand(std::time(0)); - test_merkle_proof(5); - test_merkle_proof(10); - test_merkle_proof(15); + test_merkle_proof(5); + test_merkle_proof(10); + test_merkle_proof(15); } // Poseidon hash function supports only Arity 2. @@ -174,18 +172,18 @@ using BlockHashTypes = boost::mpl::list< >; BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_proof_arity_3_test, HashType, BlockHashTypes) { - test_merkle_proof(5); - test_merkle_proof(10); + test_merkle_proof(5); + test_merkle_proof(10); } BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_proof_arity_4_test, HashType, BlockHashTypes) { - test_merkle_proof(5); - test_merkle_proof(10); + test_merkle_proof(5); + test_merkle_proof(10); } BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_proof_arity_5_test, HashType, BlockHashTypes) { - test_merkle_proof(5); - test_merkle_proof(10); + test_merkle_proof(5); + test_merkle_proof(10); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/marshalling/zk/test/merkle_tree.cpp b/crypto3/libs/marshalling/zk/test/merkle_tree.cpp index 8b66c67f47..7416bd60aa 100644 --- a/crypto3/libs/marshalling/zk/test/merkle_tree.cpp +++ b/crypto3/libs/marshalling/zk/test/merkle_tree.cpp @@ -66,7 +66,7 @@ void test_merkle_tree_marshalling(std::size_t tree_depth) { using namespace nil::crypto3::marshalling; using merkle_tree_type = nil::crypto3::containers::merkle_tree; using merkle_tree_marshalling_type = - types::merkle_tree, merkle_tree_type>; + types::merkle_tree, merkle_tree_type>; std::size_t leafs_number = std::pow(Arity, tree_depth); // You can also lazy convert byte stream to field elements stream using @@ -96,14 +96,14 @@ void test_merkle_tree_marshalling(std::size_t tree_depth) { std::vector cv; cv.resize(filled_merkle_tree.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_merkle_tree.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_merkle_tree.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_merkle_tree(cv.cbegin(), cv.cend(), data[tree_idx].cbegin(), data[tree_idx].cend(), true); merkle_tree_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); merkle_tree_type constructed_val_read = types::make_merkle_tree(test_val_read); BOOST_CHECK(tree == constructed_val_read); } @@ -122,9 +122,9 @@ using HashTypes = boost::mpl::list< BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_tree_arity_2_test, HashType, HashTypes) { std::srand(std::time(0)); - test_merkle_tree_marshalling(2); - test_merkle_tree_marshalling(4); - test_merkle_tree_marshalling(8); + test_merkle_tree_marshalling(2); + test_merkle_tree_marshalling(4); + test_merkle_tree_marshalling(8); } // Poseidon hash function supports only Arity 2. @@ -134,18 +134,18 @@ using BlockHashTypes = boost::mpl::list< >; BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_tree_arity_3_test, HashType, BlockHashTypes) { - test_merkle_tree_marshalling(2); - test_merkle_tree_marshalling(4); + test_merkle_tree_marshalling(2); + test_merkle_tree_marshalling(4); } BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_tree_arity_4_test, HashType, BlockHashTypes) { - test_merkle_tree_marshalling(2); - test_merkle_tree_marshalling(4); + test_merkle_tree_marshalling(2); + test_merkle_tree_marshalling(4); } BOOST_AUTO_TEST_CASE_TEMPLATE(marshalling_merkle_tree_arity_5_test, HashType, BlockHashTypes) { - test_merkle_tree_marshalling(2); - test_merkle_tree_marshalling(4); + test_merkle_tree_marshalling(2); + test_merkle_tree_marshalling(4); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/marshalling/zk/test/placeholder_common_data.cpp b/crypto3/libs/marshalling/zk/test/placeholder_common_data.cpp index 2ed081e0a9..47bc498c82 100644 --- a/crypto3/libs/marshalling/zk/test/placeholder_common_data.cpp +++ b/crypto3/libs/marshalling/zk/test/placeholder_common_data.cpp @@ -15,9 +15,6 @@ #include #include -#include -#include - #include #include #include @@ -103,8 +100,8 @@ struct placeholder_common_data_test_runner { void test_placeholder_common_data(common_data_type const& common_data) { - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; auto filled_common_data = nil::crypto3::marshalling::types::fill_placeholder_common_data(common_data); auto _common_data = nil::crypto3::marshalling::types::make_placeholder_common_data(filled_common_data); @@ -114,12 +111,12 @@ struct placeholder_common_data_test_runner { cv.resize(filled_common_data.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_common_data.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); nil::crypto3::marshalling::types::placeholder_common_data test_val_read; auto read_iter = cv.begin(); test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = nil::crypto3::marshalling::types::make_placeholder_common_data( test_val_read ); diff --git a/crypto3/libs/marshalling/zk/test/placeholder_preprocessed_public_data.cpp b/crypto3/libs/marshalling/zk/test/placeholder_preprocessed_public_data.cpp index 7e2534c0f6..231119a7b7 100644 --- a/crypto3/libs/marshalling/zk/test/placeholder_preprocessed_public_data.cpp +++ b/crypto3/libs/marshalling/zk/test/placeholder_preprocessed_public_data.cpp @@ -13,9 +13,6 @@ #include #include -#include -#include - #include #include #include @@ -105,8 +102,8 @@ struct placeholder_preprocessed_public_data_test_runner { void test_placeholder_preprocessed_public_data(public_data_type const& data) { - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; auto filled_public_data = nil::crypto3::marshalling::types:: fill_placeholder_preprocessed_public_data(data); @@ -118,12 +115,12 @@ struct placeholder_preprocessed_public_data_test_runner { cv.resize(filled_public_data.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_public_data.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); nil::crypto3::marshalling::types::placeholder_preprocessed_public_data test_val_read; auto read_iter = cv.begin(); test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = nil::crypto3::marshalling::types:: make_placeholder_preprocessed_public_data(test_val_read); BOOST_CHECK(data == constructed_val_read); diff --git a/crypto3/libs/marshalling/zk/test/placeholder_proof.cpp b/crypto3/libs/marshalling/zk/test/placeholder_proof.cpp index e208c03b69..5ad0dc826c 100644 --- a/crypto3/libs/marshalling/zk/test/placeholder_proof.cpp +++ b/crypto3/libs/marshalling/zk/test/placeholder_proof.cpp @@ -42,9 +42,6 @@ #include #include -#include -#include - #include #include @@ -113,8 +110,8 @@ template struct placeholder_lpc_proof_test_runner { - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using field_type = FieldType; typedef placeholder_circuit_params circuit_params; @@ -215,12 +212,12 @@ struct placeholder_lpc_proof_test_runner { cv.resize(filled_placeholder_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_placeholder_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); proof_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_placeholder_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); } @@ -230,7 +227,7 @@ struct placeholder_lpc_proof_test_runner { using namespace nil::crypto3::marshalling; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using proof_marshalling_type = nil::crypto3::marshalling::types::placeholder_partial_evaluation_proof; auto filled_placeholder_proof = types::fill_placeholder_partial_evaluation_proof(proof); @@ -241,12 +238,12 @@ struct placeholder_lpc_proof_test_runner { cv.resize(filled_placeholder_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_placeholder_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); proof_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_placeholder_partial_evaluation_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); } @@ -263,7 +260,7 @@ struct placeholder_lpc_proof_test_runner { { using namespace nil::crypto3::marshalling; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using proof_marshalling_type = nil::crypto3::marshalling::types::placeholder_aggregated_proof_type; auto filled_placeholder_proof = types::fill_placeholder_aggregated_proof( @@ -276,12 +273,12 @@ struct placeholder_lpc_proof_test_runner { cv.resize(filled_placeholder_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_placeholder_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); proof_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_placeholder_aggregated_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); } @@ -333,7 +330,10 @@ struct placeholder_lpc_proof_test_runner { random_test_initializer.alg_random_engines.template get_alg_engine(), random_test_initializer.generic_random_engine ); - test_placeholder_aggregated_proof( {partial_proofs, lpc_proof}, fri_params); + AggregatedProofType aggregated_proof; + aggregated_proof.partial_proofs = partial_proofs; + aggregated_proof.aggregated_proof = lpc_proof; + test_placeholder_aggregated_proof(aggregated_proof, fri_params); return true; } @@ -535,8 +535,8 @@ struct placeholder_kzg_v2_proof_test_runner : public test_tools::random_test_ini void test_placeholder_proof(const ProofType &proof, const CommitmentParamsType& params, std::string output_file = "") { using namespace nil::crypto3::marshalling; - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using proof_marshalling_type = nil::crypto3::marshalling::types::placeholder_proof; @@ -548,12 +548,12 @@ struct placeholder_kzg_v2_proof_test_runner : public test_tools::random_test_ini cv.resize(filled_placeholder_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_placeholder_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); proof_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_placeholder_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); } @@ -590,7 +590,7 @@ struct placeholder_kzg_v2_proof_test_runner : public test_tools::random_test_ini ); using common_data_type = typename placeholder_public_preprocessor::preprocessed_data_type::common_data_type; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; test_placeholder_proof(kzg_proof, kzg_params); bool verifier_res = placeholder_verifier::process( diff --git a/crypto3/libs/marshalling/zk/test/plonk_assignment_table.cpp b/crypto3/libs/marshalling/zk/test/plonk_assignment_table.cpp index 74d1d25273..8f2a5b9311 100644 --- a/crypto3/libs/marshalling/zk/test/plonk_assignment_table.cpp +++ b/crypto3/libs/marshalling/zk/test/plonk_assignment_table.cpp @@ -83,7 +83,7 @@ struct plonk_assignment_table_test_runner { bool test_assignment_table_description() { plonk_table_description const& val = desc; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using value_marshalling_type = nil::crypto3::marshalling::types::plonk_assignment_table_description; auto filled_val = types::fill_assignment_table_description(val); @@ -94,11 +94,11 @@ struct plonk_assignment_table_test_runner { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); table_desc = types::make_assignment_table_description(test_val_read); BOOST_CHECK(val == table_desc); @@ -109,7 +109,7 @@ struct plonk_assignment_table_test_runner { template bool test_assignment_table() { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using plonk_table = plonk_assignment_table; using value_marshalling_type = nil::crypto3::marshalling::types::plonk_assignment_table; @@ -125,11 +125,11 @@ struct plonk_assignment_table_test_runner { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); table_desc_pair = types::make_assignment_table(test_val_read); BOOST_CHECK(val == table_desc_pair.second); @@ -140,7 +140,7 @@ struct plonk_assignment_table_test_runner { bool run_test() { - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; BOOST_CHECK(test_assignment_table_description()); BOOST_CHECK(test_assignment_table()); return true; diff --git a/crypto3/libs/marshalling/zk/test/plonk_constraint_system.cpp b/crypto3/libs/marshalling/zk/test/plonk_constraint_system.cpp index 35e1e486e4..77036c6172 100644 --- a/crypto3/libs/marshalling/zk/test/plonk_constraint_system.cpp +++ b/crypto3/libs/marshalling/zk/test/plonk_constraint_system.cpp @@ -79,8 +79,8 @@ struct plonk_constraint_system_test_runner { bool run_test() { - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using value_marshalling_type = nil::crypto3::marshalling::types::plonk_constraint_system; auto filled_val = nil::crypto3::marshalling::types::fill_plonk_constraint_system(system); @@ -91,11 +91,11 @@ struct plonk_constraint_system_test_runner { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_constraint_system(test_val_read); BOOST_CHECK(system == constructed_val_read); diff --git a/crypto3/libs/marshalling/zk/test/plonk_gates.cpp b/crypto3/libs/marshalling/zk/test/plonk_gates.cpp index 68b1a693fd..319f825044 100644 --- a/crypto3/libs/marshalling/zk/test/plonk_gates.cpp +++ b/crypto3/libs/marshalling/zk/test/plonk_gates.cpp @@ -176,7 +176,7 @@ void test_plonk_variable() { using namespace nil::crypto3::marshalling; using varialbe_type = nil::crypto3::zk::snark::plonk_variable; - using value_marshalling_type = typename types::variable, varialbe_type>::type; + using value_marshalling_type = typename types::variable, varialbe_type>::type; auto val = generate_random_plonk_variable(); @@ -188,12 +188,12 @@ void test_plonk_variable() { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_variable(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -203,7 +203,7 @@ void test_plonk_variables(std::size_t n) { using namespace nil::crypto3::marshalling; using variable_type = nil::crypto3::zk::snark::plonk_variable; - using value_marshalling_type = typename types::variables, Field>; + using value_marshalling_type = typename types::variables, Field>; std::vector val; for (size_t i = 0; i < n; i++) { @@ -221,12 +221,12 @@ void test_plonk_variables(std::size_t n) { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_variables(test_val_read); BOOST_CHECK(val.size() == _val.size()); for (std::size_t i = 0; i < val.size(); i++) { @@ -241,7 +241,7 @@ void test_plonk_term(std::size_t vars_n) { using variable_type = nil::crypto3::zk::snark::plonk_variable; using value_type = nil::crypto3::math::term; using value_marshalling_type = - typename types::term, value_type>::type; + typename types::term, value_type>::type; auto val = generate_random_plonk_term(vars_n); auto filled_val = types::fill_term(val); @@ -252,13 +252,13 @@ void test_plonk_term(std::size_t vars_n) { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_term(test_val_read); BOOST_CHECK_EQUAL(val, constructed_val_read); } @@ -270,7 +270,7 @@ void test_expression(std::size_t vars_n, std::size_t terms_n) { using variable_type = nil::crypto3::zk::snark::plonk_variable; using value_type = nil::crypto3::math::expression; using value_marshalling_type = - typename types::expression, value_type>::type; + typename types::expression, value_type>::type; auto val = generate_random_plonk_expression(vars_n, terms_n); @@ -282,13 +282,13 @@ void test_expression(std::size_t vars_n, std::size_t terms_n) { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_expression(test_val_read); BOOST_CHECK_EQUAL(val, constructed_val_read); } @@ -299,7 +299,7 @@ void test_plonk_constraint(std::size_t vars_n, std::size_t depth) { using variable_type = nil::crypto3::zk::snark::plonk_variable; using value_type = nil::crypto3::zk::snark::plonk_constraint; - using value_marshalling_type = types::plonk_constraint, value_type>; + using value_marshalling_type = types::plonk_constraint, value_type>; auto val = value_type(generate_random_plonk_expression(vars_n, depth)); @@ -311,13 +311,13 @@ void test_plonk_constraint(std::size_t vars_n, std::size_t depth) { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_constraint(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -329,7 +329,7 @@ void test_plonk_constraints(std::size_t vars_n, std::size_t depth, std::size_t c using variable_type = nil::crypto3::zk::snark::plonk_variable; using constraint_type = nil::crypto3::zk::snark::plonk_constraint; using value_type = std::vector; - using value_marshalling_type = types::plonk_constraints, constraint_type>; + using value_marshalling_type = types::plonk_constraints, constraint_type>; value_type val; for (std::size_t i = 0; i < constraints_n; i++) { @@ -347,12 +347,12 @@ void test_plonk_constraints(std::size_t vars_n, std::size_t depth, std::size_t c cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_constraints(test_val_read); BOOST_CHECK(val.size() == constructed_val_read.size()); @@ -368,7 +368,7 @@ void test_plonk_lookup_constraints(std::size_t vars_n, std::size_t depth, std::s using variable_type = nil::crypto3::zk::snark::plonk_variable; using constraint_type = nil::crypto3::zk::snark::plonk_lookup_constraint; using value_type = std::vector; - using value_marshalling_type = types::plonk_lookup_constraints, constraint_type>; + using value_marshalling_type = types::plonk_lookup_constraints, constraint_type>; value_type val; for (std::size_t i = 0; i < constraints_n; i++) { @@ -383,12 +383,12 @@ void test_plonk_lookup_constraints(std::size_t vars_n, std::size_t depth, std::s cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_lookup_constraints(test_val_read); BOOST_CHECK(val == constructed_val_read); @@ -400,7 +400,7 @@ void test_plonk_lookup_constraint(std::size_t vars_n, std::size_t depth, std::si using variable_type = nil::crypto3::zk::snark::plonk_variable; using value_type = nil::crypto3::zk::snark::plonk_lookup_constraint; - using value_marshalling_type = types::plonk_lookup_constraint, value_type>; + using value_marshalling_type = types::plonk_lookup_constraint, value_type>; auto val = generate_random_plonk_lookup_constraint(vars_n, depth, expr_n); @@ -412,13 +412,13 @@ void test_plonk_lookup_constraint(std::size_t vars_n, std::size_t depth, std::si cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_lookup_constraint(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -430,7 +430,7 @@ void test_plonk_gate(std::size_t vars_n, std::size_t terms_n, std::size_t constr using variable_type = nil::crypto3::zk::snark::plonk_variable; using constraint_type = nil::crypto3::zk::snark::plonk_constraint; using value_type = nil::crypto3::zk::snark::plonk_gate; - using value_marshalling_type = types::plonk_gate, value_type>; + using value_marshalling_type = types::plonk_gate, value_type>; auto val = generate_random_plonk_gate(vars_n, terms_n, constr_n); @@ -442,13 +442,13 @@ void test_plonk_gate(std::size_t vars_n, std::size_t terms_n, std::size_t constr cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_gate(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -456,7 +456,7 @@ void test_plonk_gate(std::size_t vars_n, std::size_t terms_n, std::size_t constr template void test_plonk_lookup_gate(std::size_t vars_n, std::size_t depth, std::size_t expr_n, std::size_t constr_n) { using namespace nil::crypto3::marshalling; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using variable_type = nil::crypto3::zk::snark::plonk_variable; using constraint_type = nil::crypto3::zk::snark::plonk_lookup_constraint; @@ -472,13 +472,13 @@ void test_plonk_lookup_gate(std::size_t vars_n, std::size_t depth, std::size_t e cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_lookup_gate(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -490,7 +490,7 @@ void test_plonk_gates(std::size_t vars_n, std::size_t depth, std::size_t constr_ using variable_type = nil::crypto3::zk::snark::plonk_variable; using constraint_type = nil::crypto3::zk::snark::plonk_constraint; using value_type = nil::crypto3::zk::snark::plonk_gate; - using value_marshalling_type = types::plonk_gates, value_type>; + using value_marshalling_type = types::plonk_gates, value_type>; std::vector val; for (std::size_t i = 0; i < gates_n; i++) { @@ -505,13 +505,13 @@ void test_plonk_gates(std::size_t vars_n, std::size_t depth, std::size_t constr_ cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_gates(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -523,7 +523,7 @@ void test_plonk_lookup_gates(std::size_t vars_n, std::size_t depth, std::size_t using variable_type = nil::crypto3::zk::snark::plonk_variable; using constraint_type = nil::crypto3::zk::snark::plonk_lookup_constraint; using value_type = nil::crypto3::zk::snark::plonk_lookup_gate; - using value_marshalling_type = types::plonk_lookup_gates, value_type>; + using value_marshalling_type = types::plonk_lookup_gates, value_type>; std::vector val; for (std::size_t i = 0; i < gates_n; i++) { @@ -538,13 +538,13 @@ void test_plonk_lookup_gates(std::size_t vars_n, std::size_t depth, std::size_t cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_lookup_gates(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -552,7 +552,7 @@ void test_plonk_lookup_gates(std::size_t vars_n, std::size_t depth, std::size_t template void test_plonk_lookup_table(std::size_t col_n, std::size_t op_n) { using namespace nil::crypto3::marshalling; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using value_type = nil::crypto3::zk::snark::plonk_lookup_table; using value_marshalling_type = types::plonk_lookup_table; @@ -566,13 +566,13 @@ void test_plonk_lookup_table(std::size_t col_n, std::size_t op_n) { cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_lookup_table(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -580,7 +580,7 @@ void test_plonk_lookup_table(std::size_t col_n, std::size_t op_n) { template void test_plonk_lookup_tables(std::size_t col_n, std::size_t op_n, std::size_t t_n) { using namespace nil::crypto3::marshalling; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using value_type = nil::crypto3::zk::snark::plonk_lookup_table; using value_marshalling_type = types::plonk_lookup_tables; @@ -599,13 +599,13 @@ void test_plonk_lookup_tables(std::size_t col_n, std::size_t op_n, std::size_t t cv.resize(filled_val.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + nil::crypto3::marshalling::status_type status = filled_val.write(write_iter, cv.size()); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); // print_byteblob(std::cout, cv.cbegin(), cv.cend()); value_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); auto constructed_val_read = types::make_plonk_lookup_tables(test_val_read); BOOST_CHECK(val == constructed_val_read); } @@ -613,7 +613,7 @@ void test_plonk_lookup_tables(std::size_t col_n, std::size_t op_n, std::size_t t BOOST_AUTO_TEST_SUITE(plonk_constraint_system_details) using curve_type = nil::crypto3::algebra::curves::alt_bn128_254; using field_type = typename curve_type::scalar_field_type; - using endianness = nil::marshalling::option::big_endian; + using endianness = nil::crypto3::marshalling::option::big_endian; BOOST_AUTO_TEST_CASE(marshalling_plonk_variable) { for (auto i = 0; i < 100; i++) { diff --git a/crypto3/libs/marshalling/zk/test/polys_evaluator.cpp b/crypto3/libs/marshalling/zk/test/polys_evaluator.cpp index afc94e19ad..655966b813 100644 --- a/crypto3/libs/marshalling/zk/test/polys_evaluator.cpp +++ b/crypto3/libs/marshalling/zk/test/polys_evaluator.cpp @@ -39,9 +39,6 @@ #include #include -#include -#include - #include #include #include @@ -82,7 +79,7 @@ using namespace nil::crypto3; template void test_polys_evaluator_marshalling(PolysEvaluator &evaluator) { - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; auto filled_evaluator = nil::crypto3::marshalling::types::fill_polys_evaluator(evaluator); auto _evaluator = nil::crypto3::marshalling::types::make_polys_evaluator(filled_evaluator); @@ -92,12 +89,12 @@ void test_polys_evaluator_marshalling(PolysEvaluator &evaluator) { cv.resize(filled_evaluator.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_evaluator.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); nil::crypto3::marshalling::types::polys_evaluator test_val_read; auto read_iter = cv.begin(); test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); PolysEvaluator constructed_val_read = nil::crypto3::marshalling::types::make_polys_evaluator(test_val_read); @@ -106,7 +103,7 @@ void test_polys_evaluator_marshalling(PolysEvaluator &evaluator) { BOOST_AUTO_TEST_SUITE(marshalling_real) // Setup common types. - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; using curve_type = nil::crypto3::algebra::curves::vesta; using field_type = curve_type::scalar_field_type; using merkle_hash_type = nil::crypto3::hashes::keccak_1600<256>; diff --git a/crypto3/libs/marshalling/zk/test/sparse_vector.cpp b/crypto3/libs/marshalling/zk/test/sparse_vector.cpp index 68d19600a6..d7c8353eb6 100644 --- a/crypto3/libs/marshalling/zk/test/sparse_vector.cpp +++ b/crypto3/libs/marshalling/zk/test/sparse_vector.cpp @@ -36,9 +36,6 @@ #include #include -#include -#include - #include #include #include @@ -60,7 +57,7 @@ void test_sparse_vector(nil::crypto3::container::sparse_vector val) { using namespace nil::crypto3::marshalling; using unit_type = unsigned char; - using sparse_vector_type = types::sparse_vector, + using sparse_vector_type = types::sparse_vector, nil::crypto3::container::sparse_vector>; sparse_vector_type filled_val = @@ -78,13 +75,13 @@ void test_sparse_vector(nil::crypto3::container::sparse_vector val) { auto write_iter = cv.begin(); auto status = filled_val.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); sparse_vector_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == nil::crypto3::marshalling::status_type::success); nil::crypto3::container::sparse_vector constructed_val_read = types::make_sparse_vector, Endianness>(test_val_read); @@ -112,28 +109,28 @@ BOOST_AUTO_TEST_SUITE(sparse_vector_test_suite) BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g1_be) { std::cout << "BLS12-381 g1 group field sparse vector big-endian test started" << std::endl; - test_sparse_vector::g1_type<>, nil::marshalling::option::big_endian, 5>(); + test_sparse_vector::g1_type<>, nil::crypto3::marshalling::option::big_endian, 5>(); std::cout << "BLS12-381 g1 group field sparse vector big-endian test finished" << std::endl; } // BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g1_le) { // std::cout << "BLS12-381 g1 group field sparse vector little-endian test started" << std::endl; // test_sparse_vector::g1_type<>, -// nil::marshalling::option::little_endian, +// nil::crypto3::marshalling::option::little_endian, // 5>(); // std::cout << "BLS12-381 g1 group field sparse vector little-endian test finished" << std::endl; // } BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g2_be) { std::cout << "BLS12-381 g2 group field sparse vector big-endian test started" << std::endl; - test_sparse_vector::g2_type<>, nil::marshalling::option::big_endian, 5>(); + test_sparse_vector::g2_type<>, nil::crypto3::marshalling::option::big_endian, 5>(); std::cout << "BLS12-381 g2 group field sparse vector big-endian test finished" << std::endl; } // BOOST_AUTO_TEST_CASE(sparse_vector_bls12_381_g2_le) { // std::cout << "BLS12-381 g2 group field little-endian test started" << std::endl; // test_sparse_vector::g2_type<>, -// nil::marshalling::option::little_endian, +// nil::crypto3::marshalling::option::little_endian, // 5>(); // std::cout << "BLS12-381 g2 group field little-endian test finished" << std::endl; // } diff --git a/crypto3/libs/math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp b/crypto3/libs/math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp index e18ff409c7..9ad6011735 100644 --- a/crypto3/libs/math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp +++ b/crypto3/libs/math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp @@ -107,6 +107,12 @@ namespace nil { typedef std::shared_ptr> result_type; + // If m is 1, the value of (std::size_t(std::ceil(std::log2(m))) - 1) is -1, and stored in size_t it becomes a + // very large value. + if (m == 1) { + return result_type(); + } + const std::size_t big = 1ul << (std::size_t(std::ceil(std::log2(m))) - 1); const std::size_t rounded_small = (1ul << std::size_t(std::ceil(std::log2(m - big)))); diff --git a/crypto3/libs/math/include/nil/crypto3/math/algorithms/unity_root.hpp b/crypto3/libs/math/include/nil/crypto3/math/algorithms/unity_root.hpp index c7f58c847a..277541a60b 100644 --- a/crypto3/libs/math/include/nil/crypto3/math/algorithms/unity_root.hpp +++ b/crypto3/libs/math/include/nil/crypto3/math/algorithms/unity_root.hpp @@ -30,7 +30,8 @@ #include #include -#include + +#include #include #include @@ -88,20 +89,17 @@ namespace nil { * * @return a root of unity. */ - template - boost::multiprecision::number - unity_root(uint32_t m, const boost::multiprecision::number &modulo) { - using namespace boost::multiprecision; - - number M(m); + template + nil::crypto3::multiprecision::big_uint + unity_root(uint32_t m, const nil::crypto3::multiprecision::big_uint &modulo) { + nil::crypto3::multiprecision::big_uint M(m); - if ((modulo - number(1) % M) % M != 0) { + if ((modulo - nil::crypto3::multiprecision::big_uint(1) % M) % M != 0) { return {}; } - number>, ExpressionTemplates> - gen(find_generator(modulo), modulo), result = boost::multiprecision::pow(gen, (modulo - 1) / M); + nil::crypto3::multiprecision::big_mod_rt + gen(find_generator(modulo), modulo), result = nil::crypto3::multiprecision::pow(gen, (modulo - 1) / M); if (result == 1u) { result = unity_root(m, modulo); } @@ -121,20 +119,20 @@ namespace nil { * */ - boost::multiprecision::number mu = modulo.ComputeMu(); - boost::multiprecision::number x(1); + nil::crypto3::multiprecision::big_uint mu = modulo.ComputeMu(); + nil::crypto3::multiprecision::big_uint x(1); x.ModMulEq(result, modulo, mu); - boost::multiprecision::number minRU(x); - boost::multiprecision::number curPowIdx(1); - std::vector> coprimes = algebra::totient_list>( + nil::crypto3::multiprecision::big_uint minRU(x); + nil::crypto3::multiprecision::big_uint curPowIdx(1); + std::vector> coprimes = algebra::totient_list>( m); for (uint32_t i = 0; i < coprimes.size(); i++) { auto nextPowIdx = coprimes[i]; - boost::multiprecision::number diffPow(nextPowIdx - curPowIdx); + nil::crypto3::multiprecision::big_uint diffPow(nextPowIdx - curPowIdx); for (std::size_t j = 0; j < diffPow; j++) { x.ModMulEq(result, modulo, mu); } - if (x < minRU && x != boost::multiprecision::number(1)) { + if (x < minRU && x != nil::crypto3::multiprecision::big_uint(1)) { minRU = x; } curPowIdx = nextPowIdx; diff --git a/crypto3/libs/math/include/nil/crypto3/math/domains/evaluation_domain.hpp b/crypto3/libs/math/include/nil/crypto3/math/domains/evaluation_domain.hpp index 7c95906ef3..7128ccc40e 100644 --- a/crypto3/libs/math/include/nil/crypto3/math/domains/evaluation_domain.hpp +++ b/crypto3/libs/math/include/nil/crypto3/math/domains/evaluation_domain.hpp @@ -28,9 +28,10 @@ #include -#include #include +#include + namespace nil { namespace crypto3 { namespace math { @@ -55,7 +56,7 @@ namespace nil { * * (See the function get_evaluation_domain below.) */ - evaluation_domain(const std::size_t m) : m(m), log2_size(boost::multiprecision::msb(m)) {}; + evaluation_domain(const std::size_t m) : m(m), log2_size(nil::crypto3::multiprecision::msb(m)) {} inline std::size_t size() const { return m; diff --git a/crypto3/libs/math/test/CMakeLists.txt b/crypto3/libs/math/test/CMakeLists.txt index 4fb55a179e..b7e57806d2 100644 --- a/crypto3/libs/math/test/CMakeLists.txt +++ b/crypto3/libs/math/test/CMakeLists.txt @@ -24,7 +24,7 @@ macro(define_math_test name) ${Boost_INCLUDE_DIRS}) - set_target_properties(${test_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${test_name} PROPERTIES CXX_STANDARD 20) endmacro() diff --git a/crypto3/libs/math/test/polynomial_dfs.cpp b/crypto3/libs/math/test/polynomial_dfs.cpp index 2f049dbd5b..1aded8379e 100644 --- a/crypto3/libs/math/test/polynomial_dfs.cpp +++ b/crypto3/libs/math/test/polynomial_dfs.cpp @@ -51,23 +51,23 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_from_coefficients_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_equal_test){ polynomial_dfs a = { 7, - {0x35_cppui_modular253, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}}; + {0x35_big_uint, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint}}; polynomial_dfs a1 = { 7, - {0x35_cppui_modular253, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}}; + {0x35_big_uint, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint}}; BOOST_CHECK_EQUAL(a, a1); } @@ -80,14 +80,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_from_coefficients_less_degree) { a.from_coefficients(polynomial); std::vector c_res = { - 0x35_cppui_modular253, - 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}; + 0x35_big_uint, + 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -102,13 +102,13 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_coefficients_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_coefficients_less_degree) { polynomial_dfs a = { 7, - {0x35_cppui_modular253, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}}; + {0x35_big_uint, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint}}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u}; std::vector c = a.coefficients(); @@ -122,13 +122,13 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_coefficients_same_degree) { polynomial_dfs a = { 8, {0x37u, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u, 2u}; std::vector c = a.coefficients(); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -142,38 +142,38 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_addition_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_equal) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint, + 0x6_big_uint, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint, }}; polynomial_dfs c = a + b; polynomial_dfs c_res = { 7, { - 0x71_cppui_modular253, - 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_cppui_modular253, - 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_cppui_modular253, - 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_cppui_modular253, - 0x13522f003a2269a89044690056226900000022fffffffffffc_cppui_modular253, - 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_cppui_modular253, + 0x71_big_uint, + 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_big_uint, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_big_uint, + 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_big_uint, + 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_big_uint, + 0x13522f003a2269a89044690056226900000022fffffffffffc_big_uint, + 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_big_uint, }}; BOOST_CHECK_EQUAL(c_res, c); } @@ -181,57 +181,57 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_b) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}}; polynomial_dfs c = a + b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint}}; BOOST_CHECK_EQUAL(c_res, c); } BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_a) { polynomial_dfs a = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}}; polynomial_dfs b = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; polynomial_dfs c = a + b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -240,27 +240,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_sum) { { 7, { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253 + 0x37_big_uint, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint } }, { 6, { - 0x4e_cppui_modular253, - 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253 + 0x4e_big_uint, + 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint } } }; @@ -276,38 +276,38 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_addition_eq_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_eq_equal) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint, + 0x6_big_uint, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint, }}; a += b; polynomial_dfs c_res = { 7, { - 0x71_cppui_modular253, - 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_cppui_modular253, - 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_cppui_modular253, - 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_cppui_modular253, - 0x13522f003a2269a89044690056226900000022fffffffffffc_cppui_modular253, - 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_cppui_modular253, + 0x71_big_uint, + 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_big_uint, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_big_uint, + 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_big_uint, + 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_big_uint, + 0x13522f003a2269a89044690056226900000022fffffffffffc_big_uint, + 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_big_uint, }}; BOOST_CHECK_EQUAL(c_res, a); } @@ -315,57 +315,57 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_eq_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_b) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}}; a += b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint}}; BOOST_CHECK_EQUAL(c_res, a); } BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_a) { polynomial_dfs a = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}}; polynomial_dfs b = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; a += b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint}}; BOOST_CHECK_EQUAL(c_res, a); } BOOST_AUTO_TEST_SUITE_END() @@ -378,27 +378,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_equal) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint, }}; // {9, 3, 11, 14, 7, 1, 5, 8} polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint, + 0x6_big_uint, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint, }}; polynomial_dfs c(8, 1, FieldType::value_type::zero()); @@ -408,14 +408,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_equal) { polynomial_dfs c_res = { 7, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000000fffffffffffc_cppui_modular253, - 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_cppui_modular253, - 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint, + 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_big_uint, + 0x8d51ccce760304d0ec030002760300000000fffffffffffc_big_uint, + 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint, + 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_big_uint, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_big_uint, + 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_big_uint, }}; BOOST_CHECK_EQUAL(c_res, c); @@ -426,27 +426,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_b) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint, }}; // 9, 3, 11, 14, 7 polynomial_dfs b = { 4, { - 0x2c_cppui_modular253, - 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_cppui_modular253, - 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_cppui_modular253, - 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_cppui_modular253, - 0xa_cppui_modular253, - 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_cppui_modular253, - 0x61283ccdf122134fa2421001b12210000000b000000000005_cppui_modular253, - 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_cppui_modular253, + 0x2c_big_uint, + 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_big_uint, + 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_big_uint, + 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_big_uint, + 0xa_big_uint, + 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_big_uint, + 0x61283ccdf122134fa2421001b12210000000b000000000005_big_uint, + 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_big_uint, }}; polynomial_dfs c(8, 1, FieldType::value_type::zero()); @@ -455,14 +455,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_b) { polynomial_dfs c_res = { 7, { - 0xb_cppui_modular253, - 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_cppui_modular253, - 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_cppui_modular253, - 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_cppui_modular253, - 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_cppui_modular253, - 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_cppui_modular253, - 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_cppui_modular253, + 0xb_big_uint, + 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_big_uint, + 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_big_uint, + 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_big_uint, + 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_big_uint, + 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_big_uint, + 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_big_uint, }}; BOOST_CHECK_EQUAL(c_res, c); @@ -473,27 +473,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_a) { polynomial_dfs a = { 4, { - 0x27_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_cppui_modular253, - 0xc250799be244269f448420036244200000016000000000003_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_cppui_modular253, + 0x27_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_big_uint, + 0xc250799be244269f448420036244200000016000000000003_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_big_uint, }}; // 9, 3, 11, 14, 7, 1, 5 polynomial_dfs b = { 6, { - 0x32_cppui_modular253, - 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_cppui_modular253, - 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_cppui_modular253, - 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_cppui_modular253, - 0xe_cppui_modular253, - 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_cppui_modular253, - 0x5853200109c1e3029381e00189c1e0000000a000000000000_cppui_modular253, - 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_cppui_modular253, + 0x32_big_uint, + 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_big_uint, + 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_big_uint, + 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_big_uint, + 0xe_big_uint, + 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_big_uint, + 0x5853200109c1e3029381e00189c1e0000000a000000000000_big_uint, + 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_big_uint, }}; polynomial_dfs c(7, 1, FieldType::value_type::zero()); @@ -502,14 +502,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_a) { polynomial_dfs c_res = { 6, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_cppui_modular253, - 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_cppui_modular253, - 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_cppui_modular253, - 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000003_cppui_modular253, - 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_big_uint, + 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_big_uint, + 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_big_uint, + 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000003_big_uint, + 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_big_uint, }}; BOOST_CHECK_EQUAL(c_res, c); @@ -523,27 +523,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_equal) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint, }}; // {9, 3, 11, 14, 7, 1, 5, 8} polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint, + 0x6_big_uint, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint, }}; a -= b; @@ -551,14 +551,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_equal) { polynomial_dfs c_res = { 7, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000000fffffffffffc_cppui_modular253, - 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_cppui_modular253, - 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint, + 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_big_uint, + 0x8d51ccce760304d0ec030002760300000000fffffffffffc_big_uint, + 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint, + 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_big_uint, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_big_uint, + 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_big_uint, }}; BOOST_CHECK_EQUAL(c_res, a); @@ -569,23 +569,23 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_b) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint, }}; // 9, 3, 11, 14 polynomial_dfs b = { 3, { - 0x2c_cppui_modular253, - 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_cppui_modular253, - 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_cppui_modular253, - 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_cppui_modular253, + 0x2c_big_uint, + 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_big_uint, + 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_big_uint, + 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_big_uint, }}; polynomial_dfs c(8, 1, FieldType::value_type::zero()); @@ -594,14 +594,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_b) { polynomial_dfs c_res = { 7, { - 0xb_cppui_modular253, - 0x2a0cf6cbe1265f2f69c5fd7f23de0a85a42a7b5b43d65a71dd6e2e081f3acfea_cppui_modular253, - 0x25dca9e18637dc987d958e25d84deb0599a1478360c5ed2566591d49ad40df0c_cppui_modular253, - 0x1200fa2d09728089883f89488cf6cfb560ba457f80713d469fdbf1666aff4730_cppui_modular253, - 0x61283ccdf122134fa2421001b12210000000affffffffffe8_cppui_modular253, - 0x6f8014ca51c232ed6480b1981a3dd3d72cfe0a9c2986ba7d8dc20181d20cf8db_cppui_modular253, - 0x151cdb46d4f99b9102fc2c91a0645c689d89f312c7239269a1362ba1abd896cb_cppui_modular253, - 0x35926b84873e2d16fc9273ec962a65b7d27133d4c3a8957fc8e27f9fcd265a6_cppui_modular253 + 0xb_big_uint, + 0x2a0cf6cbe1265f2f69c5fd7f23de0a85a42a7b5b43d65a71dd6e2e081f3acfea_big_uint, + 0x25dca9e18637dc987d958e25d84deb0599a1478360c5ed2566591d49ad40df0c_big_uint, + 0x1200fa2d09728089883f89488cf6cfb560ba457f80713d469fdbf1666aff4730_big_uint, + 0x61283ccdf122134fa2421001b12210000000affffffffffe8_big_uint, + 0x6f8014ca51c232ed6480b1981a3dd3d72cfe0a9c2986ba7d8dc20181d20cf8db_big_uint, + 0x151cdb46d4f99b9102fc2c91a0645c689d89f312c7239269a1362ba1abd896cb_big_uint, + 0x35926b84873e2d16fc9273ec962a65b7d27133d4c3a8957fc8e27f9fcd265a6_big_uint }}; BOOST_CHECK_EQUAL(c_res, a); @@ -611,27 +611,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_a) { polynomial_dfs a = { 4, { - 0x27_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_cppui_modular253, - 0xc250799be244269f448420036244200000016000000000003_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_cppui_modular253, + 0x27_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_big_uint, + 0xc250799be244269f448420036244200000016000000000003_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_big_uint, }}; // 9, 3, 11, 14, 7, 1, 5 polynomial_dfs b = { 6, { - 0x32_cppui_modular253, - 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_cppui_modular253, - 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_cppui_modular253, - 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_cppui_modular253, - 0xe_cppui_modular253, - 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_cppui_modular253, - 0x5853200109c1e3029381e00189c1e0000000a000000000000_cppui_modular253, - 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_cppui_modular253, + 0x32_big_uint, + 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_big_uint, + 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_big_uint, + 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_big_uint, + 0xe_big_uint, + 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_big_uint, + 0x5853200109c1e3029381e00189c1e0000000a000000000000_big_uint, + 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_big_uint, }}; a -= b; @@ -639,14 +639,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_a) { polynomial_dfs c_res = { 6, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_cppui_modular253, - 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_cppui_modular253, - 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_cppui_modular253, - 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000003_cppui_modular253, - 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_big_uint, + 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_big_uint, + 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_big_uint, + 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000003_big_uint, + 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_big_uint, }}; BOOST_CHECK_EQUAL(c_res, a); @@ -659,40 +659,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_without_resize) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint, }}; polynomial_dfs b = { 2, { - 0x17_cppui_modular253, - 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_cppui_modular253, - 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, - 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_cppui_modular253, - 0x11_cppui_modular253, - 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253, - 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_cppui_modular253, + 0x17_big_uint, + 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_big_uint, + 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, + 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_big_uint, + 0x11_big_uint, + 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint, + 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_big_uint, }}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 5, - {0x2f7_cppui_modular253, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_cppui_modular253, - 0x13522f003a2269a89044690056226900000023000000000048_cppui_modular253, - 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_cppui_modular253, - 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_cppui_modular253, - 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_cppui_modular253}}; + {0x2f7_big_uint, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_big_uint, + 0x13522f003a2269a89044690056226900000023000000000048_big_uint, + 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_big_uint, + 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_big_uint, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_big_uint, + 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_big_uint}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -702,44 +702,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_resize_a) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, }}; polynomial_dfs b = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint, + 0xd_big_uint, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint, }}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -749,44 +749,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_resize_b) { polynomial_dfs a = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint, + 0xd_big_uint, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint, }}; polynomial_dfs b = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, }}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -795,38 +795,38 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_resize_both) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 9, - {0x4f1_cppui_modular253, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_cppui_modular253, - 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_cppui_modular253, - 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_cppui_modular253, - 0xc250799be244269f44842003624420000001600000000003b_cppui_modular253, - 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_cppui_modular253, - 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_cppui_modular253, - 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_cppui_modular253, - 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_cppui_modular253, - 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_cppui_modular253, - 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_cppui_modular253, - 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_cppui_modular253, - 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_cppui_modular253, - 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_cppui_modular253}}; + {0x4f1_big_uint, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_big_uint, + 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_big_uint, + 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_big_uint, + 0xc250799be244269f44842003624420000001600000000003b_big_uint, + 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_big_uint, + 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_big_uint, + 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_big_uint, + 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_big_uint, + 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_big_uint, + 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_big_uint, + 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_big_uint, + 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_big_uint, + 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_big_uint}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -839,40 +839,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_without_resize) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint, }}; polynomial_dfs b = { 2, { - 0x17_cppui_modular253, - 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_cppui_modular253, - 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, - 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_cppui_modular253, - 0x11_cppui_modular253, - 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253, - 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_cppui_modular253, + 0x17_big_uint, + 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_big_uint, + 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, + 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_big_uint, + 0x11_big_uint, + 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint, + 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_big_uint, }}; a *= b; polynomial_dfs c_res = { 5, - {0x2f7_cppui_modular253, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_cppui_modular253, - 0x13522f003a2269a89044690056226900000023000000000048_cppui_modular253, - 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_cppui_modular253, - 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_cppui_modular253, - 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_cppui_modular253}}; + {0x2f7_big_uint, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_big_uint, + 0x13522f003a2269a89044690056226900000023000000000048_big_uint, + 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_big_uint, + 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_big_uint, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_big_uint, + 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_big_uint}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -881,44 +881,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_resize_a) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, }}; polynomial_dfs b = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint, + 0xd_big_uint, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint, }}; a *= b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -928,44 +928,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_resize_b) { polynomial_dfs a = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint, + 0xd_big_uint, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint, }}; polynomial_dfs b = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, }}; a *= b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -974,38 +974,38 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_resize_both) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}}; a *= b; polynomial_dfs c_res = { 9, - {0x4f1_cppui_modular253, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_cppui_modular253, - 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_cppui_modular253, - 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_cppui_modular253, - 0xc250799be244269f44842003624420000001600000000003b_cppui_modular253, - 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_cppui_modular253, - 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_cppui_modular253, - 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_cppui_modular253, - 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_cppui_modular253, - 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_cppui_modular253, - 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_cppui_modular253, - 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_cppui_modular253, - 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_cppui_modular253, - 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_cppui_modular253}}; + {0x4f1_big_uint, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_big_uint, + 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_big_uint, + 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_big_uint, + 0xc250799be244269f44842003624420000001600000000003b_big_uint, + 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_big_uint, + 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_big_uint, + 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_big_uint, + 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_big_uint, + 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_big_uint, + 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_big_uint, + 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_big_uint, + 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_big_uint, + 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_big_uint}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -1019,25 +1019,25 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_division) { // {5, 0, 0, 13, 0, 1}; polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint}}; //{13, 0, 1}; polynomial_dfs b = { 2, { - 0xe_cppui_modular253, - 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, - 0xe_cppui_modular253, - 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, + 0xe_big_uint, + 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint, + 0xc_big_uint, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint, + 0xe_big_uint, + 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint, + 0xc_big_uint, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint, }}; polynomial_dfs Q = a / b; @@ -1045,17 +1045,17 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_division) { polynomial_dfs Q_ans = { 3, - {0x1_cppui_modular253, 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_cppui_modular253, - 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_cppui_modular253, - 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000001000000000000_cppui_modular253, - 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_cppui_modular253}}; // {0, 0, 0, 1}; + {0x1_big_uint, 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_big_uint, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_big_uint, + 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_big_uint, + 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_big_uint, + 0x8d51ccce760304d0ec030002760300000001000000000000_big_uint, + 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_big_uint}}; // {0, 0, 0, 1}; polynomial_dfs R_ans = {0, - {0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, - 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, - 0x5_cppui_modular253}}; //{5}; + {0x5_big_uint, 0x5_big_uint, 0x5_big_uint, 0x5_big_uint, + 0x5_big_uint, 0x5_big_uint, 0x5_big_uint, + 0x5_big_uint}}; //{5}; BOOST_CHECK_EQUAL(Q_ans, Q); BOOST_CHECK_EQUAL(R_ans, R); @@ -1120,25 +1120,25 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_operations_with_constants_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_add_constant) { polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint}}; - typename FieldType::value_type c = 0x10_cppui_modular253; + typename FieldType::value_type c = 0x10_big_uint; polynomial_dfs c_res = { 5, - {0x23_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2f0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000016_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de914_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000008_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d3b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000015_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21717_cppui_modular253} + {0x23_big_uint, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2f0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000016_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de914_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000008_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d3b_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000015_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21717_big_uint} }; polynomial_dfs c1 = a + c; @@ -1153,36 +1153,36 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_add_constant) { BOOST_AUTO_TEST_CASE(polynomial_dfs_sub_constant) { polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint}}; - typename FieldType::value_type c = 0x10_cppui_modular253; + typename FieldType::value_type c = 0x10_big_uint; polynomial_dfs c_res = { 5, - {0x3_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2d0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3fffefffffff6_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de8f4_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d1b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000bfffffffffff5_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb216f7_cppui_modular253}}; + {0x3_big_uint, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2d0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3fffefffffff6_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de8f4_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d1b_big_uint, + 0x69fd599ad882439cb1024001d88240000000bfffffffffff5_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb216f7_big_uint}}; polynomial_dfs c2_res = { 5, - {0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d31_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c00000000000b_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb2170d_cppui_modular253, - 0x19_cppui_modular253, - 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e6_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff0000000c_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de90a_cppui_modular253}}; + {0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d31_big_uint, + 0x69fd599ad882439cb1024001d88240000000c00000000000b_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb2170d_big_uint, + 0x19_big_uint, + 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e6_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff0000000c_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de90a_big_uint}}; polynomial_dfs c1 = a - c; polynomial_dfs c2 = c - a; @@ -1197,26 +1197,26 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_sub_constant) { BOOST_AUTO_TEST_CASE(polynomial_dfs_mul_constant) { polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint}}; - typename FieldType::value_type c = 0x123456789abcdef0_cppui_modular253; + typename FieldType::value_type c = 0x123456789abcdef0_big_uint; polynomial_dfs c_res = { 5, - {0x159e26af37c048bd0_cppui_modular253, - 0x561eb8d15cf56ffae9f06589af84b8c28cc573357badfeb6369351fbc07369c3_cppui_modular253, - 0x6f4395a4399ecdf012d23e04abddbe468b2b136318957723e7c5b05905b05ab2_cppui_modular253, - 0x25025c1ee2b3c9846b9b3b1a4106e62e52434883b230fa78188b5373797c67d7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfe5c28f5c18f5c2991_cppui_modular253, - 0x1dceee81cca80d4d4949727e5a1d1f42c6f830cd84505d497f780eb94aed4b9e_cppui_modular253, - 0x4aa11aeeffeaf5820679a035dc419bec892909fe768e4dbce45b05c05b05aaf_cppui_modular253, - 0x4eeb4b3446e9b3c3c79e9cedc89af1d7017a5b7f4dcd61879d800d4191e44d8a_cppui_modular253 + {0x159e26af37c048bd0_big_uint, + 0x561eb8d15cf56ffae9f06589af84b8c28cc573357badfeb6369351fbc07369c3_big_uint, + 0x6f4395a4399ecdf012d23e04abddbe468b2b136318957723e7c5b05905b05ab2_big_uint, + 0x25025c1ee2b3c9846b9b3b1a4106e62e52434883b230fa78188b5373797c67d7_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfe5c28f5c18f5c2991_big_uint, + 0x1dceee81cca80d4d4949727e5a1d1f42c6f830cd84505d497f780eb94aed4b9e_big_uint, + 0x4aa11aeeffeaf5820679a035dc419bec892909fe768e4dbce45b05c05b05aaf_big_uint, + 0x4eeb4b3446e9b3c3c79e9cedc89af1d7017a5b7f4dcd61879d800d4191e44d8a_big_uint }}; polynomial_dfs c1 = a * c; @@ -1235,14 +1235,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_pow_eq_test) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint, }}; polynomial_dfs res = a; @@ -1261,17 +1261,17 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_evaluate_after_resize_test) { polynomial_dfs small_poly = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint, }}; - typename FieldType::value_type point = 0x10_cppui_modular253; + typename FieldType::value_type point = 0x10_big_uint; polynomial_dfs large_poly = small_poly; for (size_t new_size : {16, 32, 64, 128, 256, 512}) { large_poly.resize(new_size); @@ -1284,17 +1284,17 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_evaluate_after_resize_and_shift_test) { polynomial_dfs small_poly = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint, }}; - typename FieldType::value_type point = 0x10_cppui_modular253; + typename FieldType::value_type point = 0x10_big_uint; polynomial_dfs large_poly = small_poly; small_poly = polynomial_shift(small_poly, -1, 8); for (size_t new_size : {16, 32, 64, 128, 256, 512}) { @@ -1308,14 +1308,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_zero_one_test) { polynomial_dfs small_poly = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint, }}; polynomial_dfs zero = polynomial_dfs::zero(); diff --git a/crypto3/libs/math/test/polynomial_dfs_view.cpp b/crypto3/libs/math/test/polynomial_dfs_view.cpp index 32b0c0beb5..7d268f1bef 100644 --- a/crypto3/libs/math/test/polynomial_dfs_view.cpp +++ b/crypto3/libs/math/test/polynomial_dfs_view.cpp @@ -52,14 +52,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_from_coefficients_less_degree) { a.from_coefficients(polynomial); std::vector c_res = { - 0x35_cppui_modular253, - 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}; + 0x35_big_uint, + 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -73,14 +73,14 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_coefficients_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_coefficients_less_degree) { std::vector a_v = { - 0x35_cppui_modular253, - 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}; + 0x35_big_uint, + 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint}; polynomial_dfs_view a = {7, a_v}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u}; @@ -95,13 +95,13 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_coefficients_less_degree) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_coefficients_same_degree) { std::vector a_v = { 0x37u, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}; polynomial_dfs_view a = {8, a_v}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u, 2u}; std::vector c = a.coefficients(); @@ -117,39 +117,39 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_addition_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_equal) { std::vector a_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}; polynomial_dfs_view a = {7, a_v}; std::vector b_v = { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint, + 0x6_big_uint, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint, }; polynomial_dfs_view b = {7, b_v}; a += b; std::vector c_v = { - 0x71_cppui_modular253, - 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_cppui_modular253, - 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_cppui_modular253, - 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_cppui_modular253, - 0x13522f003a2269a89044690056226900000022fffffffffffc_cppui_modular253, - 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_cppui_modular253, + 0x71_big_uint, + 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_big_uint, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_big_uint, + 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_big_uint, + 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_big_uint, + 0x13522f003a2269a89044690056226900000022fffffffffffc_big_uint, + 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_big_uint, }; polynomial_dfs_view c_res = {7, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -161,32 +161,32 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_less_b) { std::vector a_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}; polynomial_dfs_view a = {7, a_v}; std::vector b_v = { - 0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}; + 0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}; polynomial_dfs_view b = {2, b_v}; a += b; std::vector c_v = { - 0x4e_cppui_modular253, - 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}; + 0x4e_big_uint, + 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint}; polynomial_dfs_view c_res = {7, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -197,32 +197,32 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_less_b) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_less_a) { std::vector a_v = { - 0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}; + 0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}; polynomial_dfs_view a = {2, a_v}; std::vector b_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}; polynomial_dfs_view b = {7, b_v}; a += b; std::vector c_v = { - 0x4e_cppui_modular253, - 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}; + 0x4e_big_uint, + 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint}; polynomial_dfs_view c_res = {7, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -240,26 +240,26 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_equal) { //{1, 3, 4, 25, 6, 7, 7, 2} std::vector a_v = { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint, }; polynomial_dfs_view a = {7, a_v}; // {9, 3, 11, 14, 7, 1, 5, 8} std::vector b_v = { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint, + 0x6_big_uint, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint, }; polynomial_dfs_view b = {7, b_v}; @@ -267,14 +267,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_equal) { //-8, 0, -7, 11, -1, 6, 2, -6 std::vector c_v = { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000000fffffffffffc_cppui_modular253, - 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_cppui_modular253, - 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint, + 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_big_uint, + 0x8d51ccce760304d0ec030002760300000000fffffffffffc_big_uint, + 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint, + 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_big_uint, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_big_uint, + 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_big_uint, }; polynomial_dfs_view c_res = {7, c_v}; @@ -288,40 +288,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_less_b) { // 1, 3, 4, 25, 6, 7, 7, 2 std::vector a_v = { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint, }; polynomial_dfs_view a = {7, a_v}; // 9, 3, 11, 14, 7 std::vector b_v = { - 0x2c_cppui_modular253, - 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_cppui_modular253, - 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_cppui_modular253, - 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_cppui_modular253, - 0xa_cppui_modular253, - 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_cppui_modular253, - 0x61283ccdf122134fa2421001b12210000000b000000000005_cppui_modular253, - 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_cppui_modular253, + 0x2c_big_uint, + 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_big_uint, + 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_big_uint, + 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_big_uint, + 0xa_big_uint, + 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_big_uint, + 0x61283ccdf122134fa2421001b12210000000b000000000005_big_uint, + 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_big_uint, }; polynomial_dfs_view b = {4, b_v}; a -= b; //-8, 0, -7, 11, -1, 7, 7, 2 std::vector c_v = { - 0xb_cppui_modular253, - 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_cppui_modular253, - 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_cppui_modular253, - 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_cppui_modular253, - 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_cppui_modular253, - 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_cppui_modular253, - 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_cppui_modular253, + 0xb_big_uint, + 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_big_uint, + 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_big_uint, + 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_big_uint, + 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_big_uint, + 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_big_uint, + 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_big_uint, }; polynomial_dfs_view c_res = {7, c_v}; @@ -336,26 +336,26 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_less_a) { // 1, 3, 4, 25, 6 std::vector a_v = { - 0x27_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_cppui_modular253, - 0xc250799be244269f448420036244200000016000000000003_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_cppui_modular253, + 0x27_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_big_uint, + 0xc250799be244269f448420036244200000016000000000003_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_big_uint, }; polynomial_dfs_view a = {4, a_v}; // 9, 3, 11, 14, 7, 1, 5 std::vector b_v = { - 0x32_cppui_modular253, - 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_cppui_modular253, - 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_cppui_modular253, - 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_cppui_modular253, - 0xe_cppui_modular253, - 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_cppui_modular253, - 0x5853200109c1e3029381e00189c1e0000000a000000000000_cppui_modular253, - 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_cppui_modular253, + 0x32_big_uint, + 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_big_uint, + 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_big_uint, + 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_big_uint, + 0xe_big_uint, + 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_big_uint, + 0x5853200109c1e3029381e00189c1e0000000a000000000000_big_uint, + 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_big_uint, }; polynomial_dfs_view b = {6, b_v}; @@ -363,14 +363,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_less_a) { a -= b; std::vector c_v = { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_cppui_modular253, - 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_cppui_modular253, - 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_cppui_modular253, - 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000003_cppui_modular253, - 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_big_uint, + 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_big_uint, + 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_big_uint, + 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000003_big_uint, + 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_big_uint, }; polynomial_dfs_view c_res = {6, c_v}; @@ -389,40 +389,40 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_multiplication_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_without_resize) { std::vector a_v = { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint, }; polynomial_dfs_view a = {3, a_v}; std::vector b_v = { - 0x17_cppui_modular253, - 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_cppui_modular253, - 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, - 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_cppui_modular253, - 0x11_cppui_modular253, - 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253, - 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_cppui_modular253, + 0x17_big_uint, + 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_big_uint, + 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, + 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_big_uint, + 0x11_big_uint, + 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint, + 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_big_uint, }; polynomial_dfs_view b = {2, b_v}; a *= b; std::vector c_v = { - 0x2f7_cppui_modular253, - 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_cppui_modular253, - 0x13522f003a2269a89044690056226900000023000000000048_cppui_modular253, - 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_cppui_modular253, - 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_cppui_modular253, - 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_cppui_modular253}; + 0x2f7_big_uint, + 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_big_uint, + 0x13522f003a2269a89044690056226900000023000000000048_big_uint, + 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_big_uint, + 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_big_uint, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_big_uint, + 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_big_uint}; polynomial_dfs_view c_res = {5, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -435,44 +435,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_without_resize) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_a) { std::vector a_v = { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, }; polynomial_dfs_view a = {3, a_v}; std::vector b_v = { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint, + 0xd_big_uint, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint, }; polynomial_dfs_view b = {5, b_v}; a *= b; std::vector c_v = { - 0x60f_cppui_modular253, - 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}; + 0x60f_big_uint, + 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint}; polynomial_dfs_view c_res = {8, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -485,44 +485,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_a) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_b) { std::vector a_v = { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint, + 0xd_big_uint, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint, }; polynomial_dfs_view a = {5, a_v}; std::vector b_v = { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint, }; polynomial_dfs_view b = {3, b_v}; a *= b; std::vector c_v = { - 0x60f_cppui_modular253, - 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}; + 0x60f_big_uint, + 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint}; polynomial_dfs_view c_res = {8, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -535,40 +535,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_b) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_both) { std::vector a_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint}; polynomial_dfs_view a = {7, a_v}; std::vector b_v = { - 0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}; + 0x17_big_uint, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint, 0x11_big_uint, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint}; polynomial_dfs_view b = {2, b_v}; a *= b; std::vector c_v = { - 0x4f1_cppui_modular253, - 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_cppui_modular253, - 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_cppui_modular253, - 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_cppui_modular253, - 0xc250799be244269f44842003624420000001600000000003b_cppui_modular253, - 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_cppui_modular253, - 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_cppui_modular253, - 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_cppui_modular253, - 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_cppui_modular253, - 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_cppui_modular253, - 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_cppui_modular253, - 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_cppui_modular253, - 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_cppui_modular253, - 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_cppui_modular253}; + 0x4f1_big_uint, + 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_big_uint, + 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_big_uint, + 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_big_uint, + 0xc250799be244269f44842003624420000001600000000003b_big_uint, + 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_big_uint, + 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_big_uint, + 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_big_uint, + 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_big_uint, + 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_big_uint, + 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_big_uint, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_big_uint, + 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_big_uint, + 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_big_uint, + 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_big_uint}; polynomial_dfs_view c_res = {9, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -584,35 +584,35 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_division_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_division) { // {5, 0, 0, 13, 0, 1}; std::vector a_v = { - 0x13_cppui_modular253, - 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}; + 0x13_big_uint, + 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint}; polynomial_dfs_view a = {5, a_v}; //{13, 0, 1}; std::vector b_v = { - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, + 0xe_big_uint, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint, + 0xc_big_uint, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint, + 0xe_big_uint, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint, + 0xc_big_uint, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint, }; polynomial_dfs_view b = {2, b_v}; a /= b; std::vector q_v = { - 0x1_cppui_modular253, - 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_cppui_modular253, - 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_cppui_modular253, - 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000001000000000000_cppui_modular253, - 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_cppui_modular253}; + 0x1_big_uint, + 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_big_uint, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_big_uint, + 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_big_uint, + 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_big_uint, + 0x8d51ccce760304d0ec030002760300000001000000000000_big_uint, + 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_big_uint}; polynomial_dfs_view q_ans = {3, q_v}; // {0, 0, 0, 1}; BOOST_CHECK_EQUAL(q_ans.size(), a.size()); @@ -625,28 +625,28 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_division) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_modulus) { // {5, 0, 0, 13, 0, 1}; std::vector a_v = { - 0x13_cppui_modular253, - 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}; + 0x13_big_uint, + 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint}; polynomial_dfs_view a = {5, a_v}; //{13, 0, 1}; std::vector b_v = { - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, + 0xe_big_uint, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint, + 0xc_big_uint, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint, + 0xe_big_uint, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint, + 0xc_big_uint, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint, }; polynomial_dfs_view b = {2, b_v}; a %= b; - std::vector r_v = {0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, - 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253}; + std::vector r_v = {0x5_big_uint, 0x5_big_uint, 0x5_big_uint, 0x5_big_uint, + 0x5_big_uint, 0x5_big_uint, 0x5_big_uint, 0x5_big_uint}; polynomial_dfs_view r_ans = {0, r_v}; //{5}; BOOST_CHECK_EQUAL(r_ans.size(), a.size()); diff --git a/crypto3/libs/multiprecision/example/big_seventh.cpp b/crypto3/libs/multiprecision/example/big_seventh.cpp index 40df2a6596..830f28e291 100644 --- a/crypto3/libs/multiprecision/example/big_seventh.cpp +++ b/crypto3/libs/multiprecision/example/big_seventh.cpp @@ -37,7 +37,7 @@ constants], we need some includes: #include -#include +#include // that includes some predefined typedefs like: // using nil::crypto3::multiprecision::cpp_bin_float_quad; // using nil::crypto3::multiprecision::cpp_bin_float_50; diff --git a/crypto3/libs/multiprecision/example/cpp_int_import_export.cpp b/crypto3/libs/multiprecision/example/cpp_int_import_export.cpp index 4ff141ae84..953d438095 100644 --- a/crypto3/libs/multiprecision/example/cpp_int_import_export.cpp +++ b/crypto3/libs/multiprecision/example/cpp_int_import_export.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include #include #include @@ -16,7 +16,7 @@ In this simple example, we'll import/export the bits of a cpp_int to a vector of 8-bit unsigned values: */ /*= -#include +#include #include #include #include diff --git a/crypto3/libs/multiprecision/example/cpp_int_mul_timing.cpp b/crypto3/libs/multiprecision/example/cpp_int_mul_timing.cpp index dc2b62f746..ff96c8acc3 100644 --- a/crypto3/libs/multiprecision/example/cpp_int_mul_timing.cpp +++ b/crypto3/libs/multiprecision/example/cpp_int_mul_timing.cpp @@ -15,7 +15,7 @@ #include #include -#include +#include class random_pcg32_fast_base { protected: diff --git a/crypto3/libs/multiprecision/example/cpp_int_snips.cpp b/crypto3/libs/multiprecision/example/cpp_int_snips.cpp index f27b39d5f6..7f84407156 100644 --- a/crypto3/libs/multiprecision/example/cpp_int_snips.cpp +++ b/crypto3/libs/multiprecision/example/cpp_int_snips.cpp @@ -3,12 +3,12 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include void t1() { //[cpp_int_eg - //=#include + //=#include //=#include //= //=int main() @@ -40,7 +40,7 @@ void t1() { void t3() { //[cpp_rational_eg - //=#include + //=#include //=#include //= //=int main() diff --git a/crypto3/libs/multiprecision/example/debug_adaptor_snips.cpp b/crypto3/libs/multiprecision/example/debug_adaptor_snips.cpp index a18b0bd5fa..b79d7c7a3b 100644 --- a/crypto3/libs/multiprecision/example/debug_adaptor_snips.cpp +++ b/crypto3/libs/multiprecision/example/debug_adaptor_snips.cpp @@ -3,14 +3,14 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include -#include +#include +#include #include void t1() { //[debug_adaptor_eg - //=#include - //=#include + //=#include + //=#include using namespace nil::crypto3::multiprecision; diff --git a/crypto3/libs/multiprecision/example/hashing_examples.cpp b/crypto3/libs/multiprecision/example/hashing_examples.cpp index bb3f8dbd9f..0426fd2950 100644 --- a/crypto3/libs/multiprecision/example/hashing_examples.cpp +++ b/crypto3/libs/multiprecision/example/hashing_examples.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include #include #include diff --git a/crypto3/libs/multiprecision/example/hypergeometric_luke_algorithms.cpp b/crypto3/libs/multiprecision/example/hypergeometric_luke_algorithms.cpp index 776382a8f1..cef2d7e5d9 100644 --- a/crypto3/libs/multiprecision/example/hypergeometric_luke_algorithms.cpp +++ b/crypto3/libs/multiprecision/example/hypergeometric_luke_algorithms.cpp @@ -39,13 +39,13 @@ #endif #if defined(USE_CPP_BIN_FLOAT) -#include +#include typedef nil::crypto3::multiprecision::number> mp_type; #elif defined(USE_CPP_DEC_FLOAT) -#include +#include typedef nil::crypto3::multiprecision::number> mp_type; #elif defined(USE_MPFR) -#include +#include typedef nil::crypto3::multiprecision::number> mp_type; #else diff --git a/crypto3/libs/multiprecision/example/integer_examples.cpp b/crypto3/libs/multiprecision/example/integer_examples.cpp index 86dde7d92d..c347e4355b 100644 --- a/crypto3/libs/multiprecision/example/integer_examples.cpp +++ b/crypto3/libs/multiprecision/example/integer_examples.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include #include #include @@ -18,7 +18,7 @@ which will fit into a 128-bit integer. At the end of the routine we do some fancy iostream formatting of the results: */ /*= -#include +#include #include #include #include diff --git a/crypto3/libs/multiprecision/example/logged_adaptor.cpp b/crypto3/libs/multiprecision/example/logged_adaptor.cpp index 594c0efc1a..2ef069f08b 100644 --- a/crypto3/libs/multiprecision/example/logged_adaptor.cpp +++ b/crypto3/libs/multiprecision/example/logged_adaptor.cpp @@ -5,8 +5,8 @@ //[logged_adaptor -#include -#include +#include +#include #include #include // diff --git a/crypto3/libs/multiprecision/example/mixed_integer_arithmetic.cpp b/crypto3/libs/multiprecision/example/mixed_integer_arithmetic.cpp index e9c5982634..061f7651e3 100644 --- a/crypto3/libs/multiprecision/example/mixed_integer_arithmetic.cpp +++ b/crypto3/libs/multiprecision/example/mixed_integer_arithmetic.cpp @@ -12,7 +12,7 @@ #endif //[mixed_eg -#include +#include int main() { diff --git a/crypto3/libs/multiprecision/example/modular_examples.cpp b/crypto3/libs/multiprecision/example/modular_examples.cpp index 66a831a922..5f8c0b6618 100644 --- a/crypto3/libs/multiprecision/example/modular_examples.cpp +++ b/crypto3/libs/multiprecision/example/modular_examples.cpp @@ -9,7 +9,7 @@ //[cpp_modular_eg #include -#include +#include template void modular_number_examples() diff --git a/crypto3/libs/multiprecision/example/numeric_limits_snips.cpp b/crypto3/libs/multiprecision/example/numeric_limits_snips.cpp index da1f62500b..93833d630d 100644 --- a/crypto3/libs/multiprecision/example/numeric_limits_snips.cpp +++ b/crypto3/libs/multiprecision/example/numeric_limits_snips.cpp @@ -20,8 +20,8 @@ #include #include -#include // is decimal. -#include // is binary. +#include // is decimal. +#include // is binary. #define BOOST_TEST_MAIN #include // Boost.Test diff --git a/crypto3/libs/multiprecision/example/random_snips.cpp b/crypto3/libs/multiprecision/example/random_snips.cpp index 0b0c7173c3..42edb9708c 100644 --- a/crypto3/libs/multiprecision/example/random_snips.cpp +++ b/crypto3/libs/multiprecision/example/random_snips.cpp @@ -3,8 +3,8 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include -#include +#include +#include #include #include #include @@ -12,7 +12,7 @@ void t1() { //[random_eg1 - //=#include + //=#include //=#include //= //=int main() @@ -83,7 +83,7 @@ void t1() { void t2() { std::cout << std::dec; //[random_eg2 - //=#include + //=#include //=#include //= //=int main() @@ -129,7 +129,7 @@ Program output is void t3() { //[random_eg3 - //=#include + //=#include //=#include //= //=int main() @@ -182,8 +182,8 @@ Which produces the following output: void t4() { std::cout << std::endl; //[random_eg4 - //=#include - //=#include + //=#include + //=#include //=#include //= //=int main() @@ -260,7 +260,7 @@ Which produces the following output: void t5() { //[random_eg5 - //=#include + //=#include //=#include //=#include //= diff --git a/crypto3/libs/multiprecision/example/safe_prime.cpp b/crypto3/libs/multiprecision/example/safe_prime.cpp index 31c3e1456f..644b153532 100644 --- a/crypto3/libs/multiprecision/example/safe_prime.cpp +++ b/crypto3/libs/multiprecision/example/safe_prime.cpp @@ -5,8 +5,8 @@ //[safe_prime -#include -#include +#include +#include #include #include diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/big_mod.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/big_mod.hpp new file mode 100644 index 0000000000..3fd76e74ac --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/big_mod.hpp @@ -0,0 +1,6 @@ +#pragma once + +#include "nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_mod/ops/inverse.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_mod/ops/pow.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_mod/ops/ressol.hpp" // IWYU pragma: export diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/big_uint.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/big_uint.hpp new file mode 100644 index 0000000000..277bf05888 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/big_uint.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/limits.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/ops/gcd_inverse.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/ops/import_export.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/ops/jacobi.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/ops/powm.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/ops/ressol.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/ops/wnaf.hpp" // IWYU pragma: export + +namespace nil::crypto3::multiprecision { + using uint128_t = big_uint<128>; + using uint256_t = big_uint<256>; + using uint512_t = big_uint<512>; + using uint1024_t = big_uint<1024>; +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp similarity index 97% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp index 7e0f8ec4be..ab4979cf24 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp @@ -796,16 +796,16 @@ namespace boost { // // Last of all we include the implementations of all the eval_* non member functions: // -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #endif diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/add.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/add.hpp similarity index 99% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/add.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/add.hpp index 1a25e47a37..64e8e9667b 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/add.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/add.hpp @@ -9,7 +9,7 @@ #define CRYPTO3_CPP_INT_ADD_HPP #include -#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/add_unsigned.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/add_unsigned.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/add_unsigned.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/add_unsigned.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/bitwise.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/bitwise.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/bitwise.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/bitwise.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/comparison.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/comparison.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/comparison.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/comparison.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/divide.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/divide.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/divide.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/divide.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/eval_jacobi.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/eval_jacobi.hpp similarity index 97% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/eval_jacobi.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/eval_jacobi.hpp index a3ab527706..d56d28a83f 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/eval_jacobi.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/eval_jacobi.hpp @@ -12,7 +12,7 @@ #include -#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/import_export.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/import_export.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/import_export.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/import_export.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/limits.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/limits.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/limits.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/limits.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/literals.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/literals.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/literals.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/literals.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/misc.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/misc.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/misc.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/misc.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/multiply.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/multiply.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_int_modular/multiply.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_int_modular/multiply.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_modular.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_modular.hpp similarity index 88% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_modular.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_modular.hpp index 8916aaf506..a4d95f4626 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/cpp_modular.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/cpp_modular.hpp @@ -10,8 +10,8 @@ #ifndef CRYPTO3_MP_CPP_MODULAR_HPP #define CRYPTO3_MP_CPP_MODULAR_HPP -#include -#include +#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/detail/integer_ops.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/detail/integer_ops.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/inverse.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/inverse.hpp similarity index 93% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/inverse.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/inverse.hpp index b19d816aaa..816e2fbb8b 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/inverse.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/inverse.hpp @@ -13,11 +13,11 @@ #include -#include +#include #include -#include -#include -#include +#include +#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/jacobi.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/jacobi.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/jacobi.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/jacobi.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/literals.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/literals.hpp new file mode 100644 index 0000000000..b07a0c92a6 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/literals.hpp @@ -0,0 +1,3 @@ +#pragma once + +#include \ No newline at end of file diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/barrett_params.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/barrett_params.hpp similarity index 98% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/barrett_params.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/barrett_params.hpp index 051c9218e2..a6988d5a51 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/barrett_params.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/barrett_params.hpp @@ -11,7 +11,7 @@ #ifndef BOOST_MULTIPRECISION_BARRETT_PARAMS_HPP #define BOOST_MULTIPRECISION_BARRETT_PARAMS_HPP -#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/base_params.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/base_params.hpp similarity index 94% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/base_params.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/base_params.hpp index 5b825ff605..fc006d62de 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/base_params.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/base_params.hpp @@ -11,7 +11,7 @@ #ifndef BOOST_MULTIPRECISION_BASE_PARAMS_HPP #define BOOST_MULTIPRECISION_BASE_PARAMS_HPP -#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/inverse.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/inverse.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/inverse.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/inverse.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_adaptor.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_adaptor.hpp similarity index 99% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_adaptor.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_adaptor.hpp index 51aa7ad24c..2a7abac8d8 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_adaptor.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_adaptor.hpp @@ -15,7 +15,7 @@ #include #include -#include +#include #include diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_adaptor_fixed.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_adaptor_fixed.hpp similarity index 98% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_adaptor_fixed.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_adaptor_fixed.hpp index 2bda862d2c..aea25eb268 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_adaptor_fixed.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_adaptor_fixed.hpp @@ -11,8 +11,8 @@ #ifndef CRYPTO3_MULTIPRECISION_MODULAR_ADAPTOR_FIXED_PRECISION_HPP #define CRYPTO3_MULTIPRECISION_MODULAR_ADAPTOR_FIXED_PRECISION_HPP -#include -#include +#include +#include namespace boost { namespace multiprecision { @@ -393,6 +393,6 @@ namespace boost { // all integer operations over modular numbers will 'see' the overloaded versions of eval_* functions. // Moving this include to the start of this file will break the compilation. -#include // for powm over modular_adaptor +#include // for powm over modular_adaptor #endif // CRYPTO3_MULTIPRECISION_MODULAR_ADAPTOR_FIXED_PRECISION_HPP diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_functions_fixed.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_functions_fixed.hpp similarity index 99% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_functions_fixed.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_functions_fixed.hpp index a6e64e5901..5b3c407a37 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_functions_fixed.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_functions_fixed.hpp @@ -12,7 +12,7 @@ #define CRYPTO3_MULTIPRECISION_MODULAR_FUNCTIONS_FIXED_PRECISION_HPP #include -#include +#include #include diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_params.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_params.hpp similarity index 96% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_params.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_params.hpp index 0445edcc9c..573934630b 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_params.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_params.hpp @@ -11,8 +11,8 @@ #ifndef BOOST_MULTIPRECISION_MODULAR_PARAMS_HPP #define BOOST_MULTIPRECISION_MODULAR_PARAMS_HPP -#include -#include +#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_params_fixed.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_params_fixed.hpp similarity index 98% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_params_fixed.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_params_fixed.hpp index 57746a9832..e23a4bc4aa 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_params_fixed.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_params_fixed.hpp @@ -11,7 +11,7 @@ #ifndef CRYPTO3_MULTIPRECISION_MODULAR_PARAMS_FIXED_PRECISION_HPP #define CRYPTO3_MULTIPRECISION_MODULAR_PARAMS_FIXED_PRECISION_HPP -#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_policy_fixed.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_policy_fixed.hpp similarity index 98% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_policy_fixed.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_policy_fixed.hpp index 74edfaa9c2..d70e3bf9eb 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/modular_policy_fixed.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/modular_policy_fixed.hpp @@ -10,7 +10,7 @@ #ifndef CRYPTO3_MULTIPRECISION_MODULAR_POLICY_FIXED_HPP #define CRYPTO3_MULTIPRECISION_MODULAR_POLICY_FIXED_HPP -#include +#include #include diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/montgomery_params.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/montgomery_params.hpp similarity index 87% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/montgomery_params.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/montgomery_params.hpp index bd05ae6aa6..5cd252562c 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/modular/montgomery_params.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/modular/montgomery_params.hpp @@ -15,10 +15,10 @@ #include -#include +#include #include -#include -#include +#include +#include #include #include diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/random.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/random.hpp similarity index 75% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/random.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/random.hpp index 2cb3c2bc38..796786acb3 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/random.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/random.hpp @@ -10,7 +10,7 @@ #if defined(__GNUC__) || defined(_MSC_VER) #pragma message( \ - "NOTE: Use of this header (nil/crypto3/multiprecision/random.hpp) is deprecated: please use the random number library headers directly.") + "NOTE: Use of this header (nil/crypto3/multiprecision/boost_backends/random.hpp) is deprecated: please use the random number library headers directly.") #endif #include diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/ressol.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/ressol.hpp similarity index 98% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/ressol.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/ressol.hpp index 993002cafc..a21dcb0071 100644 --- a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/ressol.hpp +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/ressol.hpp @@ -11,11 +11,11 @@ #ifndef CRYPTO3_MULTIPRECISION_RESSOL_HPP #define CRYPTO3_MULTIPRECISION_RESSOL_HPP -#include +#include #include -#include -#include +#include +#include namespace boost { namespace multiprecision { diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/traits/is_backend.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/traits/is_backend.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/traits/is_backend.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/traits/is_backend.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/wnaf.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/wnaf.hpp similarity index 100% rename from crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/wnaf.hpp rename to crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/boost_backends/wnaf.hpp diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/assert.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/assert.hpp new file mode 100644 index 0000000000..3a8ca9e01c --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/assert.hpp @@ -0,0 +1,6 @@ +#pragma once + +#include + +#define NIL_CO3_MP_ASSERT(expr) assert(expr) +#define NIL_CO3_MP_ASSERT_MSG(expr, msg) assert((expr) && (msg)) diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_int.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_int.hpp new file mode 100644 index 0000000000..21fcfafb81 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_int.hpp @@ -0,0 +1,402 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include + +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/config.hpp" + +namespace nil::crypto3::multiprecision { + /** + * @brief Big signed integer type + * + * @tparam Bits Number of bits, not including the sign bit + * + * @details + * The sign bit is stored separately from the rest of the integer. + * + * @note + * Like big_uint, this is not optimized. It is provided for convenience. + */ + template + class big_int { + public: + static constexpr std::size_t Bits = Bits_; + using self_type = big_int; + + using unsigned_type = big_uint; + + // Constructor + + constexpr big_int() noexcept {} + + template + constexpr big_int(const big_uint& b) noexcept : m_abs(b) {} + + template && std::is_signed_v, int> = 0> + constexpr big_int(T val) noexcept : m_abs(abs(val)) { + // for ADL + using std::abs; + if (val < 0) { + negate(); + } + } + + template && std::is_unsigned_v, int> = 0> + constexpr big_int(T val) noexcept : m_abs(val) {} + + template + constexpr big_int(const big_int& other) noexcept + : m_negative(other.negative()), m_abs(other.abs()) {} + + // Assignment + + template + constexpr big_int& operator=(const big_uint& b) { + m_negative = false; + m_abs = b; + } + + template + constexpr big_int& operator=(const big_int& other) noexcept { + m_negative = other.negative(); + m_abs = other.abs(); + return *this; + } + + template && std::is_signed_v, int> = 0> + constexpr big_int& operator=(T val) noexcept { + using std::abs; + m_abs = abs(val); + if (val < 0) { + negate(); + } + return *this; + } + + template && std::is_unsigned_v, int> = 0> + constexpr big_int& operator=(T val) noexcept { + m_negative = false; + m_abs = val; + return *this; + } + + constexpr std::string str() const { + return (negative() ? std::string("-") : std::string("")) + m_abs.str(); + } + + template = 0> + constexpr big_int truncate() const noexcept { + return {m_negative, m_abs.template truncate()}; + } + + // Cast to integral types + + template, int> = 0> + explicit constexpr operator T() const { + return multiplied_by_sign(static_cast(abs())); + } + + template + explicit constexpr operator big_uint() const { + NIL_CO3_MP_ASSERT(!this->negative()); + return m_abs; + } + + // Utilities + + constexpr bool negative() const { return m_negative; } + + constexpr int sign() const noexcept { return negative() ? -1 : (m_abs.is_zero() ? 0 : 1); } + + constexpr const unsigned_type& abs() const { return m_abs; } + + constexpr void negate() { + if (m_abs.is_zero()) { + return; + } + m_negative = !m_negative; + } + + // Comparison + + template + constexpr int compare(const big_int& other) const noexcept { + if (negative() && !other.negative()) { + return -1; + } + if (!negative() && other.negative()) { + return 1; + } + if (negative() && other.negative()) { + return other.m_abs.compare(this->m_abs); + } + return this->m_abs.compare(other.m_abs); + } + + // Arithmetic operations + + // Addition/subtraction + + static constexpr big_int add(const big_int& a, const big_int& b) noexcept { + if (!a.negative() && !b.negative()) { + return a.m_abs + b.m_abs; + } + if (!a.negative() && b.negative()) { + if (a.m_abs >= b.m_abs) { + return a.m_abs - b.m_abs; + } + return -big_int(b.m_abs - a.m_abs); + } + if (a.negative() && !b.negative()) { + return add(b, a); + } + return -big_int(a.m_abs + b.m_abs); + } + + static constexpr big_int subtract(const big_int& a, const big_int& b) noexcept { + return add(a, -b); + } + + NIL_CO3_MP_FORCEINLINE constexpr void increment() noexcept { + if (negative()) { + --m_abs; + normalize(); + return; + } + ++m_abs; + } + + NIL_CO3_MP_FORCEINLINE constexpr void decrement() noexcept { + if (negative()) { + ++m_abs; + return; + } + if (is_zero(m_abs)) { + m_negative = true; + ++m_abs; + return; + } + --m_abs; + } + + // Modulus + + static constexpr big_int modulus(const big_int& x, const big_int& y) { + return static_cast(x - static_cast((x / y) * y)); + } + + // Division + + static constexpr big_int divide(const big_int& x, const big_int& y) { + big_int result = x.m_abs / y.m_abs; + if (x.negative() != y.negative()) { + result.negate(); + } + return result; + } + + // Multiplication + + template + static constexpr big_int multiply(const big_int& a, + const big_int& b) noexcept { + big_int result = a.m_abs * b.m_abs; + if (a.sign() * b.sign() < 0) { + result = -result; + } + return result; + } + + // Misc ops + + NIL_CO3_MP_FORCEINLINE constexpr bool is_zero() const noexcept { return abs().is_zero(); } + + private: + constexpr void normalize() noexcept { + if (m_abs.is_zero()) { + m_negative = false; + } + } + + template + constexpr void multiply_by_sign(T& a) const { + if (negative()) { + a = -a; + } + } + template + constexpr T multiplied_by_sign(const T& a) const { + if (negative()) { + return -a; + } + return a; + } + + bool m_negative = false; + big_uint m_abs; + }; + + namespace detail { + template + constexpr bool is_big_int_v = false; + + template + constexpr bool is_big_int_v> = true; + + template + constexpr bool is_signed_integral_v = is_integral_v || is_big_int_v; + + template, int> = 0> + constexpr std::size_t get_bits() { + return T::Bits; + } + } // namespace detail + +#define NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE \ + template< \ + typename T1, typename T2, \ + std::enable_if_t && detail::is_signed_integral_v && \ + (detail::is_big_int_v || detail::is_big_int_v), \ + int> = 0, \ + typename largest_t = big_int(), detail::get_bits())>> + +#define NIL_CO3_MP_BIG_INT_INTEGRAL_ASSIGNMENT_TEMPLATE \ + template && detail::is_signed_integral_v, \ + int> = 0> + +#define NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE \ + template, int> = 0> + + // Comparison + +#define NIL_CO3_MP_BIG_INT_IMPL_OPERATOR(op) \ + NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE \ + constexpr bool operator op(const T1& a, const T2& b) noexcept { \ + largest_t ap = a; \ + largest_t bp = b; \ + return ap.compare(bp) op 0; \ + } + + NIL_CO3_MP_BIG_INT_IMPL_OPERATOR(<) + NIL_CO3_MP_BIG_INT_IMPL_OPERATOR(<=) + NIL_CO3_MP_BIG_INT_IMPL_OPERATOR(>) + NIL_CO3_MP_BIG_INT_IMPL_OPERATOR(>=) + NIL_CO3_MP_BIG_INT_IMPL_OPERATOR(==) + NIL_CO3_MP_BIG_INT_IMPL_OPERATOR(!=) + +#undef NIL_CO3_MP_BIG_INT_IMPL_OPERATOR + + // Arithmetic operations + + NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE + constexpr auto operator+(const T1& a, const T2& b) noexcept { + big_int result; + result = decltype(result)::add(a, b); + return result; + } + NIL_CO3_MP_BIG_INT_INTEGRAL_ASSIGNMENT_TEMPLATE + constexpr auto& operator+=(big_int_t& a, const T& b) noexcept { + a = a + b; + return a; + } + NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE + constexpr auto& operator++(big_int_t& a) noexcept { + a.increment(); + return a; + } + NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE + constexpr auto operator++(big_int_t& a, int) noexcept { + auto copy = a; + ++a; + return copy; + } + NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE + constexpr auto operator+(const big_int_t& a) noexcept { return a; } + + NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE + constexpr auto operator-(const T1& a, const T2& b) noexcept { return T1::subtract(a, b); } + NIL_CO3_MP_BIG_INT_INTEGRAL_ASSIGNMENT_TEMPLATE + constexpr auto& operator-=(big_int_t& a, const T& b) { + a = a - b; + return a; + } + NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE + constexpr auto& operator--(big_int_t& a) noexcept { + a.decrement(); + return a; + } + NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE + constexpr auto operator--(big_int_t& a, int) noexcept { + auto copy = a; + --a; + return copy; + } + + NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE + constexpr big_int_t operator-(big_int_t a) noexcept { + a.negate(); + return a; + } + + NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE + constexpr auto operator*(const T1& a, const T2& b) noexcept { + return std::decay_t::multiply(a, b); + } + NIL_CO3_MP_BIG_INT_INTEGRAL_ASSIGNMENT_TEMPLATE + constexpr auto& operator*=(big_int_t& a, const T& b) noexcept { + a = a * b; + return a; + } + + NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE + constexpr auto operator/(const T1& a, const T2& b) noexcept { + return largest_t::divide(static_cast(a), static_cast(b)); + } + NIL_CO3_MP_BIG_INT_INTEGRAL_ASSIGNMENT_TEMPLATE + constexpr auto& operator/=(big_int_t& a, const T& b) noexcept { + a = a / b; + return a; + } + + NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE + constexpr auto operator%(const T1& a, const T2& b) noexcept { + return largest_t::modulus(static_cast(a), static_cast(b)); + } + NIL_CO3_MP_BIG_INT_INTEGRAL_ASSIGNMENT_TEMPLATE + constexpr auto& operator%=(big_int_t& a, const T& b) { + a = a % b; + return a; + } + + template + constexpr std::size_t hash_value(const big_int& val) noexcept { + std::size_t result = 0; + boost::hash_combine(result, val.abs()); + boost::hash_combine(result, val.negative()); + return result; + } + + // IO + + NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE + std::ostream& operator<<(std::ostream& os, const big_int_t& value) { + os << value.str(); + return os; + } + +#undef NIL_CO3_MP_BIG_INT_UNARY_TEMPLATE +#undef NIL_CO3_MP_BIG_INT_INTEGRAL_ASSIGNMENT_TEMPLATE +#undef NIL_CO3_MP_BIG_INT_INTEGRAL_TEMPLATE + +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp new file mode 100644 index 0000000000..12919046f8 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp @@ -0,0 +1,320 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2021 Aleksei Moskvin +// Copyright (c) 2024 Andrey Nefedov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_mod.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/detail/big_mod/modular_ops.hpp" +#include "nil/crypto3/multiprecision/detail/big_mod/modular_ops_storage.hpp" +#include "nil/crypto3/multiprecision/detail/big_mod/type_traits.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/integer_ops_base.hpp" // IWYU pragma: keep (used for is_zero) + +namespace nil::crypto3::multiprecision { + template + class big_mod_impl { + public: + static constexpr std::size_t Bits = Bits_; + using big_uint_t = big_uint; + using modular_ops_storage_t = modular_ops_storage_t_; + using modular_ops_t = typename modular_ops_storage_t::modular_ops_t; + + // Constructors + + // Only available in compile-time big_mod, initializes to zero + constexpr big_mod_impl() : big_mod_impl(modular_ops_storage_t{}) {} + + // Only available in compile-time big_mod, initializes with the given base + template, int> = 0> + constexpr big_mod_impl(const T& b) : big_mod_impl(b, modular_ops_storage_t{}) {} + + // Only available in runtime big_mod, initializes with the given base and modulus + template && detail::is_integral_v, int> = 0> + constexpr big_mod_impl(const T1& b, const T2& m) + : big_mod_impl(b, modular_ops_storage_t{m}) {} + + // For generic code + + // Avaiable both in compile-time and runtime big_mod, avoids costs of initializing + // modular_ops_storage in runtime case + constexpr big_mod_impl(const modular_ops_storage_t& modular_ops_storage) + : m_modular_ops_storage(modular_ops_storage) { + // NB: m_raw_base is initialized to zero, this is correct for Montgomery form too + } + + // Avaiable both in compile-time and runtime big_mod, avoids costs of initializing + // modular_ops_storage in runtime case + template + constexpr big_mod_impl(const T& b, const modular_ops_storage_t& modular_ops_storage) + : m_modular_ops_storage(modular_ops_storage) { + if (!nil::crypto3::multiprecision::is_zero(b)) { + init_raw_base(m_raw_base, b, ops()); + } + } + + // Components + + constexpr big_uint_t base() const { + big_uint_t result; + ops().adjust_regular(result, m_raw_base); + return result; + } + + constexpr const big_uint_t& mod() const { return ops().mod(); } + + explicit constexpr operator big_uint_t() const { return base(); } + + explicit constexpr operator bool() const { return !is_zero(); } + + // Comparison + +#define NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL(OP_) \ + constexpr bool operator OP_(const big_mod_impl& o) const noexcept { \ + NIL_CO3_MP_ASSERT(ops().compare_eq(o.ops())); \ + return raw_base() OP_ o.raw_base(); \ + } \ + \ + template, int> = 0> \ + constexpr bool operator OP_(const T& o) const noexcept { \ + return base() OP_ o; \ + } \ + \ + template, int> = 0> \ + friend constexpr bool operator OP_(const T& a, const big_mod_impl& b) noexcept { \ + return a OP_ b.base(); \ + } + + NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL(==) + NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL(!=) + // TODO(ioxid) remove these + NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL(<) + NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL(<=) + NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL(>) + NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL(>=) + +#undef NIL_CO3_MP_BIG_MOD_COMPARISON_IMPL + + // String conversion + + constexpr std::string str(std::ios_base::fmtflags flags = std::ios_base::hex | + std::ios_base::showbase | + std::ios_base::uppercase) const { + return base().str(flags); + } + + // Arithmetic operations + + constexpr void negate() { ops().negate(m_raw_base); } + + constexpr auto& operator++() noexcept { + ops().increment(raw_base()); + return *this; + } + + constexpr auto operator++(int) noexcept { + auto copy = *this; + ++*this; + return copy; + } + + constexpr auto operator+() const noexcept { return *this; } + + constexpr auto& operator--() noexcept { + ops().decrement(raw_base()); + return *this; + } + + constexpr auto operator--(int) noexcept { + auto copy = *this; + --*this; + return copy; + } + + constexpr auto operator-() const noexcept { + auto result = *this; + result.negate(); + return result; + } + + private: + template, int> = 0> + static big_uint_t convert_to_raw_base(const S& s, const modular_ops_t& ops) { + if (nil::crypto3::multiprecision::is_zero(s)) { + return big_uint_t{}; + } + big_uint_t result; + init_raw_base(result, s, ops); + return result; + } + + static constexpr const big_uint_t& convert_to_raw_base(const big_mod_impl& s, + const modular_ops_t& /*ops*/) { + return s.raw_base(); + } + + public: +#define NIL_CO3_MP_BIG_MOD_OPERATOR_IMPL(OP_, OP_ASSIGN_, METHOD_) \ + template || detail::is_integral_v, int> = \ + 0> \ + constexpr auto operator OP_(const T& b) const noexcept { \ + if constexpr (detail::is_big_mod_v) { \ + NIL_CO3_MP_ASSERT(ops().compare_eq(b.ops())); \ + } \ + big_mod_impl result = *this; \ + ops().METHOD_(result.raw_base(), convert_to_raw_base(b, ops())); \ + return result; \ + } \ + \ + template, int> = 0> \ + friend constexpr auto operator OP_(const T& a, const big_mod_impl& b) noexcept { \ + big_mod_impl result(b.ops_storage()); \ + result.raw_base() = convert_to_raw_base(a, b.ops()); \ + b.ops().METHOD_(result.raw_base(), b.raw_base()); \ + return result; \ + } \ + \ + template || detail::is_integral_v, int> = \ + 0> \ + constexpr auto& operator OP_ASSIGN_(const T & b) noexcept { \ + if constexpr (detail::is_big_mod_v) { \ + NIL_CO3_MP_ASSERT(ops().compare_eq(b.ops())); \ + } \ + ops().METHOD_(raw_base(), convert_to_raw_base(b, ops())); \ + return *this; \ + } + + NIL_CO3_MP_BIG_MOD_OPERATOR_IMPL(+, +=, add) + NIL_CO3_MP_BIG_MOD_OPERATOR_IMPL(-, -=, subtract) + NIL_CO3_MP_BIG_MOD_OPERATOR_IMPL(*, *=, mul) + +#undef NIL_CO3_MP_BIG_MOD_OPERATOR_IMPL + + // IO + + friend std::ostream& operator<<(std::ostream& os, const big_mod_impl& value) { + os << value.str(os.flags()); + return os; + } + + // Misc ops + + constexpr bool is_zero() const noexcept { + // In barrett form raw_base is the same as base + // In montgomery form raw_base is base multiplied by r, so it is zero iff base is + return raw_base().is_zero(); + } + + // Accessing raw base value. Should only be used internally by multiprecision library. + constexpr auto& raw_base() { return m_raw_base; } + constexpr const auto& raw_base() const { return m_raw_base; } + + constexpr const auto& ops_storage() const { return m_modular_ops_storage; } + constexpr const auto& ops() const { return m_modular_ops_storage.ops(); } + + protected: + modular_ops_storage_t m_modular_ops_storage; + big_uint_t m_raw_base; + }; + + template typename modular_ops_template> + using big_mod_ct_impl = + big_mod_impl::Bits, + detail::modular_ops_storage_ct>; + + template typename modular_ops_template> + using big_mod_rt_impl = + big_mod_impl>; + + // Hash + + template typename modular_ops_template> + constexpr std::size_t hash_value( + const big_mod_ct_impl& val) noexcept { + return hash_value(val.raw_base()); + } + + template typename modular_ops_template> + constexpr std::size_t hash_value( + const big_mod_rt_impl& val) noexcept { + std::size_t result = 0; + boost::hash_combine(result, val.base()); + boost::hash_combine(result, val.mod()); + return result; + } + + // Misc ops + + template, int> = 0> + constexpr bool is_zero(const big_mod_t& a) { + return a.is_zero(); + } + + // Actual big integer modular types + + // Montgomery modular big integer type with compile-time modulus. Modulus should be a static + // big_uint constant. + template + using montgomery_big_mod = big_mod_ct_impl; + + // Montgomery modular big integer type with runtime modulus. + template + using montgomery_big_mod_rt = big_mod_rt_impl; + + // Simple modular big integer type with compile-time modulus. Modulus should be a static + // big_uint constant. Uses barret optimizations. + template + using big_mod = big_mod_ct_impl; + + // Simple modular big integer type with runtime modulus. Uses barret optimizations. + template + using big_mod_rt = big_mod_rt_impl; + + // Modular big integer type with compile-time modulus, which automatically uses montomery form + // whenever possible (i.e. for odd moduli). Modulus should be a static big_uint constant. + template + using auto_big_mod = std::conditional_t, big_mod>; +} // namespace nil::crypto3::multiprecision + +// std::hash specializations + +template typename modular_ops_template> +struct std::hash> { + std::size_t operator()( + const nil::crypto3::multiprecision::big_mod_ct_impl& a) + const noexcept { + return boost::hash< + nil::crypto3::multiprecision::big_mod_ct_impl>{}(a); + } +}; + +template typename modular_ops_template> +struct std::hash> { + std::size_t operator()( + const nil::crypto3::multiprecision::big_mod_rt_impl& a) + const noexcept { + return boost::hash< + nil::crypto3::multiprecision::big_mod_rt_impl>{}(a); + } +}; diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/modular_ops.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/modular_ops.hpp new file mode 100644 index 0000000000..35f8fbf95a --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/modular_ops.hpp @@ -0,0 +1,652 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2021 Aleksei Moskvin +// Copyright (c) 2024 Andrey Nefedov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private + +#include +#include +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" +#include "nil/crypto3/multiprecision/detail/integer_ops_base.hpp" +#include "nil/crypto3/multiprecision/detail/integer_utils.hpp" +#include "nil/crypto3/multiprecision/detail/type_traits.hpp" + +namespace nil::crypto3::multiprecision::detail { + template + constexpr bool check_montgomery_constraints(const big_uint &m) { + // Check m % 2 == 0 + return m.bit_test(0u); + } + + template + struct modular_policy { + using big_uint_t = big_uint; + + static constexpr std::size_t limbs_count = big_uint_t::internal_limb_count; + static constexpr std::size_t limb_bits = big_uint_t::limb_bits; + + static constexpr std::size_t BitsCount_doubled = 2u * Bits; + static constexpr std::size_t BitsCount_doubled_1 = BitsCount_doubled + 1; + static constexpr std::size_t BitsCount_quadruple_1 = 2u * BitsCount_doubled + 1; + static constexpr std::size_t BitsCount_padded_limbs = limbs_count * limb_bits + limb_bits; + static constexpr std::size_t BitsCount_doubled_limbs = 2u * limbs_count * limb_bits; + static constexpr std::size_t BitsCount_doubled_padded_limbs = + BitsCount_doubled_limbs + limb_bits; + + using big_uint_doubled = big_uint; + using big_uint_doubled_1 = big_uint; + using big_uint_quadruple_1 = big_uint; + using big_uint_padded_limbs = big_uint; + using big_uint_doubled_limbs = big_uint; + using big_uint_doubled_padded_limbs = big_uint; + }; + + template + class barrett_modular_ops { + public: + static constexpr std::size_t Bits = Bits_; + using big_uint_t = big_uint; + using policy_type = modular_policy; + + using big_uint_doubled_1 = typename policy_type::big_uint_doubled_1; + using big_uint_quadruple_1 = typename policy_type::big_uint_quadruple_1; + using big_uint_padded_limbs = typename policy_type::big_uint_padded_limbs; + using big_uint_doubled_limbs = typename policy_type::big_uint_doubled_limbs; + using big_uint_doubled_padded_limbs = typename policy_type::big_uint_doubled_padded_limbs; + + static constexpr std::size_t limbs_count = policy_type::limbs_count; + static constexpr std::size_t limb_bits = policy_type::limb_bits; + + constexpr barrett_modular_ops(const big_uint_t &m) : m_mod(m), m_barrett_mu(0u) { + std::size_t bit = 2u * (1u + m_mod.msb()); + m_barrett_mu.bit_set(bit); + + m_barrett_mu /= m_mod; + + // Compute 2^Bits - Modulus, no matter if modulus is even or odd. + big_uint_padded_limbs compliment = 1u, modulus = m_mod; + compliment <<= Bits; + compliment -= modulus; + m_mod_compliment = compliment; + } + + // Common public methods + + constexpr const auto &mod() const { return m_mod; } + + constexpr bool compare_eq(const barrett_modular_ops &o) const { return mod() == o.mod(); } + + template= Bits3, int> = 0> + constexpr void add(big_uint &result, const big_uint &y) const { + NIL_CO3_MP_ASSERT(result < mod() && y < mod()); + + result += y; + // If we overflow and set the carry, we need to subtract the modulus, which is + // the same as adding 2 ^ Bits - Modulus to the remaining part of the number. + // After this we know for sure that the result < Modulus, do not waste time on + // checking again. + if (result.has_carry()) { + result += mod_compliment(); + result.set_carry(false); + } else if (result >= mod()) { + result -= mod(); + } + } + + constexpr void negate(big_uint_t &raw_base) const { + if (!raw_base.is_zero()) { + auto initial_raw_base = raw_base; + raw_base = mod(); + raw_base -= initial_raw_base; + } + } + + constexpr void subtract(big_uint_t &a, const big_uint_t &b) const { + if (a < b) { + auto v = mod(); + v -= b; + a += v; + } else { + a -= b; + } + } + + constexpr void increment(big_uint_t &a) const { + ++a; + if (a == mod()) { + a = 0u; + } + } + + constexpr void decrement(big_uint_t &a) const { + ++a; + if (a == mod()) { + a = 0u; + } + } + + protected: + constexpr const auto &mod_compliment() const { return m_mod_compliment; } + + private: + constexpr const auto &mu() const { return m_barrett_mu; } + + public: + template + constexpr void barrett_reduce(big_uint &result) const { + barrett_reduce(result, result); + } + + template= Bits, int> = 0> + constexpr void barrett_reduce(big_uint &result, big_uint input) const { + if (!input.is_zero()) { + if (input.msb() < 2u * mod().msb() + 1u) { + // TODO(ioxid): too small size here + big_uint_quadruple_1 t1(input); + + t1 *= m_barrett_mu; + std::size_t shift_size = 2u * (1u + mod().msb()); + t1 >>= shift_size; + t1 *= mod(); + + input -= static_cast>(t1); + + if (input >= mod()) { + input -= static_cast>(mod()); + } + } else { + input %= mod(); + } + } + result = input; + } + + // Methods which are customized: mul and exp + + template::Bits >= big_uint_t::Bits, int> = 0> + constexpr void mul(big_uint &result, const big_uint &y) const { + big_uint_doubled_limbs tmp = result; + tmp *= y; + barrett_reduce(result, tmp); + } + + template< + std::size_t Bits2, std::size_t Bits3, typename T, + /// result should fit in the output parameter + std::enable_if_t::Bits >= big_uint_t::Bits && is_unsigned_integer_v, + int> = 0> + constexpr void pow(big_uint &result, const big_uint &a, T exp) const { + NIL_CO3_MP_ASSERT(a < mod()); + + if (is_zero(exp)) { + result = 1u; + return; + } + if (mod() == 1u) { + result = 0u; + return; + } + + big_uint_doubled_limbs base(a), res(1u); + + while (true) { + bool lsb = bit_test(exp, 0u); + exp >>= 1u; + if (lsb) { + res *= base; + barrett_reduce(res); + if (is_zero(exp)) { + break; + } + } + base *= base; + barrett_reduce(base); + } + result = res; + } + + // Adjust to/from modular form + + constexpr void adjust_modular(big_uint_t &result) const { adjust_modular(result, result); } + + template + constexpr void adjust_modular(big_uint_t &result, big_uint input) const { + // TODO(ioxid): optimize for cases where input is 1 + barrett_reduce(result, input); + } + + template= Bits3, int> = 0> + constexpr void adjust_regular(big_uint &result, const big_uint &input) const { + NIL_CO3_MP_ASSERT(input < mod()); + result = input; + } + + protected: + big_uint_t m_mod; + // This is 2^Bits - m_mod, precomputed. + big_uint_t m_mod_compliment; + big_uint_doubled_1 m_barrett_mu; + }; + + template + class montgomery_modular_ops : public barrett_modular_ops { + public: + static constexpr std::size_t Bits = Bits_; + using big_uint_t = big_uint; + using policy_type = modular_policy; + + using big_uint_doubled_1 = typename policy_type::big_uint_doubled_1; + using big_uint_quadruple_1 = typename policy_type::big_uint_quadruple_1; + using big_uint_padded_limbs = typename policy_type::big_uint_padded_limbs; + using big_uint_doubled_limbs = typename policy_type::big_uint_doubled_limbs; + using big_uint_doubled_padded_limbs = typename policy_type::big_uint_doubled_padded_limbs; + + static constexpr std::size_t limbs_count = policy_type::limbs_count; + static constexpr std::size_t limb_bits = policy_type::limb_bits; + + constexpr montgomery_modular_ops(const big_uint_t &m) : barrett_modular_ops(m) { + if (!check_montgomery_constraints(m)) { + throw std::invalid_argument("module not usable with montgomery"); + } + + m_montgomery_p_dash = monty_inverse(this->m_mod.limbs()[0]); + + big_uint_doubled_padded_limbs r; + r.bit_set(2 * this->m_mod.limbs_count() * limb_bits); + this->barrett_reduce(r); + + // Here we are intentionally throwing away half of the bits of r, it's + // correct. + m_montgomery_r2 = static_cast(r); + + m_no_carry_montgomery_mul_allowed = is_applicable_for_no_carry_montgomery_mul(); + + m_one = 1u; + adjust_modular(m_one); + } + + private: + /* + * Compute -input^-1 mod 2^limb_bits. Throws an exception if input + * is even. If input is odd, then input and 2^n are relatively prime + * and an inverse exists. + */ + static constexpr limb_type monty_inverse(const limb_type &a) { + if (a % 2 == 0) { + throw std::invalid_argument("inverse does not exist"); + } + limb_type b = 1; + limb_type r = 0; + + for (std::size_t i = 0; i != limb_bits; ++i) { + const limb_type bi = b % 2; + r >>= 1; + r += bi << (limb_bits - 1); + + b -= a * bi; + b >>= 1; + } + + // Now invert in addition space + r = (~static_cast(0u) - r) + 1; + + return r; + } + + constexpr const auto &r2() const { return m_montgomery_r2; } + constexpr const auto &p_dash() const { return m_montgomery_p_dash; } + + public: + template= Bits, int> = 0> + constexpr void montgomery_reduce(big_uint &result) const { + big_uint_doubled_padded_limbs accum(result); + big_uint_doubled_padded_limbs prod; + + for (std::size_t i = 0; i < this->mod().limbs_count(); ++i) { + limb_type limb_accum = accum.limbs()[i]; + double_limb_type mult_res = limb_accum * static_cast(p_dash()); + limb_type mult_res_limb = static_cast(mult_res); + + prod = this->mod(); + prod *= mult_res_limb; + prod <<= i * limb_bits; + accum += prod; + } + accum >>= this->mod().limbs_count() * limb_bits; + + if (accum >= this->mod()) { + accum -= this->mod(); + } + + result = accum; + } + + // Delegates Montgomery multiplication to one of corresponding algorithms. + template + constexpr void mul(big_uint &result, const big_uint &y) const { + if (m_no_carry_montgomery_mul_allowed) { + montgomery_mul_no_carry_impl(result, y); + } else { + montgomery_mul_CIOS_impl(result, y); + } + } + + private: + // Tests if the faster implementation of Montgomery multiplication is possible. + constexpr bool is_applicable_for_no_carry_montgomery_mul() const { + // Check that + // 1. The most significant bit of modulus is non-zero, meaning we have at least + // 1 additional bit in the number. E.g. if modulus is 255 bits, then we have 1 + // additional "unused" bit in the number. + // 2. Some other bit in modulus is 0. + // 3. The number has < 12 limbs. + return this->mod().limbs_count() < 12 && (Bits % sizeof(limb_type) != 0) && + this->mod_compliment() != limb_type(1u); + } + + public: + // Non-carry implementation of Montgomery multiplication. + // Implemented from pseudo-code at + // "https://hackmd.io/@gnark/modular_multiplication". + template + constexpr void montgomery_mul_no_carry_impl(big_uint &c, + const big_uint &b) const { + NIL_CO3_MP_ASSERT(c < this->mod() && b < this->mod()); + NIL_CO3_MP_ASSERT(is_applicable_for_no_carry_montgomery_mul()); + + // Obtain number of limbs + constexpr int N = big_uint::internal_limb_count; + + const big_uint a(c); // Copy the first argument, as the implemented + // algorithm doesn't work in-place. + + // We cannot write directly to 'c', because b may be equal to c, and by changing + // the value of 'c' we will change 'b' as well. + big_uint result = limb_type(0u); + + // Prepare temporary variables + limb_type A(0u), C(0u); + double_limb_type tmp(0u); + limb_type dummy(0u); + + auto *a_limbs = a.limbs(); + auto *b_limbs = b.limbs(); + auto *result_limbs = result.limbs(); + auto *m_mod_limbs = this->mod().limbs(); + + for (int i = 0; i < N; ++i) { + // "(A,t[0]) := t[0] + a[0]*b[i]" + tmp = a_limbs[0]; + tmp *= b_limbs[i]; + tmp += result_limbs[0]; + dbl_limb_to_limbs(tmp, A, result_limbs[0]); + + // "m := t[0]*q'[0] mod W" + tmp = result_limbs[0]; + // tmp *= q.limbs()[0]; + tmp *= p_dash(); + // tmp = -tmp; + // Note that m is a shorter integer, and we are taking the last bits of tmp. + limb_type m = tmp; + + // "(C,_) := t[0] + m*q[0]" + tmp = m; + tmp *= m_mod_limbs[0]; + tmp += result_limbs[0]; + dbl_limb_to_limbs(tmp, C, dummy); + + // The lower loop is unrolled. We want to do this for every 3, because + // normally mod_size == 4. + std::size_t j = 1; + +#define NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(X) \ + /* "(A,t[X]) := t[X] + a[X]*b[i] + A" */ \ + tmp = a_limbs[X]; \ + tmp *= b_limbs[i]; \ + tmp += result_limbs[X]; \ + tmp += A; \ + dbl_limb_to_limbs(tmp, A, result_limbs[X]); \ + \ + /* "(C,t[X-1]) := t[X] + m*q[X] + C" */ \ + tmp = m; \ + tmp *= m_mod_limbs[X]; \ + tmp += result_limbs[X]; \ + tmp += C; \ + dbl_limb_to_limbs(tmp, C, result_limbs[(X) - 1]); + + for (; j + 5 <= N; j += 5) { + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j); + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j + 1); + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j + 2); + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j + 3); + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j + 4); + } + + for (; j + 3 <= N; j += 3) { + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j); + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j + 1); + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j + 2); + } + + for (; j < N; ++j) { + NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY(j); + } + + // "t[N-1] = C + A" + result_limbs[N - 1] = C + A; + } + + if (result >= this->mod()) { + result -= this->mod(); + } + c = result; + } +#undef NIL_CO3_MP_MONTGOMERY_MUL_NO_CARRY_LOOP_BODY + + template + constexpr void montgomery_mul_CIOS_impl(big_uint &result, + const big_uint &y) const { + NIL_CO3_MP_ASSERT(result < this->mod() && y < this->mod()); + + big_uint_t A(limb_type(0u)); + const std::size_t mod_size = this->mod().limbs_count(); + auto *mod_limbs = this->mod().limbs(); + auto mod_last_limb = static_cast(mod_limbs[0]); + auto y_last_limb = y.limbs()[0]; + auto *y_limbs = y.limbs(); + auto *x_limbs = result.limbs(); + auto *A_limbs = A.limbs(); + limb_type carry = 0; // This is the highest limb of 'A'. + + limb_type x_i = 0; + limb_type A_0 = 0; + limb_type u_i = 0; + + // A += x[i] * y + u_i * m followed by a 1 limb-shift to the right + limb_type k = 0; + limb_type k2 = 0; + + double_limb_type z = 0; + double_limb_type z2 = 0; + + for (std::size_t i = 0; i < mod_size; ++i) { + x_i = x_limbs[i]; + A_0 = A_limbs[0]; + u_i = (A_0 + x_i * y_last_limb) * p_dash(); + + // A += x[i] * y + u_i * m followed by a 1 limb-shift to the right + k = 0; + k2 = 0; + + z = static_cast(y_last_limb) * + static_cast(x_i) + + A_0 + k; + z2 = mod_last_limb * static_cast(u_i) + + static_cast(z) + k2; + k = static_cast(z >> std::numeric_limits::digits); + k2 = static_cast(z2 >> std::numeric_limits::digits); + + std::size_t j = 1; + + // The lower loop is unrolled. We want to do this for every 3, because + // normally mod_size == 4. + double_limb_type t = 0, t2 = 0; + +#define NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(X) \ + t = static_cast(y_limbs[X]) * static_cast(x_i) + \ + A_limbs[X] + k; \ + t2 = static_cast(mod_limbs[X]) * static_cast(u_i) + \ + static_cast(t) + k2; \ + A_limbs[(X) - 1] = static_cast(t2); \ + k = static_cast(t >> std::numeric_limits::digits); \ + k2 = static_cast(t2 >> std::numeric_limits::digits); + + for (; j + 5 <= mod_size; j += 5) { + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j); + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j + 1); + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j + 2); + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j + 3); + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j + 4); + } + + for (; j + 3 <= mod_size; j += 3) { + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j); + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j + 1); + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j + 2); + } + + for (; j < mod_size; ++j) { + NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY(j); + } + + double_limb_type tmp = static_cast(carry) + k + k2; + A_limbs[mod_size - 1] = static_cast(tmp); + carry = static_cast(tmp >> std::numeric_limits::digits); + } + + if (carry) { + // The value of A is actually A + 2 ^ Bits, so remove that 2 ^ Bits. + A += this->mod_compliment(); + } else if (A >= this->mod()) { + A -= this->mod(); + } + + result = A; + } +#undef NIL_CO3_MP_MONTGOMERY_MUL_CIOS_LOOP_BODY + + template< + std::size_t Bits2, std::size_t Bits3, typename T, + /// result should fit in the output parameter + std::enable_if_t::Bits >= big_uint_t::Bits && is_unsigned_integer_v, + int> = 0> + constexpr void pow(big_uint &result, const big_uint &a, T exp) const { + /// input parameter should be less than modulus + NIL_CO3_MP_ASSERT(a < this->mod()); + + big_uint_t R_mod_m = m_one; + + big_uint_t base(a); + + if (is_zero(exp)) { + result = m_one; + return; + } + if (this->mod() == 1u) { + result = 0u; + return; + } + + while (true) { + bool lsb = bit_test(exp, 0u); + exp >>= 1u; + if (lsb) { + mul(R_mod_m, base); + if (is_zero(exp)) { + break; + } + } + mul(base, base); + } + result = R_mod_m; + } + + // Adjust to/from modular form + + constexpr void adjust_modular(big_uint_t &result) const { adjust_modular(result, result); } + + template + constexpr void adjust_modular(big_uint_t &result, const big_uint &input) const { + // TODO(ioxid): optimize for cases where input is 0 or 1 + big_uint_doubled_limbs tmp; + this->barrett_reduce(tmp, input); + tmp *= r2(); + montgomery_reduce(tmp); + result = tmp; + } + + template= Bits3, int> = 0> + constexpr void adjust_regular(big_uint &result, const big_uint &input) const { + result = input; + montgomery_reduce(result); + } + + protected: + big_uint_t m_montgomery_r2; + limb_type m_montgomery_p_dash; + big_uint_t m_one; + + // If set, no-carry optimization is allowed. Is set to + // is_applicable_for_no_carry_montgomery_mul() after initialization. + bool m_no_carry_montgomery_mul_allowed; + }; + + template + constexpr void init_raw_base(big_uint &raw_base, const big_uint &b, + const modular_ops_t &ops) { + ops.adjust_modular(raw_base, b); + } + + template && std::is_signed_v, int> = 0> + constexpr void init_raw_base(big_uint &raw_base, SI b, const modular_ops_t &ops) { + ops.adjust_modular(raw_base, detail::as_big_uint(detail::unsigned_abs(b))); + if (b < 0) { + ops.negate(raw_base); + } + } + + template && std::is_unsigned_v, int> = 0> + constexpr void init_raw_base(big_uint &raw_base, UI b, const modular_ops_t &ops) { + ops.adjust_modular(raw_base, detail::as_big_uint(b)); + } +} // namespace nil::crypto3::multiprecision::detail diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/modular_ops_storage.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/modular_ops_storage.hpp new file mode 100644 index 0000000000..5b80f5df3e --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/modular_ops_storage.hpp @@ -0,0 +1,55 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2021 Aleksei Moskvin +// Copyright (c) 2024 Andrey Nefedov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" + +namespace nil::crypto3::multiprecision::detail { + // Compile-time storage for modular arithmetic operations. Stores them in a constexpr variable. + template typename modular_ops_template> + class modular_ops_storage_ct { + public: + using big_uint_t = std::decay_t; + static constexpr std::size_t Bits = big_uint_t::Bits; + using modular_ops_t = modular_ops_template; + + static_assert(Bits == Modulus.msb() + 1, "modulus bit width should match used precision"); + + constexpr modular_ops_storage_ct() {} + + static constexpr const modular_ops_t &ops() { return m_modular_ops; } + + private: + static constexpr modular_ops_t m_modular_ops{Modulus}; + }; + + // Runtime storage for modular arithmetic operations. Stores them in a plain variable + // constructed at runtime. + template typename modular_ops_template> + class modular_ops_storage_rt { + public: + using big_uint_t = big_uint; + using modular_ops_t = modular_ops_template; + + constexpr modular_ops_storage_rt(const big_uint_t &input) : m_modular_ops(input) {} + + constexpr const modular_ops_t &ops() const { return m_modular_ops; } + + private: + modular_ops_t m_modular_ops; + }; +} // namespace nil::crypto3::multiprecision::detail diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/inverse.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/inverse.hpp new file mode 100644 index 0000000000..4ac66b42c6 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/inverse.hpp @@ -0,0 +1,26 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2019-2021 Aleksei Moskvin +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2024 Andrey Nefedov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_mod.hpp" + +#include + +#include "nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/ops/gcd_inverse.hpp" + +namespace nil::crypto3::multiprecision { + template, int> = 0> + constexpr big_mod_t inverse_extended_euclidean_algorithm(const big_mod_t &modular) { + return big_mod_t(inverse_extended_euclidean_algorithm(modular.base(), modular.mod()), modular.ops_storage()); + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/pow.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/pow.hpp new file mode 100644 index 0000000000..31a9aaeb62 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/pow.hpp @@ -0,0 +1,44 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2019-2021 Aleksei Moskvin +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2024 Andrey Nefedov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_mod.hpp" + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_mod/ops/inverse.hpp" +#include "nil/crypto3/multiprecision/detail/integer_utils.hpp" +#include "nil/crypto3/multiprecision/detail/type_traits.hpp" + +namespace nil::crypto3::multiprecision { + template && detail::is_unsigned_integer_v, + int> = 0> + constexpr big_mod_t pow(const big_mod_t &b, const T &e) { + big_mod_t result(b.ops_storage()); + result.ops().pow(result.raw_base(), b.raw_base(), e); + return result; + } + + template && detail::is_integer_v && + std::numeric_limits::is_signed, + int> = 0> + constexpr big_mod_t pow(const big_mod_t &b, const T &e) { + if (e < 0) { + return pow(inverse_extended_euclidean_algorithm(b), detail::unsigned_abs(e)); + } + return pow(b, static_cast>(e)); + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/ressol.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/ressol.hpp new file mode 100644 index 0000000000..0465748016 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/ops/ressol.hpp @@ -0,0 +1,26 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2019-2021 Aleksei Moskvin +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2024 Andrey Nefedov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_mod.hpp" + +#include + +#include "nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/ops/ressol.hpp" + +namespace nil::crypto3::multiprecision { + template, int> = 0> + constexpr big_mod_t ressol(const big_mod_t &b) { + return big_mod_t(ressol(b.base(), b.mod()), b.ops_storage()); + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/type_traits.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/type_traits.hpp new file mode 100644 index 0000000000..07e3354429 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_mod/type_traits.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" + +namespace nil::crypto3::multiprecision { + template + class big_mod_impl; + + namespace detail { + template + constexpr bool is_big_mod_v = false; + + template + constexpr bool is_big_mod_v> = true; + + template + constexpr bool is_modular_integral_v = + std::is_integral_v || is_big_uint_v || is_big_mod_v; + + template, int> = 0> + constexpr std::size_t get_bits() { + return T::Bits; + } + } // namespace detail +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/arithmetic.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/arithmetic.hpp new file mode 100644 index 0000000000..bb89da201c --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/arithmetic.hpp @@ -0,0 +1,746 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/type_traits.hpp" +#include "nil/crypto3/multiprecision/detail/integer_utils.hpp" +#include "nil/crypto3/multiprecision/detail/intel_intrinsics.hpp" + +namespace nil::crypto3::multiprecision { + template + class big_uint; + + namespace detail { + + // Addition/subtraction + + template + constexpr void add_constexpr_unsigned(big_uint& result, const big_uint& a, + const big_uint& b) noexcept { + static_assert(Bits1 >= Bits2 && Bits1 >= Bits3, "invalid argument size"); + // + // This is the generic, C++ only version of addition. + // It's also used for all constexpr branches, hence the name. + // + double_limb_type carry = 0; + std::size_t as = a.used_limbs(); + std::size_t bs = b.used_limbs(); + auto [m, x] = std::minmax(as, bs); + if (x == 1) { + double_limb_type v = static_cast(*a.limbs()) + + static_cast(*b.limbs()); + if (result.limbs_count() == 1) { + double_limb_type mask = big_uint::upper_limb_mask; + if (v & ~mask) { + v &= mask; + result.set_carry(true); + } + } + result = v; + return; + } + result.zero_after(x); + + const_limb_pointer pa = a.limbs(); + const_limb_pointer pb = b.limbs(); + limb_pointer pr = result.limbs(); + limb_pointer pr_end = pr + m; + + if (as < bs) { + std::swap(pa, pb); + } + + // First where a and b overlap: + while (pr != pr_end) { + carry += static_cast(*pa) + static_cast(*pb); + *pr = static_cast(carry); + carry >>= limb_bits; + ++pr, ++pa, ++pb; + } + pr_end += x - m; + + // Now where only a has digits: + while (pr != pr_end) { + if (!carry) { + if (pa != pr) { + std::copy(pa, pa + (pr_end - pr), pr); + } + break; + } + carry += static_cast(*pa); + *pr = static_cast(carry); + carry >>= limb_bits; + ++pr, ++pa; + } + + if (carry) { + if (result.limbs_count() > x) { + result.limbs()[x] = static_cast(1u); + carry = 0; + } + } + + if constexpr (Bits1 % limb_bits == 0) { + result.set_carry(carry); + } else { + limb_type mask = big_uint::upper_limb_mask; + // If we have set any bit above "Bits", then we have a carry. + if (result.limbs()[result.limbs_count() - 1] & ~mask) { + result.limbs()[result.limbs_count() - 1] &= mask; + result.set_carry(true); + } + } + } + + // + // Core subtraction routine: + // + template + constexpr void subtract_constexpr_unsigned(big_uint& result, + const big_uint& a, + const big_uint& b) noexcept { + static_assert(Bits1 >= Bits2 && Bits1 >= Bits3, "invalid argument size"); + // + // This is the generic, C++ only version of subtraction. + // It's also used for all constexpr branches, hence the name. + // + double_limb_type borrow = 0; + std::size_t as = a.used_limbs(); + std::size_t bs = b.used_limbs(); + auto [m, x] = std::minmax(as, bs); + // + // special cases for small limb counts: + // + if (x == 1) { + bool s = false; + limb_type al = *a.limbs(); + limb_type bl = *b.limbs(); + if (bl > al) { + std::swap(al, bl); + s = true; + } + result = al - bl; + if (s) { + result.negate(); + } + return; + } + int c = a.compare(b); + result.zero_after(x); + const_limb_pointer pa = a.limbs(); + const_limb_pointer pb = b.limbs(); + limb_pointer pr = result.limbs(); + bool swapped = false; + if (c < 0) { + std::swap(pa, pb); + swapped = true; + } else if (c == 0) { + result = static_cast(0u); + return; + } + + std::size_t i = 0; + // First where a and b overlap: + while (i < m) { + borrow = static_cast(pa[i]) - + static_cast(pb[i]) - borrow; + pr[i] = static_cast(borrow); + borrow = (borrow >> limb_bits) & 1u; + ++i; + } + // Now where only a has digits, only as long as we've borrowed: + while (borrow && (i < x)) { + borrow = static_cast(pa[i]) - borrow; + pr[i] = static_cast(borrow); + borrow = (borrow >> limb_bits) & 1u; + ++i; + } + // Any remaining digits are the same as those in pa: + if ((x != i) && (pa != pr)) { + std::copy(pa + i, pa + x, pr + i); + } + NIL_CO3_MP_ASSERT(0 == borrow); + + // + // We may have lost digits, if so update limb usage count: + // + result.normalize(); + if (swapped) { + result.negate(); + } + } + +#ifdef NIL_CO3_MP_HAS_IMMINTRIN_H + // + // This is the key addition routine: + // + // + // This optimization is limited to: GCC, LLVM, ICC (Intel), MSVC for x86_64 and i386. + // If your architecture and compiler supports ADC intrinsic, please file a bug. + // + // As of May, 2020 major compilers don't recognize carry chain though adc + // intrinsics are used to hint compilers to use ADC and still compilers don't + // unroll the loop efficiently (except LLVM) so manual unrolling is done. + // + // Also note that these intrinsics were only introduced by Intel as part of the + // ADX processor extensions, even though the addc instruction has been available + // for basically all x86 processors. That means gcc-9, clang-9, msvc-14.2 and up + // are required to support these intrinsics. + // + template + constexpr void add_unsigned(big_uint& result, const big_uint& a, + const big_uint& b) noexcept { + static_assert(Bits1 >= Bits2 && Bits1 >= Bits3, "invalid argument size"); + if (std::is_constant_evaluated()) { + add_constexpr_unsigned(result, a, b); + } else { + std::size_t as = a.used_limbs(); + std::size_t bs = b.used_limbs(); + auto [m, x] = std::minmax(as, bs); + + if (x == 1) { + double_limb_type v = static_cast(*a.limbs()) + + static_cast(*b.limbs()); + if (result.limbs_count() == 1) { + double_limb_type mask = big_uint::upper_limb_mask; + if (v & ~mask) { + v &= mask; + result.set_carry(true); + } + } + result = v; + return; + } + const_limb_pointer pa = a.limbs(); + const_limb_pointer pb = b.limbs(); + limb_pointer pr = result.limbs(); + + if (as < bs) { + std::swap(pa, pb); + } + + std::size_t i = 0; + unsigned char carry = 0; + for (; i + 4 <= m; i += 4) { + carry = detail::addcarry_limb(carry, pa[i + 0], pb[i + 0], pr + i); + carry = detail::addcarry_limb(carry, pa[i + 1], pb[i + 1], pr + i + 1); + carry = detail::addcarry_limb(carry, pa[i + 2], pb[i + 2], pr + i + 2); + carry = detail::addcarry_limb(carry, pa[i + 3], pb[i + 3], pr + i + 3); + } + for (; i < m; ++i) { + carry = detail::addcarry_limb(carry, pa[i], pb[i], pr + i); + } + for (; i < x && carry; ++i) { + // We know carry is 1, so we just need to increment pa[i] (ie add a literal 1) + // and capture the carry: + carry = detail::addcarry_limb(0, pa[i], 1, pr + i); + } + if (i == x && carry) { + if (big_uint::internal_limb_count > x) { + result.limbs()[x] = static_cast(1u); + } + } else if ((x != i) && (pa != pr)) { + // Copy remaining digits only if we need to: + std::copy(pa + i, pa + x, pr + i); + } + + if constexpr (Bits1 % limb_bits == 0) { + result.set_carry(carry); + } else { + limb_type mask = big_uint::upper_limb_mask; + // If we have set any bit above "Bits", then we have a carry. + if (result.limbs()[result.limbs_count() - 1] & ~mask) { + result.limbs()[result.limbs_count() - 1] &= mask; + result.set_carry(true); + } + } + } + } + + template + constexpr void subtract_unsigned(big_uint& result, const big_uint& a, + const big_uint& b) noexcept { + static_assert(Bits1 >= Bits2 && Bits1 >= Bits3, "invalid argument size"); + + if (std::is_constant_evaluated()) { + subtract_constexpr_unsigned(result, a, b); + } else { + std::size_t as = a.used_limbs(); + std::size_t bs = b.used_limbs(); + auto [m, x] = std::minmax(as, bs); + // + // special cases for small limb counts: + // + if (x == 1) { + bool s = false; + limb_type al = *a.limbs(); + limb_type bl = *b.limbs(); + if (bl > al) { + std::swap(al, bl); + s = true; + } + result = al - bl; + if (s) { + result.negate(); + } + return; + } + int c = a.compare(b); + result.zero_after(x); + const_limb_pointer pa = a.limbs(); + const_limb_pointer pb = b.limbs(); + limb_pointer pr = result.limbs(); + bool swapped = false; + if (c < 0) { + std::swap(pa, pb); + swapped = true; + } else if (c == 0) { + result = static_cast(0u); + return; + } + + std::size_t i = 0; + unsigned char borrow = 0; + // First where a and b overlap: + for (; i + 4 <= m; i += 4) { + borrow = detail::subborrow_limb(borrow, pa[i], pb[i], pr + i); + borrow = detail::subborrow_limb(borrow, pa[i + 1], pb[i + 1], pr + i + 1); + borrow = detail::subborrow_limb(borrow, pa[i + 2], pb[i + 2], pr + i + 2); + borrow = detail::subborrow_limb(borrow, pa[i + 3], pb[i + 3], pr + i + 3); + } + for (; i < m; ++i) { + borrow = detail::subborrow_limb(borrow, pa[i], pb[i], pr + i); + } + // Now where only a has digits, only as long as we've borrowed: + while (borrow && (i < x)) { + borrow = detail::subborrow_limb(borrow, pa[i], 0, pr + i); + ++i; + } + // Any remaining digits are the same as those in pa: + if ((x != i) && (pa != pr)) { + std::copy(pa + i, pa + x, pr + i); + } + NIL_CO3_MP_ASSERT(0 == borrow); + result.normalize(); + if (swapped) { + result.negate(); + } + } // constexpr. + } + +#else + + template + constexpr void add_unsigned(big_uint& result, const big_uint& a, + const big_uint& b) noexcept { + add_constexpr_unsigned(result, a, b); + } + + template + constexpr void subtract_unsigned(big_uint& result, const big_uint& a, + const big_uint& b) noexcept { + subtract_constexpr_unsigned(result, a, b); + } + +#endif + + template + constexpr void add_unsigned(big_uint& result, const big_uint& a, + const limb_type& b) noexcept { + static_assert(Bits1 >= Bits2, "invalid argument size"); + + double_limb_type carry = b; + limb_pointer pr = result.limbs(); + const_limb_pointer pa = a.limbs(); + std::size_t i = 0; + // Addition with carry until we either run out of digits or carry is zero: + for (; carry && (i < result.limbs_count()); ++i) { + carry += static_cast(pa[i]); + pr[i] = static_cast(carry); + carry >>= limb_bits; + } + // Just copy any remaining digits: + if (&a != &result) { + std::copy(pa + i, pa + a.limbs_count(), pr + i); + } + + if (carry) { + if (result.limbs_count() > a.limbs_count()) { + result.limbs()[a.limbs_count()] = static_cast(carry); + carry = 0; + } + } + + if constexpr (Bits1 % limb_bits == 0) { + result.set_carry(carry); + } else { + limb_type mask = big_uint::upper_limb_mask; + // If we have set any bit above "Bits", then we have a carry. + if (pr[result.limbs_count() - 1] & ~mask) { + pr[result.limbs_count() - 1] &= mask; + result.set_carry(true); + } + } + } + + // + // And again to subtract a single limb: + // + template + constexpr void subtract_unsigned(big_uint& result, const big_uint& a, + const limb_type& b) noexcept { + static_assert(Bits1 >= Bits2, "invalid argument size"); + + // Subtract one limb. + std::size_t as = a.used_limbs(); + result.zero_after(as); + constexpr double_limb_type borrow = static_cast(max_limb_value) + 1; + limb_pointer pr = result.limbs(); + const_limb_pointer pa = a.limbs(); + if (*pa >= b) { + *pr = *pa - b; + if (&result != &a) { + std::copy(pa + 1, pa + as, pr + 1); + } + } else if (as == 1) { + *pr = b - *pa; + result.negate(); + } else { + *pr = static_cast((borrow + *pa) - b); + std::size_t i = 1; + while (!pa[i]) { + pr[i] = max_limb_value; + ++i; + } + pr[i] = pa[i] - 1; + if (&result != &a) { + ++i; + std::copy(pa + i, pa + as, pr + i); + } + result.normalize(); + } + } + + template + constexpr void add(big_uint& result, const big_uint& a, const T& b) noexcept { + static_assert(detail::is_integral_v); + if constexpr (std::is_signed_v) { + auto b_abs = unsigned_abs(b); + if (b < 0) { + subtract_unsigned(result, a, detail::as_limb_type_or_big_uint(b_abs)); + } + add_unsigned(result, a, detail::as_limb_type_or_big_uint(b_abs)); + } else { + add_unsigned(result, a, detail::as_limb_type_or_big_uint(b)); + } + } + + template + constexpr void subtract(big_uint& result, const big_uint& a, + const T& b) noexcept { + static_assert(detail::is_integral_v); + if constexpr (std::is_signed_v) { + auto b_abs = unsigned_abs(b); + if (b < 0) { + detail::add_unsigned(result, a, detail::as_limb_type_or_big_uint(b_abs)); + } else { + detail::subtract_unsigned(result, a, detail::as_limb_type_or_big_uint(b_abs)); + } + } else { + detail::subtract_unsigned(result, a, detail::as_limb_type_or_big_uint(b)); + } + } + + // Modulus/divide + + // This should be called only for creation of Montgomery and + // Barett params, not during "normal" execution, so we do not + // care about the execution speed. + + template + constexpr void divide(big_uint* div, const big_uint& x, + const big_uint& y, big_uint& rem) { + /* + Very simple long division. + Start by setting the remainder equal to x, and the + result equal to 0. Then in each loop we calculate our + "best guess" for how many times y divides into rem, + add our guess to the result, and subtract guess*y + from the remainder rem. One wrinkle is that the remainder + may go negative, in which case we subtract the current guess + from the result rather than adding. The value of the guess + is determined by dividing the most-significant-limb of the + current remainder by the most-significant-limb of y. + + Note that there are more efficient algorithms than this + available, in particular see Knuth Vol 2. However for small + numbers of limbs this generally outperforms the alternatives + and avoids the normalisation step which would require extra + storage. + */ + + if (y.is_zero()) { + throw std::overflow_error("integer division by zero"); + } + + const_limb_pointer px = x.limbs(); + const_limb_pointer py = y.limbs(); + + if (x.is_zero()) { + // x is zero, so is the result: + rem = x; + if (div) { + *div = x; + } + return; + } + + rem = x; + std::size_t rem_order = rem.order(); + std::size_t y_order = y.order(); + if (div) { + *div = 0u; + } + // + // Check if the remainder is already less than the divisor, + // if so we already have the result. Note we try and avoid + // a full compare if we can: + // + if (rem < y) { + return; + } + + big_uint t; + bool rem_neg = false; + + // + // See if we can short-circuit long division, and use basic + // arithmetic instead: + // + if (rem_order == 0) { + if (div) { + *div = px[0] / py[0]; + } + rem = px[0] % py[0]; + return; + } + if (rem_order == 1) { + double_limb_type a = (static_cast(px[1]) << limb_bits) | px[0]; + double_limb_type b = + y_order ? (static_cast(py[1]) << limb_bits) | py[0] : py[0]; + if (div) { + *div = a / b; + } + rem = a % b; + return; + } + const_limb_pointer prem = rem.limbs(); + // This is initialised just to keep the compiler from + // emitting useless warnings later on: + limb_pointer pdiv = limb_pointer(); + if (div) { + pdiv = div->limbs(); + for (std::size_t i = 1; i < 1 + rem_order - y_order; ++i) { + pdiv[i] = 0; + } + } + bool first_pass = true; + + do { + // + // Calculate our best guess for how many times y divides + // into rem: + // + limb_type guess = 1; + if (rem_order > 0 && prem[rem_order] <= py[y_order]) { + double_limb_type a = + (static_cast(prem[rem_order]) << limb_bits) | + prem[rem_order - 1]; + double_limb_type b = py[y_order]; + double_limb_type v = a / b; + if (v <= max_limb_value) { + guess = static_cast(v); + --rem_order; + } + } else if (rem_order == 0) { + guess = prem[0] / py[y_order]; + } else { + double_limb_type a = + (static_cast(prem[rem_order]) << limb_bits) | + prem[rem_order - 1]; + double_limb_type b = + (y_order > 0) ? (static_cast(py[y_order]) << limb_bits) | + py[y_order - 1] + : (static_cast(py[y_order]) << limb_bits); + NIL_CO3_MP_ASSERT(b); + double_limb_type v = a / b; + guess = static_cast(v); + } + NIL_CO3_MP_ASSERT(guess); // If the guess ever gets to + // zero we go on forever.... + // + // Update result: + // + std::size_t shift = rem_order - y_order; + if (div) { + if (rem_neg) { + if (pdiv[shift] > guess) { + pdiv[shift] -= guess; + } else { + t = 0u; + t.limbs()[shift] = guess; + *div -= t; + } + } else if (max_limb_value - pdiv[shift] > guess) { + pdiv[shift] += guess; + } else { + t = 0u; + t.limbs()[shift] = guess; + *div += t; + } + } + // + // Calculate guess * y, we use a fused mutiply-shift + // O(N) for this rather than a full O(N^2) multiply: + // + double_limb_type carry = 0; + // t.resize(y.limbs_count() + shift + 1, y.limbs_count() + // + shift); bool truncated_t = (t.limbs_count() != + // y.limbs_count() + shift + 1); + const bool truncated_t = y_order + shift + 2 > big_uint::internal_limb_count; + t = 0u; + limb_pointer pt = t.limbs(); + for (std::size_t i = 0; i < y_order + 1; ++i) { + carry += + static_cast(py[i]) * static_cast(guess); + pt[i + shift] = static_cast(carry); + carry >>= limb_bits; + } + if (carry && !truncated_t) { + pt[y_order + shift + 1] = static_cast(carry); + } else if (!truncated_t) { + // t.resize(t.limbs_count() - 1, t.limbs_count() - + // 1); + } + // + // Update rem in a way that won't actually produce a + // negative result in case the argument types are + // unsigned: + // + if (truncated_t && carry) { + NIL_CO3_MP_ASSERT_MSG(false, "how can this even happen"); + // We need to calculate 2^n + t - rem + // where n is the number of bits in this type. + // Simplest way is to get 2^n - rem by complementing + // and incrementing rem, then add t to it. + for (std::size_t i = 0; i <= rem_order; ++i) { + rem.limbs()[i] = ~prem[i]; + } + rem.normalize(); + ++rem; + rem += t; + rem_neg = !rem_neg; + } else if (rem > t) { + rem -= t; + } else { + std::swap(rem, t); + rem -= t; + prem = rem.limbs(); + rem_neg = !rem_neg; + } + // + // First time through we need to strip any leading zero, + // otherwise the termination condition goes belly-up: + // + // if (div && first_pass) { + // first_pass = false; + // // while (pdiv[div->limbs_count() - 1] == 0) + // // div->resize(div->limbs_count() - 1, + // div->limbs_count() - 1); + // } + // + // Update rem_order: + // + rem_order = rem.order(); + } + // Termination condition is really just a check that rem > + // y, but with a common short-circuit case handled first: + while ((rem_order >= y_order) && ((rem_order > y_order) || (rem >= y))); + + // + // We now just have to normalise the result: + // + if (rem_neg && !rem.is_zero()) { + // We have one too many in the result: + if (div) { + --*div; + } + rem = y - rem; + } + + // remainder must be less than the divisor or our code has + // failed + NIL_CO3_MP_ASSERT(rem < y); + } + + // Multiplication + + // These should be called only for creation of Montgomery and Barett + // params, calculation of inverse element and montgomery_reduce. Since these functions + // are relatively slow and are not called very often, we will not optimize them. We do + // NOT care about the execution speed. + + // Caller is responsible for the result to fit in Bits bits, we will NOT throw!!! + + template + constexpr void multiply(big_uint& final_result, const big_uint& a, + const T& b_orig) noexcept { + auto b = detail::as_big_uint(b_orig); + big_uint result; + std::size_t as = a.used_limbs(); + std::size_t bs = b.used_limbs(); + const_limb_pointer pa = a.limbs(); + const_limb_pointer pb = b.limbs(); + limb_pointer pr = result.limbs(); + for (std::size_t i = 0; i < result.limbs_count(); ++i) { + pr[i] = 0; + } + + double_limb_type carry = 0; + for (std::size_t i = 0; i < as; ++i) { + NIL_CO3_MP_ASSERT(result.limbs_count() > i); + std::size_t inner_limit = (std::min)(result.limbs_count() - i, bs); + std::size_t j = 0; + for (; j < inner_limit; ++j) { + NIL_CO3_MP_ASSERT(i + j < result.limbs_count()); + carry += + static_cast(pa[i]) * static_cast(pb[j]); + NIL_CO3_MP_ASSERT( + !std::numeric_limits::is_specialized || + ((std::numeric_limits::max)() - carry >= pr[i + j])); + carry += pr[i + j]; + pr[i + j] = static_cast(carry); + carry >>= limb_bits; + NIL_CO3_MP_ASSERT(carry <= max_limb_value); + } + if (carry) { + NIL_CO3_MP_ASSERT(result.limbs_count() > i + j); + if (i + j < result.limbs_count()) { + pr[i + j] = static_cast(carry); + } + } + carry = 0; + } + result.normalize(); + final_result = result; + } + } // namespace detail +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp new file mode 100644 index 0000000000..0cd92f4cfb --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp @@ -0,0 +1,1090 @@ +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_uint.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/arithmetic.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/parsing.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/type_traits.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/config.hpp" +#include "nil/crypto3/multiprecision/detail/endian.hpp" +#include "nil/crypto3/multiprecision/detail/type_traits.hpp" + +namespace nil::crypto3::multiprecision { + /** + * @brief Big unsigned integer type + * + * @tparam Bits Number of bits + * + * @details + * This is a class that represents a big unsigned integer with a fixed size in bits. + * + * @note + * Addition and subtraction operations are optimized, while multiplication and division are not. + * Multiplication and division should be used in compile time or in non-performance critical + * code. + * If you need fast arithmetic, you probably are looking for big_mod, which implements fast + * modular arithmetic. + */ + template + class big_uint { + public: + static constexpr std::size_t Bits = Bits_; + using self_type = big_uint; + + using limb_type = detail::limb_type; + using double_limb_type = detail::double_limb_type; + using signed_limb_type = detail::signed_limb_type; + using signed_double_limb_type = detail::signed_double_limb_type; + + // Storage + + using limb_pointer = detail::limb_pointer; + using const_limb_pointer = detail::const_limb_pointer; + static constexpr std::size_t limb_bits = detail::limb_bits; + static constexpr limb_type max_limb_value = detail::max_limb_value; + + static constexpr std::size_t internal_limb_count = + (Bits / limb_bits) + (((Bits % limb_bits) != 0u) ? 1u : 0u); + static constexpr limb_type upper_limb_mask = + (Bits % limb_bits) ? (limb_type(1) << (Bits % limb_bits)) - 1 : (~limb_type(0u)); + + // + // Helper functions for getting at our internal data, and manipulating storage: + // + constexpr std::size_t limbs_count() const noexcept { + static_assert(internal_limb_count != 0, "No limbs in storage."); + return internal_limb_count; + } + constexpr limb_pointer limbs() noexcept { return m_data.data(); } + constexpr const_limb_pointer limbs() const noexcept { return m_data.data(); } + constexpr auto& limbs_array() noexcept { return m_data; } + constexpr const auto& limbs_array() const noexcept { return m_data; } + + private: + // Zeros out everything after limb[i], replaces resizing. + constexpr void zero_after(std::size_t start_index) { + auto pr = this->limbs(); + for (std::size_t i = start_index; i < this->limbs_count(); ++i) { + pr[i] = 0; + } + } + + constexpr std::size_t used_limbs() const noexcept { + for (int i = internal_limb_count - 1; i >= 0; --i) { + if (limbs()[i] != 0) { + return i + 1; + } + } + return 0; + } + + constexpr std::size_t order() const noexcept { + for (int i = internal_limb_count - 1; i >= 0; --i) { + if (limbs()[i] != 0) { + return i; + } + } + return 0; + } + + // Assignment + + template && std::is_unsigned_v, int> = 0> + constexpr void do_assign_integral(const T& a) noexcept { + if constexpr (sizeof(T) <= sizeof(limb_type)) { + this->limbs()[0] = a; + this->zero_after(1); + } else { + static_assert(sizeof(T) % sizeof(limb_type) == 0); + constexpr std::size_t n = + std::min(internal_limb_count, sizeof(T) / sizeof(limb_type)); + auto a_copy = a; + for (std::size_t i = 0; i < n; ++i) { + limbs()[i] = a_copy & static_cast(static_cast(-1)); + a_copy >>= limb_bits; + } + zero_after(n); + } + this->normalize(); + if constexpr (sizeof(T) * CHAR_BIT > Bits) { + NIL_CO3_MP_ASSERT(big_uint(a).compare(*this) == 0); + } + } + + template + constexpr void do_assign(const big_uint& other) noexcept { + std::size_t count = (std::min)(other.limbs_count(), this->limbs_count()); + for (std::size_t i = 0; i < count; ++i) { + this->limbs()[i] = other.limbs()[i]; + } + // Zero out everything after (std::min)(other.limbs_count(), limbs_count()), so if size + // of other was less, we have 0s at the end. + this->zero_after((std::min)(other.limbs_count(), this->limbs_count())); + this->normalize(); + } + + public: + // TODO(ioxid): this should be private + constexpr void normalize() noexcept { limbs()[internal_limb_count - 1] &= upper_limb_mask; } + + constexpr bool has_carry() const noexcept { return m_carry; } + constexpr void set_carry(bool carry) noexcept { m_carry = carry; } + + // Constructor + + constexpr big_uint() noexcept {} + + constexpr big_uint(std::string_view str) { *this = str; } + constexpr big_uint(const char* str) { *this = str; } + constexpr big_uint(const std::string &str) { *this = str; } + + template && std::is_signed_v, int> = 0> + constexpr big_uint(T val) noexcept { + NIL_CO3_MP_ASSERT_MSG(val >= 0, "big_uint: assignment from negative integer"); + do_assign_integral(static_cast>(val)); + } + + template && std::is_unsigned_v, int> = 0> + constexpr big_uint(T val) noexcept { + do_assign_integral(val); + } + + // TODO(ioxid): make this explicit for the case when Bits2 > Bits + template + constexpr big_uint(const big_uint& other) noexcept { + do_assign(other); + if constexpr (Bits2 > Bits) { + NIL_CO3_MP_ASSERT(other.compare(*this) == 0); + } + } + + template + constexpr big_uint(const std::array& bytes) noexcept { + *this = bytes; + } + + // Assignment + + constexpr big_uint& operator=(std::string_view str) { + *this = detail::parse_int(str); + return *this; + } + constexpr big_uint& operator=(const char* str) { + *this = detail::parse_int(str); + return *this; + } + constexpr big_uint& operator=(const std::string &str) { + *this = detail::parse_int(str); + return *this; + } + + template && std::is_signed_v, int> = 0> + constexpr big_uint& operator=(T val) noexcept { + NIL_CO3_MP_ASSERT_MSG(val >= 0, "big_uint: assignment from negative integer"); + do_assign_integral(static_cast>(val)); + return *this; + } + + template && std::is_unsigned_v, int> = 0> + constexpr big_uint& operator=(T val) noexcept { + do_assign_integral(val); + return *this; + } + + template + constexpr big_uint& operator=(const big_uint& other) noexcept { + do_assign(other); + if constexpr (Bits2 > Bits) { + NIL_CO3_MP_ASSERT(other.compare(*this) == 0); + } + return *this; + } + + template + constexpr big_uint& operator=(const std::array& bytes) { + std::size_t bits = 0; + for (std::size_t i = 0; i < bytes.size(); ++i) { + *this <<= 8; + if (bits != 0) { + bits += 8; + } + unsigned b = bytes[i]; + *this += b; + if (bits == 0 && b != 0) { + bits += std::bit_width(b); + } + } + if (bits > Bits) { + throw std::invalid_argument("not enough bits"); + } + return *this; + } + + // String conversion + + constexpr std::string str(std::ios_base::fmtflags flags = std::ios_base::hex | + std::ios_base::showbase | + std::ios_base::uppercase) const { + if (flags & std::ios_base::dec) { + // TODO(ioxid): this is inefficient + std::string result; + auto copy = *this; + while (!copy.is_zero()) { + result += static_cast(static_cast(copy % 10u) + '0'); + copy /= 10u; + } + std::reverse(result.begin(), result.end()); + if (result.empty()) { + result += '0'; + } + return result; + } + if (!(flags & std::ios_base::hex)) { + throw std::invalid_argument("big_uint: unsupported format flags"); + } + std::string result; + result.reserve(used_limbs() * limb_bits / 4); + bool found_first = false; + for (int i = internal_limb_count - 1; i >= 0; --i) { + auto limb = limbs()[i]; + bool should_pad = found_first; + found_first = found_first || limb != 0; + if (found_first) { + std::size_t len = limb == 0 ? 1 : (std::bit_width(limb) + 3) / 4; + std::size_t padded_len = len; + if (should_pad) { + padded_len = sizeof(limb_type) * 2; + } + for (std::size_t j = 0; j < padded_len - len; ++j) { + result += '0'; + } + std::size_t start_offset = result.size(); + result.resize(result.size() + len); + auto ec = std::to_chars(result.data() + start_offset, + result.data() + result.size(), limb, 16) + .ec; + NIL_CO3_MP_ASSERT(ec == std::errc{}); + } + } + if (flags & std::ios_base::uppercase) { + for (std::size_t i = 0; i < result.size(); ++i) { + result[i] = + static_cast(std::toupper(static_cast(result[i]))); + } + } + if (result.size() == 0) { + result += '0'; + } + if (flags & std::ios_base::showbase) { + result = "0x" + result; + } + return result; + } + + template = 0> + constexpr big_uint truncate() const noexcept { + big_uint result; + result.do_assign(*this); + return result; + } + + // Cast to integral types + + template && std::is_integral_v && + std::is_unsigned_v, + int> = 0> + explicit constexpr operator T() const { + if constexpr (sizeof(T) <= sizeof(limb_type)) { + return static_cast(this->limbs()[0]); + } else { + constexpr std::size_t n = + std::min(sizeof(T) / sizeof(limb_type), internal_limb_count); + T result = 0; + for (std::size_t i = 0; i < n; ++i) { + result <<= limb_bits; + result |= limbs()[n - i - 1]; + } + return result; + } + } + + template && std::is_signed_v, int> = 0> + explicit constexpr operator T() const { + return static_cast(static_cast>(*this)); + } + + explicit constexpr operator bool() const { return !is_zero(); } + + // Comparison + + template + constexpr int compare(const big_uint& b) const noexcept { + std::size_t as = used_limbs(); + std::size_t bs = b.used_limbs(); + if (as != bs) { + return as > bs ? 1 : -1; + } + auto pa = limbs(); + auto pb = b.limbs(); + for (auto i = static_cast(as) - 1; i >= 0; --i) { + if (pa[i] != pb[i]) { + return pa[i] > pb[i] ? 1 : -1; + } + } + return 0; + } + + template && std::is_signed_v, int> = 0> + constexpr int compare(const T& b) const noexcept { + if (b < 0) { + return 1; + } + return compare(static_cast>(b)); + } + + template && std::is_unsigned_v, int> = 0> + constexpr int compare(const T& b) const noexcept { + static_assert(sizeof(T) <= sizeof(double_limb_type)); + std::size_t s = used_limbs(); + if constexpr (sizeof(T) <= sizeof(limb_type)) { + if (s > 1) { + return 1; + } + auto lmb = this->limbs()[0]; + return lmb == b ? 0 : lmb > b ? 1 : -1; + } else { + if (s > 2) { + return 1; + } + auto dbl = static_cast(*this); + return dbl == b ? 0 : dbl > b ? 1 : -1; + } + } + + // Comparison + +#define NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR(OP_) \ + template, int> = 0> \ + constexpr bool operator OP_(const T& o) const noexcept { \ + return compare(o) OP_ 0; \ + } \ + \ + template, int> = 0> \ + friend constexpr bool operator OP_(const T& a, const big_uint& b) noexcept { \ + return (-(b.compare(a)))OP_ 0; \ + } + + NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR(<) + NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR(<=) + NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR(>) + NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR(>=) + NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR(==) + NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR(!=) + +#undef NIL_CO3_MP_BIG_UINT_IMPL_COMPARISON_OPERATOR + + // Arithmetic operations + + constexpr void negate() noexcept { + if (is_zero()) { + return; + } + complement(*this); + ++*this; + } + + constexpr auto& operator++() noexcept { + if (limbs()[0] < max_limb_value) { + ++limbs()[0]; + if constexpr (Bits < limb_bits) { + normalize(); + } + } else { + detail::add(*this, *this, static_cast(1u)); + } + return *this; + } + + constexpr auto operator++(int) noexcept { + auto copy = *this; + ++*this; + return copy; + } + + NIL_CO3_MP_FORCEINLINE constexpr void decrement() noexcept {} + + constexpr auto operator+() const noexcept { return *this; } + + constexpr auto& operator--() noexcept { + if (limbs()[0]) { + --limbs()[0]; + } else { + detail::subtract(*this, *this, static_cast(1u)); + } + return *this; + } + constexpr auto operator--(int) noexcept { + auto copy = *this; + --*this; + return copy; + } + + constexpr big_uint operator-() const noexcept { + big_uint result = *this; + result.negate(); + return result; + } + + // Arithmetic operations + + template, int> = 0> + constexpr auto operator+(const T& b) const noexcept { + detail::largest_big_uint_t result; + detail::add(result, *this, b); + return result; + } + + template, int> = 0> + friend constexpr auto operator+(const T& a, const big_uint& b) noexcept { + return b + a; + } + + template, int> = 0> + constexpr auto& operator+=(const T& b) noexcept { + detail::add(*this, *this, b); + return *this; + } + + template, int> = 0> + constexpr auto operator-(const T& b) const noexcept { + detail::largest_big_uint_t result; + detail::subtract(result, *this, b); + return result; + } + + template, int> = 0> + friend constexpr auto operator-(const T& a, const big_uint& b) noexcept { + return (-b) + a; + } + + template, int> = 0> + constexpr auto& operator-=(const T& b) noexcept { + detail::subtract(*this, *this, b); + return *this; + } + + template, int> = 0> + constexpr auto operator*(const T& b) const noexcept { + decltype(auto) b_unsigned = detail::unsigned_or_throw(b); + detail::largest_big_uint_t result; + detail::multiply(result, *this, detail::as_big_uint(b_unsigned)); + return result; + } + + template, int> = 0> + friend constexpr auto operator*(const T& a, const big_uint& b) noexcept { + return b * a; + } + + template, int> = 0> + constexpr auto& operator*=(const T& b) noexcept { + decltype(auto) b_unsigned = detail::unsigned_or_throw(b); + big_uint result; + detail::multiply(result, *this, detail::as_big_uint(b_unsigned)); + *this = result; + return *this; + } + + template && detail::is_integral_v) || + (std::is_integral_v && std::is_same_v), + int> = 0> + friend constexpr auto operator/(const T1& a, const T2& b) noexcept { + decltype(auto) a_unsigned = detail::unsigned_or_throw(a); + decltype(auto) b_unsigned = detail::unsigned_or_throw(b); + using big_uint_a = std::decay_t; + big_uint_a result; + big_uint_a modulus; + detail::divide(&result, detail::as_big_uint(a_unsigned), + detail::as_big_uint(b_unsigned), modulus); + return static_cast>(result); + } + + template, int> = 0> + constexpr auto& operator/=(const T& b) noexcept { + decltype(auto) b_unsigned = detail::unsigned_or_throw(b); + big_uint result; + big_uint modulus; + detail::divide(&result, *this, detail::as_big_uint(b_unsigned), modulus); + *this = result; + return *this; + } + + template && detail::is_integral_v) || + (std::is_integral_v && std::is_same_v), + int> = 0> + friend constexpr auto operator%(const T1& a, const T2& b) { + decltype(auto) a_unsigned = detail::unsigned_or_throw(a); + decltype(auto) b_unsigned = detail::unsigned_or_throw(b); + using big_uint_a = std::decay_t; + big_uint_a modulus; + detail::divide(static_cast(nullptr), detail::as_big_uint(a_unsigned), + detail::as_big_uint(b_unsigned), modulus); + return static_cast>(modulus); + } + + template, int> = 0> + constexpr auto& operator%=(const T& b) { + decltype(auto) b_unsigned = detail::unsigned_or_throw(b); + big_uint modulus; + detail::divide(static_cast(nullptr), *this, detail::as_big_uint(b_unsigned), + modulus); + *this = modulus; + return *this; + } + +#define NIL_CO3_MP_BIG_UINT_BITWISE_OPERATOR_IMPL(OP_, OP_ASSIGN_, METHOD_) \ + template, int> = 0> \ + constexpr auto operator OP_(const T& b) const noexcept { \ + detail::largest_big_uint_t result = *this; \ + result.METHOD_(detail::as_limb_type_or_big_uint(detail::unsigned_or_throw(b))); \ + return result; \ + } \ + \ + template, int> = 0> \ + friend constexpr auto operator OP_(const T& a, const big_uint& b) noexcept { \ + return b OP_ a; \ + } \ + \ + template, int> = 0> \ + constexpr auto& operator OP_ASSIGN_(const T & b) noexcept { \ + METHOD_(detail::as_limb_type_or_big_uint(detail::unsigned_or_throw(b))); \ + return *this; \ + } + + NIL_CO3_MP_BIG_UINT_BITWISE_OPERATOR_IMPL(&, &=, bitwise_and) + NIL_CO3_MP_BIG_UINT_BITWISE_OPERATOR_IMPL(|, |=, bitwise_or) + NIL_CO3_MP_BIG_UINT_BITWISE_OPERATOR_IMPL(^, ^=, bitwise_xor) + +#undef NIL_CO3_MP_BIG_UINT_BITWISE_OPERATOR_IMPL + + // Bitwise operations + + private: + template + constexpr void bitwise_op(const big_uint& o, Op op) noexcept { + // + // Both arguments are unsigned types, very simple case handled as a special case. + // + // First figure out how big the result needs to be and set up some data: + // + std::size_t rs = limbs_count(); + std::size_t os = o.limbs_count(); + auto [m, x] = std::minmax(rs, os); + limb_pointer pr = limbs(); + const_limb_pointer po = o.limbs(); + for (std::size_t i = rs; i < x; ++i) { + pr[i] = 0; + } + + for (std::size_t i = 0; i < os; ++i) { + pr[i] = op(pr[i], po[i]); + } + for (std::size_t i = os; i < x; ++i) { + pr[i] = op(pr[i], static_cast(0u)); + } + normalize(); + } + + template + NIL_CO3_MP_FORCEINLINE constexpr void bitwise_and(const big_uint& o) noexcept { + bitwise_op(o, std::bit_and()); + } + + template + NIL_CO3_MP_FORCEINLINE constexpr void bitwise_or(const big_uint& o) noexcept { + bitwise_op(o, std::bit_or()); + } + + template + NIL_CO3_MP_FORCEINLINE constexpr void bitwise_xor(const big_uint& o) noexcept { + bitwise_op(o, std::bit_xor()); + } + + // + // Again for operands which are single limbs: + // + + NIL_CO3_MP_FORCEINLINE constexpr void bitwise_and(limb_type l) noexcept { + limbs()[0] &= l; + zero_after(1); + } + + NIL_CO3_MP_FORCEINLINE constexpr void bitwise_or(limb_type l) noexcept { limbs()[0] |= l; } + + NIL_CO3_MP_FORCEINLINE constexpr void bitwise_xor(limb_type l) noexcept { limbs()[0] ^= l; } + + NIL_CO3_MP_FORCEINLINE constexpr void complement(const big_uint& o) noexcept { + std::size_t os = o.limbs_count(); + for (std::size_t i = 0; i < os; ++i) { + limbs()[i] = ~o.limbs()[i]; + } + normalize(); + } + + // Left shift will throw away upper Bits. + // This function must be called only when s % 8 == 0, i.e. we shift bytes. + void left_shift_byte(double_limb_type s) noexcept { + limb_pointer pr = limbs(); + + std::size_t bytes = static_cast(s / CHAR_BIT); + if (s >= Bits) { + // Set result to 0. + zero_after(0); + } else { + unsigned char* pc = reinterpret_cast(pr); + std::memmove(pc + bytes, pc, limbs_count() * sizeof(limb_type) - bytes); + std::memset(pc, 0, bytes); + } + } + + // Left shift will throw away upper Bits. + // This function must be called only when s % limb_bits == 0, i.e. we shift limbs, which + // are normally 64 bit. + + constexpr void left_shift_limb(double_limb_type s) noexcept { + limb_type offset = static_cast(s / limb_bits); + NIL_CO3_MP_ASSERT(static_cast(s % limb_bits) == 0); + + limb_pointer pr = limbs(); + + if (s >= Bits) { + // Set result to 0. + zero_after(0); + } else { + std::size_t i = offset; + std::size_t rs = limbs_count() + offset; + for (; i < limbs_count(); ++i) { + pr[rs - 1 - i] = pr[limbs_count() - 1 - i]; + } + for (; i < rs; ++i) { + pr[rs - 1 - i] = 0; + } + } + } + + // Left shift will throw away upper Bits. + + constexpr void left_shift_generic(double_limb_type s) noexcept { + if (s >= Bits) { + // Set result to 0. + zero_after(0); + } else { + limb_type offset = static_cast(s / limb_bits); + limb_type shift = static_cast(s % limb_bits); + + limb_pointer pr = limbs(); + std::size_t i = 0; + std::size_t rs = limbs_count(); + // This code only works when shift is non-zero, otherwise we invoke undefined + // behaviour! + NIL_CO3_MP_ASSERT(shift); + for (; rs - i >= 2 + offset; ++i) { + pr[rs - 1 - i] = pr[rs - 1 - i - offset] << shift; + pr[rs - 1 - i] |= pr[rs - 2 - i - offset] >> (limb_bits - shift); + } + if (rs - i >= 1 + offset) { + pr[rs - 1 - i] = pr[rs - 1 - i - offset] << shift; + ++i; + } + for (; i < rs; ++i) { + pr[rs - 1 - i] = 0; + } + } + } + + void right_shift_byte(double_limb_type s) noexcept { + limb_type offset = static_cast(s / limb_bits); + NIL_CO3_MP_ASSERT((s % CHAR_BIT) == 0); + std::size_t ors = limbs_count(); + std::size_t rs = ors; + if (offset >= rs) { + zero_after(0); + return; + } + rs -= offset; + limb_pointer pr = limbs(); + unsigned char* pc = reinterpret_cast(pr); + limb_type shift = static_cast(s / CHAR_BIT); + std::memmove(pc, pc + shift, ors * sizeof(pr[0]) - shift); + shift = (sizeof(limb_type) - shift % sizeof(limb_type)) * CHAR_BIT; + if (shift < limb_bits) { + pr[ors - offset - 1] &= (static_cast(1u) << shift) - 1; + if (!pr[ors - offset - 1] && (rs > 1)) { + --rs; + } + } + // Set zeros after 'rs', alternative to resizing to size 'rs'. + zero_after(rs); + } + + constexpr void right_shift_limb(double_limb_type s) noexcept { + limb_type offset = static_cast(s / limb_bits); + NIL_CO3_MP_ASSERT((s % limb_bits) == 0); + std::size_t ors = limbs_count(); + std::size_t rs = ors; + if (offset >= rs) { + zero_after(0); + return; + } + rs -= offset; + limb_pointer pr = limbs(); + std::size_t i = 0; + for (; i < rs; ++i) { + pr[i] = pr[i + offset]; + } + // Set zeros after 'rs', alternative to resizing to size 'rs'. + zero_after(rs); + } + + constexpr void right_shift_generic(double_limb_type s) noexcept { + limb_type offset = static_cast(s / limb_bits); + limb_type shift = static_cast(s % limb_bits); + std::size_t ors = limbs_count(); + std::size_t rs = ors; + + if (offset >= rs) { + *this = static_cast(0u); + return; + } + rs -= offset; + limb_pointer pr = limbs(); + if ((pr[ors - 1] >> shift) == 0) { + if (--rs == 0) { + *this = static_cast(0u); + return; + } + } + std::size_t i = 0; + + // This code only works for non-zero shift, otherwise we invoke undefined behaviour! + NIL_CO3_MP_ASSERT(shift); + for (; i + offset + 1 < ors; ++i) { + pr[i] = pr[i + offset] >> shift; + pr[i] |= pr[i + offset + 1] << (limb_bits - shift); + } + pr[i] = pr[i + offset] >> shift; + + // We cannot resize any more, so we need to set all the limbs to zero. + zero_after(rs); + } + + public: + constexpr auto operator~() const noexcept { + big_uint result; + result.complement(*this); + return result; + } + + // Shifting left throws away upper Bits. + constexpr big_uint& operator<<=(double_limb_type s) noexcept { + if (!s) { + return *this; + } + +#if NIL_CO3_MP_ENDIAN_LITTLE_BYTE && defined(NIL_CO3_MP_USE_LIMB_SHIFT) + constexpr limb_type limb_shift_mask = limb_bits - 1; + constexpr limb_type byte_shift_mask = CHAR_BIT - 1; + + if ((s & limb_shift_mask) == 0) { + left_shift_limb(s); + } else if (((s & byte_shift_mask) == 0) && !std::is_constant_evaluated()) { + left_shift_byte(s); + } +#elif NIL_CO3_MP_ENDIAN_LITTLE_BYTE + constexpr limb_type limb_shift_mask = limb_bits - 1; + constexpr limb_type byte_shift_mask = CHAR_BIT - 1; + + if (std::is_constant_evaluated() && ((s & limb_shift_mask) == 0)) { + left_shift_limb(s); + } else if (((s & byte_shift_mask) == 0) && !std::is_constant_evaluated()) { + left_shift_byte(s); + } +#else + constexpr limb_type limb_shift_mask = limb_bits - 1; + + if ((s & limb_shift_mask) == 0) { + left_shift_limb(s); + } +#endif + else { + left_shift_generic(s); + } + normalize(); + return *this; + } + + constexpr big_uint operator<<(double_limb_type s) const noexcept { + big_uint result = *this; + result <<= s; + return result; + } + + constexpr big_uint& operator>>=(double_limb_type s) noexcept { + if (!s) { + return *this; + } + +#if NIL_CO3_MP_ENDIAN_LITTLE_BYTE && defined(NIL_CO3_MP_USE_LIMB_SHIFT) + constexpr limb_type limb_shift_mask = limb_bits - 1; + constexpr limb_type byte_shift_mask = CHAR_BIT - 1; + + if ((s & limb_shift_mask) == 0) { + right_shift_limb(s); + } else if (((s & byte_shift_mask) == 0) && !std::is_constant_evaluated()) { + right_shift_byte(s); + } +#elif NIL_CO3_MP_ENDIAN_LITTLE_BYTE + constexpr limb_type byte_shift_mask = CHAR_BIT - 1; + + constexpr limb_type limb_shift_mask = limb_bits - 1; + if (std::is_constant_evaluated() && ((s & limb_shift_mask) == 0)) { + right_shift_limb(s); + } else if (((s & byte_shift_mask) == 0) && !std::is_constant_evaluated()) { + right_shift_byte(s); + } +#else + constexpr limb_type limb_shift_mask = limb_bits - 1; + + if ((s & limb_shift_mask) == 0) { + right_shift_limb(s); + } +#endif + else { + right_shift_generic(s); + } + return *this; + } + + constexpr big_uint operator>>(double_limb_type s) const noexcept { + big_uint result = *this; + result >>= s; + return result; + } + + // IO + + friend std::ostream& operator<<(std::ostream& os, const big_uint& value) { + os << value.str(os.flags()); + return os; + } + + // Misc ops + + NIL_CO3_MP_FORCEINLINE constexpr bool is_zero() const noexcept { + for (std::size_t i = 0; i < limbs_count(); ++i) { + if (limbs()[i] != 0) { + return false; + } + } + return true; + } + + constexpr std::size_t lsb() const { + // + // Find the index of the least significant limb that is non-zero: + // + std::size_t index = 0; + while ((index < limbs_count()) && !limbs()[index]) { + ++index; + } + + if (index == limbs_count()) { + throw std::invalid_argument("zero has no lsb"); + } + + // + // Find the index of the least significant bit within that limb: + // + std::size_t result = std::countr_zero(limbs()[index]); + + return result + index * limb_bits; + } + + constexpr std::size_t msb() const { + // + // Find the index of the most significant bit that is non-zero: + // + for (std::size_t i = limbs_count() - 1; i > 0; --i) { + if (limbs()[i] != 0) { + return i * limb_bits + std::bit_width(limbs()[i]) - 1; + } + } + if (limbs()[0] == 0) { + throw std::invalid_argument("zero has no msb"); + } + return std::bit_width(limbs()[0]) - 1; + } + + constexpr bool bit_test(std::size_t index) const { + if (index >= Bits) { + return false; + // TODO(ioxid): this throws in multiexp tests + // throw std::invalid_argument("fixed precision overflow"); + } + std::size_t offset = index / limb_bits; + std::size_t shift = index % limb_bits; + limb_type mask = limb_type(1u) << shift; + return static_cast(limbs()[offset] & mask); + } + + constexpr void bit_set(std::size_t index) { + if (index >= Bits) { + throw std::invalid_argument("fixed precision overflow"); + } + std::size_t offset = index / limb_bits; + std::size_t shift = index % limb_bits; + limb_type mask = limb_type(1u) << shift; + limbs()[offset] |= mask; + } + + constexpr void bit_unset(std::size_t index) { + if (index >= Bits) { + throw std::invalid_argument("fixed precision overflow"); + } + std::size_t offset = index / limb_bits; + std::size_t shift = index % limb_bits; + limb_type mask = limb_type(1u) << shift; + limbs()[offset] &= ~mask; + } + + constexpr void bit_flip(big_uint& val, std::size_t index) { + if (index >= Bits) { + throw std::invalid_argument("fixed precision overflow"); + } + std::size_t offset = index / limb_bits; + std::size_t shift = index % limb_bits; + limb_type mask = limb_type(1u) << shift; + val.limbs()[offset] ^= mask; + } + + private: + // Data + + // m_data[0] contains the lowest bits. + std::array m_data{0}; + + // This is a temporary value which is set when carry has happend during addition. + // If this value is true, reduction by modulus must happen next. + bool m_carry = false; + + // Friends + + template + friend class big_uint; + + template + friend constexpr void detail::add_constexpr_unsigned(big_uint& result, + const big_uint& a, + const big_uint& b) noexcept; + template + friend constexpr void detail::subtract_constexpr_unsigned( + big_uint& result, const big_uint& a, const big_uint& b) noexcept; + template + friend constexpr void detail::add_unsigned(big_uint& result, + const big_uint& a, + const big_uint& b) noexcept; + template + friend constexpr void detail::subtract_unsigned(big_uint& result, + const big_uint& a, + const big_uint& b) noexcept; + template + friend constexpr void detail::add_unsigned(big_uint& result, + const big_uint& a, + const limb_type& o) noexcept; + template + friend constexpr void detail::subtract_unsigned(big_uint& result, + const big_uint& a, + const limb_type& b) noexcept; + template + friend constexpr void detail::divide(big_uint* div, const big_uint& x, + const big_uint& y, big_uint& rem); + template + friend constexpr void detail::multiply(big_uint& result, const big_uint& a, + const T& b) noexcept; + }; + + // Hash + + template + constexpr std::size_t hash_value(const big_uint& val) noexcept { + std::size_t result = 0; + for (std::size_t i = 0; i < val.limbs_count(); ++i) { + boost::hash_combine(result, val.limbs()[i]); + } + return result; + } + + // Misc ops + + template + constexpr std::size_t msb(const big_uint& a) { + return a.msb(); + } + + template + constexpr std::size_t lsb(const big_uint& a) { + return a.lsb(); + } + + template + constexpr bool bit_test(const big_uint& a, std::size_t index) { + return a.bit_test(index); + } + + template + constexpr bool is_zero(const big_uint& a) { + return a.is_zero(); + } + + template + constexpr void divide_qr(const big_uint& a, const big_uint& b, big_uint& q, + big_uint& r) { + detail::divide(&q, a, b, r); + } +} // namespace nil::crypto3::multiprecision + +template +struct std::hash> { + std::size_t operator()(const nil::crypto3::multiprecision::big_uint& a) const noexcept { + return boost::hash>{}(a); + } +}; diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/limits.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/limits.hpp new file mode 100644 index 0000000000..1e5e90acc9 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/limits.hpp @@ -0,0 +1,83 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2012 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt + +#pragma once + +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" + +namespace nil::crypto3::multiprecision::detail { + template + constexpr big_uint get_min() { + constexpr big_uint val = 0u; + return val; + } + + template + constexpr big_uint get_max() { + constexpr auto val = ~big_uint(0u); + return val; + } + + constexpr std::size_t calc_digits10(std::size_t d) { + // + // We need floor(log10(2) * (d-1)), see: + // https://www.exploringbinary.com/number-of-digits-required-for-round-trip-conversions/ + // and references therein. + // + return static_cast( + 0.301029995663981195213738894724493026768189881462108541310 * + static_cast(d - 1u)); + } +} // namespace nil::crypto3::multiprecision::detail + +namespace std { + template + class numeric_limits> { + using number_type = nil::crypto3::multiprecision::big_uint; + + public: + static constexpr bool is_specialized = true; + + static constexpr number_type(min)() { + return nil::crypto3::multiprecision::detail::get_min(); + } + static constexpr number_type(max)() { + return nil::crypto3::multiprecision::detail::get_max(); + } + static constexpr number_type lowest() { return (min)(); } + static constexpr int digits = number_type::Bits; + static constexpr int digits10 = nil::crypto3::multiprecision::detail::calc_digits10(digits); + static constexpr int max_digits10 = + nil::crypto3::multiprecision::detail::calc_digits10(digits); + static constexpr bool is_signed = false; + static constexpr bool is_integer = true; + static constexpr bool is_exact = true; + static constexpr int radix = 2; + static constexpr number_type epsilon() { return 0; } + static constexpr number_type round_error() { return 0; } + static constexpr int min_exponent = 0; + static constexpr int min_exponent10 = 0; + static constexpr int max_exponent = 0; + static constexpr int max_exponent10 = 0; + static constexpr bool has_infinity = false; + static constexpr bool has_quiet_NaN = false; + static constexpr bool has_signaling_NaN = false; + static constexpr float_denorm_style has_denorm = denorm_absent; + static constexpr bool has_denorm_loss = false; + static constexpr number_type infinity() { return 0; } + static constexpr number_type quiet_NaN() { return 0; } + static constexpr number_type signaling_NaN() { return 0; } + static constexpr number_type denorm_min() { return 0; } + static constexpr bool is_iec559 = false; + static constexpr bool is_bounded = true; + static constexpr bool is_modulo = true; + static constexpr bool traps = false; + static constexpr bool tinyness_before = false; + }; +} // namespace std diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/gcd_inverse.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/gcd_inverse.hpp new file mode 100644 index 0000000000..92b3a57de6 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/gcd_inverse.hpp @@ -0,0 +1,87 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2021 Aleksei Moskvin +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_uint.hpp" + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_int.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/assert.hpp" + +namespace nil::crypto3::multiprecision { + namespace detail { + // a^(-1) mod p + // http://www-math.ucdenver.edu/~wcherowi/courses/m5410/exeucalg.html + template + constexpr big_int extended_euclidean_algorithm(const big_int& num1, + const big_int& num2, + big_int& bezout_x, + big_int& bezout_y) { + big_int x, y, tmp_num1 = num1, tmp_num2 = num2; + y = 1u; + x = 0u; + + bezout_x = 1u; + bezout_y = 0u; + + // Extended Euclidean Algorithm + while (!tmp_num2.is_zero()) { + big_int quotient = tmp_num1; + big_int remainder = tmp_num1; + big_int placeholder; + + quotient /= tmp_num2; + remainder %= tmp_num2; + + tmp_num1 = tmp_num2; + tmp_num2 = remainder; + + big_int temp_x = x, temp_y = y; + placeholder = quotient * x; + placeholder = bezout_x - placeholder; + x = placeholder; + bezout_x = temp_x; + + placeholder = quotient * y; + placeholder = bezout_y - placeholder; + y = placeholder; + bezout_y = temp_y; + } + return tmp_num1; + } + } // namespace detail + + template + constexpr big_uint gcd(const big_uint& a, const big_uint& b) { + big_int aa = a, bb = b, x, y, g; + g = detail::extended_euclidean_algorithm(aa, bb, x, y); + NIL_CO3_MP_ASSERT(!g.negative()); + return g.abs(); + } + + template + constexpr big_uint inverse_extended_euclidean_algorithm(const big_uint& a, + const big_uint& m) { + big_int aa = a, mm = m, x, y, g; + g = detail::extended_euclidean_algorithm(aa, mm, x, y); + if (g != 1u) { + throw std::invalid_argument("no multiplicative inverse"); + } + x %= m; + if (x.negative()) { + x += m; + } + NIL_CO3_MP_ASSERT(x < m && !x.negative()); + return x.abs(); + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/import_export.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/import_export.hpp new file mode 100644 index 0000000000..8ea016d11b --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/import_export.hpp @@ -0,0 +1,210 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2015 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt +/////////////////////////////////////////////////////////////// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_uint.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" +#include "nil/crypto3/multiprecision/detail/endian.hpp" + +namespace nil::crypto3::multiprecision { + namespace detail { + /* This specialization is used when assigning `chunk_bits` + * of `bits` into `val` at `bit_location` in case where `val` + * is larger than one limb (machine word). + */ + template + void assign_bits(big_uint& val, Unsigned bits, std::size_t bit_location, + std::size_t chunk_bits) { + std::size_t limb = bit_location / limb_bits; + std::size_t shift = bit_location % limb_bits; + + limb_type mask = chunk_bits >= limb_bits + ? ~static_cast(0u) + : (static_cast(1u) << chunk_bits) - 1; + + limb_type value = static_cast(bits & mask) << shift; + if (value) { + // TODO(ioxid): when should we throw? + // We are ignoring any bits that will not fit into the number. + // We are not throwing, we will use as many bits from the input as we need to. + if (val.limbs_count() > limb) { + val.limbs()[limb] |= value; + } + } + + /* If some extra bits need to be assigned to the next limb */ + if (chunk_bits > limb_bits - shift) { + shift = limb_bits - shift; + chunk_bits -= shift; + bit_location += shift; + auto extra_bits = bits >> shift; + if (extra_bits) { + assign_bits(val, extra_bits, bit_location, chunk_bits); + } + } + } + + /* This specialization is used when assigning `chunk_bits` + * of `bits` into `val` at `bit_location` in case where `val` + * fits into one limb (machine word). + */ + template + void assign_bits(big_uint& val, Unsigned bits, std::size_t bit_location, + std::size_t chunk_bits, + const std::integral_constant& /*unused*/) { + using limb_type = typename big_uint::limb_type; + // + // Check for possible overflow. + // + NIL_CO3_MP_ASSERT(!((bit_location >= limb_bits) && bits)); + + limb_type mask = chunk_bits >= limb_bits + ? ~static_cast(0u) + : (static_cast(1u) << chunk_bits) - 1; + limb_type value = (static_cast(bits) & mask) << bit_location; + *val.limbs() |= value; + + // + // Check for overflow bits: + // + bit_location = limb_bits - bit_location; + + NIL_CO3_MP_ASSERT( + !((bit_location < sizeof(bits) * CHAR_BIT) && (bits >> bit_location))); + } + + template + std::uintmax_t extract_bits(const big_uint& val, std::size_t location, + std::size_t count) { + std::size_t limb = location / limb_bits; + std::size_t shift = location % limb_bits; + std::uintmax_t result = 0; + std::uintmax_t mask = count == std::numeric_limits::digits + ? ~static_cast(0) + : (static_cast(1u) << count) - 1; + if (count > (limb_bits - shift)) { + result = extract_bits(val, location + limb_bits - shift, count - limb_bits + shift); + result <<= limb_bits - shift; + } + if (limb < val.limbs_count()) { + result |= (val.limbs()[limb] >> shift) & mask; + } + return result; + } + + template + big_uint& import_bits_generic(big_uint& result, Iterator i, Iterator j, + std::size_t chunk_size = 0, bool msv_first = true) { + big_uint newval; + + using value_type = typename std::iterator_traits::value_type; + using difference_type = typename std::iterator_traits::difference_type; + using size_type = typename std::make_unsigned::type; + + if (!chunk_size) { + chunk_size = std::numeric_limits::digits; + } + + size_type limbs = std::distance(i, j); + size_type bits = limbs * chunk_size; + + // TODO(ioxid): this breaks marshalling tests + // We should throw an exception here. And check that excess bits are zero. + // NIL_CO3_MP_ASSERT(bits <= Bits); + + difference_type bit_location = msv_first ? bits - chunk_size : 0; + difference_type bit_location_change = + msv_first ? -static_cast(chunk_size) : chunk_size; + + while (i != j) { + assign_bits(newval, *i, static_cast(bit_location), chunk_size); + ++i; + bit_location += bit_location_change; + } + + // This will remove the upper bits using upper_limb_mask. + newval.normalize(); + + result = std::move(newval); + return result; + } + + template + inline big_uint& import_bits_fast(big_uint& result, T* i, T* j, + std::size_t chunk_size = 0) { + std::size_t byte_len = (j - i) * (chunk_size ? chunk_size / CHAR_BIT : sizeof(*i)); + std::size_t limb_len = byte_len / sizeof(limb_type); + if (byte_len % sizeof(limb_type)) { + ++limb_len; + } + + NIL_CO3_MP_ASSERT(result.limbs_count() > limb_len); + + result.limbs()[result.limbs_count() - 1] = 0u; + std::memcpy(result.limbs(), i, + (std::min)(byte_len, result.limbs_count() * sizeof(limb_type))); + + // This is probably unneeded, but let it stay for now. + result.normalize(); + return result; + } + } // namespace detail + + template + inline big_uint& import_bits(big_uint& val, Iterator i, Iterator j, + std::size_t chunk_size = 0, bool msv_first = true) { + return detail::import_bits_generic(val, i, j, chunk_size, msv_first); + } + + template + inline big_uint& import_bits(big_uint& val, T* i, T* j, std::size_t chunk_size = 0, + bool msv_first = true) { +#if NIL_CO3_MP_ENDIAN_LITTLE_BYTE + if (((chunk_size % CHAR_BIT) == 0) && !msv_first && (sizeof(*i) * CHAR_BIT == chunk_size)) { + return detail::import_bits_fast(val, i, j, chunk_size); + } +#endif + return detail::import_bits_generic(val, i, j, chunk_size, msv_first); + } + + template + OutputIterator export_bits(const big_uint& val, OutputIterator out, + std::size_t chunk_size, bool msv_first = true) { + if (!val) { + *out = 0; + ++out; + return out; + } + std::size_t bitcount = msb(val) + 1; + + std::ptrdiff_t bit_location = + msv_first ? static_cast(bitcount - chunk_size) : 0; + const std::ptrdiff_t bit_step = msv_first ? (-static_cast(chunk_size)) + : static_cast(chunk_size); + while (bit_location % bit_step) { + ++bit_location; + } + do { + *out = detail::extract_bits(val, bit_location, chunk_size); + ++out; + bit_location += bit_step; + } while ((bit_location >= 0) && (bit_location < static_cast(bitcount))); + + return out; + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/jacobi.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/jacobi.hpp new file mode 100644 index 0000000000..530c389bd3 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/jacobi.hpp @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2021 Aleksei Moskvin +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_uint.hpp" + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" + +namespace nil::crypto3::multiprecision { + + template + constexpr int jacobi(const big_uint &a, const big_uint &n) { + using big_uint_t = big_uint; + + if (n % 2u == 0 || n <= 1) { + throw std::invalid_argument("jacobi: second argument must be odd and > 1"); + } + + big_uint_t x = a, y = n; + int J = 1; + + while (y > 1) { + x %= y; + + big_uint_t yd2 = y; + yd2 >>= 1; + + if (x > yd2) { + big_uint_t tmp(y); + tmp -= x; + x = tmp; + if (y % 4u == 3) { + J = -J; + } + } + if (x.is_zero()) { + return 0; + } + + std::size_t shifts = x.lsb(); + x >>= shifts; + if (shifts & 1) { + std::size_t y_mod_8 = static_cast(y % 8u); + if (y_mod_8 == 3 || y_mod_8 == 5) { + J = -J; + } + } + + if (x % 4u == 3 && y % 4u == 3) { + J = -J; + } + + std::swap(x, y); + } + return J; + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/powm.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/powm.hpp new file mode 100644 index 0000000000..124abf6940 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/powm.hpp @@ -0,0 +1,32 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2019-2021 Aleksei Moskvin +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2024 Andrey Nefedov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_uint.hpp" + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_mod/ops/pow.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/type_traits.hpp" + +namespace nil::crypto3::multiprecision { + template> && + detail::is_integer_v>, + int> = 0> + constexpr big_uint powm(T1 &&b, T2 &&e, const big_uint &m) { + return pow(big_mod_rt(std::forward(b), m), std::forward(e)).base(); + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/ressol.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/ressol.hpp new file mode 100644 index 0000000000..204072605b --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/ressol.hpp @@ -0,0 +1,135 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2018-2020 Pavel Kharitonov +// Copyright (c) 2021 Aleksei Moskvin +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_uint.hpp" + +#include +#include + +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/detail/big_mod/big_mod_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_mod/ops/pow.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/ops/jacobi.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" + +namespace nil::crypto3::multiprecision { + template + constexpr big_uint ressol(const big_uint &a, const big_uint &p) { + /* + * The implementation is split for two different cases: + * 1. if p mod 4 == 3 we apply Handbook of Applied Cryptography algorithm 3.36 and compute + * r directly as r = n(p+1)/4 mod p + * 2. otherwise we use Tonelli-Shanks algorithm + */ + using big_uint_t = big_uint; + using big_uint_padded_t = big_uint; + + using ui_type = detail::limb_type; + + big_uint_t two = ui_type(2u); + big_uint_t res; + + if (a.is_zero()) { + return 0u; + } + NIL_CO3_MP_ASSERT(a < p); + + if (p == two) { + return a; + } + NIL_CO3_MP_ASSERT(p > 1u); + NIL_CO3_MP_ASSERT(p % 2u != 0u); + + if (jacobi(a, p) != 1) { + throw std::invalid_argument("Not a quadratic residue"); + } + + // We can use montgomery_big_mod because p is odd + + montgomery_big_mod_rt a_mod(a, p); + + if (p % 4u == 3) { + big_uint_padded_t exp_padded = p; + + ++exp_padded; + exp_padded >>= 2u; + + return pow(a_mod, big_uint_t(exp_padded)).base(); + } + + big_uint_t p_negone = p; + --p_negone; + std::size_t s = p_negone.lsb(); + + big_uint_t q = p; + q >>= s; + --q; + q >>= 1u; + + montgomery_big_mod_rt n_mod = a_mod; + + auto r_mod = pow(a_mod, q); + auto r_sq_mod = pow(r_mod, two); + n_mod *= r_sq_mod; + r_mod *= a_mod; + + if (n_mod.base() == 1u) { + return r_mod.base(); + } + + // find random quadratic nonresidue z + big_uint_t z = two; + while (jacobi(z, p) == 1) { + if (z.is_zero()) { + throw std::invalid_argument("No quadratic nonresidue"); + } + ++z; + } + + q <<= 1u; + ++q; + + montgomery_big_mod_rt z_mod(z, p); + + auto c_mod = pow(z_mod, q); + + while (n_mod.base() > 1u) { + std::size_t i = 0u; + + auto q_mod = n_mod; + + while (q_mod.base() != 1u) { + q_mod = pow(q_mod, two); + ++i; + + if (i >= s) { + // TODO(ioxid): when can this happen? (jacobi said that this should not happen) + // Martun: the value now has a square root + throw std::invalid_argument("Not a quadratic residue"); + } + } + + big_uint_t power_of_2; + + power_of_2.bit_set(s - i - 1); + c_mod = pow(c_mod, power_of_2); + r_mod *= c_mod; + c_mod = pow(c_mod, two); + n_mod *= c_mod; + + s = i; + } + + return r_mod.base(); + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/wnaf.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/wnaf.hpp new file mode 100644 index 0000000000..d86ed92285 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/ops/wnaf.hpp @@ -0,0 +1,101 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2018-2020 Mikhail Komarov +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#pragma once + +// IWYU pragma: private; include "nil/crypto3/multiprecision/big_uint.hpp" + +#include +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" + +namespace nil::crypto3::multiprecision { + /* Vector version */ + template + std::vector find_wnaf(const std::size_t window_size, + const big_uint& scalar) noexcept { + using big_uint_t = big_uint; + using ui_type = detail::limb_type; + + // upper bound + constexpr std::size_t length = + big_uint_t::internal_limb_count * std::numeric_limits::digits; + std::vector res(length + 1); + + big_uint_t c(scalar); + ui_type j = 0; + + while (!c.is_zero()) { + long u = 0; + if (c.bit_test(0u)) { + u = c.limbs()[0] % (1u << (window_size + 1)); + if (u > (1 << window_size)) { + u = u - (1 << (window_size + 1)); + } + + if (u > 0) { + c -= ui_type(u); + } else { + c += ui_type(-u); + } + } else { + u = 0; + } + res[j] = u; + ++j; + + c >>= 1; + } + + return res; + } + + /* Array version */ + template + constexpr auto find_wnaf_a(const std::size_t window_size, + const big_uint& scalar) noexcept { + using big_uint_t = big_uint; + using ui_type = detail::limb_type; + + // upper bound + constexpr std::size_t length = + big_uint_t::internal_limb_count * std::numeric_limits::digits; + + std::array res{0}; + + big_uint_t c(scalar); + ui_type j = 0; + + while (!c.is_zero()) { + long u = 0; + if (c.bit_test(0u)) { + u = c.limbs()[0] % (1u << (window_size + 1)); + if (u > (1 << window_size)) { + u = u - (1 << (window_size + 1)); + } + + if (u > 0) { + c -= u; + } else { + c += ui_type(-u); + } + } + + res[j] = u; + ++j; + c >>= 1; + } + + return res; + } + +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/parsing.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/parsing.hpp new file mode 100644 index 0000000000..9d8bc7b5aa --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/parsing.hpp @@ -0,0 +1,80 @@ +#pragma once + +#include +#include +#include +#include + +namespace nil::crypto3::multiprecision { + template + class big_uint; + + namespace detail { + constexpr bool is_valid_hex_digit(char c) { + return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F'); + } + + constexpr unsigned parse_hex_digit(char c) { + if ('0' <= c && c <= '9') { + return c - '0'; + } + if ('a' <= c && c <= 'f') { + return (c - 'a') + 10; + } + return (c - 'A') + 10; + } + + template + constexpr big_uint parse_int_hex(std::string_view str) { + if (str.size() < 2 || str[0] != '0' || str[1] != 'x') { + throw std::invalid_argument("hex literal should start with 0x"); + } + + big_uint result{0}; + + std::size_t bits = 0; + for (std::size_t i = 2; i < str.size(); ++i) { + char c = str[i]; + if (!is_valid_hex_digit(c)) { + throw std::invalid_argument("non-hex character in literal"); + } + result <<= 4; + if (bits != 0) { + bits += 4; + } + unsigned digit = parse_hex_digit(c); + result += digit; + if (bits == 0 && digit != 0) { + bits += std::bit_width(digit); + } + } + if (bits > Bits) { + throw std::invalid_argument("not enough bits to store literal"); + } + return result; + } + + template + constexpr big_uint parse_int_decimal(std::string_view str) { + big_uint result{0}; + + for (std::size_t i = 0; i < str.size(); ++i) { + char c = str[i]; + if (c < '0' || c > '9') { + throw std::invalid_argument("non decimal character in literal"); + } + result *= 10u; + result += static_cast(c - '0'); + } + return result; + } + + template + constexpr big_uint parse_int(std::string_view str) { + if (str.size() >= 2 && str[0] == '0' && str[1] == 'x') { + return parse_int_hex(str); + } + return parse_int_decimal(str); + } + } // namespace detail +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/storage.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/storage.hpp new file mode 100644 index 0000000000..6047d72702 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/storage.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/int128.hpp" + +namespace nil::crypto3::multiprecision::detail { +#ifdef NIL_CO3_MP_HAS_INT128 + using limb_type = std::uint64_t; + using double_limb_type = uint128_t; + using signed_limb_type = std::int64_t; + using signed_double_limb_type = int128_t; +#else + using limb_type = std::uint32_t; + using double_limb_type = std::uint64_t; + using signed_limb_type = std::int32_t; + using signed_double_limb_type = std::int64_t; +#endif + + using limb_pointer = limb_type *; + using const_limb_pointer = const limb_type *; + + static constexpr std::size_t limb_bits = sizeof(limb_type) * CHAR_BIT; + static constexpr limb_type max_limb_value = ~static_cast(0u); + + // Given a value represented in 'double_limb_type', decomposes it into + // two 'limb_type' variables, based on high order bits and low order bits. + // There 'a' receives high order bits of 'X', and 'b' receives the low order bits. + static constexpr void dbl_limb_to_limbs(const double_limb_type &X, limb_type &a, limb_type &b) { + b = X; + a = X >> limb_bits; + } +} // namespace nil::crypto3::multiprecision::detail diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/type_traits.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/type_traits.hpp new file mode 100644 index 0000000000..412b00533d --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/big_uint/type_traits.hpp @@ -0,0 +1,71 @@ +#pragma once + +#include +#include +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" + +namespace nil::crypto3::multiprecision { + template + class big_uint; + + namespace detail { + template + constexpr bool is_big_uint_v = false; + + template + constexpr bool is_big_uint_v> = true; + + template + constexpr bool is_integral_v = std::is_integral_v || is_big_uint_v; + + template, int> = 0> + constexpr std::size_t get_bits() { + return sizeof(T) * CHAR_BIT; + } + + template, int> = 0> + constexpr std::size_t get_bits() { + return T::Bits; + } + + template + using largest_big_uint_t = + std::conditional_t && is_big_uint_v, + big_uint(), get_bits())>, + std::conditional_t, T1, T2>>; + + template && std::is_unsigned_v, int> = 0> + constexpr big_uint as_big_uint(const T& a) { + return static_cast>(a); + } + + template>, int> = 0> + constexpr decltype(auto) as_big_uint(T&& a) { + return std::forward(a); + } + + template && std::is_unsigned_v && + sizeof(T) * CHAR_BIT <= limb_bits, + int> = 0> + constexpr limb_type as_limb_type_or_big_uint(const T& a) { + return static_cast(a); + } + + template && std::is_unsigned_v && + sizeof(T) * CHAR_BIT <= limb_bits) && + !is_big_uint_v, + int> = 0> + constexpr auto as_limb_type_or_big_uint(const T& a) { + return as_big_uint(a); + } + + template>, int> = 0> + constexpr decltype(auto) as_limb_type_or_big_uint(T&& a) { + return std::forward(a); + } + } // namespace detail +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/config.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/config.hpp new file mode 100644 index 0000000000..f78ae1a7f6 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/config.hpp @@ -0,0 +1,27 @@ +#pragma once + +#if !defined(NIL_CO3_MP_FORCEINLINE) + +#if defined(NDEBUG) && !defined(_DEBUG) + +#if defined(_MSC_VER) +#define NIL_CO3_MP_FORCEINLINE __forceinline +#elif defined(__GNUC__) && __GNUC__ > 3 +// Clang also defines __GNUC__ (as 4) +#define NIL_CO3_MP_FORCEINLINE inline __attribute__((__always_inline__)) +#else +#define NIL_CO3_MP_FORCEINLINE inline +#endif + +#else + +#define NIL_CO3_MP_FORCEINLINE inline + +#endif + +// Enable to use limb shift instead of byte shift with memmove in runtime +// #define NIL_CO3_MP_USE_LIMB_SHIFT + +#endif + + diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/endian.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/endian.hpp new file mode 100644 index 0000000000..609535bd66 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/endian.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include + +#define NIL_CO3_MP_ENDIAN_BIG_BYTE 0 +#define NIL_CO3_MP_ENDIAN_BIG_WORD 0 +#define NIL_CO3_MP_ENDIAN_LITTLE_BYTE 0 +#define NIL_CO3_MP_ENDIAN_LITTLE_WORD 0 + +#if defined(__BYTE_ORDER) +#if defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN) +#undef NIL_CO3_MP_ENDIAN_BIG_BYTE +#define NIL_CO3_MP_ENDIAN_BIG_BYTE 1 +#endif +#if defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN) +#undef NIL_CO3_MP_ENDIAN_LITTLE_BYTE +#define NIL_CO3_MP_ENDIAN_LITTLE_BYTE 1 +#endif +#if defined(__PDP_ENDIAN) && (__BYTE_ORDER == __PDP_ENDIAN) +#undef NIL_CO3_MP_ENDIAN_LITTLE_WORD +#define NIL_CO3_MP_ENDIAN_LITTLE_WORD 1 +#endif +#endif +#if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER) +#if defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN) +#undef NIL_CO3_MP_ENDIAN_BIG_BYTE +#define NIL_CO3_MP_ENDIAN_BIG_BYTE 1 +#endif +#if defined(_LITTLE_ENDIAN) && (_BYTE_ORDER == _LITTLE_ENDIAN) +#undef NIL_CO3_MP_ENDIAN_LITTLE_BYTE +#define NIL_CO3_MP_ENDIAN_LITTLE_BYTE 1 +#endif +#if defined(_PDP_ENDIAN) && (_BYTE_ORDER == _PDP_ENDIAN) +#undef NIL_CO3_MP_ENDIAN_LITTLE_WORD +#define NIL_CO3_MP_ENDIAN_LITTLE_WORD 1 +#endif +#endif \ No newline at end of file diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/helper_macros.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/helper_macros.hpp new file mode 100644 index 0000000000..838b4dde21 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/helper_macros.hpp @@ -0,0 +1,34 @@ +#pragma once + +// Copyright 2001 John Maddock. +// Copyright 2017 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +// NIL_CO3_MP_STRINGIZE(X) +// NIL_CO3_MP_JOIN(X, Y) +// +// Note that this header is C compatible. + +// +// Helper macro NIL_CO3_MP_STRINGIZE: +// Converts the parameter X to a string after macro replacement +// on X has been performed. +// +#define NIL_CO3_MP_STRINGIZE(X) NIL_CO3_MP_DO_STRINGIZE(X) +#define NIL_CO3_MP_DO_STRINGIZE(X) #X + +// +// Helper macro NIL_CO3_MP_JOIN: +// The following piece of macro magic joins the two +// arguments together, even when one of the arguments is +// itself a macro (see 16.3.1 in C++ standard). The key +// is that macro expansion of macro arguments does not +// occur in NIL_CO3_MP_DO_JOIN2 but does in NIL_CO3_MP_DO_JOIN. +// +#define NIL_CO3_MP_JOIN(X, Y) NIL_CO3_MP_DO_JOIN(X, Y) +#define NIL_CO3_MP_DO_JOIN(X, Y) NIL_CO3_MP_DO_JOIN2(X, Y) +#define NIL_CO3_MP_DO_JOIN2(X, Y) X##Y diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/int128.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/int128.hpp new file mode 100644 index 0000000000..eabe5b6043 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/int128.hpp @@ -0,0 +1,18 @@ +#pragma once + +#if defined(__SIZEOF_INT128__) +#define NIL_CO3_MP_HAS_INT128 +#endif + +// same again for __int128: +#if defined(NIL_CO3_MP_HAS_INT128) && defined(__cplusplus) +namespace nil::crypto3::multiprecision::detail { +#ifdef __GNUC__ + __extension__ typedef __int128 int128_t; + __extension__ typedef unsigned __int128 uint128_t; +#else + typedef __int128 int128_type; + typedef unsigned __int128 uint128_type; +#endif +} // namespace nil::crypto3::multiprecision::detail +#endif diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops_base.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops_base.hpp new file mode 100644 index 0000000000..e23ee48b11 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops_base.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/big_uint_impl.hpp" +#include "nil/crypto3/multiprecision/detail/type_traits.hpp" + +namespace nil::crypto3::multiprecision { + template, int> = 0> + constexpr std::size_t msb(T a) { + // TODO(ioxid): optimize + return detail::as_big_uint(detail::unsigned_or_throw(a)).msb(); + } + + template, int> = 0> + constexpr std::size_t lsb(T a) { + // TODO(ioxid): optimize + return detail::as_big_uint(detail::unsigned_or_throw(a)).lsb(); + } + + template, int> = 0> + constexpr bool bit_test(T a, std::size_t index) { + // TODO(ioxid): optimize + return detail::as_big_uint(detail::unsigned_or_throw(a)).bit_test(index); + } + + template, int> = 0> + constexpr bool is_zero(T a) { + return a == 0; + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops_powm.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops_powm.hpp new file mode 100644 index 0000000000..42fbefbed3 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_ops_powm.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include +#include + +#include "nil/crypto3/multiprecision/detail/big_uint/ops/powm.hpp" + +namespace nil::crypto3::multiprecision { + template>::is_integer && + std::numeric_limits>::is_integer && + std::is_integral_v, + int> = 0> + constexpr T3 powm(T1 &&b, T2 &&e, T3 m) { + // TODO(ioxid): optimize + return static_cast( + nil::crypto3::multiprecision::powm(std::forward(b), std::forward(e), + detail::as_big_uint(detail::unsigned_or_throw(m)))); + } +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_utils.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_utils.hpp new file mode 100644 index 0000000000..261cbcf568 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/integer_utils.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include + +namespace nil::crypto3::multiprecision::detail { + template && std::is_signed_v, int> = 0> + constexpr std::make_unsigned_t unsigned_abs(T x) { + std::make_unsigned_t ux = x; + return (x < 0) ? -ux : ux; // compare signed x, negate unsigned x + } + +} // namespace nil::crypto3::multiprecision::detail diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/intel_intrinsics.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/intel_intrinsics.hpp new file mode 100644 index 0000000000..6f8d9ed9ef --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/intel_intrinsics.hpp @@ -0,0 +1,56 @@ +#pragma once + +#include "nil/crypto3/multiprecision/detail/big_uint/storage.hpp" +#include "nil/crypto3/multiprecision/detail/config.hpp" +#include "nil/crypto3/multiprecision/detail/helper_macros.hpp" +#include "nil/crypto3/multiprecision/detail/int128.hpp" + +#if __has_include() + +#define NIL_CO3_MP_HAS_IMMINTRIN_H + +#include // IWYU pragma: keep + +#if defined(NIL_CO3_MP_HAS_INT128) + +namespace nil::crypto3::multiprecision::detail { + + NIL_CO3_MP_FORCEINLINE unsigned char addcarry_limb(unsigned char carry, limb_type a, + limb_type b, limb_type* p_result) { + using cast_type = unsigned long long; + + return NIL_CO3_MP_JOIN(_addcarry_u, 64)(carry, a, b, + reinterpret_cast(p_result)); + } + + NIL_CO3_MP_FORCEINLINE unsigned char subborrow_limb(unsigned char carry, limb_type a, + limb_type b, limb_type* p_result) { + using cast_type = unsigned long long; + + return NIL_CO3_MP_JOIN(_subborrow_u, 64)(carry, a, b, + reinterpret_cast(p_result)); + } + +} // namespace nil::crypto3::multiprecision::detail + +#else + +namespace nil::crypto3::multiprecision::detail { + + NIL_CO3_MP_FORCEINLINE unsigned char addcarry_limb(unsigned char carry, limb_type a, + limb_type b, limb_type* p_result) { + return NIL_CO3_MP_JOIN(_addcarry_u, 32)(carry, a, b, + reinterpret_cast(p_result)); + } + + NIL_CO3_MP_FORCEINLINE unsigned char subborrow_limb(unsigned char carry, limb_type a, + limb_type b, limb_type* p_result) { + return NIL_CO3_MP_JOIN(_subborrow_u, 32)(carry, a, b, + reinterpret_cast(p_result)); + } + +} // namespace nil::crypto3::multiprecision::detail + +#endif + +#endif diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/type_traits.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/type_traits.hpp new file mode 100644 index 0000000000..8841175bc5 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/detail/type_traits.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include +#include +#include + +namespace nil::crypto3::multiprecision::detail { + template + constexpr bool is_integer_v = + std::numeric_limits::is_specialized && std::numeric_limits::is_integer; + + template + constexpr bool is_unsigned_integer_v = is_integer_v && !std::numeric_limits::is_signed; + + template>, int> = 0> + constexpr decltype(auto) unsigned_or_throw(T&& a) { + return std::forward(a); + } + + template, int> = 0> + constexpr std::make_unsigned_t unsigned_or_throw(const T& a) { + if (a < 0) { + throw std::invalid_argument("nonnegative value expected"); + } + return static_cast>(a); + } +} // namespace nil::crypto3::multiprecision::detail diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/integer.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/integer.hpp new file mode 100644 index 0000000000..8225fdf3a2 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/integer.hpp @@ -0,0 +1,4 @@ +#pragma once + +#include "nil/crypto3/multiprecision/detail/integer_ops_base.hpp" // IWYU pragma: export +#include "nil/crypto3/multiprecision/detail/integer_ops_powm.hpp" // IWYU pragma: export diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/literals.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/literals.hpp new file mode 100644 index 0000000000..54cafd6dfa --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/literals.hpp @@ -0,0 +1,149 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2013 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt + +#pragma once + +#include +#include + +#include "nil/crypto3/multiprecision/big_uint.hpp" + +namespace nil::crypto3::multiprecision::literals { + template + constexpr auto operator"" _big_uint() { + constexpr std::size_t N = sizeof...(C); + static_assert(N > 2, "hex literal should start with 0x"); + constexpr std::array str{C...}; + constexpr auto result = + nil::crypto3::multiprecision::detail::parse_int_hex<(N - 2) * 4>({str.data(), N}); + return result; + } +} // namespace nil::crypto3::multiprecision::literals + +#define NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(Bits) \ + namespace nil::crypto3::multiprecision::literals { \ + template \ + constexpr auto operator"" _big_uint##Bits() { \ + constexpr std::size_t N = sizeof...(C); \ + constexpr std::array str{C...}; \ + constexpr auto result = \ + nil::crypto3::multiprecision::detail::parse_int({str.data(), N}); \ + return result; \ + } \ + } + +// This is a comprehensive list of all bitlengths we use in algebra. +// Custom ones can be defined using this macro in every place where they are used. +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(4) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(7) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(8) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(13) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(15) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(16) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(17) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(18) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(64) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(92) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(94) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(128) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(130) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(149) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(150) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(151) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(152) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(160) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(161) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(163) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(164) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(177) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(178) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(179) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(180) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(181) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(182) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(183) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(191) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(192) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(205) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(206) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(222) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(223) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(224) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(225) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(226) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(239) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(248) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(249) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(250) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(251) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(252) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(253) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(254) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(255) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(256) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(257) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(263) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(264) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(280) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(281) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(292) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(293) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(294) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(295) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(296) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(297) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(298) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(315) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(316) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(319) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(320) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(330) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(331) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(374) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(375) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(376) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(377) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(378) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(379) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(380) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(381) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(384) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(503) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(504) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(507) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(512) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(515) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(516) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(521) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(546) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(577) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(578) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(585) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(595) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(636) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(706) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(707) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(758) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(753) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(759) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(761) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(859) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(860) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(893) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(894) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(913) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(1024) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(1490) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(1536) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(2048) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(2790) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(3072) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(4096) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(4269) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(4314) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(6144) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(8192) + +using namespace nil::crypto3::multiprecision::literals; diff --git a/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/miller_rabin.hpp b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/miller_rabin.hpp new file mode 100644 index 0000000000..555745e047 --- /dev/null +++ b/crypto3/libs/multiprecision/include/nil/crypto3/multiprecision/miller_rabin.hpp @@ -0,0 +1,187 @@ +/////////////////////////////////////////////////////////////// +// Copyright 2012 John Maddock. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt + +#pragma once + +#include +#include +#include +#include +#include +#include + +#include + +#include "nil/crypto3/multiprecision/big_uint.hpp" +#include "nil/crypto3/multiprecision/detail/assert.hpp" +#include "nil/crypto3/multiprecision/integer.hpp" + +namespace nil::crypto3::multiprecision { + namespace detail { + template + T2 integer_modulus(const T1& n, const T2& m) { + // TODO(ioxid): optimize this + return static_cast(n % m); + } + + template + bool check_small_factors(const I& n) { + constexpr std::uint32_t small_factors1[] = {3u, 5u, 7u, 11u, 13u, 17u, 19u, 23u}; + constexpr std::uint32_t pp1 = 223092870u; + + std::uint32_t m1 = integer_modulus(n, pp1); + + for (std::size_t i = 0; i < sizeof(small_factors1) / sizeof(small_factors1[0]); ++i) { + NIL_CO3_MP_ASSERT(pp1 % small_factors1[i] == 0); + if (m1 % small_factors1[i] == 0) { + return false; + } + } + + constexpr std::uint32_t small_factors2[] = {29u, 31u, 37u, 41u, 43u, 47u}; + constexpr std::uint32_t pp2 = 2756205443u; + + m1 = integer_modulus(n, pp2); + + for (std::size_t i = 0; i < sizeof(small_factors2) / sizeof(small_factors2[0]); ++i) { + NIL_CO3_MP_ASSERT(pp2 % small_factors2[i] == 0); + if (m1 % small_factors2[i] == 0) { + return false; + } + } + + constexpr std::uint32_t small_factors3[] = {53u, 59u, 61u, 67u, 71u}; + constexpr std::uint32_t pp3 = 907383479u; + + m1 = integer_modulus(n, pp3); + + for (std::size_t i = 0; i < sizeof(small_factors3) / sizeof(small_factors3[0]); ++i) { + NIL_CO3_MP_ASSERT(pp3 % small_factors3[i] == 0); + if (m1 % small_factors3[i] == 0) { + return false; + } + } + + constexpr std::uint32_t small_factors4[] = {73u, 79u, 83u, 89u, 97u}; + constexpr std::uint32_t pp4 = 4132280413u; + + m1 = integer_modulus(n, pp4); + + for (std::size_t i = 0; i < sizeof(small_factors4) / sizeof(small_factors4[0]); ++i) { + NIL_CO3_MP_ASSERT(pp4 % small_factors4[i] == 0); + if (m1 % small_factors4[i] == 0) { + return false; + } + } + + constexpr std::uint32_t small_factors5[6][4] = { + {101u, 103u, 107u, 109u}, {113u, 127u, 131u, 137u}, {139u, 149u, 151u, 157u}, + {163u, 167u, 173u, 179u}, {181u, 191u, 193u, 197u}, {199u, 211u, 223u, 227u}}; + constexpr std::uint32_t pp5[6] = {121330189u, + 113u * 127u * 131u * 137u, + 139u * 149u * 151u * 157u, + 163u * 167u * 173u * 179u, + 181u * 191u * 193u * 197u, + 199u * 211u * 223u * 227u}; + + for (std::size_t k = 0; k < std::size(pp5); ++k) { + m1 = integer_modulus(n, pp5[k]); + + for (std::size_t i = 0; i < 4; ++i) { + NIL_CO3_MP_ASSERT(pp5[k] % small_factors5[k][i] == 0); + if (m1 % small_factors5[k][i] == 0) { + return false; + } + } + } + return true; + } + + inline bool is_small_prime(std::size_t n) { + constexpr unsigned char p[] = { + 3u, 5u, 7u, 11u, 13u, 17u, 19u, 23u, 29u, 31u, 37u, 41u, + 43u, 47u, 53u, 59u, 61u, 67u, 71u, 73u, 79u, 83u, 89u, 97u, + 101u, 103u, 107u, 109u, 113u, 127u, 131u, 137u, 139u, 149u, 151u, 157u, + 163u, 167u, 173u, 179u, 181u, 191u, 193u, 197u, 199u, 211u, 223u, 227u}; + for (std::size_t i = 0; i < std::size(p); ++i) { + if (n == p[i]) { + return true; + } + } + return false; + } + } // namespace detail + + template + typename std::enable_if::is_integer, bool>::type miller_rabin_test( + const I& n, std::size_t trials, Engine& gen) { + using number_type = I; + + if (n == 2) { + return true; // Trivial special case. + } + if (bit_test(n, 0) == 0) { + return false; // n is even + } + if (n <= 227) { + return detail::is_small_prime(static_cast(n)); + } + + if (!detail::check_small_factors(n)) { + return false; + } + + number_type nm1 = n - 1u; + // + // Begin with a single Fermat test - it excludes a lot of candidates: + // + number_type q(228), x, + y; // We know n is greater than this, as we've excluded small factors + x = powm(q, nm1, n); + if (x != 1u) { + return false; + } + + q = n - 1u; + std::size_t k = lsb(q); + q >>= k; + + // Declare our random number generator: + boost::random::uniform_int_distribution dist(2u, n - 2u); + + // + // Execute the trials: + // + for (std::size_t i = 0; i < trials; ++i) { + x = dist(gen); + y = powm(x, q, n); + std::size_t j = 0; + while (true) { + if (y == nm1) { + break; + } + if (y == 1) { + if (j == 0) { + break; + } + return false; // test failed + } + if (++j == k) { + return false; // failed + } + y = powm(y, 2, n); + } + } + return true; // Yeheh! probably prime. + } + + template + typename std::enable_if::is_integer, bool>::type miller_rabin_test( + const I& x, std::size_t trials) { + static std::mt19937 gen; + return miller_rabin_test(x, trials, gen); + } + +} // namespace nil::crypto3::multiprecision diff --git a/crypto3/libs/multiprecision/test/CMakeLists.txt b/crypto3/libs/multiprecision/test/CMakeLists.txt index e2e050e90c..155a181b1f 100644 --- a/crypto3/libs/multiprecision/test/CMakeLists.txt +++ b/crypto3/libs/multiprecision/test/CMakeLists.txt @@ -8,6 +8,7 @@ #---------------------------------------------------------------------------# add_custom_target(${CURRENT_PROJECT_NAME}_test_suite_modular_cpp_int_tests) +add_custom_target(${CURRENT_PROJECT_NAME}_test_suite_big_int_tests) cm_test_link_libraries( ${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} @@ -26,7 +27,7 @@ macro(define_runtime_multiprecision_test name) ${Boost_INCLUDE_DIRS} ) - set_target_properties(${test_name} PROPERTIES CXX_STANDARD 17 + set_target_properties(${test_name} PROPERTIES CXX_STANDARD 23 CXX_STANDARD_REQUIRED TRUE) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") @@ -48,6 +49,16 @@ macro(define_modular_cpp_int_test name) endmacro(define_modular_cpp_int_test) +macro(define_big_int_test name) + define_runtime_multiprecision_test(${name}) + + set(test_name "${CURRENT_PROJECT_NAME}_${name}_test") + target_compile_definitions(${test_name} PUBLIC -DTEST_CPP_INT) + # target_link_libraries(${test_name} no_eh_support) + add_dependencies(${CURRENT_PROJECT_NAME}_test_suite_big_int_tests ${test_name}) + +endmacro(define_big_int_test) + set(RUNTIME_TESTS_NAMES "inverse" "jacobi" @@ -59,6 +70,17 @@ set(MODULAR_TESTS_NAMES "modular_adaptor_fixed" ) +set(BIG_INT_TESTS_NAMES + "big_int" + "big_int_comparison" + "big_int_inverse" + "big_int_jacobi" + "big_int_miller_rabin" + "big_int_modular" + "big_int_modular_comprehensive" + "big_int_ressol" +) + foreach(TEST_NAME ${RUNTIME_TESTS_NAMES}) define_runtime_multiprecision_test(${TEST_NAME}) endforeach() @@ -66,3 +88,7 @@ endforeach() foreach(TEST_NAME ${MODULAR_TESTS_NAMES}) define_modular_cpp_int_test(${TEST_NAME}) endforeach() + +foreach(TEST_NAME ${BIG_INT_TESTS_NAMES}) + define_big_int_test(${TEST_NAME}) +endforeach() diff --git a/crypto3/libs/multiprecision/test/arithmetic_non_matching_bitlength_numbers.cpp b/crypto3/libs/multiprecision/test/arithmetic_non_matching_bitlength_numbers.cpp index 42fbe5f4f3..c2aceb858b 100644 --- a/crypto3/libs/multiprecision/test/arithmetic_non_matching_bitlength_numbers.cpp +++ b/crypto3/libs/multiprecision/test/arithmetic_non_matching_bitlength_numbers.cpp @@ -28,10 +28,10 @@ // We need cpp_int to compare to it. #include -#include -#include -#include -#include +#include +#include +#include +#include using namespace boost::multiprecision; diff --git a/crypto3/libs/multiprecision/test/big_int.cpp b/crypto3/libs/multiprecision/test/big_int.cpp new file mode 100644 index 0000000000..b4403f4ee2 --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int.cpp @@ -0,0 +1,238 @@ +#define BOOST_TEST_MODULE big_int_test + +#include +#include +#include +#include + +#include "nil/crypto3/multiprecision/big_uint.hpp" +#include "nil/crypto3/multiprecision/literals.hpp" + +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(32) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(33) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(36) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(37) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(60) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(83) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(85) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(133) + +using namespace nil::crypto3::multiprecision::literals; + +BOOST_AUTO_TEST_SUITE(smoke) + +BOOST_AUTO_TEST_CASE(construct_constexpr) { + constexpr nil::crypto3::multiprecision::big_uint<60> a = 0x123_big_uint60; +} + +BOOST_AUTO_TEST_CASE(to_string_zero) { BOOST_CHECK_EQUAL((0x0_big_uint60).str(), "0x0"); } + +BOOST_AUTO_TEST_CASE(to_string_trivial) { BOOST_CHECK_EQUAL((0x1_big_uint60).str(), "0x1"); } + +BOOST_AUTO_TEST_CASE(to_string_small) { BOOST_CHECK_EQUAL((0x20_big_uint60).str(), "0x20"); } + +BOOST_AUTO_TEST_CASE(to_string_medium) { + constexpr auto a = 0x123456789ABCDEF1234321_big_uint85; + BOOST_CHECK_EQUAL(a.str(), "0x123456789ABCDEF1234321"); +} + +BOOST_AUTO_TEST_CASE(to_string_big) { + constexpr auto a = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001_big_uint224; + BOOST_CHECK_EQUAL(a.str(), "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"); +} + +BOOST_AUTO_TEST_CASE(to_string_decimal_zero) { + BOOST_CHECK_EQUAL((0x0_big_uint60).str(std::ios_base::dec), "0"); +} + +BOOST_AUTO_TEST_CASE(to_string_decimal_trivial) { + BOOST_CHECK_EQUAL((0x1_big_uint60).str(std::ios_base::dec), "1"); +} + +BOOST_AUTO_TEST_CASE(to_string_decimal_small) { + BOOST_CHECK_EQUAL((0x20_big_uint60).str(std::ios_base::dec), "32"); +} + +BOOST_AUTO_TEST_CASE(to_string_decimal_medium) { + constexpr auto a = 0x123456789ABCDEF1234321_big_uint85; + BOOST_CHECK_EQUAL(a.str(std::ios_base::dec), "22007822920628982396437281"); +} + +BOOST_AUTO_TEST_CASE(to_string_decimal_big) { + constexpr auto a = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001_big_uint224; + BOOST_CHECK_EQUAL(a.str(std::ios_base::dec), + "26959946667150639794667015087019630673557916260026308143510066298881"); +} + +BOOST_AUTO_TEST_CASE(ops) { + nil::crypto3::multiprecision::big_uint<60> a = 2u, b; + + auto c1{a}; + auto c2{std::move(a)}; // NOLINT + auto c3{2}; + auto c4{2u}; + b = a; + b = std::move(a); // NOLINT + b = 2; + b = 2u; + +#define TEST_BINARY_OP(op) \ + do { \ + b = 32u; \ + a = 4; \ + b = a op a; \ + b = 2 op a; \ + b = a op 2; \ + b = 2u op a; \ + b = a op 2u; \ + b = 32u; \ + b op## = a; \ + b op## = 2; \ + b op## = 2u; \ + } while (false) + + TEST_BINARY_OP(+); + ++b; + b++; + b = +b; + + TEST_BINARY_OP(-); + --b; + b--; + b = -b; + + TEST_BINARY_OP(%); + TEST_BINARY_OP(/); + TEST_BINARY_OP(*); + + TEST_BINARY_OP(&); + TEST_BINARY_OP(|); + TEST_BINARY_OP(^); +#undef TEST_BINARY_OP + + b = ~a; +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(addition) + +BOOST_AUTO_TEST_CASE(simple) { BOOST_CHECK_EQUAL(0x2_big_uint60 + 0x3_big_uint60, 0x5_big_uint60); } + +BOOST_AUTO_TEST_CASE(wraps) { + BOOST_CHECK_EQUAL(0xFFFFFFFF_big_uint32 + 0x2_big_uint32, 0x00000001_big_uint32); +} + +BOOST_AUTO_TEST_CASE(wraps_rev) { + BOOST_CHECK_EQUAL(0x2_big_uint32 + 0xFFFFFFFF_big_uint32, 0x00000001_big_uint32); +} + +BOOST_AUTO_TEST_CASE(multilimb) { + BOOST_CHECK_EQUAL(0xAFFFFFFFF_big_uint36 + 0x2_big_uint36, 0xB00000001_big_uint36); +} + +BOOST_AUTO_TEST_CASE(multilimb_rev) { + BOOST_CHECK_EQUAL(0x2_big_uint36 + 0xAFFFFFFFF_big_uint36, 0xB00000001_big_uint36); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(multiplication) + +BOOST_AUTO_TEST_CASE(simple) { BOOST_CHECK_EQUAL(0x2_big_uint60 * 0x3_big_uint60, 0x6_big_uint60); } + +BOOST_AUTO_TEST_CASE(wraps) { + BOOST_CHECK_EQUAL(0xFFFFFFFF_big_uint32 * 0x2_big_uint32, 0xFFFFFFFE_big_uint32); +} + +BOOST_AUTO_TEST_CASE(multilimb) { + BOOST_CHECK_EQUAL(0xAFFFFFFFF_big_uint36 * 0x2_big_uint36, 0x5FFFFFFFE_big_uint36); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(division) + +BOOST_AUTO_TEST_CASE(simple) { BOOST_CHECK_EQUAL(0x7_big_uint60 / 0x2_big_uint60, 0x3_big_uint60); } + +BOOST_AUTO_TEST_CASE(multilimb) { + BOOST_CHECK_EQUAL(0xFFFFFFFF_big_uint36 / 0x2_big_uint36, 0x7FFFFFFF_big_uint36); +} + +BOOST_AUTO_TEST_CASE(failing_small) { + BOOST_CHECK_EQUAL(0x442a8c9973ac96aec_big_uint / 0x1874dfece1887_big_uint, 0x2c988_big_uint); +} + +BOOST_AUTO_TEST_CASE(big) { + BOOST_CHECK_EQUAL( + 0x1BDC9C98EE1BE3D7952E78252011D4D4D5_big_uint133 / 0x7DDD38BA708356E41324F_big_uint83, + 0x38AB4C1B9E373_big_uint133); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(modulus) + +BOOST_AUTO_TEST_CASE(simple) { BOOST_CHECK_EQUAL(0x7_big_uint60 % 0x4_big_uint60, 0x3_big_uint60); } + +BOOST_AUTO_TEST_CASE(multilimb) { + BOOST_CHECK_EQUAL(0xFFFFFFFF_big_uint36 % 0x7_big_uint36, 0x3_big_uint36); +} + +BOOST_AUTO_TEST_CASE(failing) { + BOOST_CHECK_EQUAL( + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_big_uint256 % 2u, 1u); +} + +BOOST_AUTO_TEST_CASE(failing2) { + BOOST_CHECK_EQUAL( + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_big_uint256 % + 0x200000000_big_uint, + 0x100000001_big_uint); +} + +BOOST_AUTO_TEST_CASE(failing3) { + BOOST_CHECK_EQUAL(0xFFFFFFFFFFFFFFFFFFFFFFFF_big_uint % 0x100000000FFFFFFFF_big_uint, + 0x1fffffffe_big_uint); +} + +BOOST_AUTO_TEST_CASE(big) { + BOOST_CHECK_EQUAL( + 0x1BDC9C98EE1BE3D7952E78252011D4D4D5_big_uint133 % 0x7DDD38BA708356E41324F_big_uint83, + 0xE60EDD894AC4D0D82E58_big_uint133); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(convert) + +BOOST_AUTO_TEST_CASE(to_uint64_t) { + std::uint64_t a = static_cast(0x123456789ABCDEF_big_uint64); + BOOST_CHECK_EQUAL(a, 0x123456789ABCDEF); +} + +BOOST_AUTO_TEST_CASE(from_uint64_t) { + nil::crypto3::multiprecision::big_uint<64> a = static_cast(0x123456789ABCDEFull); + BOOST_CHECK_EQUAL(a, 0x123456789ABCDEF_big_uint64); +} + +BOOST_AUTO_TEST_CASE(from_int64_t) { + nil::crypto3::multiprecision::big_uint<64> a = static_cast(0x123456789ABCDEFull); + BOOST_CHECK_EQUAL(a, 0x123456789ABCDEF_big_uint64); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(truncation) + +BOOST_AUTO_TEST_CASE(conversion_to_shorter_number) { + using standart_number = nil::crypto3::multiprecision::big_uint<256>; + using short_number = nil::crypto3::multiprecision::big_uint<128>; + constexpr standart_number x = + 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_big_uint256; + short_number s = x.truncate<128>(); + // 2nd half of the number must stay. + BOOST_CHECK_EQUAL(s, 0xfffffffffffffffffffffffefffffc2f_big_uint128); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/multiprecision/test/big_int_comparison.cpp b/crypto3/libs/multiprecision/test/big_int_comparison.cpp new file mode 100644 index 0000000000..a3ad8a59f7 --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int_comparison.cpp @@ -0,0 +1,94 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Martun Karapetyan +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE big_int_comparison_test + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "nil/crypto3/multiprecision/big_uint.hpp" + +using namespace nil::crypto3::multiprecision; + +template +std::vector as_vector(const boost::property_tree::ptree &pt) { + std::vector r; + for (const auto &item : pt) { + r.push_back(item.second); + } + return r; +} + +template +auto test_dataset(const std::string &test_name) { + static std::string test_data = std::string(TEST_DATA_DIR) + R"(comparison.json)"; + boost::property_tree::ptree test_dataset; + boost::property_tree::read_json(test_data, test_dataset); + + return as_vector(test_dataset.get_child(test_name)); +} + +template +struct ComparisonSample { + ComparisonSample(const boost::property_tree::ptree &sample) : ptree(sample) { + a = sample.get("a"); + b = sample.get("b"); + cmp_a_b = sample.get("cmp_a_b"); + } + + friend std::ostream &operator<<(std::ostream &os, const ComparisonSample &sample) { + boost::property_tree::json_parser::write_json(os, sample.ptree); + return os; + } + + big_uint a; + big_uint b; + int cmp_a_b; + boost::property_tree::ptree ptree; +}; + +template +void test_comparison(const Sample &sample) { + const auto &a = sample.a; + const auto &b = sample.b; + const auto &cmp_a_b = sample.cmp_a_b; + BOOST_CHECK_EQUAL(a > b, cmp_a_b > 0); + BOOST_CHECK_EQUAL(a >= b, cmp_a_b >= 0); + BOOST_CHECK_EQUAL(a == b, cmp_a_b == 0); + BOOST_CHECK_EQUAL(a < b, cmp_a_b < 0); + BOOST_CHECK_EQUAL(a <= b, cmp_a_b <= 0); + BOOST_CHECK_EQUAL(a != b, cmp_a_b != 0); +} + +BOOST_AUTO_TEST_SUITE(fields_manual_tests) + +BOOST_DATA_TEST_CASE(test_comparison_12_17, + (test_dataset>("test_comparison_12_17"))) { + test_comparison(sample); +} + +BOOST_DATA_TEST_CASE(test_comparison_260_130, + (test_dataset>("test_comparison_260_130"))) { + test_comparison(sample); +} + +BOOST_DATA_TEST_CASE(test_comparison_128_256, + (test_dataset>("test_comparison_128_256"))) { + test_comparison(sample); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/multiprecision/test/big_int_inverse.cpp b/crypto3/libs/multiprecision/test/big_int_inverse.cpp new file mode 100644 index 0000000000..f73a359a69 --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int_inverse.cpp @@ -0,0 +1,395 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2018-2020 Pavel Kharitonov +// Copyright (c) 2021 Aleksei Moskvin +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE big_int_inverse_test + +#include + +#include +#include +#include + +#include "nil/crypto3/multiprecision/big_mod.hpp" +#include "nil/crypto3/multiprecision/big_uint.hpp" +#include "nil/crypto3/multiprecision/literals.hpp" + +using namespace nil::crypto3::multiprecision; + +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(6) + +template +void test_inverse_extended_euclidean_algorithm() { + BOOST_CHECK_EQUAL( + inverse_extended_euclidean_algorithm(T(5), T("0x7fffffffffffffffffffffffffffffff")), + T("0x33333333333333333333333333333333")); + BOOST_CHECK_EQUAL( + inverse_extended_euclidean_algorithm(T(333), T("0x7fffffffffffffffffffffffffffffff")), + T("0x17d4f2ee517d4f2ee517d4f2ee517d4f")); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T("0x435b21e35ccd62dbdbafa1368cf742f0"), + T("0x7fffffffffffffffffffffffffffffff")), + T("0x604ddb74e5a55e559a7320e45b06eaf6")); + BOOST_CHECK_EQUAL( + inverse_extended_euclidean_algorithm( + T(2), T("0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), + T("0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000")); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T(3), T(8)), T(3)); + BOOST_CHECK_THROW(inverse_extended_euclidean_algorithm(T(46), T(207)), std::invalid_argument); + BOOST_CHECK_THROW(inverse_extended_euclidean_algorithm(T(2), T(2)), std::invalid_argument); + BOOST_CHECK_THROW(inverse_extended_euclidean_algorithm(T(0), T(2)), std::invalid_argument); + BOOST_CHECK_THROW(inverse_extended_euclidean_algorithm(T(46), T(46)), std::invalid_argument); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T(1), T(7)), T(1)); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T(35), T(118)), T(27)); + BOOST_CHECK_THROW(inverse_extended_euclidean_algorithm(T(37), T(37)), std::invalid_argument); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T(32), T(247)), T(193)); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T(3), T(232)), T(155)); + + BOOST_CHECK_EQUAL( + inverse_extended_euclidean_algorithm( + T("256992387993922882115519242002267204163958280694902854777438773165028812741820300742" + "384101" + "620467227297951260702776745365693102268609333941403372929142489383748076291"), + T("310556067329850632847208938574658589632291100674077275160516075249922714838542485036" + "214015" + "8165019680645739648726058090243814223511639161631852729287604717869259565828")), + T("2322484593360248972803085811686365806060063797313230509497970163285203519904646342173323" + "688226" + "147654544918783691327115436052292182385106099615339567513136063879840431")); + + BOOST_CHECK_EQUAL( + inverse_extended_euclidean_algorithm( + T("657900513264442578215729259525804042708991731028255426638688946278845827095715186772" + "097484" + "16019817305674876843604308670298295897660589296995641401495105646770364032950"), + T("146059874272782860583686068115674600616627249438711269370889274434354805551497286303" + "947620" + "1659720247220048664250204314648520085411164461712526657028588699682983099362771")), + T("3701344688092353558099310214964185602579277616517826314317231208222417072861266226192312" + "282752" + "10678415132318220494260963802381448709723310690465171935975287188943190781")); + + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T(3), T(0x10)), T(11)); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(T(43000466091), T(0x10000000000)), + T(140404367363)); + + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm( + T("3329223706171052463206866408355190852145308853551222855374206553291583" + "6412003628111698671675220667324272" + "5944106904545859091557017307727326666832362641891029072983311591760876" + "2612451607036836604560196526748133" + "2952294823154321608619569856617204150085028173765891223691691685030517" + "0057553436136073435791550700526779" + "1266056164843197115173542457409178397682412186017844044878477733706673" + "6659493124795020814172868481356070" + "6694079674126165187970576121654781364910559498699000784756722078722425" + "3724912309650653332895570458720843" + "3224850656811897686972917521497485758932335208567118381404016914945323" + "3350227887942508765678216349436356" + "7584633848194784070822245649557468578497368723157561724530746784741768" + "6461029368632606300888825458750471" + "73194357829837349405264332156553159"), + T("5159669275902268897019683770634129859849131442089512209466255369748647" + "8852950434581004530951396375324897" + "3237934933418399835900527154085143847573539006016005510145975736902509" + "4548935216928274885474920588457238" + "9321992128261328481129830302072287292303501430702452146150323300983736" + "0681685755548737891159735617529596" + "3296209024100980888874174104384926439773409352855895683162800486061893" + "6254613392484195923653331976713963" + "9022384965245831654887217363203207214249335996119270164515039005157887" + "5246900773560274606831152842526302" + "3211977032707524224960793107608042288596827341046613333670880853546357" + "0182780841768637479016464266039055" + "7925243983808216928421220094838103017958334974205040660858707963225716" + "1952224606791379941232782765846637" + "12976241848458904056941218720227786752")), + T("16169765086855986127154046155397117295914963038387272783617457684599127447" + "6610311080533553178926047190203266" + "85568238777817971191773697446756550362276938623879013359293805261585253356" + "1719117119940626105914149272955096" + "43833787555922713773309241786955753178554821984186872072841194724366388916" + "5526728787046894739482800359519447" + "64596203739541946184136389849598657786471023022865585926888106336640072640" + "1157990917652680450814220027329982" + "28525926769366297380133831033446426381884582602684819819652397562413743816" + "5546650367370131035732951388159175" + "97189009924722836031296505773554187289297878370713302855264475968171422470" + "4381891573964406129272600659255700" + "50082441202586929437053251315496103922094819482313181774501817762229043061" + "5352105032422136121552433314291445" + "5291939319")); + BOOST_CHECK_EQUAL( + inverse_extended_euclidean_algorithm( + T(65279), T("0x100000000000000000000000000000000000000000000000000000000000000000000000" + "0000000000000000" + "00000000000000000000000000000000000000000000000000000000000")), + T("2136191453734241471355287191702994357470910407859959447816962783332820558450714636705703" + "817069" + "8710253677755075362127788711957331760388539866898398399344480664991941861081743615")); +} + +template +void test_inverse_mod() { + BOOST_CHECK_EQUAL(inverse_mod(T(5), T("0x7fffffffffffffffffffffffffffffff")), + T("0x33333333333333333333333333333333")); + BOOST_CHECK_EQUAL(inverse_mod(T(333), T("0x7fffffffffffffffffffffffffffffff")), + T("0x17d4f2ee517d4f2ee517d4f2ee517d4f")); + BOOST_CHECK_EQUAL(inverse_mod(T("0x435b21e35ccd62dbdbafa1368cf742f0"), + T("0x7fffffffffffffffffffffffffffffff")), + T("0x604ddb74e5a55e559a7320e45b06eaf6")); + BOOST_CHECK_EQUAL( + inverse_mod(T(2), + T("0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), + T("0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000" + "0000000000000000000000000")); + BOOST_CHECK_EQUAL(inverse_mod(T(3), T(8)), T(3)); + BOOST_CHECK_EQUAL(inverse_mod(T(46), T(207)), T(0)); + BOOST_CHECK_EQUAL(inverse_mod(T(2), T(2)), T(0)); + BOOST_CHECK_EQUAL(inverse_mod(T(0), T(2)), T(0)); + BOOST_CHECK_EQUAL(inverse_mod(T(46), T(46)), T(0)); + BOOST_CHECK_EQUAL(inverse_mod(T(1), T(7)), T(1)); + BOOST_CHECK_EQUAL(inverse_mod(T(35), T(118)), T(27)); + BOOST_CHECK_EQUAL(inverse_mod(T(37), T(37)), T(0)); + BOOST_CHECK_EQUAL(inverse_mod(T(32), T(247)), T(193)); + BOOST_CHECK_EQUAL(inverse_mod(T(3), T(232)), T(155)); + + BOOST_CHECK_EQUAL( + inverse_mod( + T("256992387993922882115519242002267204163958280694902854777438773165028812741820300742" + "384101" + "620467227297951260702776745365693102268609333941403372929142489383748076291"), + T("310556067329850632847208938574658589632291100674077275160516075249922714838542485036" + "214015" + "8165019680645739648726058090243814223511639161631852729287604717869259565828")), + T("2322484593360248972803085811686365806060063797313230509497970163285203519904646342173323" + "688226" + "147654544918783691327115436052292182385106099615339567513136063879840431")); + + BOOST_CHECK_EQUAL( + inverse_mod( + T("657900513264442578215729259525804042708991731028255426638688946278845827095715186772" + "097484" + "16019817305674876843604308670298295897660589296995641401495105646770364032950"), + T("146059874272782860583686068115674600616627249438711269370889274434354805551497286303" + "947620" + "1659720247220048664250204314648520085411164461712526657028588699682983099362771")), + T("3701344688092353558099310214964185602579277616517826314317231208222417072861266226192312" + "282752" + "10678415132318220494260963802381448709723310690465171935975287188943190781")); + + BOOST_CHECK_EQUAL(inverse_mod(T(3), T(0x10)), T(11)); + BOOST_CHECK_EQUAL(inverse_mod(T(43000466091), T(0x10000000000)), T(140404367363)); + + BOOST_CHECK_EQUAL(inverse_mod(T("33292237061710524632068664083551908521453088535512228553742065" + "532915836412003628111698671675220667324272" + "59441069045458590915570173077273266668323626418910290729833115" + "917608762612451607036836604560196526748133" + "29522948231543216086195698566172041500850281737658912236916916" + "850305170057553436136073435791550700526779" + "12660561648431971151735424574091783976824121860178440448784777" + "337066736659493124795020814172868481356070" + "66940796741261651879705761216547813649105594986990007847567220" + "787224253724912309650653332895570458720843" + "32248506568118976869729175214974857589323352085671183814040169" + "149453233350227887942508765678216349436356" + "75846338481947840708222456495574685784973687231575617245307467" + "847417686461029368632606300888825458750471" + "73194357829837349405264332156553159"), + T("51596692759022688970196837706341298598491314420895122094662553" + "697486478852950434581004530951396375324897" + "32379349334183998359005271540851438475735390060160055101459757" + "369025094548935216928274885474920588457238" + "93219921282613284811298303020722872923035014307024521461503233" + "009837360681685755548737891159735617529596" + "32962090241009808888741741043849264397734093528558956831628004" + "860618936254613392484195923653331976713963" + "90223849652458316548872173632032072142493359961192701645150390" + "051578875246900773560274606831152842526302" + "32119770327075242249607931076080422885968273410466133336708808" + "535463570182780841768637479016464266039055" + "79252439838082169284212200948381030179583349742050406608587079" + "632257161952224606791379941232782765846637" + "12976241848458904056941218720227786752")), + T("16169765086855986127154046155397117295914963038387272783617457684599127447" + "6610311080533553178926047190203266" + "85568238777817971191773697446756550362276938623879013359293805261585253356" + "1719117119940626105914149272955096" + "43833787555922713773309241786955753178554821984186872072841194724366388916" + "5526728787046894739482800359519447" + "64596203739541946184136389849598657786471023022865585926888106336640072640" + "1157990917652680450814220027329982" + "28525926769366297380133831033446426381884582602684819819652397562413743816" + "5546650367370131035732951388159175" + "97189009924722836031296505773554187289297878370713302855264475968171422470" + "4381891573964406129272600659255700" + "50082441202586929437053251315496103922094819482313181774501817762229043061" + "5352105032422136121552433314291445" + "5291939319")); + BOOST_CHECK_EQUAL( + inverse_mod(T(65279), T("0x1000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000" + "00000000000000000000000000000000000000000000000000000000000")), + T("2136191453734241471355287191702994357470910407859959447816962783332820558450714636705703" + "817069" + "8710253677755075362127788711957331760388539866898398399344480664991941861081743615")); +} + +template +void test_monty_inverse() { + // test for monty_inverse + BOOST_CHECK_EQUAL(monty_inverse(T(12), T(5), T(5)), T(1823)); + BOOST_CHECK_EQUAL(monty_inverse(T(10), T(37), T(1)), T(26)); + BOOST_CHECK_EQUAL(monty_inverse(T(3), T(2), T(3)), T(3)); + BOOST_CHECK_EQUAL(monty_inverse(T(3), T(4), T(2)), T(11)); + BOOST_CHECK_EQUAL(monty_inverse(T(4), T(7), T(2)), T(37)); + BOOST_CHECK_EQUAL(monty_inverse(T(32), T(247), T(1)), T(193)); + BOOST_CHECK_EQUAL(monty_inverse(T(3), T(7), T(7)), T(549029)); + BOOST_CHECK_EQUAL(monty_inverse(T(5317589), T(23), T(8)), T(32104978469)); +} + +BOOST_AUTO_TEST_SUITE(runtime_tests) + +BOOST_AUTO_TEST_CASE(inverse_tests) { + // test_monty_inverse>(); + // test_inverse_mod>(); + test_inverse_extended_euclidean_algorithm>(); +} + +BOOST_AUTO_TEST_CASE(test_big_mod_6_bits) { + auto modular = big_mod_rt<6>(10_big_uint6, 37_big_uint6); + BOOST_CHECK_EQUAL(inverse_extended_euclidean_algorithm(modular).base(), 26u); +} + +// BOOST_AUTO_TEST_CASE(test_cpp_int_modular_backend_6_bits) { +// using namespace boost::multiprecision; +// using T = boost::multiprecision::cpp_int_modular_modular_backend<6>; +// +// modular = number>>(3, 8); +// modular.backend().mod_data().adjust_regular(res.backend(), +// inverse_extended_euclidean_algorithm(modular).backend().base_data()); +// BOOST_CHECK_EQUAL(number(res.backend()), number(3)); +// +// modular = number>>(3, 16); +// modular.backend().mod_data().adjust_regular(res.backend(), +// inverse_extended_euclidean_algorithm(modular).backend().base_data()); +// BOOST_CHECK_EQUAL(number(res.backend()), number(11)); +// +// modular = number>>( +// 65279, +// "0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +// "000000000000000000000000000000000000000"); +// modular.backend().mod_data().adjust_regular(res.backend(), +// inverse_extended_euclidean_algorithm(modular).backend().base_data()); +// BOOST_CHECK_EQUAL( +// number(res.backend()), +// number("213619145373424147135528719170299435747091040785995944781696278333282055845071463670570381706987102536" +// "77755075362127788711957331760388539866898398399344480664991941861081743615")); +// +// modular = number>>( +// "33292237061710524632068664083551908521453088535512228553742065532915836412003628111698671675220667324272594410" +// "69045458590915570173077273266668323626418910290729833115917608762612451607036836604560196526748133295229482315" +// "43216086195698566172041500850281737658912236916916850305170057553436136073435791550700526779126605616484319711" +// "51735424574091783976824121860178440448784777337066736659493124795020814172868481356070669407967412616518797057" +// "61216547813649105594986990007847567220787224253724912309650653332895570458720843322485065681189768697291752149" +// "74857589323352085671183814040169149453233350227887942508765678216349436356758463384819478407082224564955746857" +// "8497368723157561724530746784741768646102936863260630088882545875047173194357829837349405264332156553159", +// "51596692759022688970196837706341298598491314420895122094662553697486478852950434581004530951396375324897323793" +// "49334183998359005271540851438475735390060160055101459757369025094548935216928274885474920588457238932199212826" +// "13284811298303020722872923035014307024521461503233009837360681685755548737891159735617529596329620902410098088" +// "88741741043849264397734093528558956831628004860618936254613392484195923653331976713963902238496524583165488721" +// "73632032072142493359961192701645150390051578875246900773560274606831152842526302321197703270752422496079310760" +// "80422885968273410466133336708808535463570182780841768637479016464266039055792524398380821692842122009483810301" +// "7958334974205040660858707963225716195222460679137994123278276584663712976241848458904056941218720227786752"); +// modular.backend().mod_data().adjust_regular(res.backend(), +// inverse_extended_euclidean_algorithm(modular).backend().base_data()); +// BOOST_CHECK_EQUAL( +// number(res.backend()), +// number("161697650868559861271540461553971172959149630383872727836174576845991274476610311080533553178926047190" +// "203266855682387778179711917736974467565503622769386238790133592938052615852533561719117119940626105914" +// "149272955096438337875559227137733092417869557531785548219841868720728411947243663889165526728787046894" +// "739482800359519447645962037395419461841363898495986577864710230228655859268881063366400726401157990917" +// "652680450814220027329982285259267693662973801338310334464263818845826026848198196523975624137438165546" +// "650367370131035732951388159175971890099247228360312965057735541872892978783707133028552644759681714224" +// "704381891573964406129272600659255700500824412025869294370532513154961039220948194823131817745018177622" +// "2904306153521050324221361215524333142914455291939319")); +// number> +// t1("46183318524466423714385242700212935662232011232920767824642233133732825160423"); +// number> +// t2("52435875175126190479447740508185965837690552500527637822603658699938581184513"); +// std::cout << "res1=" << inverse_mod(t1, t2) << std::endl; +// std::cout << std::endl; +// std::cout << "res1=" << inverse_mod(number>>(t1, t2)) << std::endl; +////5340958855958624790350191648327454295961274282628640357656781123563169745534 +// modular = number>>(43000466091, +// 0x10000000000); modular.backend().mod_data().adjust_regular(res.backend(), +// inverse_extended_euclidean_algorithm(modular).backend().base_data()); +// BOOST_CHECK_EQUAL(number(res.backend()), number(140404367363)); +//} + +BOOST_AUTO_TEST_SUITE_END() + +// BOOST_AUTO_TEST_SUITE(static_tests) +// +// BOOST_AUTO_TEST_CASE(cpp_int_fixed_test) { +// using Backend = cpp_int_modular_backend<585>; +// using Backend_modular = modular_adaptor>; +// using modular_number = number; +// +// constexpr auto mod = +// 0x100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_cppui_modular585; +// constexpr auto a = 0xfeff_cppui_modular585; +// constexpr auto a_inv = +// 0x565eb513c8dca58227a9d17b4cc814dcf1cec08f4fdf2f0e3d4b88d45d318ec04f0f5e6dcc3a06404686cd542175970ca3b05404585cb511c6d89f78178fa736de14f307fb02fe00ff_cppui_modular585; +// static_assert(a_inv == inverse_extended_euclidean_algorithm(a, mod), "inverse error"); +// +// constexpr modular_number a_m(a, mod); +// constexpr modular_number a_inv_m(a_inv, mod); +// static_assert(a_inv_m == inverse_extended_euclidean_algorithm(a_m), "inverse error"); +// +// using T = number; +// +// static_assert(inverse_extended_euclidean_algorithm(T(3), T(8)) == T(3)); +// static_assert(inverse_extended_euclidean_algorithm(T(46), T(207)) == T(0)); +// static_assert(inverse_extended_euclidean_algorithm(T(2), T(2)) == T(0)); +// static_assert(inverse_extended_euclidean_algorithm(T(0), T(2)) == T(0)); +// static_assert(inverse_extended_euclidean_algorithm(T(46), T(46)) == T(0)); +// static_assert(inverse_extended_euclidean_algorithm(T(1), T(7)) == T(1)); +// static_assert(inverse_extended_euclidean_algorithm(T(35), T(118)) == T(27)); +// static_assert(inverse_extended_euclidean_algorithm(T(37), T(37)) == T(0)); +// static_assert(inverse_extended_euclidean_algorithm(T(32), T(247)) == T(193)); +// static_assert(inverse_extended_euclidean_algorithm(T(3), T(232)) == T(155)); +// +// static_assert(inverse_mod(T(3), T(8)) == T(3)); +// static_assert(inverse_mod(T(46), T(207)) == T(0)); +// static_assert(inverse_mod(T(2), T(2)) == T(0)); +// static_assert(inverse_mod(T(0), T(2)) == T(0)); +// static_assert(inverse_mod(T(46), T(46)) == T(0)); +// static_assert(inverse_mod(T(1), T(7)) == T(1)); +// static_assert(inverse_mod(T(35), T(118)) == T(27)); +// static_assert(inverse_mod(T(37), T(37)) == T(0)); +// static_assert(inverse_mod(T(32), T(247)) == T(193)); +// static_assert(inverse_mod(T(3), T(232)) == T(155)); +// +// static_assert(monty_inverse(T(12), T(5), T(5)) == T(1823)); +// static_assert(monty_inverse(T(10), T(37), T(1)) == T(26)); +// static_assert(monty_inverse(T(3), T(2), T(3)) == T(3)); +// static_assert(monty_inverse(T(3), T(4), T(2)) == T(11)); +// static_assert(monty_inverse(T(4), T(7), T(2)) == T(37)); +// static_assert(monty_inverse(T(32), T(247), T(1)) == T(193)); +// static_assert(monty_inverse(T(3), T(7), T(7)) == T(549029)); +// static_assert(monty_inverse(T(5317589), T(23), T(8)) == T(32104978469)); +// } +// +// BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/multiprecision/test/big_int_jacobi.cpp b/crypto3/libs/multiprecision/test/big_int_jacobi.cpp new file mode 100644 index 0000000000..fd5485cc0e --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int_jacobi.cpp @@ -0,0 +1,63 @@ +/////////////////////////////////////////////////////////////// +// Copyright (c) 2020 Mikhail Komarov. +// Copyright (c) 2021 Aleksei Moskvin +// Distributed under the Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt + +#define BOOST_TEST_MODULE big_int_jacobi_test + +#include +#include +#include + +#include "nil/crypto3/multiprecision/big_uint.hpp" +#include "nil/crypto3/multiprecision/literals.hpp" + +using namespace nil::crypto3::multiprecision; +using namespace nil::crypto3::multiprecision::literals; + +template +void test() { + BOOST_CHECK_EQUAL(jacobi(T(5u), T(9u)), 1); + BOOST_CHECK_EQUAL(jacobi(T(1u), T(27u)), 1); + BOOST_CHECK_EQUAL(jacobi(T(2u), T(27u)), -1); + BOOST_CHECK_EQUAL(jacobi(T(3u), T(27u)), 0); + BOOST_CHECK_EQUAL(jacobi(T(4u), T(27u)), 1); + BOOST_CHECK_EQUAL(jacobi(T(506u), T(1103u)), -1); + + // new tests from algebra: + BOOST_CHECK_EQUAL( + jacobi(T(76749407), + T("21888242871839275222246405745257275088696311157297823662689037894645226208583")), + -1); + BOOST_CHECK_EQUAL( + jacobi(T(76749407), + T("52435875175126190479447740508185965837690552500527637822603658699938581184513")), + -1); + BOOST_CHECK_EQUAL(jacobi(T(76749407), T("184014718449470976641732519409003087090464839378677150" + "73880837110864239498070802969129867528264353400424" + "032981962325037091562455342195893356806385102540277644" + "37882223571969881035804085174863110178951694406403" + "431417089392760397647317208332132155598016390667992838" + "98191098079351209268491644339667178604494222971572" + "788971054374438281331602764950963417101448891412424011" + "58886206885011341008817780140927978648973063559908" + "134085593076268545817483710423044623820472777162845900" + "87959373746400022332313336095224466892979000905491" + "154007647609104599675915034901101477294892962614518354" + "5025870323741270110314006814529932451772897")), + -1); +} + +BOOST_AUTO_TEST_SUITE(jacobi_tests) + +BOOST_AUTO_TEST_CASE(jacobi_test) { + test>(); + + constexpr auto a = 0x4931a5f_big_uint256; + constexpr auto b = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001_big_uint256; + static_assert(jacobi(a, b) == -1, "jacobi error"); + static_assert(jacobi(0x2_big_uint4, 0xb_big_uint4) == -1); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/multiprecision/test/big_int_miller_rabin.cpp b/crypto3/libs/multiprecision/test/big_int_miller_rabin.cpp new file mode 100644 index 0000000000..00410a0301 --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int_miller_rabin.cpp @@ -0,0 +1,41 @@ +/////////////////////////////////////////////////////////////// +// Copyright (c) 2020 Mikhail Komarov. +// Copyright (c) 2021 Aleksei Moskvin +// Distributed under the Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt + +#define BOOST_TEST_MODULE big_int_miller_rabin_test + +#include +#include +#include + +#include "nil/crypto3/multiprecision/literals.hpp" +#include "nil/crypto3/multiprecision/miller_rabin.hpp" + +using namespace nil::crypto3::multiprecision; +using namespace nil::crypto3::multiprecision::literals; + +BOOST_AUTO_TEST_SUITE(miller_rabin_tests) + +BOOST_AUTO_TEST_CASE(miller_rabin_builtin_test) { + BOOST_CHECK(miller_rabin_test(2u, 1000)); + BOOST_CHECK(miller_rabin_test(3u, 1000)); + BOOST_CHECK(!miller_rabin_test(4u, 1000)); + BOOST_CHECK(miller_rabin_test(17u, 1000)); + BOOST_CHECK(!miller_rabin_test(27u, 1000)); + BOOST_CHECK(miller_rabin_test(101u, 1000)); + BOOST_CHECK(!miller_rabin_test(207u, 1000)); +} + +BOOST_AUTO_TEST_CASE(miller_rabin_big_uint_test) { + BOOST_CHECK(miller_rabin_test(2_big_uint128, 1000)); + BOOST_CHECK(miller_rabin_test(3_big_uint128, 1000)); + BOOST_CHECK(!miller_rabin_test(4_big_uint128, 1000)); + BOOST_CHECK(miller_rabin_test(17_big_uint128, 1000)); + BOOST_CHECK(!miller_rabin_test(27_big_uint128, 1000)); + BOOST_CHECK(miller_rabin_test(101_big_uint128, 1000)); + BOOST_CHECK(!miller_rabin_test(207_big_uint128, 1000)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/multiprecision/test/big_int_modular.cpp b/crypto3/libs/multiprecision/test/big_int_modular.cpp new file mode 100644 index 0000000000..112be3b04e --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int_modular.cpp @@ -0,0 +1,213 @@ +#define BOOST_TEST_MODULE big_int_modular_test + +#include +#include + +#include + +#include "nil/crypto3/multiprecision/big_mod.hpp" +#include "nil/crypto3/multiprecision/big_uint.hpp" +#include "nil/crypto3/multiprecision/literals.hpp" + +using namespace nil::crypto3::multiprecision; +using namespace nil::crypto3::multiprecision::literals; + +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(2) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(32) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(36) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(57) +NIL_CO3_MP_DEFINE_BIG_UINT_LITERAL(60) + +using namespace nil::crypto3::multiprecision::literals; + +constexpr auto mod = 0x123456789ABCDEF_big_uint57; +using big_mod_t = montgomery_big_mod; + +BOOST_AUTO_TEST_SUITE(smoke) + +BOOST_AUTO_TEST_CASE(construct_constexpr) { + constexpr big_mod_t a = static_cast(0x123_big_uint64); +} + +BOOST_AUTO_TEST_CASE(construct_modular_ct_trivial_montgomery) { + static constexpr auto mod = 0x3_big_uint2; + auto_big_mod a = auto_big_mod(0x5_big_uint); + BOOST_CHECK_EQUAL(a.str(), "0x2"); +} + +BOOST_AUTO_TEST_CASE(construct_modular_rt_trivial_montgomery) { + big_mod_rt<2> a(0x5_big_uint, 0x3_big_uint2); + BOOST_CHECK_EQUAL(a.str(), "0x2"); +} + +BOOST_AUTO_TEST_CASE(construct_modular_ct_small_montgomery) { + static constexpr auto mod = 0x79_big_uint7; + auto_big_mod a = auto_big_mod(0x1234_big_uint); + BOOST_CHECK_EQUAL(a.str(), "0x3E"); +} + +BOOST_AUTO_TEST_CASE(construct_modular_rt_small_montgomery) { + big_mod_rt<7> a(0x1234_big_uint, 0x79_big_uint7); + BOOST_CHECK_EQUAL(a.str(), "0x3E"); +} + +BOOST_AUTO_TEST_CASE(construct_modular_ct_small) { + static constexpr auto mod = 0x78_big_uint7; + auto_big_mod a = auto_big_mod(0x1234_big_uint); + BOOST_CHECK_EQUAL(a.str(), "0x64"); +} + +BOOST_AUTO_TEST_CASE(construct_modular_rt_small) { + big_mod_rt<7> a(0x1234_big_uint, 0x78_big_uint7); + BOOST_CHECK_EQUAL(a.str(), "0x64"); +} + +BOOST_AUTO_TEST_CASE(to_string_trivial) { + BOOST_CHECK_EQUAL((static_cast(0x1_big_uint)).str(), "0x1"); +} + +BOOST_AUTO_TEST_CASE(to_string_small) { + BOOST_CHECK_EQUAL((static_cast(0x20_big_uint)).str(), "0x20"); +} + +BOOST_AUTO_TEST_CASE(ops) { + big_mod_t a = 2u, b; + + auto c1{a}; + auto c2{std::move(a)}; // NOLINT + auto c3{2}; + auto c4{2u}; + b = a; + b = std::move(a); // NOLINT + b = 2; + b = 2u; + +#define TEST_BINARY_OP(op) \ + do { \ + b = a op a; \ + b = 2 op a; \ + b = a op 2; \ + b = 2u op a; \ + b = a op 2u; \ + b op## = a; \ + b op## = 2; \ + b op## = 2u; \ + } while (false) + + TEST_BINARY_OP(+); + ++b; + b++; + b = +b; + + TEST_BINARY_OP(-); + --b; + b--; + b = -b; + +#undef TEST_BINARY_OP +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(addition) + +BOOST_AUTO_TEST_CASE(simple) { + BOOST_CHECK_EQUAL( + static_cast(0x2_big_uint64) + static_cast(0x3_big_uint64), + static_cast(0x5_big_uint64)); +} + +BOOST_AUTO_TEST_CASE(multilimb) { + BOOST_CHECK_EQUAL( + static_cast(0xAFFFFFFFF_big_uint64) + static_cast(0x2_big_uint36), + static_cast(0xB00000001_big_uint64)); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(multiplication) + +BOOST_AUTO_TEST_CASE(simple) { + BOOST_CHECK_EQUAL( + static_cast(0x2_big_uint64) * static_cast(0x3_big_uint64), + static_cast(0x6_big_uint64)); +} + +BOOST_AUTO_TEST_CASE(multilimb) { + BOOST_CHECK_EQUAL( + static_cast(0xAFFFFFFFF_big_uint64) * static_cast(0x2_big_uint36), + static_cast(0x15FFFFFFFE_big_uint64)); +} + +BOOST_AUTO_TEST_CASE(big) { + static constexpr auto mod = + 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001_big_uint224; + big_mod a = 0xC5067EE5D80302E0561545A8467C6D5C98BC4D37672EB301C38CE9A9_big_uint224; + + big_mod b = 0xE632329C42040E595D127EB6889D22215DBE56F540425C705D6BF83_big_uint224; + + BOOST_CHECK_EQUAL((a * b).base(), + 0x107BC09A9F3443A6F6458495ADD98CBA1FCD15F17D0EAB66302FEFA6_big_uint224); +} + +BOOST_AUTO_TEST_CASE(big_assign) { + static constexpr auto mod = + 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001_big_uint224; + big_mod a = 0xC5067EE5D80302E0561545A8467C6D5C98BC4D37672EB301C38CE9A9_big_uint224; + + big_mod b = 0xE632329C42040E595D127EB6889D22215DBE56F540425C705D6BF83_big_uint224; + + a *= b; + + BOOST_CHECK_EQUAL(a.base(), + 0x107BC09A9F3443A6F6458495ADD98CBA1FCD15F17D0EAB66302FEFA6_big_uint224); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(bugs) + +BOOST_AUTO_TEST_CASE(secp256k1_incorrect_multiplication) { + using standart_number = nil::crypto3::multiprecision::big_uint<256>; + using modular_number = nil::crypto3::multiprecision::montgomery_big_mod_rt<256>; + + constexpr standart_number modulus = + 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_big_uint256; + constexpr standart_number x_standard = + 0xb5d724ce6f44c3c587867bbcb417e9eb6fa05e7e2ef029166568f14eb3161387_big_uint256; + constexpr standart_number res_standard = + 0xad6e1fcc680392abfb075838eafa513811112f14c593e0efacb6e9d0d7770b4_big_uint256; + constexpr modular_number x(x_standard, modulus); + constexpr modular_number res(res_standard, modulus); + BOOST_CHECK_EQUAL(x * x, res); +} + +BOOST_AUTO_TEST_CASE(bad_negation) { + using standart_number = nil::crypto3::multiprecision::big_uint<256>; + using modular_number = nil::crypto3::multiprecision::montgomery_big_mod_rt<256>; + + constexpr standart_number modulus = + 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f_big_uint256; + constexpr modular_number x(0u, modulus); + constexpr modular_number res = -x; + + BOOST_CHECK(res == 0u); + BOOST_CHECK(res == x); + BOOST_CHECK(-res == x); +} + +BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE(convert) + +BOOST_AUTO_TEST_CASE(from_uint64_t) { + big_mod_t a = static_cast(0x123456789ABCDEFull); + BOOST_CHECK_EQUAL(a, static_cast(0x123456789ABCDEF_big_uint64)); +} + +BOOST_AUTO_TEST_CASE(from_int64_t) { + big_mod_t a = static_cast(0x123456789ABCDEFull); + BOOST_CHECK_EQUAL(a, static_cast(0x123456789ABCDEF_big_uint64)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/multiprecision/test/big_int_modular_comprehensive.cpp b/crypto3/libs/multiprecision/test/big_int_modular_comprehensive.cpp new file mode 100644 index 0000000000..8395391b3e --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int_modular_comprehensive.cpp @@ -0,0 +1,133 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2020 Mikhail Komarov +// Copyright (c) 2020 Ilias Khairullin +// Copyright (c) 2024 Martun Karapetyan +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE big_int_modular_comprehensive_test + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "nil/crypto3/multiprecision/big_mod.hpp" +#include "nil/crypto3/multiprecision/big_uint.hpp" + +using namespace nil::crypto3::multiprecision; + +template +std::vector as_vector(const boost::property_tree::ptree &pt) { + std::vector r; + for (const auto &item : pt) { + r.push_back(item.second); + } + return r; +} + +template +auto test_dataset(const std::string &test_name) { + static std::string test_data = std::string(TEST_DATA_DIR) + R"(modular_comprehensive.json)"; + boost::property_tree::ptree test_dataset; + boost::property_tree::read_json(test_data, test_dataset); + + return as_vector(test_dataset.get_child(test_name)); +} + +template +struct ModularComprehensiveSample { + ModularComprehensiveSample(const boost::property_tree::ptree &sample) : ptree(sample) { + a = sample.get("a"); + b = sample.get("b"); + m = sample.get("m"); + a_m_add_b_m = sample.get("a_m_add_b_m"); + a_m_sub_b_m = sample.get("a_m_sub_b_m"); + a_m_mul_b_m = sample.get("a_m_mul_b_m"); + a_eq_b = sample.get("a_eq_b"); + a_m_pow_b = sample.get("a_m_pow_b"); + + if (Montgomery && !m.bit_test(0)) { + throw std::runtime_error("ModularComprehensiveSample: Montgomery requires m to be odd"); + } + } + + friend std::ostream &operator<<(std::ostream &os, const ModularComprehensiveSample &sample) { + boost::property_tree::json_parser::write_json(os, sample.ptree); + return os; + } + + big_uint a; + big_uint b; + big_uint m; + big_uint a_m_add_b_m; + big_uint a_m_sub_b_m; + big_uint a_m_mul_b_m; + bool a_eq_b; + big_uint a_m_pow_b; + + boost::property_tree::ptree ptree; +}; + +template +void base_operations_test(const ModularComprehensiveSample sample) { + using modular_number = + std::conditional_t, big_mod_rt>; + + const auto &a = sample.a; + const auto &b = sample.b; + const auto &m = sample.m; + + modular_number a_m(a, m); + modular_number b_m(b, m); + + BOOST_CHECK_EQUAL(a_m + b_m, sample.a_m_add_b_m); + BOOST_CHECK_EQUAL(a_m - b_m, sample.a_m_sub_b_m); + BOOST_CHECK_EQUAL(a_m * b_m, sample.a_m_mul_b_m); + + BOOST_CHECK_EQUAL(a_m == b_m, sample.a_eq_b); + BOOST_CHECK_EQUAL(a_m != b_m, !sample.a_eq_b); + + BOOST_CHECK_EQUAL(pow(a_m, b), sample.a_m_pow_b); +} + +BOOST_AUTO_TEST_SUITE(base_operations) + +BOOST_DATA_TEST_CASE(prime_mod_montgomery_130, (test_dataset>( + "prime_mod_montgomery_130"))) { + base_operations_test(sample); +} + +BOOST_DATA_TEST_CASE(even_mod_130, + (test_dataset>("even_mod_130"))) { + base_operations_test(sample); +} + +// This one tests 64-bit numbers used in Goldilock fields. +BOOST_DATA_TEST_CASE(goldilock, (test_dataset>("goldilock"))) { + base_operations_test(sample); +} + +BOOST_DATA_TEST_CASE(even_mod_17, + (test_dataset>("even_mod_17"))) { + base_operations_test(sample); +} + +BOOST_DATA_TEST_CASE(montgomery_17, + (test_dataset>("montgomery_17"))) { + base_operations_test(sample); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/multiprecision/test/big_int_ressol.cpp b/crypto3/libs/multiprecision/test/big_int_ressol.cpp new file mode 100644 index 0000000000..1b2ff9f945 --- /dev/null +++ b/crypto3/libs/multiprecision/test/big_int_ressol.cpp @@ -0,0 +1,319 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2018-2020 Mikhail Komarov +// Copyright (c) 2018-2020 Pavel Kharitonov +// Copyright (c) 2021 Aleksei Moskvin +// +// Distributed under the Boost Software License, Version 1.0 +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +//---------------------------------------------------------------------------// + +#define BOOST_TEST_MODULE big_int_ressol_test + +#include + +#include +#include +#include + +#include "nil/crypto3/multiprecision/big_uint.hpp" + +using namespace nil::crypto3::multiprecision; + +BOOST_AUTO_TEST_SUITE(ressol_runtime_tests) + +BOOST_AUTO_TEST_CASE(ressol_runtime_4_bit_tests) { + using T = big_uint<4>; + BOOST_CHECK_EQUAL(ressol(T(0u), T(11u)), 0u); + BOOST_CHECK_EQUAL(ressol(T(5u), T(11u)), 4u); + + BOOST_CHECK_THROW(ressol(T(10u), T(11u)), std::invalid_argument); + BOOST_CHECK_THROW(ressol(T(2u), T(11u)), std::invalid_argument); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_521_bit_tests) { + using T = big_uint<521>; + BOOST_CHECK_EQUAL( + ressol(T(5u), T("68647976601306097149819007990813932172694353001433054093944634591855431833" + "9765605212255" + "9640661454554977296311391480858037121987999716643812574028291115057151")), + T("5128001483797946816458955548662741861156429216952843873274631897232136999791540518339021" + "539968" + "609345897897688700798659762992302941280478805021587896033442584")); + + BOOST_CHECK_THROW( + ressol(T(4), T("686479766013060971498190079908139321726943530014330540939446345918554318339" + "765605212255" + "9640661454554977296311391480858037121987999716643812574028291115057149")), + std::invalid_argument); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_224_bit_tests) { + using T = big_uint<224>; + BOOST_CHECK_EQUAL( + ressol(T("20749193632488214633180774027217139706413443729200940480695355894185"), + T("26959946667150639794667015087019630673557916260026308143510066298881")), + T("1825097171398375765346899906888660610489759292065918530856859649959")); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_315_bit_tests) { + using T = big_uint<315>; + BOOST_CHECK_EQUAL( + ressol( + T(1024u), + T("0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff")), + 32u); + BOOST_CHECK_EQUAL( + ressol( + T(16u), + T("0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff")), + 4u); + BOOST_CHECK_EQUAL( + ressol( + T(120846049u), + T("0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff")), + T("0x40000000000000000000000000000000000000000000000000000000000c100000000000000d50e")); + BOOST_CHECK_EQUAL( + ressol( + T(1025), + T("0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff")), + T("7195614950510915163755738138441999335431224576038191833055420996031360079131617522512565" + "985187")); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_18_bit_tests) { + using T = big_uint<18>; + + BOOST_CHECK_EQUAL(ressol(T(1024u), T(174763u)), 174731u); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_7_bit_tests) { + using T = big_uint<7>; + + BOOST_CHECK_THROW(ressol(T(64), T(85)), std::invalid_argument); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_8_bit_tests) { + using T = big_uint<8>; + + BOOST_CHECK_THROW(ressol(T(181), T(217)), std::invalid_argument); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_16_bit_tests) { + using T = big_uint<16>; + + BOOST_CHECK_THROW(ressol(T(4225), T(33153)), std::invalid_argument); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_15_bit_tests) { + using T = big_uint<15>; + + BOOST_CHECK_THROW(ressol(T(2048), T(31417)), std::logic_error); +} + +BOOST_AUTO_TEST_CASE(ressol_runtime_13_bit_tests) { + using T = big_uint<13>; + + BOOST_CHECK_THROW(ressol(T(2), T(4369)), std::invalid_argument); +} + +BOOST_AUTO_TEST_SUITE_END() // ressol_runtime_tests + +// constexpr bool test_static() { +// constexpr auto a1 = 0x5_cppui_modular4; +// constexpr auto p1 = 0xb_cppui_modular4; +// constexpr auto res1 = 0x4_cppui_modular4; +// static_assert(ressol(a1, p1) == res1, "ressol error"); +// +// constexpr auto a2 = 0x5_cppui_modular521; +// constexpr auto p2 = +// 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular521; +// constexpr auto res2 = +// 0x17e76bd20bdb7664ba9117dd46c437ac50063e33390efa159b637a043df2fbfa55e97b9f7dc55968462121ec1b7a8d686ff263d511011f1b2ee6af5fa7726b97b18_cppui_modular521; +// static_assert(ressol(a2, p2) == res2, "ressol error"); +// +// constexpr auto a3 = 0x4_cppui_modular521; +// constexpr auto p3 = +// 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd_cppui_modular521; +// static_assert(ressol(a3, p3) == -1, "ressol error"); +// +// constexpr auto a4 = +// 0xc5067ee5d80302e0561545a8467c6d5c98bc4d37672eb301c38ce9a9_cppui_modular224; constexpr auto +// p4 = 0xffffffffffffffffffffffffffffffff000000000000000000000001_cppui_modular224; constexpr +// auto res4 = 0x115490c2141baa1c2407abe908fcf3416b0cb0d290dcd3960c3ec7a7_cppui_modular224; +// static_assert(ressol(a4, p4) == res4, "ressol error"); +// +// constexpr auto a5 = 0x40_cppui_modular7; +// constexpr auto p5 = 0x55_cppui_modular7; +// static_assert(ressol(a5, p5) == -1, "ressol error"); +// +// constexpr auto a6 = 0xb5_cppui_modular8; +// constexpr auto p6 = 0xd9_cppui_modular8; +// static_assert(ressol(a6, p6) == -1, "ressol error"); +// +// constexpr auto a7 = 0x1081_cppui_modular16; +// constexpr auto p7 = 0x8181_cppui_modular16; +// static_assert(ressol(a7, p7) == -1, "ressol error"); +// +// constexpr auto a8 = 0x800_cppui_modular15; +// constexpr auto p8 = 0x7ab9_cppui_modular15; +// static_assert(ressol(a8, p8) == -1, "ressol error"); +// +// constexpr auto a9 = 0x2_cppui_modular13; +// constexpr auto p9 = 0x1111_cppui_modular13; +// static_assert(ressol(a9, p9) == -1, "ressol error"); +// +// constexpr auto a10 = 0x400_cppui_modular315; +// constexpr auto p10 = +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315; +// constexpr auto res10 = 0x20_cppui_modular315; +// static_assert(ressol(a10, p10) == res10, "ressol error"); +// +// constexpr auto a11 = 0x400_cppui_modular18; +// constexpr auto p11 = 0x2aaab_cppui_modular18; +// constexpr auto res11 = 0x2aa8b_cppui_modular18; +// static_assert(ressol(a11, p11) == res11, "ressol error"); +// +// constexpr auto a12 = 0x401_cppui_modular315; +// constexpr auto p12 = +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315; +// constexpr auto res12 = +// 0xdcc6506af06fe9e142cacb7b5ff56c1864fe7a0b2f7fb10739990aed564e07beb533b5edd95fa3_cppui_modular315; +// static_assert(ressol(a12, p12) == res12, "ressol error"); +// +// constexpr auto a13 = 0x10_cppui_modular315; +// constexpr auto p13 = +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315; +// constexpr auto res13 = 0x4_cppui_modular315; +// static_assert(ressol(a13, p13) == res13, "ressol error"); +// +// constexpr auto a14 = 0x733f6e1_cppui_modular315; +// constexpr auto p14 = +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315; +// constexpr auto res14 = +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000d50e_cppui_modular315; +// static_assert(ressol(a14, p14) == res14, "ressol error"); +// +// return true; +// } + +// constexpr bool test_backend_static() { +// using cpp521 = backends::cpp_int_modular_backend<521>; +// using cpp315 = backends::cpp_int_modular_backend<315>; +// using cpp224 = backends::cpp_int_modular_backend<224>; +// using cpp18 = backends::cpp_int_modular_backend<18>; +// using cpp16 = backends::cpp_int_modular_backend<16>; +// using cpp15 = backends::cpp_int_modular_backend<15>; +// using cpp13 = backends::cpp_int_modular_backend<13>; +// using cpp8 = backends::cpp_int_modular_backend<8>; +// using cpp7 = backends::cpp_int_modular_backend<7>; +// using cpp4 = backends::cpp_int_modular_backend<4>; +// +// using modular_adaptor_type_4 = backends::modular_adaptor>; constexpr auto a1_m = +// number(modular_adaptor_type_4(0x5_cppui_modular4, +// 0xb_cppui_modular4)); +// constexpr auto res1 = 0x4_cppui_modular4; +// static_assert(ressol(a1_m).template convert_to>() == res1, "ressol error"); +// +// using modular_adaptor_type_521 = backends::modular_adaptor>; constexpr auto a2_m = +// number(modular_adaptor_type_521( +// 0x5_cppui_modular521, +// 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff_cppui_modular521)); +// constexpr auto res2 = +// 0x17e76bd20bdb7664ba9117dd46c437ac50063e33390efa159b637a043df2fbfa55e97b9f7dc55968462121ec1b7a8d686ff263d511011f1b2ee6af5fa7726b97b18_cppui_modular521; +// static_assert(ressol(a2_m).template convert_to>() == res2, "ressol error"); +// +// constexpr auto a3_m = number(modular_adaptor_type_521( +// 0x4_cppui_modular521, +// 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd_cppui_modular521)); +// constexpr auto negone_3 = number(modular_adaptor_type_521( +// number(-1), +// 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd_cppui_modular521)); +// static_assert(ressol(a3_m) == negone_3, "ressol error"); +// +// using modular_adaptor_type_224 = backends::modular_adaptor>; constexpr auto a4_m = +// number(modular_adaptor_type_224( +// 0xc5067ee5d80302e0561545a8467c6d5c98bc4d37672eb301c38ce9a9_cppui_modular224, +// 0xffffffffffffffffffffffffffffffff000000000000000000000001_cppui_modular224)); +// constexpr auto res4 = +// 0x115490c2141baa1c2407abe908fcf3416b0cb0d290dcd3960c3ec7a7_cppui_modular224; +// static_assert(ressol(a4_m).template convert_to>() == res4, "ressol error"); +// +// using modular_adaptor_type_7 = backends::modular_adaptor>; constexpr auto a5_m = +// number(modular_adaptor_type_7(0x40_cppui_modular7, +// 0x55_cppui_modular7)); constexpr auto negone_5 = +// number(modular_adaptor_type_7(0, 0x55_cppui_modular7)); +// static_assert(ressol(a5_m) == negone_5, "ressol error"); +// +// using modular_adaptor_type_8 = backends::modular_adaptor>; constexpr auto a6_m = +// number(0xb5_cppui_modular8, 0xd9_cppui_modular8); constexpr auto +// negone_6 = number(0, 0xd9_cppui_modular8); static_assert(ressol(a6_m) +// == negone_6, "ressol error"); +// +// constexpr auto a7_m = +// number>>(0x1081_cppui_modular16, 0x8181_cppui_modular16); +// constexpr auto negone_7 = +// number>>(number(-1), 0x8181_cppui_modular16); +// static_assert(ressol(a7_m) == negone_7, "ressol error"); +// +// constexpr auto a8_m = +// number>>(0x800_cppui_modular15, 0x7ab9_cppui_modular15); +// constexpr auto negone_8 = number>>( +// number(-1), 0x7ab9_cppui_modular15); +// static_assert(ressol(a8_m) == negone_8, "ressol error"); +// +// constexpr auto a9_m = +// number>>(0x2_cppui_modular13, 0x1111_cppui_modular13); +// constexpr auto negone_9 = number>>( +// number(-1), 0x1111_cppui_modular13); +// static_assert(ressol(a9_m) == negone_9, "ressol error"); +// +// constexpr auto a10_m = number>>( +// 0x400_cppui_modular315, +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315); +// constexpr auto res10 = 0x20_cppui_modular315; +// static_assert(ressol(a10_m).template convert_to>() == res10, "ressol error"); +// +// constexpr auto a11_m = +// number>>(0x400_cppui_modular18, 0x2aaab_cppui_modular18); +// constexpr auto res11 = 0x2aa8b_cppui_modular18; +// static_assert(ressol(a11_m).template convert_to>() == res11, "ressol error"); +// +// constexpr auto a12_m = number>>( +// 0x401_cppui_modular315, +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315); +// constexpr auto res12 = +// 0xdcc6506af06fe9e142cacb7b5ff56c1864fe7a0b2f7fb10739990aed564e07beb533b5edd95fa3_cppui_modular315; +// static_assert(ressol(a12_m).template convert_to>() == res12, "ressol error"); +// +// constexpr auto a13_m = number>>( +// 0x10_cppui_modular315, +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315); +// constexpr auto res13 = 0x4_cppui_modular315; +// static_assert(ressol(a13_m).template convert_to>() == res13, "ressol error"); +// +// constexpr auto a14_m = number>>( +// 0x733f6e1_cppui_modular315, +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000ffff_cppui_modular315); +// constexpr auto res14 = +// 0x40000000000000000000000000000000000000000000000000000000000c100000000000000d50e_cppui_modular315; +// static_assert(ressol(a14_m).template convert_to>() == res14, "ressol error"); +// +// return true; +// } diff --git a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int.cpp b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int.cpp index c952f97561..85cc419415 100644 --- a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int.cpp +++ b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int.cpp @@ -4,7 +4,7 @@ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include "constexpr_arithmetric_test.hpp" -#include "nil/crypto3/multiprecision/cpp_int_modular.hpp" +#include "nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp" #include "test.hpp" #if !defined(BOOST_MP_NO_CONSTEXPR_DETECTION) && !defined(DISABLE_TESTS) diff --git a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_2.cpp b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_2.cpp index d046803ee7..18487e6eb6 100644 --- a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_2.cpp +++ b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_2.cpp @@ -6,7 +6,7 @@ #include #undef BOOST_HAS_INT128 #include "constexpr_arithmetric_test.hpp" -#include "nil/crypto3/multiprecision/cpp_int_modular.hpp" +#include "nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp" #include "test.hpp" #if !defined(BOOST_MP_NO_CONSTEXPR_DETECTION) && !defined(DISABLE_TESTS) diff --git a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_3.cpp b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_3.cpp index 0a5428e9ff..b2d9cd9302 100644 --- a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_3.cpp +++ b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_3.cpp @@ -4,7 +4,7 @@ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include "constexpr_arithmetric_test.hpp" -#include "nil/crypto3/multiprecision/cpp_int_modular.hpp" +#include "nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp" #include "test.hpp" #if !defined(BOOST_MP_NO_CONSTEXPR_DETECTION) && !defined(DISABLE_TESTS) diff --git a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_4.cpp b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_4.cpp index f19fe35253..e9ae83006b 100644 --- a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_4.cpp +++ b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_4.cpp @@ -4,7 +4,7 @@ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include "constexpr_arithmetric_test.hpp" -#include "nil/crypto3/multiprecision/cpp_int_modular.hpp" +#include "nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp" #include "test.hpp" template diff --git a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_5.cpp b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_5.cpp index d88d4bf945..c823c84901 100644 --- a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_5.cpp +++ b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_5.cpp @@ -7,8 +7,8 @@ // on factorials. #include "constexpr_arithmetric_test.hpp" -#include "nil/crypto3/multiprecision/cpp_int_modular.hpp" -#include "nil/crypto3/multiprecision/integer.hpp" +#include "nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp" +#include "nil/crypto3/multiprecision/boost_backends/integer.hpp" #include "test.hpp" template diff --git a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_6.cpp b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_6.cpp index 2703f75698..15d1cf9dcf 100644 --- a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_6.cpp +++ b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_6.cpp @@ -3,7 +3,7 @@ // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include "nil/crypto3/multiprecision/cpp_int_modular.hpp" +#include "nil/crypto3/multiprecision/boost_backends/cpp_int_modular.hpp" #include "test.hpp" template diff --git a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_7.cpp b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_7.cpp index abbae4f06d..59a14a4f9b 100644 --- a/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_7.cpp +++ b/crypto3/libs/multiprecision/test/constexpr_test_cpp_int_7.cpp @@ -10,7 +10,7 @@ // https://en.wikipedia.org/wiki/KISS_(algorithm) for cpp_int integers. b2 --abbreviate-paths toolset=clang-9.0.0 // address-model=64 cxxstd=2a release misc > multiprecision_clang_misc.log -#include +#include #include diff --git a/crypto3/libs/multiprecision/test/data/comparison.json b/crypto3/libs/multiprecision/test/data/comparison.json new file mode 100644 index 0000000000..9639c60167 --- /dev/null +++ b/crypto3/libs/multiprecision/test/data/comparison.json @@ -0,0 +1,15008 @@ +{ + "test_comparison_12_17": [ + { + "a": "0x223", + "b": "0x19d", + "cmp_a_b": 1 + }, + { + "a": "0x2a6", + "b": "0x3c7", + "cmp_a_b": -1 + }, + { + "a": "0x42", + "b": "0x5b4", + "cmp_a_b": -1 + }, + { + "a": "0x78d", + "b": "0xa1a9", + "cmp_a_b": -1 + }, + { + "a": "0x1b0", + "b": "0x104", + "cmp_a_b": 1 + }, + { + "a": "0x25", + "b": "0x15971", + "cmp_a_b": -1 + }, + { + "a": "0x538", + "b": "0x282", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x40ff", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x11", + "cmp_a_b": -1 + }, + { + "a": "0x572", + "b": "0x10", + "cmp_a_b": 1 + }, + { + "a": "0x31c", + "b": "0x2b", + "cmp_a_b": 1 + }, + { + "a": "0x926", + "b": "0x1020", + "cmp_a_b": -1 + }, + { + "a": "0x36b", + "b": "0x4c5", + "cmp_a_b": -1 + }, + { + "a": "0x28", + "b": "0x372", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x8f5", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0xcf92", + "cmp_a_b": -1 + }, + { + "a": "0x6dc", + "b": "0x64", + "cmp_a_b": 1 + }, + { + "a": "0x9", + "b": "0x94a3", + "cmp_a_b": -1 + }, + { + "a": "0xa89", + "b": "0x958", + "cmp_a_b": 1 + }, + { + "a": "0x804", + "b": "0x557", + "cmp_a_b": 1 + }, + { + "a": "0xbc", + "b": "0x15a2", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x3a81", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x791", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x9a", + "b": "0x4e", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0x30ee", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x15", + "cmp_a_b": -1 + }, + { + "a": "0xd9", + "b": "0x179", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xa", + "cmp_a_b": -1 + }, + { + "a": "0x1b7", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0xc1d", + "b": "0xc1d", + "cmp_a_b": 0 + }, + { + "a": "0x46c", + "b": "0x46c", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0x331", + "cmp_a_b": -1 + }, + { + "a": "0xd", + "b": "0x13", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x7", + "b": "0x1d", + "cmp_a_b": -1 + }, + { + "a": "0xa49", + "b": "0x11f1", + "cmp_a_b": -1 + }, + { + "a": "0x1f", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x10", + "b": "0x56", + "cmp_a_b": -1 + }, + { + "a": "0x70", + "b": "0xf40", + "cmp_a_b": -1 + }, + { + "a": "0xf6", + "b": "0xf6", + "cmp_a_b": 0 + }, + { + "a": "0x8", + "b": "0x137", + "cmp_a_b": -1 + }, + { + "a": "0x217", + "b": "0x27", + "cmp_a_b": 1 + }, + { + "a": "0x344", + "b": "0x9", + "cmp_a_b": 1 + }, + { + "a": "0xc1", + "b": "0xc1", + "cmp_a_b": 0 + }, + { + "a": "0xe56", + "b": "0x29", + "cmp_a_b": 1 + }, + { + "a": "0x186", + "b": "0x186", + "cmp_a_b": 0 + }, + { + "a": "0x51", + "b": "0x51", + "cmp_a_b": 0 + }, + { + "a": "0xdd", + "b": "0x18d7c", + "cmp_a_b": -1 + }, + { + "a": "0x4bf", + "b": "0x19", + "cmp_a_b": 1 + }, + { + "a": "0x2d8", + "b": "0x1ce", + "cmp_a_b": 1 + }, + { + "a": "0x11", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x11094", + "cmp_a_b": -1 + }, + { + "a": "0x78f", + "b": "0x78f", + "cmp_a_b": 0 + }, + { + "a": "0x155", + "b": "0xa2b3", + "cmp_a_b": -1 + }, + { + "a": "0x16", + "b": "0x3f2", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x2aeb", + "cmp_a_b": -1 + }, + { + "a": "0x10", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xdc3", + "b": "0x281", + "cmp_a_b": 1 + }, + { + "a": "0x35", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x4d", + "b": "0x4d", + "cmp_a_b": 0 + }, + { + "a": "0xf", + "b": "0xae82", + "cmp_a_b": -1 + }, + { + "a": "0x442", + "b": "0x11a", + "cmp_a_b": 1 + }, + { + "a": "0x22", + "b": "0x9385", + "cmp_a_b": -1 + }, + { + "a": "0xb7", + "b": "0x743", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x4a", + "b": "0x3d8", + "cmp_a_b": -1 + }, + { + "a": "0x21", + "b": "0x15", + "cmp_a_b": 1 + }, + { + "a": "0x24", + "b": "0x6698", + "cmp_a_b": -1 + }, + { + "a": "0x724", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x5", + "b": "0x5", + "cmp_a_b": 0 + }, + { + "a": "0x6", + "b": "0x56", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x5", + "cmp_a_b": -1 + }, + { + "a": "0x11d", + "b": "0xc0a4", + "cmp_a_b": -1 + }, + { + "a": "0x3f", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x6", + "b": "0x9bc1", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x283f", + "cmp_a_b": -1 + }, + { + "a": "0x7f", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x560", + "b": "0x560", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0xf", + "b": "0x8e5", + "cmp_a_b": -1 + }, + { + "a": "0x42", + "b": "0x360", + "cmp_a_b": -1 + }, + { + "a": "0x329", + "b": "0x19f6", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x41a7", + "cmp_a_b": -1 + }, + { + "a": "0x2d0", + "b": "0x58cb", + "cmp_a_b": -1 + }, + { + "a": "0xec", + "b": "0xec", + "cmp_a_b": 0 + }, + { + "a": "0x43", + "b": "0x6239", + "cmp_a_b": -1 + }, + { + "a": "0xc", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x664a", + "cmp_a_b": -1 + }, + { + "a": "0x10f", + "b": "0x7f", + "cmp_a_b": 1 + }, + { + "a": "0x18", + "b": "0x18", + "cmp_a_b": 0 + }, + { + "a": "0x3", + "b": "0x3", + "cmp_a_b": 0 + }, + { + "a": "0xbc", + "b": "0x3b", + "cmp_a_b": 1 + }, + { + "a": "0x27d", + "b": "0x52d", + "cmp_a_b": -1 + }, + { + "a": "0xc0", + "b": "0xc26", + "cmp_a_b": -1 + }, + { + "a": "0x2c1", + "b": "0x3020", + "cmp_a_b": -1 + }, + { + "a": "0x58a", + "b": "0x1c4", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x1d17", + "cmp_a_b": -1 + }, + { + "a": "0x2c7", + "b": "0x2c7", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x9f96", + "cmp_a_b": -1 + }, + { + "a": "0xff", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x657", + "b": "0x8d", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0xce5a", + "cmp_a_b": -1 + }, + { + "a": "0x1f", + "b": "0x1f", + "cmp_a_b": 0 + }, + { + "a": "0x1c1", + "b": "0x1c1", + "cmp_a_b": 0 + }, + { + "a": "0x12d", + "b": "0x12d", + "cmp_a_b": 0 + }, + { + "a": "0xbb0", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x38c", + "b": "0x38c", + "cmp_a_b": 0 + }, + { + "a": "0x5", + "b": "0xf75b", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x4f5", + "b": "0x39", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x108", + "cmp_a_b": -1 + }, + { + "a": "0x97b", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x9954", + "cmp_a_b": -1 + }, + { + "a": "0x324", + "b": "0x1c7e", + "cmp_a_b": -1 + }, + { + "a": "0x20", + "b": "0x20", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x20", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0xc7", + "b": "0xc7", + "cmp_a_b": 0 + }, + { + "a": "0x15", + "b": "0x7b", + "cmp_a_b": -1 + }, + { + "a": "0x1ab", + "b": "0x1f", + "cmp_a_b": 1 + }, + { + "a": "0xa94", + "b": "0x2ce", + "cmp_a_b": 1 + }, + { + "a": "0x2ec", + "b": "0x2120", + "cmp_a_b": -1 + }, + { + "a": "0x7", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0xc8", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xab", + "b": "0xab", + "cmp_a_b": 0 + }, + { + "a": "0x255", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x32", + "b": "0xf", + "cmp_a_b": 1 + }, + { + "a": "0xa", + "b": "0x8213", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x3b3", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x1c9d", + "cmp_a_b": -1 + }, + { + "a": "0x8d", + "b": "0x8d", + "cmp_a_b": 0 + }, + { + "a": "0xc", + "b": "0x12", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x1c9", + "cmp_a_b": -1 + }, + { + "a": "0xb8", + "b": "0x6e8", + "cmp_a_b": -1 + }, + { + "a": "0x289", + "b": "0x4f", + "cmp_a_b": 1 + }, + { + "a": "0x3", + "b": "0x422", + "cmp_a_b": -1 + }, + { + "a": "0x103", + "b": "0x85", + "cmp_a_b": 1 + }, + { + "a": "0x143", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x1ec", + "b": "0x1ec", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x1879", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0xff5", + "b": "0x148b", + "cmp_a_b": -1 + }, + { + "a": "0x206", + "b": "0xe4", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0xa8", + "cmp_a_b": -1 + }, + { + "a": "0x16b", + "b": "0xb21d", + "cmp_a_b": -1 + }, + { + "a": "0x2c6", + "b": "0x62", + "cmp_a_b": 1 + }, + { + "a": "0x5", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x7", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x537", + "cmp_a_b": -1 + }, + { + "a": "0x15f", + "b": "0x78d3", + "cmp_a_b": -1 + }, + { + "a": "0x2d", + "b": "0x1328b", + "cmp_a_b": -1 + }, + { + "a": "0x8eb", + "b": "0x142", + "cmp_a_b": 1 + }, + { + "a": "0x6", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x2975", + "cmp_a_b": -1 + }, + { + "a": "0xc89", + "b": "0xd1", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x2c", + "cmp_a_b": -1 + }, + { + "a": "0xe", + "b": "0xe", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x1e3", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x27", + "cmp_a_b": -1 + }, + { + "a": "0x8", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0xd6c", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x246", + "b": "0xb3", + "cmp_a_b": 1 + }, + { + "a": "0x22", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x3a", + "b": "0xec85", + "cmp_a_b": -1 + }, + { + "a": "0x25", + "b": "0x24b", + "cmp_a_b": -1 + }, + { + "a": "0xb", + "b": "0x22a", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x946", + "cmp_a_b": -1 + }, + { + "a": "0x48", + "b": "0x7d3", + "cmp_a_b": -1 + }, + { + "a": "0x1cc", + "b": "0xf8d", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x1c0", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x7", + "cmp_a_b": -1 + }, + { + "a": "0x63", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1a", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x299", + "b": "0xe30", + "cmp_a_b": -1 + }, + { + "a": "0x1ba", + "b": "0x40", + "cmp_a_b": 1 + }, + { + "a": "0xbb", + "b": "0x4858", + "cmp_a_b": -1 + }, + { + "a": "0x13", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xe4", + "b": "0x12767", + "cmp_a_b": -1 + }, + { + "a": "0xd", + "b": "0x4d5", + "cmp_a_b": -1 + }, + { + "a": "0x3a1", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x39", + "cmp_a_b": -1 + }, + { + "a": "0x1a2", + "b": "0xaae", + "cmp_a_b": -1 + }, + { + "a": "0x13", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x2", + "cmp_a_b": -1 + }, + { + "a": "0xcaf", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x13", + "b": "0x1b639", + "cmp_a_b": -1 + }, + { + "a": "0x18", + "b": "0x20b", + "cmp_a_b": -1 + }, + { + "a": "0x12e", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1e", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x55f", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x43b", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x7", + "cmp_a_b": -1 + }, + { + "a": "0x8c3", + "b": "0xdb", + "cmp_a_b": 1 + }, + { + "a": "0x95", + "b": "0x15f3", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0xb", + "b": "0x42", + "cmp_a_b": -1 + }, + { + "a": "0x1c", + "b": "0x66", + "cmp_a_b": -1 + }, + { + "a": "0x6fe", + "b": "0x233f", + "cmp_a_b": -1 + }, + { + "a": "0x8", + "b": "0x1335", + "cmp_a_b": -1 + }, + { + "a": "0x3d", + "b": "0x3d", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x2485", + "cmp_a_b": -1 + }, + { + "a": "0x12c", + "b": "0x37", + "cmp_a_b": 1 + }, + { + "a": "0xca9", + "b": "0x30", + "cmp_a_b": 1 + }, + { + "a": "0x88a", + "b": "0xbfa", + "cmp_a_b": -1 + }, + { + "a": "0x7fa", + "b": "0x1a18", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x123e0", + "cmp_a_b": -1 + }, + { + "a": "0xb6", + "b": "0x4a2", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x8e4", + "b": "0x1112e", + "cmp_a_b": -1 + }, + { + "a": "0x289", + "b": "0x283", + "cmp_a_b": 1 + }, + { + "a": "0xa89", + "b": "0x931", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x4e0", + "cmp_a_b": -1 + }, + { + "a": "0x9", + "b": "0x1cba8", + "cmp_a_b": -1 + }, + { + "a": "0xa3b", + "b": "0x1c792", + "cmp_a_b": -1 + }, + { + "a": "0x29f", + "b": "0x1aec", + "cmp_a_b": -1 + }, + { + "a": "0xf4", + "b": "0x46", + "cmp_a_b": 1 + }, + { + "a": "0x6a", + "b": "0x32eb", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0xbd4", + "cmp_a_b": -1 + }, + { + "a": "0xb9", + "b": "0x12", + "cmp_a_b": 1 + }, + { + "a": "0x9", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x1e7", + "b": "0x3490", + "cmp_a_b": -1 + }, + { + "a": "0xb48", + "b": "0xdb26", + "cmp_a_b": -1 + }, + { + "a": "0x9be", + "b": "0x237c", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x2", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x5f", + "cmp_a_b": -1 + }, + { + "a": "0xb5", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x3e2", + "b": "0x2f", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1", + "cmp_a_b": -1 + }, + { + "a": "0x11", + "b": "0x11", + "cmp_a_b": 0 + }, + { + "a": "0x2", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x468", + "b": "0xa7ad", + "cmp_a_b": -1 + }, + { + "a": "0x242", + "b": "0x45d", + "cmp_a_b": -1 + }, + { + "a": "0xc", + "b": "0xc", + "cmp_a_b": 0 + }, + { + "a": "0x3", + "b": "0x1fc2", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x1e7", + "b": "0x3a", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0xa", + "cmp_a_b": -1 + }, + { + "a": "0x152", + "b": "0xef7a", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xcf", + "b": "0xcf", + "cmp_a_b": 0 + }, + { + "a": "0x383", + "b": "0x383", + "cmp_a_b": 0 + }, + { + "a": "0x2c", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0xe8", + "b": "0x25c", + "cmp_a_b": -1 + }, + { + "a": "0x11", + "b": "0x9a", + "cmp_a_b": -1 + }, + { + "a": "0x2a", + "b": "0x1b88f", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x83", + "cmp_a_b": -1 + }, + { + "a": "0xd", + "b": "0x2117", + "cmp_a_b": -1 + }, + { + "a": "0x13", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x712", + "b": "0x2f6", + "cmp_a_b": 1 + }, + { + "a": "0x1e", + "b": "0x1e", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0x4", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x64", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x514", + "b": "0x15", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x12dcf", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1d", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x27f", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x11", + "cmp_a_b": -1 + }, + { + "a": "0xb4", + "b": "0x88a5", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x7", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x777c", + "cmp_a_b": -1 + }, + { + "a": "0x6d", + "b": "0x6d", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x1ff49", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0xaef", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x32", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0xef", + "b": "0xaa", + "cmp_a_b": 1 + }, + { + "a": "0x6", + "b": "0x6b", + "cmp_a_b": -1 + }, + { + "a": "0x413", + "b": "0x4f", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x10", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x14f77", + "cmp_a_b": -1 + }, + { + "a": "0x5c8", + "b": "0x5c8", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x66", + "cmp_a_b": -1 + }, + { + "a": "0x178", + "b": "0x37", + "cmp_a_b": 1 + }, + { + "a": "0x87", + "b": "0x179", + "cmp_a_b": -1 + }, + { + "a": "0x11", + "b": "0x690", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x3ca", + "cmp_a_b": -1 + }, + { + "a": "0xc3", + "b": "0xc1b", + "cmp_a_b": -1 + }, + { + "a": "0x1a9", + "b": "0x55d", + "cmp_a_b": -1 + }, + { + "a": "0x23", + "b": "0x10f2", + "cmp_a_b": -1 + }, + { + "a": "0x285", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x6", + "b": "0x43", + "cmp_a_b": -1 + }, + { + "a": "0x1c7", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x4c6", + "b": "0x9c23", + "cmp_a_b": -1 + }, + { + "a": "0x40", + "b": "0xb5e1", + "cmp_a_b": -1 + }, + { + "a": "0x1e6", + "b": "0x1d55a", + "cmp_a_b": -1 + }, + { + "a": "0xa71", + "b": "0x1e799", + "cmp_a_b": -1 + }, + { + "a": "0x126", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x15e", + "b": "0xe62", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0xa5", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x380", + "b": "0xcf", + "cmp_a_b": 1 + }, + { + "a": "0x8", + "b": "0xcdfd", + "cmp_a_b": -1 + }, + { + "a": "0x3cd", + "b": "0x3cd", + "cmp_a_b": 0 + }, + { + "a": "0x847", + "b": "0x56fb", + "cmp_a_b": -1 + }, + { + "a": "0x49", + "b": "0x106e", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x8455", + "cmp_a_b": -1 + }, + { + "a": "0x7f9", + "b": "0x3ff", + "cmp_a_b": 1 + }, + { + "a": "0x43", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x3b", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x3", + "b": "0x5", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x2bd", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x37c7", + "cmp_a_b": -1 + }, + { + "a": "0x52a", + "b": "0x2d3", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1ca8", + "cmp_a_b": -1 + }, + { + "a": "0x137", + "b": "0x74f8", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x2", + "cmp_a_b": 0 + }, + { + "a": "0x42d", + "b": "0x157", + "cmp_a_b": 1 + }, + { + "a": "0x44", + "b": "0x35e", + "cmp_a_b": -1 + }, + { + "a": "0x15", + "b": "0xf", + "cmp_a_b": 1 + }, + { + "a": "0x1e0", + "b": "0x44", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x16b", + "cmp_a_b": -1 + }, + { + "a": "0xea", + "b": "0xa2", + "cmp_a_b": 1 + }, + { + "a": "0x1c", + "b": "0x6a35", + "cmp_a_b": -1 + }, + { + "a": "0xb", + "b": "0x11", + "cmp_a_b": -1 + }, + { + "a": "0xb15", + "b": "0x5c", + "cmp_a_b": 1 + }, + { + "a": "0x47", + "b": "0x312", + "cmp_a_b": -1 + }, + { + "a": "0x113", + "b": "0x28", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0xe", + "cmp_a_b": -1 + }, + { + "a": "0xe06", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x5", + "b": "0x2eef", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x6", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0xede0", + "cmp_a_b": -1 + }, + { + "a": "0x1db", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x472", + "b": "0x472", + "cmp_a_b": 0 + }, + { + "a": "0x7", + "b": "0x34e9", + "cmp_a_b": -1 + }, + { + "a": "0x17", + "b": "0x17", + "cmp_a_b": 0 + }, + { + "a": "0x15c", + "b": "0x76d", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x18", + "cmp_a_b": -1 + }, + { + "a": "0xae", + "b": "0x359", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0xd4", + "cmp_a_b": -1 + }, + { + "a": "0x1f", + "b": "0x34", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0xee42", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x240", + "b": "0x13", + "cmp_a_b": 1 + }, + { + "a": "0x6", + "b": "0x490", + "cmp_a_b": -1 + }, + { + "a": "0xc59", + "b": "0x22", + "cmp_a_b": 1 + }, + { + "a": "0x10e", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x32a", + "b": "0xb7d", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x3193", + "cmp_a_b": -1 + }, + { + "a": "0x649", + "b": "0x13ca", + "cmp_a_b": -1 + }, + { + "a": "0x870", + "b": "0xa6", + "cmp_a_b": 1 + }, + { + "a": "0xaa", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x2ba", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0xb03", + "cmp_a_b": -1 + }, + { + "a": "0x128", + "b": "0x96", + "cmp_a_b": 1 + }, + { + "a": "0xe86", + "b": "0xc93", + "cmp_a_b": 1 + }, + { + "a": "0x67", + "b": "0xb0", + "cmp_a_b": -1 + }, + { + "a": "0x471", + "b": "0x1c42", + "cmp_a_b": -1 + }, + { + "a": "0xae6", + "b": "0x248", + "cmp_a_b": 1 + }, + { + "a": "0x15d", + "b": "0x15d", + "cmp_a_b": 0 + }, + { + "a": "0x4be", + "b": "0x7f", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x79f", + "cmp_a_b": -1 + }, + { + "a": "0x17", + "b": "0x167ae", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x27", + "cmp_a_b": -1 + }, + { + "a": "0x24f", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x47", + "b": "0x441", + "cmp_a_b": -1 + }, + { + "a": "0x42c", + "b": "0x188", + "cmp_a_b": 1 + }, + { + "a": "0x3b4", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x6c", + "b": "0x6c", + "cmp_a_b": 0 + }, + { + "a": "0x35", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xfb", + "b": "0x844d", + "cmp_a_b": -1 + }, + { + "a": "0x23", + "b": "0x23", + "cmp_a_b": 0 + }, + { + "a": "0x18", + "b": "0x324b", + "cmp_a_b": -1 + }, + { + "a": "0x3b7", + "b": "0x29d", + "cmp_a_b": 1 + }, + { + "a": "0x3d", + "b": "0x3d", + "cmp_a_b": 0 + }, + { + "a": "0xf", + "b": "0x562", + "cmp_a_b": -1 + }, + { + "a": "0x2ce", + "b": "0x2ce", + "cmp_a_b": 0 + }, + { + "a": "0x4c", + "b": "0x130", + "cmp_a_b": -1 + }, + { + "a": "0x29b", + "b": "0x1049", + "cmp_a_b": -1 + }, + { + "a": "0x140", + "b": "0x518", + "cmp_a_b": -1 + }, + { + "a": "0x12", + "b": "0x3c", + "cmp_a_b": -1 + }, + { + "a": "0x4ae", + "b": "0x1a62a", + "cmp_a_b": -1 + }, + { + "a": "0xfb", + "b": "0x3ce9", + "cmp_a_b": -1 + }, + { + "a": "0x164", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xb", + "b": "0x18ffb", + "cmp_a_b": -1 + }, + { + "a": "0x11", + "b": "0x20f", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x7", + "cmp_a_b": -1 + }, + { + "a": "0x25", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xca", + "b": "0x973", + "cmp_a_b": -1 + }, + { + "a": "0x5f", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x492", + "b": "0x471", + "cmp_a_b": 1 + }, + { + "a": "0x20", + "b": "0x27", + "cmp_a_b": -1 + }, + { + "a": "0x3a", + "b": "0x52", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x10", + "cmp_a_b": -1 + }, + { + "a": "0x3b7", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x4f", + "b": "0x1b", + "cmp_a_b": 1 + }, + { + "a": "0x32", + "b": "0x10a1", + "cmp_a_b": -1 + }, + { + "a": "0x13", + "b": "0x22", + "cmp_a_b": -1 + }, + { + "a": "0x62", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x399", + "b": "0x10776", + "cmp_a_b": -1 + }, + { + "a": "0x69", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0xe6f", + "b": "0x2dbc", + "cmp_a_b": -1 + }, + { + "a": "0x195", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x43", + "b": "0x14e", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x2", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x1994", + "cmp_a_b": -1 + }, + { + "a": "0x9", + "b": "0x6a", + "cmp_a_b": -1 + }, + { + "a": "0x68b", + "b": "0xb", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x2", + "cmp_a_b": -1 + }, + { + "a": "0x2a", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x45", + "b": "0x45", + "cmp_a_b": 0 + }, + { + "a": "0x100", + "b": "0x171", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x47f6", + "cmp_a_b": -1 + }, + { + "a": "0x1b", + "b": "0x10f", + "cmp_a_b": -1 + }, + { + "a": "0x342", + "b": "0x72d", + "cmp_a_b": -1 + }, + { + "a": "0x7b", + "b": "0xb10", + "cmp_a_b": -1 + }, + { + "a": "0x458", + "b": "0x1ac", + "cmp_a_b": 1 + }, + { + "a": "0x33b", + "b": "0x2540", + "cmp_a_b": -1 + }, + { + "a": "0x3c6", + "b": "0xa5", + "cmp_a_b": 1 + }, + { + "a": "0xdf", + "b": "0xdf", + "cmp_a_b": 0 + }, + { + "a": "0xc48", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x8", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x9ad", + "b": "0x15607", + "cmp_a_b": -1 + }, + { + "a": "0x357", + "b": "0x357", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x461a", + "cmp_a_b": -1 + }, + { + "a": "0x3a4", + "b": "0x48", + "cmp_a_b": 1 + }, + { + "a": "0x7e", + "b": "0x214c", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xb", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x91c", + "cmp_a_b": -1 + }, + { + "a": "0x43", + "b": "0x63c5", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x900", + "b": "0x31", + "cmp_a_b": 1 + }, + { + "a": "0x8a4", + "b": "0x36", + "cmp_a_b": 1 + }, + { + "a": "0xd6f", + "b": "0x186d6", + "cmp_a_b": -1 + }, + { + "a": "0xf", + "b": "0x32ef", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x50c", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0xcb2", + "cmp_a_b": -1 + }, + { + "a": "0x272", + "b": "0x4c8c", + "cmp_a_b": -1 + }, + { + "a": "0x37", + "b": "0x1fdd", + "cmp_a_b": -1 + }, + { + "a": "0x2ad", + "b": "0x229", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x3", + "b": "0x189b3", + "cmp_a_b": -1 + }, + { + "a": "0xd", + "b": "0x65", + "cmp_a_b": -1 + }, + { + "a": "0xe45", + "b": "0xe45", + "cmp_a_b": 0 + }, + { + "a": "0x832", + "b": "0x832", + "cmp_a_b": 0 + }, + { + "a": "0x1b", + "b": "0x78", + "cmp_a_b": -1 + }, + { + "a": "0xb11", + "b": "0x4adb", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0xb", + "cmp_a_b": -1 + }, + { + "a": "0x3ea", + "b": "0x13", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x23a4", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x4740", + "cmp_a_b": -1 + }, + { + "a": "0x993", + "b": "0x1803", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x51", + "cmp_a_b": -1 + }, + { + "a": "0xf", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x18", + "b": "0x97", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x19e", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x30c", + "cmp_a_b": -1 + }, + { + "a": "0x4e", + "b": "0x9f3", + "cmp_a_b": -1 + }, + { + "a": "0x1c", + "b": "0xa6a5", + "cmp_a_b": -1 + }, + { + "a": "0x11", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xd3c", + "b": "0x12", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x26c", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x2", + "cmp_a_b": 0 + }, + { + "a": "0x9ea", + "b": "0x128", + "cmp_a_b": 1 + }, + { + "a": "0xa4b", + "b": "0xa4b", + "cmp_a_b": 0 + }, + { + "a": "0x7", + "b": "0x876d", + "cmp_a_b": -1 + }, + { + "a": "0x47d", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x4f", + "b": "0x5d", + "cmp_a_b": -1 + }, + { + "a": "0x5d5", + "b": "0x103f", + "cmp_a_b": -1 + }, + { + "a": "0x92", + "b": "0xb6", + "cmp_a_b": -1 + }, + { + "a": "0xd5b", + "b": "0x66d", + "cmp_a_b": 1 + }, + { + "a": "0x19", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x56", + "b": "0x10369", + "cmp_a_b": -1 + }, + { + "a": "0x10", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x61", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x36", + "b": "0x4e3", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x62", + "cmp_a_b": -1 + }, + { + "a": "0x12", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x97", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x133", + "b": "0xaf3", + "cmp_a_b": -1 + }, + { + "a": "0x597", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0xde9", + "b": "0x2d3", + "cmp_a_b": 1 + }, + { + "a": "0x6e9", + "b": "0xd", + "cmp_a_b": 1 + }, + { + "a": "0x1a4", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x4c5", + "b": "0x1601", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x3b0", + "b": "0x3fe", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0xcce8", + "cmp_a_b": -1 + }, + { + "a": "0x52e", + "b": "0xae9f", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x159", + "cmp_a_b": -1 + }, + { + "a": "0x1c1", + "b": "0x9a4d", + "cmp_a_b": -1 + }, + { + "a": "0xce5", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x36", + "b": "0x18", + "cmp_a_b": 1 + }, + { + "a": "0x150", + "b": "0x2c06", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x386", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x7e4c", + "cmp_a_b": -1 + }, + { + "a": "0xdd", + "b": "0x9", + "cmp_a_b": 1 + }, + { + "a": "0x9", + "b": "0xd", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0xae24", + "cmp_a_b": -1 + }, + { + "a": "0x4b1", + "b": "0xe4", + "cmp_a_b": 1 + }, + { + "a": "0x6be", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x27", + "b": "0x39", + "cmp_a_b": -1 + }, + { + "a": "0x1c6", + "b": "0x10c3", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x3", + "cmp_a_b": 0 + }, + { + "a": "0x49", + "b": "0xfa", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0xaec", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x483", + "cmp_a_b": -1 + }, + { + "a": "0x647", + "b": "0xd", + "cmp_a_b": 1 + }, + { + "a": "0x88d", + "b": "0x88d", + "cmp_a_b": 0 + }, + { + "a": "0x5", + "b": "0xa1", + "cmp_a_b": -1 + }, + { + "a": "0xce", + "b": "0x75d", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0xb", + "cmp_a_b": -1 + }, + { + "a": "0xcf7", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x4d4", + "cmp_a_b": -1 + }, + { + "a": "0xb", + "b": "0x9cc", + "cmp_a_b": -1 + }, + { + "a": "0x5c3", + "b": "0x5c3", + "cmp_a_b": 0 + }, + { + "a": "0x3e", + "b": "0xf", + "cmp_a_b": 1 + }, + { + "a": "0x852", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x49", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0xe", + "b": "0x374f", + "cmp_a_b": -1 + }, + { + "a": "0xf4f", + "b": "0x1432", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x973", + "cmp_a_b": -1 + }, + { + "a": "0x3e4", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x9", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x56", + "b": "0x21", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x3", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x40d", + "cmp_a_b": -1 + }, + { + "a": "0x8", + "b": "0x2ca9", + "cmp_a_b": -1 + }, + { + "a": "0xb5", + "b": "0x14b4", + "cmp_a_b": -1 + }, + { + "a": "0xaf8", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x94", + "b": "0x717", + "cmp_a_b": -1 + }, + { + "a": "0x23b", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x9", + "b": "0x38f", + "cmp_a_b": -1 + }, + { + "a": "0x169", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xc8", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x5", + "b": "0x2031", + "cmp_a_b": -1 + }, + { + "a": "0x4b", + "b": "0x11f7", + "cmp_a_b": -1 + }, + { + "a": "0xe82", + "b": "0xbd", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x24", + "cmp_a_b": -1 + }, + { + "a": "0x2a", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xa", + "b": "0x53f", + "cmp_a_b": -1 + }, + { + "a": "0x4a", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x18", + "b": "0x100", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x7", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x633b", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0xc86c", + "cmp_a_b": -1 + }, + { + "a": "0x28d", + "b": "0x13", + "cmp_a_b": 1 + }, + { + "a": "0x7b4", + "b": "0x40", + "cmp_a_b": 1 + }, + { + "a": "0x1e", + "b": "0x2ca", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0xf11", + "cmp_a_b": -1 + }, + { + "a": "0x7", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x93", + "b": "0x2cc", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1be7", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0xe5", + "cmp_a_b": -1 + }, + { + "a": "0x984", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0xd", + "b": "0x8a22", + "cmp_a_b": -1 + }, + { + "a": "0xa8", + "b": "0x4ab7", + "cmp_a_b": -1 + }, + { + "a": "0x28", + "b": "0x44a3", + "cmp_a_b": -1 + }, + { + "a": "0x15f", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xd", + "b": "0x14", + "cmp_a_b": -1 + }, + { + "a": "0x2f", + "b": "0x4c", + "cmp_a_b": -1 + }, + { + "a": "0x331", + "b": "0x4bb", + "cmp_a_b": -1 + }, + { + "a": "0x47", + "b": "0x1739", + "cmp_a_b": -1 + }, + { + "a": "0x187", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x6f8", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2c0", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1ae", + "b": "0x3ad4", + "cmp_a_b": -1 + }, + { + "a": "0x95", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x30", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x12b1", + "cmp_a_b": -1 + }, + { + "a": "0x9cb", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x17b4", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x6ac1", + "cmp_a_b": -1 + }, + { + "a": "0x20", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x59", + "cmp_a_b": -1 + }, + { + "a": "0x233", + "b": "0x16ef9", + "cmp_a_b": -1 + }, + { + "a": "0xb9", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x24", + "b": "0x178d8", + "cmp_a_b": -1 + }, + { + "a": "0x405", + "b": "0xfd", + "cmp_a_b": 1 + }, + { + "a": "0x20", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x2", + "cmp_a_b": -1 + }, + { + "a": "0xf", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x3e", + "b": "0x3e", + "cmp_a_b": 0 + }, + { + "a": "0x9f9", + "b": "0x9f9", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0xc34a", + "cmp_a_b": -1 + }, + { + "a": "0x24", + "b": "0x137d9", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x3", + "cmp_a_b": -1 + }, + { + "a": "0x36d", + "b": "0x23", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xe5", + "cmp_a_b": -1 + }, + { + "a": "0xe0", + "b": "0xe90d", + "cmp_a_b": -1 + }, + { + "a": "0x5f", + "b": "0x93", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x20", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x554", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x6a", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0xa4", + "cmp_a_b": -1 + }, + { + "a": "0x187", + "b": "0x88c9", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x19e", + "cmp_a_b": -1 + }, + { + "a": "0x43", + "b": "0x43", + "cmp_a_b": 0 + }, + { + "a": "0x7", + "b": "0x96fa", + "cmp_a_b": -1 + }, + { + "a": "0xe", + "b": "0xaecf", + "cmp_a_b": -1 + }, + { + "a": "0x13f", + "b": "0x2528", + "cmp_a_b": -1 + }, + { + "a": "0xa", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1d9", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x3a", + "b": "0x15645", + "cmp_a_b": -1 + }, + { + "a": "0x587", + "b": "0x38af", + "cmp_a_b": -1 + }, + { + "a": "0xe29", + "b": "0xe29", + "cmp_a_b": 0 + }, + { + "a": "0x3", + "b": "0x3", + "cmp_a_b": 0 + }, + { + "a": "0x7", + "b": "0x13602", + "cmp_a_b": -1 + }, + { + "a": "0xeba", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1a", + "b": "0x18", + "cmp_a_b": 1 + }, + { + "a": "0x835", + "b": "0x835", + "cmp_a_b": 0 + }, + { + "a": "0x197", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x6", + "b": "0x633e", + "cmp_a_b": -1 + }, + { + "a": "0x8", + "b": "0x6da", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x7a", + "cmp_a_b": -1 + }, + { + "a": "0x11a", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xf", + "b": "0x282", + "cmp_a_b": -1 + }, + { + "a": "0xc21", + "b": "0x8d7d", + "cmp_a_b": -1 + }, + { + "a": "0x5e", + "b": "0x33", + "cmp_a_b": 1 + }, + { + "a": "0x14", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x36", + "b": "0x163b", + "cmp_a_b": -1 + }, + { + "a": "0x702", + "b": "0xc97d", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1a65", + "cmp_a_b": -1 + }, + { + "a": "0x1a", + "b": "0x1fca7", + "cmp_a_b": -1 + }, + { + "a": "0x1ca", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x77a", + "b": "0x77a", + "cmp_a_b": 0 + }, + { + "a": "0x1fb", + "b": "0x1fb", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0x8f", + "cmp_a_b": -1 + }, + { + "a": "0x22", + "b": "0x28", + "cmp_a_b": -1 + }, + { + "a": "0xa", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x47", + "b": "0x1583", + "cmp_a_b": -1 + }, + { + "a": "0x196", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x176", + "b": "0x176", + "cmp_a_b": 0 + }, + { + "a": "0x349", + "b": "0x103", + "cmp_a_b": 1 + }, + { + "a": "0x1e7", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x2", + "cmp_a_b": -1 + }, + { + "a": "0x2c0", + "b": "0xeb37", + "cmp_a_b": -1 + }, + { + "a": "0x26", + "b": "0x2776", + "cmp_a_b": -1 + }, + { + "a": "0x3b", + "b": "0x1d139", + "cmp_a_b": -1 + }, + { + "a": "0x14", + "b": "0x223", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x5", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x5", + "cmp_a_b": 0 + }, + { + "a": "0x76", + "b": "0x76", + "cmp_a_b": 0 + }, + { + "a": "0x6c", + "b": "0x42", + "cmp_a_b": 1 + }, + { + "a": "0x31", + "b": "0x7f2a", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x4a", + "cmp_a_b": -1 + }, + { + "a": "0xec", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x9", + "b": "0x86fe", + "cmp_a_b": -1 + }, + { + "a": "0x349", + "b": "0x9", + "cmp_a_b": 1 + }, + { + "a": "0x3", + "b": "0x36d3", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x326e", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x2a", + "cmp_a_b": -1 + }, + { + "a": "0xd", + "b": "0x1177", + "cmp_a_b": -1 + }, + { + "a": "0x17", + "b": "0x5dcd", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x7", + "cmp_a_b": -1 + }, + { + "a": "0x34", + "b": "0x953c", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0xec", + "cmp_a_b": -1 + }, + { + "a": "0x165", + "b": "0x165", + "cmp_a_b": 0 + }, + { + "a": "0xc0", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x7d", + "b": "0x23", + "cmp_a_b": 1 + }, + { + "a": "0x716", + "b": "0x1fc2", + "cmp_a_b": -1 + }, + { + "a": "0xd8", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x19d", + "b": "0xa053", + "cmp_a_b": -1 + }, + { + "a": "0x1c6", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x2f5", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x3f", + "b": "0xbddb", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x4", + "cmp_a_b": -1 + }, + { + "a": "0x5e", + "b": "0x412", + "cmp_a_b": -1 + }, + { + "a": "0x36", + "b": "0x18", + "cmp_a_b": 1 + }, + { + "a": "0xb2", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x3ff", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x51", + "b": "0x934", + "cmp_a_b": -1 + }, + { + "a": "0xe", + "b": "0x31", + "cmp_a_b": -1 + }, + { + "a": "0x4b", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x330", + "b": "0x330", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x101", + "b": "0x1db3", + "cmp_a_b": -1 + }, + { + "a": "0x6ac", + "b": "0x839", + "cmp_a_b": -1 + }, + { + "a": "0x11a", + "b": "0x65", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x858a", + "cmp_a_b": -1 + }, + { + "a": "0x1f", + "b": "0x708", + "cmp_a_b": -1 + }, + { + "a": "0x67e", + "b": "0x20", + "cmp_a_b": 1 + }, + { + "a": "0x11", + "b": "0x17", + "cmp_a_b": -1 + }, + { + "a": "0x28", + "b": "0x34", + "cmp_a_b": -1 + }, + { + "a": "0x6ac", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x30", + "b": "0x17d9", + "cmp_a_b": -1 + }, + { + "a": "0x35d", + "b": "0x115", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x6dde", + "cmp_a_b": -1 + }, + { + "a": "0x442", + "b": "0x978", + "cmp_a_b": -1 + }, + { + "a": "0x976", + "b": "0x5124", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x19cb", + "cmp_a_b": -1 + }, + { + "a": "0x9af", + "b": "0x7e8", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x8d9f", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x1d", + "cmp_a_b": -1 + }, + { + "a": "0x438", + "b": "0x438", + "cmp_a_b": 0 + }, + { + "a": "0x9bf", + "b": "0x16", + "cmp_a_b": 1 + }, + { + "a": "0xe", + "b": "0x270", + "cmp_a_b": -1 + }, + { + "a": "0x1b", + "b": "0x1b", + "cmp_a_b": 0 + }, + { + "a": "0x620", + "b": "0x40b", + "cmp_a_b": 1 + }, + { + "a": "0x36", + "b": "0x7053", + "cmp_a_b": -1 + }, + { + "a": "0xf", + "b": "0x1081e", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x5e47", + "cmp_a_b": -1 + }, + { + "a": "0xffb", + "b": "0x520e", + "cmp_a_b": -1 + }, + { + "a": "0x2d1", + "b": "0x1c", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x4", + "cmp_a_b": -1 + }, + { + "a": "0xf", + "b": "0xbc", + "cmp_a_b": -1 + }, + { + "a": "0x767", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xab9", + "b": "0x8f", + "cmp_a_b": 1 + }, + { + "a": "0x525", + "b": "0x780", + "cmp_a_b": -1 + }, + { + "a": "0x20", + "b": "0xe858", + "cmp_a_b": -1 + }, + { + "a": "0x88", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x738", + "b": "0x9", + "cmp_a_b": 1 + }, + { + "a": "0x16", + "b": "0xb8", + "cmp_a_b": -1 + }, + { + "a": "0xc83", + "b": "0xc83", + "cmp_a_b": 0 + }, + { + "a": "0x24", + "b": "0x170c", + "cmp_a_b": -1 + }, + { + "a": "0x4c", + "b": "0x1182", + "cmp_a_b": -1 + }, + { + "a": "0x10", + "b": "0x1f", + "cmp_a_b": -1 + }, + { + "a": "0x1a4", + "b": "0x11206", + "cmp_a_b": -1 + }, + { + "a": "0x17", + "b": "0x1f7fe", + "cmp_a_b": -1 + }, + { + "a": "0x535", + "b": "0x535", + "cmp_a_b": 0 + }, + { + "a": "0x3b2", + "b": "0x7f", + "cmp_a_b": 1 + }, + { + "a": "0x72", + "b": "0x189a", + "cmp_a_b": -1 + }, + { + "a": "0x182", + "b": "0x36e5", + "cmp_a_b": -1 + }, + { + "a": "0x9a", + "b": "0xae", + "cmp_a_b": -1 + }, + { + "a": "0x56", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x928", + "cmp_a_b": -1 + }, + { + "a": "0x77", + "b": "0x50", + "cmp_a_b": 1 + }, + { + "a": "0x2cd", + "b": "0x8d8", + "cmp_a_b": -1 + }, + { + "a": "0x2d6", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x3a", + "cmp_a_b": -1 + }, + { + "a": "0x6d", + "b": "0x4b45", + "cmp_a_b": -1 + }, + { + "a": "0x387", + "b": "0x387", + "cmp_a_b": 0 + }, + { + "a": "0x23", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x57", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x90", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x1a", + "b": "0x58", + "cmp_a_b": -1 + }, + { + "a": "0xbc", + "b": "0x3794", + "cmp_a_b": -1 + }, + { + "a": "0x118", + "b": "0x690", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0xa", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x30", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x33a", + "b": "0x5f7a", + "cmp_a_b": -1 + }, + { + "a": "0x2d8", + "b": "0x5f", + "cmp_a_b": 1 + }, + { + "a": "0x27", + "b": "0xc50e", + "cmp_a_b": -1 + }, + { + "a": "0x4e", + "b": "0xe", + "cmp_a_b": 1 + }, + { + "a": "0x59", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xac", + "b": "0x2ad3", + "cmp_a_b": -1 + }, + { + "a": "0x8", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x28", + "b": "0x640f", + "cmp_a_b": -1 + }, + { + "a": "0x206", + "b": "0xa04", + "cmp_a_b": -1 + }, + { + "a": "0x9", + "b": "0x1e66b", + "cmp_a_b": -1 + }, + { + "a": "0x13", + "b": "0x11", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x13", + "cmp_a_b": -1 + }, + { + "a": "0xb9a", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x3328", + "cmp_a_b": -1 + }, + { + "a": "0xc", + "b": "0xc", + "cmp_a_b": 0 + }, + { + "a": "0x40", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0xa", + "b": "0x20", + "cmp_a_b": -1 + }, + { + "a": "0xb", + "b": "0x23d", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x17", + "cmp_a_b": -1 + }, + { + "a": "0x65d", + "b": "0xeb", + "cmp_a_b": 1 + }, + { + "a": "0x43", + "b": "0x43", + "cmp_a_b": 0 + }, + { + "a": "0x1c", + "b": "0x27", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x440", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x3", + "cmp_a_b": -1 + }, + { + "a": "0xa40", + "b": "0xb051", + "cmp_a_b": -1 + }, + { + "a": "0x1c", + "b": "0xe", + "cmp_a_b": 1 + }, + { + "a": "0x3", + "b": "0x224", + "cmp_a_b": -1 + }, + { + "a": "0x13", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x5e5", + "b": "0x922", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x4f4", + "cmp_a_b": -1 + }, + { + "a": "0x1c2", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x4d", + "b": "0x1d", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x2", + "cmp_a_b": 0 + }, + { + "a": "0x8", + "b": "0x400", + "cmp_a_b": -1 + }, + { + "a": "0x199", + "b": "0x3278", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x108f", + "cmp_a_b": -1 + }, + { + "a": "0x10", + "b": "0x2c", + "cmp_a_b": -1 + }, + { + "a": "0x12", + "b": "0x11529", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x25", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x410", + "b": "0x410", + "cmp_a_b": 0 + }, + { + "a": "0xb", + "b": "0x11", + "cmp_a_b": -1 + }, + { + "a": "0x23e", + "b": "0x6ce", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x59", + "cmp_a_b": -1 + }, + { + "a": "0x7bc", + "b": "0x7bc", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x102", + "b": "0x27", + "cmp_a_b": 1 + }, + { + "a": "0x1c9", + "b": "0x21d9", + "cmp_a_b": -1 + }, + { + "a": "0x8a1", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x5", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x87", + "b": "0xd0", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x638", + "cmp_a_b": -1 + }, + { + "a": "0x15b", + "b": "0x2ab", + "cmp_a_b": -1 + }, + { + "a": "0x8c", + "b": "0x31c", + "cmp_a_b": -1 + }, + { + "a": "0x8", + "b": "0x3e3f", + "cmp_a_b": -1 + }, + { + "a": "0xce8", + "b": "0xce", + "cmp_a_b": 1 + }, + { + "a": "0x84", + "b": "0x1212", + "cmp_a_b": -1 + }, + { + "a": "0x1e3", + "b": "0x1e7af", + "cmp_a_b": -1 + }, + { + "a": "0x86", + "b": "0xa36", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1b9", + "cmp_a_b": -1 + }, + { + "a": "0x3f", + "b": "0x1ae", + "cmp_a_b": -1 + }, + { + "a": "0x8", + "b": "0xc1", + "cmp_a_b": -1 + }, + { + "a": "0xf", + "b": "0x4c9", + "cmp_a_b": -1 + }, + { + "a": "0xb", + "b": "0x5d", + "cmp_a_b": -1 + }, + { + "a": "0x12", + "b": "0x1a6f", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x110", + "cmp_a_b": -1 + }, + { + "a": "0x12f", + "b": "0x13", + "cmp_a_b": 1 + }, + { + "a": "0xf", + "b": "0xf", + "cmp_a_b": 0 + }, + { + "a": "0x4", + "b": "0x248", + "cmp_a_b": -1 + }, + { + "a": "0x88e", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x3dd", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0xb", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x12", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x17", + "b": "0x2d", + "cmp_a_b": -1 + }, + { + "a": "0x2d", + "b": "0xf0", + "cmp_a_b": -1 + }, + { + "a": "0x1cf", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x426a", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x33", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x104a", + "cmp_a_b": -1 + }, + { + "a": "0x18", + "b": "0x18", + "cmp_a_b": 0 + }, + { + "a": "0x5", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xcb9", + "b": "0x34e", + "cmp_a_b": 1 + }, + { + "a": "0x24", + "b": "0x46", + "cmp_a_b": -1 + }, + { + "a": "0x48f", + "b": "0xe", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1117e", + "cmp_a_b": -1 + }, + { + "a": "0xce1", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x950", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x1d", + "b": "0x1d", + "cmp_a_b": 0 + }, + { + "a": "0x28a", + "b": "0xc5eb", + "cmp_a_b": -1 + }, + { + "a": "0x25a", + "b": "0xb47", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x36d", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0xf97d", + "cmp_a_b": -1 + }, + { + "a": "0x87f", + "b": "0x630", + "cmp_a_b": 1 + }, + { + "a": "0x3", + "b": "0x8", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x8", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x997", + "cmp_a_b": -1 + }, + { + "a": "0x1f", + "b": "0xe1", + "cmp_a_b": -1 + }, + { + "a": "0xef", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x27", + "b": "0x1936d", + "cmp_a_b": -1 + }, + { + "a": "0xf79", + "b": "0xa0", + "cmp_a_b": 1 + }, + { + "a": "0xa4", + "b": "0x4ec9", + "cmp_a_b": -1 + }, + { + "a": "0x22", + "b": "0x26", + "cmp_a_b": -1 + }, + { + "a": "0x3e7", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x6", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2c2", + "b": "0x18d", + "cmp_a_b": 1 + }, + { + "a": "0x70", + "b": "0x70", + "cmp_a_b": 0 + }, + { + "a": "0x9", + "b": "0x60d", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x6", + "cmp_a_b": 0 + }, + { + "a": "0x9e", + "b": "0x11281", + "cmp_a_b": -1 + }, + { + "a": "0x64", + "b": "0x63", + "cmp_a_b": 1 + }, + { + "a": "0x562", + "b": "0x907d", + "cmp_a_b": -1 + }, + { + "a": "0x31", + "b": "0x1936", + "cmp_a_b": -1 + }, + { + "a": "0x3d2", + "b": "0x1e", + "cmp_a_b": 1 + }, + { + "a": "0x1b", + "b": "0x4f98", + "cmp_a_b": -1 + }, + { + "a": "0xa46", + "b": "0x1019e", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xa", + "cmp_a_b": -1 + }, + { + "a": "0x528", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x43a", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x1d", + "cmp_a_b": -1 + }, + { + "a": "0xa", + "b": "0x82", + "cmp_a_b": -1 + }, + { + "a": "0x8d", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x67", + "b": "0x67", + "cmp_a_b": 0 + }, + { + "a": "0x22", + "b": "0xa69", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x435", + "cmp_a_b": -1 + }, + { + "a": "0x572", + "b": "0x3463", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x49", + "b": "0x3530", + "cmp_a_b": -1 + }, + { + "a": "0x9fe", + "b": "0x2aa", + "cmp_a_b": 1 + }, + { + "a": "0xd1", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x830", + "b": "0x7f", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0xeb43", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x17794", + "cmp_a_b": -1 + }, + { + "a": "0x487", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x20", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x14", + "b": "0x1f087", + "cmp_a_b": -1 + }, + { + "a": "0x3f", + "b": "0xa80d", + "cmp_a_b": -1 + }, + { + "a": "0x24", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x11", + "cmp_a_b": -1 + }, + { + "a": "0x2c3", + "b": "0x2c3", + "cmp_a_b": 0 + }, + { + "a": "0x3", + "b": "0x5", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x94", + "cmp_a_b": -1 + }, + { + "a": "0xb2", + "b": "0xb2", + "cmp_a_b": 0 + }, + { + "a": "0xb", + "b": "0x837", + "cmp_a_b": -1 + }, + { + "a": "0x35", + "b": "0x4be", + "cmp_a_b": -1 + }, + { + "a": "0x1c", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x3a", + "b": "0x3a", + "cmp_a_b": 0 + }, + { + "a": "0x9", + "b": "0x1941e", + "cmp_a_b": -1 + }, + { + "a": "0x6", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x22", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x5f", + "b": "0x5f", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0xd0", + "cmp_a_b": -1 + }, + { + "a": "0x6fc", + "b": "0x2dcd", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x8a4", + "cmp_a_b": -1 + }, + { + "a": "0xfa", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xbd", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1e", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x15", + "cmp_a_b": -1 + }, + { + "a": "0x4c", + "b": "0xe", + "cmp_a_b": 1 + }, + { + "a": "0x941", + "b": "0x73ac", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x14", + "cmp_a_b": -1 + }, + { + "a": "0x60", + "b": "0x63", + "cmp_a_b": -1 + }, + { + "a": "0x1dd", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x7f", + "b": "0x3237", + "cmp_a_b": -1 + }, + { + "a": "0xcd", + "b": "0x21", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x23", + "cmp_a_b": -1 + }, + { + "a": "0x25", + "b": "0x18db", + "cmp_a_b": -1 + }, + { + "a": "0x3e7", + "b": "0x9", + "cmp_a_b": 1 + }, + { + "a": "0x9f2", + "b": "0x2d02", + "cmp_a_b": -1 + }, + { + "a": "0x7", + "b": "0x6619", + "cmp_a_b": -1 + }, + { + "a": "0x34", + "b": "0x741", + "cmp_a_b": -1 + }, + { + "a": "0x355", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x2b6", + "b": "0x99", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x353", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0xa8", + "b": "0x61a9", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x134", + "cmp_a_b": -1 + }, + { + "a": "0x9", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x27", + "b": "0x59", + "cmp_a_b": -1 + }, + { + "a": "0xc81", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x667c", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x193", + "cmp_a_b": -1 + }, + { + "a": "0x17", + "b": "0x13b", + "cmp_a_b": -1 + }, + { + "a": "0xbe", + "b": "0x1de", + "cmp_a_b": -1 + }, + { + "a": "0x175", + "b": "0x6f", + "cmp_a_b": 1 + }, + { + "a": "0x1cd", + "b": "0x1cd", + "cmp_a_b": 0 + }, + { + "a": "0xeb3", + "b": "0x13589", + "cmp_a_b": -1 + }, + { + "a": "0x414", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x25", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x1fd", + "b": "0x6a9e", + "cmp_a_b": -1 + }, + { + "a": "0x99", + "b": "0xf", + "cmp_a_b": 1 + }, + { + "a": "0x4f2", + "b": "0xd4", + "cmp_a_b": 1 + }, + { + "a": "0xa1", + "b": "0x52", + "cmp_a_b": 1 + }, + { + "a": "0xd2", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x10", + "b": "0x3f", + "cmp_a_b": -1 + }, + { + "a": "0x44", + "b": "0x8e1a", + "cmp_a_b": -1 + }, + { + "a": "0xea", + "b": "0x373", + "cmp_a_b": -1 + }, + { + "a": "0x2d", + "b": "0x2d", + "cmp_a_b": 0 + }, + { + "a": "0x2c", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0xb4a", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x6f", + "b": "0x30d3", + "cmp_a_b": -1 + }, + { + "a": "0xfe", + "b": "0x47d6", + "cmp_a_b": -1 + }, + { + "a": "0x19a", + "b": "0x243", + "cmp_a_b": -1 + }, + { + "a": "0x8bd", + "b": "0x1a8", + "cmp_a_b": 1 + }, + { + "a": "0xa", + "b": "0x22", + "cmp_a_b": -1 + }, + { + "a": "0xb", + "b": "0xb", + "cmp_a_b": 0 + }, + { + "a": "0x13a", + "b": "0x13a", + "cmp_a_b": 0 + }, + { + "a": "0x2", + "b": "0x17", + "cmp_a_b": -1 + }, + { + "a": "0x13", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1a", + "cmp_a_b": -1 + }, + { + "a": "0x42", + "b": "0x324", + "cmp_a_b": -1 + }, + { + "a": "0x2a9", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x68d", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x8e94", + "cmp_a_b": -1 + }, + { + "a": "0x70", + "b": "0x55e", + "cmp_a_b": -1 + }, + { + "a": "0x12", + "b": "0x5bf", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x5f6c", + "cmp_a_b": -1 + }, + { + "a": "0x1d9", + "b": "0xa8e", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0xb63", + "cmp_a_b": -1 + }, + { + "a": "0x33", + "b": "0x1e5", + "cmp_a_b": -1 + }, + { + "a": "0x1e", + "b": "0x15ee", + "cmp_a_b": -1 + }, + { + "a": "0x251", + "b": "0x9", + "cmp_a_b": 1 + }, + { + "a": "0x2eb", + "b": "0x2eb", + "cmp_a_b": 0 + }, + { + "a": "0xb", + "b": "0xdf18", + "cmp_a_b": -1 + }, + { + "a": "0xea", + "b": "0x1325", + "cmp_a_b": -1 + }, + { + "a": "0x15", + "b": "0x25", + "cmp_a_b": -1 + }, + { + "a": "0xdad", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x654", + "b": "0x654", + "cmp_a_b": 0 + }, + { + "a": "0x5", + "b": "0x1d", + "cmp_a_b": -1 + }, + { + "a": "0x1b0", + "b": "0x2102", + "cmp_a_b": -1 + }, + { + "a": "0x57", + "b": "0x1a", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x3f", + "cmp_a_b": -1 + }, + { + "a": "0x156", + "b": "0x156", + "cmp_a_b": 0 + }, + { + "a": "0x25e", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x8f", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x1f03", + "cmp_a_b": -1 + }, + { + "a": "0x683", + "b": "0xac1e", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x7e6", + "cmp_a_b": -1 + }, + { + "a": "0xf0", + "b": "0xf0", + "cmp_a_b": 0 + }, + { + "a": "0x6", + "b": "0x16", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x2b9", + "cmp_a_b": -1 + }, + { + "a": "0x1a0", + "b": "0x1948d", + "cmp_a_b": -1 + }, + { + "a": "0x11a", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0xc", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x5bc", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x354", + "cmp_a_b": -1 + }, + { + "a": "0xd", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x3ce", + "b": "0x10401", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x1f02", + "cmp_a_b": -1 + }, + { + "a": "0x9", + "b": "0x181ed", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x47", + "cmp_a_b": -1 + }, + { + "a": "0x810", + "b": "0x810", + "cmp_a_b": 0 + }, + { + "a": "0x9da", + "b": "0x98d7", + "cmp_a_b": -1 + } + ], + "test_comparison_260_130": [ + { + "a": "0x94ea07c420797000000000", + "b": "0x2a7393810d7a420000", + "cmp_a_b": 1 + }, + { + "a": "0x35eda615d842", + "b": "0xba7", + "cmp_a_b": 1 + }, + { + "a": "0x4a07dea52dbd6c0000000000000000000", + "b": "0xc2", + "cmp_a_b": 1 + }, + { + "a": "0x10f8b915fdb64400000000000000000", + "b": "0x33ab59ef560c30000", + "cmp_a_b": 1 + }, + { + "a": "0xc4a18377b88a000000000000000000000000000000000000000000000000000", + "b": "0x33df2e879c08", + "cmp_a_b": 1 + }, + { + "a": "0x2a98317e8c033e0000000", + "b": "0x4e5867c4d9cbdc000000", + "cmp_a_b": 1 + }, + { + "a": "0x5fbf2e8d58db9400000000000000000000000000000000000000", + "b": "0x8b4ae2f41214d0", + "cmp_a_b": 1 + }, + { + "a": "0x2fe4467802b1760000000000000000000000000000000000", + "b": "0x758f6b535362b4", + "cmp_a_b": 1 + }, + { + "a": "0x256ede86d6e492000000000000000000000000000000000000000000", + "b": "0x1b5a94a30a531", + "cmp_a_b": 1 + }, + { + "a": "0x2aed0a505c657400000000000000000000000", + "b": "0x5da7e3db6d69e80000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3ce245217dba9e00000000000000000000000000000000000000", + "b": "0x1f4a5ac0d286e", + "cmp_a_b": 1 + }, + { + "a": "0x4d2b2cb010020", + "b": "0x225bd10fce7ac", + "cmp_a_b": 1 + }, + { + "a": "0x154b3149ae8621000000000000000000000000000000000000000000", + "b": "0x9f221115c1ba100000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x3f33b646b04f34", + "cmp_a_b": -1 + }, + { + "a": "0xba7aa06b3930d0000000000000000000000000000000000000", + "b": "0xbfe60bdfff3478", + "cmp_a_b": 1 + }, + { + "a": "0x2ab72605aafdf40000000000000000", + "b": "0x24becc661bc2fa", + "cmp_a_b": 1 + }, + { + "a": "0xc3dfdb582a98c0000000000", + "b": "0xb13a0c88646878000000000", + "cmp_a_b": 1 + }, + { + "a": "0x189c81cc07ccf100000000", + "b": "0x31cb0412b6", + "cmp_a_b": 1 + }, + { + "a": "0x150b267", + "b": "0xbe8312d73ef7380000", + "cmp_a_b": -1 + }, + { + "a": "0xf27536f170cbc00", + "b": "0x3b2", + "cmp_a_b": 1 + }, + { + "a": "0x1517615594257a00000000000000000000000000000", + "b": "0x3713c5d3bb31dc000000", + "cmp_a_b": 1 + }, + { + "a": "0x3", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x2ff7d9aa12bea4000000000", + "b": "0x1499b01b53cc640", + "cmp_a_b": 1 + }, + { + "a": "0x12b1561b0457aa00000000000000000000000000000000", + "b": "0x39ba1b005b4e7e00", + "cmp_a_b": 1 + }, + { + "a": "0xcaa0d8d730e1100000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xc5e864fb3c7d9800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x98047f6ebfae68000000000000000000000000000000", + "b": "0x1e96", + "cmp_a_b": 1 + }, + { + "a": "0xf2f7549a36033000000000000000000", + "b": "0x4a59e3e59ae86", + "cmp_a_b": 1 + }, + { + "a": "0x4651f31bb91ac0000000000000000000000", + "b": "0x198fde35e557ed00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x118c745968fbc900000000000000000", + "b": "0x33acf4ae1aaab6000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x5a2c6d58576f4", + "cmp_a_b": -1 + }, + { + "a": "0xa8c4bc4a1452a800000000000000000000000000000000000", + "b": "0xf5ee6432cda", + "cmp_a_b": 1 + }, + { + "a": "0x3579494ce291be00000000000000000000000000000", + "b": "0x459c18", + "cmp_a_b": 1 + }, + { + "a": "0xad9d39b95780d0000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1a45b4e8fca366000000000000000000", + "b": "0x490700bfca7e00000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x33c1ebce29ae3", + "cmp_a_b": -1 + }, + { + "a": "0x1b989a8a7c7d120000000000000000000000000", + "b": "0x9f49c813b0dd3000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x58c19dcb32545c0000000000000000000000000000000000000", + "b": "0x3dcfce51726538000000000", + "cmp_a_b": 1 + }, + { + "a": "0x6973d168efb684000000000000000000000", + "b": "0x1be085c935f64d0", + "cmp_a_b": 1 + }, + { + "a": "0x422fca5c1be4440000000000000000000000000000000000000000000000", + "b": "0x27c879f34", + "cmp_a_b": 1 + }, + { + "a": "0x13a7dfb183dc19000000000000000000000000000", + "b": "0xbe7641aaa5115", + "cmp_a_b": 1 + }, + { + "a": "0xdbdc80f5e8bb58000000000000000000000000000000", + "b": "0x21cf600c84e9f00000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x8e3cc16", + "b": "0xd27449ccb70b", + "cmp_a_b": -1 + }, + { + "a": "0xda85ced9b847b0000000000000", + "b": "0x9e2b88aca65aa800000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x103c", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x12edf006b166b0000000", + "cmp_a_b": -1 + }, + { + "a": "0x898c83b76000b800000000000000000000000000000000000000000000000", + "b": "0x88dfaadceec2180000000000", + "cmp_a_b": 1 + }, + { + "a": "0x208146a53381aa00000000000000", + "b": "0x6a630af2e2", + "cmp_a_b": 1 + }, + { + "a": "0x4bc99b6e45325800000000000000000000000000000000000000000000000", + "b": "0x61563a68", + "cmp_a_b": 1 + }, + { + "a": "0x15154523b0834900000000000000000000000000000000000000000000000000", + "b": "0x44aea5a14b", + "cmp_a_b": 1 + }, + { + "a": "0x190ef8ed201", + "b": "0x35eb91cf716ddc00000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2ec6ddb7c543fa000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x153e0e6d88ee3e0000000000000000000000000000000000", + "b": "0x8213cfe3819d7000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xa5505818c21768000000000000000000000000000", + "b": "0x198024ed65fbbc0000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x110ced8aa8f77", + "b": "0x580acb7fb0", + "cmp_a_b": 1 + }, + { + "a": "0x271e61273ac16a000000000000000000000000000000000000000000", + "b": "0x80a29da1139ed80", + "cmp_a_b": 1 + }, + { + "a": "0x21805a36fb5e3400000000000000", + "b": "0x103", + "cmp_a_b": 1 + }, + { + "a": "0x79bbbdd1dc5c78000000000000000000000000000000000000000000", + "b": "0x52", + "cmp_a_b": 1 + }, + { + "a": "0x624326bd2916980000000000000000000000000000", + "b": "0x1b0", + "cmp_a_b": 1 + }, + { + "a": "0x60a3a292684ee800000000000000000000000000000000000", + "b": "0x15e0c4d0f5bbca00000000", + "cmp_a_b": 1 + }, + { + "a": "0x2be941559ba41e000000000000000", + "b": "0x8f4fa5a1abff700", + "cmp_a_b": 1 + }, + { + "a": "0x16580ce12880960000000000000000000000000000000", + "b": "0x30ebf874f06ca6", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x42e4f7815312", + "cmp_a_b": -1 + }, + { + "a": "0x90b6da1214f0c0000000000000000000000000000000000000000000000000", + "b": "0x2d811261c204a2000", + "cmp_a_b": 1 + }, + { + "a": "0x3e9d65f96654100000000000000000000000000000000", + "b": "0xcbf91cf5d5", + "cmp_a_b": 1 + }, + { + "a": "0x62b4a4df184ed", + "b": "0x7936", + "cmp_a_b": 1 + }, + { + "a": "0x6f9abef90a115c0000000000000000000000", + "b": "0x11fd7af143bf", + "cmp_a_b": 1 + }, + { + "a": "0x30f30a69f674000000000000000000000000000000000000", + "b": "0x1667563466e672000000", + "cmp_a_b": 1 + }, + { + "a": "0x2542cbfcab013800000000000000000000000000000000000000000000000000", + "b": "0x1cc07f99320201", + "cmp_a_b": 1 + }, + { + "a": "0xb55606641e076800000000000000000000000000", + "b": "0xc5f8755072f4b000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1138eee5e99277000", + "b": "0x1165a16fc9762000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4d9021e0478f80000000000000000000000000000000000000000000000000000", + "b": "0x1e25191692a3", + "cmp_a_b": 1 + }, + { + "a": "0x5281d0af69f23c000000000000000000000000000000000", + "b": "0x59416896bf4a34000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2b79554e045c4a", + "b": "0x2f44faa5b45df", + "cmp_a_b": 1 + }, + { + "a": "0x9aaac0e15022180000000000000000000000000000000", + "b": "0x3d0785a765f6300000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x15034ca88376f7000000000000000000000000000000000000000000000000000", + "b": "0xd", + "cmp_a_b": 1 + }, + { + "a": "0x51a4eb9a9a141c000000000000000000000000000000000000000000000000", + "b": "0x10187023a7eb90000", + "cmp_a_b": 1 + }, + { + "a": "0xf35d2b64f8b6f8000000000000000000000000000000", + "b": "0x12809950671b4a00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x77ebd00e57c6b8000000000000000000000000000", + "b": "0xfe7280964523", + "cmp_a_b": 1 + }, + { + "a": "0x223779275d23fa0000000000000000000000000000000000000", + "b": "0x363914e2fb540c00", + "cmp_a_b": 1 + }, + { + "a": "0x1cfa74d72c3bef00000000000000000000000000000000000000000000", + "b": "0xd67a58dbd44500000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x25562a4d32ee500000000000000000000000000000000", + "b": "0x3b6", + "cmp_a_b": 1 + }, + { + "a": "0xc5f", + "b": "0x34a40b87a528de000", + "cmp_a_b": -1 + }, + { + "a": "0x2794dd77f9526c000000000000", + "b": "0x351d", + "cmp_a_b": 1 + }, + { + "a": "0x7085aead15fad40000000000000000000", + "b": "0x225ba934ea9f9200", + "cmp_a_b": 1 + }, + { + "a": "0x248c067bd06bbe0000000000000000000000", + "b": "0x3001c8efa4def8", + "cmp_a_b": 1 + }, + { + "a": "0xc75409191e7ac00000000000000000000000", + "b": "0x83a2c4c7c202b0000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xc46e00f85d30e800000000", + "b": "0x118a4257154284000", + "cmp_a_b": 1 + }, + { + "a": "0xa70626b5e2fd980000000000000000000000000000", + "b": "0x13c62affca2b9d000000", + "cmp_a_b": 1 + }, + { + "a": "0x3cd0693d9e608c00000000000000000", + "b": "0x884a4bc99c5388000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x24715cb579f9880000", + "cmp_a_b": -1 + }, + { + "a": "0x148fce305075510000000000000000000000000000000000000000000000000", + "b": "0xb00d62d50f4d780000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x62356e7f65f6bc00000000000000000000000000000000000000000000", + "b": "0xdd95a", + "cmp_a_b": 1 + }, + { + "a": "0xd97d67b239d830000000000000000000000000000000", + "b": "0x24a1c92bf9bd1a000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3ae", + "b": "0xc99d811a392", + "cmp_a_b": -1 + }, + { + "a": "0xfa87a1959713800000000000000000000000000000000000000000000000", + "b": "0x7065de6424a944000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xf3b963a0abec9000000000000000000000000000000000000000000000000000", + "b": "0xb3be8f69e1a808000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x15945db22fcc3400000000000000000000000000", + "b": "0x24f5c3fa10f6a8000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x5706ebb0c707380000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37c256fa60c50800000000000000000000000", + "b": "0x238e11d03805a20000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x235e5cb4795c1e00000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x5a4e24f5779388000000000000000000000000000000000000", + "b": "0x480a6dc8d3696000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3b01c99dc1c11a0000000000000000000000000000000000000000", + "b": "0xd6c65450165d500000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x810dcd823d349000000000000000000000000000000000000000000", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0xb57b88b163e77000000000000000000000000", + "b": "0xad5df3a19e39480", + "cmp_a_b": 1 + }, + { + "a": "0x9e9bbcbd49f2980000000000000000000000000000000000000", + "b": "0xd2896211768df0", + "cmp_a_b": 1 + }, + { + "a": "0x1cfab1b360a78c000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2c43eef5edb", + "b": "0x139c15b187dca500000000000", + "cmp_a_b": -1 + }, + { + "a": "0x159d5317e2b79f000000000000000000000000000000000000000000", + "b": "0x2eddf76e57915e0000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x35d13c0bd93", + "b": "0x6dea5c7f82dc1400000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb63c", + "b": "0x2e54", + "cmp_a_b": 1 + }, + { + "a": "0x74edd2efc89aa0000000000000000000000000000000000", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x47107c1436f99c000", + "b": "0x8552cf680d2a68000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7ed64daf36197400000000000000000000000000000", + "b": "0x2a0e9446ac641000000", + "cmp_a_b": 1 + }, + { + "a": "0x13c58b581545d700000", + "b": "0x150ad27a645da4000", + "cmp_a_b": 1 + }, + { + "a": "0x6b1fad4140e7400000000000000000000000000000000000000000000000", + "b": "0x1659e", + "cmp_a_b": 1 + }, + { + "a": "0x529f9b88a521bc000000000000", + "b": "0x91d709b5103348000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x19e6f750070ee90000000000000000000000000000000000000000000000", + "b": "0x22fc4b9", + "cmp_a_b": 1 + }, + { + "a": "0x56e67b7f00c62c00000000000", + "b": "0x31049002a0bf0a000000000", + "cmp_a_b": 1 + }, + { + "a": "0xed7cd7298530c8000000000", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x23ae23ee346a6e0", + "cmp_a_b": -1 + }, + { + "a": "0x14b275e3a10ee30000000000000000", + "b": "0x14b275e3a10ee30000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x4f6f3851be868c00000000000000000000000000000000000000000000000", + "b": "0x339722c900c55c00000000000", + "cmp_a_b": 1 + }, + { + "a": "0xc07252e4b71778000000000000000000000000000000000", + "b": "0x13", + "cmp_a_b": 1 + }, + { + "a": "0x115a4ac095184000000000000000000000000000000000", + "b": "0x1667d5572409a50000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x554d3ee6ebbc84000000000000000000000000000", + "b": "0xb57", + "cmp_a_b": 1 + }, + { + "a": "0xaeb275504b05400000000000000000000000000", + "b": "0x779fcd4de991b", + "cmp_a_b": 1 + }, + { + "a": "0x20cdb657506a9e000000000000000000000000000000000000000", + "b": "0xc2f0043b2859680", + "cmp_a_b": 1 + }, + { + "a": "0x1d1e6eeb9a4e0e0000000000000000000000000", + "b": "0x9de10f466e64300000", + "cmp_a_b": 1 + }, + { + "a": "0x37a55343156506000000000000000000000000000000000000000", + "b": "0xf693e7", + "cmp_a_b": 1 + }, + { + "a": "0x2f0540c23b9e78000000000000000000000000000000000", + "b": "0xb214a3099b", + "cmp_a_b": 1 + }, + { + "a": "0x1a74a694c709b5000000000000000000000000000000000000000000000000", + "b": "0xf8e16bca1806800000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x171cb3af76531e0000000", + "b": "0x424b74c39054d40000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37bb20dc399cba0000000000000000000", + "b": "0x75d", + "cmp_a_b": 1 + }, + { + "a": "0x195d0b4aeca91a0000000000000000000000000000000000000000", + "b": "0x1d5f7024", + "cmp_a_b": 1 + }, + { + "a": "0x2542d22dac097e0000000000000000000", + "b": "0x1540fbbe80f5d6000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x486aa4cac2f8", + "b": "0x9788f380d2f470000000", + "cmp_a_b": -1 + }, + { + "a": "0x1547189d423995000000000000000000000000000000000", + "b": "0x10801f9bd7a31b00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2fd51105a2a05a0000000000000000000000", + "b": "0xcd466ea7effe700000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x72f8e5211925f40", + "b": "0x59", + "cmp_a_b": 1 + }, + { + "a": "0x255ce855414b3600000000000000000000000000", + "b": "0x2c", + "cmp_a_b": 1 + }, + { + "a": "0x3f091e2c2def9e0000000", + "b": "0x1d6e07911721100000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x819db", + "b": "0xdf46096b696d600000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x18d66a10f178880000000000000", + "b": "0x91e539", + "cmp_a_b": 1 + }, + { + "a": "0xc3d7b2b22a714800000000000000000", + "b": "0x34920c1c47", + "cmp_a_b": 1 + }, + { + "a": "0xb39262d6c9793800000", + "b": "0x5af422c9c1e04400000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x516ef5817ea3ac0000000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xf855a839a5b028000000000000000000000000000000000000000000000000000", + "b": "0x30f", + "cmp_a_b": 1 + }, + { + "a": "0x1c5df5", + "b": "0x16", + "cmp_a_b": 1 + }, + { + "a": "0x1bf09795749fd1000000000000000000000000000000000000000000000000", + "b": "0xef3175f7341ca80000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x49", + "b": "0xa32e6d6c6bf6380000000000", + "cmp_a_b": -1 + }, + { + "a": "0x21da4e8f4ed9840000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xb4154ed3975ec00000000000000000000000000000000000000000", + "b": "0x1a92cff", + "cmp_a_b": 1 + }, + { + "a": "0xc1", + "b": "0x6885d2a6ad4f0c0000", + "cmp_a_b": -1 + }, + { + "a": "0xade38d3021", + "b": "0x567015e73065840000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1f", + "b": "0x1904035f1374ca00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4d9b6b5a53ac980", + "b": "0x618b31280a", + "cmp_a_b": 1 + }, + { + "a": "0x22ef1e3d2dd8b800000000000000000000000000000000", + "b": "0x3decc2105b70a000", + "cmp_a_b": 1 + }, + { + "a": "0x1a6", + "b": "0x13b33f12f9bc140000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x19aecee0d3cac400", + "b": "0x16dfd0e0b25e710000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4b684fe35877bc00000000000", + "b": "0x3168f70", + "cmp_a_b": 1 + }, + { + "a": "0x406b4cb33adca00000000000000000000000000000000", + "b": "0xb1a686d1d2cd880000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x181f0c90a2f3b400000000000", + "b": "0xfea996a925cb700000000", + "cmp_a_b": 1 + }, + { + "a": "0xf54f67df7a42a00000000000000000000000000000000000000000000000", + "b": "0x1b35488a0f4eb4000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1e9d6c85ca2f1d000000000", + "b": "0x137a37afe69", + "cmp_a_b": 1 + }, + { + "a": "0xa7bc085", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1f4f5279ee08b100000000000000000000000000000000", + "b": "0x2a19eb487274ca00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x18a5e0769cdfe0000000000000000000000000000000000000000000000000", + "b": "0xe4b", + "cmp_a_b": 1 + }, + { + "a": "0x1c6bc332f1a81c0000000000000000000", + "b": "0x59dcffd591b1a00000", + "cmp_a_b": 1 + }, + { + "a": "0x21ff3b743828600000000000000000000000000000000000000000000", + "b": "0x3139cfa3b60b7e00", + "cmp_a_b": 1 + }, + { + "a": "0x76cb03d7a5ccc80", + "b": "0x989b3154", + "cmp_a_b": 1 + }, + { + "a": "0x4594ffd20285b00000000000000000000000000", + "b": "0x1d065c3283", + "cmp_a_b": 1 + }, + { + "a": "0x8c0b42a52916480000000000000000000000000000000000000000000000000", + "b": "0x1dcc0468eb47d7000000", + "cmp_a_b": 1 + }, + { + "a": "0xe471699908d3880000000000000", + "b": "0xea92371ea556980000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8a7f4320a63a08000000000000000000000000000000000000000000000000000", + "b": "0x355e017b3", + "cmp_a_b": 1 + }, + { + "a": "0xc904cc4803baf000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1037b1290bfd7a000000", + "b": "0xe012dfbb9dbf4800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xaf118539da21d80000000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xf10d0247d4d858000000000000000000000", + "b": "0x1682d7d9378ba", + "cmp_a_b": 1 + }, + { + "a": "0x1827d3f406e3850000000", + "b": "0x1d19a17ae865da0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6986e3dc216c38000", + "b": "0xb4", + "cmp_a_b": 1 + }, + { + "a": "0x136ace56d329f00000000000000000000000000", + "b": "0x30dfc206", + "cmp_a_b": 1 + }, + { + "a": "0x12c03a062c85a20000000000000000000000", + "b": "0x33b00188c0ce280000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xc51f87639171200000000000000000000000000000000000000000000000", + "b": "0xf453284daf4f6800000", + "cmp_a_b": 1 + }, + { + "a": "0x2d8b601be4c0d8000000000000000000000000000000000000000000000000000", + "b": "0x9184a56d92c980000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x14c8194de53b2b00000000000000000000000000000000000000000000", + "b": "0x3a49b5c7920c1600000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x8e2d9f45", + "b": "0x11af13", + "cmp_a_b": 1 + }, + { + "a": "0xbed0c96ffc8470000000", + "b": "0x2eefd", + "cmp_a_b": 1 + }, + { + "a": "0x7ccace57e4e52000000000000000000000000000000000000000000000", + "b": "0x8f32b777f8791800000000000", + "cmp_a_b": 1 + }, + { + "a": "0x35a8d3845d954a000000000000000000000000000000000000000000000000000", + "b": "0xef63f5789b", + "cmp_a_b": 1 + }, + { + "a": "0x3a589120620f8e00000000000000000000000000000000", + "b": "0x23ba9a2f648f58", + "cmp_a_b": 1 + }, + { + "a": "0xf2ca072d14d19800000000000000000000000000", + "b": "0xea19bbeb2515c8000", + "cmp_a_b": 1 + }, + { + "a": "0x2539b0e5ec812a000000000000000000", + "b": "0x329255108fe8ba000000", + "cmp_a_b": 1 + }, + { + "a": "0xf", + "b": "0x520a557707eaa80000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x96ed3dfad440f80000000000000000000000000000000000000000000000000", + "b": "0x4718d6a946acb000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x37519cfe1e8a520000000000000", + "b": "0xd7d0ecc07409880000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6785bd84722", + "b": "0x40c5458416aaa", + "cmp_a_b": -1 + }, + { + "a": "0x86b43fb0d580b0000000000000000000000", + "b": "0x32134b8006cd520000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x4d90c07e001f300000000000000000000000000000000000000", + "b": "0x36c55d9cff0dbc00000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x7ca43394ee8054000000", + "b": "0x14075b01637c", + "cmp_a_b": 1 + }, + { + "a": "0x46dd30f5a6b45800000000000000000000000000000000000000000000000", + "b": "0x1ba", + "cmp_a_b": 1 + }, + { + "a": "0xd", + "b": "0xf68ef361c", + "cmp_a_b": -1 + }, + { + "a": "0x236e3a6288a8720000000000000000000000000000000000000000000000", + "b": "0x14654cbfa909", + "cmp_a_b": 1 + }, + { + "a": "0x13a043f0a910ec0000000000000000000000000000000000000000000", + "b": "0x1a0225cf651fe2000000", + "cmp_a_b": 1 + }, + { + "a": "0x36839d417381d200000000000000000000", + "b": "0xb8e0213d88dbf000", + "cmp_a_b": 1 + }, + { + "a": "0x61f81aa0395098000000000000", + "b": "0x81fcd0f60dad300000", + "cmp_a_b": 1 + }, + { + "a": "0x1342b0ff24e5d4000000000000000000000000000000000000000000000000", + "b": "0x61c15705e75c140000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2ceaf198b5ada8000000000000000000000000000", + "b": "0x220ef00c2e0", + "cmp_a_b": 1 + }, + { + "a": "0x8d75239f5e", + "b": "0xa72ff8", + "cmp_a_b": 1 + }, + { + "a": "0x1c9d9220b1a192000000000000000000000", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x10d4fa3a67fee500000000000000000000000000", + "b": "0x1eb9def126494f000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x205686b93a619c00000000000000000000000000000000000000", + "b": "0x3fe541142fa", + "cmp_a_b": 1 + }, + { + "a": "0x273c547da9deec0000000000000", + "b": "0x273c547da9deec0000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x6bf3d0f6205f900000000000000000000000000000000000000000000000", + "b": "0x17dba8b2170842000000", + "cmp_a_b": 1 + }, + { + "a": "0x166007a", + "b": "0xf487f", + "cmp_a_b": 1 + }, + { + "a": "0x1a56512cd6492a000000000000000000000000000000000000000", + "b": "0x4e3", + "cmp_a_b": 1 + }, + { + "a": "0xea7394758ad820000000", + "b": "0x41bc2a2812738400", + "cmp_a_b": 1 + }, + { + "a": "0x274c2c2c13a2ac00", + "b": "0x3720eb20f19412", + "cmp_a_b": 1 + }, + { + "a": "0x613c", + "b": "0x613c", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x1e91a098d1edaa00000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5f4f6bff801e04000000", + "b": "0x44dcf08602f3b8000000", + "cmp_a_b": 1 + }, + { + "a": "0x1c7779e2d9d37a00000000000000000000000000000000000000000", + "b": "0xf2bd748ae4dba0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xe5235394253b60", + "b": "0x5fa11e5e645ce4000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14e095dce717c80000000000000000000000000000000000000000", + "b": "0x4fc1bd3e5", + "cmp_a_b": 1 + }, + { + "a": "0x1594290e581e360000000000000000000000000000000000", + "b": "0x350550dfded72400000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x124ae845667bac000000", + "b": "0x80efae16665f3800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x65295741b5da7", + "b": "0x6b311ea34b081c000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3303760600", + "b": "0x3303760600", + "cmp_a_b": 0 + }, + { + "a": "0x2d4bc99f35a38c000000000000000000000", + "b": "0x108b6308dbac3e000000", + "cmp_a_b": 1 + }, + { + "a": "0x41a4f73d2c02f0000000000000000000000000000000000", + "b": "0x173fb140f89af500000000", + "cmp_a_b": 1 + }, + { + "a": "0x4d006b", + "b": "0x43c08bad4b5b94000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1432504816ed6a00000000000000", + "b": "0x34", + "cmp_a_b": 1 + }, + { + "a": "0xb6814826e5d8c80000", + "b": "0x286e198c4c3cf00000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8bd31330e59ad0000000000000000000000000000000000000000000000", + "b": "0x12b97c61382a0e000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1f4a41641e3f170000000000000000000000000000000000000000000000000", + "b": "0xe7f1419a4ba02000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x164a05b22b5fe300000000000000000000000000000000000", + "b": "0x5cea2a1cb1e22000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x14d40b17cf801000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10121b54472", + "b": "0x21eb186d929be6", + "cmp_a_b": -1 + }, + { + "a": "0x77de44", + "b": "0x5526ec8d8b21e8000", + "cmp_a_b": -1 + }, + { + "a": "0x69733b430024c4000000000000000000000000000000000000000000000000000", + "b": "0x154762fb87989d0000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1198b063e5e3", + "b": "0x4f08c0", + "cmp_a_b": 1 + }, + { + "a": "0x1175bbe1cfed39000000000000000000000000000000000000", + "b": "0xda44d5b9109e100000000000", + "cmp_a_b": 1 + }, + { + "a": "0xf6806aeda951580000000000000", + "b": "0x7f372766a974240", + "cmp_a_b": 1 + }, + { + "a": "0x167a75b3874b6a000000000000000000000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x47eb4fd429d06c00000000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1f7b2e8d609e7300000000000000000000000000000000000000000000", + "b": "0x8c6", + "cmp_a_b": 1 + }, + { + "a": "0x1f5a55c4b1249e000000000000000000000000000000000000000", + "b": "0x9fe22c83546a08", + "cmp_a_b": 1 + }, + { + "a": "0x41976dc968b91c000000000000", + "b": "0x41976dc968b91c000000000000", + "cmp_a_b": 0 + }, + { + "a": "0xc42bba62641d400000000000000000000000", + "b": "0x40eb385fa7813c", + "cmp_a_b": 1 + }, + { + "a": "0x95dbff74de9fe800000000000000000000000000000000", + "b": "0x19cde6af3f9da9000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x24f982f8c", + "b": "0x2da92041", + "cmp_a_b": 1 + }, + { + "a": "0x41480aad3fa0c00", + "b": "0x13e036d47c79710", + "cmp_a_b": 1 + }, + { + "a": "0x12b0203c92048c00000000000000000", + "b": "0x1b1999acdabecf00000000000", + "cmp_a_b": 1 + }, + { + "a": "0xbe74e1cfaeda18", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1aa10fb8a3cf5400000000000000000000000000000000000", + "b": "0x131ccc78", + "cmp_a_b": 1 + }, + { + "a": "0x6d4864b48ebcf400000000000000000000000000000000000000000000", + "b": "0xd0c5f95", + "cmp_a_b": 1 + }, + { + "a": "0x345db297a", + "b": "0x207aeb98b290b200000000", + "cmp_a_b": -1 + }, + { + "a": "0x1d88e627", + "b": "0x1d88e627", + "cmp_a_b": 0 + }, + { + "a": "0xdf4903b58c9ae0000000000000000000000000000000000000000000", + "b": "0xca2b123145", + "cmp_a_b": 1 + }, + { + "a": "0x2f87d7515d82a", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x59b68feb791250000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2ced707aeaeb860000000000000000000000000000000000000000000000000", + "b": "0x52a82f38401e60000", + "cmp_a_b": 1 + }, + { + "a": "0x404898489a84e00000000", + "b": "0x307b70d921deae00", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0xba86bebafc34d8000", + "b": "0x10ca38c2e4939e00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x156c6f5ee2d29a0000000000000000000000000000000", + "b": "0x209509ea78c6040000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xb24598c600cf28000000000000000", + "b": "0x521412bb3e2d4c", + "cmp_a_b": 1 + }, + { + "a": "0x1ce37e32ee7b3600000000000000000000000000000000000", + "b": "0x1982ddd970eb2f00000000", + "cmp_a_b": 1 + }, + { + "a": "0x1dd611c85e9ec000000000000000000000000000000000000000000000", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x29", + "b": "0x645a112", + "cmp_a_b": -1 + }, + { + "a": "0xeed", + "b": "0x2bcb300b149d3c000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb80e46784584680000000000000000000000000000000000000000000000000", + "b": "0x36a6acdd2a1a4", + "cmp_a_b": 1 + }, + { + "a": "0x16e715927", + "b": "0x16e715927", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x1b4a509ffab14d00", + "cmp_a_b": -1 + }, + { + "a": "0x169ddf44991e3b000000000000000000000000000000000000000", + "b": "0x558953c2f234", + "cmp_a_b": 1 + }, + { + "a": "0xda927c2057f53800000000000", + "b": "0x3a93f1791f156200000", + "cmp_a_b": 1 + }, + { + "a": "0x3a6f9ba87293cc000", + "b": "0x67611ce94a93640000000", + "cmp_a_b": -1 + }, + { + "a": "0x291d4db765d2040000000000000000000000000000", + "b": "0xbf21d43f1796d000000", + "cmp_a_b": 1 + }, + { + "a": "0x7b6bcd31f1a17c000", + "b": "0x158d9a1d798", + "cmp_a_b": 1 + }, + { + "a": "0x1ec4b5a05342b7000000000000000", + "b": "0x1ec4b5a05342b7000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x41b6b473ad3a68000000000000000000000000000000000000000000", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x3c73e0310c9a0600000000000000000000", + "b": "0x15740325df3dcc00000000000", + "cmp_a_b": 1 + }, + { + "a": "0xa61680c0b6469800000000000", + "b": "0x14d7f4fa86740500000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x26861b8585774a0000000", + "b": "0x1fa99d23921b400000000", + "cmp_a_b": 1 + }, + { + "a": "0x168baff928aa5b0000000000000000000000000000000000000000000000000", + "b": "0x3bbe47a6a00a62", + "cmp_a_b": 1 + }, + { + "a": "0x15c20b6f572b72000000000", + "b": "0x88cff", + "cmp_a_b": 1 + }, + { + "a": "0x48f917cec34f58000", + "b": "0xabb4c77cc0ef500000000000", + "cmp_a_b": -1 + }, + { + "a": "0x25b6e7f9806c7600000", + "b": "0x19e93c68", + "cmp_a_b": 1 + }, + { + "a": "0x4c013b1bb585f8000000000000000000000000000000000000000000000", + "b": "0x29ab9a51002b180000000", + "cmp_a_b": 1 + }, + { + "a": "0x4042eb2626173400000", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x1130c5b551e879000000000000000000000000000000000000000000000000", + "b": "0xa825f7858c038800000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xb21f", + "b": "0x3172d43b", + "cmp_a_b": -1 + }, + { + "a": "0x1387524d6226510000", + "b": "0x2b3ded3f2de1a200000000000", + "cmp_a_b": -1 + }, + { + "a": "0x25bef9cfa910660000000000000000000000", + "b": "0x998b", + "cmp_a_b": 1 + }, + { + "a": "0x5069c0", + "b": "0x32b13a5f60", + "cmp_a_b": -1 + }, + { + "a": "0x5e6abdb594093800000000000000000000000000000000000000000000000000", + "b": "0x1c4a17aa49cb3500000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1da8cc14821d6800000000000000000000000000000000000000000000", + "b": "0xa4449ebafdc8100000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xfb87f11a9b38300000000000000000000000000000000000000000", + "b": "0x34325c731", + "cmp_a_b": 1 + }, + { + "a": "0x65235d04c7732c0000000000000000000000000000000000000", + "b": "0x15b7e6788232db00", + "cmp_a_b": 1 + }, + { + "a": "0x4116c", + "b": "0x2cc206", + "cmp_a_b": -1 + }, + { + "a": "0x31fa4c35d63efa0000000000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xb7347feb51caf8000000000000000", + "b": "0x952e45906cd210000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2ecbfcd0c016ca00000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x6f", + "b": "0x11510165b7bc080000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf6ab7aba8109a800000000000000000000000000000000000000000", + "b": "0x67e", + "cmp_a_b": 1 + }, + { + "a": "0x6b279bc0120c78000000000000000000000000000000000", + "b": "0x18b2f", + "cmp_a_b": 1 + }, + { + "a": "0x10ac343a3c6e040000000000000000", + "b": "0x6ccdb57cef1358000000000", + "cmp_a_b": 1 + }, + { + "a": "0x160b4fbc571f590000000000000000000000", + "b": "0x63dc73b08899580", + "cmp_a_b": 1 + }, + { + "a": "0x14ab2bc8ae9a230000000", + "b": "0x2d01ddaca3ad500000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6972a1b1f08b8c000000000000000", + "b": "0xbe3cce26da30680000000", + "cmp_a_b": 1 + }, + { + "a": "0x518052fb10c2", + "b": "0x2bdbc4a4e49874", + "cmp_a_b": -1 + }, + { + "a": "0x4245c6b2f8f79000000000", + "b": "0xc5bf2eab", + "cmp_a_b": 1 + }, + { + "a": "0x2429915", + "b": "0x167cefd6c9eef40000000000", + "cmp_a_b": -1 + }, + { + "a": "0x348", + "b": "0x296cc71f8dae640000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x121861501a54820000000000000000000000000", + "b": "0x1006bb38063caf00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x27aaf697f24528000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xe1e21ddc88a3100000000000000000000000000000000000000000000000000", + "b": "0x61c25202ab", + "cmp_a_b": 1 + }, + { + "a": "0x9de3b5c674f6c000000000000", + "b": "0x2772e0c7", + "cmp_a_b": 1 + }, + { + "a": "0x4042bf4d09fd0c00", + "b": "0x4042bf4d09fd0c00", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x22", + "cmp_a_b": -1 + }, + { + "a": "0x2d6a190", + "b": "0xbd62b3ab8646f00000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa740085692a0f0000000000000000000000000000000000000", + "b": "0x72af31d43dc3e0", + "cmp_a_b": 1 + }, + { + "a": "0x206df854cdcc4e0000000", + "b": "0xb0766a9bda7030000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4a4312c26ca89c0000000000000000", + "b": "0x1bc61", + "cmp_a_b": 1 + }, + { + "a": "0xec457dfa4763f80000000000000000000000000000000000000000000000", + "b": "0x2459bd1c5f4", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x2862239aaf3", + "cmp_a_b": -1 + }, + { + "a": "0x26e5a20c58ede40000", + "b": "0xc47c", + "cmp_a_b": 1 + }, + { + "a": "0xa71021907c3bd000000000000000000000000000000000", + "b": "0x1bd265e5aa8", + "cmp_a_b": 1 + }, + { + "a": "0x34d", + "b": "0x34d", + "cmp_a_b": 0 + }, + { + "a": "0x18bf35f", + "b": "0x14aef575c27b1a000", + "cmp_a_b": -1 + }, + { + "a": "0x8e5212d6a5bca00000000000000000000", + "b": "0x459c8a37d14e7c0000000", + "cmp_a_b": 1 + }, + { + "a": "0x1efa7df7637ca80000000000000000000000000000000000000", + "b": "0x28089aed20052e000", + "cmp_a_b": 1 + }, + { + "a": "0x959327fd86d048000000000000000000000000", + "b": "0x403fa5ccd80b7", + "cmp_a_b": 1 + }, + { + "a": "0x3de3", + "b": "0x3d5e17e73738c000000", + "cmp_a_b": -1 + }, + { + "a": "0x811f9b5970", + "b": "0x40d8d975c77d88000", + "cmp_a_b": -1 + }, + { + "a": "0x3eeeb5fd62e1d80000000000000000000000000000000", + "b": "0x6ba4a501d727280000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x223ab975c8ace4000000000000000000000000000000000000000000000000", + "b": "0x2cf4d013cbad90", + "cmp_a_b": 1 + }, + { + "a": "0x3675a564af9cec0000000000", + "b": "0x35770911ad", + "cmp_a_b": 1 + }, + { + "a": "0x116cfbcb551dfd0000000000000000000000000", + "b": "0x3c88feebcbd2a200000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x4f1c19", + "b": "0x15aed80a496f470000", + "cmp_a_b": -1 + }, + { + "a": "0x444f5b3dddc2680000000000000000000000000000000000000", + "b": "0x475926620bd", + "cmp_a_b": 1 + }, + { + "a": "0x4ce8e6975cf128000000000000000000000000000000000", + "b": "0x1ab5f44b66", + "cmp_a_b": 1 + }, + { + "a": "0xbc618593aff3c00000000000000000000000000000000000000000000", + "b": "0xbb5bf5f2089de80000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x86c857f6f392600000000000000000000000000000000000000000", + "b": "0x1a37a17be77cea00000000000", + "cmp_a_b": 1 + }, + { + "a": "0x18cb194", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x3e2f7b", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x26b13ea388f16c000000000000000000000000000000", + "b": "0x20de3", + "cmp_a_b": 1 + }, + { + "a": "0x321dda4e2a2dd800000000000000000000000000000000000", + "b": "0x32b79acf53ab", + "cmp_a_b": 1 + }, + { + "a": "0x12b51dadb9bedd0000000000000000000000000000000000000000000000000", + "b": "0x31ff5449ce9b0600000", + "cmp_a_b": 1 + }, + { + "a": "0x34e1e44cb5a524000000000000000000000000000000000000000", + "b": "0xbace35a7fb260000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x21b1041c946", + "b": "0x68d0", + "cmp_a_b": 1 + }, + { + "a": "0x85ae0f7d2788080000000000000000000", + "b": "0x2123c41f142bba0000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x5da196bedea9a80000000000000000000000000000000000000000", + "b": "0x14c61", + "cmp_a_b": 1 + }, + { + "a": "0x14aab801a43de8000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x5fa99a6e84fe8c000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1547ad62b8f9ba000000000000000000000", + "b": "0xbcb687cbc143e0000000000", + "cmp_a_b": 1 + }, + { + "a": "0x6f2e2228b17", + "b": "0x46e48ad001e15800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2a4e5ae0bb", + "b": "0x762be32f0d", + "cmp_a_b": -1 + }, + { + "a": "0x237c25f059914000000000000000000000000000000000000000000", + "b": "0x8b0d323d098f90000000000", + "cmp_a_b": 1 + }, + { + "a": "0x41334b90a8ef2c00", + "b": "0x34214f9de17802", + "cmp_a_b": 1 + }, + { + "a": "0xbd84bd6a1", + "b": "0x8389b6254152280000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4f67c143acf0d800000000000000000000000000000000000000000", + "b": "0x131cb176308f", + "cmp_a_b": 1 + }, + { + "a": "0x919bedf35894600000000000000000000000000000000000000000000", + "b": "0x354d5f1d0f", + "cmp_a_b": 1 + }, + { + "a": "0x87c8e5427", + "b": "0x2002ef10da2ae600000", + "cmp_a_b": -1 + }, + { + "a": "0xddb8debf1578680000000000000000", + "b": "0xb2b3b7849e763000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2aa94a6db36106000000000000000000", + "b": "0x1d3d8118c173a30000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1883c00a4014470000000000000", + "b": "0x1883c00a4014470000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x18eaf2f9134642", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x184141620569400000000000000000000000", + "b": "0x5f", + "cmp_a_b": 1 + }, + { + "a": "0x35bf2cf10bd582000000000000000000", + "b": "0x35bf2cf10bd582000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x64af23c4ea29f800000000000000000000000000000000", + "b": "0x3d3818565e171a00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x63a1d9874e39740000000000000000", + "b": "0x15fbbff93cda5a000000", + "cmp_a_b": 1 + }, + { + "a": "0x29f003c460b13c000000000000000000000000000000000000000000000", + "b": "0x37c1690111ce74", + "cmp_a_b": 1 + }, + { + "a": "0x4016fe14", + "b": "0x11f52369ec674000000", + "cmp_a_b": -1 + }, + { + "a": "0xfda606644f82d80", + "b": "0x167c1ff3cfd52c00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x33a80d", + "cmp_a_b": -1 + }, + { + "a": "0xb5994111fd34c00000000000000000000000000", + "b": "0xd", + "cmp_a_b": 1 + }, + { + "a": "0x598b74abd380d0000000000000000000000000000000000000000", + "b": "0x14c7", + "cmp_a_b": 1 + }, + { + "a": "0xb9736d15d72c780000000", + "b": "0xb9736d15d72c780000000", + "cmp_a_b": 0 + }, + { + "a": "0x498fee842c0bd80000000000000000000", + "b": "0x3de4117ebe5a1a00", + "cmp_a_b": 1 + }, + { + "a": "0x207ee9914d8156000000000000000000000000000000000000000", + "b": "0x561a14ff401", + "cmp_a_b": 1 + }, + { + "a": "0x292bebcce8354c000000000000000000000000000000000000000000000", + "b": "0x5", + "cmp_a_b": 1 + }, + { + "a": "0x1745813f2e61be0000000000000000000000000000000000000000000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x82df8f7325a070000000000000000000000000000000000000000000000000000", + "b": "0xd763eb78", + "cmp_a_b": 1 + }, + { + "a": "0x12ac80d06dc9a", + "b": "0x48d99a819e664c0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11b9b095a16e9200000000000000000000000000000000000000000", + "b": "0x8ce6ad701", + "cmp_a_b": 1 + }, + { + "a": "0x1201475d0", + "b": "0x54dd052e0f2bac0", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x32", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1b", + "cmp_a_b": -1 + }, + { + "a": "0x246b19dc25da6e0000000000", + "b": "0x2979bff0d0ad92000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1561a0a0e481b30000000000000", + "b": "0x22801aa", + "cmp_a_b": 1 + }, + { + "a": "0x119f0c6a7084a0000000000000000000000000000000", + "b": "0x2e72d9ea511e960000000000", + "cmp_a_b": 1 + }, + { + "a": "0xaf5", + "b": "0x2ec1fa97d98106000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa2b4db99677728000000000000000000000000", + "b": "0xb4faf2b66a", + "cmp_a_b": 1 + }, + { + "a": "0xc88a200e93830000000000000000000000000000000000000000000", + "b": "0x471fb5cf19db50000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x8ad705bf3e1b900000000000000000000000", + "b": "0x4d344be615c9fc00000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x88392bad47d598000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x4c605dea3ea7f0000000000", + "b": "0x843ec68d1adfa80000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x20a1066982b2d800000000", + "b": "0x2245713fef46ba00000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3b84629825f248000", + "b": "0xd1adc6549e61d0000", + "cmp_a_b": -1 + }, + { + "a": "0x1add8c81b2cfa20000", + "b": "0x7762252b25306", + "cmp_a_b": 1 + }, + { + "a": "0x5919b4a7b8fa2c00000000000", + "b": "0x1824e564020268", + "cmp_a_b": 1 + }, + { + "a": "0x13450d9ccbd0ed00000000000000000000000000000", + "b": "0x437d7abd5d2c94000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1c5b0af96a68da000000000", + "b": "0x10b390c3e9d46d0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3af3fe32ce63220000000000000000000000", + "b": "0xc9fe5df", + "cmp_a_b": 1 + }, + { + "a": "0x17eae98b43f62600000000", + "b": "0x17eae98b43f62600000000", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0xc39403d5", + "cmp_a_b": -1 + }, + { + "a": "0x1b3591005c30f10000", + "b": "0x1b3591005c30f10000", + "cmp_a_b": 0 + }, + { + "a": "0x11b43aff298a060000000000000000000000", + "b": "0x786ed3e38", + "cmp_a_b": 1 + }, + { + "a": "0x103", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x59adb4c3490fe000", + "b": "0x7d0e87f9a1639000", + "cmp_a_b": -1 + }, + { + "a": "0x13793dd8e7d31c000000000000", + "b": "0x311de48a1534ce00000000", + "cmp_a_b": 1 + }, + { + "a": "0x102fe9553c45ef0000000000000000000000000000000", + "b": "0xaa7baecd90b3f8000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3c5d1e28", + "b": "0x22914b9", + "cmp_a_b": 1 + }, + { + "a": "0x90cebdd85262c8000000000000000000000", + "b": "0x13be8ac6317ca90000", + "cmp_a_b": 1 + }, + { + "a": "0xa89422644325480000000000000000000000000000000000000", + "b": "0xc9f842f34", + "cmp_a_b": 1 + }, + { + "a": "0x7299b10aad2c2", + "b": "0x4ce", + "cmp_a_b": 1 + }, + { + "a": "0x701c94c1fd3fd8000000000000000000000000000000000000000000000", + "b": "0x5e5e64efec3d50000000000", + "cmp_a_b": 1 + }, + { + "a": "0x54066", + "b": "0x151cdbd8d3f28b000000", + "cmp_a_b": -1 + }, + { + "a": "0x1b507ea3436e", + "b": "0x805c7cc52ec158000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7ce5c6779387f40000000000000000000000000000000000000", + "b": "0x4cf7bf6abd44e80000000", + "cmp_a_b": 1 + }, + { + "a": "0x588863438d347c00000000000000000000000000", + "b": "0x134f2ff6ccb103", + "cmp_a_b": 1 + }, + { + "a": "0xb0e04901a9c5d00000000000", + "b": "0x1572cfbe321c85000", + "cmp_a_b": 1 + }, + { + "a": "0x4b5b97966575340000000000", + "b": "0x7206f5", + "cmp_a_b": 1 + }, + { + "a": "0x6108be6226bb4000000000000000000000000000000000000000000000000", + "b": "0xc2c98fede3fcb800", + "cmp_a_b": 1 + }, + { + "a": "0x5d0c3", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2f576303bbd60e00000000000000000000000", + "b": "0x1aa5c340ab49360", + "cmp_a_b": 1 + }, + { + "a": "0x332d20e209cc2a00000000000000000000000000000000000000000000", + "b": "0x2a82127dd0053c000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xf29a875991cef000000000000000000000000000000", + "b": "0xbb3542bbca8e10000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x8efa6b6a6bf4e80000000000000000000000000", + "b": "0x6bbe1970008", + "cmp_a_b": 1 + }, + { + "a": "0x1b89457aafa3a60000000000", + "b": "0x7de95df2a44f84000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xfd57db47ee3d60000000000000000000000000", + "b": "0x3449e79d5fa6fa000", + "cmp_a_b": 1 + }, + { + "a": "0x3976c9ac0c49cc000", + "b": "0x55b2", + "cmp_a_b": 1 + }, + { + "a": "0x3548e670a497ea0000000", + "b": "0x3ae2f8", + "cmp_a_b": 1 + }, + { + "a": "0xf2e250c15022b80000000000000000000000", + "b": "0x140abbb", + "cmp_a_b": 1 + }, + { + "a": "0x83c0a61456dc5000000000000000000", + "b": "0x2414cf94cf292c0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x61b2e032cb8bd00000000000000000000", + "b": "0x13", + "cmp_a_b": 1 + }, + { + "a": "0x99164d55bb83d800000000000000000000000000000000", + "b": "0x1a19077ef183ba000", + "cmp_a_b": 1 + }, + { + "a": "0x1ccd4be6ecf6b90000000000000", + "b": "0x1b4d8f", + "cmp_a_b": 1 + }, + { + "a": "0x5407c042cd7", + "b": "0x1bfe481411159d000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb0c0897c094da00000000000000000000000000000000000", + "b": "0x9fc470c57172780000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xeac61c2244a888000000000000000000000", + "b": "0x3230b2b5d1e", + "cmp_a_b": 1 + }, + { + "a": "0x27e7c983109bfc00000000000000000000000000000000000000", + "b": "0x44d6", + "cmp_a_b": 1 + }, + { + "a": "0x107690dda132bb000000", + "b": "0x162332ead9f3330000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14d84874bbbc4f000000000000", + "b": "0x198701dadd9398000", + "cmp_a_b": 1 + }, + { + "a": "0x49c760d63c67b8000000000000000000000000000000000000", + "b": "0xbf64e6add0b7d0000000000", + "cmp_a_b": 1 + }, + { + "a": "0x14f675a433461400000000000000000000000000000000000000000", + "b": "0x19586", + "cmp_a_b": 1 + }, + { + "a": "0x43f3f04f554b5400000000000000000000", + "b": "0x151b13abe8c23100000", + "cmp_a_b": 1 + }, + { + "a": "0x1ad8467c379aaa00000000000000000000000", + "b": "0x18b27d5df274dd0000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xbfa0ceb989ab8800000000000000000000000000000000000000000000000000", + "b": "0x3a4890dfc2", + "cmp_a_b": 1 + }, + { + "a": "0x2e", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x13828276b789ab000000000000000000", + "b": "0x2ba1f9f86a9a4200", + "cmp_a_b": 1 + }, + { + "a": "0x3970c281d2ac50000000000000000000000", + "b": "0x3aa0ee8ec49de800", + "cmp_a_b": 1 + }, + { + "a": "0xc8a8c1c48d0c700000", + "b": "0xc8a8c1c48d0c700000", + "cmp_a_b": 0 + }, + { + "a": "0x6ea220", + "b": "0x2824ab09edace600000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5cb5e0184add5c00000000000000000000000000000", + "b": "0x62fdef2fecac080000", + "cmp_a_b": 1 + }, + { + "a": "0x2c9b793a26537e00000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x72feb51c9c49", + "b": "0x8a514246a4d56800000000", + "cmp_a_b": -1 + }, + { + "a": "0x35e6b811883814000000000000000000000000000000000000000", + "b": "0x105fb", + "cmp_a_b": 1 + }, + { + "a": "0xef99dd2b14fb6000000000000000000000000000000000000000000000000000", + "b": "0x459513fcc8017000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1205c881a56ecf00000000", + "b": "0x160da34d4", + "cmp_a_b": 1 + }, + { + "a": "0x6d36f5bbcc46280000000", + "b": "0x16e8a20f0a396400000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1eaf14757765b800000000", + "b": "0x5ff6b", + "cmp_a_b": 1 + }, + { + "a": "0x2baf347ec77eec00000000000000000000000000000", + "b": "0x2a7a9ea", + "cmp_a_b": 1 + }, + { + "a": "0xcb359635968f8800000000000000000000", + "b": "0xd7d61f0ff9", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xff0a86244236700000000000000000000000000", + "b": "0x87f1a20f989", + "cmp_a_b": 1 + }, + { + "a": "0x16dc225801eab100000000000000000000000000000000000000", + "b": "0x3f5b6570986b4c000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1d1c8690fc100200000", + "b": "0x1f4", + "cmp_a_b": 1 + }, + { + "a": "0x95cb2b952bb7380000000000000000000000", + "b": "0x8d5b1202c21a00000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x17d3ccffbe82d10000000000000000000000000000000000000000000000000", + "b": "0x28c9a2f1daa4800000000", + "cmp_a_b": 1 + }, + { + "a": "0xf832876afc026800", + "b": "0xf832876afc026800", + "cmp_a_b": 0 + }, + { + "a": "0x95b4b238ad736000000000000000", + "b": "0xec1fa7568a9c0800000000", + "cmp_a_b": 1 + }, + { + "a": "0x762ad22ce106ec000000000000000", + "b": "0xd66d4deb29492000", + "cmp_a_b": 1 + }, + { + "a": "0x2480e2a49c4152000000000000000000000", + "b": "0x237d", + "cmp_a_b": 1 + }, + { + "a": "0x679152a0a0a5", + "b": "0x194931261a61d7", + "cmp_a_b": -1 + }, + { + "a": "0x7c04", + "b": "0x6c3a7c95f675c4000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xc15a867057c9d000000", + "b": "0x1935d5b3ac9", + "cmp_a_b": 1 + }, + { + "a": "0x4f7c1b1", + "b": "0x91ba85c4aa8e88000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3209235812b6d40000", + "b": "0x9ba05954573af8000000", + "cmp_a_b": -1 + }, + { + "a": "0x41540dec", + "b": "0x4cd3da54bb4fec00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2010664ebc266200000000000000", + "b": "0x11be728f5d035c0000000", + "cmp_a_b": 1 + }, + { + "a": "0x8add31a4192da0000000000000000000000000000000000000000000000", + "b": "0x3ebd70f5e6aa4c0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3052aa2fc46586000000000", + "b": "0x46525723a78448000000", + "cmp_a_b": 1 + }, + { + "a": "0x6a40b34cf257bc000000000000000000000000000000000", + "b": "0x2e04fc9b55757a0000000000", + "cmp_a_b": 1 + }, + { + "a": "0x48a736e48b58fc00000000000", + "b": "0x89bb87e", + "cmp_a_b": 1 + }, + { + "a": "0xbbfa4ee325b8b00000000000000000000000000000000000", + "b": "0x3262464a", + "cmp_a_b": 1 + }, + { + "a": "0x2e7429a30e05d000000000000000000000000000000000000000000000000000", + "b": "0x289cbac12e7d44000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1ddf808020eaa6000", + "b": "0x9b0f04786", + "cmp_a_b": 1 + }, + { + "a": "0x2c4a762f1", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x300951addd2d74000000000000000000000000", + "b": "0x2fc23d", + "cmp_a_b": 1 + }, + { + "a": "0x16b8ce565c7ccc000000000000000000000000000000000000000000", + "b": "0xf527671aa225", + "cmp_a_b": 1 + }, + { + "a": "0x2c492737b37160000000000000", + "b": "0x1652c47c6c85a6000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8b30854a6b20f8000000", + "b": "0x8b30854a6b20f8000000", + "cmp_a_b": 0 + }, + { + "a": "0x143d28b54b5c0600000000000000000000000000000000000000000", + "b": "0x567ed239003eac00000", + "cmp_a_b": 1 + }, + { + "a": "0x1558cbe4c2417e000000000000", + "b": "0x2430c54f43f9dc0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x39f9538a5d6fac000000000000000000000000", + "b": "0x55c74b9d461cf0000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x7aca570c2c41ac0000000000000000", + "b": "0x443d00a922913c00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x245fe164eda9e400000000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xefe7f51f8f63280000000000000000000000000", + "b": "0x23469dd787e6500000000000", + "cmp_a_b": 1 + }, + { + "a": "0x357b898e86285e0000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0xcd43aeaccf0688000000000000000000000000000000000000000000", + "b": "0x1f58538", + "cmp_a_b": 1 + }, + { + "a": "0x761", + "b": "0xf9477667", + "cmp_a_b": -1 + }, + { + "a": "0x36c0ee2", + "b": "0x15b8fa2fb1283800000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3f17ad17ebb44a00000000000000000000000000000000000", + "b": "0x6d668b92ef13940000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xff3ab57969a33800000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x47ebd9", + "b": "0x69ad793b200b00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x17967fc237d9140000000", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x8607657a5946180000000000000000000000000000", + "b": "0x5f26e720b8e788000000000", + "cmp_a_b": 1 + }, + { + "a": "0x7fb2f7380307240000000000000000000000000000", + "b": "0x2aeea89ee116c40000000", + "cmp_a_b": 1 + }, + { + "a": "0x89dec5290f92a800000000000000000000000000000000000000", + "b": "0x12ed7b296c83d00000", + "cmp_a_b": 1 + }, + { + "a": "0x1416309a64c981000000000000000", + "b": "0xb49b5427a1f", + "cmp_a_b": 1 + }, + { + "a": "0x9b35bc93ecad7000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x901b6f85f432380000000000000000000000000000000000000000000", + "b": "0x4d6f92a1c8", + "cmp_a_b": 1 + }, + { + "a": "0x51b9aaf29905d000000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x33d1130", + "b": "0x16", + "cmp_a_b": 1 + }, + { + "a": "0x1657c191da1ab0000000000000000000000000000000000000000000000000", + "b": "0x24b064ab00d", + "cmp_a_b": 1 + }, + { + "a": "0x1120ef38f726b5000000000000000000000000000000000000", + "b": "0x715043573a61a8000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3e59bf2ad41ea40000000000000000000", + "b": "0x16d19133e9a5", + "cmp_a_b": 1 + }, + { + "a": "0x198dbe250b4cc60000000000000000000000000000000000000", + "b": "0x60f3f9d528e4f40000", + "cmp_a_b": 1 + }, + { + "a": "0x1f17bf235cdd34000000000", + "b": "0xac73b3ad5795f8000000", + "cmp_a_b": 1 + }, + { + "a": "0x252933dc8d2fb2000000000000000000000000000000000000000", + "b": "0xb7443b0c1c31b000000", + "cmp_a_b": 1 + }, + { + "a": "0xa", + "b": "0x679839e4c1aae00000", + "cmp_a_b": -1 + }, + { + "a": "0x358680f709e8400000000000000000000000000000000000000000000", + "b": "0x4826bb2a0c6e4c", + "cmp_a_b": 1 + }, + { + "a": "0x3cbbd3c2731bd600000000000000000000000000000000000000000000", + "b": "0x19775f66536ac00000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1022bdbe", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0xd5762cf93a9f900000000000000000000000000000", + "b": "0x11a84c4ff63f3f0000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1c78b85b81b53d000000000000000", + "b": "0x605f586", + "cmp_a_b": 1 + }, + { + "a": "0x421fc5372b0db8000000000000000000000000000000000", + "b": "0x1aa", + "cmp_a_b": 1 + }, + { + "a": "0x6e2038d2defb100000000000000000000000000000000000000", + "b": "0x2b448564fb6b12000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xd14442c7cd70f800000000000000000000000000000000", + "b": "0x4138c4d7ff2008000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x170c0b50d3d52200000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x111e826def0f460000000000000", + "b": "0x22a548e1d97a7e0", + "cmp_a_b": 1 + }, + { + "a": "0x2aadd80578be", + "b": "0x14b25cd19e757200", + "cmp_a_b": -1 + }, + { + "a": "0x344d4ff589142c00000000000000000000000000000000000000000", + "b": "0x9c47", + "cmp_a_b": 1 + }, + { + "a": "0x9e9c6cbbfdc5", + "b": "0x1220c624e11dd400000000000", + "cmp_a_b": -1 + }, + { + "a": "0x102133492374660000000000000000000000000000000000000000000000000", + "b": "0x69eeb1349", + "cmp_a_b": 1 + }, + { + "a": "0x51cfebd85afbd00000000000000000000000000000000000000000", + "b": "0x422ee14035af44", + "cmp_a_b": 1 + }, + { + "a": "0x737796", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2330e3b040a0ee000000", + "b": "0x166489d439ff58000", + "cmp_a_b": 1 + }, + { + "a": "0xf4458916aefbc000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x27ff62bb939fb80000000000000000000000000000000000000000", + "b": "0x4a7205da274164000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x12b49c67eba86600000", + "b": "0xbe68ec4ec4ebe8000000", + "cmp_a_b": -1 + }, + { + "a": "0x2600aaf560893e00000000000000000000000000000000000000000000000000", + "b": "0x14658c72f5dfb0000", + "cmp_a_b": 1 + }, + { + "a": "0x4ae0", + "b": "0x36", + "cmp_a_b": 1 + }, + { + "a": "0x16745ec172eb45000000000000000000000000000", + "b": "0x32a3a9b5", + "cmp_a_b": 1 + }, + { + "a": "0x6e61d777ab6c1800", + "b": "0x46c353446a30dc0000000000", + "cmp_a_b": -1 + }, + { + "a": "0x64f5fa8391eaa40000000000000000000000000000000000000000", + "b": "0xe236f00", + "cmp_a_b": 1 + }, + { + "a": "0x146fce7bd47c330000000000000000000000000000000000000000000000", + "b": "0x4d2ea957e5e0f000000", + "cmp_a_b": 1 + }, + { + "a": "0x4efbd2f331", + "b": "0x4902342fb61e14", + "cmp_a_b": -1 + }, + { + "a": "0x1235ee07dcf33f0000000000000000000000000000000", + "b": "0x32e11", + "cmp_a_b": 1 + }, + { + "a": "0x30e6a2db9d84080000000000", + "b": "0x16108ce5", + "cmp_a_b": 1 + }, + { + "a": "0x1a", + "b": "0x7fb26623a", + "cmp_a_b": -1 + }, + { + "a": "0xee", + "b": "0x1a24286ef6c47", + "cmp_a_b": -1 + }, + { + "a": "0x2700e4df6afeac0000000000000000000000000000000000000", + "b": "0x39ff7af59", + "cmp_a_b": 1 + }, + { + "a": "0x11b8fa3f09129b000000000000000000000000000000000000000000", + "b": "0x368504097e", + "cmp_a_b": 1 + }, + { + "a": "0x1", + "b": "0x3e260cf9580a0a0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3065fad3f203d00000000000000000000", + "b": "0xac47fdb3510850000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x65e391c232e53c000000000000", + "b": "0x780363855f29a800000000000", + "cmp_a_b": 1 + }, + { + "a": "0xd576fca059ef880000000000000000000000000000000000000", + "b": "0xdb58dcbb2", + "cmp_a_b": 1 + }, + { + "a": "0x8c124fdc905138000", + "b": "0x125076aa6753620000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9b1e269133a5200000000000000000000000000000000000000000000000000", + "b": "0x5e0dfc49386ee0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x119f6d4a655f6e", + "b": "0x50dcc8c", + "cmp_a_b": 1 + }, + { + "a": "0x907", + "b": "0x136ffbbece170900", + "cmp_a_b": -1 + }, + { + "a": "0xa3123c12a4a7580000000000000000000000000000", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x92cd49456dbf000000000000000000000", + "b": "0xd21d0b644f89180", + "cmp_a_b": 1 + }, + { + "a": "0xc7fdbfb90f78b80000000000000000000", + "b": "0x110629591a2c7c0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x89240", + "b": "0xd", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x16c", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x3ef5c0e", + "cmp_a_b": -1 + }, + { + "a": "0x14e31fbd67f5800000000", + "b": "0x14e31fbd67f5800000000", + "cmp_a_b": 0 + }, + { + "a": "0x67ec5e227062c800000000000000000000000000000000000000000000000", + "b": "0x712cc985087b1c00000000000", + "cmp_a_b": 1 + }, + { + "a": "0x29b8978d1596cc000000000", + "b": "0x102", + "cmp_a_b": 1 + }, + { + "a": "0x2ecf72f14cd7d40000000000000000", + "b": "0x30", + "cmp_a_b": 1 + }, + { + "a": "0x386c991560508200000000000000000000000000000000000000000000000", + "b": "0xa4225963", + "cmp_a_b": 1 + }, + { + "a": "0x1038f05f3e5c5000000000000000000000000", + "b": "0x85ceb2d3", + "cmp_a_b": 1 + }, + { + "a": "0x7", + "b": "0x22d7b4c7cdb35a0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2d2e06c31b901000", + "b": "0x25f1b0e86bad34000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1647144b7064fd0000000000000000000000000000000", + "b": "0x5711fce97c9a3800000", + "cmp_a_b": 1 + }, + { + "a": "0x546b2bba4c894000", + "b": "0x546b2bba4c894000", + "cmp_a_b": 0 + }, + { + "a": "0x345d0132466648000000000000000000", + "b": "0x11211912dc65f50000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1fb1576134de6000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x56c10e6eb18b280", + "b": "0xbe1a09b4751b1", + "cmp_a_b": 1 + }, + { + "a": "0x24221180facdda0000000000000000000", + "b": "0x14dffa64117d74000", + "cmp_a_b": 1 + }, + { + "a": "0xfbbbfd9ba38a98000000000000000000000000000000", + "b": "0x2e1663173b06e40000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3ad556abb79e08000", + "b": "0x7f718e6cfaaae000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4380759cdc66d40000000000000", + "b": "0x203de78059691a000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x86f9fea39389700000000000000000000000000000", + "b": "0x54a143d20", + "cmp_a_b": 1 + }, + { + "a": "0x4cbf357c323a000000000000000", + "b": "0x92598cd7692348000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6bc10163ab", + "b": "0x1fb92643539eed0000", + "cmp_a_b": -1 + }, + { + "a": "0x7c6874db8e50e0000000000000000000000000", + "b": "0x2c467cb3ddb07800000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xff40ae26a2e998000000000000", + "b": "0x14aabeebd7c77e0000", + "cmp_a_b": 1 + }, + { + "a": "0x27c8422c1e326400000000000000000000000000000000", + "b": "0x13e1609e26747b000000000", + "cmp_a_b": 1 + }, + { + "a": "0xe1", + "b": "0x7693efb", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x11b1235", + "cmp_a_b": -1 + }, + { + "a": "0x17c44c1412f8b800000", + "b": "0x117d6b21846456000", + "cmp_a_b": 1 + }, + { + "a": "0x290b1979bf7e4400000000000000000000000000000000000000000000", + "b": "0x67966f2c19dd", + "cmp_a_b": 1 + }, + { + "a": "0x14ed1c5c93be02000000000000000000", + "b": "0x14ed1c5c93be02000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x1bea20a8140770000000000000000000000", + "b": "0x7c825a", + "cmp_a_b": 1 + }, + { + "a": "0xa46c0316acc35000000000000000000", + "b": "0xdbfb66f297d5", + "cmp_a_b": 1 + }, + { + "a": "0x4c45fdc8f0d8800000000000", + "b": "0x73ba5bc056d5fc0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x375109ae2903ec00000", + "b": "0x44", + "cmp_a_b": 1 + }, + { + "a": "0x270c09fce8b59a000000000000", + "b": "0x1e3ed6b", + "cmp_a_b": 1 + }, + { + "a": "0x7acd", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x236b542b445fe40000000000000000000", + "b": "0x1af33a8c20e19c00000000", + "cmp_a_b": 1 + }, + { + "a": "0x1581478fc9fe27000000000000000000000000000000000", + "b": "0x91ef36778fb8000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xfad71bffbcc8900000", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x1dd8b08147f8d9000000000000000000000000000000000000000000", + "b": "0x22767bc1fc97340000", + "cmp_a_b": 1 + }, + { + "a": "0x3ed4c67bce10ca000000000000000000000000", + "b": "0xdf301aa15ed85800", + "cmp_a_b": 1 + }, + { + "a": "0x6eab27b8", + "b": "0x45", + "cmp_a_b": 1 + }, + { + "a": "0x265fb2fa5dea84000000000000000000000000000000000000000000", + "b": "0x49c5", + "cmp_a_b": 1 + }, + { + "a": "0x1c88fdf97efdef0000000000000000000000000000000000000000000", + "b": "0x6577da", + "cmp_a_b": 1 + }, + { + "a": "0x54", + "b": "0x772bf5b4078", + "cmp_a_b": -1 + }, + { + "a": "0x3e9cad61ab01d200000000000000000000000000000", + "b": "0x42172dcab8d41", + "cmp_a_b": 1 + }, + { + "a": "0x33e9e1d245283e0000", + "b": "0x17b05e88309dc100000000", + "cmp_a_b": -1 + }, + { + "a": "0x2204f7", + "b": "0x849c11d", + "cmp_a_b": -1 + }, + { + "a": "0x113b233afbe80d000000000000000", + "b": "0x2b1661ce141ed60000000", + "cmp_a_b": 1 + }, + { + "a": "0x190f64d087c70100000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x291fbdee4d0b3e00000000000000000000000000000", + "b": "0x6639", + "cmp_a_b": 1 + }, + { + "a": "0x32ac", + "b": "0x254e6194e021b40000000000", + "cmp_a_b": -1 + }, + { + "a": "0x80602d099773c8000000000000000000000", + "b": "0x927287a", + "cmp_a_b": 1 + }, + { + "a": "0x44581", + "b": "0x2cf4fea79a08e0000", + "cmp_a_b": -1 + }, + { + "a": "0x282a7e7a", + "b": "0x1945b8bf8da", + "cmp_a_b": -1 + }, + { + "a": "0xcd1ff9dd2f8fe80000000000000000000000000", + "b": "0x7b32f57013", + "cmp_a_b": 1 + }, + { + "a": "0x24e362ea1217a8000000000000000000000000000000000000000000", + "b": "0x2fd", + "cmp_a_b": 1 + }, + { + "a": "0x1305df001a8a270000000000000000000000000000000000000000000", + "b": "0x45a0ead51462c40000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3df2445bd7820e00000000000000000000000000000000000000", + "b": "0x1070eb89bd7dd900", + "cmp_a_b": 1 + }, + { + "a": "0x4bc2a4e52c60e00000000000000000000000000000000000000000000", + "b": "0x11bceba092d957000000", + "cmp_a_b": 1 + }, + { + "a": "0x53333ef120769c00000000000000000000000000000000000000000000000", + "b": "0x37c13df144455400000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xc51113fac1c0180000000000000000000000000000000000000000000000000", + "b": "0x75a99227a3280400000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x315bef8e3feea800000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x3b0f6", + "cmp_a_b": -1 + }, + { + "a": "0x1c41540de5d0c4000000000000000000000000000000000000000000000", + "b": "0x1d0017d59de1630000000", + "cmp_a_b": 1 + }, + { + "a": "0x114dd588a5fbb800000000000000000000000000000000", + "b": "0x45a2a76f9260040000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x4c656947dbcc1400000000000000000000000000000", + "b": "0x246899d27acea80000000000", + "cmp_a_b": 1 + }, + { + "a": "0x31c608e0b5437e0000000", + "b": "0x327be5158b96cc0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2b701eb55accf", + "b": "0x3202696b1630d4000000", + "cmp_a_b": -1 + }, + { + "a": "0x4e476e2f56978800", + "b": "0x186741cde3d4a20", + "cmp_a_b": 1 + }, + { + "a": "0x39ae56574fe4f200000000000000000000000000000000000000", + "b": "0x7912afe59e38c", + "cmp_a_b": 1 + }, + { + "a": "0x350cc6fe0ba686000000000000000000000000000000000000000", + "b": "0x2641", + "cmp_a_b": 1 + }, + { + "a": "0x26", + "b": "0x26", + "cmp_a_b": 0 + }, + { + "a": "0x26c9d0abd0b98a000000000000000000000000000000000000000000000000", + "b": "0x21de915a34e7ee00000", + "cmp_a_b": 1 + }, + { + "a": "0x178dda9", + "b": "0x3a5aa9ab747fdc000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2ab6e959cee93400", + "b": "0x315ea05bdd25ee00000000", + "cmp_a_b": -1 + }, + { + "a": "0x4b707b2e91b06c00000000000000000000000000000", + "b": "0x2d8bd1d13ac98c0000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x10e416176710320000000000000000000000", + "b": "0x278ff2be520f", + "cmp_a_b": 1 + }, + { + "a": "0x67025a55af78cc00000000000000000000000000", + "b": "0x26c7d87f2191d", + "cmp_a_b": 1 + }, + { + "a": "0xadb35e511d4cf000000000000000000000000000000000000000000000000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x1833027d5ab3480000000000000", + "b": "0x52b4f01b59d26800000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2c21fce2bcfc0e0000", + "b": "0x43e901a876c4f0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14c504385b129500000000", + "b": "0x8acfdd", + "cmp_a_b": 1 + }, + { + "a": "0x294231e5d9519c00000000000000000000000000000000000", + "b": "0xdd064ac7b724f000000000", + "cmp_a_b": 1 + }, + { + "a": "0x6ac75df7fbc64", + "b": "0x47ac", + "cmp_a_b": 1 + }, + { + "a": "0x485bb7f80788fc000000000000000000000000000000000000000000", + "b": "0x34fc37211dfae20000000", + "cmp_a_b": 1 + }, + { + "a": "0x1f9d8ae5980e3400000000000000000000000000000000000", + "b": "0x1094a814f5948c0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x4647618f7d9a1c0000000000", + "b": "0x1c35c57c3c9ad9000000", + "cmp_a_b": 1 + }, + { + "a": "0x194cd065c2143b0000000000000000000000000000000000000000000000", + "b": "0x28816133ffb5", + "cmp_a_b": 1 + }, + { + "a": "0xcb3e3464ae3728000000000000000000000000000000", + "b": "0x9a5f354d6b5758000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x17910534ce8a0200000000000000000000000000000000000000000", + "b": "0x6187687267e6fc00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x28f60f4858e812000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xd7c6aa565acbf00000", + "b": "0x1937dfc6a686a800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9f697ed154be28000000000000000000000", + "b": "0x657a61fba7f3cc00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x20680", + "b": "0x21602227235fda00000", + "cmp_a_b": -1 + }, + { + "a": "0x102c86a6ee01c60000000000000000000000000000000000000000000", + "b": "0x4cbf4", + "cmp_a_b": 1 + }, + { + "a": "0x2d4cf2b9323d", + "b": "0x1919e45499055f0000", + "cmp_a_b": -1 + }, + { + "a": "0x125e5e854f703f00000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x6ffd2b1e43e7a", + "b": "0x3", + "cmp_a_b": 1 + }, + { + "a": "0x1ec28a91bb59de0000", + "b": "0x4c61e", + "cmp_a_b": 1 + }, + { + "a": "0x39403820c4740c00000000000000000000000", + "b": "0x3df8", + "cmp_a_b": 1 + }, + { + "a": "0xd0573617bfc02800000000000000000000000000", + "b": "0x691ef23fdbf11800000000", + "cmp_a_b": 1 + }, + { + "a": "0x518", + "b": "0x518", + "cmp_a_b": 0 + }, + { + "a": "0xee2abc23c90608000000", + "b": "0x593be1d6daca64", + "cmp_a_b": 1 + }, + { + "a": "0x738f74d27e595c00000000000000000000000000", + "b": "0x6aa0", + "cmp_a_b": 1 + }, + { + "a": "0x1e9ae472cc316e0000000000000000", + "b": "0x9856ef8d44c898000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x357b91befb5ec4000000000000000000000000000000000000000000", + "b": "0x2acef87f5703ae0000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xdf0d9ca0af56a0000000000000000", + "b": "0x3a2e4a7d291b8c00000", + "cmp_a_b": 1 + }, + { + "a": "0x3f396ba8ba3", + "b": "0xbbffcf9fd2f0c8000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37cf3869f2de8600000000000000000000000000000000000000", + "b": "0xf20d312ddaece000", + "cmp_a_b": 1 + }, + { + "a": "0x6cc", + "b": "0x11bc509bf185f200000", + "cmp_a_b": -1 + }, + { + "a": "0x28577aeb73985a00000", + "b": "0x4b6b74dc071eb0000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10d7526ba684db00000000000000000000000000000", + "b": "0x25746ddc", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x206e3b1ead63a00000", + "cmp_a_b": -1 + }, + { + "a": "0x16cd76e4803ad80000", + "b": "0x16cd76e4803ad80000", + "cmp_a_b": 0 + }, + { + "a": "0x1c702bf18b5bd8000000000000000000000000000000000", + "b": "0x456541f5c28ee40", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x18a777ebd873b7000", + "cmp_a_b": -1 + }, + { + "a": "0xbbbfb479ffb148000000000", + "b": "0x18f194092ad6a7000", + "cmp_a_b": 1 + }, + { + "a": "0xf60d86f7a00e", + "b": "0x1269f3", + "cmp_a_b": 1 + }, + { + "a": "0xe2d10", + "b": "0x8fc0af0d27ccf8", + "cmp_a_b": -1 + }, + { + "a": "0x143cb56f772e0c0000000000000000", + "b": "0x36ca", + "cmp_a_b": 1 + }, + { + "a": "0x557c51eec8c694000000000000000000000000", + "b": "0x1c7aa74171fb52000", + "cmp_a_b": 1 + }, + { + "a": "0x10b44f62d0a62", + "b": "0x10b44f62d0a62", + "cmp_a_b": 0 + }, + { + "a": "0x45835bdabe2c380000000000000000000000000", + "b": "0x172935", + "cmp_a_b": 1 + }, + { + "a": "0x440cb1b55210d8000000", + "b": "0x6d9b800e2e97980000", + "cmp_a_b": 1 + }, + { + "a": "0x6cecce3a5eabf0000000000000000000000000000", + "b": "0x76ec5", + "cmp_a_b": 1 + }, + { + "a": "0x1b300853a986d80000000000000000000000000000000000000", + "b": "0x243e14f2f9", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1db02a19a918b70000000", + "cmp_a_b": -1 + }, + { + "a": "0x38e0b62cd1feec", + "b": "0x9", + "cmp_a_b": 1 + }, + { + "a": "0x2f292c96aa23b80000000000000", + "b": "0x5d0fced6f250a40000000000", + "cmp_a_b": 1 + }, + { + "a": "0x4fea265dd30168000000000000000000000000000000", + "b": "0x71913bd92f001c00", + "cmp_a_b": 1 + }, + { + "a": "0xacbcd3bd20a10800000000000000", + "b": "0x503", + "cmp_a_b": 1 + }, + { + "a": "0x3dd956", + "b": "0x46de7725011428", + "cmp_a_b": -1 + }, + { + "a": "0x18f0f7ff151a53000000000000000000000000000000000000000", + "b": "0x1ff4c1458fe", + "cmp_a_b": 1 + }, + { + "a": "0x166de4043bdfde000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2a7479da2273d2000000000000000000000000000000000000000000", + "b": "0x45034729f92", + "cmp_a_b": 1 + }, + { + "a": "0x224fa98e3e27e40000000000000", + "b": "0x170e1dd0b68a260000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x4583b7cc268f", + "b": "0x50420e547a202800000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8f52f01d54f7780000000000000000000000000000000000000", + "b": "0x25491f327b603c000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2846ba455c53140000000000000", + "b": "0x168e95ef945ecd00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x244e4439668808000000000000000000000000000000", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0xde4a6f74be92580", + "b": "0x1943d1f240654a000000000", + "cmp_a_b": -1 + }, + { + "a": "0x50e017471", + "b": "0x8e105ad8641e60", + "cmp_a_b": -1 + }, + { + "a": "0x3e4c1145f8ff72000000000000000000000000000", + "b": "0x25", + "cmp_a_b": 1 + }, + { + "a": "0x1c10aa4bb87948000000000000000000000000000000000000000000000", + "b": "0x27b31", + "cmp_a_b": 1 + }, + { + "a": "0xf23b6cbfbddb60000000000000000000000000000000000000", + "b": "0x378f702", + "cmp_a_b": 1 + }, + { + "a": "0x450904808b7f84000000", + "b": "0x701608cb6e671000000000", + "cmp_a_b": -1 + }, + { + "a": "0x28f742b14a68da000000000000000000000", + "b": "0x3f5567e838a", + "cmp_a_b": 1 + }, + { + "a": "0x65528", + "b": "0x2790c926f37cbe00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa9116ab3970d60000000000000000000000000000", + "b": "0x8480aef2ab4c6000000", + "cmp_a_b": 1 + }, + { + "a": "0x63b82d6ff9a2900000000000000000000000000000000000000", + "b": "0x6bff23306634c00000", + "cmp_a_b": 1 + }, + { + "a": "0x56132766b208740000000000000000000000000", + "b": "0x9f", + "cmp_a_b": 1 + }, + { + "a": "0x54d9ef48b7f0080000000000000", + "b": "0x3cb39550332", + "cmp_a_b": 1 + }, + { + "a": "0x2b24a599a3462e0000000000000000000000000", + "b": "0x135b094bbbb4bd000", + "cmp_a_b": 1 + }, + { + "a": "0x1794e7ed3a8f72000000000000000000000000", + "b": "0x15bb984705f3010000000", + "cmp_a_b": 1 + }, + { + "a": "0x3e93cb7acc1d2600000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xdd61d69aacece0000000000000000000000000000000000000000000000000000", + "b": "0x59527e4b3aa2ac000000000", + "cmp_a_b": 1 + }, + { + "a": "0x65f3", + "b": "0x9e8438bc04bf580", + "cmp_a_b": -1 + }, + { + "a": "0xc152d59559366000000000000000000000000000000000000000", + "b": "0x380a5897", + "cmp_a_b": 1 + }, + { + "a": "0x53f2972b619bd40000000000000000000000000000000000000000000000", + "b": "0xae33d187bb446000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x7f9f52b0e396d80000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xe8a57bc8565fd800000000000000000000000000000", + "b": "0x120b080d8a52ce00000000000", + "cmp_a_b": 1 + }, + { + "a": "0x27d3236ab890160000000000000000000000", + "b": "0x59782be2e5333c00", + "cmp_a_b": 1 + }, + { + "a": "0x2b38b8518b107e00000000000000000000000000000", + "b": "0x149456d0ff27f60000", + "cmp_a_b": 1 + }, + { + "a": "0x3778ed052088dc", + "b": "0x1ba2f43ba3558e0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x27c3e65f3d98d200000000000000000", + "b": "0x893a561e19d59000", + "cmp_a_b": 1 + }, + { + "a": "0x12a34a82aa73b3000000000000", + "b": "0x2720134fe44cc8000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3c3eb060e93e4e000000", + "b": "0x3461167691f1720000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3ac1aa9f9a5bee00000000000000000000000000000000000", + "b": "0x4cbcc", + "cmp_a_b": 1 + }, + { + "a": "0xaf1f1", + "b": "0xaf1f1", + "cmp_a_b": 0 + }, + { + "a": "0x846263a8151d480", + "b": "0x846263a8151d480", + "cmp_a_b": 0 + }, + { + "a": "0x339b2b660d4216000000000000000000000000000000", + "b": "0x7d", + "cmp_a_b": 1 + }, + { + "a": "0xb033b25c4e4098000000000000000000000000000000000000", + "b": "0x2eabbe3bacda7e000000", + "cmp_a_b": 1 + }, + { + "a": "0x302e9", + "b": "0x35a935d50317fc0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x254f69f2089a9000000000000000000000000000000000000000", + "b": "0x145", + "cmp_a_b": 1 + }, + { + "a": "0x60275f5ac6058400000000000000000000000000", + "b": "0x778d3bdea9f02c00000000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x6a089bb198eda", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x16f85502cb5b7b0000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4fbff52610f2700000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x3df695dfb5aa", + "b": "0x19930a2d49778700000", + "cmp_a_b": -1 + }, + { + "a": "0x58188164ea5d1c0000000000000000000000000000000", + "b": "0x2066b7e81d5f3e000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x11582b048b693a00000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x28481df", + "b": "0xb65b40a58433100000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x51b18a847719e0000000000000000", + "b": "0x2f3d3ce", + "cmp_a_b": 1 + }, + { + "a": "0x747c3a4f5", + "b": "0x93e16985b30550", + "cmp_a_b": -1 + }, + { + "a": "0x1fed0ff479a4d2000000000000000000000", + "b": "0xae3d41154ba9080000", + "cmp_a_b": 1 + }, + { + "a": "0x183c83f87a566100000000000000000000000000000000000000000000000", + "b": "0x21695e5dd", + "cmp_a_b": 1 + }, + { + "a": "0x209b1c3fd41a7a000000000000000000000000000000", + "b": "0x3b5", + "cmp_a_b": 1 + }, + { + "a": "0x240714d", + "b": "0xcbc37d71f9b", + "cmp_a_b": -1 + }, + { + "a": "0xb19b3c9b57d3680000000000000", + "b": "0x113918f957c", + "cmp_a_b": 1 + }, + { + "a": "0x11cfb756a09dcc0000000000000000000000000", + "b": "0xddfd2eef4c", + "cmp_a_b": 1 + }, + { + "a": "0x3b550aeed9305", + "b": "0x3d9a060cefc49a0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9b871f11b2011000000", + "b": "0xd5b09ee5a987680000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3e0990d42e1966000000000000000000000000", + "b": "0x4fbf1cf9f4bd0c000000000", + "cmp_a_b": 1 + }, + { + "a": "0xdd2131f99544580000000", + "b": "0x1be9216ab1a90200000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1edc87fc99553b0000000000", + "cmp_a_b": -1 + }, + { + "a": "0x88ec55a5fcf77800000000000000", + "b": "0x491e9922c30c7800000", + "cmp_a_b": 1 + }, + { + "a": "0x515fe7e3e8e8ec000000000000000000000000000000000000000000000000000", + "b": "0xf13de26b89c6700", + "cmp_a_b": 1 + }, + { + "a": "0x15e8dcf4d6455500000000000000000000000000000000000", + "b": "0x1f5d9a57f6f31800000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3a73150e14597200000000000000000000000000000000000000000", + "b": "0x88eb66f71e0e080000000000", + "cmp_a_b": 1 + }, + { + "a": "0x21e11755c16b1c00000000000000000000000", + "b": "0x238b6e16eb601400000000000", + "cmp_a_b": 1 + }, + { + "a": "0x24736c6a5a284c0000000000000000000000000000000000000000000000000", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x48b09b28428bb40000000000000", + "b": "0x3d30fbb7716e30000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x884fe7e6966b8", + "b": "0x30b42f5f5ed3ac0000000", + "cmp_a_b": -1 + }, + { + "a": "0xed81c297b1b580000000000000000000000000000000", + "b": "0x7e427382e80", + "cmp_a_b": 1 + }, + { + "a": "0x15694b272d1e0d0000000000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x197b781ab9757900000000000", + "b": "0x47de11a6", + "cmp_a_b": 1 + }, + { + "a": "0x67629a2034822400000000000000000000000000000000", + "b": "0x18dcc1496b965b00000000", + "cmp_a_b": 1 + }, + { + "a": "0x14", + "b": "0x2016dd83e3b2c000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3ae15222e377ea0000000000", + "b": "0x1106f", + "cmp_a_b": 1 + }, + { + "a": "0x87f5b59339f11800000000000000000000000000000000000000000000000", + "b": "0x97fedbe792d", + "cmp_a_b": 1 + }, + { + "a": "0x164998e", + "b": "0x1a4cb09", + "cmp_a_b": -1 + }, + { + "a": "0x6bce7d5f4f7", + "b": "0xc81ee87d2d6868000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa31e22955c5940000000", + "b": "0x58cac7ecaa5", + "cmp_a_b": 1 + }, + { + "a": "0x1ac955894718e6000000000000000000000000", + "b": "0x22", + "cmp_a_b": 1 + }, + { + "a": "0x3597598b", + "b": "0xd59433161055000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x45819821fd9e80000000000000000000000000", + "b": "0x62b21d4a24705000000", + "cmp_a_b": 1 + }, + { + "a": "0x79667f8f20b9f800", + "b": "0x9c81c9adea76900000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x43b910ff04a73000000000", + "cmp_a_b": -1 + }, + { + "a": "0x91", + "b": "0x91", + "cmp_a_b": 0 + }, + { + "a": "0x3e8a00d424a31a0000000000", + "b": "0x183270ef60d904000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x58e60ad5b05dbc00000000000000000000000000000000000000000000000", + "b": "0x21dbafd0a3e6bc000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xc2f006b56d31980000000000000000000000000000000000", + "b": "0x2534a40f62649a0000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x54892e07705", + "b": "0x135505373fb7cf000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x426736d7c2740000000000000000000000000000000000000000000", + "b": "0x66", + "cmp_a_b": 1 + }, + { + "a": "0x359ed3dd3234240000000000000000000000000000000000000000", + "b": "0x644b", + "cmp_a_b": 1 + }, + { + "a": "0x17f9da96c572b9000000000000000000000000000000", + "b": "0x38545fd4c1059000000", + "cmp_a_b": 1 + }, + { + "a": "0x1465465bb983c6000000000000000", + "b": "0x18a463e95981ee000", + "cmp_a_b": 1 + }, + { + "a": "0xc0bf", + "b": "0xb98e9689907a600", + "cmp_a_b": -1 + }, + { + "a": "0x17433b228562e40000000000000000000000", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x24779ea36e50f200000000000000000000000000000000", + "b": "0x22dca2ca97a94200000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xd20ab385cb83d80000000000000000000", + "b": "0x12cad4aad", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x3e1da81d6961360000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa418b5f282875000000000000000000000000000", + "b": "0xaca8c90c8dae", + "cmp_a_b": 1 + }, + { + "a": "0x6989849919e61c0000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xa9c142abda1698000000000000000000", + "b": "0x21a7f4fe1b844a000000000", + "cmp_a_b": 1 + }, + { + "a": "0x131b5ad3c8ccc0000000000000000000", + "b": "0xa79d9f07a734280000000", + "cmp_a_b": 1 + }, + { + "a": "0x6c6ab98b3691c800000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x15fb494561b1b200000", + "b": "0xdfc143ba", + "cmp_a_b": 1 + }, + { + "a": "0x6e881e5a652e6000000", + "b": "0x6a4756fdea0e1c0000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2fa4c1e1602fa6000000000000000000000000000000000000000", + "b": "0xce023", + "cmp_a_b": 1 + }, + { + "a": "0x5a67dc3257afd00000000000000000000000000000000000000000000", + "b": "0xe1adaf993fe50000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x498854a0096c48000000000000000000000000000000000000000000", + "b": "0x2109", + "cmp_a_b": 1 + }, + { + "a": "0x1265d3298fe8a6000", + "b": "0x5fe5aa57196a9", + "cmp_a_b": 1 + }, + { + "a": "0x127cb751c23820000000000000", + "b": "0x127cb751c23820000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x1231c2c7c728ed000000000000000000000000000000000000000000", + "b": "0x1bdac54af0548600000", + "cmp_a_b": 1 + }, + { + "a": "0xec4f7cc8dc02080000000000000000000000000000000000", + "b": "0x37e734879d42b", + "cmp_a_b": 1 + }, + { + "a": "0x8f152f184d44c00000000000000000000000000000000000000000", + "b": "0x1c2fdf7e9fb60b0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x7304882e393d10000000000000000000000000000000000000000000000", + "b": "0xba682a125143d00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xdede121d53915800000000000000000000000000000000000", + "b": "0x261086dd80bac400", + "cmp_a_b": 1 + }, + { + "a": "0x584947c3", + "b": "0x18f2f72f413", + "cmp_a_b": -1 + }, + { + "a": "0x1171e3", + "b": "0xa4cc61800208f8000000", + "cmp_a_b": -1 + }, + { + "a": "0x1d109e923bbab3000", + "b": "0x6ab64a13bbbfb00000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17c2b", + "b": "0x1d62704f1fa1d40000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x60144c1db", + "cmp_a_b": -1 + }, + { + "a": "0x1eba506f780405", + "b": "0x183c66fcb59f95000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x296d5", + "b": "0x41a9e757a3b2", + "cmp_a_b": -1 + }, + { + "a": "0x28991856b52ddc0000000000000000000000000000000000000000000", + "b": "0x13ca6641002ea800000000", + "cmp_a_b": 1 + }, + { + "a": "0x1b744f7566c3e900000000000000000", + "b": "0x2100c6628784cc000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1c6a13a068e289000000000000000000000000000000000000000000000000000", + "b": "0x13360214", + "cmp_a_b": 1 + }, + { + "a": "0x93972", + "b": "0x34b209ec8287380000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x50127dc9159914000000", + "b": "0x26f1d03", + "cmp_a_b": 1 + }, + { + "a": "0x708fa2373afafc000000000000000000000000000000000000000", + "b": "0x443ece6cfea0440000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2419f51b5838220000000000000000000000000000000", + "b": "0x1aaa1740c7adc70000000", + "cmp_a_b": 1 + }, + { + "a": "0x22246bc5be940600000000000000000000000000000000", + "b": "0xa6faef8eeafcd80000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x26f", + "b": "0x625d6f369582700000000", + "cmp_a_b": -1 + }, + { + "a": "0x6915aa694cb8c00000000000000000000000000000000", + "b": "0x9c41", + "cmp_a_b": 1 + }, + { + "a": "0x280cac6f3f39140000000000000000000000000000000000000000000000", + "b": "0x22f6dcb12a3a0", + "cmp_a_b": 1 + }, + { + "a": "0x292b6d2ac79a2a00000000000000000000000000", + "b": "0x309ed8b24d9ca800000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x829c4849de550800000000000000000", + "b": "0x14cee171", + "cmp_a_b": 1 + }, + { + "a": "0x14963481e370", + "b": "0x14963481e370", + "cmp_a_b": 0 + }, + { + "a": "0x17", + "b": "0x3a6d1d68116fca00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5139638804c244000000000000000000000000000000000000000", + "b": "0x4c862c9ebf171", + "cmp_a_b": 1 + }, + { + "a": "0x26c91697", + "b": "0x17d5982ca7302", + "cmp_a_b": -1 + }, + { + "a": "0x94155c1", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x355c57c9cdb5860000", + "b": "0x59632d37fde0e8000", + "cmp_a_b": 1 + }, + { + "a": "0x86c443", + "b": "0x19e", + "cmp_a_b": 1 + }, + { + "a": "0x18aa2a67413efe000000000000000000000000000000000000000", + "b": "0x152afe570b79c0000000000", + "cmp_a_b": 1 + }, + { + "a": "0xb7be5f", + "b": "0x138563fbd358a30000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x755da0ddb90a9800000000000000000000000000000000000000000000", + "b": "0x2bd198a8453580", + "cmp_a_b": 1 + }, + { + "a": "0x1c4855cd392aa800000000000000000000000000000000000000000", + "b": "0x2b235c803de1c000000000", + "cmp_a_b": 1 + }, + { + "a": "0x18268abd6a34f70000000000000000000", + "b": "0x1ea", + "cmp_a_b": 1 + }, + { + "a": "0x23e95ad6e05dc200000000000000000000000", + "b": "0x3d5ddfb0", + "cmp_a_b": 1 + }, + { + "a": "0xafd76647", + "b": "0x13bebfec6be3c400000000", + "cmp_a_b": -1 + }, + { + "a": "0xa9f5e491443da0000000000000000000000000000", + "b": "0x1da402a421d88b0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x176bbf7de7fccc00000000000", + "b": "0x176bbf7de7fccc00000000000", + "cmp_a_b": 0 + }, + { + "a": "0x5a7a34bd3094440000000000000000000000000000", + "b": "0x2ad7a5d102cf680", + "cmp_a_b": 1 + }, + { + "a": "0x19d1ec1d78767c0000000000000000000000000000000", + "b": "0x17d6b27", + "cmp_a_b": 1 + }, + { + "a": "0x2f398f5c6206400000", + "b": "0x77f959f6", + "cmp_a_b": 1 + }, + { + "a": "0x2f50226aedcc62000000000000000000000000000", + "b": "0x43fafd3ef912ac00000000", + "cmp_a_b": 1 + }, + { + "a": "0x5babe8b672b5cc000000000000000000", + "b": "0x5babe8b672b5cc000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x804ad5fa51f0e8000000000000000000000000000", + "b": "0xb162a0248a9f580000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x127", + "b": "0x38d32fc8e0b04a00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x425b4371ce4b78000000000000000000000000000000000", + "b": "0x51791dfb", + "cmp_a_b": 1 + }, + { + "a": "0xc7fadad998123000000000000000000000000000000000000000000", + "b": "0x212c639859367000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x18b16f3da7a23e00000000000000000000", + "b": "0x580d22857ce8f8000", + "cmp_a_b": 1 + }, + { + "a": "0x5bc4318184ad740000000000000000000000000000", + "b": "0x13d81a2d8e9d6e0000", + "cmp_a_b": 1 + }, + { + "a": "0x2c205c", + "b": "0x606c5a2bb44260000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x40ff7a160da75000000000000000000000", + "b": "0x5c2456a8f1528000000000", + "cmp_a_b": 1 + }, + { + "a": "0x81470193ab9b4000000000000000000000000000000000", + "b": "0x628de96dbc08580000", + "cmp_a_b": 1 + }, + { + "a": "0xbe4b3bd23129b8000000000000000000000000000000000000000000000000", + "b": "0x16e58166d3", + "cmp_a_b": 1 + }, + { + "a": "0x1cc83680664b0d0000000000000000000000000", + "b": "0x18da409d184", + "cmp_a_b": 1 + }, + { + "a": "0x203fdb6021e7c600000000000000000", + "b": "0x25fb", + "cmp_a_b": 1 + }, + { + "a": "0x2a1ad546064b1c000000000000000000000000000000000000000000000000", + "b": "0x2ed1c98d7185d800000000000", + "cmp_a_b": 1 + }, + { + "a": "0x24e51fcb9a8dbc00000000000000000000", + "b": "0x19dc65f", + "cmp_a_b": 1 + }, + { + "a": "0x1fc9411c76dde4000000000000000000000000000000000000000000000", + "b": "0x974632e0e791f80000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2c0ce02947e8a200000000000000000000000000000000000", + "b": "0x4ec", + "cmp_a_b": 1 + }, + { + "a": "0x23527f1d2abbe80000000000000000000000000000000000", + "b": "0x1b92f12", + "cmp_a_b": 1 + }, + { + "a": "0x1c917076a3474100000000000000000000000000000", + "b": "0x95f92852dc9be000", + "cmp_a_b": 1 + }, + { + "a": "0x24d2e65e54014e0000000000", + "b": "0x3355f7b99cb84400000000000", + "cmp_a_b": -1 + }, + { + "a": "0x26438b24645a7a00000000", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x61bf5", + "b": "0x557", + "cmp_a_b": 1 + }, + { + "a": "0xb78f11283e79b8000", + "b": "0x344227168c4a3c000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x310d50b498708e00000000000000000000000000000000000", + "b": "0x371aa2909d24ee00000", + "cmp_a_b": 1 + }, + { + "a": "0x79d10100e2", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1251a40d2df4b20000000000", + "cmp_a_b": -1 + }, + { + "a": "0x21310228d911fc000000000", + "b": "0x168ef87c20dcbc0", + "cmp_a_b": 1 + }, + { + "a": "0x1de4b18e7e990200000000", + "b": "0x16a932559e", + "cmp_a_b": 1 + }, + { + "a": "0x91117f86f3277800000000000000000000000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x56a7a3acc1423400000000000000000000000000000000000000000", + "b": "0xc103433ce6a49000000000", + "cmp_a_b": 1 + }, + { + "a": "0xd77508f21e3980000000000000000000000000000000000000000000000000", + "b": "0x1c404e61fd8c8a00000000000", + "cmp_a_b": 1 + }, + { + "a": "0xfc19fe1a77b990000000000000000000000000000000", + "b": "0x32e8f5e39db7f0000", + "cmp_a_b": 1 + }, + { + "a": "0x12c316b6436d75000000000000", + "b": "0xa614c4b8a2de680000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1173de65", + "b": "0x14201028ffe86c", + "cmp_a_b": -1 + }, + { + "a": "0x26e0b4161", + "b": "0x268272b2cf", + "cmp_a_b": -1 + }, + { + "a": "0x710266b4f4167c0000000000000000000000000000000000000000", + "b": "0x782e16992fe14400000000000", + "cmp_a_b": 1 + }, + { + "a": "0xc5bd77573996b80000000000000000000000000000000000000", + "b": "0x2ba1b3f15235c200000", + "cmp_a_b": 1 + }, + { + "a": "0x64f35e124bf29400000", + "b": "0x275cca6a9370220000000000", + "cmp_a_b": -1 + }, + { + "a": "0x38fa1c8e086e08000000000000000000000000000000000000000000000000", + "b": "0x2f7add47a2cb7c00000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2b89b8d119a1b6000000000000000000000000000000000000000000000", + "b": "0xff3742617c98f0000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x6c32cae55a2c9c0000000000000000000000000000000000000000000000000", + "b": "0x85ce610", + "cmp_a_b": 1 + }, + { + "a": "0x45c735685dddb00000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x21a2a1baa4cf800000000", + "b": "0xc2f95f55565ff", + "cmp_a_b": 1 + }, + { + "a": "0x11ac95fc0", + "b": "0x1341", + "cmp_a_b": 1 + }, + { + "a": "0x17af787a2ff4030", + "b": "0x1e", + "cmp_a_b": 1 + }, + { + "a": "0x139e131e6d683600000000000000000000000000000000000000000000000000", + "b": "0x1123", + "cmp_a_b": 1 + }, + { + "a": "0x3d34659bfbed9", + "b": "0x21fbd6e70", + "cmp_a_b": 1 + }, + { + "a": "0x159bbabc1", + "b": "0x3fa165cc41511c00000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1563981281112c000000000000000000000000", + "b": "0x121", + "cmp_a_b": 1 + }, + { + "a": "0x326c823d969480000000000000000000000000000000000000000", + "b": "0x3313023bcf0c9c", + "cmp_a_b": 1 + }, + { + "a": "0xf3f994abcfb00000000000000000000000", + "b": "0x79861e1f00dab000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x309c17dd414bb80000000000000000000000000000", + "b": "0x20065078d", + "cmp_a_b": 1 + }, + { + "a": "0x7c3e6fca026f40000000000", + "b": "0x2e57df6147bc8c0000", + "cmp_a_b": 1 + }, + { + "a": "0x933cc930c070000000000000000000000000000000", + "b": "0x238841", + "cmp_a_b": 1 + }, + { + "a": "0x19cc9f9", + "b": "0x1e0405a6cc580d00000", + "cmp_a_b": -1 + }, + { + "a": "0x34f34930583e4800000", + "b": "0x2fbd", + "cmp_a_b": 1 + }, + { + "a": "0xcf13c", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x29abcf67267d9c0", + "b": "0x3232e03b9b6df0000000", + "cmp_a_b": -1 + }, + { + "a": "0x2bfb4198beeee8000000000000000", + "b": "0x2bfb4198beeee8000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x20653a016d773e000000000000000000000000000000000000000000", + "b": "0x2984b379d54cb60000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2f4de779029f66000000000000000000000000000000000000000", + "b": "0x1bdd9f0041e6530000000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x24a5fbcfd859ca00", + "b": "0x61c58ccc86b0ac00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5bf8e9c", + "b": "0x240d179d7ae656000000000", + "cmp_a_b": -1 + }, + { + "a": "0xc2b03cfeac6e50000000000000000000000", + "b": "0x1201a2810995a", + "cmp_a_b": 1 + }, + { + "a": "0x1020e7bd447af40000000000000000000000000", + "b": "0xd9227033f7f6f00", + "cmp_a_b": 1 + }, + { + "a": "0x11efbb35d76f5a00000", + "b": "0x7287ada65d1f6c0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x882c32383b7cf0000000000000000000000000000000000000000000", + "b": "0x1f34cbafae8", + "cmp_a_b": 1 + }, + { + "a": "0x2faaeb23481aba000000000000000", + "b": "0x13e7c5e658d01200000000", + "cmp_a_b": 1 + }, + { + "a": "0x3a676", + "b": "0x54", + "cmp_a_b": 1 + }, + { + "a": "0xa6259b3b95f5400000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xa26f28f67461a8000000000000000000000000000000000000", + "b": "0x168927377063a400000000000", + "cmp_a_b": 1 + }, + { + "a": "0xb2c8766392a53800000000000000000000000", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x4be30b473c3dc0000000000000000000000000000000000000000000", + "b": "0x5b133503e2bf5c0000000000", + "cmp_a_b": 1 + }, + { + "a": "0x5f2dfde1e36f94000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x20ddb766427c", + "b": "0x20ddb766427c", + "cmp_a_b": 0 + }, + { + "a": "0x3b0", + "b": "0x249ab2fd62c63e000", + "cmp_a_b": -1 + }, + { + "a": "0x798333e312a2c0000000000000000000000", + "b": "0x4e49b8c3061a3c000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2b4b32f2159d180000000000000", + "b": "0x33965d29894a620000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7e0a76e2", + "b": "0xd70c097285b4b0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2c6a9b6", + "b": "0x906b89f88b507800000", + "cmp_a_b": -1 + }, + { + "a": "0x713ec5f6011b680000000000000", + "b": "0x713ec5f6011b680000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x616fb36d339090000000000000000000000", + "b": "0x7292474c951b", + "cmp_a_b": 1 + }, + { + "a": "0x3a593095dbcb9e00000000000000000000000000000000000000000000000000", + "b": "0x932bff8db", + "cmp_a_b": 1 + }, + { + "a": "0x84c7519267", + "b": "0xe", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xe528e85db9c8d80000000000", + "cmp_a_b": -1 + }, + { + "a": "0x15cac8e73c39f8000000000000000000000000", + "b": "0x600de", + "cmp_a_b": 1 + }, + { + "a": "0xf15b1cd263fa5800000000000000000000000000", + "b": "0xf03b72197186000000", + "cmp_a_b": 1 + }, + { + "a": "0x1dafc6b73def60000000000000000000000000000000000000000", + "b": "0xac8115a2931b00000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x5a6785236f", + "b": "0x1af7ddd", + "cmp_a_b": 1 + }, + { + "a": "0x2204e835ddea", + "b": "0x63c77ecf4c", + "cmp_a_b": 1 + }, + { + "a": "0x1083e57cd52", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x102d0a4", + "b": "0x1965048702587000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x15c9", + "cmp_a_b": -1 + }, + { + "a": "0x757960af82", + "b": "0x1b8506be59a1ec00000", + "cmp_a_b": -1 + }, + { + "a": "0x7542ef1b8edeb400000000000000000000000000000000000000000", + "b": "0x29465082764840000000", + "cmp_a_b": 1 + }, + { + "a": "0x519d3aa8bb098c000000000", + "b": "0x1255cc3ba94ada0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x109933dfde7ba800000000000000000000000000", + "b": "0x7cb28", + "cmp_a_b": 1 + }, + { + "a": "0x7dbd4c552826f", + "b": "0x6b48892dc3cd78000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x47e573358d28600000000000000000000000000000000000", + "b": "0x82159af1ecdc680000000", + "cmp_a_b": 1 + }, + { + "a": "0x216a5fe046257", + "b": "0x4ecadd9f0dc2f800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17", + "b": "0x3fab8", + "cmp_a_b": -1 + }, + { + "a": "0x32eed32555efce000000000000000000000000000000000", + "b": "0x1e07451e0c70a100", + "cmp_a_b": 1 + }, + { + "a": "0x6a012394c8953c00000000000000000000000000000000000000", + "b": "0x11a3b07025776c000000000", + "cmp_a_b": 1 + }, + { + "a": "0xb8c5de61b3cad0000000000000000000000000", + "b": "0x25806ac36", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x12cb7a7b10fa500000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a6b2160663df70000000000000000000000000", + "b": "0x13e9", + "cmp_a_b": 1 + }, + { + "a": "0x3f89e1d78c43060000000000000000000", + "b": "0x2e1179afcc4f3", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x6a8a75011", + "cmp_a_b": -1 + }, + { + "a": "0x6e5e65cb5f6c9c000000000000000000000000000000000000000000", + "b": "0x13322da3c0", + "cmp_a_b": 1 + }, + { + "a": "0x77fdb5440", + "b": "0xed411b7e3d13a00000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8ba10daaab742000000000000000000000000000000000000000000000000000", + "b": "0x961b866cb05b380000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1f244305d3e3070", + "b": "0x4a1d33c614f9e4000000", + "cmp_a_b": -1 + }, + { + "a": "0x5086b338b34", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x4d91a725b778140000000000000000000000000000000000000", + "b": "0xd6f8701a65cd0800000", + "cmp_a_b": 1 + }, + { + "a": "0x1a1ef78beb152000000000000000", + "b": "0xf", + "cmp_a_b": 1 + }, + { + "a": "0x5296e0e818e", + "b": "0x920200bf0f02d8000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6c7820a151e888000000000000000000000000", + "b": "0x72f7bed7169bbc00", + "cmp_a_b": 1 + }, + { + "a": "0x57f5a382be299c0000000000000000000000", + "b": "0xe0d5513c51e32000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xa5edb9", + "cmp_a_b": -1 + }, + { + "a": "0x3412905d3469ec00000000000000000000000000000000000000", + "b": "0x25968578a41b7c00000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x5d248a28165a68000000000000000000000000000000000", + "b": "0x8a5b91ad9a70780000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x7edcac1ce5e8dc00000000000000000000000000000", + "b": "0x14fc0f73af1296000000000", + "cmp_a_b": 1 + }, + { + "a": "0x56b416aa5f26e0000000000000000", + "b": "0x1a1fe8d6e8e3290", + "cmp_a_b": 1 + }, + { + "a": "0xf2564c6b182b5000000000000000000000000000000", + "b": "0x409e1b4e3bd13000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1033aa3cbfeef4000000000000000000000000000000000", + "b": "0x10751d07d00c3f000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x6b6d98344965a80000000000000000000000000000", + "b": "0x615e32ff23c1d80000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1c0f1dfee902070000000000000000000000000000000000000", + "b": "0x691b96", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xfc57f6da29d73000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb8e7c06160ca4800000000", + "b": "0x2548b87221391e000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xafbab1", + "b": "0x560c08", + "cmp_a_b": 1 + }, + { + "a": "0x39acc71c3726be000000000000", + "b": "0x6ca", + "cmp_a_b": 1 + }, + { + "a": "0x5fbac560017864000000000000000000000000000000", + "b": "0x276877", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1404382", + "cmp_a_b": -1 + }, + { + "a": "0x4579618dba65b800000000000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x176ed1c2f2b27b0000000000000000000000000000000000000000000000", + "b": "0x24dc1fdf46cfae000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x756b8841d0ae74000000000000000000000000000000000000", + "b": "0xb78804dd359fd80000000", + "cmp_a_b": 1 + }, + { + "a": "0x568354ead1e3f400000000000000000000", + "b": "0x71466", + "cmp_a_b": 1 + } + ], + "test_comparison_128_256": [ + { + "a": "0x126e6ec2dd123f000000000000000", + "b": "0x20bcf8022f157a000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xfe865bb4fe40e00000000000000", + "b": "0x28fbc08c217a9e00", + "cmp_a_b": 1 + }, + { + "a": "0x23d7056818d5ce000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x7378183a5254a40000000", + "b": "0xe3b98fe89c84c80", + "cmp_a_b": 1 + }, + { + "a": "0xba5", + "b": "0x238c0909293968000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x644", + "b": "0x644", + "cmp_a_b": 0 + }, + { + "a": "0x3deedb69e03360000000000000", + "b": "0x3deedb69e03360000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x85bcb47ca8f4d", + "b": "0x84756c1", + "cmp_a_b": 1 + }, + { + "a": "0x3f1dc9a7f241c8000", + "b": "0x1a538a5cd386cd00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd55a43eee668380", + "b": "0xd55a43eee668380", + "cmp_a_b": 0 + }, + { + "a": "0x3c9", + "b": "0x13a8f3b288e2b4000000000", + "cmp_a_b": -1 + }, + { + "a": "0xadcc", + "b": "0x1ae1b26cfdb836000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x128fb7e", + "b": "0x1f66218264b6b4000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3186cda", + "b": "0x9117fbfdb63f88000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xbe688579", + "b": "0x2b4e86b6f65288", + "cmp_a_b": -1 + }, + { + "a": "0xe933c3b009de500", + "b": "0x60bbd1d35701ac000000", + "cmp_a_b": -1 + }, + { + "a": "0x71e4b", + "b": "0x5795bff25523dc000", + "cmp_a_b": -1 + }, + { + "a": "0x33faa22beca2680000", + "b": "0x416d510a74a9", + "cmp_a_b": 1 + }, + { + "a": "0x3ba1c9", + "b": "0xd1a84af3", + "cmp_a_b": -1 + }, + { + "a": "0x133604f", + "b": "0x1f9871bad93f2d0000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8df6a9613630a0000000000000000000", + "b": "0x6020e3ad64ef6c00000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xca9e58a9f", + "b": "0x290373", + "cmp_a_b": 1 + }, + { + "a": "0x25aa92f1068c9", + "b": "0xd4114", + "cmp_a_b": 1 + }, + { + "a": "0xf0c6423dfb81680000000000000", + "b": "0x6017c311ae4fe4000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x295371c9dfa9d40000000000", + "b": "0x918218a85b37c0000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x144b1aebc684d300000000000", + "b": "0x5bde76f67b15f40", + "cmp_a_b": 1 + }, + { + "a": "0x169b", + "b": "0x8012e6259c6", + "cmp_a_b": -1 + }, + { + "a": "0x8c71e66e06e450", + "b": "0x34f898faaab0e0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x67", + "b": "0x51255de0cf5c", + "cmp_a_b": -1 + }, + { + "a": "0x112c2c44697026000000000", + "b": "0x18a7b04e98661a00000000", + "cmp_a_b": 1 + }, + { + "a": "0x3e4ab85b", + "b": "0xa284796dc18998000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xed4", + "b": "0x6c834f78a5ddd800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x412bfe553d8f0800000000", + "b": "0x38311cdb29e98200000", + "cmp_a_b": 1 + }, + { + "a": "0x107082a140b73d00", + "b": "0x20", + "cmp_a_b": 1 + }, + { + "a": "0x9dc2b1d32109580000", + "b": "0x451785f936d9a80000", + "cmp_a_b": 1 + }, + { + "a": "0x18", + "b": "0x18", + "cmp_a_b": 0 + }, + { + "a": "0x21da6fc33bde4800", + "b": "0x17742b720927a7000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8fdb1581a73918000000000", + "b": "0x2991579cc6278e000000", + "cmp_a_b": 1 + }, + { + "a": "0xed8ae6505027", + "b": "0x229b766b01fe6e00000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2bd2ee46", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x8b8c3e9179cea0000000000", + "b": "0x66c747176f18b4", + "cmp_a_b": 1 + }, + { + "a": "0x7168091750311000", + "b": "0x6b36cd57c5b2", + "cmp_a_b": 1 + }, + { + "a": "0x85", + "b": "0x1795736", + "cmp_a_b": -1 + }, + { + "a": "0x130beecd0eaa8000000", + "b": "0x1b1da26ff34374000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1396e274de9f4b000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4a32bd7629e2800000000000", + "b": "0x92ce6daaa649800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1f9edaf60e7b9a0000000000", + "b": "0x8250f059f8f3a80000000000", + "cmp_a_b": -1 + }, + { + "a": "0xaa", + "b": "0x13de3613f2285c00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7a8f12086e", + "b": "0x26d0e18df8b6", + "cmp_a_b": -1 + }, + { + "a": "0x1c0a8e3090a9ca0000000000", + "b": "0x73bcdcf88065b000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37c3debbb98", + "b": "0x291", + "cmp_a_b": 1 + }, + { + "a": "0xa0deeed7c849b0000000", + "b": "0x2cfb79cce9869800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x49704d2ed776f00000000000", + "b": "0xe934492017f950000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17850e6c52d35d0000000000000", + "b": "0x37553cdace7acc0000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd958836e21b02800", + "b": "0x1449eb7c11784f0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a17085", + "b": "0x4f13d3ef5e814800000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x1", + "cmp_a_b": 0 + }, + { + "a": "0x80ced8cb24469800000", + "b": "0x15a28ee22eedac0000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x15aec946aac73500000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x375e", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x9dd6d77f5ed0c000000000000000", + "b": "0x1f83a3ef99a4bd0000000", + "cmp_a_b": 1 + }, + { + "a": "0x19a6f5704e6d78000000000000000000", + "b": "0x8e04850c023cb000", + "cmp_a_b": 1 + }, + { + "a": "0xbc912f1d0d62", + "b": "0xbc912f1d0d62", + "cmp_a_b": 0 + }, + { + "a": "0x4cc2df2813988", + "b": "0x7addd857", + "cmp_a_b": 1 + }, + { + "a": "0x4f7de0bbef3a", + "b": "0xc711a677056830000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf837c77df05fc000", + "b": "0xf837c77df05fc000", + "cmp_a_b": 0 + }, + { + "a": "0xceff162ba91", + "b": "0xcbb2", + "cmp_a_b": 1 + }, + { + "a": "0x1be6", + "b": "0x12b59d634af69b00000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x27463d7dcb", + "b": "0xe7aa92850552c00000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd13d519d9efdc800000000000000", + "b": "0x158c5403d8b80200000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x27b1ac5b6aedbe0000000000000", + "b": "0x61a4fb8cf02028000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x9de4a", + "cmp_a_b": -1 + }, + { + "a": "0x58b14ec34", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1bb", + "b": "0x2d", + "cmp_a_b": 1 + }, + { + "a": "0x345e49509", + "b": "0x53f70d7c3f843800000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1c64", + "b": "0x3834f4793e4b6800000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x176f77b08e8d75000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x19727c4ba76ce400000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1869b47f23322800000000000000000", + "b": "0x1be9b96da52a0d000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x82736f6bd676", + "b": "0xef7796e0df43d800000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x2", + "cmp_a_b": 0 + }, + { + "a": "0x524fbc060", + "b": "0xd7f00b26c157600000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x87f0eac7f6878", + "b": "0x32", + "cmp_a_b": 1 + }, + { + "a": "0x7a18bde882d8", + "b": "0x7efc99f9b1f8a0000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb08b75dbc20050", + "b": "0x2480365950a5520000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37fe24fee8", + "b": "0x1444895bd303", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x539f6b82f400ec00", + "cmp_a_b": -1 + }, + { + "a": "0x154961541cc14400", + "b": "0x11188e8d56b23f0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6e35ec1d613454000", + "b": "0x2d291d10ff75ec0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4169968e35d", + "b": "0x3204f994ceb4e40000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x715e844e24bdb8000000000000000000", + "b": "0x257e2a946730580000000", + "cmp_a_b": 1 + }, + { + "a": "0xd3e2a64a977940000000000000000000", + "b": "0x9bc85e2a5534f80000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x5a7b8735bf04e8", + "b": "0x913528473b37a80000000", + "cmp_a_b": -1 + }, + { + "a": "0x6e074", + "b": "0xa722f98f1db1a", + "cmp_a_b": -1 + }, + { + "a": "0x10caa17", + "b": "0x10caa17", + "cmp_a_b": 0 + }, + { + "a": "0x31c0f68460f85a", + "b": "0x9a2d03991f466800000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x34c6ab653d5", + "b": "0x5e8fe357a6acbc00000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1ac58a0c2c40440000000000000", + "b": "0x511658b6f77e", + "cmp_a_b": 1 + }, + { + "a": "0x4c169a", + "b": "0xb82a171296910800000000000", + "cmp_a_b": -1 + }, + { + "a": "0xcaaa8", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1fe", + "b": "0x4da3ecb979fe3c0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4aee9d8", + "b": "0x1765faa68", + "cmp_a_b": -1 + }, + { + "a": "0x17a2ced7e9552", + "b": "0xcad7933c6d2b6800000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14b8db5a6348a0", + "b": "0x265b63b2f406", + "cmp_a_b": 1 + }, + { + "a": "0x1ece04ea299716000", + "b": "0x187463f75e904a00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x36495", + "b": "0xf0", + "cmp_a_b": 1 + }, + { + "a": "0x4601b49a248844000", + "b": "0xbc25ec74971fd80", + "cmp_a_b": 1 + }, + { + "a": "0xe6589f1baf59c80", + "b": "0x2bd3cfcb96955c00000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x173cb6f9676", + "cmp_a_b": -1 + }, + { + "a": "0x76496d43faae0c00000000", + "b": "0x27f", + "cmp_a_b": 1 + }, + { + "a": "0x221018c9db4d26000000000000", + "b": "0x691e8d6ed5f4e800", + "cmp_a_b": 1 + }, + { + "a": "0xbd7536f059774", + "b": "0xbd7536f059774", + "cmp_a_b": 0 + }, + { + "a": "0x28556f9514341a000000000", + "b": "0x97219b1d3b0f700000000", + "cmp_a_b": 1 + }, + { + "a": "0x1352159fea1fa20000", + "b": "0x4ed939876b4504000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb7ccae7304b3a000000000000", + "b": "0xb7ccae7304b3a000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x627263", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x9bcab22bc8e56800000000000000000", + "b": "0x11cdfaae6f6e2f000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3d459dc09508620000000000", + "b": "0x19c3589572135900000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a4ee9bc53684", + "b": "0x5a2c49a405f0d400000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6ec8dd114d7b3c00000", + "b": "0x7386edce902b9c00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x905868c36d7fe000", + "b": "0x905868c36d7fe000", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x22b29b761b1", + "cmp_a_b": -1 + }, + { + "a": "0xa1242e0ff22a9000000000000", + "b": "0x10eadbe365e8660000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x74156", + "b": "0x33bfea541f7b3c0000000", + "cmp_a_b": -1 + }, + { + "a": "0x186f8a1f32c26c00000000", + "b": "0x41fa723af6b01000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x452d4", + "b": "0xd7a57607bb3160000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1efadb4bcf8d", + "b": "0x5c5012c", + "cmp_a_b": 1 + }, + { + "a": "0x7b595a29f07d", + "b": "0xb6b", + "cmp_a_b": 1 + }, + { + "a": "0x1328622d6ade3f0000000000000000", + "b": "0x14e3fd29ba41be0000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x45785ec8cd5d3c000000000000000", + "b": "0x3fb7729b49f060000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x43b290f9465fac0000000000000000", + "b": "0x29861bb4", + "cmp_a_b": 1 + }, + { + "a": "0xb81c69577d28c80000000", + "b": "0xb81c69577d28c80000000", + "cmp_a_b": 0 + }, + { + "a": "0x143f65d4ffdb87000000000000000000", + "b": "0x8b0764db6437a00000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb4c2e", + "b": "0x12bff10b918e9700000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x207ed4980f7580000", + "b": "0x207ed4980f7580000", + "cmp_a_b": 0 + }, + { + "a": "0x6d18fa01b1ad60", + "b": "0x6ddbb608fe03ac0", + "cmp_a_b": -1 + }, + { + "a": "0x3f9f89d67fdf340000000000000000", + "b": "0x2b44ece943544600000000", + "cmp_a_b": 1 + }, + { + "a": "0x13e3c49b84", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x4280d4b4d", + "b": "0x2b30546f1bcca60000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xbbed61ce20196000000000000000000", + "b": "0x6f0f64c0cac81800000000000000", + "cmp_a_b": 1 + }, + { + "a": "0xc0", + "b": "0xecc9065dd27c0800", + "cmp_a_b": -1 + }, + { + "a": "0x75ffe160c633b0000000000000", + "b": "0x80e65204d1dd300000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8bcd7b80ec9e000000000000000", + "b": "0x40baad7c21031400000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2c63210142c47200000000000", + "b": "0x1913b326e09c73000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x41449e9421517c000000000", + "b": "0x41449e9421517c000000000", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x5183b661a7c56400000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7028db", + "b": "0x9dc9cccb3fb0000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a76396f4cadba00", + "b": "0x1be", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x10eb1465476c1800000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1c437", + "b": "0x2286d42c7ac7fa000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xbd94f", + "b": "0x3872305cdfcb2", + "cmp_a_b": -1 + }, + { + "a": "0x10f954ead4927b00000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x889371e35", + "b": "0x1e36b36ed39", + "cmp_a_b": -1 + }, + { + "a": "0x42e96eb7d148440000000000", + "b": "0x42e96eb7d148440000000000", + "cmp_a_b": 0 + }, + { + "a": "0x57578a5d4978f00000000000", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0x14", + "b": "0x14", + "cmp_a_b": 0 + }, + { + "a": "0x179603ed", + "b": "0x179603ed", + "cmp_a_b": 0 + }, + { + "a": "0x9bfa943fcb37b8000000", + "b": "0xf0a637e6fa04180000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x25049ecdb74076000000000000", + "b": "0x1358cf29d1", + "cmp_a_b": 1 + }, + { + "a": "0xecee183dc86440", + "b": "0x19fdedc7ac91740000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xc781135936bf80000000000", + "b": "0xa", + "cmp_a_b": 1 + }, + { + "a": "0x7d06cc173b6ab400000", + "b": "0x224c1d4a2", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x55d29a8bc960cc0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x16a324ef43647c", + "b": "0x12f5090fba22e10000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x4fcc60cb6e37680000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x266", + "b": "0x266", + "cmp_a_b": 0 + }, + { + "a": "0x1c08e8b7168a1700000000000000000", + "b": "0x1c08e8b7168a1700000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x5a733", + "b": "0x7df7476d11fb480000000", + "cmp_a_b": -1 + }, + { + "a": "0x8b04f89997edd0000000000", + "b": "0x1f84197c7fd016000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x514b", + "b": "0xa02bc00613e828000000", + "cmp_a_b": -1 + }, + { + "a": "0x177ed9acd206d000", + "b": "0x5cc044225ca64800000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1c3a45264ef40", + "b": "0x1c3a45264ef40", + "cmp_a_b": 0 + }, + { + "a": "0x6b7e4c88a07b", + "b": "0x32dcb3899f06cc000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x1086ca397918", + "cmp_a_b": -1 + }, + { + "a": "0x10b0e090e7", + "b": "0x10b0e090e7", + "cmp_a_b": 0 + }, + { + "a": "0x2a7314249301040000000000", + "b": "0x3e4f7f903ff9ba0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x83f", + "b": "0x3dc7e91a4", + "cmp_a_b": -1 + }, + { + "a": "0x9", + "b": "0x44b78859", + "cmp_a_b": -1 + }, + { + "a": "0xf439e7b6b926e80000000000000", + "b": "0x296e2d6add6a060000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x39b35f39", + "b": "0x39b35f39", + "cmp_a_b": 0 + }, + { + "a": "0x2e0d27feec2fb20000000000000", + "b": "0x20599f285cd9ac00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1b89c33fd1db0f000000000000000", + "b": "0x1cfbc4e2bc726f0000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x585498", + "b": "0x2e717643b74e0c000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1ea2f075fd79670000000000000", + "b": "0x1ea2f075fd79670000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x3956fb149e6b5a00000000000000000", + "b": "0x3956fb149e6b5a00000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x2c1d955", + "b": "0x28379f8c5960a200000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x127169b222", + "b": "0x7", + "cmp_a_b": 1 + }, + { + "a": "0x7212acf2ca29e000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x3a5846c658c77400000", + "b": "0x7eb6ac976949e00000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x953e2ad4fe9d180", + "b": "0x35c1b640f45e74000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x4a99112ab907600", + "cmp_a_b": -1 + }, + { + "a": "0x991075e338f", + "b": "0x75483aac23", + "cmp_a_b": 1 + }, + { + "a": "0x4c2cb9952b4f94000000000000000", + "b": "0x2d288a0ba6959200000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x2f5524a4e8b92a000000000", + "b": "0x1", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x191232243c176a000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x95dd7d7d31ddb00000000000000", + "b": "0x1e0c133205618e0000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14f8d1653f29a3000000000", + "b": "0x1e767df82758bb00000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x2b3dc9d47f3a34000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x694402586030f0", + "b": "0x694402586030f0", + "cmp_a_b": 0 + }, + { + "a": "0x3a1ed9e6d", + "b": "0x2c8d472723802800000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a23f52698fe", + "b": "0xb36d3f4beccc600000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10979dfd00b60a00000", + "b": "0x10979dfd00b60a00000", + "cmp_a_b": 0 + }, + { + "a": "0x6a1", + "b": "0x6a6de4d89f7", + "cmp_a_b": -1 + }, + { + "a": "0x51a6302f062da800000000", + "b": "0x2848d7cbb872ac000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xe135fa42369f9800000", + "b": "0x4f1732b0321d100000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x3a12fb5493c9", + "cmp_a_b": -1 + }, + { + "a": "0x2d7af605a", + "b": "0x2d7af605a", + "cmp_a_b": 0 + }, + { + "a": "0x10e51", + "b": "0x1b59b1a5a52ed70000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7b1addaf29", + "b": "0x12dc190f50adf6000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x86f3b17c6d93500000000", + "b": "0x86f3b17c6d93500000000", + "cmp_a_b": 0 + }, + { + "a": "0x1350ca496c0e490000000000", + "b": "0x1350ca496c0e490000000000", + "cmp_a_b": 0 + }, + { + "a": "0x37df3bb", + "b": "0x92a5ff5", + "cmp_a_b": -1 + }, + { + "a": "0x54185d1", + "b": "0x324f82d44888920000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x664428599e738", + "b": "0x83735c2871f18000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x40a819a53df23", + "b": "0x100dcc7407cd7d000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xeeb9cdbe837b780000000000", + "b": "0xeeb9cdbe837b780000000000", + "cmp_a_b": 0 + }, + { + "a": "0x1cdf5d27f7f0820000000000", + "b": "0x28c0276a30db66000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf71", + "b": "0x173c683415c108000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x111b7029eb743", + "b": "0x2528d7b2395190000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x6cedb1dafc85e00000", + "b": "0x3da0c6130dd50c000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x72d267e8a24da4000000000", + "b": "0x3da3987d7bc6c4000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x26a17a13c7ea540000000000000", + "b": "0x2f142646f751800", + "cmp_a_b": 1 + }, + { + "a": "0x89072a53f7c53", + "b": "0x1699be828e762100000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x73f8706ae37c7c00000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xd64c435c2f85480000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1e08eaeb1bd0dc0", + "b": "0x9137c5a609b4c8000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x518ab19f5780ac00000", + "cmp_a_b": -1 + }, + { + "a": "0x798ba52e1bab840000", + "b": "0xc7797f7f7553a800000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5711deea339bec0000000000000", + "b": "0x7f97c09de710a40000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x18d9f05", + "b": "0x57b94163875614000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6a5ed43dbec81800000000000", + "b": "0x953d357ceed1c00000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa8a08304e2b9e0000000000000000", + "b": "0x36888326d3c50a00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x83e47480ce6e38", + "b": "0x15e8bd7f921c1400000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5d6", + "b": "0x5d6", + "cmp_a_b": 0 + }, + { + "a": "0x14e1e69", + "b": "0x8e602eb222af080000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4a1fc53c3138a8000000000", + "b": "0x76efc28167910c00000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x48d82e426838e400000000000", + "b": "0xcc38047f2606700000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x308a0c5d3", + "b": "0x415ead74aec", + "cmp_a_b": -1 + }, + { + "a": "0x1f", + "b": "0xbafe5cd6a3f7c80000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x24e2a3aa502dda000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x2fc826a0e6f2d200000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x95c90416183538000000000", + "b": "0x12cd51040c24ec00000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8d15736c7", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x419a1579275e34", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x69478738ec5a", + "b": "0x42ba636a761a08000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6ffbbc62a1aca0000", + "b": "0x563fac10111e68000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x653fd87f3713", + "b": "0x114910efe50b61000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10db72da5bbbea0000000000", + "b": "0x6d2e3a870c", + "cmp_a_b": 1 + }, + { + "a": "0x255e3bf342e2980000000000", + "b": "0x255e3bf342e2980000000000", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x4a", + "cmp_a_b": -1 + }, + { + "a": "0x60353e5a61c43c000000000", + "b": "0x297efb92ebf91e000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x179ee205c12fa400000000", + "b": "0x179ee205c12fa400000000", + "cmp_a_b": 0 + }, + { + "a": "0x6d73eba9cf", + "b": "0x6d73eba9cf", + "cmp_a_b": 0 + }, + { + "a": "0x53fee81308f53", + "b": "0x23", + "cmp_a_b": 1 + }, + { + "a": "0x12117378b4a10e000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x12e40b99d40c3d0000000000000", + "b": "0x5cfbb44f34c9500000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x42a", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xdf4c327f36b6000000", + "b": "0x30cd", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xce583cf97d7228000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1b07300b76778a000000000000", + "b": "0x65503fe31401640000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x29bc914b0e0f7600000000", + "b": "0x92cb31e59e17080000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x225ded2c2af5360000000000", + "b": "0x225ded2c2af5360000000000", + "cmp_a_b": 0 + }, + { + "a": "0x29148829", + "b": "0x100839cc14", + "cmp_a_b": -1 + }, + { + "a": "0x3ff8b0170414a2000000000000000", + "b": "0x8", + "cmp_a_b": 1 + }, + { + "a": "0xbde735fb6bbac0", + "b": "0x2861680514beca000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xbe4e", + "b": "0xe516e42fcdd0500000000", + "cmp_a_b": -1 + }, + { + "a": "0x1508a592a4f46300000000000", + "b": "0xdf63d34d971", + "cmp_a_b": 1 + }, + { + "a": "0x286bc4ddc91164000000000000000000", + "b": "0x24408d6f25bf8a000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14161e68b1a456", + "b": "0x508dd23afc5cd0000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb", + "b": "0x103ec47", + "cmp_a_b": -1 + }, + { + "a": "0x152d1c94084e9300000000000000", + "b": "0x449c5641bfec88000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x24219ad674190e00000", + "cmp_a_b": -1 + }, + { + "a": "0xb54364a65", + "b": "0x108f1acc10ac1000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6a2928f2fcd94400000", + "b": "0x6a2928f2fcd94400000", + "cmp_a_b": 0 + }, + { + "a": "0xed8ddd1fe1646000", + "b": "0x93be875e42a9f00000", + "cmp_a_b": -1 + }, + { + "a": "0x1ee979", + "b": "0x2676eeac34c1c00000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xb3655f29f45e5800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x519490ee231d1400000000000000000", + "b": "0x4692b50b5a90a800000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a014fc5fc55110", + "b": "0x10b41f2837d9fe0000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x76459b9887", + "b": "0x389c226a1b6892000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb6b6ad50ff184", + "b": "0x48002636877810000", + "cmp_a_b": -1 + }, + { + "a": "0x67ae777170bb6800000000", + "b": "0xcc87136621c0a000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1339911147d9e3000000000000000000", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0xcb22f36db738", + "b": "0x83bcd5007ba46000", + "cmp_a_b": -1 + }, + { + "a": "0x5a5ca86f3e0b80000000000", + "b": "0x69b9dd673c13fc000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7e4e56cbe32c9", + "b": "0x3d427ee2fe6eae000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x580e07eed8cd4000000000000", + "b": "0xf2c32d11b042800000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2e3795ff839ca60000000000000", + "b": "0x3c3c280e9846580000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x25964a4a189f4e00000", + "b": "0x8cfed885497b4800000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x223b38", + "b": "0xc263e911f8939800000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xa9e44ae6d79d8000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa56aa555cc8d98000000000000000000", + "b": "0x4268bafda71dac00000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3230d53e01720c000000000000", + "b": "0x833ffc99ad25b000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x3c70b4f199bb840000000000", + "b": "0x1994e9618066450000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa", + "b": "0x115b17c37e45e80000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xe15774a0a5c430000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x26c85145bf", + "b": "0x3c7604ee9c9aa80000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x179f87ca265b63", + "b": "0x117f3761684e030000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xbf255e4fecbe80000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4613865e8041e00000000", + "b": "0x4613865e8041e00000000", + "cmp_a_b": 0 + }, + { + "a": "0xc21835d085e658000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x3e606c80", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xf3d1d84e658ac8000", + "b": "0x3f5f1bbabdb17000", + "cmp_a_b": 1 + }, + { + "a": "0x2fd6b9288b", + "b": "0x23da276a6021e60000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1b48754aa3d81e000", + "b": "0xb87099c8bb28d000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x612733c547f0180", + "b": "0x17150bebda95e7000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6607da7ca8", + "b": "0x558c9f33e4b9cc000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8ef1897aea4c08000000000000", + "b": "0x368694f4000d260000000000", + "cmp_a_b": 1 + }, + { + "a": "0x242", + "b": "0x116c69b22d22c300000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2a82e712d", + "b": "0x945e48a9945820000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1c1976c39839ce000000000000000", + "b": "0x8725321df30ab8000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3bb95e7", + "b": "0xd09c4ce764c528000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8351eafeacfa980000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x842d0439c5bdd0000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x476b02cc1b4ed", + "b": "0x476b02cc1b4ed", + "cmp_a_b": 0 + }, + { + "a": "0x1b20cf842d97", + "b": "0x3ef5a47a078f380000", + "cmp_a_b": -1 + }, + { + "a": "0xbbc844796e5798000000000000000000", + "b": "0xd24767558a497000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x789b713e754ffc000000", + "b": "0x789b713e754ffc000000", + "cmp_a_b": 0 + }, + { + "a": "0x18b534cdd", + "b": "0x3ea671df6384d4000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x65198cd35a034400000000000000000", + "b": "0x76a366c503c", + "cmp_a_b": 1 + }, + { + "a": "0x68b5", + "b": "0x216a1203030ede000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6b435ea", + "b": "0xab2ea5f2d91360000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11b417dc7ff94e00000000000000000", + "b": "0x538f8c001ef514000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x33ba22b7f74bb400000000000000", + "b": "0x1a626a2923570f0000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x86db8f7584edf0000000", + "b": "0x211e2c932cd330000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8df4991cf11a88000000000000000", + "b": "0x1903fb746c01ee0000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb1c7d8cecf7c600", + "b": "0xe8701a24a28ac000000000", + "cmp_a_b": -1 + }, + { + "a": "0x316600480d7b2a00000", + "b": "0x316600480d7b2a00000", + "cmp_a_b": 0 + }, + { + "a": "0x43", + "b": "0xd4439adff0fa9000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7182d9a2aba00800000000000000", + "b": "0xb5bb69ca39b03000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x99e86aad534040000000", + "b": "0x49a6e185d91fd00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x44d64e1d3a4b200000", + "b": "0x42b5810580dfe8000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3b20bb99c0671400000", + "b": "0x4d1dbb40", + "cmp_a_b": 1 + }, + { + "a": "0x73e6a5cadeb3740000000", + "b": "0x17e1cdd325d323000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0x5c5c96dd27214000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11bc46a7babe7600000000000000", + "b": "0x5175297306b350000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x14fbc282c39f7900000000000", + "b": "0x14fbc282c39f7900000000000", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x366cc4f2abf7fc000000000", + "b": "0x366cc4f2abf7fc000000000", + "cmp_a_b": 0 + }, + { + "a": "0x7b593fa2b", + "b": "0x15296d9a7aa22e000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2f4ecc347c491e0000", + "b": "0xc", + "cmp_a_b": 1 + }, + { + "a": "0x26eb64a39c847c", + "b": "0x10e86f2e0c2f7e0000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5c06c940a860940000000000000000", + "b": "0xcc5de3ee4ee6a0000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x377d8436be959a", + "cmp_a_b": -1 + }, + { + "a": "0x13c30ed22d584700000", + "b": "0x3bcb58f6defa5400000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x108019058", + "b": "0x65421a0507673000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x111153c9f8c1c40000", + "b": "0x728ee3fb1", + "cmp_a_b": 1 + }, + { + "a": "0x300c09bafeb3600000000000", + "b": "0x4530330a6e0c", + "cmp_a_b": 1 + }, + { + "a": "0x2a78284236428600000000000000", + "b": "0x28cbddc17b2fb20000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1d58b0645fefa", + "b": "0x46ba1a4ad5cd400000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10449b7e4da7d0000000000000000000", + "b": "0x10449b7e4da7d0000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x2a4d82f926e", + "b": "0x1919df4b4954040000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1adddaf4826e9c000000000", + "b": "0x1adddaf4826e9c000000000", + "cmp_a_b": 0 + }, + { + "a": "0x56721b1dcbed84000000000000000000", + "b": "0x1845eb746b8fb300000000000", + "cmp_a_b": 1 + }, + { + "a": "0x15", + "b": "0x3dc64513c6e814000", + "cmp_a_b": -1 + }, + { + "a": "0x5", + "b": "0xc6a78e9b51521000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10101b", + "b": "0xacf24e4c6b6df0000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2f", + "b": "0x33d6bda9dcb8f8000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x107ea64", + "b": "0xa14f64041c957800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xeb03315e73833000", + "b": "0x67f92558eccde400000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2f9f6e2af7630a", + "b": "0x1e2fc927e0db43000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x355049b38c8c8", + "b": "0x355049b38c8c8", + "cmp_a_b": 0 + }, + { + "a": "0x5c", + "b": "0x5c", + "cmp_a_b": 0 + }, + { + "a": "0x10e6c82cc2f40d0000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x199499650761c80000000000", + "b": "0x70c8", + "cmp_a_b": 1 + }, + { + "a": "0x3086d9f8f754840000000000000", + "b": "0x97212b9991a638000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x53ed0e6b5d941c000000000000000", + "b": "0xf6d9f2a86e3928000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb40c92d0da0eb80000000000000", + "b": "0x5fd4b95617eed8000", + "cmp_a_b": 1 + }, + { + "a": "0x1a64f524cb7fd900000000000000000", + "b": "0x5e86524096650800000", + "cmp_a_b": 1 + }, + { + "a": "0x4a2867ea6d3b68000000", + "b": "0x54f80a64bf9db400000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xabc", + "b": "0xaa75d60ca852b0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5149167", + "b": "0xadd", + "cmp_a_b": 1 + }, + { + "a": "0x3c417ca6dcde", + "b": "0x2f6648f4aeb76e0000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6e12ec89a15148000000000000000000", + "b": "0x6e12ec89a15148000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x8bf28b3b54ed000000000000", + "b": "0x1137b550e08feb00000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xbb4a8bef9668b80", + "b": "0xcd88718358f9d00000000", + "cmp_a_b": -1 + }, + { + "a": "0x13dd31d6c222c6000000", + "b": "0x13dd31d6c222c6000000", + "cmp_a_b": 0 + }, + { + "a": "0x160b24dd8d41e4000000000000", + "b": "0x10dbf8a86e400a000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x699a1d5c", + "b": "0x106f8cf2328c47000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x24d63a5a0a1c2200000000000000", + "b": "0xf6ee7a6681bf380000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x18b", + "b": "0x366d0c8b34b2200000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa8156273c2c10800", + "b": "0x2bc922", + "cmp_a_b": 1 + }, + { + "a": "0xed4", + "b": "0xf", + "cmp_a_b": 1 + }, + { + "a": "0xcd5819b6de9aa8000000000000000000", + "b": "0xcd5819b6de9aa8000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x19", + "b": "0x315d291c842ba40000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x485e0498a", + "b": "0x4d015f42caaed4000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1efa52f949a5ff00000000", + "b": "0x8c3e0f7b17ef900000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5e4e9", + "b": "0x243", + "cmp_a_b": 1 + }, + { + "a": "0x1c220110c7dce000000", + "b": "0x4a2238de097e9800000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11c9aea352", + "b": "0xd7522fe215f630000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2b2fa19e5bbb640000000000000000", + "b": "0x87459633f7f", + "cmp_a_b": 1 + }, + { + "a": "0x6333f3e1183e4800000000000000000", + "b": "0x510d78590ba0300000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1477f18acbb827000000", + "b": "0x1477f18acbb827000000", + "cmp_a_b": 0 + }, + { + "a": "0xef7f9ef295f69800000000000", + "b": "0x2a0df4df4548da00000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17ef134211", + "b": "0x863307506191000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x571d92", + "b": "0x2dae6a84ae7e540000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1fb8e13af40bc80000000", + "b": "0x9d6866422619400000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x50b389d3a806fc0", + "b": "0x6df5ef", + "cmp_a_b": 1 + }, + { + "a": "0x10b2392572d23b000", + "b": "0x1c3a851541f", + "cmp_a_b": 1 + }, + { + "a": "0x8cfbf87317fb4800000000000", + "b": "0x8a81abafd926a000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x681aa9e31d617000000000", + "b": "0x17a4ff70f603040000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x753b5b463ccda40000000", + "b": "0x753b5b463ccda40000000", + "cmp_a_b": 0 + }, + { + "a": "0x3a2067b7dcdea4000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x136346805492c8", + "b": "0x197a08b31946ff0000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf0ab9c1907347000000000000000000", + "b": "0x7a15cdb1cff0c8000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x13a95bef2d98240000000000000000", + "b": "0x123df500768d3c00000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa146afdc12f85800000000000000", + "b": "0xe83b3538a273c", + "cmp_a_b": 1 + }, + { + "a": "0x338ea10c1a0cc8000000000000000", + "b": "0x227cb892a4682e00000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x73b7f82aaa43d", + "b": "0xb791eb8701f7f80000000000", + "cmp_a_b": -1 + }, + { + "a": "0x90def5834d95b000000000000000000", + "b": "0x44b584295b1364000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xe066f4ee9ba2", + "b": "0x14e282987d42f700000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1727", + "b": "0xe6ccf44f3cb740000000", + "cmp_a_b": -1 + }, + { + "a": "0x1f3123bce307e9000", + "b": "0x5ae5a481a8c73c000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf3107cb973c748000000000000", + "b": "0x6620f", + "cmp_a_b": 1 + }, + { + "a": "0x68a6c73469b9d0000000000000000000", + "b": "0x78d89e54d81aac00000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4b9dd8", + "b": "0x4984f17d4f34f800", + "cmp_a_b": -1 + }, + { + "a": "0xe9c887808d683", + "b": "0xb934a75350e430000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2e5ddeb17198300000000000", + "b": "0xaf255d10d0", + "cmp_a_b": 1 + }, + { + "a": "0x25690dfc90a69", + "b": "0x1216660e3c818d0000000", + "cmp_a_b": -1 + }, + { + "a": "0x39e57b74cf43f", + "b": "0x323f9f1e3b76d20000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x105bda142e9023000000", + "b": "0x105bda142e9023000000", + "cmp_a_b": 0 + }, + { + "a": "0x291b80ce4e20080", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x5b105919f214600000000000000000", + "b": "0x2be750456", + "cmp_a_b": 1 + }, + { + "a": "0x1e9c452734290500000000", + "b": "0x7fdd78bdd1cd100000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x289658356989d20000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x209a0ecdec08120000000000000", + "b": "0x51876b3f8eb3900000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa6ec7289176418000000000", + "b": "0x211da92b4b2df600000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17e048f", + "b": "0x7f1985a", + "cmp_a_b": -1 + }, + { + "a": "0x538cc434ab1a600000", + "b": "0x17023e74c53bd500000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x494bb", + "b": "0xa6efbf861f513800000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x140aed4bff37560", + "b": "0x593f61f7670e440000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x438b01c6763d0c00000000", + "b": "0x22efa008f2a0fa0000000", + "cmp_a_b": 1 + }, + { + "a": "0x287217548867de0", + "b": "0x95e79de391cf40000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2258121d9a36540", + "b": "0xd5eb359c79010000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xcd81fba849366800000000000000000", + "b": "0x1634e8cebc3941", + "cmp_a_b": 1 + }, + { + "a": "0x79cee62f79425400000000", + "b": "0x2e88037ce396200000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4ef49997bb1fb800000000000", + "b": "0x52365e1d08bb800000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1130847", + "b": "0x146b50e", + "cmp_a_b": -1 + }, + { + "a": "0x14ad50780", + "b": "0x688fa409c60d5000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1e1d1ccddd71e300", + "b": "0x12c175af157b5f000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x72ec80df2", + "b": "0x6641e09e2aa3ac0000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1e015c48d6e4b7000000000000000000", + "b": "0x1e015c48d6e4b7000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x10fe036610cfb0000000000000000", + "b": "0xa78a3bc1c91e9000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3012d6bcbec3200000000000000", + "b": "0x141f15ccb6a08f0000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xed9694d8e", + "b": "0x92e31cf61d47380000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1dd75ba4f33d0", + "b": "0x5bb163e130924000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x188029", + "b": "0x129174efe88efd0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x2e331544bf05d2000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf1395d130003200000000", + "b": "0x1c173706c244660000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a0c89c09e74", + "b": "0x290f51241773a2000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x36a6abcec76b5e0000000000000", + "b": "0xc210e7415c4ea000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb79fe", + "b": "0x322ca21a93ca2800000000", + "cmp_a_b": -1 + }, + { + "a": "0x85afaaae69df58000000", + "b": "0xf25f462155", + "cmp_a_b": 1 + }, + { + "a": "0xad", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xee", + "b": "0x36de7c0a8f67e80000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3ad5ef4a25", + "b": "0x37e230e41b46100000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x16665bd7725b", + "b": "0x28", + "cmp_a_b": 1 + }, + { + "a": "0x5a48081dab6b6400000000000000", + "b": "0x12e3c52d9db0d50000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x286457bc7f132e0", + "b": "0x4823025a4f8ca400000", + "cmp_a_b": -1 + }, + { + "a": "0xa61508a6352", + "b": "0xa61508a6352", + "cmp_a_b": 0 + }, + { + "a": "0x8a3bdd17d6b", + "b": "0x210d1cafba780800000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x38a4d3eb0d5af8", + "cmp_a_b": -1 + }, + { + "a": "0x2b62d93d3", + "b": "0x4aed8d4d9d9a940000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14be05ae5bb", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x13f6bd970e43dd00", + "b": "0x1161a317f1d69500000000", + "cmp_a_b": -1 + }, + { + "a": "0x1d64dff0894953000000000000000000", + "b": "0x96df0ff86f0cf8000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11ad69271caed", + "b": "0xee58252a79efa0000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd385b12d3eb688000000000000000000", + "b": "0x1f4625aef6d3310000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb82223ed382ac8000000000000000", + "b": "0x1454862a0b794500000000", + "cmp_a_b": 1 + }, + { + "a": "0xa45ff1a8cdfa", + "b": "0xbb5893dd5a84b800000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x31f24cd9825dfe00000000", + "b": "0x2a3d8f0a44913e0000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x226895af57027c000000000000000000", + "b": "0x5de3813f65d7500000000000", + "cmp_a_b": 1 + }, + { + "a": "0xdb9ce6ce4b365800000000000000000", + "b": "0x5fc1f1a533fe", + "cmp_a_b": 1 + }, + { + "a": "0x218ebf44bce3f600000", + "b": "0x1610ff66e9f1f600000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x21ac0094f95af80000", + "b": "0x126d49d1a0", + "cmp_a_b": 1 + }, + { + "a": "0xd0d3281a955378000000000", + "b": "0x1a76b5fd56b9c700000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9e9c", + "b": "0x283abfee4d191200000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xda953c11fa1ee000000000", + "b": "0xda953c11fa1ee000000000", + "cmp_a_b": 0 + }, + { + "a": "0x43302870d11320000000000000000000", + "b": "0x6ea216893668580000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x20e34f", + "b": "0x27103b4cc0", + "cmp_a_b": -1 + }, + { + "a": "0x52bebabb5a4b380", + "b": "0xd1cdbf755f8290000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14", + "b": "0x14", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x5d982c9ce338b00000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4f21656c1939d8000", + "b": "0x13501669512fd100000", + "cmp_a_b": -1 + }, + { + "a": "0x13e9", + "b": "0x19261a24beb68c000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4ace1a734b6b6c0000000000000", + "b": "0x56b2c5c375bd280000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x45631cf9826ffc000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x124", + "b": "0x29809d4edfc11000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3ce4b9", + "b": "0x13b3abe15aab54000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6f7590a7f9e5b40000", + "b": "0x10dbe72ef41292000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10a9567f062dfb0000000000000000", + "b": "0x10a9567f062dfb0000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x34eda6aa7f2f7800000000000", + "b": "0x2e76bce18421c600000000000", + "cmp_a_b": 1 + }, + { + "a": "0x68ed62567", + "b": "0x16e93b4526346b000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1fb743b46651ea00000000", + "b": "0x591212553bc5d00000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0x71b687ab87", + "cmp_a_b": -1 + }, + { + "a": "0x14fb93d2f2dab90000", + "b": "0xa9975f1", + "cmp_a_b": 1 + }, + { + "a": "0x73a97881356604000000000", + "b": "0x3f545c5919b7140000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x102db6295f636f000000", + "b": "0x165fc03b235a550000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10b3c8a6dc653700", + "b": "0xbcfcd40d4f3160000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x165e4f6125", + "b": "0x1017e3e1cb38e70000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x421923", + "b": "0x6ed2c76fa50ac8000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x28cdc2a11043c80000000000000", + "b": "0x48d1bf394635640000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11e1eecff8716d", + "b": "0x6505ffe57aeacc00000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x614ba9e", + "b": "0x85c36ef32fdb300000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17acdb6eb6a4e600000", + "b": "0x17acdb6eb6a4e600000", + "cmp_a_b": 0 + }, + { + "a": "0xa40f102a675318000000000000000000", + "b": "0x15a63060afca530000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x22e20ba09ce0a0000000000000", + "b": "0x8f07f50f3787b000000", + "cmp_a_b": 1 + }, + { + "a": "0x512ada0ed61740000000000", + "b": "0x2bebca6f78f91a000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1aec5e51cb06f000000", + "b": "0x67c72a6ddf69fc00", + "cmp_a_b": 1 + }, + { + "a": "0x307e54a3ffa21200", + "b": "0x142694c039269e00000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2f61f", + "b": "0x67aed986c5bc74000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x35505e0b553b780000000", + "b": "0x2a9d4aec94", + "cmp_a_b": 1 + }, + { + "a": "0x32fdaf19bbf6e80000000000000000", + "b": "0x32fdaf19bbf6e80000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x419a0", + "b": "0xae763990817aa80", + "cmp_a_b": -1 + }, + { + "a": "0x1b996b3ca6deed0", + "b": "0x20ecc5f5d8ccc200", + "cmp_a_b": -1 + }, + { + "a": "0x8830fb63ba", + "b": "0x5c64d890c69ddc000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xdad98b1144a", + "b": "0xf5", + "cmp_a_b": 1 + }, + { + "a": "0x11a145cf68d40e00000000000", + "b": "0x21e35d6c9c133c0000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x35f7", + "b": "0x2df8186c", + "cmp_a_b": -1 + }, + { + "a": "0x140db75abc46d20000000", + "b": "0x2a75ae5f7b34140000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x35b1ab", + "b": "0x76a8b418e5f8bc0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1c324e169b3671000000", + "b": "0xaa9ad2390b1", + "cmp_a_b": 1 + }, + { + "a": "0x3ce55a8acddf7e", + "b": "0x8defe390689110000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x493a5b1d7bef40000000000000", + "b": "0x493a5b1d7bef40000000000000", + "cmp_a_b": 0 + }, + { + "a": "0xb0e8002c05373800000000000", + "b": "0xb0e8002c05373800000000000", + "cmp_a_b": 0 + }, + { + "a": "0x337848ae7ea84c0000000000000000", + "b": "0x31", + "cmp_a_b": 1 + }, + { + "a": "0x27cf5b58ba", + "b": "0xe29527f5a19cd80000", + "cmp_a_b": -1 + }, + { + "a": "0x3da4149e036dc400000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2602991dd2134c00000000000000", + "b": "0xf5b0ac138c213800000000", + "cmp_a_b": 1 + }, + { + "a": "0xe5e84", + "b": "0x1cc8598cf981de000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x33f1a", + "b": "0x33f1a", + "cmp_a_b": 0 + }, + { + "a": "0xce47b5c5", + "b": "0x24859b", + "cmp_a_b": 1 + }, + { + "a": "0x1a07c2c9847cb1000000", + "b": "0x388a8b4ba2d7b6000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9baaa4f8ed40500000000000000000", + "b": "0x9baaa4f8ed40500000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x1c930bf48781bf00000", + "b": "0xa165", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x7270128604460000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3065e34", + "b": "0xd5324f0e8508d000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x968e7d698", + "b": "0x6", + "cmp_a_b": 1 + }, + { + "a": "0x8f779279bdf4", + "b": "0x14a5", + "cmp_a_b": 1 + }, + { + "a": "0x2842e582bf59d00000000000000000", + "b": "0x111ed9232", + "cmp_a_b": 1 + }, + { + "a": "0xb780a1fc597398000000", + "b": "0x85c1de2d8ee248000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4929b0ac", + "b": "0x4929b0ac", + "cmp_a_b": 0 + }, + { + "a": "0x311b4feae35f5e00000000000000000", + "b": "0xdebd374b47d1680000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1990c7253db701000000000000000000", + "b": "0x13c0d35bc73e06000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x3b3e4ee4bf7d", + "b": "0x69be", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x137ca8e457fe23000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x58d58df9a90d500", + "b": "0x1382a1c378f43e", + "cmp_a_b": 1 + }, + { + "a": "0x78c8a6a", + "b": "0x1807840cdeff5f000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x293f12ee65986c0000000000000000", + "b": "0x293f12ee65986c0000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x7876cdb5dc78ac0000000000000000", + "b": "0x76", + "cmp_a_b": 1 + }, + { + "a": "0x5", + "b": "0x2b79f43760532c00000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5c5582352ab5", + "b": "0x4330e4444f26b400000000", + "cmp_a_b": -1 + }, + { + "a": "0x19222ddda496d700000", + "b": "0x32129ba8c20cec000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x69efd5301", + "b": "0x12", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1d3c77f5ca0544", + "cmp_a_b": -1 + }, + { + "a": "0x26019146afc35c000000", + "b": "0x3fbf4635", + "cmp_a_b": 1 + }, + { + "a": "0x30e7def7014c", + "b": "0x1e3f2619710320000", + "cmp_a_b": -1 + }, + { + "a": "0x21720d94db2cf000000000000000", + "b": "0x77f19a9cb2e0a40000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x50f67a", + "b": "0x14a5514746a02c00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa28", + "b": "0x303a0cd814d61c0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xcd0", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x7c482322", + "b": "0x57a2897020b0a0000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x585fab278f812c000000000000000", + "b": "0x104700f14f5edb00", + "cmp_a_b": 1 + }, + { + "a": "0x83a5d187665cf000", + "b": "0x56274e446f613400000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3cce", + "b": "0x3cce", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x3287", + "cmp_a_b": -1 + }, + { + "a": "0x4b", + "b": "0x8afe4cdab0186000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf1c9cf81f1fe100000000000000", + "b": "0x2", + "cmp_a_b": 1 + }, + { + "a": "0x1e217f33f", + "b": "0x44a523d94ccae80000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10", + "b": "0x10", + "cmp_a_b": 0 + }, + { + "a": "0x122b2da8907a940000000", + "b": "0x12e97", + "cmp_a_b": 1 + }, + { + "a": "0x3418217978ebc0000000000", + "b": "0x2640fd4f5932440000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xe6987ce10dd5a00000000", + "b": "0x9155abecb3187000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x262b75625a8ef600000000", + "b": "0x2019fae231e158000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x34771aafbebd58000000", + "b": "0xe31922fd0cd50800000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37f301bebfcddc0000000000000", + "b": "0x1a6725f6b18dbf0000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2c0fc7d9", + "b": "0xb5d00d2bb0f4d000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4076da80599df4000000000000000000", + "b": "0x1089eb041be137000", + "cmp_a_b": 1 + }, + { + "a": "0xa330a8ed87bbb0000", + "b": "0x1b81b9efc54e580000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x97feed3ffd3", + "b": "0x18e0521fda6ec5000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf121ba8c94b0c00000000000000000", + "b": "0x35c4", + "cmp_a_b": 1 + }, + { + "a": "0xf27", + "b": "0x6c76bfdc62a5580000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9d8dc59f51db480000", + "b": "0xf9f780723d30180000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1ed8ca716c9d7400000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x3ed3ea5b902", + "b": "0x1b576b", + "cmp_a_b": 1 + }, + { + "a": "0x1f5c36", + "b": "0x22e", + "cmp_a_b": 1 + }, + { + "a": "0x2dcfb9fba54d8c00000000000000000", + "b": "0xb70eb53876bf00000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1b7e6205d6679f0000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5abdb4d4cca25400", + "b": "0x9d5df7cd7544e00000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a23483d1abf2", + "b": "0x1a23483d1abf2", + "cmp_a_b": 0 + }, + { + "a": "0x4653223f", + "b": "0x235b279cce9306000", + "cmp_a_b": -1 + }, + { + "a": "0x19a2f5b6c9", + "b": "0x7462ae12", + "cmp_a_b": 1 + }, + { + "a": "0x1390319b8a5631000000000", + "b": "0x2006a927c4ab500000000", + "cmp_a_b": 1 + }, + { + "a": "0x13c93354ad765a000000000000000000", + "b": "0x3287e928b926700000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a948fd", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x12f9f3e", + "b": "0x7a239dbe2f43d800000", + "cmp_a_b": -1 + }, + { + "a": "0xc2096cebcca2180000", + "b": "0x136dce1", + "cmp_a_b": 1 + }, + { + "a": "0x3346633764deb4000000", + "b": "0xb781578745d9300000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x49eadd1a", + "b": "0xed95361b48314000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xe422eac34245e800000", + "b": "0x54ac", + "cmp_a_b": 1 + }, + { + "a": "0x7cc36bf28fa", + "b": "0x17c027eb32d5340000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x77", + "b": "0x2235599f91de46000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4", + "b": "0xb27f225413b1a000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x16fce41a655a7f000", + "b": "0x13", + "cmp_a_b": 1 + }, + { + "a": "0x27f5570802f208000000", + "b": "0x3387907a11292e0000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x56e764b65ab6d8000000000000000", + "b": "0x5d8e43ac3c996000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x23f8da4c9", + "b": "0x23f8da4c9", + "cmp_a_b": 0 + }, + { + "a": "0x4121f36ae42fa000", + "b": "0x6c89f71e0021b0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x12ca9668b6d4b0000", + "b": "0x2aa0ed19eddb7e00000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1d93c56b1e028a0000000000000000", + "b": "0x2a7d19ff48ab82000000000", + "cmp_a_b": 1 + }, + { + "a": "0x828f", + "b": "0x828f", + "cmp_a_b": 0 + }, + { + "a": "0x16fe44e5bf09570000", + "b": "0x705d2a73cbb978000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11907cf8b7519a0000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xbc0c", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1185b48eb75abd0000", + "b": "0x18b2", + "cmp_a_b": 1 + }, + { + "a": "0xb8c9812f2501b0000000000000", + "b": "0xa4cd932b9c46180000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1fd10f4d8721c5000000", + "b": "0x40c2da736ead380", + "cmp_a_b": 1 + }, + { + "a": "0x3", + "b": "0x72c53625fc8bd00000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xe261c9341a64e00000000", + "b": "0x1cacef5072306f0000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x86a64cf3efc7b80000", + "b": "0x4baf42a29976f4000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x888d11e28a1a2", + "b": "0x20e49c42feda8400000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x198e9a019117a0000000000000000", + "b": "0x358ee2347e5b1e0", + "cmp_a_b": 1 + }, + { + "a": "0x60e55bccb9a1b40000000000000", + "b": "0x161580ee5cc9510000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3b50d64f2f5434000", + "b": "0x36f424caf12504000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa38b540257ef0800000000", + "b": "0x19edac3d54ea350000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x42f1dbc2751fd400000000000000000", + "b": "0x41266b0d2b43f8000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xac48219db94ed80000000000000000", + "b": "0x3618dbd931f020000000", + "cmp_a_b": 1 + }, + { + "a": "0x5008da1f2aad6c0000000000", + "b": "0x107d3606f12a8500000000", + "cmp_a_b": 1 + }, + { + "a": "0xa8b60", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xc", + "b": "0xc", + "cmp_a_b": 0 + }, + { + "a": "0x59cbac99079c4000000000000", + "b": "0xefa484", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x8dc6b447d40de80000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4a2b22127baa1000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xafc", + "b": "0xb8b37beb3c43a000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x63b66f709251ec000000000000", + "b": "0x97909712c52728000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xaa89", + "b": "0x7cd10fd", + "cmp_a_b": -1 + }, + { + "a": "0x7cba197a", + "b": "0x4be7cd4485be240000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xee6b681c48", + "b": "0x70c2da9f9f1e10000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7e488aa92f4e3c000000", + "b": "0x10", + "cmp_a_b": 1 + }, + { + "a": "0x5c1918767843a00000000000000000", + "b": "0x1c62d", + "cmp_a_b": 1 + }, + { + "a": "0x14", + "b": "0x4023091cd343f800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6533", + "b": "0x997a955dfedf88000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x2acd81dc6dfe42000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x889090ed93dd7000000000", + "b": "0x5f2ba24e", + "cmp_a_b": 1 + }, + { + "a": "0x5853efa", + "b": "0x100714ede8b8c6000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1448e69532d84d000000000000", + "b": "0x273c1f28191cea0", + "cmp_a_b": 1 + }, + { + "a": "0xb186b537e53da800000", + "b": "0xa96ae545cf461800000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3dc406b9d2ff", + "b": "0xb16384106e65f00", + "cmp_a_b": -1 + }, + { + "a": "0x1376bc742f59610000000000000000", + "b": "0x21a30658d498fe000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x391daa9fb4230a0000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x141f718ac9", + "b": "0x3e04fe724d729400000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xaaca69cedea8000000000000", + "b": "0xe850378aeabfd00000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x301656e5af847a", + "b": "0x27", + "cmp_a_b": 1 + }, + { + "a": "0x94c6e03c793e1800000000000", + "b": "0x6da28cbc5d53e000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6c14f04bf", + "b": "0x6c14f04bf", + "cmp_a_b": 0 + }, + { + "a": "0xdef7c753728db800000000000000", + "b": "0x19a45751b8486300000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1998c2747bed530000", + "b": "0x59ca3ecc959ad4000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3820b18", + "b": "0x20bf94527c115c0000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3bd5f8b17c0d520", + "b": "0x1e0ab41b0fef64000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x326fef3fca4ac20000000000000000", + "b": "0x4006a5cb24d33c0000", + "cmp_a_b": 1 + }, + { + "a": "0xcf1", + "b": "0x37aaf67fefc76800000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x52524188b0ef380000000000000000", + "b": "0x52524188b0ef380000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x2d54129e0", + "b": "0x1388ea557b7a120000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x84a95023b15f400000", + "b": "0x204a148ef46d3c0000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1c22cfa69a9d", + "cmp_a_b": -1 + }, + { + "a": "0x37e53ca438f292000000000000000000", + "b": "0xc147af535fbb00000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7359d4817eef60000000000000000000", + "b": "0x26427f9", + "cmp_a_b": 1 + }, + { + "a": "0xb66", + "b": "0x90ec01b9f4b1c00000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x12ed80fb1c1e0600", + "b": "0x3dffbb381", + "cmp_a_b": 1 + }, + { + "a": "0x280c09df3", + "b": "0x1874f25c01922", + "cmp_a_b": -1 + }, + { + "a": "0x28", + "b": "0x28", + "cmp_a_b": 0 + }, + { + "a": "0x22732949e874660000000000", + "b": "0xb12145f6da86d800000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4584a753ca2b700000000000", + "b": "0x39bef8808e5e660000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x77d5b6689a980800000", + "b": "0x1ee03776f48df3", + "cmp_a_b": 1 + }, + { + "a": "0x8daba2b0c", + "b": "0x1a569dafbd674c0000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf1a3acb14a9100000000000000000000", + "b": "0x1ad3a060", + "cmp_a_b": 1 + }, + { + "a": "0x54c6286", + "b": "0x412a3de81536f0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9d8a5a5c445a50000000", + "b": "0x269c033ea8c2fa00000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2768dc347", + "b": "0x3bae8c558a54a40000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5cac105abbaf10000000", + "b": "0xab824bfbecea380000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xe1a279ce60ab8000", + "b": "0x1a9aa", + "cmp_a_b": 1 + }, + { + "a": "0x3829bf19661bde000000000", + "b": "0x1f0a76eecb71f300", + "cmp_a_b": 1 + }, + { + "a": "0x365b2d8fbd834a000000000000", + "b": "0x181303903c34f", + "cmp_a_b": 1 + }, + { + "a": "0x1c4d30393a236a00000000000000", + "b": "0x1c4d30393a236a00000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x1f23aa", + "b": "0x17783a416f31f50000000000", + "cmp_a_b": -1 + }, + { + "a": "0x29d05c4fdb20da00000000", + "b": "0x7408138e3fcb940000000", + "cmp_a_b": 1 + }, + { + "a": "0x2f3b7fc78dd6f600000000000000", + "b": "0x56f21930decf7c00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4d1231e99c536800000000000000", + "b": "0x33ee6c27db933e00000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3a30112782db74", + "b": "0x3a30112782db74", + "cmp_a_b": 0 + }, + { + "a": "0x36e", + "b": "0x8b277cde2", + "cmp_a_b": -1 + }, + { + "a": "0x1db0bcd03debf600000", + "b": "0x13399456b8acc90000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10e3", + "b": "0x280cd4dfe7e5e", + "cmp_a_b": -1 + }, + { + "a": "0x2991b6ca893", + "b": "0x509f495703e1040000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a8de11084bd0a00000", + "b": "0x18dfd345af45270000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x12ee970a591c6600", + "b": "0xd8987bb", + "cmp_a_b": 1 + }, + { + "a": "0x263d", + "b": "0x8c61007f6eddd80000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a5be8a918", + "b": "0xeee4212a940dd800000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x880386e9", + "b": "0x44381764bb36000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xf2ff5e0560cb6000000000000000000", + "b": "0x55", + "cmp_a_b": 1 + }, + { + "a": "0x31a95", + "b": "0x53120aa7ea652400000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb38a2dd65ec4900000000000000", + "b": "0xe58d46c75b7958000", + "cmp_a_b": 1 + }, + { + "a": "0xe73112aff", + "b": "0x205e2769040b", + "cmp_a_b": -1 + }, + { + "a": "0x26fbc0", + "b": "0x93d93e5a4c99f00000000", + "cmp_a_b": -1 + }, + { + "a": "0x94be47ba93", + "b": "0x321d50e97", + "cmp_a_b": 1 + }, + { + "a": "0x135e47cc86d3880000", + "b": "0x1f344", + "cmp_a_b": 1 + }, + { + "a": "0x41c32f3ca035ac000000000000000", + "b": "0xd6a103027531b8000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1176d23e1bc0d000000000000000000", + "b": "0x24f815ae5e25be000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x10de6ecb7702", + "b": "0x7546f59f2273b4000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xbfe68", + "b": "0x4", + "cmp_a_b": 1 + }, + { + "a": "0x30407945f35f1e0", + "b": "0x11433477892561000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x36e7241c02f35c0000000000000000", + "b": "0x95817fd3f38910000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x1748c6a7af6df70000000000000000", + "b": "0x960bbaadc331e00000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6f2ce42244b9a40", + "b": "0x21bfab85673eaa0000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x102", + "b": "0x374df306050d0c", + "cmp_a_b": -1 + }, + { + "a": "0xdd230b3917a3400000000000", + "b": "0xdd230b3917a3400000000000", + "cmp_a_b": 0 + }, + { + "a": "0x255", + "b": "0x5204d6f104856c00000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x498a79", + "b": "0x637bf5332565e40000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xfb81f5108b7", + "b": "0x408fc78d06bb7c0000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd1bb5293b722700000000000", + "b": "0x19b739446a7", + "cmp_a_b": 1 + }, + { + "a": "0x13f85f29815a7c0", + "b": "0x13f85f29815a7c0", + "cmp_a_b": 0 + }, + { + "a": "0x14dee747dcf6df", + "b": "0x69a68209edc1dc0000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x238f812e6e6a9a0000000000", + "b": "0x4e8c0", + "cmp_a_b": 1 + }, + { + "a": "0x353c16244c1", + "b": "0x5114b3808", + "cmp_a_b": 1 + }, + { + "a": "0x795ad272381", + "b": "0x10c210", + "cmp_a_b": 1 + }, + { + "a": "0xb84b461903", + "b": "0x1880bae434cbc4000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4d6fdef3f7801000000", + "b": "0x49fbbacc467ff8000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5aa44fd877b2e800000000000000000", + "b": "0x372dd298aaa46000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x30d86dcbf3", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x58b2821d4e09", + "b": "0xc00f911f80daf000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1f0c9ba2", + "b": "0x393227aab9f9180000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xcad5d80a0094380000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x13b413a35873b20000000", + "b": "0x13b413a35873b20000000", + "cmp_a_b": 0 + }, + { + "a": "0x263673da", + "b": "0x4134d2dbb39ff4000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3f48ed98db177800000", + "b": "0x26bd185c9915fa0000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6bd755e9a93f88000000000", + "b": "0x148caffee6f7280000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x13c0020e25e9b8000000000000000000", + "b": "0x7d5", + "cmp_a_b": 1 + }, + { + "a": "0x47d29c2f19a494000000000000", + "b": "0x1c9574d157d35d0000", + "cmp_a_b": 1 + }, + { + "a": "0x1418dffdd7f8b30000", + "b": "0x1418dffdd7f8b30000", + "cmp_a_b": 0 + }, + { + "a": "0xa50b64e57", + "b": "0x488ab72806e31800000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x24b7c2", + "cmp_a_b": -1 + }, + { + "a": "0x9d8d676b0a7ef000000", + "b": "0x52e2474a1547a00000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1702296df2f2ab0000000000", + "b": "0xf456f2c383f2e000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x93a8afbd565f180", + "b": "0x52f8c8f3792cc0000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x36bad4557f484600000000", + "b": "0x1858d3916abbca00000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x20bc51314aa2c20", + "b": "0x9f85e7699980f0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x38ba3", + "b": "0xc43b8eac6aedf800000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1352c2bf2955d5", + "cmp_a_b": -1 + }, + { + "a": "0x67c99acb64", + "b": "0x1794bf036315c70000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x70afb", + "b": "0xf254c16ab903880000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xc8eb71", + "b": "0x233", + "cmp_a_b": 1 + }, + { + "a": "0x2", + "b": "0x2", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0x1c5c7d2531450d000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3336c4d353835c0000000000000", + "b": "0x6aa402736da5240000000", + "cmp_a_b": 1 + }, + { + "a": "0x141281991a27ce0", + "b": "0x901bca8c2742c000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7ef9ee9572", + "b": "0x20b18c86ef6f7a0000", + "cmp_a_b": -1 + }, + { + "a": "0x31de9a8d60eed60000000000", + "b": "0x9464cd", + "cmp_a_b": 1 + }, + { + "a": "0x7f2d943ff034a80000", + "b": "0xbfb28d8f750eb00000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x38", + "b": "0x139", + "cmp_a_b": -1 + }, + { + "a": "0x1e054fcc338719000000000000000", + "b": "0x152186bcc", + "cmp_a_b": 1 + }, + { + "a": "0xd1", + "b": "0x31abf3e2ac2bcc000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9e8b9cd71920080", + "b": "0x5d11a1a2fd70fc00000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x13e64beb5ebe370000000", + "b": "0x2e9dd248abfc6a000000", + "cmp_a_b": 1 + }, + { + "a": "0x7b", + "b": "0x2ae08da5fb12d80000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2540f8b1", + "b": "0xba6e446ac78cb80000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x22", + "b": "0x366bf27dbfaeb0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1ddea1", + "b": "0x34cf47bd081568000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x21e427b8260a22000000000000000000", + "b": "0x10dd1a8ed751e", + "cmp_a_b": 1 + }, + { + "a": "0x109a6eac6860b500000000000000", + "b": "0x109a6eac6860b500000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x3ba5180d9af2300000000000000", + "b": "0x27cc4f157", + "cmp_a_b": 1 + }, + { + "a": "0x1423de8b08251c000000000000", + "b": "0x77d7cbb3030fc0000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd7", + "b": "0x5b67fa0bea471c000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa5ee9075ad8d10000000000000000000", + "b": "0xd4a4e505a1e0a80000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xfa9a7d70", + "b": "0x10677720b77d94000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x69e5bb631bb8bc000000", + "cmp_a_b": -1 + }, + { + "a": "0x1114", + "b": "0x1114", + "cmp_a_b": 0 + }, + { + "a": "0x821621cde6a3f00000000000000", + "b": "0x3269f963a3fe4400000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x131489cd6", + "b": "0x131489cd6", + "cmp_a_b": 0 + }, + { + "a": "0x3aea38f4f", + "b": "0x635d84e83ad6ac00000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x97a6b318598880000", + "b": "0x15b0b04cf18cdc00000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x565cd5f6f227bc0000000", + "b": "0x22f6cb86ad84a8000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1acec50404ea", + "b": "0xd1e83", + "cmp_a_b": 1 + }, + { + "a": "0x225055361", + "b": "0x7c90c5193889940000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x58205c0f1fe3", + "b": "0x28deb8aea5270400000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x257c5bc1b5893000000000", + "b": "0x186176e41f06300000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x206df57d32bec0000000000000", + "b": "0xe523755c252b2800000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x36a562aae97da4000000", + "b": "0x36a562aae97da4000000", + "cmp_a_b": 0 + }, + { + "a": "0x44c45", + "b": "0x1607b9f369a84a0000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa41afbd2815d5000000", + "b": "0x35dc1b6196703800000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4486c10fa2", + "b": "0x1307b0a113e66e00000", + "cmp_a_b": -1 + }, + { + "a": "0x1dd9", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x6fe9a796afa0340000000000", + "b": "0xac", + "cmp_a_b": 1 + }, + { + "a": "0x3651d82f7cfcbe000000000000000000", + "b": "0x3651d82f7cfcbe000000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x1620185c847f100", + "b": "0x1620185c847f100", + "cmp_a_b": 0 + }, + { + "a": "0x4834728a9", + "b": "0x488c472580e6e40000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa14570da0", + "b": "0xd8215ff95b9d1000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5f4360d14c9e74000000000000", + "b": "0x12edcad222cc28000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6e36", + "b": "0x4a4c302dd63c2400000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xc2636a09168c90000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x55c60aa32981a8000", + "b": "0x55c60aa32981a8000", + "cmp_a_b": 0 + }, + { + "a": "0x6b9df52b818ad0000000000000", + "b": "0x33959694f4823e00000", + "cmp_a_b": 1 + }, + { + "a": "0x11183a08b1cbbb00000000000", + "b": "0x540b816659c3f800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7", + "b": "0x439f9fb6fb30c0000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x14654a131e4", + "cmp_a_b": -1 + }, + { + "a": "0x57d0c8b2613e64000000000000000", + "b": "0x57d0c8b2613e64000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x3a621268", + "b": "0x9b8a37abc3c0680000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x13e78eaf2beb36000", + "b": "0x13e78eaf2beb36000", + "cmp_a_b": 0 + }, + { + "a": "0x1eb09214bcbeae00000000000000", + "b": "0x22130f1b579c500000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xfd85cfebc09ab000", + "b": "0x1915a", + "cmp_a_b": 1 + }, + { + "a": "0x32dbf0b89", + "b": "0x1cfa1b6614fc4900", + "cmp_a_b": -1 + }, + { + "a": "0xb23c1ae959b900000000000000000000", + "b": "0xbb157242a7fc880000000000", + "cmp_a_b": 1 + }, + { + "a": "0x4a4d07", + "b": "0xb370e52736e7080000000000", + "cmp_a_b": -1 + }, + { + "a": "0x12c7e61dae3291000000000000000000", + "b": "0x7463c04b58d6ec00000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1741929dfa896d0000000000000", + "b": "0x8b578a0c364a900000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x1e0cc5", + "cmp_a_b": -1 + }, + { + "a": "0x54cc08eb5659e800000000000000000", + "b": "0x8209261f0954280000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6b4f2be85163a4", + "b": "0x3a91f1f059585", + "cmp_a_b": 1 + }, + { + "a": "0x722bb21bcbdc000000", + "b": "0x11d743ee665f1b0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2beadd87e33f", + "b": "0x41a3d061c02a6800000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4c5ccea46d3d40000000000000000000", + "b": "0x3186161", + "cmp_a_b": 1 + }, + { + "a": "0x954b737b1826200000000000000", + "b": "0x2ccd10e13d42d40000000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x86b97fab9b8a080000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6b71ef", + "b": "0x22528130df329a0000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5518c177383da0000000", + "b": "0x51", + "cmp_a_b": 1 + }, + { + "a": "0xb9d748144f822000000000000", + "b": "0x543d70b22", + "cmp_a_b": 1 + }, + { + "a": "0xc0c08ab78fc070000000000000", + "b": "0x409ff", + "cmp_a_b": 1 + }, + { + "a": "0x8", + "b": "0x435df5bcfa9b44000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1cf", + "b": "0x4b47d2703d09f000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x27a20345", + "b": "0x7544cd34f09a7400000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xc708e142b", + "b": "0x1ddb64d480d4850000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x5887fbc274dd2000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xfbec51ad8d2f280000000000000000", + "b": "0x3316a88573510a000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1dcb524014d4ff0000000000000000", + "b": "0x2699324f729408000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x960f3a7c10c280000", + "b": "0x13959271c4fa23000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6603405670d2ac0", + "b": "0x5d15e90908175400000", + "cmp_a_b": -1 + }, + { + "a": "0x9103b3cdec8a980000000", + "b": "0x91684a746b71600000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37ebc17631936e000000000000", + "b": "0x2cc69e642730ca0", + "cmp_a_b": 1 + }, + { + "a": "0x33ba3903612094", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x8a0fc990f73e30000", + "b": "0x6802f45c3b4b5", + "cmp_a_b": 1 + }, + { + "a": "0x682dff8c5786d800000", + "b": "0x8f63c1f347a2e800000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11b23a81957db900000000000000", + "b": "0xcf77daa358bc9000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x37933c3fc9039e00000000000", + "b": "0x2d032ea69f090e0000000", + "cmp_a_b": 1 + }, + { + "a": "0x2759c9970b94240000000000000", + "b": "0x195ce20b310d3300000", + "cmp_a_b": 1 + }, + { + "a": "0x1a67ae99d9a95a00000000", + "b": "0x16121ee6f57", + "cmp_a_b": 1 + }, + { + "a": "0x4b920248d051c4000000", + "b": "0x77569da6c36044000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1f10d0bd62577a0000", + "b": "0x2d99434f3b3b440000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0xbb105832a844780000000", + "b": "0x3b86309d7e6eca000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x29208061b842b60000000000000000", + "b": "0xebad18aa29e44800000", + "cmp_a_b": 1 + }, + { + "a": "0xd0d1cd9cde1688", + "b": "0x24f448aae044c40000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x19", + "b": "0x1a60caa82f0d180000000000", + "cmp_a_b": -1 + }, + { + "a": "0x25bbe7cc3e41be0000000", + "b": "0x887d7d0e38", + "cmp_a_b": 1 + }, + { + "a": "0x303c5ad", + "b": "0x17290a92d7292f0000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1c265477fc08650000", + "b": "0x1f00a24974fa190000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x880185fd537", + "b": "0xcbab7632e1e7a000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x273fb67fac78b400000000000", + "b": "0x1d6f0535d968f60000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2fb5768c489b", + "b": "0xbab6f93ffdf270000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4ee52e22123b40000000000000000", + "b": "0x111ef71a48769c000000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x194f7e4", + "b": "0x130d59aac2b3ba0000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7b2a1e0", + "b": "0x189379608f87c9000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x25d1f156932e5000000000000", + "b": "0x3480eff649a95c0000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6f5fdc8c074df8000000", + "b": "0xb372cefd4ce740000", + "cmp_a_b": 1 + }, + { + "a": "0x13089b55eea7a400000000", + "b": "0x348d1b3bf079a80000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x30ca904d6f4df80000000000000", + "b": "0x428474b839b9fc0000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x98c11e2d0f049", + "b": "0x3037a0a9e56f4400000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x277283fc1c00000000000000", + "b": "0x1aa71", + "cmp_a_b": 1 + }, + { + "a": "0x108bdacfca27850000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x1613571ada1cfc00000000000000000", + "b": "0x4b8235c47941140000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa338616201b0", + "b": "0x7b2", + "cmp_a_b": 1 + }, + { + "a": "0xdc19de", + "b": "0x21a7e3a44ce7340000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x1", + "b": "0x6297a8c73c6bf", + "cmp_a_b": -1 + }, + { + "a": "0x275fcf67fc5ed400000000000000000", + "b": "0xa716c16f23ecc800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17d760f521", + "b": "0x29e9370ee6033a0000000", + "cmp_a_b": -1 + }, + { + "a": "0xa1d7d7b7d32bf0000000000", + "b": "0x354ee39b36559c00000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xfd9c68beb3b610000000000", + "b": "0xfd9c68beb3b610000000000", + "cmp_a_b": 0 + }, + { + "a": "0x279c0addd67fca0000000", + "b": "0xa0e81d40", + "cmp_a_b": 1 + }, + { + "a": "0x890ae04d1b5700000", + "b": "0x39ad9f999101f80000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x5030bed9", + "b": "0x672af34f4aec0400000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x170f83735e40", + "b": "0xdc65480c50cfa00000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2c466f028b03b6000000000000000", + "b": "0x4712e6c4908120", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0xb153ea5921b0b800000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb345f4d4", + "b": "0x1d6e8721b6c", + "cmp_a_b": -1 + }, + { + "a": "0x129a82672d1ada000000000000000", + "b": "0x3ed81d51b353ec0000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3b", + "b": "0x7b174791f2e26000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2c807993e2cf6c000", + "b": "0xbc0043faeabae", + "cmp_a_b": 1 + }, + { + "a": "0x4a1fa5dde5ce30000000", + "b": "0x142bb895a9e3fe0000000", + "cmp_a_b": -1 + }, + { + "a": "0xa087654779be1800000", + "b": "0x26ebebc09eab120000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1748792b2c6", + "b": "0x182f9aa375d9", + "cmp_a_b": -1 + }, + { + "a": "0xc60b4cf5c2e50000000000000000000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x160c20696583fc0000000000", + "b": "0x7c507", + "cmp_a_b": 1 + }, + { + "a": "0x968cbdc348", + "b": "0x9952a0df0cf4580000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2eb5ae9926fc", + "b": "0x5c70ff1b84850800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x20de53c8a60a140", + "b": "0x20de53c8a60a140", + "cmp_a_b": 0 + }, + { + "a": "0x0", + "b": "0xc1fa9526d4d5800000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x4355a6082", + "b": "0x37bffef0441a9a000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1a518bb52e88f00", + "b": "0x5ab02dd521626c000000000", + "cmp_a_b": -1 + }, + { + "a": "0x356", + "b": "0x2c8925432d9fba000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x50ff6061fa0c780000000", + "b": "0x8ba31e2774bb18000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11a003cc0ae93a000000000000000", + "b": "0xc4b312fbe7abe0000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x387", + "b": "0x235470f26a25c200000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0xb6d6", + "cmp_a_b": -1 + }, + { + "a": "0xfdc", + "b": "0x87c", + "cmp_a_b": 1 + }, + { + "a": "0x2ce4c04465186400000000000000", + "b": "0x2dcaa8a00104a6000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x83eed85d2049100000000000000000", + "b": "0x27aa9bed5526ae00000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x7b4076e86176d40000000", + "b": "0x1c485cc578a96000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x31381c", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xa97b361a41287", + "b": "0x27e694c", + "cmp_a_b": 1 + }, + { + "a": "0x4603f65fb5390000000", + "b": "0x8144ac8f577ea800000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x13f1f20cd31ea5000000000", + "b": "0x13f1f20cd31ea5000000000", + "cmp_a_b": 0 + }, + { + "a": "0x43fb72190fe54c0000000000", + "b": "0xe1b", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x6e4e3690d5bff4000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11820d5c3d3a100000000", + "b": "0x3a813ee73873ee000000", + "cmp_a_b": 1 + }, + { + "a": "0x4", + "b": "0x199e65acf1324c00000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x35ff", + "b": "0x34", + "cmp_a_b": 1 + }, + { + "a": "0xca760d929e5a0000000", + "b": "0x42f8ff40cbee4000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x9c5b3", + "b": "0xcb60fbc77ab6a00000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x85819b948e60f00000000000", + "b": "0x1db47f11f8f119000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xb1a54c3b6dad", + "b": "0x510b2e085c31e00000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x32b175", + "b": "0x590782231e8ae8000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xcd8f7d7578", + "b": "0x6791cd5a373f1000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3", + "b": "0x6322c904531d1c000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2", + "b": "0x59dcf99628f6a8000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x675e2aebd1f98400000000000000000", + "b": "0x3cf516501594660000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6c35c7155b1", + "b": "0x6c35c7155b1", + "cmp_a_b": 0 + }, + { + "a": "0x3e70dc1886c3a6000", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x47a6199", + "b": "0x3158280", + "cmp_a_b": 1 + }, + { + "a": "0x3b95", + "b": "0x44f0c90715876000000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x48a7921739", + "b": "0xb7b55251", + "cmp_a_b": 1 + }, + { + "a": "0x363dcc9f729912000000000", + "b": "0x279f1", + "cmp_a_b": 1 + }, + { + "a": "0x13b912a9a1eada000000000", + "b": "0x12f5bd2ecf41440000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8fa7d", + "b": "0x3d7984d43d812a000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2f8275cd91751a0000000000", + "b": "0x34c56cb5eeccd000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3dd962ba2b", + "b": "0x27a3a4", + "cmp_a_b": 1 + }, + { + "a": "0x1207f739d045c60000000000000", + "b": "0x3949054ce72b4a0000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2e1395cb09e2b6", + "b": "0xfa92d32fc89d080000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x8951a2a439e7e8000000000000000000", + "b": "0xc4eb18ca825f3000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3f90cd58f70fb00", + "b": "0x7296b804ce9f7800000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x16", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x2b423a79aab804000", + "b": "0x81d2ce1211edc8000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3a774eceeb", + "b": "0x49f441122273bc000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd4e694a6", + "b": "0x209d93c3d7a83e0000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x108437222ad2be000000000", + "b": "0x822bec09f7", + "cmp_a_b": 1 + }, + { + "a": "0xb59c5089e", + "b": "0xa95deef2d42680000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2698", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0xa61b4be834343800000000000000000", + "b": "0x5d517c8982fec8000000000000", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x18c4ae349a", + "b": "0x18c4ae349a", + "cmp_a_b": 0 + }, + { + "a": "0x30c9e4f89e3e2e00000000000000", + "b": "0x83a8484b2922f000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x3851c72933511", + "b": "0x22ab062cbe41ee0000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xca37077035d7c800000000000", + "b": "0x1b263b6410711f0000", + "cmp_a_b": 1 + }, + { + "a": "0x27b04c3a5097", + "b": "0x1e6bbc97e04b430000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x50baa4c327d7700000000000", + "b": "0x51dd3e8951ac28000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x12329f1494eea400000000000000", + "b": "0x8fa1c4010d47300000000000", + "cmp_a_b": 1 + }, + { + "a": "0x13004772ecfd34000000", + "b": "0xe188358696efb800000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa5f1c9179aae1", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x65fa459784759c00000000000000000", + "b": "0xb345d8f73e82580000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x11d8347", + "b": "0x5362bcebf7e608000000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x381472e460c16c000000000", + "b": "0x2647d15be268a2", + "cmp_a_b": 1 + }, + { + "a": "0x0", + "b": "0x1ccd2e68f", + "cmp_a_b": -1 + }, + { + "a": "0xc97f78e893c1f0000", + "b": "0xb2a3d5f4395e58", + "cmp_a_b": 1 + }, + { + "a": "0x8", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x427c0709", + "b": "0x27e", + "cmp_a_b": 1 + }, + { + "a": "0x26f730a22cb9ae0000000000000000", + "b": "0x1448657a4dce5b0000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xba00a", + "b": "0x13c", + "cmp_a_b": 1 + }, + { + "a": "0x148c0598972e5c000000000000000", + "b": "0xff0fe65522ce18", + "cmp_a_b": 1 + }, + { + "a": "0x8ab45", + "b": "0x2b20170b8e1d48000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x26e0d0165dbe80000000", + "cmp_a_b": -1 + }, + { + "a": "0x98dd774e", + "b": "0xfd81324718cd70000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xba697d4cd5", + "b": "0xc2cce886ef0248", + "cmp_a_b": -1 + }, + { + "a": "0xca3fc518ae70300000", + "b": "0xca3fc518ae70300000", + "cmp_a_b": 0 + }, + { + "a": "0x6454a9ee4655180000000000", + "b": "0x6c5a49218671880000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x6b892283e031a400000000000000", + "b": "0x6222df3e8b4870000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x2dc9385b8b", + "b": "0x14b14f87fde584000", + "cmp_a_b": -1 + }, + { + "a": "0x3fd784f", + "b": "0xcab3af75b88bc80000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x16cbb66b2d5a00000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x14e7417", + "b": "0xa805e3ba9913e000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xba12962ecae05", + "b": "0x1a06", + "cmp_a_b": 1 + }, + { + "a": "0x2e0a6feee1d834000000000000000000", + "b": "0x255c39911caa22000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xd2e721a8e0f820000000000", + "b": "0x1f4e96d3cc9769000000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0xa9903f89af", + "b": "0x45404db6a8ae8c000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x36", + "b": "0xc46a6ab37306980000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x32cb93ccd", + "cmp_a_b": -1 + }, + { + "a": "0x2cb2aa1bee5aa6000000000000", + "b": "0x25edee1770eec2000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x281dbc436a35bc0000000000", + "b": "0xafc30", + "cmp_a_b": 1 + }, + { + "a": "0xae6fb762f367580000000", + "b": "0xa9104bfe8531f000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x0", + "cmp_a_b": 0 + }, + { + "a": "0x84b", + "b": "0x1ce2519129b67e0000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x17a67e0257ee7500000000000000", + "b": "0x1c3a474041e2900000000000000000000000000000000000000000000", + "cmp_a_b": -1 + }, + { + "a": "0x0", + "b": "0x7c83eb3c974c8400000000", + "cmp_a_b": -1 + }, + { + "a": "0x1", + "b": "0x248ba10091f8200000000000", + "cmp_a_b": -1 + }, + { + "a": "0x25d862a3a", + "b": "0x0", + "cmp_a_b": 1 + }, + { + "a": "0x3e35a3185c784400000000000", + "b": "0x1fdaaf427b2a3a00000", + "cmp_a_b": 1 + }, + { + "a": "0x192a4706ea54a90000000000000000", + "b": "0x192a4706ea54a90000000000000000", + "cmp_a_b": 0 + }, + { + "a": "0x14eedfb2aa3b6b00000000000000", + "b": "0x2002420c3fb7ce00000000", + "cmp_a_b": 1 + } + ] +} \ No newline at end of file diff --git a/crypto3/libs/multiprecision/test/data/generate_test_data.py b/crypto3/libs/multiprecision/test/data/generate_test_data.py new file mode 100644 index 0000000000..3dcc3c431f --- /dev/null +++ b/crypto3/libs/multiprecision/test/data/generate_test_data.py @@ -0,0 +1,97 @@ +import random +import math +import json +from pathlib import Path + +SOURCE_DIR = Path(__file__).resolve().parent + + +def generate_comparison_test_data(): + ZERO_PROB = 0.05 + EQ_PROB = 0.1 + TEST_CASES = 1000 + + def gen_arg(bits, rnd): + if rnd.random() < ZERO_PROB: + return 0 + log2 = rnd.random() * bits + result = math.floor(2**log2) + assert result < 2**bits + return result + + rnd = random.Random(0) + + bits = [[12, 17], [260, 130], [128, 256]] + + with open(SOURCE_DIR / "comparison.json", "w") as f: + tests = {} + for a_bits, b_bits in bits: + cases = [] + for i in range(TEST_CASES): + a = gen_arg(a_bits, rnd) + if a < 2 ** b_bits and rnd.random() < EQ_PROB: + b = a + else: + b = gen_arg(b_bits, rnd) + cmp_a_b = -1 if a < b else (0 if a == b else 1) + cases.append({"a": hex(a), "b": hex(b), "cmp_a_b": cmp_a_b}) + tests[f"test_comparison_{a_bits}_{b_bits}"] = cases + f.write(json.dumps(tests, indent=4)) + + +def generate_modular_comprehensive_test_data(): + ZERO_PROB = 0.05 + MAX_BITS_PROB = 0.1 + EQ_PROB = 0.1 + TEST_CASES = 200 + + def gen_arg(bits, m, rnd): + if rnd.random() < ZERO_PROB: + return 0 + if rnd.random() < MAX_BITS_PROB: + return rnd.randint(2 ** (bits - 1), m - 1) + log2 = rnd.random() * bits + result = math.floor(2**log2) + assert result < 2**bits + return result + + rnd = random.Random(0) + + params = [ + ["prime_mod_montgomery_130", 0x314107B9EF725F87FA08F9FDADD4F48BB, 130], + ["even_mod_130", 0x314107B9EF725F87FA08F9FDADD4F48BA, 130], + ["goldilock", 0xFFFFFFFF00000001, 64], + ["even_mod_17", 0x1E240, 17], + ["montgomery_17", 0x1E241, 17], + ] + + with open(SOURCE_DIR / "modular_comprehensive.json", "w") as f: + tests = {} + for test_name, m, bits in params: + assert math.ceil(math.log2(m)) == bits + cases = [] + for i in range(TEST_CASES): + a = gen_arg(bits, m, rnd) + if rnd.random() < EQ_PROB: + b = a + else: + b = gen_arg(bits, m, rnd) + cases.append( + { + "a": hex(a), + "b": hex(b), + "m": hex(m), + "a_m_add_b_m": hex((a + b) % m), + "a_m_sub_b_m": hex((a - b + m) % m), + "a_m_mul_b_m": hex((a * b) % m), + "a_eq_b": a == b, + "a_m_pow_b": hex(pow(a, b, m)), + } + ) + tests[test_name] = cases + f.write(json.dumps(tests, indent=4)) + + +if __name__ == "__main__": + generate_comparison_test_data() + generate_modular_comprehensive_test_data() diff --git a/crypto3/libs/multiprecision/test/data/modular_comprehensive.json b/crypto3/libs/multiprecision/test/data/modular_comprehensive.json new file mode 100644 index 0000000000..4f385d33e3 --- /dev/null +++ b/crypto3/libs/multiprecision/test/data/modular_comprehensive.json @@ -0,0 +1,10012 @@ +{ + "prime_mod_montgomery_130": [ + { + "a": "0x66220d5b2e9bc0", + "b": "0x3b756edf80e616000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3b756edf80e67c220d5b2e9bc0", + "a_m_sub_b_m": "0x314107b6381b718febadfc1e8387de47b", + "a_m_mul_b_m": "0x81036b15093a27ef25a78ace142f1cec", + "a_eq_b": false, + "a_m_pow_b": "0x2d1b5ec2675d4678e52a7c194641e47e3" + }, + { + "a": "0xe512bfe70e1e6000000", + "b": "0x4c5977eb01977c00000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x4c5978d01457630e1e6000000", + "a_m_sub_b_m": "0x314107b9a318e8820b31650bcc34f48bb", + "a_m_mul_b_m": "0xd9ab7be35b2dfedf49421b2e4a5df604", + "a_eq_b": false, + "a_m_pow_b": "0x14cf7740bcd0b5b08c0c99195bdc7c60" + }, + { + "a": "0x4d0319238294cc0000000000000000", + "b": "0x13f6454f486", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x4d0319238294cc0000013f6454f486", + "a_m_sub_b_m": "0x4d0319238294cbfffffec09bab0b7a", + "a_m_mul_b_m": "0x687939d2a1317de5608d2c6a3ae385a3", + "a_eq_b": false, + "a_m_pow_b": "0xaa3b3c3896603d4cdb1081f94e3c0282" + }, + { + "a": "0x1e3ae42131ebce000000000", + "b": "0xaab2d0b7dbf018000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1e458f4e3d698d018000000", + "a_m_sub_b_m": "0x1e3038f4266e0efe8000000", + "a_m_mul_b_m": "0xeb7b80f947c9c311e37df0ed7f03c5ef", + "a_eq_b": false, + "a_m_pow_b": "0xa16b054c446db47e74cebc6ae87f69b" + }, + { + "a": "0x408080081ff39c00", + "b": "0xa0ffca078dbf000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xa1404a8795def39c00", + "a_m_sub_b_m": "0x314107b9ef725f7dee14618553e42e4bb", + "a_m_mul_b_m": "0x8beca4d5c3f75d0142fc8f46c2f94e81", + "a_eq_b": false, + "a_m_pow_b": "0x137a95f2516dfd4675735af15d81069e1" + }, + { + "a": "0x0", + "b": "0x7427dc0d76c5ac00000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7427dc0d76c5ac00000000", + "a_m_sub_b_m": "0x314107b9ef6b1d0a39318da2edd4f48bb", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x0", + "b": "0x4d8616f502c", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x4d8616f502c", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9b027bdff88f", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x36cfa47e082c7200000", + "b": "0x4b60670b8fd4040", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x36cfefde6f3801d4040", + "a_m_sub_b_m": "0x36cf591da120e22bfc0", + "a_m_mul_b_m": "0xbf26b485ba809c5b25a87dd375739459", + "a_eq_b": false, + "a_m_pow_b": "0x20e0a574daf095a01dcdd8c48dfb76fd2" + }, + { + "a": "0x4172c2f007c1c8000", + "b": "0xe7329cf691e038000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xe7329d3804a32807c1c8000", + "a_m_sub_b_m": "0x314107b9ee8b2ceb44e9dcb5b596bc8bb", + "a_m_mul_b_m": "0x7fc8734498eaf509c3ae434124fe3db9", + "a_eq_b": false, + "a_m_pow_b": "0x1cda5634f33708815b387389a73bc36dc" + }, + { + "a": "0x4b6b6f66d193c40000", + "b": "0x399f7e5cda40060", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x4b6f095eb761680060", + "a_m_sub_b_m": "0x4b67d56eebc61fffa0", + "a_m_mul_b_m": "0x10f9e8c251430f02b45b12c2769800000", + "a_eq_b": false, + "a_m_pow_b": "0xfcfbcf1f6893434aa83ae3d47c0174a1" + }, + { + "a": "0x722341a14828dc00000", + "b": "0xca529342553c38000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xd174c75c69bec5c00000", + "a_m_sub_b_m": "0x314107b9ef725354f41675f21330f48bb", + "a_m_mul_b_m": "0x1a21f7ee41b9e00fd4c45a5c11adeeb8a", + "a_eq_b": false, + "a_m_pow_b": "0x265a3f3deedd34d8162bc935045ef7ef9" + }, + { + "a": "0xcca", + "b": "0x2de191b6ca289a00000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2de191b6ca289a00000000000cca", + "a_m_sub_b_m": "0x314104dbd656f2e57068f9fdadd4f5585", + "a_m_mul_b_m": "0x24ac6d18bb56b418400000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x1c8fc1e590db6e7b559223b26a2c4eca4" + }, + { + "a": "0x4d99acf93e5a140000", + "b": "0x2d9fd569ec1f8a0000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2d9fd569f0f924cf93e5a140000", + "a_m_sub_b_m": "0x3141078c4f9cf5a0b419c9919376348bb", + "a_m_mul_b_m": "0x3023f05201c365461a2ea1ccb21a72f29", + "a_eq_b": false, + "a_m_pow_b": "0x12c2607e936b0a1c43e8f09a0029ec455" + }, + { + "a": "0x1987d3744d2dac000000", + "b": "0x38f5fb6eab678c00000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x390f83421fb4b9ac000000", + "a_m_sub_b_m": "0x314107b9ef6ed1c0c0558857c894f48bb", + "a_m_mul_b_m": "0x2a6aae379327d7b3e6863bebfb21d8f0c", + "a_eq_b": false, + "a_m_pow_b": "0x1b4bfb1543dad1eb1d710a53760f9dae" + }, + { + "a": "0x8c4a0e18ef74a0000000000000", + "b": "0x8c4a0e18ef74a0000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x118941c31dee940000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x164d46f4689ca1f9eddd807091db31c03", + "a_eq_b": true, + "a_m_pow_b": "0xc5582b9c31d101bfa5696c31a20b29fb" + }, + { + "a": "0x3c831fdfd42c480000000", + "b": "0x95db", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3c831fdfd42c4800095db", + "a_m_sub_b_m": "0x3c831fdfd42c47fff6a25", + "a_m_mul_b_m": "0x236c15b98af847c9980000000", + "a_eq_b": false, + "a_m_pow_b": "0x27296ab7f412bfbd67360e9fc3c959f4f" + }, + { + "a": "0x961772e6ae1", + "b": "0x67c3f8a78698ac000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x67c3f8a78699421772e6ae1", + "a_m_sub_b_m": "0x314107b9ef0a9b8f528261e7c547db39c", + "a_m_mul_b_m": "0x2591bb378ec6ac24ccc0d9581931d9a1f", + "a_eq_b": false, + "a_m_pow_b": "0x861e2a3419e76c77dfd3101416f4e027" + }, + { + "a": "0x0", + "b": "0x16435f3825dade000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x16435f3825dade000000000", + "a_m_sub_b_m": "0x314107b9ef5c1c28c1e31f1fadd4f48bb", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x0", + "b": "0x73f067f72fbca", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x73f067f72fbca", + "a_m_sub_b_m": "0x314107b9ef725f87fa08860d45ddc4cf1", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x1a", + "b": "0x1a", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x34", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x2a4", + "a_eq_b": true, + "a_m_pow_b": "0x4a1a02108f971a7f069357024000000" + }, + { + "a": "0x11396", + "b": "0x7", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1139d", + "a_m_sub_b_m": "0x1138f", + "a_m_mul_b_m": "0x7891a", + "a_eq_b": false, + "a_m_pow_b": "0x1ace74af4c5be740329a76b1c0180" + }, + { + "a": "0x375082bad", + "b": "0xadce1f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x375b5f9cc", + "a_m_sub_b_m": "0x3745a5d8e", + "a_m_mul_b_m": "0x258df1d430b7ff3", + "a_eq_b": false, + "a_m_pow_b": "0x12e05bb9b134e10ba03545539b72682ce" + }, + { + "a": "0x2642aad48fcfcfa81b306d70019d5f970", + "b": "0x276263ee888f2e0000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x264520faceb8589afb306d70019d5f970", + "a_m_sub_b_m": "0x264034ae50e746b53b306d70019d5f970", + "a_m_mul_b_m": "0x27dabdac847470962b6784d130ab7c686", + "a_eq_b": false, + "a_m_pow_b": "0x189dec865c44bdb85f9f1551048eb7c8e" + }, + { + "a": "0x570ee99", + "b": "0x21389b", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x5922734", + "a_m_sub_b_m": "0x54fb5fe", + "a_m_mul_b_m": "0xb4c2c14aeea3", + "a_eq_b": false, + "a_m_pow_b": "0x5dfccd1740b833c4fb7f7e27c676b133" + }, + { + "a": "0xdc76788ba6d4880000000000000000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xdc76788ba6d4880000000000000000", + "a_m_sub_b_m": "0xdc76788ba6d4880000000000000000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x34e0e78e54b2e0000000000000000", + "b": "0x2cf20ec63f02f800000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x34e0e79123d3cc63f02f800000000", + "a_m_sub_b_m": "0x34e0e78b8591f39c0fd0800000000", + "a_m_mul_b_m": "0x20fe57b228dd22dfaf7bda111972406b4", + "a_eq_b": false, + "a_m_pow_b": "0x17097b70dfc329d6930efc2d0c42f19f6" + }, + { + "a": "0xb957910343ad500", + "b": "0xb957910343ad500", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x172af2206875aa00", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x862fad8a9a2d30215c940d35390000", + "a_eq_b": true, + "a_m_pow_b": "0x124148703991aa112c9d536758e67c5d5" + }, + { + "a": "0x2e2b8", + "b": "0xba6cbd91d57cd000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xba6cbd91d57cd00002e2b8", + "a_m_sub_b_m": "0x314107b9ef66b8bc20eba230add522b73", + "a_m_mul_b_m": "0x219f378a6aa4341558000000000", + "a_eq_b": false, + "a_m_pow_b": "0x27cdb5ba02c2efa318f36442564413d9f" + }, + { + "a": "0x7f2cc28c3740d800000000000000", + "b": "0xd85edb3ecde6680000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x8cb2b040241f3e80000000000000", + "a_m_sub_b_m": "0x71a6d4d84a627180000000000000", + "a_m_mul_b_m": "0x2f015435eaa2976773ee143df26f4f5cb", + "a_eq_b": false, + "a_m_pow_b": "0x1be85ab34547a111cda86dad65776e8ab" + }, + { + "a": "0x70a7521f359dd4000000000", + "b": "0x145454a1451e9a0000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1b5ec9c33878774000000000", + "a_m_sub_b_m": "0x314107b9ee9dc19004ecae31add4f48bb", + "a_m_mul_b_m": "0x1337f8d13aa1b3d9898d5588e51dd20bb", + "a_eq_b": false, + "a_m_pow_b": "0x171c4123b0c147e5e99e13efd13360a78" + }, + { + "a": "0x11", + "b": "0x1202bef31d6fdd0000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1202bef31d6fdd0000000011", + "a_m_sub_b_m": "0x314107b9ee523398c831fc2dadd4f48cc", + "a_m_mul_b_m": "0x1322eae24f46dad0000000000", + "a_eq_b": false, + "a_m_pow_b": "0xbd32fd08360cd6f9e460263b63114fbe" + }, + { + "a": "0x27e9cf84f09f6048fe245a4600004884c", + "b": "0x35e5895edca704000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x27ea056a79fe3cf002245a4600004884c", + "a_m_sub_b_m": "0x27e9999f674083a1fa245a4600004884c", + "a_m_mul_b_m": "0xc0a87c79b495b340ae57332fc1190166", + "a_eq_b": false, + "a_m_pow_b": "0x7b913019073ee0dd4f92b5fdb94f78af" + }, + { + "a": "0x3cbe368ca4232c0000000000000000000", + "b": "0x1384d00d46ca340000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1f01fedffb7b007805f70602522b0b745", + "a_m_sub_b_m": "0x2939667f5d58f80000000000000000000", + "a_m_mul_b_m": "0x129d2a6cbd424607c43be951f1a158a86", + "a_eq_b": false, + "a_m_pow_b": "0x177c83aa8680e9ae44cac986484434920" + }, + { + "a": "0x225e6a16991", + "b": "0x29cb017c18741ae91acfebb4bd29e8693", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x29cb017c18741ae91acfebd71b93ff024", + "a_m_sub_b_m": "0x776063dd6fe449edf390e6b4f1522bb9", + "a_m_mul_b_m": "0x8f9a861290ec59284a0e62eda7a8518a", + "a_eq_b": false, + "a_m_pow_b": "0x821da1b92b17285af4186c2dead4a163" + }, + { + "a": "0x37fdc0d", + "b": "0x38d5ce5ce13a2e00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x38d5ce5ce4ba0a0d", + "a_m_sub_b_m": "0x314107b9ef725f87f67b9d17dff94f6c8", + "a_m_mul_b_m": "0xc6e45716eab6ac417c5600", + "a_eq_b": false, + "a_m_pow_b": "0x281bbfeee4c9e5ae9e8ca32463514a8f6" + }, + { + "a": "0x7", + "b": "0x289a8dde4", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x289a8ddeb", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fd853a66ade", + "a_m_mul_b_m": "0x11c39e113c", + "a_eq_b": false, + "a_m_pow_b": "0x1529f9cb9425c63b4b65a3d3fc7c7699c" + }, + { + "a": "0xe57d6becc3d4280000000", + "b": "0x2d", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xe57d6becc3d428000002d", + "a_m_sub_b_m": "0xe57d6becc3d427fffffd3", + "a_m_mul_b_m": "0x28570bf89e6c4b080000000", + "a_eq_b": false, + "a_m_pow_b": "0x2f099299df90aad2131391e80ba8ce1e6" + }, + { + "a": "0x1e1f1878781", + "b": "0x413314d7c2dfec00000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x413314d7c2dfec0001e1f1878781", + "a_m_sub_b_m": "0x314103a6be24e359fb48fa1bcced6d03c", + "a_m_mul_b_m": "0x2db940c9fa071bbb9afd73420a8c0e06c", + "a_eq_b": false, + "a_m_pow_b": "0x1de5ade8f4ce3e4db37b6a56ce072f7ca" + }, + { + "a": "0x13782b96b24182000", + "b": "0x26f21e9e4a8438000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x26f21e9e4a844b782b96b24182000", + "a_m_sub_b_m": "0x3140e0c7d0d41503d58125946016768bb", + "a_m_mul_b_m": "0x1bf945dc87401364edc9b86c028b0eb50", + "a_eq_b": false, + "a_m_pow_b": "0x13a81901d85adada042dfa877959c310a" + }, + { + "a": "0x391171378e", + "b": "0xd5380c56e261", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xd5711dc819ef", + "a_m_sub_b_m": "0x314107b9ef725f87fa08ecadbe2699de8", + "a_m_mul_b_m": "0x2f8801c42ceeb8e0a568ce", + "a_eq_b": false, + "a_m_pow_b": "0x1e701e05fdb16bd2cad8a226582d76008" + }, + { + "a": "0x18", + "b": "0x78ea74ae3993", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x78ea74ae39ab", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f26f068a10f40", + "a_m_mul_b_m": "0xb55faf05565c8", + "a_eq_b": false, + "a_m_pow_b": "0x2fedf7740a54699105dae5e4a892a7412" + }, + { + "a": "0x7a7d", + "b": "0xaaa21f699b0b1000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xaaa21f699b0b1000000000007a7d", + "a_m_sub_b_m": "0x3140fd0fcd7bc5d74908f9fdadd4fc338", + "a_m_mul_b_m": "0x51a49421aa73fa06d000000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x2e33f3c99ca3d3bf306b3b98b26b70e69" + }, + { + "a": "0x18a31eaf5d221000000000000000", + "b": "0x5ddb7e9fb072f000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x18a31eaf5d226ddb7e9fb072f000", + "a_m_sub_b_m": "0x18a31eaf5d21b22481604f8d1000", + "a_m_mul_b_m": "0x50b5817e30911d4f9d5b268fbfcdc281", + "a_eq_b": false, + "a_m_pow_b": "0x29ba51615dde8da0763974779de6e4a4" + }, + { + "a": "0x30983be79add4e0000000000000", + "b": "0x1e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x30983be79add4e000000000001e", + "a_m_sub_b_m": "0x30983be79add4dfffffffffffe2", + "a_m_mul_b_m": "0x5b1d7052425ef240000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x1538468378f96a7b1617055197cf83b3d" + }, + { + "a": "0x12d911", + "b": "0x1dc0ca369613ea0000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1dc0ca369613ea000000000000012d911", + "a_m_sub_b_m": "0x13803d83595e7587fa08f9fdadd6221cc", + "a_m_mul_b_m": "0x23e26960ebbc5159f82898eb1a4fed7fa", + "a_eq_b": false, + "a_m_pow_b": "0x24a0bbca451f5f0384177a52a8bd2bcca" + }, + { + "a": "0x35a3d58", + "b": "0x25e4af862156af4586c4c3935379deda1", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x25e4af862156af4586c4c39353af82af9", + "a_m_sub_b_m": "0xb5c5833ce1bb0427344366a5a90b9872", + "a_m_mul_b_m": "0xbce63ac49f5f2f4747e66622fa6acb82", + "a_eq_b": false, + "a_m_pow_b": "0x892fec77eb1c21152eea9a5d4c28d26a" + }, + { + "a": "0x2083c333268bca000000000000", + "b": "0x307120911b3b68b57da54f267dd138266", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3071209323779be7e661ef267dd138266", + "a_m_sub_b_m": "0xcfe72adc732a04e5204ad73003bc655", + "a_m_mul_b_m": "0x1a8ffc638420ba1429b5e7bfc05b71cd7", + "a_eq_b": false, + "a_m_pow_b": "0x1350f2adfffc87e11e724c0136039ca8b" + }, + { + "a": "0x4a8372c", + "b": "0x3104d277c158f00000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3104d277c158f00000000000004a8372c", + "a_m_sub_b_m": "0x3c35422e196f87fa08f9fdae1f77fe7", + "a_m_mul_b_m": "0xba8049f39c7fe8fff9dbbfbde9c509cb", + "a_eq_b": false, + "a_m_pow_b": "0x10a4d554da1ce206c84a818fd303d21eb" + }, + { + "a": "0x3090", + "b": "0x3114", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x61a4", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadd4f4837", + "a_m_mul_b_m": "0x94f5b40", + "a_eq_b": false, + "a_m_pow_b": "0x14be619241aab348dc518101adc8c3ac8" + }, + { + "a": "0x279a598a801e6e00000", + "b": "0x13dabad28c5d84000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x13dae26ce5e8041e6e00000", + "a_m_sub_b_m": "0x314107b9ef5e84f4c1d626f9cc42f48bb", + "a_m_mul_b_m": "0xc1972d6ce327d980915065007af28555", + "a_eq_b": false, + "a_m_pow_b": "0xff4f07b46b72980d7ea5815a54630784" + }, + { + "a": "0x3655a0084ec0da0000000000000000000", + "b": "0x219bb4dd41ba2800000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x53634033c9034a005f70602522b0b745", + "a_m_sub_b_m": "0x4f2fc99820cc05005f70602522b0b745", + "a_m_mul_b_m": "0x106699bf6da92ec06f0857e886f33a038", + "a_eq_b": false, + "a_m_pow_b": "0x292b9cc3f48f57c95c95fd06f49102b3c" + }, + { + "a": "0x0", + "b": "0x392c03e65f9", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x392c03e65f9", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9c481d10e2c2", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x50cca66556eae0000000", + "b": "0xe34f561e33d4b0000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xe35462e89a2a1eae0000000", + "a_m_sub_b_m": "0x314107b9ee8f153ea63b7abc5bd4f48bb", + "a_m_mul_b_m": "0x262f66033aa5e6e8edf68df8ac1c4ca43", + "a_eq_b": false, + "a_m_pow_b": "0x2e99c944fbcbb4ba680147008ad46cebf" + }, + { + "a": "0x8de376536d7240000", + "b": "0x8546c41441", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x8de3765bc1de81441", + "a_m_sub_b_m": "0x8de3764b1905febbf", + "a_m_mul_b_m": "0x49de6559131027d8b4b70240000", + "a_eq_b": false, + "a_m_pow_b": "0x189ab84088b2a7aec26ec6e5195003be9" + }, + { + "a": "0x1088ed7b275586000000000000000", + "b": "0x13514d457303e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1088ed7b2755860013514d457303e", + "a_m_sub_b_m": "0x1088ed7b275585ffecaeb2ba8cfc2", + "a_m_mul_b_m": "0x1be318befa490e87cded2c65e72922b00", + "a_eq_b": false, + "a_m_pow_b": "0x2717eb5b3e597960388edffab4067eb02" + }, + { + "a": "0x14", + "b": "0x14", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x28", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x190", + "a_eq_b": true, + "a_m_pow_b": "0x56bc75e2d6310000000000" + }, + { + "a": "0x40d36a3123b4a4000000", + "b": "0x40d36a3123b4a4000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x81a6d462476948000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x11883c333171b7f11c43bdc6ae98c9e98", + "a_eq_b": true, + "a_m_pow_b": "0xc2be3aafbfe9bf767d89e9cb7097d2e4" + }, + { + "a": "0x326f38f5cc", + "b": "0x3c4b6ccd633d9600000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3c4b6ccd633d960000326f38f5cc", + "a_m_sub_b_m": "0x314103f538a5895420a8fa00d4c883e87", + "a_m_mul_b_m": "0x22059ba14f17c0367332f2ba52f9f8369", + "a_eq_b": false, + "a_m_pow_b": "0x4863d49361e1e4f2281c2dc4cbe69c00" + }, + { + "a": "0x52619390", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x52619390", + "a_m_sub_b_m": "0x52619390", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x9f81845cab", + "b": "0x42c35bb4d", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xa3adba17f8", + "a_m_sub_b_m": "0x9b554ea15e", + "a_m_mul_b_m": "0x29991ceb69637e7c86f", + "a_eq_b": false, + "a_m_pow_b": "0x25e29338d8fd9589d98e5851fad0beb0f" + }, + { + "a": "0x3d6cea29f704a", + "b": "0x85c7bc7c", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3d6cf28672cc6", + "a_m_sub_b_m": "0x3d6ce1cd7b3ce", + "a_m_mul_b_m": "0x2019828b90aca9736bbd8", + "a_eq_b": false, + "a_m_pow_b": "0xea4dfa0461d33a74d826efd55ec3fecd" + }, + { + "a": "0x56f29055ed8ef400000000000000000", + "b": "0x4c68b86b68b790000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x56f29055ed93ba8b86b68b790000000", + "a_m_sub_b_m": "0x56f29055ed8a2d74794974870000000", + "a_m_mul_b_m": "0x25b93b05a373712cbb953aac05b7294ee", + "a_eq_b": false, + "a_m_pow_b": "0x62c91a00337969d9807a849288d55f27" + }, + { + "a": "0x286f285dad425c0000000000000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x286f285dad425c0000000000000", + "a_m_sub_b_m": "0x286f285dad425c0000000000000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x2491", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2491", + "a_m_sub_b_m": "0x2491", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x44ff687ad5c", + "b": "0x3972e7c6ef92aa000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3972e7c6ef92aa044ff687ad5c", + "a_m_sub_b_m": "0x314107b65843e31900de5a42ad3d6f617", + "a_m_mul_b_m": "0xb102c3eb50b6c8dc30b16c89c17ce6e2", + "a_eq_b": false, + "a_m_pow_b": "0x978c4abfac0923bcec9e7c15fa71fc92" + }, + { + "a": "0xe2", + "b": "0x179c665fd6a58300000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x179c665fd6a583000000e2", + "a_m_sub_b_m": "0x314107b9ef70e5c1940b8fa57dd4f499d", + "a_m_mul_b_m": "0x14d812609b7e1da600000000", + "a_eq_b": false, + "a_m_pow_b": "0x3742ff267d77eb437bbfda6efc49d34c" + }, + { + "a": "0x5c6d1e2d27", + "b": "0x493c22bd29", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xa5a940ea50", + "a_m_sub_b_m": "0x1330fb6ffe", + "a_m_mul_b_m": "0x1a70d3b8bc12e459063f", + "a_eq_b": false, + "a_m_pow_b": "0x207daf965c956f689daf9cd638f678287" + }, + { + "a": "0xe56790a0f132a8000000000000000000", + "b": "0x1f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xe56790a0f132a800000000000000001f", + "a_m_sub_b_m": "0xe56790a0f132a7ffffffffffffffffe1", + "a_m_mul_b_m": "0x12f62ae684cc9b835af3614e3836716d", + "a_eq_b": false, + "a_m_pow_b": "0x1dd991ee66eb3ca59692a014fc218b3fb" + }, + { + "a": "0x1b228f3", + "b": "0x2611e3657490760000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2611e3657490760000000001b228f3", + "a_m_sub_b_m": "0x313ea69bb91b16809a08f9fdadf0171ae", + "a_m_mul_b_m": "0x9cbfd96310eae3539bd06ad48c33a61d", + "a_eq_b": false, + "a_m_pow_b": "0xecd8cdfb6917aeacb59c349819307756" + }, + { + "a": "0x0", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x0", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x3a3e900179e414000000000000000", + "b": "0x2f5c409c0c26760000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3a3e9001a940549c0c26760000000", + "a_m_sub_b_m": "0x3a3e90014a87d363f3d98a0000000", + "a_m_mul_b_m": "0x15cbd15d70a262531cceae741ae6f57df", + "a_eq_b": false, + "a_m_pow_b": "0x2114a626d65e5dc975bd31ea2ff53c093" + }, + { + "a": "0x3cb5e321212082000", + "b": "0x74c16bc6757274", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3cbd2f37dd87d9274", + "a_m_sub_b_m": "0x3cae970a64b92ad8c", + "a_m_mul_b_m": "0x1bb0499a55737e31eb4a2ae69ee8000", + "a_eq_b": false, + "a_m_pow_b": "0x9fa82c5b454f49f9b51ec7317ff99d36" + }, + { + "a": "0x122", + "b": "0x755771fadd65c0000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x755771fadd65c0000000000122", + "a_m_sub_b_m": "0x314107b299fb3fda23acf9fdadd4f49dd", + "a_m_mul_b_m": "0x84ed0f1e2ecd4380000000000000", + "a_eq_b": false, + "a_m_pow_b": "0xad79d50451d43128572aa77876141739" + }, + { + "a": "0x179bb7e26aaafc000", + "b": "0x38b45eecbeff", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x179bbb6db099c7eff", + "a_m_sub_b_m": "0x179bb45724bc30101", + "a_m_mul_b_m": "0x53ab277d53825d483db775904000", + "a_eq_b": false, + "a_m_pow_b": "0x2cd3dfd919ea8751836767ade81e3818d" + }, + { + "a": "0x1e052ec800b5", + "b": "0xbbf716f682a3", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xd9fc45be8358", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f01e8f520c6cd", + "a_m_mul_b_m": "0x160ac2dd95cec8f195a25d3f", + "a_eq_b": false, + "a_m_pow_b": "0x14c95a090e667ea419f87f8eb66d48f5b" + }, + { + "a": "0x1", + "b": "0x25b680b4c332a400000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x25b680b4c332a400000000001", + "a_m_sub_b_m": "0x314107b9c9bbded336d655fdadd4f48bc", + "a_m_mul_b_m": "0x25b680b4c332a400000000000", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x2662616baee1c200000000000000000", + "b": "0x3eb1231094ac5c00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2662616baee1c203eb1231094ac5c00", + "a_m_sub_b_m": "0x2662616baee1c1fc14edcef6b53a400", + "a_m_mul_b_m": "0x13c5ebb9908301840cd6d997212028860", + "a_eq_b": false, + "a_m_pow_b": "0x287e1109725ec4077517ba083d3e20ca8" + }, + { + "a": "0xc", + "b": "0x5c188623ce", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x5c188623da", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9f7ec4c924f9", + "a_m_mul_b_m": "0x4512649ada8", + "a_eq_b": false, + "a_m_pow_b": "0xf2dcd9d38cecb1fe6e8a19f18bc0af36" + }, + { + "a": "0x5b0250c1e8d", + "b": "0x1019fcf9a44", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x6b1c4dbb8d1", + "a_m_sub_b_m": "0x4ae853c8449", + "a_m_mul_b_m": "0x5b9623508a066689bef74", + "a_eq_b": false, + "a_m_pow_b": "0x14a2883e65cd2ef6ef3545c058cb9da9d" + }, + { + "a": "0x136fa", + "b": "0xf0fb19", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xf23213", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadc5f849c", + "a_m_mul_b_m": "0x124bb657c6a", + "a_eq_b": false, + "a_m_pow_b": "0x27e601f7f5fa302e258cb2b30271bff65" + }, + { + "a": "0xf3515f99ef4f9000000000000000", + "b": "0x23d18", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xf3515f99ef4f9000000000023d18", + "a_m_sub_b_m": "0xf3515f99ef4f8ffffffffffdc2e8", + "a_m_mul_b_m": "0x220b3f29c831384c58000000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x212f4994146857330d6258563f0b88f11" + }, + { + "a": "0x159421d1237c3f00000000000000000", + "b": "0x12fee9ced", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x159421d1237c3f0000000012fee9ced", + "a_m_sub_b_m": "0x159421d1237c3effffffffed0116313", + "a_m_mul_b_m": "0x2f215b2f52b06b467609c8b6582351f72", + "a_eq_b": false, + "a_m_pow_b": "0x243a80c170df052c4cd660184739a26a1" + }, + { + "a": "0x1bcc7b881d1dff0000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1bcc7b881d1dff0000", + "a_m_sub_b_m": "0x1bcc7b881d1dff0000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x29511feab378540", + "b": "0x246e785ad1bce35d8cbe88a3f2f7a304f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x246e785ad1bce35d8ce7d9c3ddab1b58f", + "a_m_sub_b_m": "0xcd28f5f1db57c2a6d73c279a590c9dac", + "a_m_mul_b_m": "0x2bd50e95210b19329ae330a0a98d9afb9", + "a_eq_b": false, + "a_m_pow_b": "0x10525be74f1b44622356305d771571ca0" + }, + { + "a": "0xad18a0871bcc80000000000000", + "b": "0x116cfa7391eec10", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xad18a0871bcd96cfa7391eec10", + "a_m_sub_b_m": "0xad18a0871bcb693058c6e113f0", + "a_m_mul_b_m": "0x25c7847419cce071fee2f6217640bfdf3", + "a_eq_b": false, + "a_m_pow_b": "0xb9d61884a109e6d36b923d7e1413ce2c" + }, + { + "a": "0x38a2611a20842400000000000000000", + "b": "0x7191ee11803dbc00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x38a2611a20842407191ee11803dbc00", + "a_m_sub_b_m": "0x38a2611a208423f8e6e11ee7fc24400", + "a_m_mul_b_m": "0x84c53035f2280926a6838a2e58f99e9c", + "a_eq_b": false, + "a_m_pow_b": "0x6032b79725387533bb93622fa342c8df" + }, + { + "a": "0x2764657ca9e65736c72f774b1b2f11ef9", + "b": "0x8e1728aecc", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2764657ca9e65736c72f7753fca19cdc5", + "a_m_sub_b_m": "0x2764657ca9e65736c72f774239bc8702d", + "a_m_mul_b_m": "0x2851f7ae8725834bd0ace86a686b586b", + "a_eq_b": false, + "a_m_pow_b": "0x2f5986c7c286d10543d23f02a088e5c97" + }, + { + "a": "0x331ecd5de31ee200000000000", + "b": "0x331ecd5de31ee200000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x663d9abbc63dc400000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1114e4ff8b4d64d85094208f7455c4d32", + "a_eq_b": true, + "a_m_pow_b": "0xe08c15f267ed1f9a67aaa5fa1d555ebb" + }, + { + "a": "0x66fc75f835f6540000", + "b": "0x20a614be3ab2212c9e23b580e4523dbbb", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x20a614be3ab221330deb150443b77dbbb", + "a_m_sub_b_m": "0x109af2fbb4c03e61cbaca40028e7f6d00", + "a_m_mul_b_m": "0x8be2547096057e594eba136a83477878", + "a_eq_b": false, + "a_m_pow_b": "0x1375e2e2290f3a5aa552271a7444a09ad" + }, + { + "a": "0xc3600fd71e749800000", + "b": "0x1cabe7744f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xc3600fd7203f567744f", + "a_m_sub_b_m": "0xc3600fd71ca9d988bb1", + "a_m_mul_b_m": "0x15e1b38a8e230759ec62dae800000", + "a_eq_b": false, + "a_m_pow_b": "0x582847b93efca74a217e3e5b649f4769" + }, + { + "a": "0x2a5214735aef92000000", + "b": "0x2a5214735aef92000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x54a428e6b5df24000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x78d28bfafe3fbada31a47efacb2841a3", + "a_eq_b": true, + "a_m_pow_b": "0x1bb01044fe089fc60b12b2f43b8b30f76" + }, + { + "a": "0x1232d53141f7", + "b": "0x266029", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1232d557a220", + "a_m_sub_b_m": "0x1232d50ae1ce", + "a_m_mul_b_m": "0x2ba619f66684a308f", + "a_eq_b": false, + "a_m_pow_b": "0x16e4673221afafb8a98dd420418beaf8f" + }, + { + "a": "0xbf220e196b5118000", + "b": "0x2a5bd1a3472476", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xbf24b3d685858a476", + "a_m_sub_b_m": "0xbf1f685c511ca5b8a", + "a_m_mul_b_m": "0x1fa023efe3f3d95ccc109486c110000", + "a_eq_b": false, + "a_m_pow_b": "0x22949f3d8f2281b6effc81d9c26890b0d" + }, + { + "a": "0x250dab09a5b16e000000000000", + "b": "0x35a58ebd706be80000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x250dae63fe9d4506be80000000", + "a_m_sub_b_m": "0x250da7af4cc596f94180000000", + "a_m_mul_b_m": "0x1877bd5379f893e5ea66147f320e998d1", + "a_eq_b": false, + "a_m_pow_b": "0x69023944826e01a7f4ab031a0fd8fe8" + }, + { + "a": "0x30057f8ccd182", + "b": "0x413b8d9bf380", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x341938668c502", + "a_m_sub_b_m": "0x2bf1c6b30de02", + "a_m_mul_b_m": "0xc3c91376dc866b8444fd2700", + "a_eq_b": false, + "a_m_pow_b": "0x1696822a39cde302f9056a90b4fedd764" + }, + { + "a": "0x3ed0070003f67a00", + "b": "0xe3", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3ed0070003f67ae3", + "a_m_sub_b_m": "0x3ed0070003f6791d", + "a_m_mul_b_m": "0x37b2763503838e2e00", + "a_eq_b": false, + "a_m_pow_b": "0x10868de76a1c0306fbe9f294f895622b0" + }, + { + "a": "0x70", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x70", + "a_m_sub_b_m": "0x70", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x2", + "b": "0x253be60b9cbe5a000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x253be60b9cbe5a000000002", + "a_m_sub_b_m": "0x314107b9ef4d23a1ee6c3ba3add4f48bd", + "a_m_mul_b_m": "0x4a77cc17397cb4000000000", + "a_eq_b": false, + "a_m_pow_b": "0xfeeb27c3555abb00e2c5db944d4d19f9" + }, + { + "a": "0x1", + "b": "0x1", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x2d8ae03e07d4a0000000000000000", + "b": "0x3456c187a51af200000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2d8b1494c95c451af200000000000", + "a_m_sub_b_m": "0x2d8aabe7464cfae50e00000000000", + "a_m_mul_b_m": "0x2f1a1a4e72423bf72b64a320bbc178220", + "a_eq_b": false, + "a_m_pow_b": "0x2c52d4db1631a54e749a38d2598529109" + }, + { + "a": "0xf193969dfb1d280", + "b": "0x18ddcdcdfcdd410000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x18ddcdcdfcdd410f193969dfb1d280", + "a_m_sub_b_m": "0x313f79dd129291b3eafa8d944bd011b3b", + "a_m_mul_b_m": "0x2e4f417f3b8979f6b5e07493284cd351c", + "a_eq_b": false, + "a_m_pow_b": "0x1db5db7ce5f65f486b50e50620727c949" + }, + { + "a": "0x11b944dabd7b3f0000000000", + "b": "0x354dbf1b4f1b7c0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x11b944dac0d01af1b4f1b7c0", + "a_m_sub_b_m": "0x11b944daba26630e4b0e4840", + "a_m_mul_b_m": "0x2d18c0f9967f4e76f6b7f4b3e77a81a1a", + "a_eq_b": false, + "a_m_pow_b": "0x1c16673ff2b154e84061e34880d85c402" + }, + { + "a": "0x1da6845d48f2b30000000000000", + "b": "0x49bf1e44eeeed000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x49bf3beb734c18f2b30000000000000", + "a_m_sub_b_m": "0x30f748b95107ce00ecbbf9fdadd4f48bb", + "a_m_mul_b_m": "0x200f002b66debdf179638b4039b315e37", + "a_eq_b": false, + "a_m_pow_b": "0x29fc64ffd3df008688f0bf52837550a1a" + }, + { + "a": "0x2a217cf253be957670884fd16636abf8c", + "b": "0x10d7b154cb1281000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2a217cf253cf6d27c55362526636abf8c", + "a_m_sub_b_m": "0x2a217cf253adbdc51bbd3d506636abf8c", + "a_m_mul_b_m": "0x2472695217ed1a9cf583111c7d1ae230", + "a_eq_b": false, + "a_m_pow_b": "0x3ce7802414cf67ba632627ce0e674c90" + }, + { + "a": "0x997", + "b": "0x6e2e1d0b80b2f4000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x6e2e1d0b80b2f4000000000000997", + "a_m_sub_b_m": "0x3140998bd266ded50608f9fdadd4f5252", + "a_m_mul_b_m": "0x4209c38894f3421ec000000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x1c8917014789d40d4bb867ebb0f746816" + }, + { + "a": "0x27d7de1f57460d20d94b9cdb56e3c18c9", + "b": "0x33", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x27d7de1f57460d20d94b9cdb56e3c18fc", + "a_m_sub_b_m": "0x27d7de1f57460d20d94b9cdb56e3c1896", + "a_m_mul_b_m": "0xc97037709a350c43ea03611784464a18", + "a_eq_b": false, + "a_m_pow_b": "0x4c77fe8e6cc2867fc80dedf3f94ad7c0" + }, + { + "a": "0x3104dff6623f1b67e01d34690a795ac54", + "b": "0x16c886a2ae1f4400000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3104dff6623f1b7ea8a3d71729bd5ac54", + "a_m_sub_b_m": "0x3104dff6623f1b51179691baeb355ac54", + "a_m_mul_b_m": "0x24b25cfbe83e7b440a9999ce274f6871d", + "a_eq_b": false, + "a_m_pow_b": "0x1257cf14caf12f62b10d3624ba09dd612" + }, + { + "a": "0x876f187cdb6158000000", + "b": "0x32d0591d4bdfb60000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x87a1e8d5f8ad37b60000", + "a_m_sub_b_m": "0x873c4823be15784a0000", + "a_m_mul_b_m": "0x1ecccab947012114ab0e73ae5761f3515", + "a_eq_b": false, + "a_m_pow_b": "0x1eb1e57d723ccb1b97a4cd3c01993a738" + }, + { + "a": "0xe81f403475c270000", + "b": "0x1ed943fd2232", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xe81f42220a0242232", + "a_m_sub_b_m": "0xe81f3e46e1829ddce", + "a_m_mul_b_m": "0x1bf8a9a945f6463cb65b82d9e0000", + "a_eq_b": false, + "a_m_pow_b": "0x184dabca2f926c3b161a25039f5d6c2b9" + }, + { + "a": "0x6d64ae38c86c380000000000", + "b": "0x65e6546b8ae77800", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x6d64ae392e528c6b8ae77800", + "a_m_sub_b_m": "0x6d64ae386285e39475188800", + "a_m_mul_b_m": "0x10460f3661669e0f52043d49145771720", + "a_eq_b": false, + "a_m_pow_b": "0x463c8f2763d22d9b3b47a9bfe01d5faa" + }, + { + "a": "0xd82744ecb4", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xd82744ecb4", + "a_m_sub_b_m": "0xd82744ecb4", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x960ba0e008e6880000000000000000", + "b": "0x8c1", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x960ba0e008e68800000000000008c1", + "a_m_sub_b_m": "0x960ba0e008e687fffffffffffff73f", + "a_m_mul_b_m": "0x20d6b4faa36c414085f70602522b0b745", + "a_eq_b": false, + "a_m_pow_b": "0x2cb07d2e8ff07a6471ec33fbc7bcce58b" + }, + { + "a": "0xfed69", + "b": "0x511256f3f80b840000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x511256f3f80b8400000000fed69", + "a_m_sub_b_m": "0x31410768dd1b6b8fee84f9fdadd5f3624", + "a_m_mul_b_m": "0x50b4253510f6021ed240000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x115a63abbf7033fd1de6c322e16f5b5b7" + }, + { + "a": "0x9b8cc56fb6031", + "b": "0x264f82e12077c800000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x264f82e12077c809b8cc56fb6031", + "a_m_sub_b_m": "0x31410554f7444d807d89958a7344aa8ec", + "a_m_mul_b_m": "0x8e7be13632bb030c1961f4921c841ccc", + "a_eq_b": false, + "a_m_pow_b": "0x2e41ea1a8ab2ad8fae94ad45adfc67eb4" + }, + { + "a": "0x279683fcb4f23e0000000000000000000", + "b": "0x5f553af3bb486c000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x27968402aa45ed3bb486c000000000000", + "a_m_sub_b_m": "0x279683f6bf9e8ec44b794000000000000", + "a_m_mul_b_m": "0x1be82286334cde1e0fcbf6f6b906de8db", + "a_eq_b": false, + "a_m_pow_b": "0x86f0df78d116083145d4159f95253d7f" + }, + { + "a": "0x7159005b3337e0000", + "b": "0x4", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7159005b3337e0004", + "a_m_sub_b_m": "0x7159005b3337dfffc", + "a_m_mul_b_m": "0x1c564016cccdf80000", + "a_eq_b": false, + "a_m_pow_b": "0x12fa21d3a9e92244e4c4a3d1e85274cd5" + }, + { + "a": "0x568439", + "b": "0x3180ebb22516be0000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3fe3f835a45e7805f70602523073b7e", + "a_m_sub_b_m": "0x310123c1b9ce010ff411f3fb5baf515af", + "a_m_mul_b_m": "0x2a4bb1fc145e2a1e1e827dcf7728d60ba", + "a_eq_b": false, + "a_m_pow_b": "0xfcfe181ec32f59cda257c5ab53b00c54" + }, + { + "a": "0x0", + "b": "0x2a91da2cd8bf06f64b4178592b76fc5b2", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2a91da2cd8bf06f64b4178592b76fc5b2", + "a_m_sub_b_m": "0x6af2d8d16b35891aec781a4825df8309", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x94d8f702", + "b": "0x343842590663940000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3438425906639d4d8f702", + "a_m_sub_b_m": "0x314107b9ef722b4fb7aff39a232283fbd", + "a_m_mul_b_m": "0x1e5cc83623435f710093280000000", + "a_eq_b": false, + "a_m_pow_b": "0xe98efd63ec1ca007fe13deb27d1e8812" + }, + { + "a": "0x2683d59ea9cd200000000000000", + "b": "0x9", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2683d59ea9cd200000000000009", + "a_m_sub_b_m": "0x2683d59ea9cd1fffffffffffff7", + "a_m_mul_b_m": "0x15aa28293f836200000000000000", + "a_eq_b": false, + "a_m_pow_b": "0xb502a66a603ebd6ae238cbdf5e5e3d63" + }, + { + "a": "0x733a87187e4648000000000000000000", + "b": "0x30175db054e620000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x733a874895a3f854e620000000000000", + "a_m_sub_b_m": "0x733a86e866e897ab19e0000000000000", + "a_m_mul_b_m": "0x25d2b602fe2ec9a941c0d280b91ebb892", + "a_eq_b": false, + "a_m_pow_b": "0x4d681f5140cf93edeab5533f549636aa" + }, + { + "a": "0x56df7cce2c99ec000000000", + "b": "0x6f1852af59623400000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x6f6f322c278ecdec000000000", + "a_m_sub_b_m": "0x314107b980b0ec556ed35fe9add4f48bb", + "a_m_mul_b_m": "0x157beac228d4492ffb3503fdc205326cc", + "a_eq_b": false, + "a_m_pow_b": "0x12fd32daa2d1a3eea8912992b97cc5eef" + }, + { + "a": "0x36842e0a749ffa0000000", + "b": "0x15a7a8818c00b40000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x36858884fcb8ba0b40000", + "a_m_sub_b_m": "0x3682d38fec8739f4c0000", + "a_m_mul_b_m": "0x14d7d65ad46f3bc1370a0f54ea0631af5", + "a_eq_b": false, + "a_m_pow_b": "0x84e27c8471d5a697f608904b12fdebaf" + }, + { + "a": "0x3", + "b": "0x13d8e0e27a93b2000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x13d8e0e27a93b2003", + "a_m_sub_b_m": "0x314107b9ef725f87e630191b3341428be", + "a_m_mul_b_m": "0x3b8aa2a76fbb16000", + "a_eq_b": false, + "a_m_pow_b": "0x19277741a9423cf6f65ce857b9bc80799" + }, + { + "a": "0x1c1a7c35360", + "b": "0xae2e902f35abd0000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xae2e902f35abec1a7c35360", + "a_m_sub_b_m": "0x314107b9eec430f7cad34e49c85129c1b", + "a_m_mul_b_m": "0xa6ba1cd717e48f6ce0f020ded0244b9e", + "a_eq_b": false, + "a_m_pow_b": "0x2c19b9c2e18d35670a9aba083682c4b21" + }, + { + "a": "0x3d0db4963ae3e", + "b": "0x3d0db4963ae3e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7a1b692c75c7c", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xe8f88cb6eb62ede43968c5704", + "a_eq_b": true, + "a_m_pow_b": "0x26289882ee8f54dd6874c4c62d092ee77" + }, + { + "a": "0x0", + "b": "0x28f015abccc3680", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x28f015abccc3680", + "a_m_sub_b_m": "0x314107b9ef725f87f9e009e802083123b", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x3840c0715", + "b": "0x465cbc53b900140000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x465cbc53bc84200715", + "a_m_sub_b_m": "0x314107b9ef725f83943d34c2561474fd0", + "a_m_mul_b_m": "0xf76154617912af3e1d8da40000", + "a_eq_b": false, + "a_m_pow_b": "0x1681dd8ffbf349973dcd52b534646de30" + }, + { + "a": "0x7", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7", + "a_m_sub_b_m": "0x7", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x0", + "b": "0x2a9fa4ea6f8db1a4d584d3c020ff9d318", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2a9fa4ea6f8db1a4d584d3c020ff9d318", + "a_m_sub_b_m": "0x6a162cf7fe4ade32484263d8cd5575a3", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x5276c0a3f6d17c0", + "b": "0x644fe2485f9e300000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x644fe24864c59c0a3f6d17c0", + "a_m_sub_b_m": "0x314107b9e92d616374618dbe51cbc607b", + "a_m_mul_b_m": "0x108fc912badb5b4548965769e67953c53", + "a_eq_b": false, + "a_m_pow_b": "0x54733fb1ac91585cff8b678b81672a36" + }, + { + "a": "0x2", + "b": "0xb2b9ab426a8568000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xb2b9ab426a8568000000000000000002", + "a_m_sub_b_m": "0x26156d05c8ca0907fa08f9fdadd4f48bd", + "a_m_mul_b_m": "0x165735684d50ad0000000000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x2696550c584ede1359ac52868cb3abc26" + }, + { + "a": "0x2aa81e412c52cc00000", + "b": "0x21a389f9d4061a000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2ac9c1cb2626d21a000", + "a_m_sub_b_m": "0x2a867ab7327ec5e6000", + "a_m_mul_b_m": "0x65ee3be28d55b8b05ff0345125ad9b9a", + "a_eq_b": false, + "a_m_pow_b": "0xc43b8a95f7af5a49650ec21a8f3fac0e" + }, + { + "a": "0x24ee4ea130b20600000000000000", + "b": "0xcc1d4ef93d4cb80000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x31b02390c486d180000000000000", + "a_m_sub_b_m": "0x182c79b19cdd3a80000000000000", + "a_m_mul_b_m": "0x19d385af620df0c21783faca51539f63e", + "a_eq_b": false, + "a_m_pow_b": "0x306894a93287b8124cdf68fdfb9f9d329" + }, + { + "a": "0x1470d4fb6b628c000000000000000000", + "b": "0x1fa0d4b50af9c900000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1470d4fb6b628dfa0d4b50af9c900000", + "a_m_sub_b_m": "0x1470d4fb6b628a05f2b4af5063700000", + "a_m_mul_b_m": "0x26962d11f8c743479eecca3763e02d14e", + "a_eq_b": false, + "a_m_pow_b": "0x2681f716b31cb411f8225ad7aedde8538" + }, + { + "a": "0x1534d83a3d72c2000000000000000", + "b": "0xf5e1df237cd120000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1534d83a4cd0dff237cd120000000", + "a_m_sub_b_m": "0x1534d83a2e14a40dc832ee0000000", + "a_m_mul_b_m": "0x9467b068a90d0a05b9eb6b50c37c526e", + "a_eq_b": false, + "a_m_pow_b": "0x125588b67967ba9c5491d97ffc262ac7d" + }, + { + "a": "0x0", + "b": "0x28c470508e45720000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x28c470508e45720000000", + "a_m_sub_b_m": "0x314107b9ef7236c389b86bb83bd4f48bb", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x602acb42a9cc", + "b": "0x2239d6", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x602acb64e3a2", + "a_m_sub_b_m": "0x602acb206ff6", + "a_m_mul_b_m": "0xcdb68e9e24ea05c88", + "a_eq_b": false, + "a_m_pow_b": "0x232348b8645c380e3b6ff79e1d89e3b38" + }, + { + "a": "0x15965a020754ce0000000000000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x15965a020754ce0000000000000", + "a_m_sub_b_m": "0x15965a020754ce0000000000000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1f1c02a115425e00", + "b": "0x1f1c02a115425e00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x3e3805422a84bc00", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x3c7cbb39669a2f958b630a09a840000", + "a_eq_b": true, + "a_m_pow_b": "0x1e52406e83c22eabd39fa5aa2f5bc8719" + }, + { + "a": "0x2b2968fda10fd800000000000000000", + "b": "0x2b2968fda10fd800000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x5652d1fb421fb000000000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x2a97946fec2698c627a15b635a4500ffd", + "a_eq_b": true, + "a_m_pow_b": "0x7665f5ca617689362e33ad47b2985197" + }, + { + "a": "0x21477b6a4829", + "b": "0x21477b6a4829", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x428ef6d49052", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x45381c7170de6353c4b1691", + "a_eq_b": true, + "a_m_pow_b": "0x1d66ef8147f20e0089b35d8226081f14a" + }, + { + "a": "0x2036aedbd", + "b": "0x28915816ff329e0000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x28915816ff329e00000000002036aedbd", + "a_m_sub_b_m": "0x8afafa2f03fc187fa08f9fdce0ba3678", + "a_m_mul_b_m": "0x1fb0efa6eefcce17081c73d16fb2c793b", + "a_eq_b": false, + "a_m_pow_b": "0x11f9ce180a3c1ef2be7c86c882d7400e7" + }, + { + "a": "0x8a84af4cb031f8000", + "b": "0x873e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x8a84af4cb0320073e", + "a_m_sub_b_m": "0x8a84af4cb031ef8c2", + "a_m_mul_b_m": "0x492d8493e57d05e210000", + "a_eq_b": false, + "a_m_pow_b": "0x20c493be91d5dc8ca2c409f73fbdf69bb" + }, + { + "a": "0x6137e5028e77dc00000000000000000", + "b": "0x390881a2c41032000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x6170ed84313bec32000000000000000", + "a_m_sub_b_m": "0x60fedc80ebb3cbce000000000000000", + "a_m_mul_b_m": "0x21c8e0bf8e1170d2ac486157d1e5aa444", + "a_eq_b": false, + "a_m_pow_b": "0x19ef44f8fb2022931b889959159b2b9af" + }, + { + "a": "0xee66f", + "b": "0x65", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xee6d4", + "a_m_sub_b_m": "0xee60a", + "a_m_mul_b_m": "0x5e0e9cb", + "a_eq_b": false, + "a_m_pow_b": "0x1c09ad8a53e473b09e349628722700b97" + }, + { + "a": "0x39df172ba4", + "b": "0x10582fc6f7866c0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x10583364e8f9264", + "a_m_sub_b_m": "0x314107b9ef725f87f9f8a1d184cee0d9f", + "a_m_mul_b_m": "0x3b1e0efa101f16831da41300", + "a_eq_b": false, + "a_m_pow_b": "0x21572ee1c1ab6bec51147d50d59ee22a3" + }, + { + "a": "0x3c7a9479e7749600000", + "b": "0x2d48457dff3254f2d47595b016c835975", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2d48457dff32552f4f0a0f978b5e35975", + "a_m_sub_b_m": "0x3f8c23bf0400ad1a027de350ba2bef46", + "a_m_mul_b_m": "0x99bd11ae2fc4d47b5853129ebb3511b6", + "a_eq_b": false, + "a_m_pow_b": "0x1de765c78da3b1da1ea46cbff7630a36d" + }, + { + "a": "0x24408c04c6f446806c1378e75627b9de7", + "b": "0x2834fb5192e64e0000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x24408c04c97796358541ddc75627b9de7", + "a_m_sub_b_m": "0x24408c04c470f6cb52e514075627b9de7", + "a_m_mul_b_m": "0x1765c322ac7d450d1711bfd38e4a0451d", + "a_eq_b": false, + "a_m_pow_b": "0xc42db8c63848e0eedb89244ea96a567b" + }, + { + "a": "0x1110124382161000000", + "b": "0x7729d32e9ee0c4000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7729d32fafe1e8382161000000", + "a_m_sub_b_m": "0x314107b27cd52caf1c0efd7fc3e4f48bb", + "a_m_mul_b_m": "0x220c93c2e101de17b1dfeb164dfe66dea", + "a_eq_b": false, + "a_m_pow_b": "0x11659a9246852804703e8bb7b89470e1" + }, + { + "a": "0x124b3e", + "b": "0x794bf3c09c48", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x794bf3d2e786", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f268ee9a0f7b1", + "a_m_mul_b_m": "0x8aafdc459737ef170", + "a_eq_b": false, + "a_m_pow_b": "0x91825745b22e54707b40fcf49bbddfd3" + }, + { + "a": "0x2da7ecf999bd72", + "b": "0x4", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2da7ecf999bd76", + "a_m_sub_b_m": "0x2da7ecf999bd6e", + "a_m_mul_b_m": "0xb69fb3e666f5c8", + "a_eq_b": false, + "a_m_pow_b": "0x153b004349063d3b5b8ebd082b957554c" + }, + { + "a": "0x159bce9f494b5e000000000", + "b": "0x81be071d8a0f800000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x8317c4077ea435e000000000", + "a_m_sub_b_m": "0x314107b9e76c1ae4c0b14d5badd4f48bb", + "a_m_mul_b_m": "0x20c9f929d9c418250427ded9a0e9eafa9", + "a_eq_b": false, + "a_m_pow_b": "0x17120d8e0e1e78e748763206ae86b22e6" + }, + { + "a": "0xcd4788007", + "b": "0x2b6bca2a2be7929653c9a923672bbe7b3", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2b6bca2a2be7929653c9a9243473467ba", + "a_m_sub_b_m": "0x5d53d8fc38accf1a63f50db13f0be10f", + "a_m_mul_b_m": "0x3105bcad3f2923d311c7d90ae06a0e294", + "a_eq_b": false, + "a_m_pow_b": "0x61248a8bc0d652457088056876409062" + }, + { + "a": "0x2884b5178c487e0000000000000", + "b": "0x165", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2884b5178c487e0000000000165", + "a_m_sub_b_m": "0x2884b5178c487dffffffffffe9b", + "a_m_mul_b_m": "0x38811089d6a117b60000000000000", + "a_eq_b": false, + "a_m_pow_b": "0xccb9bc0dd9dcdbc5d5c370dc01074021" + }, + { + "a": "0xa21cf7575", + "b": "0x619e032bf7b", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x624020234f0", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f99cb1eebfeb5", + "a_m_mul_b_m": "0x3dd1099aebd05829ba37", + "a_eq_b": false, + "a_m_pow_b": "0x6e91ef2f22ea029cc881fa1dfec409a3" + }, + { + "a": "0x8bec3e31c6d30000000000000", + "b": "0x60e7e8358f43f80000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x8bec9f19af088f43f80000000", + "a_m_sub_b_m": "0x8bebdd49de9d70bc080000000", + "a_m_mul_b_m": "0x19ed3ca56aed26cd83ecf5027f49d01b7", + "a_eq_b": false, + "a_m_pow_b": "0x1aee18acd49979f369b5d583a22d42c89" + }, + { + "a": "0x7a0d32927c12b40000000000000", + "b": "0x297841b8aeba7e00000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7a0d3292a58af5b8aeba7e00000", + "a_m_sub_b_m": "0x7a0d3292529a724751458200000", + "a_m_mul_b_m": "0x22638525dafe1d8fccd7ac7d5f1d3fa79", + "a_eq_b": false, + "a_m_pow_b": "0x25b45d37cde4744484c0aaefb1b87f44a" + }, + { + "a": "0xd7936a8f387a1", + "b": "0x2012677895c6be59658f16c91dd6d47e4", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2012677895c6be59658fee5c88660cf85", + "a_m_sub_b_m": "0x112ea04159aba12e947abac7fa8d58878", + "a_m_mul_b_m": "0x16bacfc0418c329ce985ec173be722845", + "a_eq_b": false, + "a_m_pow_b": "0x2c1de73367dac991189297543cdbf4244" + }, + { + "a": "0x4dc1265f8bf8980000", + "b": "0x4dc1265f8bf8980000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x9b824cbf17f1300000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x2e86c7013f953b18489281701010d4e17", + "a_eq_b": true, + "a_m_pow_b": "0x2f31c138dd3879eced16b10866aff9970" + }, + { + "a": "0x767ef533f7397400000000000000000", + "b": "0xaaac263246886800000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x767ef5dea35fa646886800000000000", + "a_m_sub_b_m": "0x767ef4894b1341b9779800000000000", + "a_m_mul_b_m": "0x26f450463cd620322b7cea36e6e7b3889", + "a_eq_b": false, + "a_m_pow_b": "0x1277a1428b8a2b4e70e84d20158d1612b" + }, + { + "a": "0x2b4c25598c9d62000000", + "b": "0x2e91e70af224af354e4907635201910c6", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2e91e70af224b1ea109ea02d2821910c6", + "a_m_sub_b_m": "0x2af20aefd4db3076e158b6431f3637f5", + "a_m_mul_b_m": "0xe58d3a639c80ecb17c3b64526b438202", + "a_eq_b": false, + "a_m_pow_b": "0x2af7b49d67030f7305b8fbde1998b2b8" + }, + { + "a": "0x42eeee0c276ffc0000000000", + "b": "0x39dc4b87cf12c2000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x468cb2c4a461282000000000", + "a_m_sub_b_m": "0x3f512953aa7ecfe000000000", + "a_m_mul_b_m": "0x1e15bb041ac2a868b869c61213151b10b", + "a_eq_b": false, + "a_m_pow_b": "0x65af0360a9baeb157e8d2793b6aef610" + }, + { + "a": "0xac4cd9", + "b": "0x2b56b9357b34dc8b053f3c15842ce91c0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2b56b9357b34dc8b053f3c158437ade99", + "a_m_sub_b_m": "0x5ea4e84743d82fcf4c9bde829b2d03d4", + "a_m_mul_b_m": "0x2b4ef14b0d01caaeb46105f637514ac85", + "a_eq_b": false, + "a_m_pow_b": "0x22a4105b37df613b2638215289a57798b" + }, + { + "a": "0xa24516401b76600", + "b": "0xe95f2", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xa24516401c5fbf2", + "a_m_sub_b_m": "0xa24516401a8d00e", + "a_m_mul_b_m": "0x93ed2d2c3d90f1bc6c00", + "a_eq_b": false, + "a_m_pow_b": "0x6f8ec5e30535303166462b753447553a" + }, + { + "a": "0x604364637119f8000", + "b": "0x21b7010", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x60436463713baf010", + "a_m_sub_b_m": "0x6043646370f840ff0", + "a_m_mul_b_m": "0xcad807dd80e95f961f80000", + "a_eq_b": false, + "a_m_pow_b": "0xfd0a7d80305c9f7513093b0ca579e777" + }, + { + "a": "0x305438386f922c0000000000000", + "b": "0x2e54c", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x305438386f922c000000002e54c", + "a_m_sub_b_m": "0x305438386f922bffffffffd1ab4", + "a_m_mul_b_m": "0x8bf21fbc0bb338c1100000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x257ae4962cdf6db2ae9e1890a3a543184" + }, + { + "a": "0x257e7ef7b848610cfd21276c21519401c", + "b": "0x37c713d2a0fb", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x257e7ef7b848610cfd212ae8928ebe117", + "a_m_sub_b_m": "0x257e7ef7b848610cfd2123efb01469f21", + "a_m_mul_b_m": "0x29b2441626f1218d14807abc032c0c2d9", + "a_eq_b": false, + "a_m_pow_b": "0x273f04e68890b863cf9c8abe920598673" + }, + { + "a": "0x61cf9175d758a0000", + "b": "0x24a76e032a9", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x61cf919a7ec6a32a9", + "a_m_sub_b_m": "0x61cf91512fea9cd57", + "a_m_mul_b_m": "0xe0128e4dc5a5ad922678c1a0000", + "a_eq_b": false, + "a_m_pow_b": "0x2f75d26092c12573901448308c4a890be" + }, + { + "a": "0x0", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x0", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x37aa6dd68d60d2", + "b": "0x37aa6dd68d60d2", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x6f54dbad1ac1a4", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xc1aaca840d3c70806c6e3f22c44", + "a_eq_b": true, + "a_m_pow_b": "0x145e685091838e9cce41f0480429cf6c1" + }, + { + "a": "0x6e", + "b": "0x17d5da95f0377500000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x17d5da95f037750000000000006e", + "a_m_sub_b_m": "0x3141063c91c9008482b8f9fdadd4f4929", + "a_m_mul_b_m": "0xa3de3ec6d37d44600000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x954a50b402f8c15a2f71e10275a87d3a" + }, + { + "a": "0x22e4025346987b05274219d3ecdc39412", + "b": "0x142", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x22e4025346987b05274219d3ecdc39554", + "a_m_sub_b_m": "0x22e4025346987b05274219d3ecdc392d0", + "a_m_mul_b_m": "0x4e00b2589eda760b125d6a11b5637818", + "a_eq_b": false, + "a_m_pow_b": "0x1da9c3d0a0fc64a3e3f60a277f82b1a6a" + }, + { + "a": "0x252a33c33037e5725e5a1bdaea747795e", + "b": "0x3dc983a887c21400", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x252a33c33037e5726236b41572f098d5e", + "a_m_sub_b_m": "0x252a33c33037e5725a7d83a061f85655e", + "a_m_mul_b_m": "0x21a6d596be8e104a7b3e55b3783df8097", + "a_eq_b": false, + "a_m_pow_b": "0xe7249c64051117f30e6d7f693e0a6939" + }, + { + "a": "0x130b6bbc0addc6", + "b": "0x2d39a4bb0d62b68d41880fa4b840fbb0b", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2d39a4bb0d62b68d4189405b7401a98d1", + "a_m_sub_b_m": "0x40762fee20fa8fab8821b0fb154a6b76", + "a_m_mul_b_m": "0x269195668f82d6569d97ac645818ed33b", + "a_eq_b": false, + "a_m_pow_b": "0x14fef800fbce52b95f48eab88bd5224f3" + }, + { + "a": "0x26d8d8f1326ab000", + "b": "0x26d8d8f1326ab000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x4db1b1e264d56000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x5e5181669d4a89cffcd393639000000", + "a_eq_b": true, + "a_m_pow_b": "0x1d0643aa72f5d932b25ad9ab07d8c141f" + }, + { + "a": "0x27f65853ae", + "b": "0x27f65853ae", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x4fecb0a75c", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x63cfbf75e500afa4a44", + "a_eq_b": true, + "a_m_pow_b": "0x228a787ee28109cf52f3c64b19bdd8b66" + }, + { + "a": "0x9b08b1b45dcf580000", + "b": "0x94a1e2a776d6a80000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x94ab9332921c84f580000", + "a_m_sub_b_m": "0x314107b9ef71caefc7ec9e6ce2ca748bb", + "a_m_mul_b_m": "0xe1473774b97ee8804afc05d9344bcfcc", + "a_eq_b": false, + "a_m_pow_b": "0xa8cc8121b2d58714d694b64c211fb636" + }, + { + "a": "0x2517b1eb40b2a00000000", + "b": "0x12598e9846ab0b000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x127ea64a31ebbda00000000", + "a_m_sub_b_m": "0x314107b9ef602b1113ad8fa54dd4f48bb", + "a_m_mul_b_m": "0x24ec6944ccfc65756270605290f27da13", + "a_eq_b": false, + "a_m_pow_b": "0x10bdf3d96cb30ed88cd4749c1e3072d1" + }, + { + "a": "0x0", + "b": "0x7cdf2c7d", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7cdf2c7d", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fda60701c3e", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x1216265a8ad27d00", + "b": "0x3", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1216265a8ad27d03", + "a_m_sub_b_m": "0x1216265a8ad27cfd", + "a_m_mul_b_m": "0x3642730fa0777700", + "a_eq_b": false, + "a_m_pow_b": "0x16a72a34c13607b8da0747b811e4de723" + }, + { + "a": "0x2d2f744290671493804fe973d261cec19", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2d2f744290671493804fe973d261cec19", + "a_m_sub_b_m": "0x2d2f744290671493804fe973d261cec19", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0xb3f9553dbdaf58000000", + "b": "0xa", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xb3f9553dbdaf5800000a", + "a_m_sub_b_m": "0xb3f9553dbdaf57fffff6", + "a_m_mul_b_m": "0x707bd546968d970000000", + "a_eq_b": false, + "a_m_pow_b": "0x2ab9befcd481856ef3ba16120a34d411d" + }, + { + "a": "0x9b6bc5c0024", + "b": "0x285f2d46c36f8e0000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x285f2d507a2bea0024", + "a_m_sub_b_m": "0x314107b9ef725f857416262ce2a1d48df", + "a_m_mul_b_m": "0x18829f614a7c7a37a5283aff80000", + "a_eq_b": false, + "a_m_pow_b": "0x1cd3a8052af3ed62f73acc49669d3f42" + }, + { + "a": "0x317942b2eeeaae00000000", + "b": "0x25fc8def604b6a00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x317942d8eb789d604b6a00", + "a_m_sub_b_m": "0x3179428cf25cbe9fb49600", + "a_m_mul_b_m": "0x248e397d2b4a02521ac8ddaf027ac9df6", + "a_eq_b": false, + "a_m_pow_b": "0x1259aa23c7a182e385cb0f85fa6bc83c8" + }, + { + "a": "0xec4a394de2d5900000000", + "b": "0x354a29099b84240000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x409214fac12b0c23f44e8d7e22b0b745", + "a_m_sub_b_m": "0x2d37e66a4361875a2d5fd6d0eba9e9176", + "a_m_mul_b_m": "0x2b06ba47612c6c2f859a2ee1228366c24", + "a_eq_b": false, + "a_m_pow_b": "0x92ef4fbe9e2f18216337f22947ff7e7f" + }, + { + "a": "0x7", + "b": "0x25", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2c", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadd4f489d", + "a_m_mul_b_m": "0x103", + "a_eq_b": false, + "a_m_pow_b": "0xea496e6af6c04ef2c300b8bea7" + }, + { + "a": "0x286093b8de0e5a000000000000000000", + "b": "0x2c48ae37406dc1579647640a1b6a659ef", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2eceb772ce4ea6f79647640a1b6a659ef", + "a_m_sub_b_m": "0x77e62be3ce583d063c195f3926a8eecc", + "a_m_mul_b_m": "0x9791b577e1c7d5939271105fbc7a5e4d", + "a_eq_b": false, + "a_m_pow_b": "0x158312a2211c43b63ca3bca72f8105eef" + }, + { + "a": "0x137c65b6cd36e00", + "b": "0x4237b3", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x137c65b6d15a5b3", + "a_m_sub_b_m": "0x137c65b6c91364d", + "a_m_mul_b_m": "0x50a4f92f64d0e077ea00", + "a_eq_b": false, + "a_m_pow_b": "0x1a3d0c5a13f7a60c023b685eb3bb7e8e9" + }, + { + "a": "0xa825fb926267c80000000000000000", + "b": "0xeb088d71c59b", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0xa825fb926267c80000eb088d71c59b", + "a_m_sub_b_m": "0xa825fb926267c7ffff14f7728e3a65", + "a_m_mul_b_m": "0x30cd0a2dab9de2f56d71aa733fc51013a", + "a_eq_b": false, + "a_m_pow_b": "0x14a4ca372ad3dd53ed5c7ce93171cacca" + }, + { + "a": "0x2ba8844439e6b800", + "b": "0x2d02cd7e3", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2ba884470a138fe3", + "a_m_sub_b_m": "0x2ba8844169b9e01d", + "a_m_mul_b_m": "0x7ad199c7dc156e47bc1d2800", + "a_eq_b": false, + "a_m_pow_b": "0x108342cb5b0eef0e97bea441983cf0769" + }, + { + "a": "0x2aa880354277c", + "b": "0x2aa880354277c", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x5551006a84ef8", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x71bb8f9ffebd5b856d7770410", + "a_eq_b": true, + "a_m_pow_b": "0x2cdef543b96cfbbaaae4181d795533cd3" + }, + { + "a": "0x2ba5612f7600aa45e44e1b08c69199a8a", + "b": "0x2ecdb0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2ba5612f7600aa45e44e1b08c6948683a", + "a_m_sub_b_m": "0x2ba5612f7600aa45e44e1b08c68eaccda", + "a_m_mul_b_m": "0x864335197455514daf65804187f88ef3", + "a_eq_b": false, + "a_m_pow_b": "0x245eec7b0e38305e97f5f7837d2d2e50" + }, + { + "a": "0x3bc", + "b": "0x7275ef574b0e340000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x7275ef574b0e3403bc", + "a_m_sub_b_m": "0x314107b9ef725f80d2aa0488fcf1b4c77", + "a_m_mul_b_m": "0x1ab7069c9fc490a300000", + "a_eq_b": false, + "a_m_pow_b": "0x1c3fece2316e62d98ebbe22964f8c0ef9" + }, + { + "a": "0x7d6478b", + "b": "0x54d6798d5ad4", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x54d68163a25f", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f4b046b983572", + "a_m_mul_b_m": "0x298e05205cfed291d1c", + "a_eq_b": false, + "a_m_pow_b": "0x21f541f5eeff6bcb427f2a3a5af923a40" + }, + { + "a": "0x23371af07dfe4a0000000000", + "b": "0x8920d8e7190c6800000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x8920fc1e33fce5fe4a0000000000", + "a_m_sub_b_m": "0x3140ff27e4175fa63b68de9dadd4f48bb", + "a_m_mul_b_m": "0x7009cc73f7d2359d0ab35aaf4ab7b581", + "a_eq_b": false, + "a_m_pow_b": "0x2eb258fe89b31c4090f54825bd4d2b4cf" + }, + { + "a": "0x1dd202024363f80000000000000000", + "b": "0x52bce88239d8c4000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x1dd202076f3280239d8c4000000000", + "a_m_sub_b_m": "0x1dd201fd17956fdc6273c000000000", + "a_m_mul_b_m": "0x2b6800bd53d097eb1380b696bad46681b", + "a_eq_b": false, + "a_m_pow_b": "0x749cf65bbc24731ab4f96aba31342828" + }, + { + "a": "0x19d5df9a658e2d00000000000", + "b": "0x21177f56b90b", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x19d5df9a658e2f1177f56b90b", + "a_m_sub_b_m": "0x19d5df9a658e2aee880a946f5", + "a_m_mul_b_m": "0x1d42c06b1e99e32bbfd63948110fcba87", + "a_eq_b": false, + "a_m_pow_b": "0x15ae10c45fd860364698619a8beab064a" + }, + { + "a": "0x2a4cf691a143ee000000000000000000", + "b": "0x103e98", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x2a4cf691a143ee000000000000103e98", + "a_m_sub_b_m": "0x2a4cf691a143edffffffffffffefc168", + "a_m_mul_b_m": "0x6b393bb4f033c737c4556157864d3218", + "a_eq_b": false, + "a_m_pow_b": "0x117f2cd45d63f93e80448e3a7be951495" + }, + { + "a": "0x0", + "b": "0x95aa14598b7180000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48bb", + "a_m_add_b_m": "0x95aa14598b7180000", + "a_m_sub_b_m": "0x314107b9ef725f87645ee5a42263748bb", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + } + ], + "even_mod_130": [ + { + "a": "0x63b4dfd", + "b": "0x2d96d8c4bb744a000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2d96d8c4bb744a0063b4dfd", + "a_m_sub_b_m": "0x314107b9ef44c8af354d85b3ae38a96b7", + "a_m_mul_b_m": "0x11c18bbff0354584a2f22000000000", + "a_eq_b": false, + "a_m_pow_b": "0x1fbf7663788416877c17f5ccd65422ea1" + }, + { + "a": "0x8c937e52e82748000000000000", + "b": "0x8c937e52e82748000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x11926fca5d04e90000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1d6c54700b3282ffa9e5bba4fff004350", + "a_eq_b": true, + "a_m_pow_b": "0x1592e4d2faa000b861f524f2f919bf912" + }, + { + "a": "0x59fc682bd865d000", + "b": "0x201b9937a", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x59fc682dda1f637a", + "a_m_sub_b_m": "0x59fc6829d6ac3c86", + "a_m_mul_b_m": "0xb49407fdf66e398ae6f52000", + "a_eq_b": false, + "a_m_pow_b": "0x229835d3fd5d5e7d935ad2ba098f2d1c0" + }, + { + "a": "0xf82940b0f4c8480000000000000000", + "b": "0x2e2cd159aebba80d2820bc51ddb3aefa6", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2e3c53edb9caf491a820bc51ddb3aefa6", + "a_m_sub_b_m": "0x323b8f44bc603ff51e83dabd02145914", + "a_m_mul_b_m": "0x21b5fc4b57b80c90b976e93925733af96", + "a_eq_b": false, + "a_m_pow_b": "0x2a19fd7bc369251f453afcdc39a048996" + }, + { + "a": "0x0", + "b": "0x23aeedeb178176", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x23aeedeb178176", + "a_m_sub_b_m": "0x314107b9ef725f87fa06bf0ecf237c744", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x1d6267a97f6f4f000000000", + "b": "0x4d5c9b", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1d6267a97f6f4f0004d5c9b", + "a_m_sub_b_m": "0x1d6267a97f6f4efffb2a365", + "a_m_mul_b_m": "0x8e13a55d101e6ebc8d5000000000", + "a_eq_b": false, + "a_m_pow_b": "0x12120e65bf9fd9fb95c1932a8542460a8" + }, + { + "a": "0x281eb88e5d549faad44c8fd001a0ff218", + "b": "0x3a7e1e5f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x281eb88e5d549faad44c8fd00548e1077", + "a_m_sub_b_m": "0x281eb88e5d549faad44c8fcffdf91d3b9", + "a_m_mul_b_m": "0xe76e06db892cd4c2f317b4243ca53684", + "a_eq_b": false, + "a_m_pow_b": "0x134e17c060096750cbbfbca327f425f7e" + }, + { + "a": "0x8e2f6fee957008000000", + "b": "0x473c940132402800", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x8e2fb72b29713a402800", + "a_m_sub_b_m": "0x8e2f28b2016ed5bfd800", + "a_m_mul_b_m": "0xf188c5371ec1a02d171f1e7fd313599c", + "a_eq_b": false, + "a_m_pow_b": "0x38a230d28e4ca702973f3eae6b845210" + }, + { + "a": "0xfe7", + "b": "0x6a2a5e75a241", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x6a2a5e75b228", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f35b07ed9b660", + "a_m_mul_b_m": "0x69847c420a737a7", + "a_eq_b": false, + "a_m_pow_b": "0x28f565776cb96cf44ca8a72744581b2b7" + }, + { + "a": "0xa5", + "b": "0x13", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xb8", + "a_m_sub_b_m": "0x92", + "a_m_mul_b_m": "0xc3f", + "a_eq_b": false, + "a_m_pow_b": "0xe99e6e467cff979c9403fff1f83961f1" + }, + { + "a": "0x4abf6d9ec40d7c000000", + "b": "0x236b62d2f122", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x4abf6d9ee778ded2f122", + "a_m_sub_b_m": "0x4abf6d9ea0a2192d0ede", + "a_m_mul_b_m": "0xa5786da6590a07fd62e738678000000", + "a_eq_b": false, + "a_m_pow_b": "0x9e4c86ecefe36b01f0a18861989c2828" + }, + { + "a": "0x2368d50b355170000000000", + "b": "0xccfcb8159", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2368d50b355170ccfcb8159", + "a_m_sub_b_m": "0x2368d50b35516f330347ea7", + "a_m_mul_b_m": "0x1c5a7e6cfa29e17e762bff0000000000", + "a_eq_b": false, + "a_m_pow_b": "0x2dbc8f900bb49ec653a4ad3fedfdd2e76" + }, + { + "a": "0x0", + "b": "0xf19", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xf19", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadd4f39a1", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x10be6135dc7a6f00000000000", + "b": "0x2b08554bda", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x10be6135dc7a6f02b08554bda", + "a_m_sub_b_m": "0x10be6135dc7a6efd4f7aab426", + "a_m_mul_b_m": "0x1ef76f16eeaf0324cd49da207e5aa05d4", + "a_eq_b": false, + "a_m_pow_b": "0x734ff7dfc07a3e56285e21198c4a2090" + }, + { + "a": "0x37bd659caf433200000000", + "b": "0x108fe6b571fe5600000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x108fe6ed2f63f2af433200000000", + "a_m_sub_b_m": "0x314106b0f10a843e6e73ee30cdd4f48ba", + "a_m_mul_b_m": "0x25a7c0e83c2e7de1876b408f996e3db3a", + "a_eq_b": false, + "a_m_pow_b": "0xaeaf71c1019e8778bd63b25e28f9f12" + }, + { + "a": "0x1e5ea918a403e7000000000000000", + "b": "0x63922376dbd8", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1e5ea918a403e700063922376dbd8", + "a_m_sub_b_m": "0x1e5ea918a403e6fff9c6ddc892428", + "a_m_mul_b_m": "0x2020eda4bd3614a95be5e08527d48f80", + "a_eq_b": false, + "a_m_pow_b": "0x1e5a30ef394fc7321b2ea9fb0cb3cca30" + }, + { + "a": "0xd795f2c5013b8800000000000", + "b": "0x2c41ebadbbe4140000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2c41f9271b106413b8800000000000", + "a_m_sub_b_m": "0x313e439c0c2c940bbb4481fdadd4f48ba", + "a_m_mul_b_m": "0x53f824dd0b500358d45a342e3d67737e", + "a_eq_b": false, + "a_m_pow_b": "0x889b7c5d3c822e01178d119eff98ab24" + }, + { + "a": "0x26b58a97c971c400000000000000000", + "b": "0x351933d5", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x26b58a97c971c4000000000351933d5", + "a_m_sub_b_m": "0x26b58a97c971c3fffffffffcae6cc2b", + "a_m_mul_b_m": "0x2266f51964f595ef73b0e6eeeb577908c", + "a_eq_b": false, + "a_m_pow_b": "0x2ed3ed2645c10a18f9286e0dd6ef3adc4" + }, + { + "a": "0x158082d706d3de00", + "b": "0xd0a4d05d33fb000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xd0a4d05d33fc58082d706d3de00", + "a_m_sub_b_m": "0x314106e94aa202540061022b1e42326ba", + "a_m_mul_b_m": "0x177bed0f68d150f2e5220553acb00539c", + "a_eq_b": false, + "a_m_pow_b": "0x36f6a762813d096976b95be1336c7602" + }, + { + "a": "0x15f56eb93d0", + "b": "0x20a5a0322c57842a9934c472a0c72fe13", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x20a5a0322c57842a9934c4889635e91e3", + "a_m_sub_b_m": "0x109b6787c31adb5d60d435a1027c7de77", + "a_m_mul_b_m": "0x1a0f926e84bb65d2ec70b7099eab66ca4", + "a_eq_b": false, + "a_m_pow_b": "0x25a4ab0e7734d61deb9894ac9d22bf950" + }, + { + "a": "0x599ad3364ce", + "b": "0x5398dac7", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x59a00cc3f95", + "a_m_sub_b_m": "0x599599a8a07", + "a_m_mul_b_m": "0x1d42b2fb8260b1ac822", + "a_eq_b": false, + "a_m_pow_b": "0x9b94d3eb88f0a4d97540a29b361501f0" + }, + { + "a": "0x0", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x0", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x2e9ef02c46643800000000000000000", + "b": "0x1", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2e9ef02c46643800000000000000001", + "a_m_sub_b_m": "0x2e9ef02c466437fffffffffffffffff", + "a_m_mul_b_m": "0x2e9ef02c46643800000000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x2e9ef02c46643800000000000000000" + }, + { + "a": "0x19a", + "b": "0x323d996f31d65", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x323d996f31eff", + "a_m_sub_b_m": "0x314107b9ef725f87fa08c7c01465c2cef", + "a_m_mul_b_m": "0x5076a7bc15d13c2", + "a_eq_b": false, + "a_m_pow_b": "0xb85190334cc0ad09ef967759ea0400f6" + }, + { + "a": "0x2f3c58d8cc6ff", + "b": "0xd9938a000fc21800000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xd9938a2f4c1af0cc6ff", + "a_m_sub_b_m": "0x314107b9ef725eae667f292a4495c0fb9", + "a_m_mul_b_m": "0x2825606d54957e48d7f9cf0e5e800000", + "a_eq_b": false, + "a_m_pow_b": "0x626d3f8843ec9d66a76c5bc9cfafe4f" + }, + { + "a": "0x105f95d978104a000000000", + "b": "0x21a7e256db6ffe12c1a6f0c9af1f7e90f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x21a7e256db805da89b1f0113af1f7e90f", + "a_m_sub_b_m": "0xf9925631412c10b11da197dfeb575fab", + "a_m_mul_b_m": "0x17f7a198e6b750b68d98abd29df53199e", + "a_eq_b": false, + "a_m_pow_b": "0x22d7acdf6cf36ed4bd94c4bd03bd3580c" + }, + { + "a": "0x0", + "b": "0x7939992", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x7939992", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdad5bbaf28", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x6bd00134ea66c0", + "b": "0x33f6a4566e085e00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x34627457a2f2c4c0", + "a_m_sub_b_m": "0x314107b9ef725f87f6d04cb85a431517a", + "a_m_mul_b_m": "0x15e24f545a88eb88385567c7ba8000", + "a_eq_b": false, + "a_m_pow_b": "0x31678b9cd85710f6035674dee003ea7e" + }, + { + "a": "0x95e73f", + "b": "0x4a1", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x95ebe0", + "a_m_sub_b_m": "0x95e29e", + "a_m_mul_b_m": "0x2b5e36a9f", + "a_eq_b": false, + "a_m_pow_b": "0x2d6f8176259fc59414a977e4002bb0d87" + }, + { + "a": "0x12b49fde96473a000000000000000", + "b": "0x2868fd769c01ea", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x12b49fde96473a02868fd769c01ea", + "a_m_sub_b_m": "0x12b49fde964739fd797028963fe16", + "a_m_mul_b_m": "0x2519a6920549d317aa20c385268c52f36", + "a_eq_b": false, + "a_m_pow_b": "0x9709d93b35911474157330019fa6da68" + }, + { + "a": "0xe204be894f5ab80000", + "b": "0xa1c3289f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xe204be894ffc7b289f", + "a_m_sub_b_m": "0xe204be894eb8f4d761", + "a_m_mul_b_m": "0x8ed1494e9c374b809e18480000", + "a_eq_b": false, + "a_m_pow_b": "0x20a32b7f59e8d2040d281f8a779b145c8" + }, + { + "a": "0x27e54204ca86c20", + "b": "0xa2968", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x27e54204cb29588", + "a_m_sub_b_m": "0x27e54204c9e42b8", + "a_m_mul_b_m": "0x1956880e57fa56fd0d00", + "a_eq_b": false, + "a_m_pow_b": "0x2b1288794136e3350ed94ab85396770a2" + }, + { + "a": "0x14f3369", + "b": "0xcb", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x14f3434", + "a_m_sub_b_m": "0x14f329e", + "a_m_mul_b_m": "0x109cdc443", + "a_eq_b": false, + "a_m_pow_b": "0x269511450b44d7c7148874a4e09b82601" + }, + { + "a": "0x1c7c65fb3f0ce90000000", + "b": "0x14ff5e7", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1c7c65fb3f0ce914ff5e7", + "a_m_sub_b_m": "0x1c7c65fb3f0ce8eb00a19", + "a_m_mul_b_m": "0x25622635a0faf226a33f0000000", + "a_eq_b": false, + "a_m_pow_b": "0xe0fe1c0e898244546807fc4bfb24557a" + }, + { + "a": "0x45", + "b": "0x6dd6033f19cc6c00000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x6dd6033f19cc6c00000000045", + "a_m_sub_b_m": "0x314107b9819c5c48e03c8dfdadd4f48ff", + "a_m_mul_b_m": "0x1d9aaee001f4191c00000000000", + "a_eq_b": false, + "a_m_pow_b": "0x1c3b856b3498e95fa5bd720f0d2a3bfd1" + }, + { + "a": "0x643268b6cc4", + "b": "0xd74f278e3710a000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xd74f278e9b4308b6cc4", + "a_m_sub_b_m": "0x314107b9ef725eb0aae16c2acf9dab57e", + "a_m_mul_b_m": "0x544550fb2d6a0c885e40c3a8000000", + "a_eq_b": false, + "a_m_pow_b": "0x22dcce713212613d2b8ebc32e76973a2e" + }, + { + "a": "0x11b9c2c830ca41000", + "b": "0x13", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x11b9c2c830ca41013", + "a_m_sub_b_m": "0x11b9c2c830ca40fed", + "a_m_mul_b_m": "0x150c974db9f02d3000", + "a_eq_b": false, + "a_m_pow_b": "0x25304faec40ee454b8b1668312100e450" + }, + { + "a": "0x2761222f6b4", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2761222f6b4", + "a_m_sub_b_m": "0x2761222f6b4", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x31e0e36f2fd222000000000000000", + "b": "0x2e5ca781e4d012000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2e5fc5901bc30f222000000000000000", + "a_m_sub_b_m": "0x2e5b6f22b4948e3a1c08f9fdadd4f48ba", + "a_m_mul_b_m": "0x1fc4c5c57145fe41e4c6ff0a86bd7537e", + "a_eq_b": false, + "a_m_pow_b": "0x2d300a90a464bb1bec1c54e892500e208" + }, + { + "a": "0x56228be88787b40000000", + "b": "0x1f89a70", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x56228be88787b41f89a70", + "a_m_sub_b_m": "0x56228be88787b3e076590", + "a_m_mul_b_m": "0xa9c7f9e911ea6d4da6c00000000", + "a_eq_b": false, + "a_m_pow_b": "0xd90443f86eefbd32ec52b4ae311bbd4c" + }, + { + "a": "0x26bd88c22ef8a00000000000", + "b": "0x1eb474b948dd180000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1eb474b94b48f08c22ef8a00000000000", + "a_m_sub_b_m": "0x128c9300a90120141cf883fdadd4f48ba", + "a_m_mul_b_m": "0x25077e5c8c31cb0e0ee320339c945dea6", + "a_eq_b": false, + "a_m_pow_b": "0x1083bcb8d243a4b13ee2ea576f23b8ba0" + }, + { + "a": "0x6a0c", + "b": "0x1016e287cde1630000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1016e287cde1630000006a0c", + "a_m_sub_b_m": "0x314107b9ee70f15f7d2ae3cdadd4fb2c6", + "a_m_mul_b_m": "0x6aa3aded99cf98ea40000000000", + "a_eq_b": false, + "a_m_pow_b": "0x2747a8f1577241abb1b27f95eb823dd54" + }, + { + "a": "0x42", + "b": "0x423c22726d695c00000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x423c22726d695c00042", + "a_m_sub_b_m": "0x314107b9ef725f45bde687904478f48fc", + "a_m_mul_b_m": "0x111380e1803529b800000", + "a_eq_b": false, + "a_m_pow_b": "0xa319b9ace16768faac34df410931bd54" + }, + { + "a": "0x50f6c18a06efa80000000", + "b": "0x391ce8855cc4300000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x391ce88561d39c18a06efa80000000", + "a_m_sub_b_m": "0x313d75eb671ce43bbb9300ed55d4f48ba", + "a_m_mul_b_m": "0x1c62ec3f7e746ba8f67d460ee31bd28f0", + "a_eq_b": false, + "a_m_pow_b": "0x20db0c676e2b0926179c15c122bb075c0" + }, + { + "a": "0x180", + "b": "0x5b6a10d", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x5b6a28d", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdad798a92d", + "a_m_mul_b_m": "0x891f19380", + "a_eq_b": false, + "a_m_pow_b": "0x2964743a85d4f75f69e60ebab06dbc9e4" + }, + { + "a": "0x760", + "b": "0x760", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xec0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x366400", + "a_eq_b": true, + "a_m_pow_b": "0x1977fc11d0a1fe766559409f8147afab6" + }, + { + "a": "0x16fbf7d895cc1c000000000000000", + "b": "0x176381bba5b7f300", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x16fbf7d895cc1d76381bba5b7f300", + "a_m_sub_b_m": "0x16fbf7d895cc1a89c7e445a480d00", + "a_m_mul_b_m": "0x15ffbacaa7bea469680cd1cc9923d6764", + "a_eq_b": false, + "a_m_pow_b": "0x2cda2a4590053e25fc3cbe5bab76d589e" + }, + { + "a": "0x46b8997ff2a994000000000000000", + "b": "0x179f2c1208d1dc00000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x17e5e4ab88c48594000000000000000", + "a_m_sub_b_m": "0x3129af4676e980558e08f9fdadd4f48ba", + "a_m_mul_b_m": "0x20ac17dc000a74450da11bbeca4b91222", + "a_eq_b": false, + "a_m_pow_b": "0x2e17135169ad99218ec676d6b85d142fe" + }, + { + "a": "0x3167af3861a7d200000000000000000", + "b": "0x3167af3861a7d200000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x62cf5e70c34fa400000000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1ccd89f17a2f428a002ec809b2f2a1c38", + "a_eq_b": true, + "a_m_pow_b": "0x20a1ff4805235494921962133772799f8" + }, + { + "a": "0x84fde69c34a7f000", + "b": "0x4581c38404e90", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x85023eb86ce83e90", + "a_m_sub_b_m": "0x84f98e7ffc67a170", + "a_m_mul_b_m": "0x241bd8ab4b08b3a857664c9970000", + "a_eq_b": false, + "a_m_pow_b": "0x2d9f4c553f11fe2535f6e5837d6a280aa" + }, + { + "a": "0x79f37a0c7d5d48000000", + "b": "0x10", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x79f37a0c7d5d48000010", + "a_m_sub_b_m": "0x79f37a0c7d5d47fffff0", + "a_m_mul_b_m": "0x79f37a0c7d5d480000000", + "a_eq_b": false, + "a_m_pow_b": "0x2178a80fabfe6d88e53d56940738cdf18" + }, + { + "a": "0x382af26b78b9e20000000", + "b": "0x112f293fbc05030000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x495a1bab34bee50000000", + "a_m_sub_b_m": "0x26fbc92bbcb4df0000000", + "a_m_mul_b_m": "0xe77f8bf21f21a5b911282a76bae2e508", + "a_eq_b": false, + "a_m_pow_b": "0x2db27609fb7654e6a15473aa9917291d6" + }, + { + "a": "0x55d3eb5ed6fb000000", + "b": "0x55d3eb5ed6fb000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xaba7d6bdadf6000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x2efb7bc2b06cb7e585c1b5afc23307610", + "a_eq_b": true, + "a_m_pow_b": "0x1fdb868e003c83f94e99fb19aa35b04c0" + }, + { + "a": "0x3059ebb2ed1cae1937ed61f4ee8751766", + "b": "0x295930d929f77a0000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x287214d227a1c8913de467f740b25ceac", + "a_m_sub_b_m": "0x700bad9c325341937ed61f4ee8751766", + "a_m_mul_b_m": "0x18c3f896bff0ddf049b8612edf0d2e65e", + "a_eq_b": false, + "a_m_pow_b": "0x29908d8dc2134e67db8a34d2a351f21da" + }, + { + "a": "0x6e4e75a12e4f7c000000000000", + "b": "0x6e4e75a12e4f7c000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xdc9ceb425c9ef8000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1861ac776ff78607f6895d52c6e909126", + "a_eq_b": true, + "a_m_pow_b": "0x10c2ce32e1c0797e51dbac0e8b10dbac2" + }, + { + "a": "0xf8f0f9a4c3e3f000000000000000", + "b": "0x3218cfdd6f957c000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xf9231274a153857c000000000000", + "a_m_sub_b_m": "0xf8bee0d4e6745a84000000000000", + "a_m_mul_b_m": "0x145cb6d2f1458069d03428ea5f0a916aa", + "a_eq_b": false, + "a_m_pow_b": "0xaf7ddd06123bc699a1c738f266d82f1a" + }, + { + "a": "0xf9206b13f4c4c8000000000", + "b": "0xeaa160203dd34", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xf9206b13f5af6960203dd34", + "a_m_sub_b_m": "0xf9206b13f3da269fdfc22cc", + "a_m_mul_b_m": "0x763deae48602aeca82254c690b59bc08", + "a_eq_b": false, + "a_m_pow_b": "0x8e5cd3d6237cb76737b65b18e71cb94a" + }, + { + "a": "0x273c305e3a80", + "b": "0x3f70f21e7807c20000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xe2fea648895627805f708761530ef1c6", + "a_m_sub_b_m": "0x23111d5566dcfd0ff411f66f1eafccbf4", + "a_m_mul_b_m": "0x36681287de5d568563f029c1605f3590", + "a_eq_b": false, + "a_m_pow_b": "0x7dcfb6a9f1eff7be67938eee52be8326" + }, + { + "a": "0xcb720f85201ed80000000000000", + "b": "0x108675e0e91f36000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xcc7a76e32eb0cb6000000000000", + "a_m_sub_b_m": "0xca69a827118ce4a000000000000", + "a_m_mul_b_m": "0x2de03891615d7be7c83bcc8297d38bb12", + "a_eq_b": false, + "a_m_pow_b": "0xe7ff579f46539c8f6e0182e54a1053b8" + }, + { + "a": "0x10fe49b649e", + "b": "0x2cda840fd4adb0798039d60ba9c993735", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2cda840fd4adb0798039d61ca81349bd3", + "a_m_sub_b_m": "0x46683aa1ac4af0e79cf2403025517623", + "a_m_mul_b_m": "0x283ec487113033bd51892d612bea38e4c", + "a_eq_b": false, + "a_m_pow_b": "0x1345b8873d13b5cfc6b43a4bcfe31c822" + }, + { + "a": "0x48a9635", + "b": "0x268bfbf7ed4dc2301882ab92580b2db0c", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x268bfbf7ed4dc2301882ab925853d7141", + "a_m_sub_b_m": "0xab50bc202249d57e1864e6b5612703e3", + "a_m_mul_b_m": "0x240e76b28c110c622998bc6825d4357d2", + "a_eq_b": false, + "a_m_pow_b": "0x163e1edbd7acd5a82e7474c418ccc0309" + }, + { + "a": "0x2f91a2124078080000000000000000000", + "b": "0x72306c62ae859c000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2f91a21240ea386c62ae859c000000000", + "a_m_sub_b_m": "0x2f91a2124005d7939d517a64000000000", + "a_m_mul_b_m": "0x1597eff9052f8f2434edaad61cd3b1cc", + "a_eq_b": false, + "a_m_pow_b": "0x3041ce893545aa59d2559926c24fe299e" + }, + { + "a": "0x0", + "b": "0x251596e30f439c000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x251596e30f439c000000000000000", + "a_m_sub_b_m": "0x3140e2a4588f50445e08f9fdadd4f48ba", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x9515710bf188c80000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x9515710bf188c80000", + "a_m_sub_b_m": "0x9515710bf188c80000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x400d861ed5e8d4000000000", + "b": "0x557a2d0705c9b0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x400d861edb4076d0705c9b0", + "a_m_sub_b_m": "0x400d861ed091312f8fa3650", + "a_m_mul_b_m": "0x2abb763d0ec62091893677bd80b13fcf0", + "a_eq_b": false, + "a_m_pow_b": "0x2ac0d9b1c03536f6099f0effdb5b9d8dc" + }, + { + "a": "0x193bf8236a8", + "b": "0xfb95", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x193bf83323d", + "a_m_sub_b_m": "0x193bf813b13", + "a_m_mul_b_m": "0x18cc7c3226087c8", + "a_eq_b": false, + "a_m_pow_b": "0x11a79c04b3adcbba2a8ecdc616f89de6c" + }, + { + "a": "0x416addb1", + "b": "0x10e5919a9a7", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x10e9a848758", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9eccc5a07cc4", + "a_m_mul_b_m": "0x45157a868a68597777", + "a_eq_b": false, + "a_m_pow_b": "0x9d1fb326f8f37f222dd7438dcdb48457" + }, + { + "a": "0x1c9d8b6ec08c0e000000000000000000", + "b": "0x1c9d8b6ec08c0e000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x393b16dd81181c000000000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x24ce86ba10cc9bb931da166255d0d06de", + "a_eq_b": true, + "a_m_pow_b": "0x16e79bfdcd124c50a06d159d9de26364a" + }, + { + "a": "0x1249a", + "b": "0x24998f1093f68200", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x24998f1093f7a69a", + "a_m_sub_b_m": "0x314107b9ef725f87f7bf610ca4959eb54", + "a_m_mul_b_m": "0x29d52b8ef8be2e923400", + "a_eq_b": false, + "a_m_pow_b": "0x331af6242b3a16fdd25414f502b5d8de" + }, + { + "a": "0x286343347daa6b26ae30d04fdb58c1e9f", + "b": "0x5de657342dc460000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2863433a5c0fde698a76d04fdb58c1e9f", + "a_m_sub_b_m": "0x2863432e9f44f7e3d1ead04fdb58c1e9f", + "a_m_mul_b_m": "0x2740e99624563b59a4b3a19c39d62730a", + "a_eq_b": false, + "a_m_pow_b": "0x155bb9d967c49728262a0cac5886feabf" + }, + { + "a": "0x6b0a9ac12d81280000", + "b": "0x1374b5e886cfdb00000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1374b5e886cfe1b0a9ac12d81280000", + "a_m_sub_b_m": "0x312d930406eb8fb3aab2a61085e7748ba", + "a_m_mul_b_m": "0x133fa6ed7da806b4b47854a84b3f153b0", + "a_eq_b": false, + "a_m_pow_b": "0x52c0b9b13f32fbaa6d035c6857e212" + }, + { + "a": "0x5f3fd1781ee8fc00000000000", + "b": "0x1cce703d00eb9000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x7c0e41b51fd48c00000000000", + "a_m_sub_b_m": "0x4271613b1dfd6c00000000000", + "a_m_mul_b_m": "0x2af40e595df0a7f8a330a7477dab3a556", + "a_eq_b": false, + "a_m_pow_b": "0x2a9e65c606132e4edbc50b0cf1504996e" + }, + { + "a": "0xe1b747830933f0000000000000", + "b": "0x2d8efb5c9e7a2d2d0ca3c405075fc1b10", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2d8efb6ab9eea55d9fe2c405075fc1b10", + "a_m_sub_b_m": "0x3b20c6b6c6caa8b80a435f8a67532daa", + "a_m_mul_b_m": "0x1add78154a771fe664de6db6d605d06ac", + "a_eq_b": false, + "a_m_pow_b": "0x2710fb370abd7036d567d6717d3c343de" + }, + { + "a": "0x34aa9c3334f530000", + "b": "0x16520", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x34aa9c3334f546520", + "a_m_sub_b_m": "0x34aa9c3334f519ae0", + "a_m_mul_b_m": "0x49788126ef408a9600000", + "a_eq_b": false, + "a_m_pow_b": "0x1c24d3ea715e8449a5ea60884a5b6e708" + }, + { + "a": "0x302b33be214ed05bde4d08ebed335914c", + "b": "0xc67b74a148342800000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x302b33be215b381328618c2e6d335914c", + "a_m_sub_b_m": "0x302b33be214268a4943885a96d335914c", + "a_m_mul_b_m": "0x224675b99036f79f1c0621361c1adb71a", + "a_eq_b": false, + "a_m_pow_b": "0x2df13ae996752c60241927975619198e6" + }, + { + "a": "0x41bf3c83da9ae000000000", + "b": "0x122d7c15ff83d8000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x41d169fff09a63d8000000", + "a_m_sub_b_m": "0x41ad0f07c49b5c28000000", + "a_m_mul_b_m": "0x2e7affebbd017ae8b8e502f44636d68fa", + "a_eq_b": false, + "a_m_pow_b": "0x1e09772370a2c492bbec304d66ccd2a08" + }, + { + "a": "0x80c87dc3a1b02000000000000", + "b": "0x80c87dc3a1b02000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x10190fb8743604000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1ab3f99da0819d0b56a0ce4444474aa52", + "a_eq_b": true, + "a_m_pow_b": "0x107729ec725390f586ef4804a2932d57e" + }, + { + "a": "0x14a7cc5ac", + "b": "0x3efb8cff8b30c8000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x3efb8cff8b32127cc5ac", + "a_m_sub_b_m": "0x314107b9ef725b984139014ab5fcc0e66", + "a_m_mul_b_m": "0x514ef63b99b7af3eeeae60000000", + "a_eq_b": false, + "a_m_pow_b": "0x310eb99bfe5846ee385f08e64f14536fc" + }, + { + "a": "0x373c6704a14a70000000", + "b": "0x64d74d41cc", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x373c6704a1af474d41cc", + "a_m_sub_b_m": "0x373c6704a0e598b2be34", + "a_m_mul_b_m": "0x15c20ca3b13b380c181dc140000000", + "a_eq_b": false, + "a_m_pow_b": "0xb6fdf7bce80fddcfd586ed83e38eff0" + }, + { + "a": "0x7", + "b": "0x8a774a9ec1b550000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x8a774a9ec1b550000007", + "a_m_sub_b_m": "0x314107b9ef7256e0855f0de258d4f48c1", + "a_m_mul_b_m": "0x3c9430a574bf530000000", + "a_eq_b": false, + "a_m_pow_b": "0x1cfc918cc79e1f4d303de2a59578b2b47" + }, + { + "a": "0x45292", + "b": "0x8d71a2455c1", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x8d71a28a853", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9703c32f458b", + "a_m_mul_b_m": "0x2636599de334ba12", + "a_eq_b": false, + "a_m_pow_b": "0x1f0a915ac27b58b83a62cfe74cd148fc0" + }, + { + "a": "0xb05180fcaf206", + "b": "0x3d272d15eeb7e20000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x3d272d15eeb7e2b05180fcaf206", + "a_m_sub_b_m": "0x3141077cc84549994227aa4f2ed1a3ac0", + "a_m_mul_b_m": "0x136d439680818ea0d35dc9150d9c5e8cc", + "a_eq_b": false, + "a_m_pow_b": "0xc44f5ef3d2deb92b17e5655c65cf7096" + }, + { + "a": "0x10d1eee5eda7b90", + "b": "0x3278381147bcba000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x3278391e66ab18da7b90", + "a_m_sub_b_m": "0x314107b9ef725c607698b770c8229c44a", + "a_m_mul_b_m": "0xb953c9a35594fe657ca8cdfdedbc2ba6", + "a_eq_b": false, + "a_m_pow_b": "0x1198809a80c4976d63deaf20a9fba266" + }, + { + "a": "0x585d3c42d64e240000000000000000", + "b": "0x32cbcf2a2", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x585d3c42d64e24000000032cbcf2a2", + "a_m_sub_b_m": "0x585d3c42d64e23fffffffcd3430d5e", + "a_m_mul_b_m": "0x7ed117928bfa9db64377106bddcb832e", + "a_eq_b": false, + "a_m_pow_b": "0x2bb68f6fcf739113758fc69943e7c0ce" + }, + { + "a": "0x163a11265b6de40000", + "b": "0x3ad6694bd656e2000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x3ad66aaf776947b6de40000", + "a_m_sub_b_m": "0x314107b9ef37892011d3b58164b3348ba", + "a_m_mul_b_m": "0x1558782784b464b91df2e1172e6e2fdc8", + "a_eq_b": false, + "a_m_pow_b": "0x56bff2725c5393f880fba8485927845e" + }, + { + "a": "0x0", + "b": "0x62c1465e58846400000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x62c1465e58846400000000000000000", + "a_m_sub_b_m": "0x30de46739119db23fa08f9fdadd4f48ba", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x162be7b26127db0000000000000000", + "b": "0x9543535fc2f308000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x162be7b261bd1e535fc2f308000000", + "a_m_sub_b_m": "0x162be7b2609297aca03d0cf8000000", + "a_m_mul_b_m": "0x3046e2d0b29c3ccbf1d8f057f66eb1a46", + "a_eq_b": false, + "a_m_pow_b": "0x22bd27cb88c66d61bf719cda14bda610" + }, + { + "a": "0x2941b11047e7ac00000000", + "b": "0x2941b11047e7ac00000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x528362208fcf5800000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x138d2632097e27c7aa0e7dea0cdc31faa", + "a_eq_b": true, + "a_m_pow_b": "0x27719df36333c596e354e72564e5b17ec" + }, + { + "a": "0x22c3ceb0736dee000000000000000", + "b": "0xfd300d01168ef80000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x22c3de83743dff68ef80000000000", + "a_m_sub_b_m": "0x22c3bedd729ddc971080000000000", + "a_m_mul_b_m": "0x24617d37693fd7868dd0339084c595d42", + "a_eq_b": false, + "a_m_pow_b": "0x86762b94914f6ca31f5fcd4d3202d56a" + }, + { + "a": "0x2b311d9c41d86fd12c8359b916e935faf", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2b311d9c41d86fd12c8359b916e935faf", + "a_m_sub_b_m": "0x2b311d9c41d86fd12c8359b916e935faf", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x8b185b6", + "b": "0x97c787", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x9494d3d", + "a_m_sub_b_m": "0x819be2f", + "a_m_mul_b_m": "0x5277c72e7fcfa", + "a_eq_b": false, + "a_m_pow_b": "0x6b0196035ea3f8f8b4db6fb791c64528" + }, + { + "a": "0x3529bb39526c14000", + "b": "0x369ffb638bbc580000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x369ffb638bbc5b529bb39526c14000", + "a_m_sub_b_m": "0x313d9dba3939a3c2af32b5370041088ba", + "a_m_mul_b_m": "0x7b558860a9fe7f3a15c618de5a6c870e", + "a_eq_b": false, + "a_m_pow_b": "0x6c3dee5e363367ac9dbc0895eb65ab52" + }, + { + "a": "0x10", + "b": "0x5b3eeefd8a90f4", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x5b3eeefd8a9104", + "a_m_sub_b_m": "0x314107b9ef725f87fa03460ebdfc4b7d6", + "a_m_mul_b_m": "0x5b3eeefd8a90f40", + "a_eq_b": false, + "a_m_pow_b": "0x30ebc962974632004d983201805488e54" + }, + { + "a": "0x14c38dd02ccfc200000000000000000", + "b": "0x3e5e0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x14c38dd02ccfc20000000000003e5e0", + "a_m_sub_b_m": "0x14c38dd02ccfc1ffffffffffffc1a20", + "a_m_mul_b_m": "0x2111bac7d4af98a9c945dbcece9ecaed8", + "a_eq_b": false, + "a_m_pow_b": "0x196cc192ee778f4f376e574b4058415c" + }, + { + "a": "0xcbb610b01", + "b": "0x15f169a37fd86a0000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x15f169a37fd86a0000000cbb610b01", + "a_m_sub_b_m": "0x313fa8a3553a62015a08f9fe798b053bb", + "a_m_mul_b_m": "0x1e427b4dc8b4b6774c58f998c62209496", + "a_eq_b": false, + "a_m_pow_b": "0x282fab8a3d5ee244824a854390af9b489" + }, + { + "a": "0x1ad215", + "b": "0x83b26f7e3dfad0000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x83b26f7e3dfad01ad215", + "a_m_sub_b_m": "0x314107b9ef72574cd311161e00d6a1acf", + "a_m_mul_b_m": "0xdcc327feaffabf43310000000", + "a_eq_b": false, + "a_m_pow_b": "0xbd6f3055265084961dd79153547d4b83" + }, + { + "a": "0x1100d7d835af1b00000000000000000", + "b": "0x1923b6119d5bf3000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1100d96a711034d5bf3000000000000", + "a_m_sub_b_m": "0x1100d645fa4e012a40d000000000000", + "a_m_mul_b_m": "0x2684ee257165f16f196f89367d434e132", + "a_eq_b": false, + "a_m_pow_b": "0x25140e5ab1734235275f3fb2199852868" + }, + { + "a": "0x20c522b1f5e82e00000000000000", + "b": "0x2005", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x20c522b1f5e82e00000000002005", + "a_m_sub_b_m": "0x20c522b1f5e82dffffffffffdffb", + "a_m_mul_b_m": "0x419482fec36d348e600000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x1f0c04e3ba664b4f04a504ca8bd45ddd8" + }, + { + "a": "0x43041209380910000000000000", + "b": "0x348", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x43041209380910000000000348", + "a_m_sub_b_m": "0x4304120938090ffffffffffcb8", + "a_m_mul_b_m": "0xdbe55b2e3fddbc80000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x5027ba17b767aaad0adab730b1d82ba2" + }, + { + "a": "0x0", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x0", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0xfb31", + "b": "0x1a7e5ea8941", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1a7e5eb8472", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9e32f765baaa", + "a_m_mul_b_m": "0x19fef8ff6770071", + "a_eq_b": false, + "a_m_pow_b": "0x4e0894116577e1b803c62c8dfbb1e77f" + }, + { + "a": "0x30c1333ce07117e78e70a26e9eb6b96ec", + "b": "0x63759e2070", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x30c1333ce07117e78e70a274d6109b75c", + "a_m_sub_b_m": "0x30c1333ce07117e78e70a268675cd767c", + "a_m_mul_b_m": "0x231a4c677ac619f63f6d9920b80def1d8", + "a_eq_b": false, + "a_m_pow_b": "0x147b0d7a894679f9d83e9ce90d21c22e2" + }, + { + "a": "0x142ea378a0a3ae00000000000000", + "b": "0x5b4392db249d980000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x142ea378a0fef192db249d980000", + "a_m_sub_b_m": "0x142ea378a0486a6d24db62680000", + "a_m_mul_b_m": "0x312db41aac5d53211d6bd9e02393b9052", + "a_eq_b": false, + "a_m_pow_b": "0x22cd8031dcbaa5b234672077a4f61132e" + }, + { + "a": "0xd779e2a5b35e880000000", + "b": "0x240b1f64d44933c8649adce957837e506", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x240b1f64d44a0b4247409047df837e506", + "a_m_sub_b_m": "0xd35e8551b2a03397813d072de51763b4", + "a_m_mul_b_m": "0x1e5a9c997f3e34fc1d85f4a1f029d4a30", + "a_eq_b": false, + "a_m_pow_b": "0xbf29755dd5d742165041cc655b923978" + }, + { + "a": "0x302a007fce04ee43c11f63e9bc7361a75", + "b": "0x3dcadf201dafa0000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x302a007fce04ee43feea4309da2301a75", + "a_m_sub_b_m": "0x302a007fce04ee43835484c99ec3c1a75", + "a_m_mul_b_m": "0x26bd95dad3da7bbd444157d6490c0d872", + "a_eq_b": false, + "a_m_pow_b": "0x725b609e72693438a377f3a745f5db1d" + }, + { + "a": "0x91de4b18029", + "b": "0x91b44b2196155000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x91b44b2227f39b18029", + "a_m_sub_b_m": "0x314107b9ef725ef645bdd8f976d00c8e3", + "a_m_mul_b_m": "0x5305a3a4a98178ea3680169d000000", + "a_eq_b": false, + "a_m_pow_b": "0xaf1f89b103ccc2648edc53b3397a1c77" + }, + { + "a": "0x2010b0733", + "b": "0x7d0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2010b0f03", + "a_m_sub_b_m": "0x2010aff63", + "a_m_mul_b_m": "0xfa826283e70", + "a_eq_b": false, + "a_m_pow_b": "0x181c07672fcc07bb3efc7a083935ec781" + }, + { + "a": "0x158ca207a58930", + "b": "0x208d17e6327e8aeae24a703e3120a202f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x208d17e6327e8aeae24bc908519afa95f", + "a_m_sub_b_m": "0x10b3efd3bcf3d49d17bfe2899d2eab1bb", + "a_m_mul_b_m": "0x1b0e868adb7ae58b4f8964353b8902bac", + "a_eq_b": false, + "a_m_pow_b": "0x134d4c7ed2cabc8de23ce2b7802ce8048" + }, + { + "a": "0x1ce", + "b": "0x205de46c3d07c6000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x205de46c3d07c60000000000001ce", + "a_m_sub_b_m": "0x3140e75c0b0622803408f9fdadd4f4a88", + "a_m_mul_b_m": "0x3a69723b56240754000000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x2a9395da646d597e50bcd135fee692cce" + }, + { + "a": "0x2d0a9a942d4", + "b": "0x496fde28", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2d0f31920fc", + "a_m_sub_b_m": "0x2d0603964ac", + "a_m_mul_b_m": "0xcebb4c382db8524920", + "a_eq_b": false, + "a_m_pow_b": "0x10de48f03a376b4ef0e7ebab9f006682" + }, + { + "a": "0x310074ed1d54be000000000000", + "b": "0x21c67556d79acd84313b2cc1593098549", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x21c67559e7a21c5606870cc1593098549", + "a_m_sub_b_m": "0xf7a926627dee0d59e19ad3c54a45c371", + "a_m_mul_b_m": "0x1336ada2b357bc6f7688d4364eb189044", + "a_eq_b": false, + "a_m_pow_b": "0x50c51e0177d72a07ac0a48231aeec988" + }, + { + "a": "0x7b6875f5267ae40000", + "b": "0x25da23c06f146b0800a2cf6a95bd38392", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x25da23c06f146b0fb72a2ebcfd6b78392", + "a_m_sub_b_m": "0xb66e3f9805df487afed89e57fc5fc528", + "a_m_mul_b_m": "0x14a55d6a74f0297255f7c14d905575ffe", + "a_eq_b": false, + "a_m_pow_b": "0x2b142e04a415f719a265c50d9f623bb80" + }, + { + "a": "0x4d84ed691c42f400000000000", + "b": "0x1089e85dbb2528000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x156237344ce957400000000000", + "a_m_sub_b_m": "0x314107b93458c71563f96dfdadd4f48ba", + "a_m_mul_b_m": "0x1f94e482c6369062a5de606e9038275a4", + "a_eq_b": false, + "a_m_pow_b": "0x2d3e2e3b4e39c2262a15fd37455593e6e" + }, + { + "a": "0x4df8f0a97d06e40000000000", + "b": "0x50a3cc798b13f80000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x9e9cbd23081adc0000000000", + "a_m_sub_b_m": "0x314107b9ef47b1caf92828bdadd4f48ba", + "a_m_mul_b_m": "0x1bce3e4545c066f914b15e5b76523cf1c", + "a_eq_b": false, + "a_m_pow_b": "0x17168d41ccd9637fe2512ef5758a2e68e" + }, + { + "a": "0x56456b4fc8b84800", + "b": "0x54228bc9c5f128000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x54228bcf2a47dcfc8b84800", + "a_m_sub_b_m": "0x314107b9ef1e3cfc35a75f8aaa60790ba", + "a_m_mul_b_m": "0x260e780ea3cb591d2c770ccc2c5968b44", + "a_eq_b": false, + "a_m_pow_b": "0x307bb33ab1c901a5954d3f9227d7a85ce" + }, + { + "a": "0xcf09627", + "b": "0xcf09627", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x19e12c4e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xa7702d8931b9f1", + "a_eq_b": true, + "a_m_pow_b": "0x13f619db0f1c4cde7eba1a4429f73a61b" + }, + { + "a": "0xa4ec54527863100000000000000", + "b": "0x619c2a411de", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xa4ec545278631000619c2a411de", + "a_m_sub_b_m": "0xa4ec545278630fff9e63d5bee22", + "a_m_mul_b_m": "0x2f7485408a5bfe2b27caf756354bed6ce", + "a_eq_b": false, + "a_m_pow_b": "0x22fd35cfb677c8c66682153826ed08496" + }, + { + "a": "0x15fe0ddcccc6e1000000000000000", + "b": "0x2e21d669e9c31", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x15fe0ddcccc6e1002e21d669e9c31", + "a_m_sub_b_m": "0x15fe0ddcccc6e0ffd1de2996163cf", + "a_m_mul_b_m": "0x2abdb882eab8e4f86eb7f0d8a73d3a5b8", + "a_eq_b": false, + "a_m_pow_b": "0x2971c8c09f4ec17076968f75c0e0be890" + }, + { + "a": "0xace3b62c", + "b": "0x950a411845ede00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x950a4123142942c", + "a_m_sub_b_m": "0x314107b9ef725f87f973efbca05d420e6", + "a_m_mul_b_m": "0x64a775e2ef8c4650c222800", + "a_eq_b": false, + "a_m_pow_b": "0xff83162f2fe1be3d4dccad42663bba88" + }, + { + "a": "0x839f9", + "b": "0x59afb6", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x61e9af", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadcfdd2fd", + "a_m_mul_b_m": "0x2e1cd0b6e06", + "a_eq_b": false, + "a_m_pow_b": "0x173b406ca69b46bad921e42c2085f5f83" + }, + { + "a": "0x121a0cc60f7ef70000000000000000", + "b": "0x5c887a342bbc", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x121a0cc60f7ef700005c887a342bbc", + "a_m_sub_b_m": "0x121a0cc60f7ef6ffffa37785cbd444", + "a_m_mul_b_m": "0x1c672da60c32090dd7ff9c3435963237a", + "a_eq_b": false, + "a_m_pow_b": "0x22b1b845bdbdae1d22bae7b0e74e99272" + }, + { + "a": "0x4f24281337da5c0000", + "b": "0x4ce0826", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x4f24281337df2a0826", + "a_m_sub_b_m": "0x4f24281337d58df7da", + "a_m_mul_b_m": "0x17c423d6cf4e7bf2549a80000", + "a_eq_b": false, + "a_m_pow_b": "0x2a8a9f2ec0017b6e5ee9e2b8bcbc2125e" + }, + { + "a": "0x6", + "b": "0x4476389592809c00000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x4476389592809c00000000000006", + "a_m_sub_b_m": "0x314103728be9065ff048f9fdadd4f48c0", + "a_m_mul_b_m": "0x19ac553816f03a800000000000000", + "a_eq_b": false, + "a_m_pow_b": "0x262d0cd74586ecc8774189437c99c8ce2" + }, + { + "a": "0x2a8145b54a", + "b": "0x1782d61444672b00000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1782d61444672b02a8145b54a", + "a_m_sub_b_m": "0x314107b9d7ef8973b5a1cf0055e94fe04", + "a_m_mul_b_m": "0xe41d996bb1a3a12c585e62e6b5ce5178", + "a_eq_b": false, + "a_m_pow_b": "0x14485a7a65120b93cf6c4d5162aa68a3a" + }, + { + "a": "0x87", + "b": "0x1b256e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1b25f5", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadd3423d3", + "a_m_mul_b_m": "0xe50bd02", + "a_eq_b": false, + "a_m_pow_b": "0x2079fd1cb61b9e0647d28673097edbf07" + }, + { + "a": "0x1f0a2604707dc40", + "b": "0x1ad9b17fd149b", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1f24ffb5f04f0db", + "a_m_sub_b_m": "0x1eef4c52f0ac7a5", + "a_m_mul_b_m": "0x3416cfc30e246c358260a375ac0", + "a_eq_b": false, + "a_m_pow_b": "0x2d652eaaf99d5124f516b4c56486eda18" + }, + { + "a": "0x3047cd56efd6cc3648191cbeb175bf448", + "b": "0x47f4f7208398880000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x3047cd9ee4cdecb9e0a11cbeb175bf448", + "a_m_sub_b_m": "0x3047cd0efadfabb2af911cbeb175bf448", + "a_m_mul_b_m": "0x7b83efa7bb57f4640dd7b8cab2fc43e4", + "a_eq_b": false, + "a_m_pow_b": "0x1b31acf76595ad51225337b517e402a6" + }, + { + "a": "0x5d1435c0", + "b": "0x5d1435c0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xba286b80", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x21d7b0a5f1491000", + "a_eq_b": true, + "a_m_pow_b": "0x26cc41eec6d1660dae35d4479778c0bce" + }, + { + "a": "0x17c7589a6b0", + "b": "0x14d8e45c80b353000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x14d8e45c80b353017c7589a6b0", + "a_m_sub_b_m": "0x314107b8a1e419bfeed3ca15752d8ef6a", + "a_m_mul_b_m": "0x19f7362e8c4ef6eee75d775ad12343060", + "a_eq_b": false, + "a_m_pow_b": "0xf7bde0b1aaa33ca410acf3dad0eed916" + }, + { + "a": "0xae4420071645b8000000", + "b": "0x18e18e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xae4420071645b818e18e", + "a_m_sub_b_m": "0xae4420071645b7e71e72", + "a_m_mul_b_m": "0x10efed8a9a150ae16410000000", + "a_eq_b": false, + "a_m_pow_b": "0x29973d4c49b2dafbaa841e1440b977ff8" + }, + { + "a": "0x379f6", + "b": "0x762fd", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xadcf3", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadd4b5fb3", + "a_m_mul_b_m": "0x19add9b41e", + "a_eq_b": false, + "a_m_pow_b": "0x5178a6b79108ab316702f384ec9352f8" + }, + { + "a": "0x34eb1", + "b": "0x39d4696", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x3a09547", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdad9b550d5", + "a_m_mul_b_m": "0xbf43f0181b6", + "a_eq_b": false, + "a_m_pow_b": "0x28dea5bcb3aac75124c49c7497949bd6b" + }, + { + "a": "0x30a14088479eec00000000", + "b": "0x613", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x30a14088479eec00000613", + "a_m_sub_b_m": "0x30a14088479eebfffff9ed", + "a_m_mul_b_m": "0x127637afbcb0a538400000000", + "a_eq_b": false, + "a_m_pow_b": "0x3119cfafe64c652cbf83d1b3178c7c05c" + }, + { + "a": "0x3a36fce1fd20b2000000000", + "b": "0x130d73b5df2ff00000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x130d73b9829fbe1fd20b2000000000", + "a_m_sub_b_m": "0x313fd6e2b44ea385dc061aafadd4f48ba", + "a_m_mul_b_m": "0x1b67337fafed177ebb9c6df00de47dd60", + "a_eq_b": false, + "a_m_pow_b": "0x517900200d6d96d88ac1b0e3c4468f26" + }, + { + "a": "0xe027157f750b9000000000", + "b": "0x2b299c69fa73e8000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xe02718320ed22fa73e8000", + "a_m_sub_b_m": "0xe02712ccdb44f058c18000", + "a_m_mul_b_m": "0xa0968580dce89331459dcd32a72476f4", + "a_eq_b": false, + "a_m_pow_b": "0xb93ca3bd3410e21ac7e5c242e14b1a9e" + }, + { + "a": "0xa46e80a677fdc00", + "b": "0x73ade66f5012c80000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x73ade713be936e77fdc00", + "a_m_sub_b_m": "0x314107b9ef71ebda143e186b8c4cf24ba", + "a_m_mul_b_m": "0xca2b16caaa936bb9ef65e544f579e92", + "a_eq_b": false, + "a_m_pow_b": "0x752fd3f7f5845be60ab6d689eb1fc260" + }, + { + "a": "0x211f", + "b": "0x1afc2e706a", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1afc2e9189", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fbfe120f96f", + "a_m_mul_b_m": "0x37dc6861d46d6", + "a_eq_b": false, + "a_m_pow_b": "0x2bfd9ac5a7f884d366c5ed5014b650959" + }, + { + "a": "0x6d9981", + "b": "0x92d55b65931638000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x92d55b65931d11981", + "a_m_sub_b_m": "0x314107b9ef725f8767339e981ac59623b", + "a_m_mul_b_m": "0x3edce36b62638d3daa38000", + "a_eq_b": false, + "a_m_pow_b": "0x2cb4dfb4c120c5afebdc737fcc9d1b059" + }, + { + "a": "0x7eb54bb3008e240000000000000000", + "b": "0x2916701", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x7eb54bb3008e240000000002916701", + "a_m_sub_b_m": "0x7eb54bb3008e23fffffffffd6e98ff", + "a_m_mul_b_m": "0x787beb38541bf00bd3027531bcbbdbf2", + "a_eq_b": false, + "a_m_pow_b": "0x1151a75076b549ef674b49c2e51d2c398" + }, + { + "a": "0x57e7a9443", + "b": "0x26a75e179fd14f9d493510969c2ebbadc", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x26a75e179fd14f9d49351096f41664f1f", + "a_m_sub_b_m": "0xa99a9a24fa10feab0d3e967698de2221", + "a_m_mul_b_m": "0x237dfd278ef6a5173addf381319424a76", + "a_eq_b": false, + "a_m_pow_b": "0x45706ba0c73877b26fda0cac142bdcf7" + }, + { + "a": "0xa96", + "b": "0x2af17effd0ba9400000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2af17effd0ba9400000000a96", + "a_m_sub_b_m": "0x314107b9c480e088294e65fdadd4f5350", + "a_m_mul_b_m": "0x1c69876680b971ab800000000000", + "a_eq_b": false, + "a_m_pow_b": "0x37253a49b3570126db1c08452579ef90" + }, + { + "a": "0x9cc375f4", + "b": "0x96b87204b942f80000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x96b87204b9dfbb75f4", + "a_m_sub_b_m": "0x314107b9ef725f7e8e81d9b22371abeae", + "a_m_mul_b_m": "0x5c4b796bae66c24f172c600000", + "a_eq_b": false, + "a_m_pow_b": "0x11f33602d05d2fb26bed11984d615341a" + }, + { + "a": "0xe0a", + "b": "0x29ef63e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x29f0448", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadab06086", + "a_m_mul_b_m": "0x24cbad026c", + "a_eq_b": false, + "a_m_pow_b": "0x281e796b3269d2bfb7201ac981fd5b730" + }, + { + "a": "0x114cf03ff8c1a70", + "b": "0x10a9acb370c1ea0000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x10a9acb370c1fb4cf03ff8c1a70", + "a_m_sub_b_m": "0x314107a945c5ac17383046ededcdb632a", + "a_m_mul_b_m": "0x1eac63ac0958af292d1580a16ac3876fc", + "a_eq_b": false, + "a_m_pow_b": "0x1a64d73865ad8b078cc634aa1924852c" + }, + { + "a": "0xd", + "b": "0xdc70aaa61441c00000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xdc70aaa61441c0000000d", + "a_m_sub_b_m": "0x314107b9ef7183174f62e5bbedd4f48c7", + "a_m_mul_b_m": "0xb31b8aa6f0756c00000000", + "a_eq_b": false, + "a_m_pow_b": "0x24b66965d90e0269a85e156930adddfb3" + }, + { + "a": "0xa13facf69bc250000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xa13facf69bc250000", + "a_m_sub_b_m": "0xa13facf69bc250000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x5e0b7f69b12c28000000", + "b": "0x336c1da1c6a3020000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x336c7bad460cb32c28000000", + "a_m_sub_b_m": "0x314107b9ec3ba38e959564f07054f48ba", + "a_m_mul_b_m": "0x7553704e2192938ce1e6f8870e2d63a8", + "a_eq_b": false, + "a_m_pow_b": "0x148b318c296e2e8ffbb1dedf0b68f29ba" + }, + { + "a": "0x421ec55d9555dc000000000000000", + "b": "0x421ec55d9555dc000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x843d8abb2aabb8000000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1067ebf639478e9ffaf185967c5104a0", + "a_eq_b": true, + "a_m_pow_b": "0x2c777ed6210e2128b1d60e004c38391ea" + }, + { + "a": "0xc745b2caa32d38000000", + "b": "0xdccf5f9e58f6400000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xdccf5f9e59bd85b2caa32d38000000", + "a_m_sub_b_m": "0x31333ac3f58cdc985535a4308154f48ba", + "a_m_mul_b_m": "0x26833d888800b2ba500564d4c139ccffe", + "a_eq_b": false, + "a_m_pow_b": "0x7e14fa869616d1620984f96cddfd3a88" + }, + { + "a": "0x225454e29ad5ac10cbd3ccd615ec2abf6", + "b": "0x6a7750dd3b9f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x225454e29ad5ac10cbd3d37d8af9fe795", + "a_m_sub_b_m": "0x225454e29ad5ac10cbd3c62ea0de57057", + "a_m_mul_b_m": "0xbf8c81b319f496ed64935854c19d2c52", + "a_eq_b": false, + "a_m_pow_b": "0x125dd82388dc541bedfa52a99d42154f4" + }, + { + "a": "0x27b4908702f1b60000000000000000000", + "b": "0x260d42d7d4433", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x27b4908702f1b6000000260d42d7d4433", + "a_m_sub_b_m": "0x27b4908702f1b5ffffffd9f2bd282bbcd", + "a_m_mul_b_m": "0x2ec5a5fc2671db47a88e36513088ed2de", + "a_eq_b": false, + "a_m_pow_b": "0x26a590029ef0d2fad9947753f0a2cf3b8" + }, + { + "a": "0x0", + "b": "0x1634cd5095918a0000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1634cd5095918a0000", + "a_m_sub_b_m": "0x314107b9ef725f8696bc24f454bc548ba", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x1250ad", + "b": "0xb603a01", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xb728aae", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdad2015f66", + "a_m_mul_b_m": "0xd059d63982ad", + "a_eq_b": false, + "a_m_pow_b": "0x1c41a58990f5e63c2e4a508682cd28cf9" + }, + { + "a": "0x882911f97347580000000000000000", + "b": "0x73b1d4dc8e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x882911f973475800000073b1d4dc8e", + "a_m_sub_b_m": "0x882911f9734757ffffff8c4e2b2372", + "a_m_mul_b_m": "0x2786c573fa57704ee1dbc5cb53d2a1d62", + "a_eq_b": false, + "a_m_pow_b": "0xadf6b962a5ded7fcb245db29511fa452" + }, + { + "a": "0x21938d096ed3dffdfa5bb23895dde2c6a", + "b": "0x296df541fcdd592a0aeff988bb5eca796", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x19c07a917c3ed9a00b42b1c3a367b8b46", + "a_m_sub_b_m": "0x29669f816168e65be974b2ad88540cd8e", + "a_m_mul_b_m": "0x23f9dacd6bb0c21940c2b5c8e28210cd0", + "a_eq_b": false, + "a_m_pow_b": "0xdd11f705ba7a8a875d82f25ad10e2ca0" + }, + { + "a": "0x11df54105270f6000000", + "b": "0x271c2912aea8a80000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x283a1e53b3cfb76000000", + "a_m_sub_b_m": "0x314107b9ef723989c637507c1534f48ba", + "a_m_mul_b_m": "0x262ed385be30a989fcf981b4fbc69f29e", + "a_eq_b": false, + "a_m_pow_b": "0x2248f73068d5cb082af189e9ff39d3136" + }, + { + "a": "0x618c691643e9600000000000", + "b": "0x3214cb383ba4a80000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x618f8a62f76d1a4a80000000", + "a_m_sub_b_m": "0x618947c99065a5b580000000", + "a_m_mul_b_m": "0xbd8525d2f8f82704e97b3ccb8cb52c5c", + "a_eq_b": false, + "a_m_pow_b": "0x1ba29f13e30e99aed585a6e224136d31e" + }, + { + "a": "0x0", + "b": "0x6be67", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x6be67", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadd488a53", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x94ba30c57fce8800000000000", + "b": "0x29f7a46b8450000a118700fd547894708", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x29f7a46c190a30cf915588fd547894708", + "a_m_sub_b_m": "0x749634effdc904368508100595c601b2", + "a_m_mul_b_m": "0x25cd4571d11c3c602852eefe61fe85784", + "a_eq_b": false, + "a_m_pow_b": "0x2552c0f4a051768815d8ce27910690424" + }, + { + "a": "0x5faf040ecf6d90", + "b": "0x5faf040ecf6d90", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xbf5e081d9edb20", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x23c35ca98a436001a48e1dc3f100", + "a_eq_b": true, + "a_m_pow_b": "0x100ccbc980f5363800ac75bcffb6951ce" + }, + { + "a": "0x67b263a7318c340", + "b": "0x34dd0237df3f220000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x34dd0237df3f22067b263a7318c340", + "a_m_sub_b_m": "0x313db9e9cbf46b95da70ac61550680bfa", + "a_m_mul_b_m": "0x13e7d811ca11a8f60233ea7613cb68eae", + "a_eq_b": false, + "a_m_pow_b": "0x28207c3f7334dc67bc15aa369c3cdf1f2" + }, + { + "a": "0xc1da425", + "b": "0xc1da425", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x183b484a", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x92cad211a16d59", + "a_eq_b": true, + "a_m_pow_b": "0xdd14dbf13cabbd6d991b4f327bdd953d" + }, + { + "a": "0xfbb728a5891818000", + "b": "0x2fcfd32468884b81da7e1572891c9992f", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2fcfd32468884b82d6353e181234b192f", + "a_m_sub_b_m": "0x171349586ea14071b420d30add072f8b", + "a_m_mul_b_m": "0xfa807aece04bf7b1cd2abca9d88f4792", + "a_eq_b": false, + "a_m_pow_b": "0x3ffb796d10d8b9ff6369935313657802" + }, + { + "a": "0x3a81c31e8398b00", + "b": "0x2af9f30a92299a0000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2af9f30a92299a03a81c31e8398b00", + "a_m_sub_b_m": "0x313e581abec93cee5a437bc0cc588d3ba", + "a_m_mul_b_m": "0x14ce3354ba55f4d6193b85e3fe9e4f9f0", + "a_eq_b": false, + "a_m_pow_b": "0x1a4bb7890d903c3b6dfdf90c1ad2e0dbc" + }, + { + "a": "0x5a04ca4bfca39c0", + "b": "0x231d4f7df847eabd3be5c193391a69f34", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x231d4f7df847eabd3c3fc65d85170d8f4", + "a_m_sub_b_m": "0xe23b83bf72a74cabe7d3d34c0b72e346", + "a_m_mul_b_m": "0x1019d24afb25d064d7b5037aea37be320", + "a_eq_b": false, + "a_m_pow_b": "0x23479fe513fd590f08f3c3e29ad33eaa" + }, + { + "a": "0x2400b2638c594600000000000000", + "b": "0x55656024c", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2400b2638c59460000055656024c", + "a_m_sub_b_m": "0x2400b2638c5945fffffaa9a9fdb4", + "a_m_mul_b_m": "0x26f99a2a2bf1a1ad1e3412dec4c3f8e42", + "a_eq_b": false, + "a_m_pow_b": "0x204ea6e58eb896d2781927fcba87a9442" + }, + { + "a": "0x73efe289e", + "b": "0x4105325a4", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xb4f514e42", + "a_m_sub_b_m": "0x32eab02fa", + "a_m_mul_b_m": "0x1d7243022821eadb38", + "a_eq_b": false, + "a_m_pow_b": "0x1abb5b46ff227d12465233f5e652097a8" + }, + { + "a": "0x2cade6f656229400000000", + "b": "0x20ac1f6", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2cade6f6562294020ac1f6", + "a_m_sub_b_m": "0x2cade6f6562293fdf53e0a", + "a_m_mul_b_m": "0x5b3c72fc874a289ece3800000000", + "a_eq_b": false, + "a_m_pow_b": "0x223c1d4ed3cf2890be98c708b23d70f80" + }, + { + "a": "0x21b9dab860d7de000000000000000000", + "b": "0x2a7eedf7af9d8400", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x21b9dab860d7de002a7eedf7af9d8400", + "a_m_sub_b_m": "0x21b9dab860d7ddffd581120850627c00", + "a_m_mul_b_m": "0x3081ee1cea44738f13ee575eebe7b642e", + "a_eq_b": false, + "a_m_pow_b": "0x1525debe80a1db941376fcd87dabb9036" + }, + { + "a": "0xc1ee10b817a0d8", + "b": "0xaa7", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xc1ee10b817ab7f", + "a_m_sub_b_m": "0xc1ee10b8179631", + "a_m_mul_b_m": "0x811cef41903b25ce8", + "a_eq_b": false, + "a_m_pow_b": "0x2db89c2056f30d1ca643a61bc238099b6" + }, + { + "a": "0x4", + "b": "0x547d57085587b400", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x547d57085587b404", + "a_m_sub_b_m": "0x314107b9ef725f87f4c1248d287c794be", + "a_m_mul_b_m": "0x151f55c21561ed000", + "a_eq_b": false, + "a_m_pow_b": "0x1a8e356649bf5f2e1ed0906259ae5bd88" + }, + { + "a": "0x72ac8b12ee0758", + "b": "0x128b524c88", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x72ac9d9e4053e0", + "a_m_sub_b_m": "0x72ac78879bbad0", + "a_m_mul_b_m": "0x84e8a5464b4c5ebdad206c0", + "a_eq_b": false, + "a_m_pow_b": "0xc61bbdef9bb7ca579683784de56d98d2" + }, + { + "a": "0xe82bad36cfa", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xe82bad36cfa", + "a_m_sub_b_m": "0xe82bad36cfa", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x4459a2c330ee5800000000000000", + "b": "0x3feff6dfc", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x4459a2c330ee58000003feff6dfc", + "a_m_sub_b_m": "0x4459a2c330ee57fffffc01009204", + "a_m_mul_b_m": "0x2e005d578ecd6daaa39423ec2d0b48196", + "a_eq_b": false, + "a_m_pow_b": "0x42ac73ddb9eb2230b9a1d72cbd4ae4fc" + }, + { + "a": "0x3", + "b": "0x3", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x6", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x9", + "a_eq_b": true, + "a_m_pow_b": "0x1b" + }, + { + "a": "0x7106686edd0ad00000", + "b": "0x2bd90a53d49e78dcc9dd3d9c38b75471e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2bd90a53d49e78e3da43c48a09645471e", + "a_m_sub_b_m": "0x567fd661ad3e6b24092434f45caa019c", + "a_m_mul_b_m": "0x1f13dc413db1a59e892a7afa359af7cc8", + "a_eq_b": false, + "a_m_pow_b": "0x1d541505e33b3ad195d52c7afbe30ddf8" + }, + { + "a": "0x1e4ec7558e2f3a000000000", + "b": "0xe3adf400e8fef80000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xe3ae124fb054862f3a000000000", + "a_m_sub_b_m": "0x314106d6419cad66509f2937add4f48ba", + "a_m_mul_b_m": "0x858af6363b72fc48db839d8f520fc4d4", + "a_eq_b": false, + "a_m_pow_b": "0x2842a77c9b30110e13cfd9b5059a663b6" + }, + { + "a": "0x4aac900bcaf35000000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x4aac900bcaf35000000", + "a_m_sub_b_m": "0x4aac900bcaf35000000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x3d8321c9ae496a0000000", + "b": "0x12718fbf7bb08700", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x3d8322f0c74561bb08700", + "a_m_sub_b_m": "0x3d8320a2954d7244f7900", + "a_m_mul_b_m": "0x201268629f5ae97bea91fc5a6f5fd0430", + "a_eq_b": false, + "a_m_pow_b": "0x2f983156378b57a4500eaf6befa0d3390" + }, + { + "a": "0xe57fac085f97", + "b": "0x47a7dee6e193a0000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x47a7dee6e193a0000000e57fac085f97", + "a_m_sub_b_m": "0x2cc689cb81592587fa090855a8957a851", + "a_m_mul_b_m": "0x20cc325ceee5b989337bb680d2b6ff1dc", + "a_eq_b": false, + "a_m_pow_b": "0xf5e76e35d615eb9cc5b3b9d99ec68ae3" + }, + { + "a": "0x6854c2815b5a6c000", + "b": "0x590ab02b1afdd8000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x590ab02b1afe4054c2815b5a6c000", + "a_m_sub_b_m": "0x3140aeaf3f47448a8a5dbc7f092f608ba", + "a_m_mul_b_m": "0x127c6f5dc316dab7495e8fd05657f6c0a", + "a_eq_b": false, + "a_m_pow_b": "0x1623dddf0b6a8e8dbea9c6f158f57e7ec" + }, + { + "a": "0xb0cd41e55", + "b": "0x42dfb4093fc", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x4390814b251", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9bb7eee2d313", + "a_m_mul_b_m": "0x2e2f6a203af45a78aaac", + "a_eq_b": false, + "a_m_pow_b": "0x2ae85ab9a71da630f26f20cbd15bd5125" + }, + { + "a": "0x0", + "b": "0xe34dfef08cc45800000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xe34dfef08cc45800000000", + "a_m_sub_b_m": "0x314107b9ef642aa80b002db82dd4f48ba", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x0", + "b": "0xce410e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xce410e", + "a_m_sub_b_m": "0x314107b9ef725f87fa08f9fdadc8107ac", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x4a2833e1819448000000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x4a2833e1819448000000", + "a_m_sub_b_m": "0x4a2833e1819448000000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0xf71d18231b14b000000000000000000", + "b": "0x0", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xf71d18231b14b000000000000000000", + "a_m_sub_b_m": "0xf71d18231b14b000000000000000000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x23536763b4768a5c99d0a4fac67aaa068", + "b": "0x17814af8e768", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x23536763b4768a5c99d0a672db2a387d0", + "a_m_sub_b_m": "0x23536763b4768a5c99d0a382b1cb1b900", + "a_m_mul_b_m": "0x239e7e5550a96f4212c1e1f47d7b0d8ea", + "a_eq_b": false, + "a_m_pow_b": "0x20d639ccdcc10ea59ce3ee0bfccec023e" + }, + { + "a": "0x52cba12c1a", + "b": "0x51cd069a08c4400", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x51cd0bc6c2d701a", + "a_m_sub_b_m": "0x314107b9ef725f87f9b72cfc4086430d4", + "a_m_mul_b_m": "0x1a74bd319ba6a4c752deee800", + "a_eq_b": false, + "a_m_pow_b": "0xbd2e0a16325a074bbc58fe0f52220e90" + }, + { + "a": "0xd270eeb0dcdb38000000000000000000", + "b": "0xd270eeb0dcdb38000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1a4e1dd61b9b670000000000000000000", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x25ced01c2423d46aedee7d8ca69c09bd0", + "a_eq_b": true, + "a_m_pow_b": "0x223e79190060e467e6c8d7a89043806a0" + }, + { + "a": "0x30c2e3c601d810000000000000", + "b": "0x810c74096f51d000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x30c2e3c602591c74096f51d000", + "a_m_sub_b_m": "0x30c2e3c60157038bf690ae3000", + "a_m_mul_b_m": "0x5ec74f3b9f1d18383ceab8ea4b1d4ecc", + "a_eq_b": false, + "a_m_pow_b": "0x610b814ef4e56639dbf981e9035ed5f4" + }, + { + "a": "0x2ac606a5d49dd3b0ea29d06e06f5714d7", + "b": "0x3cf44f1f26196a000000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x2e954b97c6ff6a50ea29d06e06f5714d7", + "a_m_sub_b_m": "0x26f6c1b3e23c3d10ea29d06e06f5714d7", + "a_m_mul_b_m": "0x214e1edd2b8e107a6a98e2a0e9931856e", + "a_eq_b": false, + "a_m_pow_b": "0x1f39b1029c61d5fcabc0f301547a019d3" + }, + { + "a": "0x1c98fa418e6b880000000000000000000", + "b": "0x21566dfed2636a00", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1c98fa418e6b8800021566dfed2636a00", + "a_m_sub_b_m": "0x1c98fa418e6b87fffdea992012d9c9600", + "a_m_mul_b_m": "0x6293403f38da2108592008a14576da10", + "a_eq_b": false, + "a_m_pow_b": "0x2998dd19fc6ba917bc548361d519e03e6" + }, + { + "a": "0x6bf010509228dc0000000000000000", + "b": "0x24f73efb170dc9c84f56962c2706c360e", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x24fdfdfc1c16ec560f56962c2706c360e", + "a_m_sub_b_m": "0xc5087bfdd6db84d6ab263d186ce312ac", + "a_m_mul_b_m": "0x1b61b3717c640b37d8a72e011bdcffcba", + "a_eq_b": false, + "a_m_pow_b": "0x8835bab4134befc74afb9e2cf7d7245a" + }, + { + "a": "0x4192ad4c", + "b": "0x4192ad4c", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x83255a98", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x10cbd00ab7ffce90", + "a_eq_b": true, + "a_m_pow_b": "0x286ef25d8107c8b37fa01778789085616" + }, + { + "a": "0xe1c7cdb7eda178000000000000000", + "b": "0x5b50faa61a7324000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xe1c7cdb7f35687aa61a7324000000", + "a_m_sub_b_m": "0xe1c7cdb7e7ec68559e58cdc000000", + "a_m_mul_b_m": "0x1d8d7fb7abc47fbaceea3e493d573e7a8", + "a_eq_b": false, + "a_m_pow_b": "0xae3e0748a52d836c3a104972a40ef57a" + }, + { + "a": "0x2", + "b": "0xdab7bba328047800000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0xdab7bba328047800000002", + "a_m_sub_b_m": "0x314107b9ef64b40c3fd679b62dd4f48bc", + "a_m_mul_b_m": "0x1b56f77465008f000000000", + "a_eq_b": false, + "a_m_pow_b": "0x2d71de11f75d8393dbdbb615cc3655e6a" + }, + { + "a": "0x169373b3d32", + "b": "0x16a7ba5e6ebf490000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x16a7ba5e6ebf4900000169373b3d32", + "a_m_sub_b_m": "0x313f9d3e498b73936a08fa144148a85ec", + "a_m_mul_b_m": "0x12611c061b290fab159db07bd0c4f963c", + "a_eq_b": false, + "a_m_pow_b": "0xe5974e146c2b0b171923266c58b5de1e" + }, + { + "a": "0x9caaee15a966900000000000", + "b": "0x1215688d77e6d6000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x9cab002b11f407e6d6000000", + "a_m_sub_b_m": "0x9caadc0040d918192a000000", + "a_m_mul_b_m": "0x2488544e56adb2174ccfc723379b60580", + "a_eq_b": false, + "a_m_pow_b": "0x2221db3596945a2b83d04637cb084e0e6" + }, + { + "a": "0x1c2", + "b": "0x1defd2093c05f500000000000000000", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x1defd2093c05f5000000000000001c2", + "a_m_sub_b_m": "0x312317e7e6365992fa08f9fdadd4f4a7c", + "a_m_mul_b_m": "0x35e877a4c10192205f70602522b0b746", + "a_eq_b": false, + "a_m_pow_b": "0x26e24ec4a7ea12d6dc79121596e587d8e" + }, + { + "a": "0x17cf8cf419dfcf00000000000000000", + "b": "0x25e6cc9e41768599decffd101cb622873", + "m": "0x314107b9ef725f87fa08f9fdadd4f48ba", + "a_m_add_b_m": "0x25fe9c2b35906568decffd101cb622873", + "a_m_sub_b_m": "0xb720aa8a215b9bd1b38fced911ed2047", + "a_m_mul_b_m": "0x4b4a55c3504ab5067b758397bf1db958", + "a_eq_b": false, + "a_m_pow_b": "0x77f9f17c06150c9e7bff6a37e88469c4" + } + ], + "goldilock": [ + { + "a": "0xcff72ccd0878f6db", + "b": "0xcff72ccd0878f6db", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9fee599b10f1edb5", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xbaa983155336de7c", + "a_eq_b": true, + "a_m_pow_b": "0x1e84dcc388c2556c" + }, + { + "a": "0x42d97c54", + "b": "0x42d97c54", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x85b2f8a8", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1174dcdf52c97b90", + "a_eq_b": true, + "a_m_pow_b": "0xb1cc3f5a3418d90a" + }, + { + "a": "0xec7870cda", + "b": "0xd49cf0c8c6f1c3ad", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xd49cf0d78e78d087", + "a_m_sub_b_m": "0x2b630f450095492e", + "a_m_mul_b_m": "0x9cf953f223fc69b0", + "a_eq_b": false, + "a_m_pow_b": "0x8dd96023f7efbbd5" + }, + { + "a": "0xdf98d37dcea0d00", + "b": "0x170170b4", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xdf98d37f3eb7db4", + "a_m_sub_b_m": "0xdf98d37c5e89c4c", + "a_m_mul_b_m": "0x94921fd2c5ffa430", + "a_eq_b": false, + "a_m_pow_b": "0xf807d4d82c63401a" + }, + { + "a": "0x5dc0f8857", + "b": "0x1a95bb345", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x7856b3b9c", + "a_m_sub_b_m": "0x432b3d512", + "a_m_mul_b_m": "0xbc6f1d5a1271946a", + "a_eq_b": false, + "a_m_pow_b": "0xe951a2a3f307464d" + }, + { + "a": "0x4", + "b": "0xc9d9e5988785d800", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xc9d9e5988785d804", + "a_m_sub_b_m": "0x36261a66787a2805", + "a_m_mul_b_m": "0x276796651e175ffd", + "a_eq_b": false, + "a_m_pow_b": "0xffffffff" + }, + { + "a": "0x1ad2cc", + "b": "0xb4eb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1b87b7", + "a_m_sub_b_m": "0x1a1de1", + "a_m_mul_b_m": "0x12f4d6f144", + "a_eq_b": false, + "a_m_pow_b": "0xf8385fc7a12d75bb" + }, + { + "a": "0x3ccbb8a", + "b": "0x600d5c", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x42cc8e6", + "a_m_sub_b_m": "0x36cae2e", + "a_m_mul_b_m": "0x16cf916d96798", + "a_eq_b": false, + "a_m_pow_b": "0x6011a2bce929bd61" + }, + { + "a": "0xa0ffb7b124a3b635", + "b": "0x1b1", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa0ffb7b124a3b7e6", + "a_m_sub_b_m": "0xa0ffb7b124a3b484", + "a_m_mul_b_m": "0x5085b3aef8e72e95", + "a_eq_b": false, + "a_m_pow_b": "0x49b1f9a7fbeeb529" + }, + { + "a": "0x7d5ab564", + "b": "0xe2446c90fee5d0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xe2446d0e599b34", + "a_m_sub_b_m": "0xff1dbb92ec5bcf95", + "a_m_mul_b_m": "0x6429b85536bf09ab", + "a_eq_b": false, + "a_m_pow_b": "0x8400187f70f20ce0" + }, + { + "a": "0x1086f808998e5e", + "b": "0xbf5bc1a8cb110ef8", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xbf6c48a0d3aa9d56", + "a_m_sub_b_m": "0x40b4c54e3d887f67", + "a_m_mul_b_m": "0x4c6f3fb72f806741", + "a_eq_b": false, + "a_m_pow_b": "0xa52867960705eeca" + }, + { + "a": "0x117f", + "b": "0x8e3d9793d6f1b", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x8e3d9793d809a", + "a_m_sub_b_m": "0xfff71c2586c2a265", + "a_m_mul_b_m": "0x9b8a79f039dae965", + "a_eq_b": false, + "a_m_pow_b": "0xe59cac050da0a7e8" + }, + { + "a": "0x2fd824cdcb59a", + "b": "0x9da40a3454fe81bb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9da707b6a1db3755", + "a_m_sub_b_m": "0x625ef34cf7de33e0", + "a_m_mul_b_m": "0x40239927a4653db7", + "a_eq_b": false, + "a_m_pow_b": "0x552f95f04b66d7a" + }, + { + "a": "0x7bd6879", + "b": "0x7", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x7bd6880", + "a_m_sub_b_m": "0x7bd6872", + "a_m_mul_b_m": "0x362ddb4f", + "a_eq_b": false, + "a_m_pow_b": "0x5a3b7929f866986d" + }, + { + "a": "0xd407f0248ca87000", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xd407f0248ca87000", + "a_m_sub_b_m": "0xd407f0248ca87000", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x997578a7b29f1000", + "b": "0x12997", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x997578a7b2a03997", + "a_m_sub_b_m": "0x997578a7b29de669", + "a_m_mul_b_m": "0xcd456b87e561bd9d", + "a_eq_b": false, + "a_m_pow_b": "0x8e86620b13a900fa" + }, + { + "a": "0x17c696e5912", + "b": "0x3ebbf7e4d6", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1bb25663de8", + "a_m_sub_b_m": "0x13dad76743c", + "a_m_mul_b_m": "0xda1b50027ff01fd4", + "a_eq_b": false, + "a_m_pow_b": "0xab165d61a8ae638a" + }, + { + "a": "0xaacc3362454", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xaacc3362454", + "a_m_sub_b_m": "0xaacc3362454", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1ee63717ed01a90", + "b": "0x3a82fe9b1720dc00", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3c71620c95f0f690", + "a_m_sub_b_m": "0xc76b64d567af3e91", + "a_m_mul_b_m": "0xc61012312fd7b8de", + "a_eq_b": false, + "a_m_pow_b": "0x7c2316c0e09da244" + }, + { + "a": "0x20547fc48900a00", + "b": "0xc4db49b7e3", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x20548c123d9c1e3", + "a_m_sub_b_m": "0x20547376d46521d", + "a_m_mul_b_m": "0x635f4e59b18a74d", + "a_eq_b": false, + "a_m_pow_b": "0x7cc3dab115991b57" + }, + { + "a": "0xa5df43", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa5df43", + "a_m_sub_b_m": "0xa5df43", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x32d1ba673048fc0", + "b": "0x3223f52d2e01440", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x64f5af945e4a400", + "a_m_sub_b_m": "0xadc53a0247b80", + "a_m_mul_b_m": "0x1c178652a4020d96", + "a_eq_b": false, + "a_m_pow_b": "0x1f5c3d89fd624c13" + }, + { + "a": "0x7a57bd548a57e00", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x7a57bd548a57e00", + "a_m_sub_b_m": "0x7a57bd548a57e00", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0xee323cad7630", + "b": "0xae876d0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xee324795ed00", + "a_m_sub_b_m": "0xee3231c4ff60", + "a_m_mul_b_m": "0x42727ec03cea1cda", + "a_eq_b": false, + "a_m_pow_b": "0x8559ec78489aa8c1" + }, + { + "a": "0x8e2af53d1df7", + "b": "0x94427773eec6c987", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9443059ee403e77e", + "a_m_sub_b_m": "0x6bbe16b606765471", + "a_m_mul_b_m": "0x2d6462445f9a80f1", + "a_eq_b": false, + "a_m_pow_b": "0xd4e30b765a501c1b" + }, + { + "a": "0xfe8b1737e93cef4b", + "b": "0x9c3", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xfe8b1737e93cf90e", + "a_m_sub_b_m": "0xfe8b1737e93ce588", + "a_m_mul_b_m": "0xc7c3b07dcdd3df6d", + "a_eq_b": false, + "a_m_pow_b": "0x581af1f53620faf4" + }, + { + "a": "0x7c1d07b", + "b": "0x10953", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x7c2d9ce", + "a_m_sub_b_m": "0x7c0c728", + "a_m_mul_b_m": "0x80a24a5eae1", + "a_eq_b": false, + "a_m_pow_b": "0x1025aa8356598105" + }, + { + "a": "0x4b3d8", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x4b3d8", + "a_m_sub_b_m": "0x4b3d8", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x11947e7ec", + "b": "0x4b25f85dd06d", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x4b2711a5b859", + "a_m_sub_b_m": "0xffffb4da20ea1780", + "a_m_mul_b_m": "0xc93bb87b10c92ceb", + "a_eq_b": false, + "a_m_pow_b": "0xdee6e2d01cafd86f" + }, + { + "a": "0x2c", + "b": "0xd6e07e6f7e297815", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xd6e07e6f7e297841", + "a_m_sub_b_m": "0x291f818f81d68818", + "a_m_mul_b_m": "0xee95bb4daf20a378", + "a_eq_b": false, + "a_m_pow_b": "0x7eb040e54f9a0026" + }, + { + "a": "0x5342db", + "b": "0x2078862de352", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x20788681262d", + "a_m_sub_b_m": "0xffffdf867a255f8a", + "a_m_mul_b_m": "0x8f8e5a9d51729b1c", + "a_eq_b": false, + "a_m_pow_b": "0x6845339cee4a00db" + }, + { + "a": "0x2fbc8b848e", + "b": "0x2fbc8b848e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x5f7917091c", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xc617ebc3c6d6b5de", + "a_eq_b": true, + "a_m_pow_b": "0x4cb07662599a6c60" + }, + { + "a": "0x13", + "b": "0x13", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x26", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x169", + "a_eq_b": true, + "a_m_pow_b": "0x582eb56bedb76899" + }, + { + "a": "0x12d", + "b": "0x162203cb09a1", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x162203cb0ace", + "a_m_sub_b_m": "0xffffe9dcfc34f78d", + "a_m_mul_b_m": "0x1a05fe75ba524d", + "a_eq_b": false, + "a_m_pow_b": "0xdf8aa01b17053b64" + }, + { + "a": "0x449dea6d3ac020", + "b": "0xb27b93816ebb5800", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xb2c0316bdbf61820", + "a_m_sub_b_m": "0x4dc90a67fe7f6821", + "a_m_mul_b_m": "0x6ab700dfe046f658", + "a_eq_b": false, + "a_m_pow_b": "0x630c3d2238c2a6c" + }, + { + "a": "0x19b5a3d8c", + "b": "0x47", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x19b5a3dd3", + "a_m_sub_b_m": "0x19b5a3d45", + "a_m_mul_b_m": "0x72160711d4", + "a_eq_b": false, + "a_m_pow_b": "0xf6a4f80e4caeeeeb" + }, + { + "a": "0x278", + "b": "0x89fb06ff788afa15", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x89fb06ff788afc8d", + "a_m_sub_b_m": "0x7604f8ff87750864", + "a_m_mul_b_m": "0xa3b9480597196284", + "a_eq_b": false, + "a_m_pow_b": "0x23cd4a08488ef175" + }, + { + "a": "0xbbb4c240a0fdd91b", + "b": "0xf5c189d45b53cd42", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xb1764c15fc51a65c", + "a_m_sub_b_m": "0xc5f3386b45aa0bda", + "a_m_mul_b_m": "0x8580f86653733abc", + "a_eq_b": false, + "a_m_pow_b": "0x427e3dd4289a5753" + }, + { + "a": "0xd2cd1d", + "b": "0x83", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xd2cda0", + "a_m_sub_b_m": "0xd2cc9a", + "a_m_mul_b_m": "0x6bdef5d7", + "a_eq_b": false, + "a_m_pow_b": "0x811de4e87cff7578" + }, + { + "a": "0xa66b8c", + "b": "0x3b7c99d", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x45e3529", + "a_m_sub_b_m": "0xfffffffefceea1f0", + "a_m_mul_b_m": "0x26abc9594e0dc", + "a_eq_b": false, + "a_m_pow_b": "0xbf70fcd1d14323af" + }, + { + "a": "0x21bb3", + "b": "0x279", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x21e2c", + "a_m_sub_b_m": "0x2193a", + "a_m_mul_b_m": "0x5367d9b", + "a_eq_b": false, + "a_m_pow_b": "0x64fe7d88b7f7b929" + }, + { + "a": "0x12557e38ee0", + "b": "0x18399a", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x12557fbc87a", + "a_m_sub_b_m": "0x12557cb5546", + "a_m_mul_b_m": "0x1bc23e5deeb3d2c0", + "a_eq_b": false, + "a_m_pow_b": "0x75502b2ef37a236d" + }, + { + "a": "0x3f8d12", + "b": "0xaa4716fee9ba2", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xaa471702e28b4", + "a_m_sub_b_m": "0xfff55b8d9050f171", + "a_m_mul_b_m": "0x553c98fc975d28c0", + "a_eq_b": false, + "a_m_pow_b": "0xd8df4bc761a42c17" + }, + { + "a": "0xcd61a966961516b5", + "b": "0x94e2ef1550ecb7bf", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x6244987ce701ce73", + "a_m_sub_b_m": "0x387eba5145285ef6", + "a_m_mul_b_m": "0x17914cddf1f6046c", + "a_eq_b": false, + "a_m_pow_b": "0x3d4eda513d00cf8" + }, + { + "a": "0x3254c7ee4680", + "b": "0xe1fb0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3254c7fc6630", + "a_m_sub_b_m": "0x3254c7e026d0", + "a_m_mul_b_m": "0xc6ddcd892959f7fe", + "a_eq_b": false, + "a_m_pow_b": "0xf869f8d12269cced" + }, + { + "a": "0x1145", + "b": "0xcf9b505e2", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xcf9b51727", + "a_m_sub_b_m": "0xfffffff2064b0b64", + "a_m_mul_b_m": "0xe014532e97ea", + "a_eq_b": false, + "a_m_pow_b": "0x5681cca2b84bba8d" + }, + { + "a": "0x319645b2da56", + "b": "0x12fb52f", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x319646e28f85", + "a_m_sub_b_m": "0x319644832527", + "a_m_mul_b_m": "0xd3f4d8c8abfee390", + "a_eq_b": false, + "a_m_pow_b": "0xa3844c26985a43d6" + }, + { + "a": "0x57097a6e18a", + "b": "0x15fc398384a", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x6d05b3f19d4", + "a_m_sub_b_m": "0x410d40ea940", + "a_m_mul_b_m": "0xed6712575f7be85d", + "a_eq_b": false, + "a_m_pow_b": "0x94eb5cb8640162cf" + }, + { + "a": "0x40", + "b": "0x40", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x80", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1000", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0xe677a53d3d47", + "b": "0x3f77c479e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xe67b9cb984e5", + "a_m_sub_b_m": "0xe673adc0f5a9", + "a_m_mul_b_m": "0x4296d67e272af09e", + "a_eq_b": false, + "a_m_pow_b": "0x19222b411233b463" + }, + { + "a": "0x113b34d0566", + "b": "0xa21", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x113b34d0f87", + "a_m_sub_b_m": "0x113b34cfb45", + "a_m_mul_b_m": "0xae88b1f23ae26", + "a_eq_b": false, + "a_m_pow_b": "0x35df5448a58b84fa" + }, + { + "a": "0x2e3c", + "b": "0x8738cfbf07b0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x8738cfbf35ec", + "a_m_sub_b_m": "0xffff78c63041268d", + "a_m_mul_b_m": "0x186be6a504276d40", + "a_eq_b": false, + "a_m_pow_b": "0xc43c70a83da9ce3b" + }, + { + "a": "0x38", + "b": "0x28e7c82f", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x28e7c867", + "a_m_sub_b_m": "0xfffffffed718380a", + "a_m_mul_b_m": "0x8f2b3ca48", + "a_eq_b": false, + "a_m_pow_b": "0xc0c8af2c7abbc3d8" + }, + { + "a": "0xfa5e1720", + "b": "0x11db4328", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x10c395a48", + "a_m_sub_b_m": "0xe882d3f8", + "a_m_mul_b_m": "0x1176afb4a720fd00", + "a_eq_b": false, + "a_m_pow_b": "0x2d7e114302ba0dcf" + }, + { + "a": "0xd7", + "b": "0x4ca89ba36ae", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x4ca89ba3785", + "a_m_sub_b_m": "0xfffffb347645ca2a", + "a_m_mul_b_m": "0x40619ab63ec22", + "a_eq_b": false, + "a_m_pow_b": "0x9248e6a9ef294dce" + }, + { + "a": "0x1bd8362a070", + "b": "0x26c26", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1bd83650c96", + "a_m_sub_b_m": "0x1bd8360344a", + "a_m_mul_b_m": "0x4373c545d3310a0", + "a_eq_b": false, + "a_m_pow_b": "0xf4ca76db53d98003" + }, + { + "a": "0xdd8776140d", + "b": "0x2827877847bf5a", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x282864ffbdd367", + "a_m_sub_b_m": "0xffd7d9550f2e54b4", + "a_m_mul_b_m": "0xc6af6e433d546042", + "a_eq_b": false, + "a_m_pow_b": "0x574aa45d4c8622b4" + }, + { + "a": "0x8", + "b": "0x7e41c3676", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x7e41c367e", + "a_m_sub_b_m": "0xfffffff71be3c993", + "a_m_mul_b_m": "0x3f20e1b3b0", + "a_eq_b": false, + "a_m_pow_b": "0xfffffffb00000005" + }, + { + "a": "0x13f906", + "b": "0xc78ae8bb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xc79ee1c1", + "a_m_sub_b_m": "0xfffffffe3889104c", + "a_m_mul_b_m": "0xf916a0f805762", + "a_eq_b": false, + "a_m_pow_b": "0x503d7330aa6c67c4" + }, + { + "a": "0x3", + "b": "0xecc77f638fdeab3c", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xecc77f638fdeab3f", + "a_m_sub_b_m": "0x1338809b702154c8", + "a_m_mul_b_m": "0xc6567e2caf9c01b2", + "a_eq_b": false, + "a_m_pow_b": "0x172d35495db1723d" + }, + { + "a": "0x0", + "b": "0xa7ea1a21e84b60ec", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa7ea1a21e84b60ec", + "a_m_sub_b_m": "0x5815e5dd17b49f15", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x9483d939b38", + "b": "0x82b2cb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9483e164e03", + "a_m_sub_b_m": "0x9483d10e86d", + "a_m_mul_b_m": "0xbd2adc1248690564", + "a_eq_b": false, + "a_m_pow_b": "0x9e1b78ac0ef6b406" + }, + { + "a": "0x3cfd8865c", + "b": "0x22383c4", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3d1fc0a20", + "a_m_sub_b_m": "0x3cdb50298", + "a_m_mul_b_m": "0x82711ee051bf270", + "a_eq_b": false, + "a_m_pow_b": "0xa7826460346ec80b" + }, + { + "a": "0x0", + "b": "0x95b622365b28", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x95b622365b28", + "a_m_sub_b_m": "0xffff6a48ddc9a4d9", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x10", + "b": "0x13076a", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x13077a", + "a_m_sub_b_m": "0xfffffffeffecf8a7", + "a_m_mul_b_m": "0x13076a0", + "a_eq_b": false, + "a_m_pow_b": "0xfffffeff00000101" + }, + { + "a": "0x1ad3f2156b62ce0", + "b": "0x20dd5", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1ad3f2156b83ab5", + "a_m_sub_b_m": "0x1ad3f2156b41f0b", + "a_m_mul_b_m": "0xaf9ce901bf9ab2ef", + "a_eq_b": false, + "a_m_pow_b": "0xd4e1d7aeda98f03b" + }, + { + "a": "0x48ff136b2", + "b": "0x26a86bbaef2a9e0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x26a86c03ee3e092", + "a_m_sub_b_m": "0xfd957947e0fe8cd3", + "a_m_mul_b_m": "0x9ab70f3ad5697ac2", + "a_eq_b": false, + "a_m_pow_b": "0x372ca20c02438785" + }, + { + "a": "0x33f8", + "b": "0xac44ba3", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xac47f9b", + "a_m_sub_b_m": "0xfffffffef53be856", + "a_m_mul_b_m": "0x22f893abee8", + "a_eq_b": false, + "a_m_pow_b": "0xf025fc4045a19a30" + }, + { + "a": "0x101166d362a82b", + "b": "0x1d41b0130f64a700", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1d51c179e2c74f2b", + "a_m_sub_b_m": "0xe2ce6152c3fe012c", + "a_m_mul_b_m": "0x81f945df73476a83", + "a_eq_b": false, + "a_m_pow_b": "0xb9100100f984e88d" + }, + { + "a": "0x1463", + "b": "0x598", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x19fb", + "a_m_sub_b_m": "0xecb", + "a_m_mul_b_m": "0x7209c8", + "a_eq_b": false, + "a_m_pow_b": "0xae5cda138facbe2c" + }, + { + "a": "0xda", + "b": "0x3fc56fa92e8af0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3fc56fa92e8bca", + "a_m_sub_b_m": "0xffc03a8f56d175eb", + "a_m_mul_b_m": "0x364e211611a25060", + "a_eq_b": false, + "a_m_pow_b": "0x1a1e6f4b4d4e9a70" + }, + { + "a": "0xff4f2ec1bcbbf1f9", + "b": "0xff4f2ec1bcbbf1f9", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xfe9e5d847977e3f1", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xe946055045c2d20f", + "a_eq_b": true, + "a_m_pow_b": "0xfc93f567bcd15c91" + }, + { + "a": "0xcbaf1561f08df7c1", + "b": "0xad50c0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xcbaf1561f13b4881", + "a_m_sub_b_m": "0xcbaf1561efe0a701", + "a_m_mul_b_m": "0xedb81a2134c93b30", + "a_eq_b": false, + "a_m_pow_b": "0x8224c652b3c93c14" + }, + { + "a": "0x2cb01a", + "b": "0x4a8f443348", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x4a8f70e362", + "a_m_sub_b_m": "0xffffffb470e87cd3", + "a_m_mul_b_m": "0xd03e9ca408eb550", + "a_eq_b": false, + "a_m_pow_b": "0x830b4fe2fd4252d3" + }, + { + "a": "0x1f9", + "b": "0x123b31f02533cd00", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x123b31f02533cef9", + "a_m_sub_b_m": "0xedc4ce0edacc34fa", + "a_m_mul_b_m": "0xf6c582dc632f64dd", + "a_eq_b": false, + "a_m_pow_b": "0x2a5ab8d896b275d9" + }, + { + "a": "0x201f0", + "b": "0x2c5ee430068e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2c5ee432087e", + "a_m_sub_b_m": "0xffffd3a01bd1fb63", + "a_m_mul_b_m": "0x5913c03a2a28b320", + "a_eq_b": false, + "a_m_pow_b": "0x69f94ecac053c6f2" + }, + { + "a": "0x292d0cb", + "b": "0x292d0cb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x525a196", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x69f75fdd680f9", + "a_eq_b": true, + "a_m_pow_b": "0xc9e83decdb7efa98" + }, + { + "a": "0xa308f50a7b5b2", + "b": "0x71bfee8a", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa308fc267a43c", + "a_m_sub_b_m": "0xa308edee7c728", + "a_m_mul_b_m": "0xfc2f25a3871ce6e2", + "a_eq_b": false, + "a_m_pow_b": "0x40d1adbfe2694299" + }, + { + "a": "0xd8ef0e4d84f818", + "b": "0xd8ef0e4d84f818", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1b1de1c9b09f030", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xc91fbadbf1cf447f", + "a_eq_b": true, + "a_m_pow_b": "0xf6caf3bdd9c29ae7" + }, + { + "a": "0xe8a60fc61", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xe8a60fc61", + "a_m_sub_b_m": "0xe8a60fc61", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x7033d1a971a0b4", + "b": "0xc42151dd8b85", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x70f7f2fb4f2c39", + "a_m_sub_b_m": "0x6f6fb05794152f", + "a_m_mul_b_m": "0x6009a53736723ed", + "a_eq_b": false, + "a_m_pow_b": "0xd62a4fa46ced51de" + }, + { + "a": "0x63cf0c66b0dfa", + "b": "0x3b28896", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x63cf0ca1d9690", + "a_m_sub_b_m": "0x63cf0c2b88564", + "a_m_mul_b_m": "0x85c4ed26c7fae96c", + "a_eq_b": false, + "a_m_pow_b": "0xa9b6cc27e821fcbd" + }, + { + "a": "0x0", + "b": "0x14fb691cc2f24a", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x14fb691cc2f24a", + "a_m_sub_b_m": "0xffeb0495e33d0db7", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x9e88eebf", + "b": "0x5aad549", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa433c408", + "a_m_sub_b_m": "0x98de1976", + "a_m_mul_b_m": "0x38277ad6986ff77", + "a_eq_b": false, + "a_m_pow_b": "0xc0a3039828bdaf77" + }, + { + "a": "0x0", + "b": "0x413", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x413", + "a_m_sub_b_m": "0xfffffffefffffbee", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x9a763d22fa7068", + "b": "0x1d5", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9a763d22fa723d", + "a_m_sub_b_m": "0x9a763d22fa6e93", + "a_m_mul_b_m": "0x1afa9e0214cfee87", + "a_eq_b": false, + "a_m_pow_b": "0x1d668dc8ae081e5e" + }, + { + "a": "0x160", + "b": "0x10b0cbb34ae335", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x10b0cbb34ae495", + "a_m_sub_b_m": "0xffef4f334cb51e2c", + "a_m_mul_b_m": "0x16f3181686f868e0", + "a_eq_b": false, + "a_m_pow_b": "0xf3876b08a96e7ee1" + }, + { + "a": "0x620e5fd3", + "b": "0x1317", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x620e72ea", + "a_m_sub_b_m": "0x620e4cbc", + "a_m_mul_b_m": "0x74fe06744f5", + "a_eq_b": false, + "a_m_pow_b": "0x8089b99d66cd1d8b" + }, + { + "a": "0x1e2ff", + "b": "0x44ffd2aa4667f800", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x44ffd2aa4669daff", + "a_m_sub_b_m": "0xbb002d54b999eb00", + "a_m_mul_b_m": "0x6577f259e27f85d2", + "a_eq_b": false, + "a_m_pow_b": "0xd07c4dee91d07a94" + }, + { + "a": "0x0", + "b": "0x10c81f5a74967e0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x10c81f5a74967e0", + "a_m_sub_b_m": "0xfef37e0958b69821", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x29f7f8500", + "b": "0x68443788a04248", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x68443a281fc748", + "a_m_sub_b_m": "0xff97bbca16df42b9", + "a_m_mul_b_m": "0x932b2df3db15e943", + "a_eq_b": false, + "a_m_pow_b": "0xf7cbdebadec7c0d3" + }, + { + "a": "0x10284d7212", + "b": "0x3f8a5", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1028516ab7", + "a_m_sub_b_m": "0x102849796d", + "a_m_mul_b_m": "0x402a5d56a1f59a", + "a_eq_b": false, + "a_m_pow_b": "0xbae299b75e292177" + }, + { + "a": "0x5e5842", + "b": "0xf14087f145c9d800", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xf14087f146283042", + "a_m_sub_b_m": "0xebf780dba948043", + "a_m_mul_b_m": "0x4c4e852caff0c722", + "a_eq_b": false, + "a_m_pow_b": "0xcbf54c3bef2ef779" + }, + { + "a": "0x3", + "b": "0x9df2cb295109800", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9df2cb295109803", + "a_m_sub_b_m": "0xf620d34c6aef6804", + "a_m_mul_b_m": "0x1d9d8617bf31c800", + "a_eq_b": false, + "a_m_pow_b": "0xfa7ee0d96dbe59e5" + }, + { + "a": "0x9ffee98f91c73e1d", + "b": "0x84ab3b0a8799b000", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x24aa249b1960ee1c", + "a_m_sub_b_m": "0x1b53ae850a2d8e1d", + "a_m_mul_b_m": "0xfa52cf04b384ae91", + "a_eq_b": false, + "a_m_pow_b": "0xd76109518a30fbea" + }, + { + "a": "0x2bdeb23ab9653", + "b": "0x7a22858808", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2be6546311e5b", + "a_m_sub_b_m": "0x2bd7101260e4b", + "a_m_mul_b_m": "0x5bf5b0ac6308e9e2", + "a_eq_b": false, + "a_m_pow_b": "0xd145dda4189581c0" + }, + { + "a": "0x191f7", + "b": "0xcc0f92f60c7c9761", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xcc0f92f60c7e2958", + "a_m_sub_b_m": "0x33f06d08f384fa97", + "a_m_mul_b_m": "0x483b755e3553bf2e", + "a_eq_b": false, + "a_m_pow_b": "0xaf2250d004cce6fa" + }, + { + "a": "0x46daa0cd1ce", + "b": "0x30", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x46daa0cd1fe", + "a_m_sub_b_m": "0x46daa0cd19e", + "a_m_mul_b_m": "0xd48fe26756a0", + "a_eq_b": false, + "a_m_pow_b": "0xa465b4c8bc6f2587" + }, + { + "a": "0x61202429425a0", + "b": "0x25c0d02ba23e400", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2621f04fcb809a0", + "a_m_sub_b_m": "0xfdaa04fe887041a1", + "a_m_mul_b_m": "0x1f99ed018a12b0cf", + "a_eq_b": false, + "a_m_pow_b": "0x432c8528cf4fbcc4" + }, + { + "a": "0x1", + "b": "0x1df3ba3a7d7cf5", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1df3ba3a7d7cf6", + "a_m_sub_b_m": "0xffe20c44c582830d", + "a_m_mul_b_m": "0x1df3ba3a7d7cf5", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x112aa367ee", + "b": "0x49da60b331", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x5b05041b1f", + "a_m_sub_b_m": "0xffffffc65042b4be", + "a_m_mul_b_m": "0xcd63cfb21032499b", + "a_eq_b": false, + "a_m_pow_b": "0x2aed118d5531de9b" + }, + { + "a": "0xe91214603bc3f21f", + "b": "0x965", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xe91214603bc3fb84", + "a_m_sub_b_m": "0xe91214603bc3e8ba", + "a_m_mul_b_m": "0x96d9749e77d194ae", + "a_eq_b": false, + "a_m_pow_b": "0xaebeacee98dedce9" + }, + { + "a": "0x2c2b58db0a5", + "b": "0x2c2b58db0a5", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x5856b1b614a", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xe24b9736619dab6c", + "a_eq_b": true, + "a_m_pow_b": "0xe2bfd5c495884207" + }, + { + "a": "0x0", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x0", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x7ded21b8627e", + "b": "0x2603f04", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x7ded2418a182", + "a_m_sub_b_m": "0x7ded1f58237a", + "a_m_mul_b_m": "0x322f6a15d25e8acd", + "a_eq_b": false, + "a_m_pow_b": "0x745b29d1eaf9df6" + }, + { + "a": "0x143bc2c", + "b": "0x876133882e66500", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x8761338842a212c", + "a_m_sub_b_m": "0xf789ecc67e5d572d", + "a_m_mul_b_m": "0x6ac0a9bb20baa8ce", + "a_eq_b": false, + "a_m_pow_b": "0x17ea313c4650c777" + }, + { + "a": "0xa57cbd75724", + "b": "0x304e378ce27f3e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x30588f58b9d662", + "a_m_sub_b_m": "0xffcfbc1f3ef4d7e7", + "a_m_mul_b_m": "0xdc4faeeadc8abfad", + "a_eq_b": false, + "a_m_pow_b": "0x15d418fca00f8712" + }, + { + "a": "0xdb9", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xdb9", + "a_m_sub_b_m": "0xdb9", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x22b34f", + "b": "0x5eb6845", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x60e1b94", + "a_m_sub_b_m": "0xfffffffefa374b0b", + "a_m_mul_b_m": "0xcd6946b76c4b", + "a_eq_b": false, + "a_m_pow_b": "0xd12a4464648898c0" + }, + { + "a": "0xce10c17e45c0d", + "b": "0xe71241eb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xce10cfef69df8", + "a_m_sub_b_m": "0xce10b30d21a22", + "a_m_mul_b_m": "0xd6b05461dde2cf2", + "a_eq_b": false, + "a_m_pow_b": "0xdb6307f1fbf14cd3" + }, + { + "a": "0x4bab5c0", + "b": "0xe9a0476094", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xe9a5021654", + "a_m_sub_b_m": "0xffffff156473552d", + "a_m_mul_b_m": "0x50e56eed285912fc", + "a_eq_b": false, + "a_m_pow_b": "0xb53d1de391f5dbb0" + }, + { + "a": "0x2412f81d6c7", + "b": "0x51ac", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2412f822873", + "a_m_sub_b_m": "0x2412f81851b", + "a_m_mul_b_m": "0xb823d4003144b4", + "a_eq_b": false, + "a_m_pow_b": "0xb673826ce7ddcb27" + }, + { + "a": "0x381", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x381", + "a_m_sub_b_m": "0x381", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1c08d97ad0c", + "b": "0x1543e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1c08d99014a", + "a_m_sub_b_m": "0x1c08d9658ce", + "a_m_mul_b_m": "0x25428afbc8fd8e8", + "a_eq_b": false, + "a_m_pow_b": "0x8e60dd6231ef1f70" + }, + { + "a": "0x7", + "b": "0x3b3fdd0206724", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3b3fdd020672b", + "a_m_sub_b_m": "0xfffc4c012fdf98e4", + "a_m_mul_b_m": "0x19ebf0b0e2d1fc", + "a_eq_b": false, + "a_m_pow_b": "0x5a77702170d1723b" + }, + { + "a": "0x1111cf58ea8dc", + "b": "0x15b60853ab91", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x126d2fde2546d", + "a_m_sub_b_m": "0xfb66ed3afd4b", + "a_m_mul_b_m": "0x8988c7f9e8c304ff", + "a_eq_b": false, + "a_m_pow_b": "0x313916e74c9c2a33" + }, + { + "a": "0x6fd16", + "b": "0x1614", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x7132a", + "a_m_sub_b_m": "0x6e702", + "a_m_mul_b_m": "0x9a4ba9b8", + "a_eq_b": false, + "a_m_pow_b": "0xc4b2bade43bb050b" + }, + { + "a": "0x240017e51c01b0", + "b": "0x110db", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x240017e51d128b", + "a_m_sub_b_m": "0x240017e51af0d5", + "a_m_mul_b_m": "0x5ee57804c0c0716a", + "a_eq_b": false, + "a_m_pow_b": "0x35c465015ec6cd3f" + }, + { + "a": "0x3915a75d4ded3a0", + "b": "0x3915a75d4ded3a0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x722b4eba9bda740", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xc92b2dfe5bf4fc10", + "a_eq_b": true, + "a_m_pow_b": "0xb2ddac3f14bdce32" + }, + { + "a": "0xd7ab6bdd6f086f65", + "b": "0x9706c", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xd7ab6bdd6f11dfd1", + "a_m_sub_b_m": "0xd7ab6bdd6efefef9", + "a_m_mul_b_m": "0xc6533d0672d03ae0", + "a_eq_b": false, + "a_m_pow_b": "0x981079489fed8439" + }, + { + "a": "0x10169d7c2", + "b": "0x83a07630003ff", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x83a086469dbc1", + "a_m_sub_b_m": "0xfff7c5f89e69d3c4", + "a_m_mul_b_m": "0x266b126aabecea96", + "a_eq_b": false, + "a_m_pow_b": "0x3be0ffb108b5a2b1" + }, + { + "a": "0x9e60a1200321", + "b": "0x12088fd37209ce00", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x12092e341329d121", + "a_m_sub_b_m": "0xedf80e8c2f163522", + "a_m_mul_b_m": "0x4a15c3ca79596f6d", + "a_eq_b": false, + "a_m_pow_b": "0xb2065ff4d24a1269" + }, + { + "a": "0x11ab75c35b4d", + "b": "0x11ab75c35b4d", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2356eb86b69a", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x7c8091e098a59caf", + "a_eq_b": true, + "a_m_pow_b": "0xcc31f8886fe7430d" + }, + { + "a": "0x24750", + "b": "0x8cb0485fafe2f000", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x8cb0485fafe53750", + "a_m_sub_b_m": "0x734fb79f501f5751", + "a_m_mul_b_m": "0x6be9c805c779bf6f", + "a_eq_b": false, + "a_m_pow_b": "0xe94fdffa3cc8fd5c" + }, + { + "a": "0x157c2c17e", + "b": "0x157c2c17e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2af8582fc", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xcd9b76aa79373a03", + "a_eq_b": true, + "a_m_pow_b": "0x745911bf68dd4487" + }, + { + "a": "0x73cd2df1", + "b": "0x7", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x73cd2df8", + "a_m_sub_b_m": "0x73cd2dea", + "a_m_mul_b_m": "0x32a9c4197", + "a_eq_b": false, + "a_m_pow_b": "0xfc4e5ff00826fca3" + }, + { + "a": "0x96b8b01197ec1a40", + "b": "0x96b8b01197ec1a40", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2d7160242fd8347f", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1807217a5f88d82b", + "a_eq_b": true, + "a_m_pow_b": "0xdf8c460dd0af12b7" + }, + { + "a": "0x668c2", + "b": "0x30dcb9068dd2c600", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x30dcb9068dd92ec2", + "a_m_sub_b_m": "0xcf2346f87233a2c3", + "a_m_mul_b_m": "0x8976cb0be28d2d5", + "a_eq_b": false, + "a_m_pow_b": "0x10a7c072647d59d3" + }, + { + "a": "0x12b739da1c", + "b": "0x5da6", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x12b73a37c2", + "a_m_sub_b_m": "0x12b7397c76", + "a_m_mul_b_m": "0x6d8b2d3bf9a28", + "a_eq_b": false, + "a_m_pow_b": "0xb24bd289ec1456d1" + }, + { + "a": "0x34809fff9dd", + "b": "0x7a3a43", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3480a7a3420", + "a_m_sub_b_m": "0x3480985bf9a", + "a_m_mul_b_m": "0x9113f21cafec76d6", + "a_eq_b": false, + "a_m_pow_b": "0xef8e78f156a75080" + }, + { + "a": "0x2e9", + "b": "0xc32", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xf1b", + "a_m_sub_b_m": "0xfffffffefffff6b8", + "a_m_mul_b_m": "0x237d82", + "a_eq_b": false, + "a_m_pow_b": "0x5136f9f6c6c67b1f" + }, + { + "a": "0x8d2a5659265a9190", + "b": "0x81fd679647bd", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x8d2ad8568df0d94d", + "a_m_sub_b_m": "0x8d29d45bbec449d3", + "a_m_mul_b_m": "0x933f7f09822f618", + "a_eq_b": false, + "a_m_pow_b": "0xd88c76908e57ac1b" + }, + { + "a": "0x64", + "b": "0xd58c96f2cb09c00", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xd58c96f2cb09c64", + "a_m_sub_b_m": "0xf2a7368fd34f6465", + "a_m_mul_b_m": "0x36aeaf7274fceffb", + "a_eq_b": false, + "a_m_pow_b": "0xfc366c68b3d715ed" + }, + { + "a": "0x37", + "b": "0x37", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x6e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xbd1", + "a_eq_b": true, + "a_m_pow_b": "0xdf5f6c9fd0b9698" + }, + { + "a": "0x2cad7d0c0ad6", + "b": "0x4d466ab231b1", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x79f3e7be3c87", + "a_m_sub_b_m": "0xffffdf661259d926", + "a_m_mul_b_m": "0xcd1dd4eddab5fb4b", + "a_eq_b": false, + "a_m_pow_b": "0x16e3b34031aa0b59" + }, + { + "a": "0xaac2b7e772e27", + "b": "0x114a9574", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xaac2b8fc1c39b", + "a_m_sub_b_m": "0xaac2b6d2c98b3", + "a_m_mul_b_m": "0xe304855e9a22e422", + "a_eq_b": false, + "a_m_pow_b": "0x4c7350ec46350a75" + }, + { + "a": "0x2afa08", + "b": "0xb790", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2bb198", + "a_m_sub_b_m": "0x2a4278", + "a_m_mul_b_m": "0x1ed0e85c80", + "a_eq_b": false, + "a_m_pow_b": "0xc651246e50a9bcc2" + }, + { + "a": "0x7ab88f", + "b": "0xd071c6ebf7003585", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xd071c6ebf77aee14", + "a_m_sub_b_m": "0x2f8e3913097a830b", + "a_m_mul_b_m": "0x35f59efa09390cc", + "a_eq_b": false, + "a_m_pow_b": "0xbf784ba8c88faf2c" + }, + { + "a": "0x6f84d68db4488", + "b": "0x6f84d68db4488", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xdf09ad1b68910", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xde789a243e918b38", + "a_eq_b": true, + "a_m_pow_b": "0x8e2db7910fe11a6" + }, + { + "a": "0x2", + "b": "0xc735c0d1e9edc59c", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xc735c0d1e9edc59e", + "a_m_sub_b_m": "0x38ca3f2d16123a67", + "a_m_mul_b_m": "0x8e6b81a4d3db8b37", + "a_eq_b": false, + "a_m_pow_b": "0xefffffff00000001" + }, + { + "a": "0x3ca750c8195", + "b": "0x6a4c670d7dd", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa6f3b7d5972", + "a_m_sub_b_m": "0xfffffd24ae9ba9b9", + "a_m_mul_b_m": "0x8972e09b7bb6d140", + "a_eq_b": false, + "a_m_pow_b": "0x4494fb5dd4693ffc" + }, + { + "a": "0x12f1ebb78f6", + "b": "0x12f1ebb78f6", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x25e3d76f1ec", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xc37a36e0988a257b", + "a_eq_b": true, + "a_m_pow_b": "0x61a75e812a978e70" + }, + { + "a": "0x156c98c", + "b": "0x805618bddd82ab3e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x805618bdded974ca", + "a_m_sub_b_m": "0x7fa9e74123d41e4f", + "a_m_mul_b_m": "0xd6d45f5f80117bda", + "a_eq_b": false, + "a_m_pow_b": "0x7e31d9d00746b50f" + }, + { + "a": "0x4deb64f204187c0", + "b": "0x4deb64f204187c0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9bd6c9e40830f80", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xb699d36d0b51c056", + "a_eq_b": true, + "a_m_pow_b": "0x90d82c84e3b8561f" + }, + { + "a": "0xa1ae74822f4fc8", + "b": "0x8c1651945af9", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa23a8ad3c3aac1", + "a_m_sub_b_m": "0xa1225e309af4cf", + "a_m_mul_b_m": "0xb65656f93030ae16", + "a_eq_b": false, + "a_m_pow_b": "0xd8948fd3e065a5e7" + }, + { + "a": "0x25f59df5637bc", + "b": "0x3e347feb49d450", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x4093d9caa00c0c", + "a_m_sub_b_m": "0xffc42ad8f40c636d", + "a_m_mul_b_m": "0xb4ab81815634621", + "a_eq_b": false, + "a_m_pow_b": "0x24a9118578d30fe0" + }, + { + "a": "0x0", + "b": "0x1fb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1fb", + "a_m_sub_b_m": "0xfffffffefffffe06", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x0", + "b": "0xa33a8d893b", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa33a8d893b", + "a_m_sub_b_m": "0xffffff5bc57276c6", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x1", + "b": "0x2ecee06610e18400", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2ecee06610e18401", + "a_m_sub_b_m": "0xd1311f98ef1e7c02", + "a_m_mul_b_m": "0x2ecee06610e18400", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x873dcc6f03", + "b": "0x1640c8dc46192", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x16493cb90d095", + "a_m_sub_b_m": "0xfffe9c79b0080d72", + "a_m_mul_b_m": "0x1579edeb59375a24", + "a_eq_b": false, + "a_m_pow_b": "0x75d2056627461e52" + }, + { + "a": "0x9754db94dae7c00", + "b": "0x1781e3c0e1926d", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x98ccf9d0e900e6d", + "a_m_sub_b_m": "0x95dcbd58ccce993", + "a_m_mul_b_m": "0xab8e737d100d57bb", + "a_eq_b": false, + "a_m_pow_b": "0x33f8c45f48374d87" + }, + { + "a": "0x316ec70ff9aad000", + "b": "0x2fc931b7ad", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x316ec73fc2dc87ad", + "a_m_sub_b_m": "0x316ec6e030791853", + "a_m_mul_b_m": "0x4dcb282c68ee7011", + "a_eq_b": false, + "a_m_pow_b": "0x74fc564089c158db" + }, + { + "a": "0x393232d8e77c", + "b": "0x38e5e353e6b446", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x391f1586bf9bc2", + "a_m_sub_b_m": "0xffc7534ddef23337", + "a_m_mul_b_m": "0x48bbf18be122aaab", + "a_eq_b": false, + "a_m_pow_b": "0xc81230c8fbe4b017" + }, + { + "a": "0x337d546a9d", + "b": "0xf98ee607e1d2700", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xf98ee93fb71919d", + "a_m_sub_b_m": "0xf06711d1ff37439e", + "a_m_mul_b_m": "0x7ba4d64c12ec9cb2", + "a_eq_b": false, + "a_m_pow_b": "0x51b315c277d26384" + }, + { + "a": "0x0", + "b": "0x41d01308548cbc0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x41d01308548cbc0", + "a_m_sub_b_m": "0xfbe2fece7ab73441", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x7497856b88c300", + "b": "0x16472d20005de100", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x16bbc4a56be6a400", + "a_m_sub_b_m": "0xea2d6a646b2ae201", + "a_m_mul_b_m": "0x1f77d737ffe4b78a", + "a_eq_b": false, + "a_m_pow_b": "0x758f0363cfcb14f" + }, + { + "a": "0x5b4c873b", + "b": "0x62973a570e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x62f286de49", + "a_m_sub_b_m": "0xffffff9cc412302e", + "a_m_mul_b_m": "0x293ab6df70827217", + "a_eq_b": false, + "a_m_pow_b": "0xd0f961b5c65c30bf" + }, + { + "a": "0x3a7eae", + "b": "0x3a7eae", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x74fd5c", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xd5da587be44", + "a_eq_b": true, + "a_m_pow_b": "0x9dcdb0a2b23dcd8a" + }, + { + "a": "0x4f9f85", + "b": "0x4851", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x4fe7d6", + "a_m_sub_b_m": "0x4f5734", + "a_m_mul_b_m": "0x167e0ee115", + "a_eq_b": false, + "a_m_pow_b": "0x5e73a3f7c8b5cd2d" + }, + { + "a": "0x39daadf5", + "b": "0x837", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x39dab62c", + "a_m_sub_b_m": "0x39daa5be", + "a_m_mul_b_m": "0x1db436b07a3", + "a_eq_b": false, + "a_m_pow_b": "0xa944408feb004e19" + }, + { + "a": "0x39082849bf0b9200", + "b": "0x8cc", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x39082849bf0b9acc", + "a_m_sub_b_m": "0x39082849bf0b8934", + "a_m_mul_b_m": "0xb3c26ab199c8560b", + "a_eq_b": false, + "a_m_pow_b": "0xd25f04c18c5cfde0" + }, + { + "a": "0x60dfceb41", + "b": "0x1155d9e47ab", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x11b6b9b32ec", + "a_m_sub_b_m": "0xfffffeefb05ea397", + "a_m_mul_b_m": "0x597dc9604c4e24dc", + "a_eq_b": false, + "a_m_pow_b": "0x512957e3951142c7" + }, + { + "a": "0x218346f4c48f1e", + "b": "0x2e4bd0e816e7c80", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x306405576330b9e", + "a_m_sub_b_m": "0xfd3cc6377356129f", + "a_m_mul_b_m": "0xe23a3ea1fb90aba7", + "a_eq_b": false, + "a_m_pow_b": "0xd2e8072405088e6d" + }, + { + "a": "0x1", + "b": "0xf65d8428ce3280", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xf65d8428ce3281", + "a_m_sub_b_m": "0xff09a27ad731cd82", + "a_m_mul_b_m": "0xf65d8428ce3280", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x0", + "b": "0x2c448fcbcd2568", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2c448fcbcd2568", + "a_m_sub_b_m": "0xffd3bb6f3432da99", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x29ec1b15", + "b": "0x16df34c5f27e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x16df5eb20d93", + "a_m_sub_b_m": "0xffffe91ff5262898", + "a_m_mul_b_m": "0xd7a3c8efeef82a98", + "a_eq_b": false, + "a_m_pow_b": "0xb26522d087332db3" + }, + { + "a": "0x1e378", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1e378", + "a_m_sub_b_m": "0x1e378", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1e021e2132dda7", + "b": "0x32a47b", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1e021e21658222", + "a_m_sub_b_m": "0x1e021e2100392c", + "a_m_mul_b_m": "0xb1a8d39cd40d754e", + "a_eq_b": false, + "a_m_pow_b": "0x41f0039fa04be792" + }, + { + "a": "0x9e796cae851a3e66", + "b": "0x166f29f", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9e796cae86813105", + "a_m_sub_b_m": "0x9e796cae83b34bc7", + "a_m_mul_b_m": "0x3313d0e9bc0ef95b", + "a_eq_b": false, + "a_m_pow_b": "0xe937871d298bdc29" + }, + { + "a": "0x0", + "b": "0xf401b9b85", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xf401b9b85", + "a_m_sub_b_m": "0xffffffefbfe4647c", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x0", + "b": "0x370843721700", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x370843721700", + "a_m_sub_b_m": "0xffffc8f6bc8de901", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0xd67bfa7", + "b": "0x961b3470929", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x961c0aec8d0", + "a_m_sub_b_m": "0xfffff69d5a20b67f", + "a_m_mul_b_m": "0xc36fc106b7ab9042", + "a_eq_b": false, + "a_m_pow_b": "0xdf72787cd57f4a4e" + }, + { + "a": "0x10e9dba78ef", + "b": "0x0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x10e9dba78ef", + "a_m_sub_b_m": "0x10e9dba78ef", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1827f48644fa0a00", + "b": "0x10f189c89b", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1827f4973683d29b", + "a_m_sub_b_m": "0x1827f47553704165", + "a_m_mul_b_m": "0x2eec64edbea2818", + "a_eq_b": false, + "a_m_pow_b": "0x9ff29889c3d1bd58" + }, + { + "a": "0x0", + "b": "0x3c5", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3c5", + "a_m_sub_b_m": "0xfffffffefffffc3c", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x437ed07", + "b": "0x437ed07", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x86fda0e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x11cb9fec77f631", + "a_eq_b": true, + "a_m_pow_b": "0x5b2364fad46dbc5b" + }, + { + "a": "0x1e190d8d3fd53", + "b": "0x263623de65462", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x444f316ba51b5", + "a_m_sub_b_m": "0xffff7e2d9aeda8f2", + "a_m_mul_b_m": "0x3f62c89671c2b25c", + "a_eq_b": false, + "a_m_pow_b": "0x37ccfbbc7032ccc2" + }, + { + "a": "0x9b2925d09cf", + "b": "0x188998d754140900", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1889a289e67112cf", + "a_m_sub_b_m": "0xe77670da3e4900d0", + "a_m_mul_b_m": "0x20219e4001710a4d", + "a_eq_b": false, + "a_m_pow_b": "0xd89c6bb0393f67bc" + }, + { + "a": "0x3127", + "b": "0x147e79afc", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x147e7cc23", + "a_m_sub_b_m": "0xfffffffdb818962c", + "a_m_mul_b_m": "0x3ef548f2d864", + "a_eq_b": false, + "a_m_pow_b": "0x9457f4df2d9fede1" + }, + { + "a": "0x27418652a6", + "b": "0x1457d", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x2741879823", + "a_m_sub_b_m": "0x2741850d29", + "a_m_mul_b_m": "0x31e95a8583190e", + "a_eq_b": false, + "a_m_pow_b": "0x39fa2fe85370161b" + }, + { + "a": "0x6ea6e95", + "b": "0x6ea6e95", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xdd4dd2a", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x2fd3dd542862b9", + "a_eq_b": true, + "a_m_pow_b": "0x91b5d9cf5d344d5f" + }, + { + "a": "0xb22", + "b": "0x23ac1", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x245e3", + "a_m_sub_b_m": "0xfffffffefffdd062", + "a_m_mul_b_m": "0x18d218a2", + "a_eq_b": false, + "a_m_pow_b": "0x7809d365539c692c" + }, + { + "a": "0x5a5a0d2", + "b": "0x4277b66374", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x427d5c0446", + "a_m_sub_b_m": "0xffffffbc8def3d5f", + "a_m_mul_b_m": "0x775779d88f8a1527", + "a_eq_b": false, + "a_m_pow_b": "0xb05bab937d6d69ac" + }, + { + "a": "0xc62b", + "b": "0xc62b", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x18c56", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x99668b39", + "a_eq_b": true, + "a_m_pow_b": "0x5e2dafdc281385d7" + }, + { + "a": "0x40753be47c34f400", + "b": "0xd631ce7d734e1000", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x16a70a62ef8303ff", + "a_m_sub_b_m": "0x6a436d6608e6e401", + "a_m_mul_b_m": "0x906383c60e48ff3c", + "a_eq_b": false, + "a_m_pow_b": "0x673075ab8fc101b6" + }, + { + "a": "0xbecfc02", + "b": "0x14a00fb0c24d5c00", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x14a00fb0ce3a5802", + "a_m_sub_b_m": "0xeb5ff04e499fa003", + "a_m_mul_b_m": "0xc8f489727a34bf78", + "a_eq_b": false, + "a_m_pow_b": "0xc4944c52cd8574d7" + }, + { + "a": "0x9434a98", + "b": "0x68b", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x9435123", + "a_m_sub_b_m": "0x943440d", + "a_m_mul_b_m": "0x3c9b491088", + "a_eq_b": false, + "a_m_pow_b": "0xc8acda3a739e94df" + }, + { + "a": "0xe935dc3e95", + "b": "0x108", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xe935dc3f9d", + "a_m_sub_b_m": "0xe935dc3d8d", + "a_m_mul_b_m": "0xf07f8b2089a8", + "a_eq_b": false, + "a_m_pow_b": "0xbb69e6537b7df89a" + }, + { + "a": "0x0", + "b": "0xa09764afb44928", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xa09764afb44928", + "a_m_sub_b_m": "0xff5f689a504bb6d9", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x140c24d81b", + "b": "0x140c24d81b", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x281849b036", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xe6553f5906059148", + "a_eq_b": true, + "a_m_pow_b": "0x2dd4ffe08de316a3" + }, + { + "a": "0xf2c5ea", + "b": "0x5ab9", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xf320a3", + "a_m_sub_b_m": "0xf26b31", + "a_m_mul_b_m": "0x5609054a1a", + "a_eq_b": false, + "a_m_pow_b": "0x817fa8f37cbbea1d" + }, + { + "a": "0x0", + "b": "0x12afb", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x12afb", + "a_m_sub_b_m": "0xfffffffefffed506", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0xad7937d1e", + "b": "0x1b3eb2c0be95a0", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x1b3ebd985212be", + "a_m_sub_b_m": "0xffe4c15716d4e77f", + "a_m_mul_b_m": "0xf9ec9abdef1d446b", + "a_eq_b": false, + "a_m_pow_b": "0x24b689df20b2d39e" + }, + { + "a": "0x6b52bdf0", + "b": "0x3da7c33c5a55", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x3da82e8f1845", + "a_m_sub_b_m": "0xffffc257a816639c", + "a_m_mul_b_m": "0xc15855a0d7f56d7", + "a_eq_b": false, + "a_m_pow_b": "0xfc6f12ac6e77b975" + }, + { + "a": "0x29065d0", + "b": "0x5ee02", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x29653d2", + "a_m_sub_b_m": "0x28a77ce", + "a_m_mul_b_m": "0xf3440d82ba0", + "a_eq_b": false, + "a_m_pow_b": "0x8310243d91a0b8dd" + }, + { + "a": "0xda0828bf73154800", + "b": "0x181c5838ff0e0600", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0xf22480f872234e00", + "a_m_sub_b_m": "0xc1ebd08674074200", + "a_m_mul_b_m": "0x3d361b3d9a67b77d", + "a_eq_b": false, + "a_m_pow_b": "0xd61a0e3ca31acab0" + }, + { + "a": "0x13498bf3add21c00", + "b": "0x13498bf3add21c00", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x269317e75ba43800", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xde97a6faa8532768", + "a_eq_b": true, + "a_m_pow_b": "0x201910badd9d78d" + }, + { + "a": "0x1f1d", + "b": "0x275d5", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x294f2", + "a_m_sub_b_m": "0xfffffffefffda949", + "a_m_mul_b_m": "0x4c8c2421", + "a_eq_b": false, + "a_m_pow_b": "0xf4ee3232bcb879fd" + }, + { + "a": "0x145", + "b": "0x48e", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x5d3", + "a_m_sub_b_m": "0xfffffffefffffcb8", + "a_m_mul_b_m": "0x5c846", + "a_eq_b": false, + "a_m_pow_b": "0x6dec2d245260eb1a" + }, + { + "a": "0x11c8e", + "b": "0x15efb68f483cfb00", + "m": "0xffffffff00000001", + "a_m_add_b_m": "0x15efb68f483e178e", + "a_m_sub_b_m": "0xea10496fb7c4218f", + "a_m_mul_b_m": "0x197e4fffb847219e", + "a_eq_b": false, + "a_m_pow_b": "0xcec85d71800cc886" + } + ], + "even_mod_17": [ + { + "a": "0x33", + "b": "0x3", + "m": "0x1e240", + "a_m_add_b_m": "0x36", + "a_m_sub_b_m": "0x30", + "a_m_mul_b_m": "0x99", + "a_eq_b": false, + "a_m_pow_b": "0x23eb" + }, + { + "a": "0x1", + "b": "0x2a", + "m": "0x1e240", + "a_m_add_b_m": "0x2b", + "a_m_sub_b_m": "0x1e217", + "a_m_mul_b_m": "0x2a", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x4", + "b": "0x71db", + "m": "0x1e240", + "a_m_add_b_m": "0x71df", + "a_m_sub_b_m": "0x17069", + "a_m_mul_b_m": "0x1c76c", + "a_eq_b": false, + "a_m_pow_b": "0x1d080" + }, + { + "a": "0x88a3", + "b": "0x162ef", + "m": "0x1e240", + "a_m_add_b_m": "0x952", + "a_m_sub_b_m": "0x107f4", + "a_m_mul_b_m": "0xb22d", + "a_eq_b": false, + "a_m_pow_b": "0xf3cb" + }, + { + "a": "0x50", + "b": "0x5122", + "m": "0x1e240", + "a_m_add_b_m": "0x5172", + "a_m_sub_b_m": "0x1916e", + "a_m_mul_b_m": "0xdd60", + "a_eq_b": false, + "a_m_pow_b": "0x82c0" + }, + { + "a": "0xb77d", + "b": "0x2c", + "m": "0x1e240", + "a_m_add_b_m": "0xb7a9", + "a_m_sub_b_m": "0xb751", + "a_m_mul_b_m": "0x1657c", + "a_eq_b": false, + "a_m_pow_b": "0x15331" + }, + { + "a": "0x78a2", + "b": "0x78a2", + "m": "0x1e240", + "a_m_add_b_m": "0xf144", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x144", + "a_eq_b": true, + "a_m_pow_b": "0x1a1c0" + }, + { + "a": "0x0", + "b": "0x7de", + "m": "0x1e240", + "a_m_add_b_m": "0x7de", + "a_m_sub_b_m": "0x1da62", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x3", + "b": "0xd17d", + "m": "0x1e240", + "a_m_add_b_m": "0xd180", + "a_m_sub_b_m": "0x110c6", + "a_m_mul_b_m": "0x9237", + "a_eq_b": false, + "a_m_pow_b": "0x1d793" + }, + { + "a": "0xb78b", + "b": "0x140bf", + "m": "0x1e240", + "a_m_add_b_m": "0x160a", + "a_m_sub_b_m": "0x1590c", + "a_m_mul_b_m": "0x65f5", + "a_eq_b": false, + "a_m_pow_b": "0xefe3" + }, + { + "a": "0xc", + "b": "0x5842", + "m": "0x1e240", + "a_m_add_b_m": "0x584e", + "a_m_sub_b_m": "0x18a0a", + "a_m_mul_b_m": "0x5e98", + "a_eq_b": false, + "a_m_pow_b": "0x12180" + }, + { + "a": "0x13", + "b": "0x315", + "m": "0x1e240", + "a_m_add_b_m": "0x328", + "a_m_sub_b_m": "0x1df3e", + "a_m_mul_b_m": "0x3a8f", + "a_eq_b": false, + "a_m_pow_b": "0x14ec3" + }, + { + "a": "0x76e", + "b": "0x5eb", + "m": "0x1e240", + "a_m_add_b_m": "0xd59", + "a_m_sub_b_m": "0x183", + "a_m_mul_b_m": "0xa43a", + "a_eq_b": false, + "a_m_pow_b": "0x126c0" + }, + { + "a": "0x1dfec", + "b": "0x1643d", + "m": "0x1e240", + "a_m_add_b_m": "0x161e9", + "a_m_sub_b_m": "0x7baf", + "a_m_mul_b_m": "0x1623c", + "a_eq_b": false, + "a_m_pow_b": "0x88c0" + }, + { + "a": "0xe", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0xe", + "a_m_sub_b_m": "0xe", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x276", + "b": "0x3a55", + "m": "0x1e240", + "a_m_add_b_m": "0x3ccb", + "a_m_sub_b_m": "0x1aa61", + "a_m_mul_b_m": "0x622e", + "a_eq_b": false, + "a_m_pow_b": "0x12600" + }, + { + "a": "0x3", + "b": "0x290b", + "m": "0x1e240", + "a_m_add_b_m": "0x290e", + "a_m_sub_b_m": "0x1b938", + "a_m_mul_b_m": "0x7b21", + "a_eq_b": false, + "a_m_pow_b": "0xfebb" + }, + { + "a": "0x6", + "b": "0x15", + "m": "0x1e240", + "a_m_add_b_m": "0x1b", + "a_m_sub_b_m": "0x1e231", + "a_m_mul_b_m": "0x7e", + "a_eq_b": false, + "a_m_pow_b": "0x19ec0" + }, + { + "a": "0x24f", + "b": "0xc1b", + "m": "0x1e240", + "a_m_add_b_m": "0xe6a", + "a_m_sub_b_m": "0x1d874", + "a_m_mul_b_m": "0x192d5", + "a_eq_b": false, + "a_m_pow_b": "0x13daf" + }, + { + "a": "0x17231", + "b": "0xe", + "m": "0x1e240", + "a_m_add_b_m": "0x1723f", + "a_m_sub_b_m": "0x17223", + "a_m_mul_b_m": "0x1682e", + "a_eq_b": false, + "a_m_pow_b": "0x2221" + }, + { + "a": "0x1d0a7", + "b": "0x1d0a7", + "m": "0x1e240", + "a_m_add_b_m": "0x1bf0e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xbc71", + "a_eq_b": true, + "a_m_pow_b": "0xfa57" + }, + { + "a": "0x34f", + "b": "0x1", + "m": "0x1e240", + "a_m_add_b_m": "0x350", + "a_m_sub_b_m": "0x34e", + "a_m_mul_b_m": "0x34f", + "a_eq_b": false, + "a_m_pow_b": "0x34f" + }, + { + "a": "0x31", + "b": "0x31", + "m": "0x1e240", + "a_m_add_b_m": "0x62", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x961", + "a_eq_b": true, + "a_m_pow_b": "0x24f1" + }, + { + "a": "0x19", + "b": "0x1595a", + "m": "0x1e240", + "a_m_add_b_m": "0x15973", + "a_m_sub_b_m": "0x88ff", + "a_m_mul_b_m": "0x1b38a", + "a_eq_b": false, + "a_m_pow_b": "0x4d71" + }, + { + "a": "0x9c4", + "b": "0x1a155", + "m": "0x1e240", + "a_m_add_b_m": "0x1ab19", + "a_m_sub_b_m": "0x4aaf", + "a_m_mul_b_m": "0xdf54", + "a_eq_b": false, + "a_m_pow_b": "0x19000" + }, + { + "a": "0x192a5", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x192a5", + "a_m_sub_b_m": "0x192a5", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1a", + "b": "0x10", + "m": "0x1e240", + "a_m_add_b_m": "0x2a", + "a_m_sub_b_m": "0xa", + "a_m_mul_b_m": "0x1a0", + "a_eq_b": false, + "a_m_pow_b": "0x4cc0" + }, + { + "a": "0x15", + "b": "0x2", + "m": "0x1e240", + "a_m_add_b_m": "0x17", + "a_m_sub_b_m": "0x13", + "a_m_mul_b_m": "0x2a", + "a_eq_b": false, + "a_m_pow_b": "0x1b9" + }, + { + "a": "0xebd7", + "b": "0x1f52e", + "m": "0x1e240", + "a_m_add_b_m": "0xfec5", + "a_m_sub_b_m": "0xd8e9", + "a_m_mul_b_m": "0x1ada2", + "a_eq_b": false, + "a_m_pow_b": "0xbab1" + }, + { + "a": "0x145", + "b": "0x29f", + "m": "0x1e240", + "a_m_add_b_m": "0x3e4", + "a_m_sub_b_m": "0x1e0e6", + "a_m_mul_b_m": "0x1719b", + "a_eq_b": false, + "a_m_pow_b": "0x1c8cd" + }, + { + "a": "0xf05", + "b": "0x14e85", + "m": "0x1e240", + "a_m_add_b_m": "0x15d8a", + "a_m_sub_b_m": "0xa2c0", + "a_m_mul_b_m": "0x42d9", + "a_eq_b": false, + "a_m_pow_b": "0xbeb5" + }, + { + "a": "0xd7", + "b": "0x6d95", + "m": "0x1e240", + "a_m_add_b_m": "0x6e6c", + "a_m_sub_b_m": "0x17582", + "a_m_mul_b_m": "0x19c23", + "a_eq_b": false, + "a_m_pow_b": "0x9137" + }, + { + "a": "0x1dc5a", + "b": "0x14ade", + "m": "0x1e240", + "a_m_add_b_m": "0x144f8", + "a_m_sub_b_m": "0x917c", + "a_m_mul_b_m": "0x18c", + "a_eq_b": false, + "a_m_pow_b": "0x73c0" + }, + { + "a": "0xa7", + "b": "0x1a745", + "m": "0x1e240", + "a_m_add_b_m": "0x1a7ec", + "a_m_sub_b_m": "0x3ba2", + "a_m_mul_b_m": "0x11583", + "a_eq_b": false, + "a_m_pow_b": "0x8687" + }, + { + "a": "0x23", + "b": "0x6", + "m": "0x1e240", + "a_m_add_b_m": "0x29", + "a_m_sub_b_m": "0x1d", + "a_m_mul_b_m": "0xd2", + "a_eq_b": false, + "a_m_pow_b": "0x1699" + }, + { + "a": "0x6ade", + "b": "0x6619", + "m": "0x1e240", + "a_m_add_b_m": "0xd0f7", + "a_m_sub_b_m": "0x4c5", + "a_m_mul_b_m": "0x1ddee", + "a_eq_b": false, + "a_m_pow_b": "0x8980" + }, + { + "a": "0xbbe", + "b": "0x3782", + "m": "0x1e240", + "a_m_add_b_m": "0x4340", + "a_m_sub_b_m": "0x1b67c", + "a_m_mul_b_m": "0x1e03c", + "a_eq_b": false, + "a_m_pow_b": "0xd440" + }, + { + "a": "0xa", + "b": "0x32", + "m": "0x1e240", + "a_m_add_b_m": "0x3c", + "a_m_sub_b_m": "0x1e218", + "a_m_mul_b_m": "0x1f4", + "a_eq_b": false, + "a_m_pow_b": "0xae40" + }, + { + "a": "0x1", + "b": "0x1", + "m": "0x1e240", + "a_m_add_b_m": "0x2", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x592", + "b": "0x32", + "m": "0x1e240", + "a_m_add_b_m": "0x5c4", + "a_m_sub_b_m": "0x560", + "a_m_mul_b_m": "0x11684", + "a_eq_b": false, + "a_m_pow_b": "0x580" + }, + { + "a": "0x1b2e", + "b": "0x5d5", + "m": "0x1e240", + "a_m_add_b_m": "0x2103", + "a_m_sub_b_m": "0x1559", + "a_m_mul_b_m": "0x4646", + "a_eq_b": false, + "a_m_pow_b": "0x1180" + }, + { + "a": "0x1b791", + "b": "0x1b791", + "m": "0x1e240", + "a_m_add_b_m": "0x18ce2", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x43e1", + "a_eq_b": true, + "a_m_pow_b": "0x18e51" + }, + { + "a": "0x1", + "b": "0x7", + "m": "0x1e240", + "a_m_add_b_m": "0x8", + "a_m_sub_b_m": "0x1e23a", + "a_m_mul_b_m": "0x7", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1d3", + "b": "0x1238a", + "m": "0x1e240", + "a_m_add_b_m": "0x1255d", + "a_m_sub_b_m": "0xc089", + "a_m_mul_b_m": "0x9a3e", + "a_eq_b": false, + "a_m_pow_b": "0x37c9" + }, + { + "a": "0xf", + "b": "0x13b1d", + "m": "0x1e240", + "a_m_add_b_m": "0x13b2c", + "a_m_sub_b_m": "0xa732", + "a_m_mul_b_m": "0x18273", + "a_eq_b": false, + "a_m_pow_b": "0x10c8f" + }, + { + "a": "0x3", + "b": "0x21e9", + "m": "0x1e240", + "a_m_add_b_m": "0x21ec", + "a_m_sub_b_m": "0x1c05a", + "a_m_mul_b_m": "0x65bb", + "a_eq_b": false, + "a_m_pow_b": "0x5e23" + }, + { + "a": "0xcf71", + "b": "0x2a", + "m": "0x1e240", + "a_m_add_b_m": "0xcf9b", + "a_m_sub_b_m": "0xcf47", + "a_m_mul_b_m": "0x200a", + "a_eq_b": false, + "a_m_pow_b": "0xb761" + }, + { + "a": "0x2", + "b": "0x31d4", + "m": "0x1e240", + "a_m_add_b_m": "0x31d6", + "a_m_sub_b_m": "0x1b06e", + "a_m_mul_b_m": "0x63a8", + "a_eq_b": false, + "a_m_pow_b": "0x1900" + }, + { + "a": "0x117", + "b": "0x186e0", + "m": "0x1e240", + "a_m_add_b_m": "0x187f7", + "a_m_sub_b_m": "0x5c77", + "a_m_mul_b_m": "0x41a0", + "a_eq_b": false, + "a_m_pow_b": "0xe9c1" + }, + { + "a": "0x1abc", + "b": "0xa", + "m": "0x1e240", + "a_m_add_b_m": "0x1ac6", + "a_m_sub_b_m": "0x1ab2", + "a_m_mul_b_m": "0x10b58", + "a_eq_b": false, + "a_m_pow_b": "0x166c0" + }, + { + "a": "0x1", + "b": "0x1c8b", + "m": "0x1e240", + "a_m_add_b_m": "0x1c8c", + "a_m_sub_b_m": "0x1c5b6", + "a_m_mul_b_m": "0x1c8b", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x12895", + "b": "0x52", + "m": "0x1e240", + "a_m_add_b_m": "0x128e7", + "a_m_sub_b_m": "0x12843", + "a_m_mul_b_m": "0xcf3a", + "a_eq_b": false, + "a_m_pow_b": "0x5e39" + }, + { + "a": "0x22e", + "b": "0x35", + "m": "0x1e240", + "a_m_add_b_m": "0x263", + "a_m_sub_b_m": "0x1f9", + "a_m_mul_b_m": "0x7386", + "a_eq_b": false, + "a_m_pow_b": "0xe640" + }, + { + "a": "0x3f", + "b": "0x1c8", + "m": "0x1e240", + "a_m_add_b_m": "0x207", + "a_m_sub_b_m": "0x1e0b7", + "a_m_mul_b_m": "0x7038", + "a_eq_b": false, + "a_m_pow_b": "0x1a901" + }, + { + "a": "0x1a802", + "b": "0x41f2", + "m": "0x1e240", + "a_m_add_b_m": "0x7b4", + "a_m_sub_b_m": "0x16610", + "a_m_mul_b_m": "0x3f24", + "a_eq_b": false, + "a_m_pow_b": "0x6cc0" + }, + { + "a": "0x1a07", + "b": "0x1681", + "m": "0x1e240", + "a_m_add_b_m": "0x3088", + "a_m_sub_b_m": "0x386", + "a_m_mul_b_m": "0x1be07", + "a_eq_b": false, + "a_m_pow_b": "0x9807" + }, + { + "a": "0x1", + "b": "0x1a277", + "m": "0x1e240", + "a_m_add_b_m": "0x1a278", + "a_m_sub_b_m": "0x3fca", + "a_m_mul_b_m": "0x1a277", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x28", + "b": "0xa7d", + "m": "0x1e240", + "a_m_add_b_m": "0xaa5", + "a_m_sub_b_m": "0x1d7eb", + "a_m_mul_b_m": "0x1a388", + "a_eq_b": false, + "a_m_pow_b": "0x85c0" + }, + { + "a": "0xbc", + "b": "0x243", + "m": "0x1e240", + "a_m_add_b_m": "0x2ff", + "a_m_sub_b_m": "0x1e0b9", + "a_m_mul_b_m": "0x1a934", + "a_eq_b": false, + "a_m_pow_b": "0x8000" + }, + { + "a": "0x2ba", + "b": "0x1c", + "m": "0x1e240", + "a_m_add_b_m": "0x2d6", + "a_m_sub_b_m": "0x29e", + "a_m_mul_b_m": "0x4c58", + "a_eq_b": false, + "a_m_pow_b": "0x10fc0" + }, + { + "a": "0x22", + "b": "0x16fb3", + "m": "0x1e240", + "a_m_add_b_m": "0x16fd5", + "a_m_sub_b_m": "0x72af", + "a_m_mul_b_m": "0x1bd86", + "a_eq_b": false, + "a_m_pow_b": "0x400" + }, + { + "a": "0xdb6", + "b": "0x2050", + "m": "0x1e240", + "a_m_add_b_m": "0x2e06", + "a_m_sub_b_m": "0x1cfa6", + "a_m_mul_b_m": "0x5820", + "a_eq_b": false, + "a_m_pow_b": "0x17040" + }, + { + "a": "0x30e", + "b": "0x1706c", + "m": "0x1e240", + "a_m_add_b_m": "0x1737a", + "a_m_sub_b_m": "0x74e2", + "a_m_mul_b_m": "0xcaa8", + "a_eq_b": false, + "a_m_pow_b": "0x18dc0" + }, + { + "a": "0x30", + "b": "0x3e5", + "m": "0x1e240", + "a_m_add_b_m": "0x415", + "a_m_sub_b_m": "0x1de8b", + "a_m_mul_b_m": "0xbaf0", + "a_eq_b": false, + "a_m_pow_b": "0x16c80" + }, + { + "a": "0x0", + "b": "0x6d1b", + "m": "0x1e240", + "a_m_add_b_m": "0x6d1b", + "a_m_sub_b_m": "0x17525", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x13b52", + "b": "0x5", + "m": "0x1e240", + "a_m_add_b_m": "0x13b57", + "a_m_sub_b_m": "0x13b4d", + "a_m_mul_b_m": "0x81da", + "a_eq_b": false, + "a_m_pow_b": "0x4ea0" + }, + { + "a": "0x25", + "b": "0x25", + "m": "0x1e240", + "a_m_add_b_m": "0x4a", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x559", + "a_eq_b": true, + "a_m_pow_b": "0x4915" + }, + { + "a": "0x3", + "b": "0x17532", + "m": "0x1e240", + "a_m_add_b_m": "0x17535", + "a_m_sub_b_m": "0x6d11", + "a_m_mul_b_m": "0x9b16", + "a_eq_b": false, + "a_m_pow_b": "0x1f89" + }, + { + "a": "0x1", + "b": "0x26", + "m": "0x1e240", + "a_m_add_b_m": "0x27", + "a_m_sub_b_m": "0x1e21b", + "a_m_mul_b_m": "0x26", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x2", + "b": "0xb", + "m": "0x1e240", + "a_m_add_b_m": "0xd", + "a_m_sub_b_m": "0x1e237", + "a_m_mul_b_m": "0x16", + "a_eq_b": false, + "a_m_pow_b": "0x800" + }, + { + "a": "0x76", + "b": "0x1e5", + "m": "0x1e240", + "a_m_add_b_m": "0x25b", + "a_m_sub_b_m": "0x1e0d1", + "a_m_mul_b_m": "0xdf8e", + "a_eq_b": false, + "a_m_pow_b": "0x12dc0" + }, + { + "a": "0x7981", + "b": "0x1c487", + "m": "0x1e240", + "a_m_add_b_m": "0x5bc8", + "a_m_sub_b_m": "0x973a", + "a_m_mul_b_m": "0x1b047", + "a_eq_b": false, + "a_m_pow_b": "0x16081" + }, + { + "a": "0x5c2", + "b": "0x6", + "m": "0x1e240", + "a_m_add_b_m": "0x5c8", + "a_m_sub_b_m": "0x5bc", + "a_m_mul_b_m": "0x228c", + "a_eq_b": false, + "a_m_pow_b": "0xa240" + }, + { + "a": "0x51c8", + "b": "0x17e39", + "m": "0x1e240", + "a_m_add_b_m": "0x1d001", + "a_m_sub_b_m": "0xb5cf", + "a_m_mul_b_m": "0xef48", + "a_eq_b": false, + "a_m_pow_b": "0x143c0" + }, + { + "a": "0xf5", + "b": "0x87a", + "m": "0x1e240", + "a_m_add_b_m": "0x96f", + "a_m_sub_b_m": "0x1dabb", + "a_m_mul_b_m": "0x93c2", + "a_eq_b": false, + "a_m_pow_b": "0x141d9" + }, + { + "a": "0x8a", + "b": "0x123", + "m": "0x1e240", + "a_m_add_b_m": "0x1ad", + "a_m_sub_b_m": "0x1e1a7", + "a_m_mul_b_m": "0x9cde", + "a_eq_b": false, + "a_m_pow_b": "0x123c0" + }, + { + "a": "0x30e", + "b": "0x8df", + "m": "0x1e240", + "a_m_add_b_m": "0xbed", + "a_m_sub_b_m": "0x1dc6f", + "a_m_mul_b_m": "0xb9b2", + "a_eq_b": false, + "a_m_pow_b": "0x16340" + }, + { + "a": "0x18f02", + "b": "0x235", + "m": "0x1e240", + "a_m_add_b_m": "0x19137", + "a_m_sub_b_m": "0x18ccd", + "a_m_mul_b_m": "0xe4aa", + "a_eq_b": false, + "a_m_pow_b": "0x1e80" + }, + { + "a": "0x1a", + "b": "0x1a", + "m": "0x1e240", + "a_m_add_b_m": "0x34", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x2a4", + "a_eq_b": true, + "a_m_pow_b": "0xdc0" + }, + { + "a": "0x3f", + "b": "0x13fa8", + "m": "0x1e240", + "a_m_add_b_m": "0x13fe7", + "a_m_sub_b_m": "0xa2d7", + "a_m_mul_b_m": "0x16e18", + "a_eq_b": false, + "a_m_pow_b": "0x5181" + }, + { + "a": "0x2", + "b": "0x17", + "m": "0x1e240", + "a_m_add_b_m": "0x19", + "a_m_sub_b_m": "0x1e22b", + "a_m_mul_b_m": "0x2e", + "a_eq_b": false, + "a_m_pow_b": "0x1c940" + }, + { + "a": "0x0", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x0", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x0", + "b": "0x6", + "m": "0x1e240", + "a_m_add_b_m": "0x6", + "a_m_sub_b_m": "0x1e23a", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0xd", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0xd", + "a_m_sub_b_m": "0xd", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x5", + "b": "0x5", + "m": "0x1e240", + "a_m_add_b_m": "0xa", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x19", + "a_eq_b": true, + "a_m_pow_b": "0xc35" + }, + { + "a": "0x983b", + "b": "0x21e0", + "m": "0x1e240", + "a_m_add_b_m": "0xba1b", + "a_m_sub_b_m": "0x765b", + "a_m_mul_b_m": "0xe060", + "a_eq_b": false, + "a_m_pow_b": "0x11281" + }, + { + "a": "0x307e", + "b": "0x2a", + "m": "0x1e240", + "a_m_add_b_m": "0x30a8", + "a_m_sub_b_m": "0x3054", + "a_m_mul_b_m": "0x6bac", + "a_eq_b": false, + "a_m_pow_b": "0x12e40" + }, + { + "a": "0xa", + "b": "0x2874", + "m": "0x1e240", + "a_m_add_b_m": "0x287e", + "a_m_sub_b_m": "0x1b9d6", + "a_m_mul_b_m": "0x19488", + "a_eq_b": false, + "a_m_pow_b": "0x2800" + }, + { + "a": "0x1de", + "b": "0x84", + "m": "0x1e240", + "a_m_add_b_m": "0x262", + "a_m_sub_b_m": "0x15a", + "a_m_mul_b_m": "0xf678", + "a_eq_b": false, + "a_m_pow_b": "0x10000" + }, + { + "a": "0x6", + "b": "0xc708", + "m": "0x1e240", + "a_m_add_b_m": "0xc70e", + "a_m_sub_b_m": "0x11b3e", + "a_m_mul_b_m": "0xe5b0", + "a_eq_b": false, + "a_m_pow_b": "0x1d700" + }, + { + "a": "0x2d5", + "b": "0x1861d", + "m": "0x1e240", + "a_m_add_b_m": "0x188f2", + "a_m_sub_b_m": "0x5ef8", + "a_m_mul_b_m": "0xe9a1", + "a_eq_b": false, + "a_m_pow_b": "0x11a65" + }, + { + "a": "0x1", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x1", + "a_m_sub_b_m": "0x1", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x691", + "b": "0x1c", + "m": "0x1e240", + "a_m_add_b_m": "0x6ad", + "a_m_sub_b_m": "0x675", + "a_m_mul_b_m": "0xb7dc", + "a_eq_b": false, + "a_m_pow_b": "0x99c1" + }, + { + "a": "0x3", + "b": "0x49f", + "m": "0x1e240", + "a_m_add_b_m": "0x4a2", + "a_m_sub_b_m": "0x1dda4", + "a_m_mul_b_m": "0xddd", + "a_eq_b": false, + "a_m_pow_b": "0x10c6b" + }, + { + "a": "0x9191", + "b": "0x17", + "m": "0x1e240", + "a_m_add_b_m": "0x91a8", + "a_m_sub_b_m": "0x917a", + "a_m_mul_b_m": "0x1c687", + "a_eq_b": false, + "a_m_pow_b": "0x1e131" + }, + { + "a": "0x14a94", + "b": "0x98d7", + "m": "0x1e240", + "a_m_add_b_m": "0x12b", + "a_m_sub_b_m": "0xb1bd", + "a_m_mul_b_m": "0x670c", + "a_eq_b": false, + "a_m_pow_b": "0xd3c0" + }, + { + "a": "0xb", + "b": "0x12d0c", + "m": "0x1e240", + "a_m_add_b_m": "0x12d17", + "a_m_sub_b_m": "0xb53f", + "a_m_mul_b_m": "0x1a204", + "a_eq_b": false, + "a_m_pow_b": "0x4b91" + }, + { + "a": "0x2a6", + "b": "0x56", + "m": "0x1e240", + "a_m_add_b_m": "0x2fc", + "a_m_sub_b_m": "0x250", + "a_m_mul_b_m": "0xe3c4", + "a_eq_b": false, + "a_m_pow_b": "0x72c0" + }, + { + "a": "0x434", + "b": "0xb8", + "m": "0x1e240", + "a_m_add_b_m": "0x4ec", + "a_m_sub_b_m": "0x37c", + "a_m_mul_b_m": "0x12320", + "a_eq_b": false, + "a_m_pow_b": "0xe200" + }, + { + "a": "0x17c24", + "b": "0x456d", + "m": "0x1e240", + "a_m_add_b_m": "0x1c191", + "a_m_sub_b_m": "0x136b7", + "a_m_mul_b_m": "0x18f14", + "a_eq_b": false, + "a_m_pow_b": "0x6680" + }, + { + "a": "0x1", + "b": "0x3", + "m": "0x1e240", + "a_m_add_b_m": "0x4", + "a_m_sub_b_m": "0x1e23e", + "a_m_mul_b_m": "0x3", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x4", + "b": "0x103f", + "m": "0x1e240", + "a_m_add_b_m": "0x1043", + "a_m_sub_b_m": "0x1d205", + "a_m_mul_b_m": "0x40fc", + "a_eq_b": false, + "a_m_pow_b": "0xb8c0" + }, + { + "a": "0xdf5", + "b": "0x4c64", + "m": "0x1e240", + "a_m_add_b_m": "0x5a59", + "a_m_sub_b_m": "0x1a3d1", + "a_m_mul_b_m": "0x1d874", + "a_eq_b": false, + "a_m_pow_b": "0x56f1" + }, + { + "a": "0x1cee4", + "b": "0x1d905", + "m": "0x1e240", + "a_m_add_b_m": "0x1c5a9", + "a_m_sub_b_m": "0x1d81f", + "a_m_mul_b_m": "0x19eb4", + "a_eq_b": false, + "a_m_pow_b": "0xdec0" + }, + { + "a": "0x5b2", + "b": "0x36", + "m": "0x1e240", + "a_m_add_b_m": "0x5e8", + "a_m_sub_b_m": "0x57c", + "a_m_mul_b_m": "0x1338c", + "a_eq_b": false, + "a_m_pow_b": "0x126c0" + }, + { + "a": "0x2c", + "b": "0x9a6", + "m": "0x1e240", + "a_m_add_b_m": "0x9d2", + "a_m_sub_b_m": "0x1d8c6", + "a_m_mul_b_m": "0x1a888", + "a_eq_b": false, + "a_m_pow_b": "0x12640" + }, + { + "a": "0x685", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x685", + "a_m_sub_b_m": "0x685", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x43", + "b": "0x47", + "m": "0x1e240", + "a_m_add_b_m": "0x8a", + "a_m_sub_b_m": "0x1e23c", + "a_m_mul_b_m": "0x1295", + "a_eq_b": false, + "a_m_pow_b": "0x1118b" + }, + { + "a": "0x0", + "b": "0x741e", + "m": "0x1e240", + "a_m_add_b_m": "0x741e", + "a_m_sub_b_m": "0x16e22", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x179da", + "b": "0x179da", + "m": "0x1e240", + "a_m_add_b_m": "0x11174", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x15064", + "a_eq_b": true, + "a_m_pow_b": "0x12f40" + }, + { + "a": "0x80f", + "b": "0x1", + "m": "0x1e240", + "a_m_add_b_m": "0x810", + "a_m_sub_b_m": "0x80e", + "a_m_mul_b_m": "0x80f", + "a_eq_b": false, + "a_m_pow_b": "0x80f" + }, + { + "a": "0x1", + "b": "0x1617", + "m": "0x1e240", + "a_m_add_b_m": "0x1618", + "a_m_sub_b_m": "0x1cc2a", + "a_m_mul_b_m": "0x1617", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0xdc6", + "b": "0x7cb", + "m": "0x1e240", + "a_m_add_b_m": "0x1591", + "a_m_sub_b_m": "0x5fb", + "a_m_mul_b_m": "0x1d802", + "a_eq_b": false, + "a_m_pow_b": "0x11140" + }, + { + "a": "0x0", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x0", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x11f61", + "b": "0x3", + "m": "0x1e240", + "a_m_add_b_m": "0x11f64", + "a_m_sub_b_m": "0x11f5e", + "a_m_mul_b_m": "0x17be3", + "a_eq_b": false, + "a_m_pow_b": "0x46a1" + }, + { + "a": "0x31f", + "b": "0x20b", + "m": "0x1e240", + "a_m_add_b_m": "0x52a", + "a_m_sub_b_m": "0x114", + "a_m_mul_b_m": "0xb995", + "a_eq_b": false, + "a_m_pow_b": "0xe41f" + }, + { + "a": "0x456", + "b": "0x181", + "m": "0x1e240", + "a_m_add_b_m": "0x5d7", + "a_m_sub_b_m": "0x2d5", + "a_m_mul_b_m": "0xde96", + "a_eq_b": false, + "a_m_pow_b": "0x13ec0" + }, + { + "a": "0x0", + "b": "0x4c59", + "m": "0x1e240", + "a_m_add_b_m": "0x4c59", + "a_m_sub_b_m": "0x195e7", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x35", + "b": "0x12b8f", + "m": "0x1e240", + "a_m_add_b_m": "0x12bc4", + "a_m_sub_b_m": "0xb6e6", + "a_m_mul_b_m": "0x1bc9b", + "a_eq_b": false, + "a_m_pow_b": "0x799d" + }, + { + "a": "0x8e2", + "b": "0xe", + "m": "0x1e240", + "a_m_add_b_m": "0x8f0", + "a_m_sub_b_m": "0x8d4", + "a_m_mul_b_m": "0x7c5c", + "a_eq_b": false, + "a_m_pow_b": "0x11e80" + }, + { + "a": "0x1bb9f", + "b": "0x10", + "m": "0x1e240", + "a_m_add_b_m": "0x1bbaf", + "a_m_sub_b_m": "0x1bb8f", + "a_m_mul_b_m": "0x15a70", + "a_eq_b": false, + "a_m_pow_b": "0x2941" + }, + { + "a": "0x11756", + "b": "0xd92", + "m": "0x1e240", + "a_m_add_b_m": "0x124e8", + "a_m_sub_b_m": "0x109c4", + "a_m_mul_b_m": "0x7e0c", + "a_eq_b": false, + "a_m_pow_b": "0x1dd40" + }, + { + "a": "0xf16", + "b": "0x1ebfa", + "m": "0x1e240", + "a_m_add_b_m": "0x18d0", + "a_m_sub_b_m": "0x55c", + "a_m_mul_b_m": "0x1aebc", + "a_eq_b": false, + "a_m_pow_b": "0x4000" + }, + { + "a": "0x595", + "b": "0xb42", + "m": "0x1e240", + "a_m_add_b_m": "0x10d7", + "a_m_sub_b_m": "0x1dc93", + "a_m_mul_b_m": "0xad2a", + "a_eq_b": false, + "a_m_pow_b": "0x2479" + }, + { + "a": "0x141", + "b": "0x4b", + "m": "0x1e240", + "a_m_add_b_m": "0x18c", + "a_m_sub_b_m": "0xf6", + "a_m_mul_b_m": "0x5e0b", + "a_eq_b": false, + "a_m_pow_b": "0x741" + }, + { + "a": "0x3be8", + "b": "0x17524", + "m": "0x1e240", + "a_m_add_b_m": "0x1b10c", + "a_m_sub_b_m": "0xa904", + "a_m_mul_b_m": "0x6a20", + "a_eq_b": false, + "a_m_pow_b": "0x16ec0" + }, + { + "a": "0x1033f", + "b": "0x95", + "m": "0x1e240", + "a_m_add_b_m": "0x103d4", + "a_m_sub_b_m": "0x102aa", + "a_m_mul_b_m": "0x2fab", + "a_eq_b": false, + "a_m_pow_b": "0x1717f" + }, + { + "a": "0x9185", + "b": "0x1", + "m": "0x1e240", + "a_m_add_b_m": "0x9186", + "a_m_sub_b_m": "0x9184", + "a_m_mul_b_m": "0x9185", + "a_eq_b": false, + "a_m_pow_b": "0x9185" + }, + { + "a": "0x14d41", + "b": "0xe38", + "m": "0x1e240", + "a_m_add_b_m": "0x15b79", + "a_m_sub_b_m": "0x13f09", + "a_m_mul_b_m": "0xb978", + "a_eq_b": false, + "a_m_pow_b": "0x14401" + }, + { + "a": "0x1f", + "b": "0x151", + "m": "0x1e240", + "a_m_add_b_m": "0x170", + "a_m_sub_b_m": "0x1e10e", + "a_m_mul_b_m": "0x28cf", + "a_eq_b": false, + "a_m_pow_b": "0x181f" + }, + { + "a": "0x5e8", + "b": "0x5e8", + "m": "0x1e240", + "a_m_add_b_m": "0xbd0", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xf9c0", + "a_eq_b": true, + "a_m_pow_b": "0xd500" + }, + { + "a": "0xa", + "b": "0x4a15", + "m": "0x1e240", + "a_m_add_b_m": "0x4a1f", + "a_m_sub_b_m": "0x19835", + "a_m_mul_b_m": "0x10292", + "a_eq_b": false, + "a_m_pow_b": "0x1e1c0" + }, + { + "a": "0x8", + "b": "0xcb", + "m": "0x1e240", + "a_m_add_b_m": "0xd3", + "a_m_sub_b_m": "0x1e17d", + "a_m_mul_b_m": "0x658", + "a_eq_b": false, + "a_m_pow_b": "0x14240" + }, + { + "a": "0xd2", + "b": "0xac", + "m": "0x1e240", + "a_m_add_b_m": "0x17e", + "a_m_sub_b_m": "0x26", + "a_m_mul_b_m": "0x8d18", + "a_eq_b": false, + "a_m_pow_b": "0xe400" + }, + { + "a": "0x5f68", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x5f68", + "a_m_sub_b_m": "0x5f68", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0xaf", + "b": "0xaf", + "m": "0x1e240", + "a_m_add_b_m": "0x15e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x77a1", + "a_eq_b": true, + "a_m_pow_b": "0x328f" + }, + { + "a": "0x221", + "b": "0x37", + "m": "0x1e240", + "a_m_add_b_m": "0x258", + "a_m_sub_b_m": "0x1ea", + "a_m_mul_b_m": "0x7517", + "a_eq_b": false, + "a_m_pow_b": "0xa8a1" + }, + { + "a": "0x3", + "b": "0x1", + "m": "0x1e240", + "a_m_add_b_m": "0x4", + "a_m_sub_b_m": "0x2", + "a_m_mul_b_m": "0x3", + "a_eq_b": false, + "a_m_pow_b": "0x3" + }, + { + "a": "0x41", + "b": "0x17b", + "m": "0x1e240", + "a_m_add_b_m": "0x1bc", + "a_m_sub_b_m": "0x1e106", + "a_m_mul_b_m": "0x603b", + "a_eq_b": false, + "a_m_pow_b": "0x18d01" + }, + { + "a": "0x2", + "b": "0x238", + "m": "0x1e240", + "a_m_add_b_m": "0x23a", + "a_m_sub_b_m": "0x1e00a", + "a_m_mul_b_m": "0x470", + "a_eq_b": false, + "a_m_pow_b": "0x28c0" + }, + { + "a": "0x76", + "b": "0xcc", + "m": "0x1e240", + "a_m_add_b_m": "0x142", + "a_m_sub_b_m": "0x1e1ea", + "a_m_mul_b_m": "0x5e08", + "a_eq_b": false, + "a_m_pow_b": "0xa480" + }, + { + "a": "0x401", + "b": "0x78", + "m": "0x1e240", + "a_m_add_b_m": "0x479", + "a_m_sub_b_m": "0x389", + "a_m_mul_b_m": "0x1e078", + "a_eq_b": false, + "a_m_pow_b": "0x6c1" + }, + { + "a": "0x212", + "b": "0x18c11", + "m": "0x1e240", + "a_m_add_b_m": "0x18e23", + "a_m_sub_b_m": "0x5841", + "a_m_mul_b_m": "0x8872", + "a_eq_b": false, + "a_m_pow_b": "0x17000" + }, + { + "a": "0x19c06", + "b": "0xca9f", + "m": "0x1e240", + "a_m_add_b_m": "0x8465", + "a_m_sub_b_m": "0xd167", + "a_m_mul_b_m": "0xc27a", + "a_eq_b": false, + "a_m_pow_b": "0x12700" + }, + { + "a": "0x2a42", + "b": "0xb", + "m": "0x1e240", + "a_m_add_b_m": "0x2a4d", + "a_m_sub_b_m": "0x2a37", + "a_m_mul_b_m": "0x1d0d6", + "a_eq_b": false, + "a_m_pow_b": "0x11100" + }, + { + "a": "0xd31", + "b": "0x1b6cf", + "m": "0x1e240", + "a_m_add_b_m": "0x1c400", + "a_m_sub_b_m": "0x38a2", + "a_m_mul_b_m": "0x1809f", + "a_eq_b": false, + "a_m_pow_b": "0x19151" + }, + { + "a": "0x15968", + "b": "0x15968", + "m": "0x1e240", + "a_m_add_b_m": "0xd090", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x15940", + "a_eq_b": true, + "a_m_pow_b": "0x1aa40" + }, + { + "a": "0x54", + "b": "0x517", + "m": "0x1e240", + "a_m_add_b_m": "0x56b", + "a_m_sub_b_m": "0x1dd7d", + "a_m_mul_b_m": "0x1ab8c", + "a_eq_b": false, + "a_m_pow_b": "0x7500" + }, + { + "a": "0x66", + "b": "0x5e3", + "m": "0x1e240", + "a_m_add_b_m": "0x649", + "a_m_sub_b_m": "0x1dcc3", + "a_m_mul_b_m": "0x7632", + "a_eq_b": false, + "a_m_pow_b": "0x9b40" + }, + { + "a": "0x5c", + "b": "0x5", + "m": "0x1e240", + "a_m_add_b_m": "0x61", + "a_m_sub_b_m": "0x57", + "a_m_mul_b_m": "0x1cc", + "a_eq_b": false, + "a_m_pow_b": "0x1c7c0" + }, + { + "a": "0x14", + "b": "0xd2e2", + "m": "0x1e240", + "a_m_add_b_m": "0xd2f6", + "a_m_sub_b_m": "0x10f72", + "a_m_mul_b_m": "0x167a8", + "a_eq_b": false, + "a_m_pow_b": "0x10000" + }, + { + "a": "0x11e8e", + "b": "0x1013", + "m": "0x1e240", + "a_m_add_b_m": "0x12ea1", + "a_m_sub_b_m": "0x10e7b", + "a_m_mul_b_m": "0x474a", + "a_eq_b": false, + "a_m_pow_b": "0x18440" + }, + { + "a": "0x133dc", + "b": "0x95", + "m": "0x1e240", + "a_m_add_b_m": "0x13471", + "a_m_sub_b_m": "0x13347", + "a_m_mul_b_m": "0x394c", + "a_eq_b": false, + "a_m_pow_b": "0xecc0" + }, + { + "a": "0x18787", + "b": "0x825", + "m": "0x1e240", + "a_m_add_b_m": "0x18fac", + "a_m_sub_b_m": "0x17f62", + "a_m_mul_b_m": "0x16f83", + "a_eq_b": false, + "a_m_pow_b": "0x11227" + }, + { + "a": "0x7b2", + "b": "0xfb", + "m": "0x1e240", + "a_m_add_b_m": "0x8ad", + "a_m_sub_b_m": "0x6b7", + "a_m_mul_b_m": "0x286", + "a_eq_b": false, + "a_m_pow_b": "0x10e80" + }, + { + "a": "0x1b90f", + "b": "0x1b90f", + "m": "0x1e240", + "a_m_add_b_m": "0x18fde", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x15261", + "a_eq_b": true, + "a_m_pow_b": "0xd3ef" + }, + { + "a": "0x211", + "b": "0x211", + "m": "0x1e240", + "a_m_add_b_m": "0x422", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x80a1", + "a_eq_b": true, + "a_m_pow_b": "0x1a9d1" + }, + { + "a": "0x425e", + "b": "0x6", + "m": "0x1e240", + "a_m_add_b_m": "0x4264", + "a_m_sub_b_m": "0x4258", + "a_m_mul_b_m": "0x18e34", + "a_eq_b": false, + "a_m_pow_b": "0x19000" + }, + { + "a": "0xde19", + "b": "0x1cebb", + "m": "0x1e240", + "a_m_add_b_m": "0xca94", + "a_m_sub_b_m": "0xf19e", + "a_m_mul_b_m": "0x13d83", + "a_eq_b": false, + "a_m_pow_b": "0x1ac89" + }, + { + "a": "0x9a", + "b": "0x18a7", + "m": "0x1e240", + "a_m_add_b_m": "0x1941", + "a_m_sub_b_m": "0x1ca33", + "a_m_mul_b_m": "0x1a4b6", + "a_eq_b": false, + "a_m_pow_b": "0x1b040" + }, + { + "a": "0x1a7", + "b": "0x1a7", + "m": "0x1e240", + "a_m_add_b_m": "0x34e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xd8b1", + "a_eq_b": true, + "a_m_pow_b": "0x18057" + }, + { + "a": "0xf7", + "b": "0x931", + "m": "0x1e240", + "a_m_add_b_m": "0xa28", + "a_m_sub_b_m": "0x1da06", + "a_m_mul_b_m": "0x15547", + "a_eq_b": false, + "a_m_pow_b": "0x45f7" + }, + { + "a": "0x12b3", + "b": "0x4f", + "m": "0x1e240", + "a_m_add_b_m": "0x1302", + "a_m_sub_b_m": "0x1264", + "a_m_mul_b_m": "0x1e7d", + "a_eq_b": false, + "a_m_pow_b": "0x64bb" + }, + { + "a": "0x8", + "b": "0x115", + "m": "0x1e240", + "a_m_add_b_m": "0x11d", + "a_m_sub_b_m": "0x1e133", + "a_m_mul_b_m": "0x8a8", + "a_eq_b": false, + "a_m_pow_b": "0x1f40" + }, + { + "a": "0x11019", + "b": "0x36", + "m": "0x1e240", + "a_m_add_b_m": "0x1104f", + "a_m_sub_b_m": "0x10fe3", + "a_m_mul_b_m": "0xe1c6", + "a_eq_b": false, + "a_m_pow_b": "0x4311" + }, + { + "a": "0x87", + "b": "0x117", + "m": "0x1e240", + "a_m_add_b_m": "0x19e", + "a_m_sub_b_m": "0x1e1b0", + "a_m_mul_b_m": "0x9321", + "a_eq_b": false, + "a_m_pow_b": "0x1bfb7" + }, + { + "a": "0x13124", + "b": "0x13124", + "m": "0x1e240", + "a_m_add_b_m": "0x8008", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xc250", + "a_eq_b": true, + "a_m_pow_b": "0x8b00" + }, + { + "a": "0x6", + "b": "0x5536", + "m": "0x1e240", + "a_m_add_b_m": "0x553c", + "a_m_sub_b_m": "0x18d10", + "a_m_mul_b_m": "0x1d04", + "a_eq_b": false, + "a_m_pow_b": "0xd80" + }, + { + "a": "0x6", + "b": "0x1e38", + "m": "0x1e240", + "a_m_add_b_m": "0x1e3e", + "a_m_sub_b_m": "0x1c40e", + "a_m_mul_b_m": "0xb550", + "a_eq_b": false, + "a_m_pow_b": "0x14400" + }, + { + "a": "0x11c1b", + "b": "0x101cc", + "m": "0x1e240", + "a_m_add_b_m": "0x3ba7", + "a_m_sub_b_m": "0x1a4f", + "a_m_mul_b_m": "0x1aac4", + "a_eq_b": false, + "a_m_pow_b": "0x23d1" + }, + { + "a": "0x12e10", + "b": "0x1882e", + "m": "0x1e240", + "a_m_add_b_m": "0xd3fe", + "a_m_sub_b_m": "0x18822", + "a_m_mul_b_m": "0xb3a0", + "a_eq_b": false, + "a_m_pow_b": "0x19a40" + }, + { + "a": "0x4c46", + "b": "0x4", + "m": "0x1e240", + "a_m_add_b_m": "0x4c4a", + "a_m_sub_b_m": "0x4c42", + "a_m_mul_b_m": "0x13118", + "a_eq_b": false, + "a_m_pow_b": "0x1d410" + }, + { + "a": "0x30", + "b": "0x5da", + "m": "0x1e240", + "a_m_add_b_m": "0x60a", + "a_m_sub_b_m": "0x1dc96", + "a_m_mul_b_m": "0x118e0", + "a_eq_b": false, + "a_m_pow_b": "0x17640" + }, + { + "a": "0x40b", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x40b", + "a_m_sub_b_m": "0x40b", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x108ad", + "b": "0x9f6", + "m": "0x1e240", + "a_m_add_b_m": "0x112a3", + "a_m_sub_b_m": "0xfeb7", + "a_m_mul_b_m": "0xff7e", + "a_eq_b": false, + "a_m_pow_b": "0x47b9" + }, + { + "a": "0x0", + "b": "0x19", + "m": "0x1e240", + "a_m_add_b_m": "0x19", + "a_m_sub_b_m": "0x1e227", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x148", + "b": "0x559b", + "m": "0x1e240", + "a_m_add_b_m": "0x56e3", + "a_m_sub_b_m": "0x18ded", + "a_m_mul_b_m": "0x6c18", + "a_eq_b": false, + "a_m_pow_b": "0x1900" + }, + { + "a": "0xa", + "b": "0x1", + "m": "0x1e240", + "a_m_add_b_m": "0xb", + "a_m_sub_b_m": "0x9", + "a_m_mul_b_m": "0xa", + "a_eq_b": false, + "a_m_pow_b": "0xa" + }, + { + "a": "0xbf14", + "b": "0x1123e", + "m": "0x1e240", + "a_m_add_b_m": "0x1d152", + "a_m_sub_b_m": "0x18f16", + "a_m_mul_b_m": "0x5298", + "a_eq_b": false, + "a_m_pow_b": "0x3580" + }, + { + "a": "0xf1a8", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0xf1a8", + "a_m_sub_b_m": "0xf1a8", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x13814", + "b": "0x64", + "m": "0x1e240", + "a_m_add_b_m": "0x13878", + "a_m_sub_b_m": "0x137b0", + "a_m_mul_b_m": "0x157d0", + "a_eq_b": false, + "a_m_pow_b": "0x19240" + }, + { + "a": "0xaf", + "b": "0x22a7", + "m": "0x1e240", + "a_m_add_b_m": "0x2356", + "a_m_sub_b_m": "0x1c048", + "a_m_mul_b_m": "0x11529", + "a_eq_b": false, + "a_m_pow_b": "0x19f0f" + }, + { + "a": "0x349f", + "b": "0x1189", + "m": "0x1e240", + "a_m_add_b_m": "0x4628", + "a_m_sub_b_m": "0x2316", + "a_m_mul_b_m": "0x18bd7", + "a_eq_b": false, + "a_m_pow_b": "0x1069f" + }, + { + "a": "0xb", + "b": "0x74b", + "m": "0x1e240", + "a_m_add_b_m": "0x756", + "a_m_sub_b_m": "0x1db00", + "a_m_mul_b_m": "0x5039", + "a_eq_b": false, + "a_m_pow_b": "0x6413" + }, + { + "a": "0x6933", + "b": "0x3d0a", + "m": "0x1e240", + "a_m_add_b_m": "0xa63d", + "a_m_sub_b_m": "0x2c29", + "a_m_mul_b_m": "0x14efe", + "a_eq_b": false, + "a_m_pow_b": "0x14109" + }, + { + "a": "0x1c258", + "b": "0x4", + "m": "0x1e240", + "a_m_add_b_m": "0x1c25c", + "a_m_sub_b_m": "0x1c254", + "a_m_mul_b_m": "0x162a0", + "a_eq_b": false, + "a_m_pow_b": "0x52c0" + }, + { + "a": "0x60e", + "b": "0x1", + "m": "0x1e240", + "a_m_add_b_m": "0x60f", + "a_m_sub_b_m": "0x60d", + "a_m_mul_b_m": "0x60e", + "a_eq_b": false, + "a_m_pow_b": "0x60e" + }, + { + "a": "0x4", + "b": "0x4c", + "m": "0x1e240", + "a_m_add_b_m": "0x50", + "a_m_sub_b_m": "0x1e1f8", + "a_m_mul_b_m": "0x130", + "a_eq_b": false, + "a_m_pow_b": "0x3580" + }, + { + "a": "0x122c", + "b": "0x3896", + "m": "0x1e240", + "a_m_add_b_m": "0x4ac2", + "a_m_sub_b_m": "0x1bbd6", + "a_m_mul_b_m": "0x19b88", + "a_eq_b": false, + "a_m_pow_b": "0x5e00" + }, + { + "a": "0x17832", + "b": "0xa", + "m": "0x1e240", + "a_m_add_b_m": "0x1783c", + "a_m_sub_b_m": "0x17828", + "a_m_mul_b_m": "0x18234", + "a_eq_b": false, + "a_m_pow_b": "0x13f80" + }, + { + "a": "0x1d386", + "b": "0x1c923", + "m": "0x1e240", + "a_m_add_b_m": "0x1ba69", + "a_m_sub_b_m": "0xa63", + "a_m_mul_b_m": "0x9c12", + "a_eq_b": false, + "a_m_pow_b": "0xd600" + }, + { + "a": "0xa118", + "b": "0x231", + "m": "0x1e240", + "a_m_add_b_m": "0xa349", + "a_m_sub_b_m": "0x9ee7", + "a_m_mul_b_m": "0xc0d8", + "a_eq_b": false, + "a_m_pow_b": "0x173c0" + }, + { + "a": "0x11d87", + "b": "0x24", + "m": "0x1e240", + "a_m_add_b_m": "0x11dab", + "a_m_sub_b_m": "0x11d63", + "a_m_mul_b_m": "0x97bc", + "a_eq_b": false, + "a_m_pow_b": "0x14361" + }, + { + "a": "0x3e", + "b": "0x0", + "m": "0x1e240", + "a_m_add_b_m": "0x3e", + "a_m_sub_b_m": "0x3e", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x0", + "b": "0x115f3", + "m": "0x1e240", + "a_m_add_b_m": "0x115f3", + "a_m_sub_b_m": "0xcc4d", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x152f", + "b": "0x358f", + "m": "0x1e240", + "a_m_add_b_m": "0x4abe", + "a_m_sub_b_m": "0x1c1e0", + "a_m_mul_b_m": "0x85c1", + "a_eq_b": false, + "a_m_pow_b": "0x1de4f" + }, + { + "a": "0x673", + "b": "0xeb", + "m": "0x1e240", + "a_m_add_b_m": "0x75e", + "a_m_sub_b_m": "0x588", + "a_m_mul_b_m": "0x44d1", + "a_eq_b": false, + "a_m_pow_b": "0x1b38b" + }, + { + "a": "0x50b", + "b": "0x547", + "m": "0x1e240", + "a_m_add_b_m": "0xa52", + "a_m_sub_b_m": "0x1e204", + "a_m_mul_b_m": "0x3d8d", + "a_eq_b": false, + "a_m_pow_b": "0x9d03" + }, + { + "a": "0x2c", + "b": "0x17", + "m": "0x1e240", + "a_m_add_b_m": "0x43", + "a_m_sub_b_m": "0x15", + "a_m_mul_b_m": "0x3f4", + "a_eq_b": false, + "a_m_pow_b": "0xd880" + }, + { + "a": "0xc", + "b": "0x166e6", + "m": "0x1e240", + "a_m_add_b_m": "0x166f2", + "a_m_sub_b_m": "0x7b66", + "a_m_mul_b_m": "0x1c0c8", + "a_eq_b": false, + "a_m_pow_b": "0x13980" + } + ], + "montgomery_17": [ + { + "a": "0x1", + "b": "0x5", + "m": "0x1e241", + "a_m_add_b_m": "0x6", + "a_m_sub_b_m": "0x1e23d", + "a_m_mul_b_m": "0x5", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x39c8", + "b": "0x2", + "m": "0x1e241", + "a_m_add_b_m": "0x39ca", + "a_m_sub_b_m": "0x39c6", + "a_m_mul_b_m": "0x7390", + "a_eq_b": false, + "a_m_pow_b": "0x9254" + }, + { + "a": "0x1", + "b": "0x30d", + "m": "0x1e241", + "a_m_add_b_m": "0x30e", + "a_m_sub_b_m": "0x1df35", + "a_m_mul_b_m": "0x30d", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1e3", + "b": "0x3", + "m": "0x1e241", + "a_m_add_b_m": "0x1e6", + "a_m_sub_b_m": "0x1e0", + "a_m_mul_b_m": "0x5a9", + "a_eq_b": false, + "a_m_pow_b": "0x14f2b" + }, + { + "a": "0x839", + "b": "0x19", + "m": "0x1e241", + "a_m_add_b_m": "0x852", + "a_m_sub_b_m": "0x820", + "a_m_mul_b_m": "0xcd91", + "a_eq_b": false, + "a_m_pow_b": "0x1908" + }, + { + "a": "0x1e1", + "b": "0x7d", + "m": "0x1e241", + "a_m_add_b_m": "0x25e", + "a_m_sub_b_m": "0x164", + "a_m_mul_b_m": "0xeadd", + "a_eq_b": false, + "a_m_pow_b": "0x18023" + }, + { + "a": "0x38", + "b": "0x3f9", + "m": "0x1e241", + "a_m_add_b_m": "0x431", + "a_m_sub_b_m": "0x1de80", + "a_m_mul_b_m": "0xde78", + "a_eq_b": false, + "a_m_pow_b": "0x18015" + }, + { + "a": "0x1", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x2", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0xeab9", + "b": "0x2", + "m": "0x1e241", + "a_m_add_b_m": "0xeabb", + "a_m_sub_b_m": "0xeab7", + "a_m_mul_b_m": "0x1d572", + "a_eq_b": false, + "a_m_pow_b": "0xfbf3" + }, + { + "a": "0x7e47", + "b": "0x7e47", + "m": "0x1e241", + "a_m_add_b_m": "0xfc8e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x172a1", + "a_eq_b": true, + "a_m_pow_b": "0x16cb5" + }, + { + "a": "0x6938", + "b": "0xe", + "m": "0x1e241", + "a_m_add_b_m": "0x6946", + "a_m_sub_b_m": "0x692a", + "a_m_mul_b_m": "0x1a4d", + "a_eq_b": false, + "a_m_pow_b": "0x12015" + }, + { + "a": "0x10", + "b": "0x1c", + "m": "0x1e241", + "a_m_add_b_m": "0x2c", + "a_m_sub_b_m": "0x1e235", + "a_m_mul_b_m": "0x1c0", + "a_eq_b": false, + "a_m_pow_b": "0x1d665" + }, + { + "a": "0x3a", + "b": "0xf", + "m": "0x1e241", + "a_m_add_b_m": "0x49", + "a_m_sub_b_m": "0x2b", + "a_m_mul_b_m": "0x366", + "a_eq_b": false, + "a_m_pow_b": "0x2cc6" + }, + { + "a": "0xd2", + "b": "0x4", + "m": "0x1e241", + "a_m_add_b_m": "0xd6", + "a_m_sub_b_m": "0xce", + "a_m_mul_b_m": "0x348", + "a_eq_b": false, + "a_m_pow_b": "0x1c288" + }, + { + "a": "0x13206", + "b": "0x11d02", + "m": "0x1e241", + "a_m_add_b_m": "0x6cc7", + "a_m_sub_b_m": "0x1504", + "a_m_mul_b_m": "0xd071", + "a_eq_b": false, + "a_m_pow_b": "0x5f9a" + }, + { + "a": "0x2b", + "b": "0x1388b", + "m": "0x1e241", + "a_m_add_b_m": "0x138b6", + "a_m_sub_b_m": "0xa9e1", + "a_m_mul_b_m": "0x1a27e", + "a_eq_b": false, + "a_m_pow_b": "0x1a4e5" + }, + { + "a": "0x8", + "b": "0x766", + "m": "0x1e241", + "a_m_add_b_m": "0x76e", + "a_m_sub_b_m": "0x1dae3", + "a_m_mul_b_m": "0x3b30", + "a_eq_b": false, + "a_m_pow_b": "0x792" + }, + { + "a": "0x160e4", + "b": "0x10ec1", + "m": "0x1e241", + "a_m_add_b_m": "0x8d64", + "a_m_sub_b_m": "0x5223", + "a_m_mul_b_m": "0x1d805", + "a_eq_b": false, + "a_m_pow_b": "0x99d0" + }, + { + "a": "0x0", + "b": "0x89f5", + "m": "0x1e241", + "a_m_add_b_m": "0x89f5", + "a_m_sub_b_m": "0x1584c", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x0", + "b": "0x1d", + "m": "0x1e241", + "a_m_add_b_m": "0x1d", + "a_m_sub_b_m": "0x1e224", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x134", + "b": "0x134", + "m": "0x1e241", + "a_m_add_b_m": "0x268", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x17290", + "a_eq_b": true, + "a_m_pow_b": "0xe21d" + }, + { + "a": "0x27", + "b": "0x84eb", + "m": "0x1e241", + "a_m_add_b_m": "0x8512", + "a_m_sub_b_m": "0x15d7d", + "a_m_mul_b_m": "0x16943", + "a_eq_b": false, + "a_m_pow_b": "0x6344" + }, + { + "a": "0x496a", + "b": "0xc1", + "m": "0x1e241", + "a_m_add_b_m": "0x4a2b", + "a_m_sub_b_m": "0x48a9", + "a_m_mul_b_m": "0xb78d", + "a_eq_b": false, + "a_m_pow_b": "0x5f06" + }, + { + "a": "0xe6", + "b": "0x9f", + "m": "0x1e241", + "a_m_add_b_m": "0x185", + "a_m_sub_b_m": "0x47", + "a_m_mul_b_m": "0x8eda", + "a_eq_b": false, + "a_m_pow_b": "0xc9b7" + }, + { + "a": "0x827", + "b": "0xc6", + "m": "0x1e241", + "a_m_add_b_m": "0x8ed", + "a_m_sub_b_m": "0x761", + "a_m_mul_b_m": "0xa767", + "a_eq_b": false, + "a_m_pow_b": "0x1dea0" + }, + { + "a": "0x1", + "b": "0x37c", + "m": "0x1e241", + "a_m_add_b_m": "0x37d", + "a_m_sub_b_m": "0x1dec6", + "a_m_mul_b_m": "0x37c", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x0", + "b": "0x198d2", + "m": "0x1e241", + "a_m_add_b_m": "0x198d2", + "a_m_sub_b_m": "0x496f", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x3c0f", + "b": "0x54b5", + "m": "0x1e241", + "a_m_add_b_m": "0x90c4", + "a_m_sub_b_m": "0x1c99b", + "a_m_mul_b_m": "0x11d0f", + "a_eq_b": false, + "a_m_pow_b": "0x8abf" + }, + { + "a": "0x31", + "b": "0x6", + "m": "0x1e241", + "a_m_add_b_m": "0x37", + "a_m_sub_b_m": "0x2b", + "a_m_mul_b_m": "0x126", + "a_eq_b": false, + "a_m_pow_b": "0x71af" + }, + { + "a": "0x5d", + "b": "0x384e", + "m": "0x1e241", + "a_m_add_b_m": "0x38ab", + "a_m_sub_b_m": "0x1aa50", + "a_m_mul_b_m": "0x19dcc", + "a_eq_b": false, + "a_m_pow_b": "0xda41" + }, + { + "a": "0xcf", + "b": "0x221", + "m": "0x1e241", + "a_m_add_b_m": "0x2f0", + "a_m_sub_b_m": "0x1e0ef", + "a_m_mul_b_m": "0x1b8af", + "a_eq_b": false, + "a_m_pow_b": "0xed53" + }, + { + "a": "0xbb1", + "b": "0x15cff", + "m": "0x1e241", + "a_m_add_b_m": "0x168b0", + "a_m_sub_b_m": "0x90f3", + "a_m_mul_b_m": "0x1d19a", + "a_eq_b": false, + "a_m_pow_b": "0xc23b" + }, + { + "a": "0x4", + "b": "0x10", + "m": "0x1e241", + "a_m_add_b_m": "0x14", + "a_m_sub_b_m": "0x1e235", + "a_m_mul_b_m": "0x40", + "a_eq_b": false, + "a_m_pow_b": "0x54db" + }, + { + "a": "0xd", + "b": "0x1d859", + "m": "0x1e241", + "a_m_add_b_m": "0x1d866", + "a_m_sub_b_m": "0x9f5", + "a_m_mul_b_m": "0x16179", + "a_eq_b": false, + "a_m_pow_b": "0x5d2c" + }, + { + "a": "0x13c", + "b": "0x3e73", + "m": "0x1e241", + "a_m_add_b_m": "0x3faf", + "a_m_sub_b_m": "0x1a50a", + "a_m_mul_b_m": "0x1bbcc", + "a_eq_b": false, + "a_m_pow_b": "0x16a6c" + }, + { + "a": "0xfaf6", + "b": "0x5e4", + "m": "0x1e241", + "a_m_add_b_m": "0x100da", + "a_m_sub_b_m": "0xf512", + "a_m_mul_b_m": "0x16a08", + "a_eq_b": false, + "a_m_pow_b": "0x131d7" + }, + { + "a": "0x3", + "b": "0x8", + "m": "0x1e241", + "a_m_add_b_m": "0xb", + "a_m_sub_b_m": "0x1e23c", + "a_m_mul_b_m": "0x18", + "a_eq_b": false, + "a_m_pow_b": "0x19a1" + }, + { + "a": "0x120", + "b": "0x120", + "m": "0x1e241", + "a_m_add_b_m": "0x240", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x14400", + "a_eq_b": true, + "a_m_pow_b": "0x17e62" + }, + { + "a": "0x37", + "b": "0x30a", + "m": "0x1e241", + "a_m_add_b_m": "0x341", + "a_m_sub_b_m": "0x1df6e", + "a_m_mul_b_m": "0xa726", + "a_eq_b": false, + "a_m_pow_b": "0x10f72" + }, + { + "a": "0x76", + "b": "0x76", + "m": "0x1e241", + "a_m_add_b_m": "0xec", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x3664", + "a_eq_b": true, + "a_m_pow_b": "0x91de" + }, + { + "a": "0x75b", + "b": "0x1bf30", + "m": "0x1e241", + "a_m_add_b_m": "0x1c68b", + "a_m_sub_b_m": "0x2a6c", + "a_m_mul_b_m": "0x26be", + "a_eq_b": false, + "a_m_pow_b": "0xc920" + }, + { + "a": "0x18861", + "b": "0x2", + "m": "0x1e241", + "a_m_add_b_m": "0x18863", + "a_m_sub_b_m": "0x1885f", + "a_m_mul_b_m": "0x12e81", + "a_eq_b": false, + "a_m_pow_b": "0x1a581" + }, + { + "a": "0x5c", + "b": "0x10", + "m": "0x1e241", + "a_m_add_b_m": "0x6c", + "a_m_sub_b_m": "0x4c", + "a_m_mul_b_m": "0x5c0", + "a_eq_b": false, + "a_m_pow_b": "0x1ba9f" + }, + { + "a": "0x82", + "b": "0x10a01", + "m": "0x1e241", + "a_m_add_b_m": "0x10a83", + "a_m_sub_b_m": "0xd8c2", + "a_m_mul_b_m": "0x1547b", + "a_eq_b": false, + "a_m_pow_b": "0x11d0e" + }, + { + "a": "0x4", + "b": "0x4", + "m": "0x1e241", + "a_m_add_b_m": "0x8", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x10", + "a_eq_b": true, + "a_m_pow_b": "0x100" + }, + { + "a": "0x16", + "b": "0xd", + "m": "0x1e241", + "a_m_add_b_m": "0x23", + "a_m_sub_b_m": "0x9", + "a_m_mul_b_m": "0x11e", + "a_eq_b": false, + "a_m_pow_b": "0x2d1b" + }, + { + "a": "0x2a2", + "b": "0x54", + "m": "0x1e241", + "a_m_add_b_m": "0x2f6", + "a_m_sub_b_m": "0x24e", + "a_m_mul_b_m": "0xdd28", + "a_eq_b": false, + "a_m_pow_b": "0x13ebb" + }, + { + "a": "0x2", + "b": "0x53", + "m": "0x1e241", + "a_m_add_b_m": "0x55", + "a_m_sub_b_m": "0x1e1f0", + "a_m_mul_b_m": "0xa6", + "a_eq_b": false, + "a_m_pow_b": "0x12d90" + }, + { + "a": "0x707", + "b": "0x14818", + "m": "0x1e241", + "a_m_add_b_m": "0x14f1f", + "a_m_sub_b_m": "0xa130", + "a_m_mul_b_m": "0x1bc21", + "a_eq_b": false, + "a_m_pow_b": "0xf3e0" + }, + { + "a": "0x1c203", + "b": "0x2", + "m": "0x1e241", + "a_m_add_b_m": "0x1c205", + "a_m_sub_b_m": "0x1c201", + "a_m_mul_b_m": "0x1a1c5", + "a_eq_b": false, + "a_m_pow_b": "0x1951d" + }, + { + "a": "0x129", + "b": "0x23e", + "m": "0x1e241", + "a_m_add_b_m": "0x367", + "a_m_sub_b_m": "0x1e12c", + "a_m_mul_b_m": "0xb7ad", + "a_eq_b": false, + "a_m_pow_b": "0xad21" + }, + { + "a": "0x2", + "b": "0xdb", + "m": "0x1e241", + "a_m_add_b_m": "0xdd", + "a_m_sub_b_m": "0x1e168", + "a_m_mul_b_m": "0x1b6", + "a_eq_b": false, + "a_m_pow_b": "0x191c7" + }, + { + "a": "0x2c0", + "b": "0x2c0", + "m": "0x1e241", + "a_m_add_b_m": "0x580", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x6fc", + "a_eq_b": true, + "a_m_pow_b": "0x1af8" + }, + { + "a": "0x71", + "b": "0xa5d9", + "m": "0x1e241", + "a_m_add_b_m": "0xa64a", + "a_m_sub_b_m": "0x13cd9", + "a_m_mul_b_m": "0x19f23", + "a_eq_b": false, + "a_m_pow_b": "0xee84" + }, + { + "a": "0x733f", + "b": "0xa15", + "m": "0x1e241", + "a_m_add_b_m": "0x7d54", + "a_m_sub_b_m": "0x692a", + "a_m_mul_b_m": "0x17dc3", + "a_eq_b": false, + "a_m_pow_b": "0x1bbcb" + }, + { + "a": "0x10453", + "b": "0x0", + "m": "0x1e241", + "a_m_add_b_m": "0x10453", + "a_m_sub_b_m": "0x10453", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x831", + "b": "0x1f5", + "m": "0x1e241", + "a_m_add_b_m": "0xa26", + "a_m_sub_b_m": "0x63c", + "a_m_mul_b_m": "0xf5dd", + "a_eq_b": false, + "a_m_pow_b": "0x14e07" + }, + { + "a": "0x2", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x3", + "a_m_sub_b_m": "0x1", + "a_m_mul_b_m": "0x2", + "a_eq_b": false, + "a_m_pow_b": "0x2" + }, + { + "a": "0x10f7", + "b": "0x3f", + "m": "0x1e241", + "a_m_add_b_m": "0x1136", + "a_m_sub_b_m": "0x10b8", + "a_m_mul_b_m": "0x6847", + "a_eq_b": false, + "a_m_pow_b": "0x14590" + }, + { + "a": "0x1c51", + "b": "0x16a48", + "m": "0x1e241", + "a_m_add_b_m": "0x18699", + "a_m_sub_b_m": "0x944a", + "a_m_mul_b_m": "0x13043", + "a_eq_b": false, + "a_m_pow_b": "0x5150" + }, + { + "a": "0x1b6", + "b": "0x1f54", + "m": "0x1e241", + "a_m_add_b_m": "0x210a", + "a_m_sub_b_m": "0x1c4a3", + "a_m_mul_b_m": "0xda9c", + "a_eq_b": false, + "a_m_pow_b": "0x1cc1e" + }, + { + "a": "0x3", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x4", + "a_m_sub_b_m": "0x2", + "a_m_mul_b_m": "0x3", + "a_eq_b": false, + "a_m_pow_b": "0x3" + }, + { + "a": "0x4", + "b": "0xe0a", + "m": "0x1e241", + "a_m_add_b_m": "0xe0e", + "a_m_sub_b_m": "0x1d43b", + "a_m_mul_b_m": "0x3828", + "a_eq_b": false, + "a_m_pow_b": "0x10754" + }, + { + "a": "0xd8ec", + "b": "0x25", + "m": "0x1e241", + "a_m_add_b_m": "0xd911", + "a_m_sub_b_m": "0xd8c7", + "a_m_mul_b_m": "0x1360c", + "a_eq_b": false, + "a_m_pow_b": "0xd712" + }, + { + "a": "0x1b83d", + "b": "0xe", + "m": "0x1e241", + "a_m_add_b_m": "0x1b84b", + "a_m_sub_b_m": "0x1b82f", + "a_m_mul_b_m": "0x1784a", + "a_eq_b": false, + "a_m_pow_b": "0xdc4e" + }, + { + "a": "0x113c", + "b": "0xe8", + "m": "0x1e241", + "a_m_add_b_m": "0x1224", + "a_m_sub_b_m": "0x1054", + "a_m_mul_b_m": "0x8c58", + "a_eq_b": false, + "a_m_pow_b": "0x2482" + }, + { + "a": "0x1929", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x192a", + "a_m_sub_b_m": "0x1928", + "a_m_mul_b_m": "0x1929", + "a_eq_b": false, + "a_m_pow_b": "0x1929" + }, + { + "a": "0x25", + "b": "0x249", + "m": "0x1e241", + "a_m_add_b_m": "0x26e", + "a_m_sub_b_m": "0x1e01d", + "a_m_mul_b_m": "0x548d", + "a_eq_b": false, + "a_m_pow_b": "0x9bfe" + }, + { + "a": "0x4", + "b": "0x209", + "m": "0x1e241", + "a_m_add_b_m": "0x20d", + "a_m_sub_b_m": "0x1e03c", + "a_m_mul_b_m": "0x824", + "a_eq_b": false, + "a_m_pow_b": "0x1033e" + }, + { + "a": "0x12598", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x12599", + "a_m_sub_b_m": "0x12597", + "a_m_mul_b_m": "0x12598", + "a_eq_b": false, + "a_m_pow_b": "0x12598" + }, + { + "a": "0x516", + "b": "0x354", + "m": "0x1e241", + "a_m_add_b_m": "0x86a", + "a_m_sub_b_m": "0x1c2", + "a_m_mul_b_m": "0x1db30", + "a_eq_b": false, + "a_m_pow_b": "0xb650" + }, + { + "a": "0x459", + "b": "0x483", + "m": "0x1e241", + "a_m_add_b_m": "0x8dc", + "a_m_sub_b_m": "0x1e217", + "a_m_mul_b_m": "0xc701", + "a_eq_b": false, + "a_m_pow_b": "0x739" + }, + { + "a": "0x4", + "b": "0x21", + "m": "0x1e241", + "a_m_add_b_m": "0x25", + "a_m_sub_b_m": "0x1e224", + "a_m_mul_b_m": "0x84", + "a_eq_b": false, + "a_m_pow_b": "0x516b" + }, + { + "a": "0x130", + "b": "0x4df", + "m": "0x1e241", + "a_m_add_b_m": "0x60f", + "a_m_sub_b_m": "0x1de92", + "a_m_mul_b_m": "0x220d", + "a_eq_b": false, + "a_m_pow_b": "0x11c8f" + }, + { + "a": "0x15ea4", + "b": "0x65", + "m": "0x1e241", + "a_m_add_b_m": "0x15f09", + "a_m_sub_b_m": "0x15e3f", + "a_m_mul_b_m": "0xd22b", + "a_eq_b": false, + "a_m_pow_b": "0x1afc1" + }, + { + "a": "0x69f", + "b": "0x1681", + "m": "0x1e241", + "a_m_add_b_m": "0x1d20", + "a_m_sub_b_m": "0x1d25f", + "a_m_mul_b_m": "0x2e10", + "a_eq_b": false, + "a_m_pow_b": "0x1868" + }, + { + "a": "0x1b79c", + "b": "0xa9", + "m": "0x1e241", + "a_m_add_b_m": "0x1b845", + "a_m_sub_b_m": "0x1b6f3", + "a_m_mul_b_m": "0x1ae2", + "a_eq_b": false, + "a_m_pow_b": "0x16458" + }, + { + "a": "0x0", + "b": "0x19", + "m": "0x1e241", + "a_m_add_b_m": "0x19", + "a_m_sub_b_m": "0x1e228", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x5b", + "b": "0x10acc", + "m": "0x1e241", + "a_m_add_b_m": "0x10b27", + "a_m_sub_b_m": "0xd7d0", + "a_m_mul_b_m": "0xa5d2", + "a_eq_b": false, + "a_m_pow_b": "0xb647" + }, + { + "a": "0x202", + "b": "0x2", + "m": "0x1e241", + "a_m_add_b_m": "0x204", + "a_m_sub_b_m": "0x200", + "a_m_mul_b_m": "0x404", + "a_eq_b": false, + "a_m_pow_b": "0x4382" + }, + { + "a": "0x1947d", + "b": "0x33c", + "m": "0x1e241", + "a_m_add_b_m": "0x197b9", + "a_m_sub_b_m": "0x19141", + "a_m_mul_b_m": "0xe816", + "a_eq_b": false, + "a_m_pow_b": "0x14eb6" + }, + { + "a": "0x3", + "b": "0x1e4e", + "m": "0x1e241", + "a_m_add_b_m": "0x1e51", + "a_m_sub_b_m": "0x1c3f6", + "a_m_mul_b_m": "0x5aea", + "a_eq_b": false, + "a_m_pow_b": "0x11aa9" + }, + { + "a": "0x5", + "b": "0x1aff", + "m": "0x1e241", + "a_m_add_b_m": "0x1b04", + "a_m_sub_b_m": "0x1c747", + "a_m_mul_b_m": "0x86fb", + "a_eq_b": false, + "a_m_pow_b": "0xa755" + }, + { + "a": "0x1dd", + "b": "0xb2c", + "m": "0x1e241", + "a_m_add_b_m": "0xd09", + "a_m_sub_b_m": "0x1d8f2", + "a_m_mul_b_m": "0x1831", + "a_eq_b": false, + "a_m_pow_b": "0x1bd46" + }, + { + "a": "0x1b60", + "b": "0x147c", + "m": "0x1e241", + "a_m_add_b_m": "0x2fdc", + "a_m_sub_b_m": "0x6e4", + "a_m_mul_b_m": "0x14517", + "a_eq_b": false, + "a_m_pow_b": "0x18b47" + }, + { + "a": "0x10252", + "b": "0x10252", + "m": "0x1e241", + "a_m_add_b_m": "0x2263", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x14466", + "a_eq_b": true, + "a_m_pow_b": "0x340c" + }, + { + "a": "0x729", + "b": "0xd", + "m": "0x1e241", + "a_m_add_b_m": "0x736", + "a_m_sub_b_m": "0x71c", + "a_m_mul_b_m": "0x5d15", + "a_eq_b": false, + "a_m_pow_b": "0x1160f" + }, + { + "a": "0x4d", + "b": "0x3191", + "m": "0x1e241", + "a_m_add_b_m": "0x31de", + "a_m_sub_b_m": "0x1b0fd", + "a_m_mul_b_m": "0x1b8d6", + "a_eq_b": false, + "a_m_pow_b": "0x20d4" + }, + { + "a": "0x71d", + "b": "0x51b", + "m": "0x1e241", + "a_m_add_b_m": "0xc38", + "a_m_sub_b_m": "0x202", + "a_m_mul_b_m": "0x863c", + "a_eq_b": false, + "a_m_pow_b": "0x159ce" + }, + { + "a": "0xc3", + "b": "0x11101", + "m": "0x1e241", + "a_m_add_b_m": "0x111c4", + "a_m_sub_b_m": "0xd203", + "a_m_mul_b_m": "0xbbd5", + "a_eq_b": false, + "a_m_pow_b": "0x6dfc" + }, + { + "a": "0x0", + "b": "0x3", + "m": "0x1e241", + "a_m_add_b_m": "0x3", + "a_m_sub_b_m": "0x1e23e", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0x19", + "b": "0x3", + "m": "0x1e241", + "a_m_add_b_m": "0x1c", + "a_m_sub_b_m": "0x16", + "a_m_mul_b_m": "0x4b", + "a_eq_b": false, + "a_m_pow_b": "0x3d09" + }, + { + "a": "0x2d8b", + "b": "0x23eb", + "m": "0x1e241", + "a_m_add_b_m": "0x5176", + "a_m_sub_b_m": "0x9a0", + "a_m_mul_b_m": "0xab35", + "a_eq_b": false, + "a_m_pow_b": "0xe6f0" + }, + { + "a": "0x5224", + "b": "0x1dbca", + "m": "0x1e241", + "a_m_add_b_m": "0x4bad", + "a_m_sub_b_m": "0x589b", + "a_m_mul_b_m": "0x34de", + "a_eq_b": false, + "a_m_pow_b": "0x119ee" + }, + { + "a": "0x107", + "b": "0x18", + "m": "0x1e241", + "a_m_add_b_m": "0x11f", + "a_m_sub_b_m": "0xef", + "a_m_mul_b_m": "0x18a8", + "a_eq_b": false, + "a_m_pow_b": "0x108b5" + }, + { + "a": "0x7", + "b": "0x36", + "m": "0x1e241", + "a_m_add_b_m": "0x3d", + "a_m_sub_b_m": "0x1e212", + "a_m_mul_b_m": "0x17a", + "a_eq_b": false, + "a_m_pow_b": "0x6faa" + }, + { + "a": "0xdf52", + "b": "0x3b7", + "m": "0x1e241", + "a_m_add_b_m": "0xe309", + "a_m_sub_b_m": "0xdb9b", + "a_m_mul_b_m": "0xb9e6", + "a_eq_b": false, + "a_m_pow_b": "0x1b8c0" + }, + { + "a": "0x1ca2b", + "b": "0x1ca2b", + "m": "0x1e241", + "a_m_add_b_m": "0x1b215", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1cdf1", + "a_eq_b": true, + "a_m_pow_b": "0xb2ea" + }, + { + "a": "0x975", + "b": "0x30", + "m": "0x1e241", + "a_m_add_b_m": "0x9a5", + "a_m_sub_b_m": "0x945", + "a_m_mul_b_m": "0x1c5f0", + "a_eq_b": false, + "a_m_pow_b": "0x1ad8c" + }, + { + "a": "0x14bf6", + "b": "0x4", + "m": "0x1e241", + "a_m_add_b_m": "0x14bfa", + "a_m_sub_b_m": "0x14bf2", + "a_m_mul_b_m": "0x16b56", + "a_eq_b": false, + "a_m_pow_b": "0x1b7d8" + }, + { + "a": "0x778", + "b": "0x0", + "m": "0x1e241", + "a_m_add_b_m": "0x778", + "a_m_sub_b_m": "0x778", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x19", + "b": "0x1de58", + "m": "0x1e241", + "a_m_add_b_m": "0x1de71", + "a_m_sub_b_m": "0x402", + "a_m_mul_b_m": "0x18080", + "a_eq_b": false, + "a_m_pow_b": "0x16139" + }, + { + "a": "0x83", + "b": "0x323", + "m": "0x1e241", + "a_m_add_b_m": "0x3a6", + "a_m_sub_b_m": "0x1dfa1", + "a_m_mul_b_m": "0x19ae9", + "a_eq_b": false, + "a_m_pow_b": "0xd0b3" + }, + { + "a": "0x14ac1", + "b": "0x8ca3", + "m": "0x1e241", + "a_m_add_b_m": "0x1d764", + "a_m_sub_b_m": "0xbe1e", + "a_m_mul_b_m": "0x13f6f", + "a_eq_b": false, + "a_m_pow_b": "0x1d295" + }, + { + "a": "0xd459", + "b": "0x7f", + "m": "0x1e241", + "a_m_add_b_m": "0xd4d8", + "a_m_sub_b_m": "0xd3da", + "a_m_mul_b_m": "0x1bc30", + "a_eq_b": false, + "a_m_pow_b": "0x144e3" + }, + { + "a": "0xe34f", + "b": "0x3", + "m": "0x1e241", + "a_m_add_b_m": "0xe352", + "a_m_sub_b_m": "0xe34c", + "a_m_mul_b_m": "0xc7ac", + "a_eq_b": false, + "a_m_pow_b": "0x13643" + }, + { + "a": "0x1b622", + "b": "0x3", + "m": "0x1e241", + "a_m_add_b_m": "0x1b625", + "a_m_sub_b_m": "0x1b61f", + "a_m_mul_b_m": "0x15de4", + "a_eq_b": false, + "a_m_pow_b": "0x127e4" + }, + { + "a": "0x7", + "b": "0x104", + "m": "0x1e241", + "a_m_add_b_m": "0x10b", + "a_m_sub_b_m": "0x1e144", + "a_m_mul_b_m": "0x71c", + "a_eq_b": false, + "a_m_pow_b": "0xd90" + }, + { + "a": "0x2504", + "b": "0x29d", + "m": "0x1e241", + "a_m_add_b_m": "0x27a1", + "a_m_sub_b_m": "0x2267", + "a_m_mul_b_m": "0xa881", + "a_eq_b": false, + "a_m_pow_b": "0x1d7b1" + }, + { + "a": "0x1b26c", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x1b26d", + "a_m_sub_b_m": "0x1b26b", + "a_m_mul_b_m": "0x1b26c", + "a_eq_b": false, + "a_m_pow_b": "0x1b26c" + }, + { + "a": "0x0", + "b": "0x1d109", + "m": "0x1e241", + "a_m_add_b_m": "0x1d109", + "a_m_sub_b_m": "0x1138", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x0" + }, + { + "a": "0xfa", + "b": "0x46", + "m": "0x1e241", + "a_m_add_b_m": "0x140", + "a_m_sub_b_m": "0xb4", + "a_m_mul_b_m": "0x445c", + "a_eq_b": false, + "a_m_pow_b": "0x1b06e" + }, + { + "a": "0x1b9", + "b": "0x66f", + "m": "0x1e241", + "a_m_add_b_m": "0x828", + "a_m_sub_b_m": "0x1dd8b", + "a_m_mul_b_m": "0x1a9f2", + "a_eq_b": false, + "a_m_pow_b": "0x159c2" + }, + { + "a": "0x3", + "b": "0x1b", + "m": "0x1e241", + "a_m_add_b_m": "0x1e", + "a_m_sub_b_m": "0x1e229", + "a_m_mul_b_m": "0x51", + "a_eq_b": false, + "a_m_pow_b": "0x12cf9" + }, + { + "a": "0xa", + "b": "0xa", + "m": "0x1e241", + "a_m_add_b_m": "0x14", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x64", + "a_eq_b": true, + "a_m_pow_b": "0x19fd9" + }, + { + "a": "0x1", + "b": "0x7", + "m": "0x1e241", + "a_m_add_b_m": "0x8", + "a_m_sub_b_m": "0x1e23b", + "a_m_mul_b_m": "0x7", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x47c", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x47d", + "a_m_sub_b_m": "0x47b", + "a_m_mul_b_m": "0x47c", + "a_eq_b": false, + "a_m_pow_b": "0x47c" + }, + { + "a": "0x1", + "b": "0x42", + "m": "0x1e241", + "a_m_add_b_m": "0x43", + "a_m_sub_b_m": "0x1e200", + "a_m_mul_b_m": "0x42", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x68a8", + "b": "0x2b8", + "m": "0x1e241", + "a_m_add_b_m": "0x6b60", + "a_m_sub_b_m": "0x65f0", + "a_m_mul_b_m": "0x1469", + "a_eq_b": false, + "a_m_pow_b": "0x7fb1" + }, + { + "a": "0xa", + "b": "0x99", + "m": "0x1e241", + "a_m_add_b_m": "0xa3", + "a_m_sub_b_m": "0x1e1b2", + "a_m_mul_b_m": "0x5fa", + "a_eq_b": false, + "a_m_pow_b": "0x95eb" + }, + { + "a": "0x79", + "b": "0xa1df", + "m": "0x1e241", + "a_m_add_b_m": "0xa258", + "a_m_sub_b_m": "0x140db", + "a_m_mul_b_m": "0x1283f", + "a_eq_b": false, + "a_m_pow_b": "0x11bcf" + }, + { + "a": "0x45d2", + "b": "0x959b", + "m": "0x1e241", + "a_m_add_b_m": "0xdb6d", + "a_m_sub_b_m": "0x19278", + "a_m_mul_b_m": "0x1b07e", + "a_eq_b": false, + "a_m_pow_b": "0x1212f" + }, + { + "a": "0x91", + "b": "0x88", + "m": "0x1e241", + "a_m_add_b_m": "0x119", + "a_m_sub_b_m": "0x9", + "a_m_mul_b_m": "0x4d08", + "a_eq_b": false, + "a_m_pow_b": "0x174ce" + }, + { + "a": "0xe3", + "b": "0xe3", + "m": "0x1e241", + "a_m_add_b_m": "0x1c6", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xc949", + "a_eq_b": true, + "a_m_pow_b": "0x14c58" + }, + { + "a": "0x1", + "b": "0x1a4b3", + "m": "0x1e241", + "a_m_add_b_m": "0x1a4b4", + "a_m_sub_b_m": "0x3d8f", + "a_m_mul_b_m": "0x1a4b3", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x96f1", + "b": "0x2", + "m": "0x1e241", + "a_m_add_b_m": "0x96f3", + "a_m_sub_b_m": "0x96ef", + "a_m_mul_b_m": "0x12de2", + "a_eq_b": false, + "a_m_pow_b": "0x9423" + }, + { + "a": "0x8", + "b": "0x1923e", + "m": "0x1e241", + "a_m_add_b_m": "0x19246", + "a_m_sub_b_m": "0x500b", + "a_m_mul_b_m": "0x1446a", + "a_eq_b": false, + "a_m_pow_b": "0x1d684" + }, + { + "a": "0x14", + "b": "0x12134", + "m": "0x1e241", + "a_m_add_b_m": "0x12148", + "a_m_sub_b_m": "0xc121", + "a_m_mul_b_m": "0x1df45", + "a_eq_b": false, + "a_m_pow_b": "0x156f7" + }, + { + "a": "0x1218d", + "b": "0x5f73", + "m": "0x1e241", + "a_m_add_b_m": "0x18100", + "a_m_sub_b_m": "0xc21a", + "a_m_mul_b_m": "0x1a48", + "a_eq_b": false, + "a_m_pow_b": "0x10519" + }, + { + "a": "0xe", + "b": "0x1d9", + "m": "0x1e241", + "a_m_add_b_m": "0x1e7", + "a_m_sub_b_m": "0x1e076", + "a_m_mul_b_m": "0x19de", + "a_eq_b": false, + "a_m_pow_b": "0x12362" + }, + { + "a": "0x75c9", + "b": "0x24", + "m": "0x1e241", + "a_m_add_b_m": "0x75ed", + "a_m_sub_b_m": "0x75a5", + "a_m_mul_b_m": "0x17e3c", + "a_eq_b": false, + "a_m_pow_b": "0xef72" + }, + { + "a": "0x2", + "b": "0x3f8", + "m": "0x1e241", + "a_m_add_b_m": "0x3fa", + "a_m_sub_b_m": "0x1de4b", + "a_m_mul_b_m": "0x7f0", + "a_eq_b": false, + "a_m_pow_b": "0x7ca4" + }, + { + "a": "0x1", + "b": "0x4a", + "m": "0x1e241", + "a_m_add_b_m": "0x4b", + "a_m_sub_b_m": "0x1e1f8", + "a_m_mul_b_m": "0x4a", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x11b1b", + "b": "0x6", + "m": "0x1e241", + "a_m_add_b_m": "0x11b21", + "a_m_sub_b_m": "0x11b15", + "a_m_mul_b_m": "0xfbdf", + "a_eq_b": false, + "a_m_pow_b": "0x1227e" + }, + { + "a": "0x132f5", + "b": "0x56a", + "m": "0x1e241", + "a_m_add_b_m": "0x1385f", + "a_m_sub_b_m": "0x12d8b", + "a_m_mul_b_m": "0x5e80", + "a_eq_b": false, + "a_m_pow_b": "0x17d5a" + }, + { + "a": "0x496c", + "b": "0x10", + "m": "0x1e241", + "a_m_add_b_m": "0x497c", + "a_m_sub_b_m": "0x495c", + "a_m_mul_b_m": "0xd23e", + "a_eq_b": false, + "a_m_pow_b": "0x8fd8" + }, + { + "a": "0x82", + "b": "0x1b7d", + "m": "0x1e241", + "a_m_add_b_m": "0x1bff", + "a_m_sub_b_m": "0x1c746", + "a_m_mul_b_m": "0xc5b3", + "a_eq_b": false, + "a_m_pow_b": "0x44e0" + }, + { + "a": "0x4d65", + "b": "0x73b7", + "m": "0x1e241", + "a_m_add_b_m": "0xc11c", + "a_m_sub_b_m": "0x1bbef", + "a_m_mul_b_m": "0x1721", + "a_eq_b": false, + "a_m_pow_b": "0xbf25" + }, + { + "a": "0x40c8", + "b": "0x2eb", + "m": "0x1e241", + "a_m_add_b_m": "0x43b3", + "a_m_sub_b_m": "0x3ddd", + "a_m_mul_b_m": "0xa634", + "a_eq_b": false, + "a_m_pow_b": "0x6c48" + }, + { + "a": "0x93", + "b": "0x126", + "m": "0x1e241", + "a_m_add_b_m": "0x1b9", + "a_m_sub_b_m": "0x1e1ae", + "a_m_mul_b_m": "0xa8d2", + "a_eq_b": false, + "a_m_pow_b": "0x1a0aa" + }, + { + "a": "0x11af", + "b": "0x1d4ef", + "m": "0x1e241", + "a_m_add_b_m": "0x45d", + "a_m_sub_b_m": "0x1f01", + "a_m_mul_b_m": "0x1cef0", + "a_eq_b": false, + "a_m_pow_b": "0x16b4d" + }, + { + "a": "0x5a", + "b": "0x4", + "m": "0x1e241", + "a_m_add_b_m": "0x5e", + "a_m_sub_b_m": "0x56", + "a_m_mul_b_m": "0x168", + "a_eq_b": false, + "a_m_pow_b": "0xd43d" + }, + { + "a": "0x28", + "b": "0x4", + "m": "0x1e241", + "a_m_add_b_m": "0x2c", + "a_m_sub_b_m": "0x24", + "a_m_mul_b_m": "0xa0", + "a_eq_b": false, + "a_m_pow_b": "0x162ec" + }, + { + "a": "0x3f", + "b": "0xa5a", + "m": "0x1e241", + "a_m_add_b_m": "0xa99", + "a_m_sub_b_m": "0x1d826", + "a_m_mul_b_m": "0xa9e5", + "a_eq_b": false, + "a_m_pow_b": "0x6ac6" + }, + { + "a": "0x169f2", + "b": "0x33", + "m": "0x1e241", + "a_m_add_b_m": "0x16a25", + "a_m_sub_b_m": "0x169bf", + "a_m_mul_b_m": "0x8590", + "a_eq_b": false, + "a_m_pow_b": "0x13f84" + }, + { + "a": "0x9", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0xa", + "a_m_sub_b_m": "0x8", + "a_m_mul_b_m": "0x9", + "a_eq_b": false, + "a_m_pow_b": "0x9" + }, + { + "a": "0x26", + "b": "0x66", + "m": "0x1e241", + "a_m_add_b_m": "0x8c", + "a_m_sub_b_m": "0x1e201", + "a_m_mul_b_m": "0xf24", + "a_eq_b": false, + "a_m_pow_b": "0x6049" + }, + { + "a": "0x2", + "b": "0x2", + "m": "0x1e241", + "a_m_add_b_m": "0x4", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x4", + "a_eq_b": true, + "a_m_pow_b": "0x4" + }, + { + "a": "0x16476", + "b": "0x16d", + "m": "0x1e241", + "a_m_add_b_m": "0x165e3", + "a_m_sub_b_m": "0x16309", + "a_m_mul_b_m": "0x17df1", + "a_eq_b": false, + "a_m_pow_b": "0x6759" + }, + { + "a": "0x263", + "b": "0x3", + "m": "0x1e241", + "a_m_add_b_m": "0x266", + "a_m_sub_b_m": "0x260", + "a_m_mul_b_m": "0x729", + "a_eq_b": false, + "a_m_pow_b": "0x12144" + }, + { + "a": "0x1", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x2", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1", + "a_eq_b": true, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1", + "b": "0x11", + "m": "0x1e241", + "a_m_add_b_m": "0x12", + "a_m_sub_b_m": "0x1e231", + "a_m_mul_b_m": "0x11", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x3d1c", + "b": "0x462a", + "m": "0x1e241", + "a_m_add_b_m": "0x8346", + "a_m_sub_b_m": "0x1d933", + "a_m_mul_b_m": "0x24b4", + "a_eq_b": false, + "a_m_pow_b": "0xb39d" + }, + { + "a": "0x9", + "b": "0x17304", + "m": "0x1e241", + "a_m_add_b_m": "0x1730d", + "a_m_sub_b_m": "0x6f46", + "a_m_mul_b_m": "0x1bd9e", + "a_eq_b": false, + "a_m_pow_b": "0xe2cf" + }, + { + "a": "0x5", + "b": "0x14", + "m": "0x1e241", + "a_m_add_b_m": "0x19", + "a_m_sub_b_m": "0x1e232", + "a_m_mul_b_m": "0x64", + "a_eq_b": false, + "a_m_pow_b": "0x276e" + }, + { + "a": "0xaf", + "b": "0x8a4", + "m": "0x1e241", + "a_m_add_b_m": "0x953", + "a_m_sub_b_m": "0x1da4c", + "a_m_mul_b_m": "0x4159", + "a_eq_b": false, + "a_m_pow_b": "0x19e25" + }, + { + "a": "0x37", + "b": "0x23", + "m": "0x1e241", + "a_m_add_b_m": "0x5a", + "a_m_sub_b_m": "0x14", + "a_m_mul_b_m": "0x785", + "a_eq_b": false, + "a_m_pow_b": "0x2777" + }, + { + "a": "0x709e", + "b": "0x709e", + "m": "0x1e241", + "a_m_add_b_m": "0xe13c", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xdc38", + "a_eq_b": true, + "a_m_pow_b": "0x14259" + }, + { + "a": "0x15ea5", + "b": "0x12e03", + "m": "0x1e241", + "a_m_add_b_m": "0xaa67", + "a_m_sub_b_m": "0x30a2", + "a_m_mul_b_m": "0xb298", + "a_eq_b": false, + "a_m_pow_b": "0x10e18" + }, + { + "a": "0xffb5", + "b": "0xffb5", + "m": "0x1e241", + "a_m_add_b_m": "0x1d29", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x11f24", + "a_eq_b": true, + "a_m_pow_b": "0xb9c3" + }, + { + "a": "0x19", + "b": "0x55b", + "m": "0x1e241", + "a_m_add_b_m": "0x574", + "a_m_sub_b_m": "0x1dcff", + "a_m_mul_b_m": "0x85e3", + "a_eq_b": false, + "a_m_pow_b": "0x806b" + }, + { + "a": "0x14077", + "b": "0x1c3", + "m": "0x1e241", + "a_m_add_b_m": "0x1423a", + "a_m_sub_b_m": "0x13eb4", + "a_m_mul_b_m": "0x14fba", + "a_eq_b": false, + "a_m_pow_b": "0x4ab7" + }, + { + "a": "0x4a5", + "b": "0x1", + "m": "0x1e241", + "a_m_add_b_m": "0x4a6", + "a_m_sub_b_m": "0x4a4", + "a_m_mul_b_m": "0x4a5", + "a_eq_b": false, + "a_m_pow_b": "0x4a5" + }, + { + "a": "0x19fd", + "b": "0x371b", + "m": "0x1e241", + "a_m_add_b_m": "0x5118", + "a_m_sub_b_m": "0x1c523", + "a_m_mul_b_m": "0x67b7", + "a_eq_b": false, + "a_m_pow_b": "0x13c16" + }, + { + "a": "0x7297", + "b": "0xf", + "m": "0x1e241", + "a_m_add_b_m": "0x72a6", + "a_m_sub_b_m": "0x7288", + "a_m_mul_b_m": "0x11016", + "a_eq_b": false, + "a_m_pow_b": "0x1d273" + }, + { + "a": "0x1a", + "b": "0x1a", + "m": "0x1e241", + "a_m_add_b_m": "0x34", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x2a4", + "a_eq_b": true, + "a_m_pow_b": "0x138aa" + }, + { + "a": "0x5", + "b": "0x14", + "m": "0x1e241", + "a_m_add_b_m": "0x19", + "a_m_sub_b_m": "0x1e232", + "a_m_mul_b_m": "0x64", + "a_eq_b": false, + "a_m_pow_b": "0x276e" + }, + { + "a": "0x288", + "b": "0x121", + "m": "0x1e241", + "a_m_add_b_m": "0x3a9", + "a_m_sub_b_m": "0x167", + "a_m_mul_b_m": "0xf947", + "a_eq_b": false, + "a_m_pow_b": "0x519b" + }, + { + "a": "0xf", + "b": "0xf", + "m": "0x1e241", + "a_m_add_b_m": "0x1e", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0xe1", + "a_eq_b": true, + "a_m_pow_b": "0xa477" + }, + { + "a": "0x319", + "b": "0xfdbe", + "m": "0x1e241", + "a_m_add_b_m": "0x100d7", + "a_m_sub_b_m": "0xe79c", + "a_m_mul_b_m": "0x75ad", + "a_eq_b": false, + "a_m_pow_b": "0xf538" + }, + { + "a": "0x129a3", + "b": "0x45fb", + "m": "0x1e241", + "a_m_add_b_m": "0x16f9e", + "a_m_sub_b_m": "0xe3a8", + "a_m_mul_b_m": "0x16aa1", + "a_eq_b": false, + "a_m_pow_b": "0x187c" + }, + { + "a": "0x1", + "b": "0x117c1", + "m": "0x1e241", + "a_m_add_b_m": "0x117c2", + "a_m_sub_b_m": "0xca81", + "a_m_mul_b_m": "0x117c1", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x1cba5", + "b": "0x3", + "m": "0x1e241", + "a_m_add_b_m": "0x1cba8", + "a_m_sub_b_m": "0x1cba2", + "a_m_mul_b_m": "0x19e6d", + "a_eq_b": false, + "a_m_pow_b": "0x12778" + }, + { + "a": "0x113cb", + "b": "0xf974", + "m": "0x1e241", + "a_m_add_b_m": "0x2afe", + "a_m_sub_b_m": "0x1a57", + "a_m_mul_b_m": "0xe254", + "a_eq_b": false, + "a_m_pow_b": "0x8ada" + }, + { + "a": "0x24ad", + "b": "0x4432", + "m": "0x1e241", + "a_m_add_b_m": "0x68df", + "a_m_sub_b_m": "0x1c2bc", + "a_m_mul_b_m": "0x14edb", + "a_eq_b": false, + "a_m_pow_b": "0x11021" + }, + { + "a": "0x59e", + "b": "0x41a", + "m": "0x1e241", + "a_m_add_b_m": "0x9b8", + "a_m_sub_b_m": "0x184", + "a_m_mul_b_m": "0x6f00", + "a_eq_b": false, + "a_m_pow_b": "0x6858" + }, + { + "a": "0x1d87a", + "b": "0x21d", + "m": "0x1e241", + "a_m_add_b_m": "0x1da97", + "a_m_sub_b_m": "0x1d65d", + "a_m_mul_b_m": "0xf40", + "a_eq_b": false, + "a_m_pow_b": "0x1c928" + }, + { + "a": "0x269b", + "b": "0x523", + "m": "0x1e241", + "a_m_add_b_m": "0x2bbe", + "a_m_sub_b_m": "0x2178", + "a_m_mul_b_m": "0x8188", + "a_eq_b": false, + "a_m_pow_b": "0x77d5" + }, + { + "a": "0x5", + "b": "0x157", + "m": "0x1e241", + "a_m_add_b_m": "0x15c", + "a_m_sub_b_m": "0x1e0ef", + "a_m_mul_b_m": "0x6b3", + "a_eq_b": false, + "a_m_pow_b": "0x19e4a" + }, + { + "a": "0x1ab7", + "b": "0xe8b3", + "m": "0x1e241", + "a_m_add_b_m": "0x1036a", + "a_m_sub_b_m": "0x11445", + "a_m_mul_b_m": "0x1da52", + "a_eq_b": false, + "a_m_pow_b": "0xa3ec" + }, + { + "a": "0x1b5d6", + "b": "0x1b5d6", + "m": "0x1e241", + "a_m_add_b_m": "0x1896b", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x9ce2", + "a_eq_b": true, + "a_m_pow_b": "0x14c3c" + }, + { + "a": "0x1582f", + "b": "0x4023", + "m": "0x1e241", + "a_m_add_b_m": "0x19852", + "a_m_sub_b_m": "0x1180c", + "a_m_mul_b_m": "0x6327", + "a_eq_b": false, + "a_m_pow_b": "0x16fb" + }, + { + "a": "0x135", + "b": "0x163a7", + "m": "0x1e241", + "a_m_add_b_m": "0x164dc", + "a_m_sub_b_m": "0x7fcf", + "a_m_mul_b_m": "0x1a8f0", + "a_eq_b": false, + "a_m_pow_b": "0x10211" + }, + { + "a": "0x46c", + "b": "0x43", + "m": "0x1e241", + "a_m_add_b_m": "0x4af", + "a_m_sub_b_m": "0x429", + "a_m_mul_b_m": "0x12844", + "a_eq_b": false, + "a_m_pow_b": "0x17a8" + }, + { + "a": "0x18542", + "b": "0x182", + "m": "0x1e241", + "a_m_add_b_m": "0x186c4", + "a_m_sub_b_m": "0x183c0", + "a_m_mul_b_m": "0x1108d", + "a_eq_b": false, + "a_m_pow_b": "0x17e3" + }, + { + "a": "0x9f38", + "b": "0x28", + "m": "0x1e241", + "a_m_add_b_m": "0x9f60", + "a_m_sub_b_m": "0x9f10", + "a_m_mul_b_m": "0x6373", + "a_eq_b": false, + "a_m_pow_b": "0x1b4c" + }, + { + "a": "0x7", + "b": "0x9", + "m": "0x1e241", + "a_m_add_b_m": "0x10", + "a_m_sub_b_m": "0x1e23f", + "a_m_mul_b_m": "0x3f", + "a_eq_b": false, + "a_m_pow_b": "0x1a081" + }, + { + "a": "0x2cd", + "b": "0x174", + "m": "0x1e241", + "a_m_add_b_m": "0x441", + "a_m_sub_b_m": "0x159", + "a_m_mul_b_m": "0x4d62", + "a_eq_b": false, + "a_m_pow_b": "0x1ce7b" + }, + { + "a": "0x12a16", + "b": "0x12a16", + "m": "0x1e241", + "a_m_add_b_m": "0x71eb", + "a_m_sub_b_m": "0x0", + "a_m_mul_b_m": "0x1d3e5", + "a_eq_b": true, + "a_m_pow_b": "0x2c4d" + }, + { + "a": "0x6b", + "b": "0x0", + "m": "0x1e241", + "a_m_add_b_m": "0x6b", + "a_m_sub_b_m": "0x6b", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x15", + "b": "0xe6", + "m": "0x1e241", + "a_m_add_b_m": "0xfb", + "a_m_sub_b_m": "0x1e170", + "a_m_mul_b_m": "0x12de", + "a_eq_b": false, + "a_m_pow_b": "0x4454" + }, + { + "a": "0x3e", + "b": "0x74d", + "m": "0x1e241", + "a_m_add_b_m": "0x78b", + "a_m_sub_b_m": "0x1db32", + "a_m_mul_b_m": "0x1c4a6", + "a_eq_b": false, + "a_m_pow_b": "0x23e3" + }, + { + "a": "0x1cf", + "b": "0x53", + "m": "0x1e241", + "a_m_add_b_m": "0x222", + "a_m_sub_b_m": "0x17c", + "a_m_mul_b_m": "0x961d", + "a_eq_b": false, + "a_m_pow_b": "0xf2cd" + }, + { + "a": "0x574a", + "b": "0x5b6b", + "m": "0x1e241", + "a_m_add_b_m": "0xb2b5", + "a_m_sub_b_m": "0x1de20", + "a_m_mul_b_m": "0x1e0a3", + "a_eq_b": false, + "a_m_pow_b": "0x1b722" + }, + { + "a": "0x7", + "b": "0x698", + "m": "0x1e241", + "a_m_add_b_m": "0x69f", + "a_m_sub_b_m": "0x1dbb0", + "a_m_mul_b_m": "0x2e28", + "a_eq_b": false, + "a_m_pow_b": "0x1abf5" + }, + { + "a": "0x28a7", + "b": "0xb7", + "m": "0x1e241", + "a_m_add_b_m": "0x295e", + "a_m_sub_b_m": "0x27f0", + "a_m_mul_b_m": "0xcd92", + "a_eq_b": false, + "a_m_pow_b": "0x8550" + }, + { + "a": "0x6e1", + "b": "0x0", + "m": "0x1e241", + "a_m_add_b_m": "0x6e1", + "a_m_sub_b_m": "0x6e1", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + }, + { + "a": "0x16b", + "b": "0x8c1f", + "m": "0x1e241", + "a_m_add_b_m": "0x8d8a", + "a_m_sub_b_m": "0x1578d", + "a_m_mul_b_m": "0xe34c", + "a_eq_b": false, + "a_m_pow_b": "0x4627" + }, + { + "a": "0x18be0", + "b": "0x204", + "m": "0x1e241", + "a_m_add_b_m": "0x18de4", + "a_m_sub_b_m": "0x189dc", + "a_m_mul_b_m": "0x11619", + "a_eq_b": false, + "a_m_pow_b": "0x1bf29" + }, + { + "a": "0x13f11", + "b": "0x0", + "m": "0x1e241", + "a_m_add_b_m": "0x13f11", + "a_m_sub_b_m": "0x13f11", + "a_m_mul_b_m": "0x0", + "a_eq_b": false, + "a_m_pow_b": "0x1" + } + ] +} \ No newline at end of file diff --git a/crypto3/libs/multiprecision/test/eigen.hpp b/crypto3/libs/multiprecision/test/eigen.hpp index ab51f29461..8078f94266 100644 --- a/crypto3/libs/multiprecision/test/eigen.hpp +++ b/crypto3/libs/multiprecision/test/eigen.hpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/git_issue_167.cpp b/crypto3/libs/multiprecision/test/git_issue_167.cpp index 4b51e12cad..f38d8101a4 100644 --- a/crypto3/libs/multiprecision/test/git_issue_167.cpp +++ b/crypto3/libs/multiprecision/test/git_issue_167.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include "test.hpp" int main() { diff --git a/crypto3/libs/multiprecision/test/git_issue_175.cpp b/crypto3/libs/multiprecision/test/git_issue_175.cpp index 87049b39d1..15461af66e 100644 --- a/crypto3/libs/multiprecision/test/git_issue_175.cpp +++ b/crypto3/libs/multiprecision/test/git_issue_175.cpp @@ -3,8 +3,8 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include -#include +#include +#include #include "test.hpp" using namespace boost::multiprecision; diff --git a/crypto3/libs/multiprecision/test/git_issue_248.cpp b/crypto3/libs/multiprecision/test/git_issue_248.cpp index e64c80fe3e..5237dde726 100644 --- a/crypto3/libs/multiprecision/test/git_issue_248.cpp +++ b/crypto3/libs/multiprecision/test/git_issue_248.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/git_issue_265.cpp b/crypto3/libs/multiprecision/test/git_issue_265.cpp index 3f9c71d40a..2a7e3daa3c 100644 --- a/crypto3/libs/multiprecision/test/git_issue_265.cpp +++ b/crypto3/libs/multiprecision/test/git_issue_265.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/git_issue_277.cpp b/crypto3/libs/multiprecision/test/git_issue_277.cpp index 23f9b55db8..a636a54a4d 100644 --- a/crypto3/libs/multiprecision/test/git_issue_277.cpp +++ b/crypto3/libs/multiprecision/test/git_issue_277.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include "test.hpp" template diff --git a/crypto3/libs/multiprecision/test/git_issue_30.cpp b/crypto3/libs/multiprecision/test/git_issue_30.cpp index 720e262c1f..8d01820ff3 100644 --- a/crypto3/libs/multiprecision/test/git_issue_30.cpp +++ b/crypto3/libs/multiprecision/test/git_issue_30.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include struct E { E(boost::multiprecision::cpp_rational const&) { diff --git a/crypto3/libs/multiprecision/test/git_issue_98.cpp b/crypto3/libs/multiprecision/test/git_issue_98.cpp index 58943409a2..58bdd04683 100644 --- a/crypto3/libs/multiprecision/test/git_issue_98.cpp +++ b/crypto3/libs/multiprecision/test/git_issue_98.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include struct A { virtual void g() = 0; diff --git a/crypto3/libs/multiprecision/test/inverse.cpp b/crypto3/libs/multiprecision/test/inverse.cpp index 8458a4e520..4062496ccd 100644 --- a/crypto3/libs/multiprecision/test/inverse.cpp +++ b/crypto3/libs/multiprecision/test/inverse.cpp @@ -18,15 +18,15 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include +#include -#include -#include -#include +#include +#include +#include #include -#include +#include -#include +#include using namespace boost::multiprecision; diff --git a/crypto3/libs/multiprecision/test/issue_13148.cpp b/crypto3/libs/multiprecision/test/issue_13148.cpp index 7301d248df..10ecdb0809 100644 --- a/crypto3/libs/multiprecision/test/issue_13148.cpp +++ b/crypto3/libs/multiprecision/test/issue_13148.cpp @@ -3,9 +3,9 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include -#include -#include +#include +#include +#include boost::multiprecision::cpp_rational rationalfromStr(const char* str) { boost::multiprecision::cpp_dec_float_50 d1(str); diff --git a/crypto3/libs/multiprecision/test/issue_13301.cpp b/crypto3/libs/multiprecision/test/issue_13301.cpp index ce47aa743e..613b1ecc8f 100644 --- a/crypto3/libs/multiprecision/test/issue_13301.cpp +++ b/crypto3/libs/multiprecision/test/issue_13301.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include int main() { typedef boost::multiprecision::number< diff --git a/crypto3/libs/multiprecision/test/jacobi.cpp b/crypto3/libs/multiprecision/test/jacobi.cpp index 36cd0b16fb..2959e4b476 100644 --- a/crypto3/libs/multiprecision/test/jacobi.cpp +++ b/crypto3/libs/multiprecision/test/jacobi.cpp @@ -14,10 +14,10 @@ #include #include -#include -#include +#include +#include -#include +#include template void test() { diff --git a/crypto3/libs/multiprecision/test/modular_adaptor_fixed.cpp b/crypto3/libs/multiprecision/test/modular_adaptor_fixed.cpp index a4870af401..5dac38b172 100644 --- a/crypto3/libs/multiprecision/test/modular_adaptor_fixed.cpp +++ b/crypto3/libs/multiprecision/test/modular_adaptor_fixed.cpp @@ -26,14 +26,14 @@ // We need cpp_int to compare to it. #include -#include -#include -#include +#include +#include +#include -#include -#include +#include +#include -#include +#include using namespace boost::multiprecision; diff --git a/crypto3/libs/multiprecision/test/ressol.cpp b/crypto3/libs/multiprecision/test/ressol.cpp index 3382e3df34..95a80723c8 100644 --- a/crypto3/libs/multiprecision/test/ressol.cpp +++ b/crypto3/libs/multiprecision/test/ressol.cpp @@ -18,11 +18,11 @@ #include #include -#include -#include +#include +#include -#include -#include +#include +#include using namespace boost::multiprecision; diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_backend_concept.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_backend_concept.cpp index 0ef7bc28d1..2b99607cd1 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_backend_concept.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_backend_concept.cpp @@ -7,7 +7,7 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp index fa8f95c897..7d4ba36d25 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp index 75558259f9..560abfec00 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp index 5b9575f1d1..fa342dbbc2 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp index f58133e49f..7537ebcbf1 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp index 92e6123643..e6d4e4c270 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp index 93689edf0d..49753f1358 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp index a4f2f60819..9545e10516 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp index de35f18bea..3a430822df 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp index 69619104bf..735aeae151 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp index 719d1b9840..4c712fce7b 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_19.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_19.cpp index 9f7f5806f5..d39de086e9 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_19.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_19.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp index 06b180f01f..d0bc397d8e 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_20.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_20.cpp index 1e9f93bacd..a4762dda7a 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_20.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_20.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp index a0f21bf056..897f451faa 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp index 67cadaa8e0..55f635cdc6 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp @@ -5,7 +5,7 @@ #define TEST_CHECKED_INT -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp index f22b037939..bfd1ad828c 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp index 4d6056fb8f..f99bf931a9 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp index 978eaa704e..c45fe3a1e0 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp index c067de4426..a909c11ff5 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp index e2cd75283c..0ff7696959 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp index d47f32a501..4a54b76f83 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp @@ -5,7 +5,7 @@ #define BOOST_MP_NOT_TESTING_NUMBER -#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp index 0d85180d02..c0aca60c99 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp @@ -9,8 +9,8 @@ #define NO_MIXED_OPS -#include -#include +#include +#include #include "test_arithmetic.hpp" int main() { diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1m.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1m.cpp index 5a8298f183..7d9430aef2 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1m.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr1m.cpp @@ -9,8 +9,8 @@ #define MIXED_OPS_ONLY -#include -#include +#include +#include #include "test_arithmetic.hpp" int main() { diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp index ca4910dbc9..36d19b8c52 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp @@ -7,8 +7,8 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include -#include +#include +#include #include "test_arithmetic.hpp" int main() { diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_logged_1.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_logged_1.cpp index 3bb0c901ae..663a9b9e24 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_logged_1.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_logged_1.cpp @@ -7,8 +7,8 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include -#include +#include +#include #include "test_arithmetic.hpp" int main() { diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_logged_2.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_logged_2.cpp index d2b3420fef..11a059c9c3 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_logged_2.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_logged_2.cpp @@ -7,8 +7,8 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include -#include +#include +#include #include "test_arithmetic.hpp" int main() { diff --git a/crypto3/libs/multiprecision/test/test_arithmetic_mpz_rat.cpp b/crypto3/libs/multiprecision/test/test_arithmetic_mpz_rat.cpp index 204edac513..1711549efd 100644 --- a/crypto3/libs/multiprecision/test/test_arithmetic_mpz_rat.cpp +++ b/crypto3/libs/multiprecision/test/test_arithmetic_mpz_rat.cpp @@ -7,8 +7,8 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include -#include +#include +#include #include "test_arithmetic.hpp" diff --git a/crypto3/libs/multiprecision/test/test_checked_mixed_cpp_int.cpp b/crypto3/libs/multiprecision/test/test_checked_mixed_cpp_int.cpp index c7b5e23fef..62ae2dfab1 100644 --- a/crypto3/libs/multiprecision/test/test_checked_mixed_cpp_int.cpp +++ b/crypto3/libs/multiprecision/test/test_checked_mixed_cpp_int.cpp @@ -7,7 +7,7 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include +#include #include "test.hpp" template diff --git a/crypto3/libs/multiprecision/test/test_constants.cpp b/crypto3/libs/multiprecision/test/test_constants.cpp index 5b539937e5..1fb45cefca 100644 --- a/crypto3/libs/multiprecision/test/test_constants.cpp +++ b/crypto3/libs/multiprecision/test/test_constants.cpp @@ -24,13 +24,13 @@ #endif #if defined(TEST_MPF_50) -#include +#include #endif #if defined(TEST_MPFR_50) -#include +#include #endif #ifdef TEST_CPP_DEC_FLOAT -#include +#include #endif #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/test_constexpr.cpp b/crypto3/libs/multiprecision/test/test_constexpr.cpp index b75f52be2f..06576922c5 100644 --- a/crypto3/libs/multiprecision/test/test_constexpr.cpp +++ b/crypto3/libs/multiprecision/test/test_constexpr.cpp @@ -3,9 +3,9 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #if defined(HAVE_FLOAT128) -#include +#include #endif #ifndef BOOST_NO_CXX11_CONSTEXPR diff --git a/crypto3/libs/multiprecision/test/test_convert_from_cpp_int.cpp b/crypto3/libs/multiprecision/test/test_convert_from_cpp_int.cpp index db82e7fd00..0f374e568c 100644 --- a/crypto3/libs/multiprecision/test/test_convert_from_cpp_int.cpp +++ b/crypto3/libs/multiprecision/test/test_convert_from_cpp_int.cpp @@ -7,7 +7,7 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include +#include #include #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/test_cpp_int_conv.cpp b/crypto3/libs/multiprecision/test/test_cpp_int_conv.cpp index 19859e1e23..9323612f1a 100644 --- a/crypto3/libs/multiprecision/test/test_cpp_int_conv.cpp +++ b/crypto3/libs/multiprecision/test/test_cpp_int_conv.cpp @@ -12,7 +12,7 @@ #include #include "test.hpp" -#include +#include int main() { using namespace boost::multiprecision; diff --git a/crypto3/libs/multiprecision/test/test_cpp_int_import_export.cpp b/crypto3/libs/multiprecision/test/test_cpp_int_import_export.cpp index 5d76c932dc..c3ce6c445a 100644 --- a/crypto3/libs/multiprecision/test/test_cpp_int_import_export.cpp +++ b/crypto3/libs/multiprecision/test/test_cpp_int_import_export.cpp @@ -9,7 +9,7 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include +#include #include #include diff --git a/crypto3/libs/multiprecision/test/test_cpp_int_left_shift.cpp b/crypto3/libs/multiprecision/test/test_cpp_int_left_shift.cpp index d14c6c0208..38542f8afb 100644 --- a/crypto3/libs/multiprecision/test/test_cpp_int_left_shift.cpp +++ b/crypto3/libs/multiprecision/test/test_cpp_int_left_shift.cpp @@ -12,8 +12,8 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include -#include +#include +#include #include #include #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/test_cpp_int_lit.cpp b/crypto3/libs/multiprecision/test/test_cpp_int_lit.cpp index aa30909e64..d35cbe322f 100644 --- a/crypto3/libs/multiprecision/test/test_cpp_int_lit.cpp +++ b/crypto3/libs/multiprecision/test/test_cpp_int_lit.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include "test.hpp" #if !(BOOST_WORKAROUND(BOOST_MSVC, <= 1900) && defined(CI_SUPPRESS_KNOWN_ISSUES)) && \ diff --git a/crypto3/libs/multiprecision/test/test_eigen_interop.cpp b/crypto3/libs/multiprecision/test/test_eigen_interop.cpp index 4c8018a8f3..3c450efc67 100644 --- a/crypto3/libs/multiprecision/test/test_eigen_interop.cpp +++ b/crypto3/libs/multiprecision/test/test_eigen_interop.cpp @@ -2,16 +2,16 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt -#include -#include -#include +#include +#include +#include #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/test_eigen_interop_cpp_int.cpp b/crypto3/libs/multiprecision/test/test_eigen_interop_cpp_int.cpp index 8eb285fe4e..8d0977fb2e 100644 --- a/crypto3/libs/multiprecision/test/test_eigen_interop_cpp_int.cpp +++ b/crypto3/libs/multiprecision/test/test_eigen_interop_cpp_int.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include "eigen.hpp" diff --git a/crypto3/libs/multiprecision/test/test_exp.cpp b/crypto3/libs/multiprecision/test/test_exp.cpp index 2c37daef48..7de84fe588 100644 --- a/crypto3/libs/multiprecision/test/test_exp.cpp +++ b/crypto3/libs/multiprecision/test/test_exp.cpp @@ -38,25 +38,25 @@ #endif #if defined(TEST_MPF_50) -#include +#include #endif #if defined(TEST_MPFR_50) -#include +#include #endif #if defined(TEST_MPFI_50) -#include +#include #endif #ifdef TEST_BACKEND -#include +#include #endif #ifdef TEST_CPP_DEC_FLOAT -#include +#include #endif #ifdef TEST_FLOAT128 -#include +#include #endif #ifdef TEST_CPP_BIN_FLOAT -#include +#include #endif template diff --git a/crypto3/libs/multiprecision/test/test_fpclassify.cpp b/crypto3/libs/multiprecision/test/test_fpclassify.cpp index 7b42fb37f1..01d3af1ef4 100644 --- a/crypto3/libs/multiprecision/test/test_fpclassify.cpp +++ b/crypto3/libs/multiprecision/test/test_fpclassify.cpp @@ -35,25 +35,25 @@ #endif #if defined(TEST_MPF_50) -#include +#include #endif #ifdef TEST_MPFR_50 -#include +#include #endif #ifdef TEST_MPFI_50 -#include +#include #endif #ifdef TEST_BACKEND -#include +#include #endif #ifdef TEST_CPP_DEC_FLOAT -#include +#include #endif #ifdef TEST_FLOAT128 -#include +#include #endif #ifdef TEST_CPP_BIN_FLOAT -#include +#include #endif #ifdef _MSC_VER diff --git a/crypto3/libs/multiprecision/test/test_gcd.cpp b/crypto3/libs/multiprecision/test/test_gcd.cpp index 19e6d28c82..a21e352164 100644 --- a/crypto3/libs/multiprecision/test/test_gcd.cpp +++ b/crypto3/libs/multiprecision/test/test_gcd.cpp @@ -10,7 +10,7 @@ #define BOOST_MP_GCD_DEBUG #include "test.hpp" -#include +#include #include #include #include diff --git a/crypto3/libs/multiprecision/test/test_hash.cpp b/crypto3/libs/multiprecision/test/test_hash.cpp index 6fb3c3a15e..5e597d94ca 100644 --- a/crypto3/libs/multiprecision/test/test_hash.cpp +++ b/crypto3/libs/multiprecision/test/test_hash.cpp @@ -9,7 +9,7 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include +#include #include diff --git a/crypto3/libs/multiprecision/test/test_int_io.cpp b/crypto3/libs/multiprecision/test/test_int_io.cpp index 6a08a8edc2..c096373e38 100644 --- a/crypto3/libs/multiprecision/test/test_int_io.cpp +++ b/crypto3/libs/multiprecision/test/test_int_io.cpp @@ -24,13 +24,13 @@ #endif #if defined(TEST_MPZ) -#include +#include #endif #if defined(TEST_TOMMATH) -#include +#include #endif #ifdef TEST_CPP_INT -#include +#include #endif #include diff --git a/crypto3/libs/multiprecision/test/test_log.cpp b/crypto3/libs/multiprecision/test/test_log.cpp index c7da4b1317..0a0e54bff4 100644 --- a/crypto3/libs/multiprecision/test/test_log.cpp +++ b/crypto3/libs/multiprecision/test/test_log.cpp @@ -37,25 +37,25 @@ #endif #if defined(TEST_MPF_50) -#include +#include #endif #ifdef TEST_MPFR_50 -#include +#include #endif #ifdef TEST_MPFI_50 -#include +#include #endif #ifdef TEST_BACKEND -#include +#include #endif #ifdef TEST_CPP_DEC_FLOAT -#include +#include #endif #ifdef TEST_FLOAT128 -#include +#include #endif #ifdef TEST_CPP_BIN_FLOAT -#include +#include #endif template diff --git a/crypto3/libs/multiprecision/test/test_move.cpp b/crypto3/libs/multiprecision/test/test_move.cpp index 248af2ee81..a68df2bec5 100644 --- a/crypto3/libs/multiprecision/test/test_move.cpp +++ b/crypto3/libs/multiprecision/test/test_move.cpp @@ -14,7 +14,7 @@ #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES -#include +#include #include "test.hpp" diff --git a/crypto3/libs/multiprecision/test/test_mpf_precisions.cpp b/crypto3/libs/multiprecision/test/test_mpf_precisions.cpp index 5573397c4a..d693438af6 100644 --- a/crypto3/libs/multiprecision/test/test_mpf_precisions.cpp +++ b/crypto3/libs/multiprecision/test/test_mpf_precisions.cpp @@ -15,7 +15,7 @@ #include #include "test.hpp" -#include +#include template T make_rvalue_copy(const T a) { diff --git a/crypto3/libs/multiprecision/test/test_nothrow_cpp_int.cpp b/crypto3/libs/multiprecision/test/test_nothrow_cpp_int.cpp index e72a75474e..6752bc9d9b 100644 --- a/crypto3/libs/multiprecision/test/test_nothrow_cpp_int.cpp +++ b/crypto3/libs/multiprecision/test/test_nothrow_cpp_int.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include #include diff --git a/crypto3/libs/multiprecision/test/test_nothrow_cpp_rational.cpp b/crypto3/libs/multiprecision/test/test_nothrow_cpp_rational.cpp index c23b31b0f9..02ab0b0d74 100644 --- a/crypto3/libs/multiprecision/test/test_nothrow_cpp_rational.cpp +++ b/crypto3/libs/multiprecision/test/test_nothrow_cpp_rational.cpp @@ -3,7 +3,7 @@ // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include +#include #include #include #include diff --git a/crypto3/libs/multiprecision/test/test_numeric_limits.cpp b/crypto3/libs/multiprecision/test/test_numeric_limits.cpp index 06df205aed..57fa65fefe 100644 --- a/crypto3/libs/multiprecision/test/test_numeric_limits.cpp +++ b/crypto3/libs/multiprecision/test/test_numeric_limits.cpp @@ -9,7 +9,7 @@ #include "test.hpp" -#include +#include template void test_specific(const std::integral_constant&) { diff --git a/crypto3/libs/multiprecision/test/test_optional_compat.cpp b/crypto3/libs/multiprecision/test/test_optional_compat.cpp index 9c2d4d0ed8..dd2339b293 100644 --- a/crypto3/libs/multiprecision/test/test_optional_compat.cpp +++ b/crypto3/libs/multiprecision/test/test_optional_compat.cpp @@ -12,7 +12,7 @@ * https://github.com/boostorg/integer/pull/11 */ -#include +#include #include #include diff --git a/crypto3/libs/multiprecision/test/test_pow.cpp b/crypto3/libs/multiprecision/test/test_pow.cpp index c2828d1412..050e424b9d 100644 --- a/crypto3/libs/multiprecision/test/test_pow.cpp +++ b/crypto3/libs/multiprecision/test/test_pow.cpp @@ -37,25 +37,25 @@ #endif #if defined(TEST_MPF_50) -#include +#include #endif #if defined(TEST_MPFR_50) -#include +#include #endif #if defined(TEST_MPFI_50) -#include +#include #endif #ifdef TEST_BACKEND -#include +#include #endif #ifdef TEST_CPP_DEC_FLOAT -#include +#include #endif #ifdef TEST_FLOAT128 -#include +#include #endif #ifdef TEST_CPP_BIN_FLOAT -#include +#include #endif template diff --git a/crypto3/libs/multiprecision/test/test_sf_import_c99.cpp b/crypto3/libs/multiprecision/test/test_sf_import_c99.cpp index 67519f4cbd..2f42dcae1c 100644 --- a/crypto3/libs/multiprecision/test/test_sf_import_c99.cpp +++ b/crypto3/libs/multiprecision/test/test_sf_import_c99.cpp @@ -36,24 +36,24 @@ #endif #if defined(TEST_MPF_50) -#include +#include #endif #ifdef TEST_MPFR_50 -#include +#include #endif #ifdef TEST_MPFI_50 -#include +#include #endif #if defined(TEST_CPP_DEC_FLOAT) || defined(TEST_CPP_DEC_FLOAT_2) || defined(TEST_CPP_DEC_FLOAT_3) || \ defined(TEST_CPP_DEC_FLOAT_4) || defined(TEST_CPP_DEC_FLOAT_5) || defined(TEST_CPP_DEC_FLOAT_6) -#include +#include #endif #if defined(TEST_CPP_BIN_FLOAT) || defined(TEST_CPP_BIN_FLOAT_2) || defined(TEST_CPP_BIN_FLOAT_3) -#include -#include +#include +#include #endif #ifdef TEST_FLOAT128 -#include +#include #endif #include diff --git a/crypto3/libs/multiprecision/test/test_sqrt.cpp b/crypto3/libs/multiprecision/test/test_sqrt.cpp index dfdb6ea46f..9eed092a3c 100644 --- a/crypto3/libs/multiprecision/test/test_sqrt.cpp +++ b/crypto3/libs/multiprecision/test/test_sqrt.cpp @@ -37,25 +37,25 @@ #endif #if defined(TEST_MPF_50) -#include +#include #endif #if defined(TEST_MPFR_50) -#include +#include #endif #if defined(TEST_MPFI_50) -#include +#include #endif #ifdef TEST_BACKEND -#include +#include #endif #ifdef TEST_CPP_DEC_FLOAT -#include +#include #endif #ifdef TEST_FLOAT128 -#include +#include #endif #ifdef TEST_CPP_BIN_FLOAT -#include +#include #endif template diff --git a/crypto3/libs/multiprecision/test/test_unchecked_cpp_int.cpp b/crypto3/libs/multiprecision/test/test_unchecked_cpp_int.cpp index 960f8fb0fc..429ae957ef 100644 --- a/crypto3/libs/multiprecision/test/test_unchecked_cpp_int.cpp +++ b/crypto3/libs/multiprecision/test/test_unchecked_cpp_int.cpp @@ -11,7 +11,7 @@ #define _SCL_SECURE_NO_WARNINGS #endif -#include +#include #include "test.hpp" #include #include diff --git a/crypto3/libs/random/CMakeLists.txt b/crypto3/libs/random/CMakeLists.txt index 4682263e79..ae32cc8b9b 100644 --- a/crypto3/libs/random/CMakeLists.txt +++ b/crypto3/libs/random/CMakeLists.txt @@ -6,8 +6,6 @@ # http://www.boost.org/LICENSE_1_0.txt #---------------------------------------------------------------------------# -cmake_minimum_required(VERSION 3.5) - set(BOOST_CMAKE FALSE) include(CMConfig) diff --git a/crypto3/libs/random/example/CMakeLists.txt b/crypto3/libs/random/example/CMakeLists.txt index 1780bcd219..3abc5572c9 100644 --- a/crypto3/libs/random/example/CMakeLists.txt +++ b/crypto3/libs/random/example/CMakeLists.txt @@ -22,7 +22,7 @@ macro(define_random_example name) ${CMAKE_WORKSPACE_NAME}::multiprecision Boost::container) - set_target_properties(random_${name}_example PROPERTIES CXX_STANDARD 17) + set_target_properties(random_${name}_example PROPERTIES CXX_STANDARD 20) endmacro() set(EXAMPLES_NAMES diff --git a/crypto3/libs/random/include/nil/crypto3/random/hash.hpp b/crypto3/libs/random/include/nil/crypto3/random/hash.hpp index 1dba380483..a4a386e229 100644 --- a/crypto3/libs/random/include/nil/crypto3/random/hash.hpp +++ b/crypto3/libs/random/include/nil/crypto3/random/hash.hpp @@ -30,8 +30,6 @@ #include #include -#include - #include #include diff --git a/crypto3/libs/random/test/CMakeLists.txt b/crypto3/libs/random/test/CMakeLists.txt index 0d3fdd0a9e..484d40f82a 100644 --- a/crypto3/libs/random/test/CMakeLists.txt +++ b/crypto3/libs/random/test/CMakeLists.txt @@ -12,6 +12,8 @@ include(CMTest) cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} ${CMAKE_WORKSPACE_NAME}::multiprecision Boost::unit_test_framework) +set_target_properties(_cm_internal_tests-crypto3-random-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-crypto3-random-test REUSE_FROM crypto3_precompiled_headers) macro(define_random_test test) get_filename_component(name ${test} NAME) @@ -25,14 +27,14 @@ macro(define_random_test test) ${Boost_INCLUDE_DIRS}) - set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 20) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(${full_test_name} PRIVATE "-fconstexpr-steps=2147483647") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(${full_test_name} PRIVATE "-fconstexpr-ops-limit=4294967295") endif() - + target_precompile_headers(${full_test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() # TODO(uncomment the failing tests once they pass) diff --git a/crypto3/libs/transpiler/CMakeLists.txt b/crypto3/libs/transpiler/CMakeLists.txt index 4bdfb457b8..9170ea5c14 100644 --- a/crypto3/libs/transpiler/CMakeLists.txt +++ b/crypto3/libs/transpiler/CMakeLists.txt @@ -6,8 +6,6 @@ # http://www.boost.org/LICENSE_1_0.txt #---------------------------------------------------------------------------# -cmake_minimum_required(VERSION 3.22 FATAL_ERROR) - find_package(CM REQUIRED) include(CMConfig) include(CMSetupVersion) @@ -27,7 +25,7 @@ target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTER $) target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - ${Boost_LIBRARIES}) + Boost::container) include(CMTest) add_tests(test) diff --git a/crypto3/libs/transpiler/include/nil/blueprint/transpiler/lpc_evm_verifier_gen.hpp b/crypto3/libs/transpiler/include/nil/blueprint/transpiler/lpc_evm_verifier_gen.hpp index 3e20e550bf..4d3ac3c0c1 100644 --- a/crypto3/libs/transpiler/include/nil/blueprint/transpiler/lpc_evm_verifier_gen.hpp +++ b/crypto3/libs/transpiler/include/nil/blueprint/transpiler/lpc_evm_verifier_gen.hpp @@ -724,7 +724,7 @@ namespace nil { auto fixed_poly_values = _common_data.commitment_scheme_data; using eta_hash = crypto3::hashes::keccak_1600<256>; using field_element_type = nil::crypto3::marshalling::types::field_element< - nil::marshalling::field_type, + nil::crypto3::marshalling::field_type, typename PlaceholderParams::field_type::value_type>; if (fixed_poly_values.size() == 0) diff --git a/crypto3/libs/transpiler/include/nil/blueprint/transpiler/recursive_verifier_generator.hpp b/crypto3/libs/transpiler/include/nil/blueprint/transpiler/recursive_verifier_generator.hpp index 4eb258c823..9ed30d21aa 100644 --- a/crypto3/libs/transpiler/include/nil/blueprint/transpiler/recursive_verifier_generator.hpp +++ b/crypto3/libs/transpiler/include/nil/blueprint/transpiler/recursive_verifier_generator.hpp @@ -453,7 +453,7 @@ namespace nil { std::string result; std::vector v; if( term.get_coeff() != field_type::value_type::one() || term.get_vars().size() == 0) - v.push_back("pallas::base_field_type::value_type(0x" + to_hex_string(term.get_coeff()) + "_cppui_modular255)"); + v.push_back("pallas::base_field_type::value_type(0x" + to_hex_string(term.get_coeff()) + "_big_uint255)"); for(auto& var: term.get_vars()){ v.push_back("z[" + to_string(_indices.at(var)) + "]"); } @@ -663,7 +663,7 @@ namespace nil { prepare_U_V_str << "\n"; } for( std::size_t j = 0; j < placeholder_info.batches_sizes[0]; j++){ - prepare_U_V_str << "\tU[unique_points] += theta_acc * pallas::base_field_type::value_type(0x"<< std::hex << common_data.commitment_scheme_data.at(0)[j] << std::dec << "_cppui_modular255); theta_acc *= challenges.lpc_theta;\n"; + prepare_U_V_str << "\tU[unique_points] += theta_acc * pallas::base_field_type::value_type(0x"<< std::hex << common_data.commitment_scheme_data.at(0)[j] << std::dec << "_big_uint255); theta_acc *= challenges.lpc_theta;\n"; } std::stringstream lpc_y_computation; @@ -717,7 +717,7 @@ namespace nil { } start_position += batches_sizes[i]; if( i == 0 ) - initial_proof_check_str += "\t\t__builtin_assigner_exit_check(hash_state == pallas::base_field_type::value_type(0x$VK1$_cppui_modular255));\n\n"; + initial_proof_check_str += "\t\t__builtin_assigner_exit_check(hash_state == pallas::base_field_type::value_type(0x$VK1$_big_uint255));\n\n"; else initial_proof_check_str += "\t\t__builtin_assigner_exit_check(hash_state == proof.commitments[" + to_string(i-1) + "]);\n\n"; } @@ -1031,8 +1031,8 @@ namespace nil { reps["$QUOTIENT_POLYS_AMOUNT$"] = to_string(quotient_polys); reps["$D0_SIZE$"] = to_string(fri_params.D[0]->m); reps["$D0_LOG$"] = to_string(log2(fri_params.D[0]->m)); - reps["$D0_OMEGA$"] = "pallas::base_field_type::value_type(0x" + to_hex_string(fri_params.D[0]->get_domain_element(1)) + "_cppui_modular255)"; - reps["$OMEGA$"] = "pallas::base_field_type::value_type(0x" + to_hex_string(common_data.basic_domain->get_domain_element(1)) + "_cppui_modular255)"; + reps["$D0_OMEGA$"] = "pallas::base_field_type::value_type(0x" + to_hex_string(fri_params.D[0]->get_domain_element(1)) + "_big_uint255)"; + reps["$OMEGA$"] = "pallas::base_field_type::value_type(0x" + to_hex_string(common_data.basic_domain->get_domain_element(1)) + "_big_uint255)"; reps["$FRI_ROUNDS$"] = to_string(fri_params.r); reps["$UNIQUE_POINTS$"] = to_string(singles_strs.size()); reps["$SINGLES_AMOUNT$"] = to_string(singles_strs.size()); diff --git a/crypto3/libs/transpiler/include/nil/blueprint/transpiler/templates/recursive_verifier.hpp b/crypto3/libs/transpiler/include/nil/blueprint/transpiler/templates/recursive_verifier.hpp index 4611ea046b..9953f432df 100644 --- a/crypto3/libs/transpiler/include/nil/blueprint/transpiler/templates/recursive_verifier.hpp +++ b/crypto3/libs/transpiler/include/nil/blueprint/transpiler/templates/recursive_verifier.hpp @@ -210,8 +210,8 @@ const std::array gates_sizes = {$GATES_SIZES$}; const size_t unique_points = $UNIQUE_POINTS$; const size_t singles_amount = $SINGLES_AMOUNT$; const std::array batches_amount_list = {$BATCHES_AMOUNT_LIST$}; -pallas::base_field_type::value_type vk0 = pallas::base_field_type::value_type(0x$VK0$_cppui_modular255); -pallas::base_field_type::value_type vk1 = pallas::base_field_type::value_type(0x$VK1$_cppui_modular255); +pallas::base_field_type::value_type vk0 = pallas::base_field_type::value_type(0x$VK0$_big_uint255); +pallas::base_field_type::value_type vk1 = pallas::base_field_type::value_type(0x$VK1$_big_uint255); $LOOKUP_VARS$ diff --git a/crypto3/libs/transpiler/test/CMakeLists.txt b/crypto3/libs/transpiler/test/CMakeLists.txt index 3bcab249de..6550755099 100644 --- a/crypto3/libs/transpiler/test/CMakeLists.txt +++ b/crypto3/libs/transpiler/test/CMakeLists.txt @@ -16,37 +16,44 @@ cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} crypto3::math crypto3::random crypto3::zk - ${Boost_LIBRARIES}) + Boost::unit_test_framework +) +set_target_properties(_cm_internal_tests-crypto3-transpiler-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-crypto3-transpiler-test REUSE_FROM crypto3_precompiled_headers) add_custom_target(compile_and_run_transpiler_tests) macro(define_transpiler_test name) - cm_test(NAME transpiler_${name}_test SOURCES ${name}.cpp) + set(full_test_name transpiler_${name}_test) + cm_test(NAME ${full_test_name} SOURCES ${name}.cpp) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(transpiler_${name}_test PRIVATE "-fconstexpr-steps=2147483647") - endif() + target_compile_options(${full_test_name} PRIVATE "-fconstexpr-steps=2147483647") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(${full_test_name} PRIVATE "-fconstexpr-ops-limit=4294967295") + endif () - target_include_directories(transpiler_${name}_test PRIVATE + target_include_directories(${full_test_name} PRIVATE "$" "$" ${Boost_INCLUDE_DIRS}) - set_target_properties(transpiler_${name}_test PROPERTIES CXX_STANDARD 17) + set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 20) get_target_property(target_type Boost::unit_test_framework TYPE) if(target_type STREQUAL "SHARED_LIB") - target_compile_definitions(transpiler_${name}_test PRIVATE BOOST_TEST_DYN_LINK) + target_compile_definitions(${full_test_name} PRIVATE BOOST_TEST_DYN_LINK) elseif(target_type STREQUAL "STATIC_LIB") endif() - add_custom_target(transpiler_${name}_test_run - COMMAND $ - DEPENDS transpiler_${name}_test $ + add_custom_target(${full_test_name}_run + COMMAND $ + DEPENDS ${full_test_name} $ ) - add_dependencies(compile_and_run_transpiler_tests transpiler_${name}_test_run) + add_dependencies(compile_and_run_transpiler_tests ${full_test_name}_run) + target_precompile_headers(${full_test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(TESTS_NAMES diff --git a/crypto3/libs/transpiler/test/detail/circuits.hpp b/crypto3/libs/transpiler/test/detail/circuits.hpp index fa64712993..8f0c4a6424 100644 --- a/crypto3/libs/transpiler/test/detail/circuits.hpp +++ b/crypto3/libs/transpiler/test/detail/circuits.hpp @@ -178,8 +178,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -317,8 +317,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -415,8 +415,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -521,8 +521,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); @@ -617,8 +617,8 @@ namespace nil { selectors_assignment[0][1] = 1; test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -720,8 +720,8 @@ namespace nil { test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -826,8 +826,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + selector_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -977,8 +977,8 @@ namespace nil { std::vector> public_input_assignment(public_columns); test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); diff --git a/crypto3/libs/transpiler/test/evm.cpp b/crypto3/libs/transpiler/test/evm.cpp index dee43163b0..e364a81753 100644 --- a/crypto3/libs/transpiler/test/evm.cpp +++ b/crypto3/libs/transpiler/test/evm.cpp @@ -244,7 +244,7 @@ namespace { using namespace nil::crypto3::marshalling; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = marshalling::field_type; using proof_marshalling_type = nil::crypto3::marshalling::types::placeholder_proof; auto filled_placeholder_proof = types::fill_placeholder_proof(proof, params); @@ -255,7 +255,7 @@ namespace { cv.resize(filled_placeholder_proof.length(), 0x00); auto write_iter = cv.begin(); auto status = filled_placeholder_proof.write(write_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == marshalling::status_type::success); if (!output_file.empty()) { print_placeholder_proof(cv.cbegin(), cv.cend(), false, output_file.c_str()); @@ -264,7 +264,7 @@ namespace { proof_marshalling_type test_val_read; auto read_iter = cv.begin(); status = test_val_read.read(read_iter, cv.size()); - BOOST_CHECK(status == nil::marshalling::status_type::success); + BOOST_CHECK(status == marshalling::status_type::success); auto constructed_val_read = types::make_placeholder_proof(test_val_read); BOOST_CHECK(proof == constructed_val_read); } @@ -328,7 +328,7 @@ namespace { } // namespace BOOST_AUTO_TEST_SUITE(placeholder_circuit1) - using Endianness = nil::marshalling::option::big_endian; + using Endianness = marshalling::option::big_endian; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -444,7 +444,7 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_tools::random_test_initializer; using field_type = typename curve_type::scalar_field_type; @@ -560,8 +560,8 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_tools::random_test_initializer; + using Endianness = marshalling::option::big_endian; + using TTypeBase = marshalling::field_type; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -680,7 +680,7 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_tools::random_test_initializer; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -325,8 +325,8 @@ BOOST_FIXTURE_TEST_CASE(aggregated_proof_sanity_test, test_initializer) { BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(recursive_circuit2) - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -435,8 +435,8 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_initializer) { BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(recursive_circuit3) - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -852,8 +852,8 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_initializer) { BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(recursive_circuit6) - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -957,8 +957,8 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_initializer) { BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(recursive_circuit7) - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -1064,8 +1064,8 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_initializer) { BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(recursive_circuit7_chunk10) - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; + using Endianness = nil::crypto3::marshalling::option::big_endian; + using TTypeBase = nil::crypto3::marshalling::field_type; using curve_type = algebra::curves::pallas; using field_type = typename curve_type::base_field_type; @@ -1169,4 +1169,4 @@ BOOST_FIXTURE_TEST_CASE(transpiler_test, test_initializer) { output_file.close(); } } -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp index 00d4590430..74353eabe9 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp @@ -76,9 +76,9 @@ namespace nil { typedef typename containers::merkle_tree merkle_tree_type; typedef typename containers::merkle_proof merkle_proof_type; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = marshalling::option::big_endian; using field_element_type = - nil::crypto3::marshalling::types::field_element, + nil::crypto3::marshalling::types::field_element, typename FieldType::value_type>; using precommitment_type = merkle_tree_type; diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp index 33ec6827f8..d8f1a4e0f2 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp @@ -74,9 +74,9 @@ namespace nil { typedef typename containers::merkle_tree merkle_tree_type; typedef typename containers::merkle_proof merkle_proof_type; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; using field_element_type = - nil::crypto3::marshalling::types::field_element, + nil::crypto3::marshalling::types::field_element, typename FieldType::value_type>; using precommitment_type = merkle_tree_type; diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp index ce630c8690..5d7ecb9a44 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp @@ -97,9 +97,9 @@ namespace nil { // For initial proof only, size of all values are similar typedef std::vector polynomials_values_type; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = marshalling::option::big_endian; using field_element_type = nil::crypto3::marshalling::types::field_element< - nil::marshalling::field_type, + marshalling::field_type, typename FieldType::value_type >; diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp index 19dc1db793..ca032bd620 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp @@ -28,7 +28,7 @@ #include -#include +#include namespace nil { namespace crypto3 { @@ -187,20 +187,18 @@ namespace nil { template - element_kc operator*(const boost::multiprecision::number &lhs, + std::size_t Bits> + element_kc operator*(const nil::crypto3::multiprecision::big_uint &lhs, const element_kc &rhs) { return element_kc(lhs * rhs.g, lhs * rhs.h); } template + std::size_t Bits> element_kc operator*(const element_kc &lhs, - const boost::multiprecision::number &rhs) { + const nil::crypto3::multiprecision::big_uint &rhs) { return element_kc(rhs * lhs.g, rhs * lhs.h); } diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/accumulator.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/accumulator.hpp deleted file mode 100644 index f4cd10ee4f..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/accumulator.hpp +++ /dev/null @@ -1,164 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_ACCUMULATOR_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_ACCUMULATOR_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - struct powers_of_tau_accumulator { - typedef CurveType curve_type; - using g1_type = typename CurveType::template g1_type<>; - using g2_type = typename CurveType::template g2_type<>; - using g1_value_type = typename g1_type::value_type; - using g2_value_type = typename g2_type::value_type; - using field_value_type = typename curve_type::scalar_field_type::value_type; - using private_key_type = powers_of_tau_private_key; - - // The maximum number of multiplication gates supported - static constexpr unsigned tau_powers_length = TauPowersLength; - - // More tau powers are needed in G1 because the Groth16 H query - // includes terms of the form tau^i * (tau^m - 1) = tau^(i+m) - tau^i - // where the largest i = m - 2, requiring the computation of tau^(2m - 2) - // and thus giving us a vector length of 2m - 1. - static constexpr unsigned tau_powers_g1_length = (tau_powers_length << 1) - 1; - - // tau^0, tau^1, tau^2, ..., tau^{tau_powers_g1_length - 1} - std::vector tau_powers_g1; - // tau^0, tau^1, tau^2, ..., tau^{tau_powers_length - 1} - std::vector tau_powers_g2; - // alpha * tau^0, alpha * tau^1, alpha * tau^2, ..., alpha * tau^{tau_powers_length - 1} - std::vector alpha_tau_powers_g1; - // beta * tau^0, beta * tau^1, beta * tau^2, ..., beta * tau^{tau_powers_length - 1} - std::vector beta_tau_powers_g1; - // beta - g2_value_type beta_g2; - - powers_of_tau_accumulator() : - tau_powers_g1(tau_powers_g1_length, g1_value_type::one()), - tau_powers_g2(tau_powers_length, g2_value_type::one()), - alpha_tau_powers_g1(tau_powers_length, g1_value_type::one()), - beta_tau_powers_g1(tau_powers_length, g1_value_type::one()), - beta_g2(g2_value_type::one()) { - } - - powers_of_tau_accumulator(const std::vector &tau_powers_g1, - const std::vector &tau_powers_g2, - const std::vector &alpha_tau_powers_g1, - const std::vector &beta_tau_powers_g1, - g2_value_type beta_g2) : - tau_powers_g1(tau_powers_g1), - tau_powers_g2(tau_powers_g2), alpha_tau_powers_g1(alpha_tau_powers_g1), - beta_tau_powers_g1(beta_tau_powers_g1), beta_g2(beta_g2) { - BOOST_ASSERT(tau_powers_g1.size() == tau_powers_g1_length); - BOOST_ASSERT(tau_powers_g2.size() == tau_powers_length); - BOOST_ASSERT(alpha_tau_powers_g1.size() == tau_powers_length); - BOOST_ASSERT(beta_tau_powers_g1.size() == tau_powers_length); - } - - void transform(const private_key_type &key) { - std::vector taupowers; - - // Construct exponents - // This could be parallelized - auto acc = field_value_type::one(); - for (std::size_t i = 0; i < tau_powers_g1_length; ++i) { - // taupowers[i] = tau^i - taupowers.emplace_back(acc); - acc *= key.tau; - } - - // naive exp, could be parallelized - naive_batch_exp( - tau_powers_g1.begin(), tau_powers_g1.end(), taupowers.begin(), taupowers.end()); - - naive_batch_exp( - tau_powers_g2.begin(), tau_powers_g2.end(), taupowers.begin(), taupowers.end()); - - naive_batch_exp_with_coeff(alpha_tau_powers_g1.begin(), - alpha_tau_powers_g1.end(), - taupowers.begin(), - taupowers.end(), - key.alpha); - - naive_batch_exp_with_coeff(beta_tau_powers_g1.begin(), - beta_tau_powers_g1.end(), - taupowers.begin(), - taupowers.end(), - key.beta); - - beta_g2 = beta_g2 * key.beta; - } - - private: - template - void naive_batch_exp(const PointIterator &bases_begin, - const PointIterator &bases_end, - const ScalarIterator &pow_begin, - const ScalarIterator &pow_end) { - BOOST_ASSERT(std::distance(bases_begin, bases_end) <= std::distance(pow_begin, pow_end)); - - auto base_iter = bases_begin; - auto pow_iter = pow_begin; - while (base_iter < bases_end) { - *base_iter = *pow_iter * *base_iter; - ++base_iter; - ++pow_iter; - } - } - - template - void naive_batch_exp_with_coeff(const PointIterator &bases_begin, - const PointIterator &bases_end, - const ScalarIterator &pow_begin, - const ScalarIterator &pow_end, - const field_value_type &coeff) { - BOOST_ASSERT(std::distance(bases_begin, bases_end) <= std::distance(pow_begin, pow_end)); - - auto base_iter = bases_begin; - auto pow_iter = pow_begin; - while (base_iter < bases_end) { - *base_iter = (coeff * *pow_iter) * *base_iter; - ++base_iter; - ++pow_iter; - } - } - }; - - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_ACCUMULATOR_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/private_key.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/private_key.hpp deleted file mode 100644 index 241dd49e9b..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/private_key.hpp +++ /dev/null @@ -1,49 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_PRIVATE_KEY_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_PRIVATE_KEY_HPP - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - // Contains the secrets τ, α and β that the participant of the ceremony must destroy. - struct powers_of_tau_private_key { - typedef CurveType curve_type; - using field_value_type = typename CurveType::scalar_field_type::value_type; - - field_value_type tau; - field_value_type alpha; - field_value_type beta; - }; - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_PRIVATE_KEY_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/public_key.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/public_key.hpp deleted file mode 100644 index e8b32e66df..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/public_key.hpp +++ /dev/null @@ -1,55 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_PUBLIC_KEY_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_PUBLIC_KEY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - struct powers_of_tau_public_key { - typedef CurveType curve_type; - - typedef commitments::detail::element_pok pok_type; - - pok_type tau_pok; - pok_type alpha_pok; - pok_type beta_pok; - - powers_of_tau_public_key(pok_type tau_pok, pok_type alpha_pok, pok_type beta_pok) : - tau_pok(tau_pok), alpha_pok(alpha_pok), beta_pok(beta_pok) { - } - }; - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_PUBLIC_KEY_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/result.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/result.hpp deleted file mode 100644 index a3ab19e737..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/result.hpp +++ /dev/null @@ -1,127 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_RESULT_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_RESULT_HPP - -#include - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - struct powers_of_tau_result { - typedef CurveType curve_type; - using g1_type = typename CurveType::template g1_type<>; - using g2_type = typename CurveType::template g2_type<>; - using g1_value_type = typename g1_type::value_type; - using g2_value_type = typename g2_type::value_type; - using scalar_field_type = typename curve_type::scalar_field_type; - using scalar_field_value_type = typename scalar_field_type::value_type; - - g1_value_type alpha_g1; - g1_value_type beta_g1; - g2_value_type beta_g2; - std::vector coeffs_g1; - std::vector coeffs_g2; - std::vector alpha_coeffs_g1; - std::vector beta_coeffs_g1; - std::vector h; - - powers_of_tau_result(const g1_value_type &alpha_g1, - const g1_value_type &beta_g1, - const g2_value_type &beta_g2, - const std::vector &coeffs_g1, - const std::vector &coeffs_g2, - const std::vector &alpha_coeffs_g1, - const std::vector &beta_coeffs_g1, - const std::vector &h) : - alpha_g1(alpha_g1), - beta_g1(beta_g1), beta_g2(beta_g2), coeffs_g1(coeffs_g1), coeffs_g2(coeffs_g2), - alpha_coeffs_g1(alpha_coeffs_g1), beta_coeffs_g1(beta_coeffs_g1), h(h) { - } - - template - static powers_of_tau_result - from_accumulator(const powers_of_tau_accumulator &acc, - std::size_t m) { - - auto alpha_g1 = acc.alpha_tau_powers_g1[0]; - auto beta_g1 = acc.beta_tau_powers_g1[0]; - auto beta_g2 = acc.beta_g2; - - auto domain_g1 = math::make_evaluation_domain(m); - auto domain_g2 = math::make_evaluation_domain(m); - - BOOST_ASSERT(domain_g1->m <= TauPowersLength); - - std::vector coeffs_g1 = domain_g1->evaluate_all_lagrange_polynomials( - acc.tau_powers_g1.begin(), acc.tau_powers_g1.end()); - - std::vector coeffs_g2 = domain_g2->evaluate_all_lagrange_polynomials( - acc.tau_powers_g2.begin(), acc.tau_powers_g2.end()); - - std::vector alpha_coeffs_g1 = domain_g1->evaluate_all_lagrange_polynomials( - acc.alpha_tau_powers_g1.begin(), acc.alpha_tau_powers_g1.end()); - - std::vector beta_coeffs_g1 = domain_g1->evaluate_all_lagrange_polynomials( - acc.beta_tau_powers_g1.begin(), acc.beta_tau_powers_g1.end()); - - std::vector h(m - 1, g1_value_type::zero()); - - math::polynomial Z = domain_g1->get_vanishing_polynomial(); - - // H[i] = t**i * Z(t) - for (std::size_t i = 0; i < m - 1; ++i) { - for (std::size_t j = 0; j < Z.size(); ++j) { - if (!Z[j].is_zero()) { - h[i] = h[i] + Z[j] * acc.tau_powers_g1[i + j]; - } - } - } - - return powers_of_tau_result(std::move(alpha_g1), - std::move(beta_g1), - std::move(beta_g2), - std::move(coeffs_g1), - std::move(coeffs_g2), - std::move(alpha_coeffs_g1), - std::move(beta_coeffs_g1), - std::move(h)); - } - }; - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_RESULT_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kimchi_pedersen.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kimchi_pedersen.hpp deleted file mode 100644 index e4556086f0..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kimchi_pedersen.hpp +++ /dev/null @@ -1,763 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_KIMCHI_PEDERSEN_COMMITMENT_SCHEME_HPP -#define CRYPTO3_ZK_KIMCHI_PEDERSEN_COMMITMENT_SCHEME_HPP - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - - template - struct kimchi_pedersen { - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - typedef typename CurveType::template g1_type group_type; - - typedef algebra::policies::multiexp_method_BDLO12 multiexp_method; - - typedef zk::transcript::DefaultFqSponge sponge_type; - typedef snark::group_map group_map_type; - typedef snark::kimchi_functions functions; - // using multiexp = algebra::multiexp_with_mixed_addition; - - struct params_type { - // vector of n distinct curve points of unknown discrete logarithm - std::vector g; - // distinct curve point of unknown discrete logarithm for blinding the commitment - typename group_type::value_type h; - // coefficients for the curve endomorphism - typename scalar_field_type::value_type endo_r; - typename base_field_type::value_type endo_q; - std::unordered_map > lagrange_bases; - - - // define parameters of protocol - params_type(std::vector &g, typename group_type::value_type &h, - typename scalar_field_type::value_type &endo_r, - typename base_field_type::value_type &endo_q, - std::unordered_map > &lagrange_bases) - : - g(g), h(h), endo_r(endo_r), endo_q(endo_q), lagrange_bases(lagrange_bases) {} - - params_type(std::size_t depth) : h(algebra::random_element()), - endo_r(algebra::random_element()), - endo_q(algebra::random_element()) { - for (int i = 0; i < depth; ++i) { - g.push_back(algebra::random_element()); - } - } - - params_type() = default; - - void add_lagrange_basis(math::basic_radix2_domain &domain) { - std::size_t n = domain.size(); - BOOST_ASSERT_MSG(n <= g.size(), - "add lagrange basis: Domain size {} larger than SRS size {}"); - - if (lagrange_bases.contains(n)) { - return; - } - - // std::vector lg(g.begin(), g.begin() + n); - lagrange_bases[n] = std::vector(g.begin(), g.begin() + n); - - domain.inverse_fft(lagrange_bases[n]); - } - }; - - template - struct poly_comm { - typedef poly_comm poly_comm_type; - std::vector unshifted; - value_type shifted; - - poly_comm() = default; - - poly_comm(std::vector &unshifted, value_type &shifted) : - unshifted(unshifted), shifted(shifted) {} - - static poly_comm multi_scalar_mul(std::vector> &commits, - std::vector &elm) { - - if (commits.empty()) { - return poly_comm(); - } - std::vector points; - for (auto &commit: commits) { - points.push_back(commit.shifted); - } - value_type shifted = algebra::multiexp_with_mixed_addition( - points.begin(), points.end(), elm.begin(), elm.end(), 1); - - std::vector unshifted; - std::size_t n = commits.front().unshifted.size(); - for (auto &commit: commits) { - if (n > commit.unshifted.size()) { - n = commit.unshifted.size(); - } - } - // *std::max_element(commits.begin(), commits.end(), [](auto &first, auto &second){ - // return first.unshifted.size() < second.unshifted.size(); - // }); - - for (int i = 0; i < n; ++i) { - std::vector points_for_unshifted; - std::vector scalars_for_unshifted; - for (int j = 0; j < commits.size(); ++j) { - if (i < commits[j].unshifted.size()) { - points_for_unshifted.push_back(commits[j].unshifted[i]); - scalars_for_unshifted.push_back(elm[j]); - } - } - - unshifted.push_back(algebra::multiexp_with_mixed_addition( - points_for_unshifted.begin(), points_for_unshifted.end(), - scalars_for_unshifted.begin(), scalars_for_unshifted.end(), 1)); - } - - return poly_comm(unshifted, shifted); - } - - poly_comm_type chunk_commitment(typename scalar_field_type::value_type &zeta_n) { - value_type res; - for (auto iter = unshifted.rbegin(); iter < unshifted.rend(); ++iter) { - res = res * zeta_n; - res = res + (*iter); - } - - std::vector unshifted_temp = {res}; - return poly_comm_type( - unshifted_temp, - shifted - ); - } - - poly_comm_type operator-(poly_comm_type other) { - std::vector unshifted_temp; - - std::size_t n1 = this->unshifted.size(); - std::size_t n2 = other.unshifted.size(); - std::size_t min_size = std::min(n1, n2); - // std::size_t max_size = std::max(n1, n2); - - int i = 0; - for (; i < min_size; ++i) { - unshifted_temp.push_back(this->unshifted[i] - other.unshifted[i]); - } - for (; i < n1; ++i) { - unshifted_temp.push_back(this->unshifted[i]); - } - for (; i < n2; ++i) { - unshifted_temp.push_back(other.unshifted[i]); - } - - value_type shifted_temp; - if (this->shifted == value_type::zero()) { - shifted_temp = other.shifted; - } else if (other.shifted == value_type::zero()) { - shifted_temp = this->shifted; - } else { - shifted_temp = this->shifted - other.shifted; - } - - return poly_comm_type(unshifted_temp, shifted_temp); - } - - poly_comm_type operator+(poly_comm_type other) { - std::vector unshifted_temp; - - std::size_t n1 = this->unshifted.size(); - std::size_t n2 = other.unshifted.size(); - std::size_t min_size = std::min(n1, n2); - // std::size_t max_size = std::max(n1, n2); - - int i = 0; - for (; i < min_size; ++i) { - unshifted_temp.push_back(this->unshifted[i] + other.unshifted[i]); - } - for (; i < n1; ++i) { - unshifted_temp.push_back(this->unshifted[i]); - } - for (; i < n2; ++i) { - unshifted_temp.push_back(other.unshifted[i]); - } - - value_type shifted_temp; - if (!this->shifted) { - shifted_temp = other.shifted; - } else if (!other.shifted) { - shifted_temp = this->shifted; - } else { - shifted_temp = this->shifted + other.shifted; - } - - return poly_comm_type(unshifted_temp, shifted_temp); - } - - poly_comm_type scale(typename scalar_field_type::value_type c) { - std::vector unshifted_temp; - - for (auto &a: unshifted) { - unshifted_temp.push_back(a * c); - } - - value_type shifted_temp = shifted * c; - return poly_comm_type(unshifted_temp, shifted_temp); - } - }; - - typedef poly_comm commitment_type; - typedef poly_comm blinding_type; - typedef std::tuple blinded_commitment_type; - - struct polynomial_type_single { - // polynomial itself - math::polynomial coeffs; - // optional degree bound - poly degree must not exceed it - std::size_t bound = -1; - // chunked commitment - blinding_type commit; - - polynomial_type_single(math::polynomial &coeffs, - int bound, - blinding_type &commit) : coeffs(coeffs), bound(bound), commit(commit) {} - }; - - typedef std::vector polynomial_type; - - struct proof_type { - std::vector> lr; - - typename group_type::value_type delta; - - typename scalar_field_type::value_type z1; - typename scalar_field_type::value_type z2; - - typename group_type::value_type sg; - - std::tuple, std::vector > - challenges(typename scalar_field_type::value_type &endo_r, sponge_type &sponge) { - std::vector chal, chal_invs; - for (auto &[l, r]: lr) { - sponge.absorb_g(l); - sponge.absorb_g(r); - chal.push_back(sponge.squeeze_challenge(endo_r)); - chal_invs.push_back(chal.back().inversed()); - } - - return std::make_tuple(chal, chal_invs); - } - - }; - - struct evaluation_type { - // polycommitment - commitment_type commit; - // evals of polynomial at a set of points - std::vector> evaluations; - // optional degree bound - int bound = -1; - - evaluation_type(commitment_type commit, - std::vector> &evaluations, - int bound) : - commit(commit), evaluations(evaluations), bound(bound) {} - }; - - struct batchproof_type { - sponge_type sponge; - std::vector evaluation; - std::vector evaluation_points; - // scaling factor for eval points powers - typename scalar_field_type::value_type xi; - // scaling factor for polynomials - typename scalar_field_type::value_type r; - // batched proof - proof_type opening; - - batchproof_type(sponge_type sponge, - std::vector evaluation, - std::vector evaluation_points, - typename scalar_field_type::value_type xi, - typename scalar_field_type::value_type r, - proof_type opening - ) : sponge(sponge), evaluation(evaluation), evaluation_points(evaluation_points), - xi(xi), r(r), opening(opening) {} - - batchproof_type() = default; - }; - - static params_type setup(const int d) { - // define parameters of protocol - return params_type(d); - } - - static blinded_commitment_type - commitment(const params_type ¶ms, - const math::polynomial &poly, int bound) { - commitment_type res; - blinding_type blind_res; - - auto left = poly.begin(); - auto g_len = params.g.size(); - - // non-hiding part - std::size_t len = poly.size(); - while (len > g_len) { - res.unshifted.push_back(algebra::multiexp_with_mixed_addition( - params.g.begin(), params.g.end(), left, left + g_len, 1)); - left += g_len; - len -= g_len; - } - if (len > 0) { - res.unshifted.push_back(algebra::multiexp_with_mixed_addition( - params.g.begin(), params.g.begin() + len, left, left + len, 1)); - } - - if (bound >= 0) { - auto start = bound - bound % g_len; - if (!poly.is_zero() && start < poly.size()) { - res.shifted = algebra::multiexp_with_mixed_addition( - params.g.end() - bound % g_len, params.g.end(), poly.begin() + start, - poly.end(), - 1); - } - } - - // masking part - typename scalar_field_type::value_type w; - - for (auto &i: res.unshifted) { - w = algebra::random_element(); - i = i + w * params.h; - blind_res.unshifted.push_back(w); - } - - w = algebra::random_element(); - - if (res.shifted != group_type::value_type::zero()) { - res.shifted = res.shifted + w * params.h; - blind_res.shifted = w; - } - - return blinded_commitment_type(res, blind_res); - } - - static proof_type proof_eval(const params_type ¶ms, group_map_type &group_map, - const polynomial_type &plms, - const std::vector &elm, - const typename scalar_field_type::value_type &polyscale, - const typename scalar_field_type::value_type &evalscale, - sponge_type &sponge) { - proof_type res; - std::vector g = params.g; - std::vector< - std::tuple> - blinders; - - // making vector of size g = 2^k - std::size_t power_of_two = 1; - for (; power_of_two < params.g.size(); power_of_two <<= 1); - - g.resize(power_of_two, group_type::value_type::zero()); - - // computing a and blinding factor - math::polynomial a( - params.g.size(), scalar_field_type::value_type::zero()); - typename scalar_field_type::value_type blinding_factor = scalar_field_type::value_type::zero(); - typename scalar_field_type::value_type scale = scalar_field_type::value_type::one(); - - for (auto &polynom: plms) { - auto offset = polynom.coeffs.begin(); - int j = 0; - - if (polynom.bound >= 0) { - while (j < polynom.commit.unshifted.size()) { - auto end_iter = - (offset + params.g.size() > polynom.coeffs.end() ? polynom.coeffs.end() : - offset + params.g.size()); - auto segment = std::vector(offset, - end_iter); - // add unshifted to a - for (int i = 0; i < segment.size(); ++i) { - a[i] += segment[i] * scale; - } - blinding_factor += polynom.commit.unshifted[j] * scale; - j += 1; - scale *= polyscale; - offset += params.g.size(); - if (offset - polynom.coeffs.begin() > polynom.bound) { - // add shifted to a - for (int i = 0; i < segment.size(); ++i) { - a[i + params.g.size() - segment.size()] += segment[i] * scale; - } - - blinding_factor += polynom.commit.shifted * scale; - scale *= polyscale; - } - } - } else { - while (j < polynom.commit.unshifted.size()) { - auto end_iter = - (offset + params.g.size() > polynom.coeffs.end() ? polynom.coeffs.end() : - offset + params.g.size()); - auto segment = std::vector(offset, - end_iter); - // add unshifted to a - for (int i = 0; i < segment.size(); ++i) { - a[i] += segment[i] * scale; - } - - blinding_factor += polynom.commit.unshifted[j] * scale; - j += 1; - scale *= polyscale; - offset += params.g.size(); - } - } - } - a.resize(power_of_two, scalar_field_type::value_type::zero()); - - // computing b - std::vector b( - power_of_two, scalar_field_type::value_type::zero()); - scale = scalar_field_type::value_type::one(); - for (auto e: elm) { - auto spare = scalar_field_type::value_type::one(); - for (int i = 0; i < power_of_two; ++i) { - b[i] += scale * spare; - spare *= e; - } - scale *= evalscale; - } - - typename scalar_field_type::value_type inner_product_in_vec = algebra::inner_product(a.begin(), - a.end(), - b.begin(), - b.end()); - sponge.absorb_fr(functions::shift_scalar(inner_product_in_vec)); - typename group_type::value_type u = group_map.to_group(sponge.challenge_fq()); - - std::vector chals; - std::vector chal_invs; - - std::vector g_low, g_high; - std::vector a_low, a_high, b_low, b_high; - - while (power_of_two > 1) { - power_of_two >>= 1; - g_low.assign(g.begin(), g.begin() + power_of_two); - g_high.assign(g.begin() + power_of_two, g.end()); - a_low.assign(a.begin(), a.begin() + power_of_two); - a_high.assign(a.begin() + power_of_two, a.end()); - b_low.assign(b.begin(), b.begin() + power_of_two); - b_high.assign(b.begin() + power_of_two, b.end()); - - typename scalar_field_type::value_type rand_l = algebra::random_element(); - typename scalar_field_type::value_type rand_r = algebra::random_element(); - - typename group_type::value_type l = algebra::multiexp_with_mixed_addition( - g_low.begin(), g_low.end(), a_high.begin(), a_high.end(), 1) + - rand_l * params.h + - algebra::inner_product(a_high.begin(), a_high.end(), - b_low.begin(), b_low.end()) * u; - typename group_type::value_type r = algebra::multiexp_with_mixed_addition( - g_high.begin(), g_high.end(), a_low.begin(), a_low.end(), 1) + - rand_r * params.h + - algebra::inner_product(a_low.begin(), a_low.end(), - b_high.begin(), b_high.end()) * - u; - - res.lr.emplace_back(l, r); - blinders.emplace_back(rand_l, rand_r); - - sponge.absorb_g(l); - sponge.absorb_g(r); - typename scalar_field_type::value_type u_scalar = sponge.squeeze_challenge( - params.endo_r); // u_pre to field using endo_r - typename scalar_field_type::value_type u_scalar_inv = u_scalar.inversed(); - chals.push_back(u_scalar); - chal_invs.push_back(u_scalar_inv); - - auto compress_function_u_inv = [&u_scalar_inv](auto &first, auto &second) { - return first * u_scalar_inv + second; - }; - - auto compress_function_u = [&u_scalar](auto &first, auto &second) { - return first * u_scalar + second; - }; - - a.resize(a_high.size()); - std::transform(a_high.begin(), a_high.end(), a_low.begin(), a.begin(), - compress_function_u_inv); - b.resize(b_high.size()); - std::transform(b_high.begin(), b_high.end(), b_low.begin(), b.begin(), compress_function_u); - g.resize(g_high.size()); - std::transform(g_high.begin(), g_high.end(), g_low.begin(), g.begin(), compress_function_u); - } - typename scalar_field_type::value_type a0 = a[0]; - typename scalar_field_type::value_type b0 = b[0]; - typename group_type::value_type g0 = g[0]; - - auto r_prime = blinding_factor; - for (int i = 0; i < blinders.size(); ++i) { - const auto &[l, r] = blinders[i]; - r_prime += l * chal_invs[i] + r * chals[i]; - } - typename scalar_field_type::value_type d = algebra::random_element(); - typename scalar_field_type::value_type r_delta = algebra::random_element(); - - typename group_type::value_type delta = (g0 + u * b0) * d + params.h * r_delta; - sponge.absorb_g(delta); - typename scalar_field_type::value_type c = sponge.squeeze_challenge( - params.endo_r); // to field using endo_r - - res.delta = (g0 + u * b0) * d + params.h * r_delta; - res.z1 = a0 * c + d; - res.z2 = c * r_prime + r_delta; - res.sg = g0; - - return res; - } - - static typename scalar_field_type::value_type combined_inner_product( - const std::vector &evaluation_points, - typename scalar_field_type::value_type xi, typename scalar_field_type::value_type r, - const std::vector> &polys, int g_size) { - typename scalar_field_type::value_type res = scalar_field_type::value_type::zero(); - typename scalar_field_type::value_type xi_i = scalar_field_type::value_type::one(); - - for (const auto &[evals_tr, bound]: polys) { - - std::vector> evals; - if (!evals_tr.evaluations.empty()) { - for (int i = 0; i < evals_tr.evaluations[0].size(); ++i) { - std::vector ev; - for (int j = 0; j < evals_tr.evaluations.size(); ++j) { - ev.push_back(evals_tr.evaluations[j][i]); - } - evals.push_back(ev); - } - } - - for (auto &eval: evals) { - math::polynomial polynom(eval); - typename scalar_field_type::value_type term = polynom.evaluate(r); - res += xi_i * term; - xi_i *= xi; - } - if (bound != -1) { - std::vector last_evals( - evaluation_points.size(), scalar_field_type::value_type::zero()); - if (bound <= evals.size() * g_size) { - last_evals = evals[evals.size() - 1]; - } - - std::vector shifted_evals_vec; - - for (int i = 0; i < last_evals.size(); ++i) { - shifted_evals_vec.push_back(evaluation_points[i].pow(g_size - bound % g_size) * - last_evals[i]); - } - - math::polynomial shifted_evals( - shifted_evals_vec); - res += xi_i * shifted_evals.evaluate(r); - xi_i *= xi; - } - } - - return res; - } - - static typename scalar_field_type::value_type - b_poly(const std::vector &chals, - typename scalar_field_type::value_type x) { - auto k = chals.size(); - std::vector pow_twos = {x}; - - for (int i = 1; i < k; ++i) { - pow_twos.push_back(pow_twos.back().squared()); - } - - typename scalar_field_type::value_type res = scalar_field_type::value_type::one(); - for (int i = 0; i < k; ++i) { - res *= scalar_field_type::value_type::one() + chals[i] * pow_twos[k - 1 - i]; - } - - return res; - } - - static std::vector - b_poly_coefficents(const std::vector &chals) { - auto rounds = chals.size(); - auto s_len = 1 << rounds; - std::vector s( - s_len, scalar_field_type::value_type::one()); - int k = 0; - int pow = 1; - for (int i = 1; i < s_len; ++i) { - (i == pow) ? (k += 1) : (k += 0); - (i == pow) ? (pow <<= 1) : (pow <<= 0); - s[i] = s[i - (pow >> 1)] * chals[rounds - 1 - (k - 1)]; - } - return s; - } - - static bool verify_eval(params_type ¶ms, group_map_type &group_map, - std::vector &batches) { - - std::size_t power_of_two = 1; - for (; power_of_two < params.g.size(); power_of_two <<= 1); - - std::vector points = {params.h}; - points.insert(points.end(), params.g.begin(), params.g.end()); - points.resize(power_of_two + 1, group_type::value_type::zero()); - - std::vector scalars(power_of_two + 1, - scalar_field_type::value_type::zero()); - - typename scalar_field_type::value_type rand_base = algebra::random_element(); - typename scalar_field_type::value_type sg_rand_base = algebra::random_element(); - typename scalar_field_type::value_type rand_base_i = scalar_field_type::value_type::one(); - typename scalar_field_type::value_type sg_rand_base_i = scalar_field_type::value_type::one(); - - for (auto &batch: batches) { - std::vector> es; - for (auto eval: batch.evaluation) { - int bnd = -1; - if (!eval.commit.shifted.is_zero()) { - bnd = eval.bound; - } - es.emplace_back(eval, bnd); - } - - typename scalar_field_type::value_type combined_inner_product0 = - combined_inner_product(batch.evaluation_points, batch.xi, batch.r, es, - params.g.size()); - - batch.sponge.absorb_fr(functions::shift_scalar(combined_inner_product0)); - typename base_field_type::value_type t = batch.sponge.challenge_fq(); - typename group_type::value_type u = group_map.to_group(t); - const auto &[chals, chal_invs] = batch.opening.challenges(params.endo_r, batch.sponge); - batch.sponge.absorb_g(batch.opening.delta); - - typename scalar_field_type::value_type c = batch.sponge.squeeze_challenge( - params.endo_r); // to field using endo_r - - typename scalar_field_type::value_type scale = scalar_field_type::value_type::one(); - typename scalar_field_type::value_type b0 = scalar_field_type::value_type::zero(); - - for (auto e: batch.evaluation_points) { - typename scalar_field_type::value_type term = b_poly(chals, e); - b0 += scale * term; - scale *= batch.r; - } - - std::vector s = b_poly_coefficents(chals); - - auto neg_rand_base_i = -rand_base_i; - - points.push_back(batch.opening.sg); - scalars.push_back(neg_rand_base_i * batch.opening.z1 - sg_rand_base_i); - - std::transform(s.begin(), s.end(), s.begin(), [&sg_rand_base_i](auto &iter_s) { - return iter_s * sg_rand_base_i; - }); - - for (int i = 0; i < s.size(); ++i) { - scalars[i + 1] += s[i]; - } - - scalars[0] -= rand_base_i * batch.opening.z2; - scalars.push_back(neg_rand_base_i * batch.opening.z1 * b0); - points.push_back(u); - - auto rand_base_i_c_i = c * rand_base_i; - for (int i = 0; i < batch.opening.lr.size(); ++i) { - const auto [l, r] = batch.opening.lr[i]; - points.push_back(l); - scalars.push_back(rand_base_i_c_i * chal_invs[i]); - - points.push_back(r); - scalars.push_back(rand_base_i_c_i * chals[i]); - } - - auto xi_i = scalar_field_type::value_type::one(); - for (auto eval: batch.evaluation) { - for (auto comm: eval.commit.unshifted) { - scalars.push_back(rand_base_i_c_i * xi_i); - points.push_back(comm); - - xi_i *= batch.xi; - } - - if (eval.bound >= 0) { - if (!eval.commit.shifted.is_zero()) { - scalars.push_back(rand_base_i_c_i * xi_i); - points.push_back(eval.commit.shifted); - - xi_i *= batch.xi; - } - } - } - - scalars.push_back(rand_base_i_c_i * combined_inner_product0); - points.push_back(u); - scalars.push_back(rand_base_i); - points.push_back(batch.opening.delta); - - rand_base_i *= rand_base; - sg_rand_base_i *= sg_rand_base; - } - - return (algebra::multiexp_with_mixed_addition( - points.begin(), points.end(), scalars.begin(), scalars.end(), 1) == - group_type::value_type::zero()); - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_KIMCHI_PEDERSEN_COMMITMENT_SCHEME_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp index 50e0df3cbd..52fee0bb63 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp @@ -43,11 +43,10 @@ namespace nil { namespace crypto3 { namespace zk { namespace commitments { - template + template typename knowledge_commitment::value_type opt_window_wnaf_exp(const typename knowledge_commitment::value_type &base, - const boost::multiprecision::number &scalar, + const nil::crypto3::multiprecision::big_uint &scalar, const std::size_t scalar_bits) { return typename knowledge_commitment::value_type( opt_window_wnaf_exp(base.g, scalar, scalar_bits), diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp index db8a66b6dc..dff30d1fe0 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp @@ -658,7 +658,7 @@ namespace nil { using transcript_hash_type = typename CommitmentSchemeType::transcript_hash_type; using polynomial_type = typename CommitmentSchemeType::polynomial_type; using proof_type = typename CommitmentSchemeType::proof_type; - using endianness = nil::marshalling::option::big_endian; + using endianness = nil::crypto3::marshalling::option::big_endian; private: params_type _params; std::map _commitments; @@ -752,9 +752,9 @@ namespace nil { _params, this->_polys[index][i]); this->_ind_commitments[index].push_back(single_commitment); - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector single_commitment_bytes = - nil::marshalling::pack(single_commitment, status); + nil::crypto3::marshalling::pack(single_commitment, status); THROW_IF_ERROR_STATUS(status, "kzg::commit"); result.insert(result.end(), single_commitment_bytes.begin(), single_commitment_bytes.end()); } @@ -839,9 +839,9 @@ namespace nil { for (std::size_t j = 0; j < blob_size; j++) { byteblob[j] = this->_commitments.at(k)[i * blob_size + j]; } - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; typename curve_type::template g1_type<>::value_type - i_th_commitment = nil::marshalling::pack(byteblob, status); + i_th_commitment = nil::crypto3::marshalling::pack(byteblob, status); THROW_IF_ERROR_STATUS(status, "kzg::verify_eval"); auto U_commit = nil::crypto3::zk::algorithms::commit_one (_params, this->get_U(k, i)); diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp index ea86534852..9c9970718f 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp @@ -105,9 +105,9 @@ namespace nil { } }; - using endianness = nil::marshalling::option::big_endian; + using endianness = marshalling::option::big_endian; using field_element_type = nil::crypto3::marshalling::types::field_element< - nil::marshalling::field_type, + marshalling::field_type, commitment_type >; private: @@ -202,9 +202,9 @@ namespace nil { _params, this->_polys[index][i]); this->_ind_commitments[index].push_back(single_commitment); - nil::marshalling::status_type status; + marshalling::status_type status; std::vector single_commitment_bytes = - nil::marshalling::pack(single_commitment, status); + marshalling::pack(single_commitment, status); THROW_IF_ERROR_STATUS(status, "kzg_v2::commit"); result.insert(result.end(), single_commitment_bytes.begin(), single_commitment_bytes.end()); } @@ -308,7 +308,7 @@ namespace nil { auto F = CommitmentSchemeType::single_commitment_type::zero(); auto rsum = CommitmentSchemeType::scalar_value_type::zero(); - nil::marshalling::status_type status; + marshalling::status_type status; for (const auto &it: this->_commitments) { auto k = it.first; @@ -320,7 +320,7 @@ namespace nil { byteblob[j] = this->_commitments[k][i * blob_size + j]; } typename curve_type::template g1_type<>::value_type - cm_i = nil::marshalling::pack(byteblob, status); + cm_i = marshalling::pack(byteblob, status); THROW_IF_ERROR_STATUS(status, "kzg_v2::verify_eval"); auto Z_T_S_i = set_difference_polynom(_merged_points, this->_points.at(k)[i]).evaluate( theta_2); diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp index c88964f43a..62dab4c747 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp @@ -110,6 +110,7 @@ namespace nil { { } + lpc_commitment_scheme(const typename fri_type::params_type &fri_params) : _fri_params(fri_params), _etha(0u) { } diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/pedersen.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/pedersen.hpp deleted file mode 100644 index 33d0029f95..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/pedersen.hpp +++ /dev/null @@ -1,193 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PEDERSEN_COMMITMENT_SCHEME_HPP -#define CRYPTO3_ZK_PEDERSEN_COMMITMENT_SCHEME_HPP - -#include - -#include - -#include - -using namespace nil::crypto3; - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - - template - class pedersen { - public: - typedef typename CurveType::scalar_field_type field_type; - typedef typename CurveType::template g1_type group_type; - typedef typename field_type::value_type evaluation_type; - typedef typename group_type::value_type commitment_type; - - struct params_type { - // setup as an open key (non trusted, so uniform for both sides) - int n; // n - number of parties - int k; // k <= n - number of parties needed to open the secret message - commitment_type g; - commitment_type h; - }; - - struct private_key { - evaluation_type s; // power of g - evaluation_type t; // power of h - - private_key() : s(0), t(0) { - } - - private_key(evaluation_type a, evaluation_type b) : s(a), t(b) { - } - }; - - struct proof_type { - commitment_type E_0; // initial commitment - std::vector E; // commitments open for everyone - std::vector pk; // private keys for each party - }; - - static params_type key_generator(int n, int k, commitment_type g = commitment_type::one(), - commitment_type h = commitment_type::one()) { - // evaluates setup for current protocol - if (g == commitment_type::one()) { - g = algebra::random_element(); - } - if (h == commitment_type::one()) { - h = algebra::random_element(); - while (g == h) { - h = algebra::random_element(); - } - } - return params_type(n, k, g, h); - } - - static commitment_type commitment(const params_type ¶ms, const private_key &pk) { - // pedersen commitment - return params.g * pk.s + params.h * pk.t; - } - - static std::vector poly_eval(const params_type ¶ms, - const std::vector &coeffs) { - // computes F(i) for i in range 1..n for polynom F of degree k - proof.E - std::vector p_i; - evaluation_type spare; - evaluation_type sum; - for (int i = 1; i <= params.n; ++i) { - spare = 1; - sum = coeffs[0]; - for (int j = 1; j < params.k; ++j) { - spare *= i; - sum += spare * coeffs[j]; - } - p_i.push_back(sum); - } - return p_i; - } - - static proof_type proof_eval(const params_type ¶ms, const evaluation_type &w) { - // evaluates proof according to pedersen commitment '81 - proof_type prf; - - evaluation_type t = algebra::random_element(); - prf.E_0 = commitment(params, private_key(w, t)); - - std::vector f_coeffs; - f_coeffs.push_back(w); - std::vector g_coeffs; - g_coeffs.push_back(t); - evaluation_type spare; - for (int i = 1; i < params.k; ++i) { - spare = algebra::random_element(); - f_coeffs.push_back(spare); - spare = algebra::random_element(); - g_coeffs.push_back(spare); - } - - std::vector s_i = - poly_eval(params, f_coeffs); // pair (s_i[j], t_i[j]) is given exclusively - std::vector t_i = poly_eval(params, g_coeffs); // to party number j - for (int i = 0; i < params.n; ++i) { - prf.pk.push_back(private_key(s_i[i], t_i[i])); - } - for (int i = 1; i < params.k; ++i) { - prf.E.push_back(commitment(params, private_key(f_coeffs[i], g_coeffs[i]))); - } - - return prf; - } - - static bool verify_eval(const params_type ¶ms, const proof_type &prf) { - // vefifies that everyone is sure one knows the secret message - bool answer = true; - - evaluation_type power; - commitment_type E; - commitment_type sum; - - for (int i = 1; i <= params.n; ++i) { - E = commitment(params, prf.pk[i - 1]); - sum = prf.E_0; - power = 1; - for (int j = 1; j < params.k; ++j) { - power *= i; - sum = sum + prf.E[j - 1] * power; - } - answer *= (E == sum); - } - return answer; - } - - static evaluation_type message_eval(const params_type ¶ms, const proof_type &prf, - const std::vector &idx) { - // for a given number of people learns if they can open message - // and if so, opens it - if ((idx.size() < params.k) || (!verify_eval(params, prf))) { - return 0; - } - - evaluation_type sum = 0; - evaluation_type mult = 1; - for (int j = 0; j < params.k; ++j) { - mult = 1; - for (int l = 0; l < params.k; ++l) { - if (l != j) { - mult *= evaluation_type(idx[l]) * evaluation_type(idx[l] - idx[j]).inversed(); - } - } - sum += mult * prf.pk[idx[j] - 1].s; - } - return sum; - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PEDERSEN_COMMITMENT_SCHEME_HPP \ No newline at end of file diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/powers_of_tau.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/powers_of_tau.hpp deleted file mode 100644 index 4d0dc9defb..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/powers_of_tau.hpp +++ /dev/null @@ -1,187 +0,0 @@ -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_HPP - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - template - class powers_of_tau { - typedef CurveType curve_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename scalar_field_type::value_type scalar_field_value_type; - typedef typename CurveType::template g1_type<> g1_type; - typedef typename g1_type::value_type g1_value_type; - typedef typename CurveType::template g2_type<> g2_type; - typedef typename g2_type::value_type g2_value_type; - - public: - typedef detail::powers_of_tau_private_key private_key_type; - typedef detail::powers_of_tau_public_key public_key_type; - typedef detail::powers_of_tau_accumulator accumulator_type; - typedef detail::powers_of_tau_result result_type; - typedef proof_of_knowledge proof_of_knowledge_scheme_type; - - enum parameter_personalization { - tau_personalization, alpha_personalization, beta_personalization - }; - - // The result of this function is considered toxic wast - // and should thus be destroyed - template - static private_key_type generate_private_key(RNG &&rng = boost::random_device()) { - typename scalar_field_type::value_type tau = algebra::random_element(rng); - typename scalar_field_type::value_type alpha = algebra::random_element(rng); - typename scalar_field_type::value_type beta = algebra::random_element(rng); - - return private_key_type{std::move(tau), std::move(alpha), std::move(beta)}; - } - - static auto rng_from_beacon(const std::vector &beacon) { - std::size_t n = 42; - std::vector cur_hash = beacon; - for (std::size_t i = 0; i < std::size_t(1 << n); ++i) { - std::vector hash = nil::crypto3::hash>(cur_hash); - cur_hash = hash; - } - // random::chacha gen; - boost::random::mt19937 gen; - // gen.seed(cur_hash); - gen.seed(cur_hash[0]); - - return gen; - } - - template - static public_key_type proof_eval(const private_key_type &private_key, - const accumulator_type &before, - RNG &&rng = boost::random_device()) { - std::vector transcript = compute_transcript(before); - auto tau_pok = proof_of_knowledge_scheme_type::proof_eval( - private_key.tau, transcript, tau_personalization, rng); - auto alpha_pok = proof_of_knowledge_scheme_type::proof_eval( - private_key.alpha, transcript, alpha_personalization, rng); - auto beta_pok = proof_of_knowledge_scheme_type::proof_eval( - private_key.beta, transcript, beta_personalization, rng); - - return public_key_type{std::move(tau_pok), std::move(alpha_pok), std::move(beta_pok)}; - } - - static bool verify_eval(const public_key_type &public_key, - const accumulator_type &before, - const accumulator_type &after) { - std::vector transcript = compute_transcript(before); - - auto tau_g2_s = proof_of_knowledge_scheme_type::compute_g2_s( - public_key.tau_pok.g1_s, public_key.tau_pok.g1_s_x, transcript, tau_personalization); - auto alpha_g2_s = proof_of_knowledge_scheme_type::compute_g2_s( - public_key.alpha_pok.g1_s, public_key.alpha_pok.g1_s_x, transcript, - alpha_personalization); - auto beta_g2_s = proof_of_knowledge_scheme_type::compute_g2_s( - public_key.beta_pok.g1_s, public_key.beta_pok.g1_s_x, transcript, beta_personalization); - - // Verify the proofs of knowledge of tau, alpha and beta - if (!proof_of_knowledge_scheme_type::verify_eval(public_key.tau_pok, tau_g2_s)) { - return false; - } - if (!proof_of_knowledge_scheme_type::verify_eval(public_key.alpha_pok, alpha_g2_s)) { - return false; - } - if (!proof_of_knowledge_scheme_type::verify_eval(public_key.beta_pok, beta_g2_s)) { - return false; - } - - // Check the correctness of the generators fot tau powers - if (after.tau_powers_g1[0] != g1_value_type::one()) { - return false; - } - if (after.tau_powers_g2[0] != g2_value_type::one()) { - return false; - } - - // Did the participant multiply the previous tau by the new one? - if (!is_same_ratio(std::make_pair(before.tau_powers_g1[1], after.tau_powers_g1[1]), - std::make_pair(tau_g2_s, public_key.tau_pok.g2_s_x))) { - return false; - } - - // Did the participant multiply the previous alpha by the new one? - if (!is_same_ratio(std::make_pair(before.alpha_tau_powers_g1[0], after.alpha_tau_powers_g1[0]), - std::make_pair(alpha_g2_s, public_key.alpha_pok.g2_s_x))) { - return false; - } - - // Did the participant multiply the previous beta by the new one? - if (!is_same_ratio(std::make_pair(before.beta_tau_powers_g1[0], after.beta_tau_powers_g1[0]), - std::make_pair(beta_g2_s, public_key.beta_pok.g2_s_x))) { - return false; - } - - if (!is_same_ratio(std::make_pair(before.beta_tau_powers_g1[0], after.beta_tau_powers_g1[0]), - std::make_pair(before.beta_g2, after.beta_g2))) { - return false; - } - - // Are the powers of tau correct? - if (!is_same_ratio(detail::power_pairs(after.tau_powers_g1), - std::make_pair(after.tau_powers_g2[0], after.tau_powers_g2[1]))) { - return false; - } - if (!is_same_ratio(std::make_pair(after.tau_powers_g1[0], after.tau_powers_g1[1]), - commitments::detail::power_pairs(after.tau_powers_g2))) { - return false; - } - if (!is_same_ratio(detail::power_pairs(after.alpha_tau_powers_g1), - std::make_pair(after.tau_powers_g2[0], after.tau_powers_g2[1]))) { - return false; - } - if (!is_same_ratio(detail::power_pairs(after.beta_tau_powers_g1), - std::make_pair(after.tau_powers_g2[0], after.tau_powers_g2[1]))) { - return false; - } - - return true; - } - - static bool is_same_ratio(const std::pair &g1_pair, - const std::pair &g2_pair) { - - return algebra::pair_reduced(g1_pair.first, g2_pair.second) == - algebra::pair_reduced(g1_pair.second, g2_pair.first); - } - - static std::vector compute_transcript(const accumulator_type &acc) { - auto acc_blob = serialize_accumulator(acc); - return nil::crypto3::hash>(acc_blob); - } - - static std::vector serialize_accumulator(const accumulator_type &acc) { - using endianness = nil::marshalling::option::little_endian; - auto filled_val = - nil::crypto3::marshalling::types::fill_powers_of_tau_accumulator(acc); - std::vector blob(filled_val.length()); - auto it = std::begin(blob); - nil::marshalling::status_type status = filled_val.write(it, blob.size()); - THROW_IF_ERROR_STATUS(status, "powers_of_tau::serialize_accumulator"); - return blob; - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/proof_of_knowledge.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/proof_of_knowledge.hpp deleted file mode 100644 index 1a812d0d8a..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/commitments/polynomial/proof_of_knowledge.hpp +++ /dev/null @@ -1,123 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_HPP -#define CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_HPP - -#include - -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - template - struct proof_of_knowledge { - typedef CurveType curve_type; - using scalar_field_type = typename curve_type::scalar_field_type; - using scalar_field_value_type = typename scalar_field_type::value_type; - using g1_type = typename CurveType::template g1_type<>; - using g2_type = typename CurveType::template g2_type<>; - using g1_value_type = typename g1_type::value_type; - using g2_value_type = typename g2_type::value_type; - typedef detail::element_pok proof_type; - - template - static proof_type proof_eval(const scalar_field_value_type &x, - const std::vector &transcript, - std::uint8_t personalization, - RNG &&rng = boost::random_device()) { - const g1_value_type g1_s = algebra::random_element(rng); - const g1_value_type g1_s_x = x * g1_s; - const g2_value_type g2_s = compute_g2_s(g1_s, g1_s_x, transcript, personalization); - const g2_value_type g2_s_x = x * g2_s; - - return proof_type(g1_s, g1_s_x, g2_s_x); - } - - static bool verify_eval(const proof_type &proof, - const std::vector &transcript, - std::uint8_t personalization) { - const g2_value_type g2_s = compute_g2_s(proof.g1_s, proof.g1_s_x, transcript, personalization); - return verify_eval(proof, g2_s); - } - - static bool verify_eval(const proof_type &proof, const g2_value_type &g2_s) { - return algebra::pair_reduced(proof.g1_s, proof.g2_s_x) == - algebra::pair_reduced(proof.g1_s_x, g2_s); - } - - static g2_value_type compute_g2_s(const g1_value_type &g1_s, - const g1_value_type &g1_s_x, - const std::vector &transcript, - std::uint8_t personalization) { - std::vector personalization_transcript_g1s_g1sx; - - personalization_transcript_g1s_g1sx.emplace_back(personalization); - - std::copy(std::cbegin(transcript), - std::cend(transcript), - std::back_inserter(personalization_transcript_g1s_g1sx)); - - auto g1_s_blob = serialize_g1_uncompressed(g1_s); - std::copy(std::cbegin(g1_s_blob), std::cend(g1_s_blob), std::back_inserter(g1_s_blob)); - - auto g1_s_x_blob = serialize_g1_uncompressed(g1_s_x); - std::copy(std::cbegin(g1_s_x_blob), std::cend(g1_s_x_blob), std::back_inserter(g1_s_x_blob)); - - std::vector hash = - nil::crypto3::hash>(personalization_transcript_g1s_g1sx); - - // this is unsecure as it's only using the first byte, - // it should be chacha which is currently broken - boost::random::mt19937 gen; - // random::chacha gen; - gen.seed(hash[0]); - // gen.seed(hash.begin(), hash.end()); - return algebra::random_element(gen); - } - - static std::vector serialize_g1_uncompressed(const g1_value_type &g) { - using endianness = nil::marshalling::option::little_endian; - auto filled_val = - nil::crypto3::marshalling::types::fill_fast_curve_element(g); - std::vector blob(filled_val.length()); - auto it = std::begin(blob); - nil::marshalling::status_type status = filled_val.write(it, blob.size()); - THROW_IF_ERROR_STATUS(status, "proof_of_knowledge::serialize_g1_uncompressed"); - return blob; - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/math/expression.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/math/expression.hpp index 2f367b9e0f..c8500ea4fb 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/math/expression.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/math/expression.hpp @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include @@ -114,9 +113,9 @@ namespace nil { update_hash(); } - // Constructor for number>. - template - expression(const boost::multiprecision::number& coeff) + // Constructor for big_uint. + template + expression(const nil::crypto3::multiprecision::big_uint& coeff) : expr(term((assignment_type)coeff)) { update_hash(); } @@ -210,7 +209,7 @@ namespace nil { // Every number type will be accepted here, // if it can be converted to 'assignment_type'. - // This will include integral types and number> + // This will include integral types and big_uint template term(const NumberType &field_val) : coeff(field_val) { update_hash(); diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/math/expression_visitors.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/math/expression_visitors.hpp index 1582a95266..e251749b3e 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/math/expression_visitors.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/math/expression_visitors.hpp @@ -1,5 +1,7 @@ //---------------------------------------------------------------------------// // Copyright (c) 2020-2021 Martun Karapetyan +// Copyright (c) 2024 Alexey Yashunsky +// // // MIT License // @@ -152,6 +154,8 @@ namespace nil { return left - right; case ArithmeticOperator::MULT: return left * right; + default: + throw std::invalid_argument("ArithmeticOperator not found"); } } }; @@ -223,6 +227,165 @@ namespace nil { }; + // Checks if an expression is just a single variable. + template + class expression_is_variable_visitor : public boost::static_visitor { + public: + expression_is_variable_visitor() {} + + static bool is_var(const crypto3::math::expression& expr) { + expression_is_variable_visitor v = expression_is_variable_visitor(); + return boost::apply_visitor(v, expr.get_expr()); + } + + bool operator()(const crypto3::math::term& term) { + return ((term.get_vars().size() == 1) && term.get_coeff().is_one()); + } + + bool operator()(const crypto3::math::pow_operation& pow) { + return false; + } + + bool operator()(const crypto3::math::binary_arithmetic_operation& op) { + return false; + } + }; + + // Returns the range of rows used by the given expression. The first bool value returns if the expression + // has any variables or not, I.E. if it's false, the other 2 values have no meaning. + template + class expression_row_range_visitor : public boost::static_visitor> { + public: + expression_row_range_visitor() {} + + static std::tuple row_range(const crypto3::math::expression& expr) { + expression_row_range_visitor v = expression_row_range_visitor(); + return boost::apply_visitor(v, expr.get_expr()); + } + + std::tuple operator()(const crypto3::math::term& term) { + bool has_vars = false; + int32_t min_row, max_row; + + if (term.get_vars().size() > 0) { + has_vars = true; + min_row = term.get_vars()[0].rotation; + max_row = term.get_vars()[0].rotation; + for(std::size_t i = 1; i < term.get_vars().size(); i++) { + min_row = std::min(min_row, term.get_vars()[i].rotation); + max_row = std::max(max_row, term.get_vars()[i].rotation); + } + } + return {has_vars, min_row, max_row}; + } + + std::tuple operator()(const crypto3::math::pow_operation& pow) { + return boost::apply_visitor(*this, pow.get_expr().get_expr()); + } + + std::tuple operator()(const crypto3::math::binary_arithmetic_operation& op) { + auto [A_has_vars, A_min, A_max] = boost::apply_visitor(*this, op.get_expr_left().get_expr()); + auto [B_has_vars, B_min, B_max] = boost::apply_visitor(*this, op.get_expr_right().get_expr()); + + if (!A_has_vars) { + return {B_has_vars, B_min, B_max}; + } + if (!B_has_vars) { + return {A_has_vars, A_min, A_max}; + } + return {true, std::min(A_min,B_min), std::max(A_max,B_max)}; + } + }; + + // Converts the given expression to become relative to the given row shift using rotations. + template + class expression_relativize_visitor : public boost::static_visitor>> { + private: + int32_t shift; + public: + expression_relativize_visitor(int32_t shift_) : shift(shift_) {} + + static std::optional> + relativize(const crypto3::math::expression& expr, int32_t shift) { + expression_relativize_visitor v = expression_relativize_visitor(shift); + return boost::apply_visitor(v, expr.get_expr()); + } + + std::optional> + operator()(const crypto3::math::term& term) { + std::vector vars = term.get_vars(); + + for(std::size_t i = 0; i < vars.size(); i++) { + vars[i].relative = true; + vars[i].rotation += shift; + if (std::abs(vars[i].rotation) > 1) { + return std::nullopt; + } + } + + return crypto3::math::term(vars, term.get_coeff()); + } + + std::optional> + operator()(const crypto3::math::pow_operation& pow) { + auto term = boost::apply_visitor(*this, pow.get_expr().get_expr()); + if (!term) + return std::nullopt; + return crypto3::math::pow_operation( + *term, + pow.get_power()); + } + + std::optional> + operator()(const crypto3::math::binary_arithmetic_operation& op) { + auto left = boost::apply_visitor(*this, op.get_expr_left().get_expr()); + if (!left) + return std::nullopt; + auto right = boost::apply_visitor(*this, op.get_expr_right().get_expr()); + if (!right) + return std::nullopt; + return crypto3::math::binary_arithmetic_operation( + *left, *right, op.get_op()); + } + }; + + // A visitor for checking that in an expression all variables are absolute or all variables are relative + template + class expression_relativity_check_visitor : public boost::static_visitor { + public: + expression_relativity_check_visitor(bool relativity_) : relativity(relativity_) {} + + static bool is_absolute(const crypto3::math::expression& expr) { + expression_relativity_check_visitor v = expression_relativity_check_visitor(false); + return boost::apply_visitor(v, expr.get_expr()); + } + static bool is_relative(const crypto3::math::expression& expr) { + expression_relativity_check_visitor v = expression_relativity_check_visitor(true); + return boost::apply_visitor(v, expr.get_expr()); + } + + bool operator()(const crypto3::math::term& term) { + bool res = true; + + for(std::size_t i = 0; i < term.get_vars().size(); i++) { + res = res && (term.get_vars()[i].relative == relativity); + } + return res; + } + + bool operator()(const crypto3::math::pow_operation& pow) { + return boost::apply_visitor(*this, pow.get_expr().get_expr()); + } + + bool operator()(const crypto3::math::binary_arithmetic_operation& op) { + bool A_res = boost::apply_visitor(*this, op.get_expr_left().get_expr()); + bool B_res = boost::apply_visitor(*this, op.get_expr_right().get_expr()); + + return A_res && B_res; + } + private: + bool relativity; + }; } // namespace math } // namespace crypto3 } // namespace nil diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp index ddbec4c5ee..b7cf620140 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp @@ -29,6 +29,7 @@ #include +#include #include #include #include @@ -123,10 +124,6 @@ namespace nil { return _witnesses; } - witnesses_container_type move_witnesses() { - return std::move(_witnesses); - } - const ColumnType& operator[](std::uint32_t index) const { if (index < _witnesses.size()) return _witnesses[index]; @@ -207,10 +204,6 @@ namespace nil { return _public_inputs; } - public_input_container_type move_public_inputs() { - return std::move(_public_inputs); - } - std::uint32_t constants_amount() const { return _constants.size(); } @@ -232,10 +225,6 @@ namespace nil { return _constants; } - constant_container_type move_constants() { - return std::move(_constants); - } - constexpr std::uint32_t selectors_amount() const { return _selectors.size(); } @@ -257,11 +246,6 @@ namespace nil { return _selectors; } - selector_container_type move_selectors() { - - return std::move(_selectors); - } - void fill_constant(std::uint32_t index, const ColumnType& column) { BOOST_ASSERT(index < constants_amount()); BOOST_ASSERT(_constants[index].size() == 0); @@ -326,24 +310,29 @@ namespace nil { protected: // These are normally created by the assigner, or read from a file. - private_table_type _private_table; - public_table_type _public_table; + std::shared_ptr _private_table; + std::shared_ptr _public_table; public: virtual ~plonk_table() = default; - plonk_table(private_table_type private_table = {}, - public_table_type public_table = {}) - : _private_table(std::move(private_table)) - , _public_table(std::move(public_table)) { + plonk_table(): + _private_table(std::make_shared>()), + _public_table(std::make_shared>()) { + } + + plonk_table(std::shared_ptr private_table, + std::shared_ptr public_table) + : _private_table(private_table) + , _public_table(public_table) { } plonk_table(std::size_t witnesses_amount, std::size_t public_inputs_amount, std::size_t constants_amount, std::size_t selectors_amount) - : _private_table(witnesses_amount) - , _public_table(public_inputs_amount, constants_amount, selectors_amount) { + : _private_table(std::make_shared(witnesses_amount)) + , _public_table(std::make_shared(public_inputs_amount, constants_amount, selectors_amount)) { } crypto3::zk::snark::plonk_table_description get_description() const { @@ -379,55 +368,55 @@ namespace nil { } const ColumnType& witness(std::uint32_t index) const { - return _private_table.witness(index); + return _private_table->witness(index); } typename field_type::value_type &witness( std::uint32_t witness_index, std::uint32_t row_index) { if (witness_column_size(witness_index) <= row_index) - this->_private_table._witnesses[witness_index].resize(row_index + 1); + this->_private_table->_witnesses[witness_index].resize(row_index + 1); - return this->_private_table._witnesses[witness_index][row_index]; + return this->_private_table->_witnesses[witness_index][row_index]; } const ColumnType& public_input(std::uint32_t index) const { - return _public_table.public_input(index); + return _public_table->public_input(index); } typename field_type::value_type &public_input( std::uint32_t public_input_index, std::uint32_t row_index) { if (public_input_column_size(public_input_index) <= row_index) - this->_public_table._public_inputs[public_input_index].resize(row_index + 1); + this->_public_table->_public_inputs[public_input_index].resize(row_index + 1); - return this->_public_table._public_inputs[public_input_index][row_index]; + return this->_public_table->_public_inputs[public_input_index][row_index]; } const ColumnType& constant(std::uint32_t index) const { - return _public_table.constant(index); + return _public_table->constant(index); } typename field_type::value_type &constant( std::uint32_t constant_index, std::uint32_t row_index) { if (constant_column_size(constant_index) <= row_index) - this->_public_table._constants[constant_index].resize(row_index + 1); + this->_public_table->_constants[constant_index].resize(row_index + 1); - return this->_public_table._constants[constant_index][row_index]; + return this->_public_table->_constants[constant_index][row_index]; } const ColumnType& selector(std::uint32_t index) const { - return _public_table.selector(index); + return _public_table->selector(index); } typename field_type::value_type &selector( std::uint32_t selector_index, std::uint32_t row_index) { if (selector_column_size(selector_index) <= row_index) - this->_public_table._selectors[selector_index].resize(row_index + 1); + this->_public_table->_selectors[selector_index].resize(row_index + 1); - return this->_public_table._selectors[selector_index][row_index]; + return this->_public_table->_selectors[selector_index][row_index]; } void enable_selector(const std::size_t selector_index, const std::size_t row_index) { @@ -436,104 +425,104 @@ namespace nil { } virtual void fill_constant(std::uint32_t index, const ColumnType& column) { - _public_table.fill_constant(index, column); + _public_table->fill_constant(index, column); } virtual void fill_selector(std::uint32_t index, const ColumnType& column) { - _public_table.fill_selector(index, column); + _public_table->fill_selector(index, column); } const witnesses_container_type& witnesses() const { - return _private_table.witnesses(); + return _private_table->witnesses(); } const public_input_container_type& public_inputs() const { - return _public_table.public_inputs(); + return _public_table->public_inputs(); } const constant_container_type& constants() const { - return _public_table.constants(); + return _public_table->constants(); } const selector_container_type& selectors() const { - return _public_table.selectors(); + return _public_table->selectors(); } virtual void resize_witnesses(std::uint32_t new_size) { - _private_table.resize_witnesses(new_size); + _private_table->resize_witnesses(new_size); } virtual void resize_public_inputs(std::uint32_t new_size) { - _public_table.resize_public_inputs(new_size); + _public_table->resize_public_inputs(new_size); } virtual void resize_constants(std::uint32_t new_size) { - _public_table.resize_constants(new_size); + _public_table->resize_constants(new_size); } virtual void resize_selectors(std::uint32_t new_size) { - _public_table.resize_selectors(new_size); + _public_table->resize_selectors(new_size); } const ColumnType& operator[](std::uint32_t index) const { - if (index < _private_table.size()) - return _private_table[index]; - index -= _private_table.size(); - if (index < _public_table.size()) - return _public_table[index]; + if (index < _private_table->size()) + return (*_private_table)[index]; + index -= _private_table->size(); + if (index < _public_table->size()) + return (*_public_table)[index]; throw std::out_of_range("Private table index out of range."); } - const private_table_type& private_table() const { + std::shared_ptr private_table() const { return _private_table; } - private_table_type move_private_table() { - return std::move(_private_table); + std::shared_ptr public_table() const { + return _public_table; } - const public_table_type& public_table() const { - return _public_table; + std::shared_ptr move_private_table() { + return std::move(_private_table); } - public_table_type move_public_table() { + std::shared_ptr move_public_table() { return std::move(_public_table); } std::uint32_t size() const { - return _private_table.size() + _public_table.size(); + return _private_table->size() + _public_table->size(); } std::uint32_t witnesses_amount() const { - return _private_table.witnesses_amount(); + return _private_table->witnesses_amount(); } std::uint32_t witness_column_size(std::uint32_t index) const { - return _private_table.witness_column_size(index); + return _private_table->witness_column_size(index); } std::uint32_t public_inputs_amount() const { - return _public_table.public_inputs_amount(); + return _public_table->public_inputs_amount(); } std::uint32_t public_input_column_size(std::uint32_t index) const { - return _public_table.public_input_column_size(index); + return _public_table->public_input_column_size(index); } std::uint32_t constants_amount() const { - return _public_table.constants_amount(); + return _public_table->constants_amount(); } std::uint32_t constant_column_size(std::uint32_t index) const { - return _public_table.constant_column_size(index); + return _public_table->constant_column_size(index); } std::uint32_t selectors_amount() const { - return _public_table.selectors_amount(); + return _public_table->selectors_amount(); } std::uint32_t selector_column_size(std::uint32_t index) const { - return _public_table.selector_column_size(index); + return _public_table->selector_column_size(index); } std::uint32_t rows_amount() const { @@ -563,7 +552,7 @@ namespace nil { } bool operator==(plonk_table const &other) const { - return _private_table == other._private_table && _public_table == other._public_table; + return *_private_table == *other._private_table && *_public_table == *other._public_table; } friend std::uint32_t basic_padding( diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp index 5913688973..9d281fe50c 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp @@ -90,9 +90,9 @@ namespace nil { : math::expression(coeff) { } - // Constructor for number>. - template - plonk_constraint(const boost::multiprecision::number &coeff) + // Constructor for big_uint. + template + plonk_constraint(const nil::crypto3::multiprecision::big_uint &coeff) : math::expression(coeff) { } @@ -212,6 +212,22 @@ namespace nil { return evaluator.evaluate(); } + + bool is_absolute() const { + return nil::crypto3::math::expression_relativity_check_visitor::is_absolute(*this); + } + bool is_relative() const { + return nil::crypto3::math::expression_relativity_check_visitor::is_relative(*this); + } + + // Returns the rotated version, or nullptr if it can't be rotated. + std::optional rotate(int32_t shift) const { + auto result = nil::crypto3::math::expression_relativize_visitor::relativize( + *this, shift); + if (!result) + return std::nullopt; + return *result; + } }; } // namespace snark } // namespace zk diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp index de9d06dd4f..4095992763 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp @@ -91,7 +91,7 @@ namespace nil { template math::polynomial_dfs - column_polynomial_dfs(plonk_column column_assignment, + column_polynomial_dfs(const plonk_column& column_assignment, std::shared_ptr> domain) { std::size_t d = std::distance(column_assignment.begin(), column_assignment.end()) - 1; @@ -106,7 +106,7 @@ namespace nil { template std::vector> - column_range_polynomial_dfs(std::vector> column_range_assignment, + column_range_polynomial_dfs(const std::vector>& column_range_assignment, std::shared_ptr> domain) { std::size_t columns_amount = column_range_assignment.size(); @@ -114,7 +114,7 @@ namespace nil { for (std::size_t column_index = 0; column_index < columns_amount; column_index++) { columns[column_index] = - column_polynomial_dfs(std::move(column_range_assignment[column_index]), domain); + column_polynomial_dfs(column_range_assignment[column_index], domain); } return columns; diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp index 12584aaf30..41f9b9943c 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp @@ -28,6 +28,7 @@ #ifndef CRYPTO3_ZK_PLONK_LOOKUP_CONSTRAINT_HPP #define CRYPTO3_ZK_PLONK_LOOKUP_CONSTRAINT_HPP +#include #include #include @@ -36,6 +37,61 @@ namespace nil { namespace zk { namespace snark { + template + class lookup_input_constraints : public std::vector> { + public: + using constraint_type = crypto3::zk::snark::plonk_constraint; + using base_type = std::vector; + using expression_type = typename constraint_type::base_type; + + // Using the base class's constructors + using std::vector::vector; // Inherit constructors + + // Constructor to initialize from std::vector + lookup_input_constraints(const base_type& other) + : base_type(other) {} + + // Multiply each element with an expression. + lookup_input_constraints& operator*=(const expression_type& other) { + for (auto& element : *this) { + element *= other; + } + return *this; + } + + lookup_input_constraints operator*(const expression_type& other) { + lookup_input_constraints result = *this; + result *= other; + return result; + } + + // Allow multiplication with any container of the same type. + template + lookup_input_constraints& operator*=(const typename std::enable_if_t< + nil::crypto3::detail::is_range::value && std::is_same::value, + Container>& other) { + if (this->size() < other.size()) + this->resize(other.size()); + + auto it1 = this->begin(); + auto it2 = other.begin(); + for (; it2 != other.end(); ++it1, ++it2) { + *it1 *= *it2; + } + return *this; + } + + template + lookup_input_constraints& operator*(const typename std::enable_if_t< + nil::crypto3::detail::is_range::value && std::is_same::value, + Container>& other) { + lookup_input_constraints result = *this; + result *= other; + return result; + } + }; + + template> class plonk_lookup_constraint { public: @@ -45,9 +101,9 @@ namespace nil { using constraint_type = plonk_constraint; std::size_t table_id; - std::vector lookup_input; + lookup_input_constraints lookup_input; - bool operator== (const plonk_lookup_constraint &other) const { + bool operator==(const plonk_lookup_constraint &other) const { return table_id == other.table_id && lookup_input == other.lookup_input; } }; diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp index 5305bf9472..635f7cd8c2 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp @@ -49,30 +49,30 @@ namespace nil { padded_rows_amount = 8; for (std::uint32_t w_index = 0; w_index < - table._private_table.witnesses_amount(); w_index++) { + table._private_table->witnesses_amount(); w_index++) { - table._private_table._witnesses[w_index].resize(padded_rows_amount, + table._private_table->_witnesses[w_index].resize(padded_rows_amount, FieldType::value_type::zero()); } for (std::uint32_t pi_index = 0; pi_index < - table._public_table.public_inputs_amount(); pi_index++) { + table._public_table->public_inputs_amount(); pi_index++) { - table._public_table._public_inputs[pi_index].resize(padded_rows_amount, + table._public_table->_public_inputs[pi_index].resize(padded_rows_amount, FieldType::value_type::zero()); } for (std::uint32_t c_index = 0; c_index < - table._public_table.constants_amount(); c_index++) { + table._public_table->constants_amount(); c_index++) { - table._public_table._constants[c_index].resize(padded_rows_amount, + table._public_table->_constants[c_index].resize(padded_rows_amount, FieldType::value_type::zero()); } for (std::uint32_t s_index = 0; s_index < - table._public_table.selectors_amount(); s_index++) { + table._public_table->selectors_amount(); s_index++) { - table._public_table._selectors[s_index].resize(padded_rows_amount, + table._public_table->_selectors[s_index].resize(padded_rows_amount, FieldType::value_type::zero()); } @@ -97,27 +97,27 @@ namespace nil { //std::cout << "usable_rows_amount = " << usable_rows_amount << std::endl; //std::cout << "padded_rows_amount = " << padded_rows_amount << std::endl; - for (std::uint32_t w_index = 0; w_index < table._private_table.witnesses_amount(); w_index++) { - table._private_table._witnesses[w_index].resize(usable_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t w_index = 0; w_index < table._private_table->witnesses_amount(); w_index++) { + table._private_table->_witnesses[w_index].resize(usable_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t pi_index = 0; pi_index < table._public_table.public_inputs_amount(); pi_index++) { - table._public_table._public_inputs[pi_index].resize(padded_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t pi_index = 0; pi_index < table._public_table->public_inputs_amount(); pi_index++) { + table._public_table->_public_inputs[pi_index].resize(padded_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t c_index = 0; c_index < table._public_table.constants_amount(); c_index++) { - table._public_table._constants[c_index].resize(padded_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t c_index = 0; c_index < table._public_table->constants_amount(); c_index++) { + table._public_table->_constants[c_index].resize(padded_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t s_index = 0; s_index < table._public_table.selectors_amount(); s_index++) { - table._public_table._selectors[s_index].resize(padded_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t s_index = 0; s_index < table._public_table->selectors_amount(); s_index++) { + table._public_table->_selectors[s_index].resize(padded_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t w_index = 0; w_index < table._private_table.witnesses_amount(); w_index++) { - table._private_table._witnesses[w_index].resize(padded_rows_amount); + for (std::uint32_t w_index = 0; w_index < table._private_table->witnesses_amount(); w_index++) { + table._private_table->_witnesses[w_index].resize(padded_rows_amount); for(std::size_t i = usable_rows_amount; i < padded_rows_amount; i++) { - table._private_table._witnesses[w_index][i] = alg_rnd(); + table._private_table->_witnesses[w_index][i] = alg_rnd(); } } return padded_rows_amount; diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/params.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/params.hpp deleted file mode 100644 index 4975900bf5..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/params.hpp +++ /dev/null @@ -1,98 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_PARAMS_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_PARAMS_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template> - struct standard_settings { - constexpr static const std::size_t num_challenge_bytes = 32; - constexpr static const transcript::HashType hash_type = transcript::HashType::Keccak256; - constexpr static const std::size_t program_width = 3; - constexpr static const std::size_t num_shifted_wire_evaluations = 1; - constexpr static const std::uint64_t wire_shift_settings = 0b0100; - constexpr static const bool uses_quotient_mid = false; - constexpr static const std::uint32_t permutation_shift = 30; - constexpr static const std::uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = true; - constexpr static const std::size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - - template - struct unrolled_standard_settings { - constexpr static const size_t num_challenge_bytes = 16; - constexpr static const transcript::HashType hash_type = transcript::HashType::PedersenBlake2s; - constexpr static const size_t program_width = 3; - constexpr static const size_t num_shifted_wire_evaluations = 1; - constexpr static const uint64_t wire_shift_settings = 0b0100; - constexpr static const bool uses_quotient_mid = false; - constexpr static const uint32_t permutation_shift = 30; - constexpr static const uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = false; - constexpr static const size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - - template> - struct turbo_settings { - constexpr static const size_t num_challenge_bytes = 32; - constexpr static const transcript::HashType hash_type = transcript::HashType::Keccak256; - constexpr static const size_t program_width = 4; - constexpr static const size_t num_shifted_wire_evaluations = 4; - constexpr static const uint64_t wire_shift_settings = 0b1111; - constexpr static const bool uses_quotient_mid = false; - constexpr static const uint32_t permutation_shift = 30; - constexpr static const uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = true; - constexpr static const size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - - template - class unrolled_turbo_settings { - public: - constexpr static const size_t num_challenge_bytes = 16; - constexpr static const transcript::HashType hash_type = transcript::HashType::PedersenBlake2s; - constexpr static const size_t program_width = 4; - constexpr static const size_t num_shifted_wire_evaluations = 4; - constexpr static const uint64_t wire_shift_settings = 0b1111; - constexpr static const bool uses_quotient_mid = false; - constexpr static const uint32_t permutation_shift = 30; - constexpr static const uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = false; - constexpr static const size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_PARAMS_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proof.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proof.hpp deleted file mode 100644 index da18011a35..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proof.hpp +++ /dev/null @@ -1,48 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_PROOF_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_PROOF_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - class plonk_proof; - - template - struct plonk_proof> { - std::vector data; - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_PROOF_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/prover.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/prover.hpp deleted file mode 100644 index 1ffaf587fb..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/prover.hpp +++ /dev/null @@ -1,395 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_PROVER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_PROVER_HPP - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - class plonk_prover; - - template - class plonk_prover> { - using commitment_scheme_type = batched_kate_commitment_scheme<...>; - using constraint_system_type = plonk_constraint_system; - - size_t n; - - std::vector sigma_1_mapping; - std::vector sigma_2_mapping; - std::vector sigma_3_mapping; - - std::vector> random_widgets; - std::vector>> - transition_widgets; - transcript::StandardTranscript transcript; - - std::shared_ptr> key; - std::shared_ptr witness; - std::unique_ptr commitment; - - work_queue queue; - bool uses_quotient_mid; - - plonk_proof proof; - - public: - plonk_prover(std::shared_ptr> input_key, - std::shared_ptr - input_witness, - const transcript::Manifest &input_manifest) : - n(input_key == nullptr ? 0 : input_key->n), - transcript(input_manifest, hash_type, num_challenge_bytes), key(input_key), - witness(input_witness), queue(key.get(), witness.get(), &transcript) { - if (input_witness && witness->wires.count("z") == 0) { - witness->wires.insert({"z", math::polynomial(n, n)}); - } - } - - plonk_prover &operator=(plonk_prover &&other) { - n = other.n; - - random_widgets.resize(0); - transition_widgets.resize(0); - for (size_t i = 0; i < other.random_widgets.size(); ++i) { - random_widgets.emplace_back(std::move(other.random_widgets[i])); - } - for (size_t i = 0; i < other.transition_widgets.size(); ++i) { - transition_widgets.emplace_back(std::move(other.transition_widgets[i])); - } - transcript = other.transcript; - key = std::move(other.key); - witness = std::move(other.witness); - commitment = std::move(other.commitment); - - queue = work_queue(key.get(), witness.get(), &transcript); - return *this; - } - - plonk_prover(plonk_prover &&other) : - n(other.n), transcript(other.transcript), key(std::move(other.key)), - witness(std::move(other.witness)), commitment(std::move(other.commitment)), - queue(key.get(), witness.get(), &transcript) { - for (size_t i = 0; i < other.random_widgets.size(); ++i) { - random_widgets.emplace_back(std::move(other.random_widgets[i])); - } - for (size_t i = 0; i < other.transition_widgets.size(); ++i) { - transition_widgets.emplace_back(std::move(other.transition_widgets[i])); - } - } - - void compute_wire_pre_commitments() { - for (size_t i = 0; i < settings::program_width; ++i) { - std::string wire_tag = "w_" + std::to_string(i + 1); - std::string commit_tag = "W_" + std::to_string(i + 1); - typename TCurve::scalar_field_type::value_type *coefficients = - witness->wires.at(wire_tag).get_coefficients(); - commitment->commit(coefficients, commit_tag, - typename TCurve::scalar_field_type::value_type::zero(), queue); - } - - // add public inputs - const math::polynomial &public_wires_source = key->wire_ffts.at("w_2_fft"); - std::vector public_wires; - for (size_t i = 0; i < key->num_public_inputs; ++i) { - public_wires.push_back(public_wires_source[i]); - } - transcript.add_element("public_inputs", ::to_buffer(public_wires)); - } - - void compute_quotient_pre_commitment() { - // In this method, we compute the commitments to polynomials t_{low}(X), t_{mid}(X) and - // t_{high}(X). Recall, the quotient polynomial t(X) = t_{low}(X) + t_{mid}(X).X^n + - // t_{high}(X).X^{2n} - // - // The reason we split t(X) into three degree-n polynomials is because: - // (i) We want the opening proof polynomials bounded by degree n as the opening algorithm of - // the - // polynomial commitment scheme results in O(n) prover computation. - // (ii) The size of the srs restricts us to compute commitments to polynomials of degree n - // (and disallows for degree 2n and 3n for large n). - // - // The degree of t(X) is determined by the term: - // ((a(X) + βX + γ) (b(X) + βk_1X + γ) (c(X) + βk_2X + γ)z(X)) / Z*_H(X). - // - // Let k = num_roots_cut_out_of_vanishing_polynomial, we have - // deg(t) = (n - 1) * (program_width + 1) - (n - k) - // = n * program_width - program_width - 1 + k - // - // Since we must cut atleast 4 roots from the vanishing polynomial - // (refer to - // ./src/aztec/plonk/proof_system/widgets/random_widgets/permutation_widget_impl.hpp/L247), k = - // 4 => deg(t) = n * program_width - program_width + 3 - // - // For standard plonk, program_width = 3 and thus, deg(t) = 3n. This implies that there would be - // (3n + 1) coefficients of t(X). Now, splitting them into t_{low}(X), t_{mid}(X) and - // t_{high}(X), t_{high} will have (n+1) coefficients while t_{low} and t_{mid} will have n - // coefficients. This means that to commit t_{high}, we need a multi-scalar multiplication of - // size (n+1). Thus, we first compute the commitments to t_{low}(X), t_{mid}(X) using n - // multi-scalar multiplications each and separately compute commitment to t_{high} which is of - // size (n + 1). Note that this must be done only when program_width = 3. - // - // - // NOTE: If in future there is a need to cut off more zeros off the vanishing polynomial, the - // degree of the quotient polynomial t(X) will increase, so the degrees of t_{high}, t_{mid}, - // t_{low} could also increase according to the type of the composer type we are using. - // Currently, for TurboPLONK and Ultra- PLONK, the degree of t(X) is (4n - 1) and hence each - // t_{low}, t_{mid}, t_{high}, t_{higher} each is of degree (n - 1) (and thus contains n - // coefficients). Therefore, we are on the brink! If we need to cut out more zeros off the - // vanishing polynomial, sizes of coefficients of individual t_{i} would change and so we will - // have to ensure the correct size of multi-scalar multiplication in computing the commitments - // to these polynomials. - // - for (size_t i = 0; i < program_width - 1; ++i) { - const size_t offset = n * i; - typename TCurve::scalar_field_type::value_type *coefficients = - &key->quotient_large.get_coefficients()[offset]; - std::string quotient_tag = "T_" + std::to_string(i + 1); - commitment->commit(coefficients, quotient_tag, - typename TCurve::scalar_field_type::value_type::zero(), queue); - } - - typename TCurve::scalar_field_type::value_type *coefficients = - &key->quotient_large.get_coefficients()[(program_width - 1) * n]; - std::string quotient_tag = "T_" + std::to_string(program_width); - typename TCurve::scalar_field_type::value_type program_flag = - program_width == 3 ? typename TCurve::scalar_field_type::value_type::one() : - typename TCurve::scalar_field_type::value_type::zero(); - commitment->commit(coefficients, quotient_tag, program_flag, queue); - } - - void execute_preamble_round() { - queue.flush_queue(); - transcript.add_element("circuit_size", - {static_cast(n >> 24), static_cast(n >> 16), - static_cast(n >> 8), static_cast(n)}); - transcript.add_element("public_input_size", - {static_cast(key->num_public_inputs >> 24), - static_cast(key->num_public_inputs >> 16), - static_cast(key->num_public_inputs >> 8), - static_cast(key->num_public_inputs)}); - transcript.apply_fiat_shamir("init"); - - for (size_t i = 0; i < settings::program_width; ++i) { - // fetch witness wire w_i - std::string wire_tag = "w_" + std::to_string(i + 1); - math::polynomial &wire = witness->wires.at(wire_tag); - - /* - Adding zero knowledge to the witness polynomials. - */ - // To ensure that PLONK is honest-verifier zero-knowledge, we need to ensure that the - // witness polynomials and the permutation polynomial look uniformly random to an adversary. - // To make the witness polynomials a(X), b(X) and c(X) uniformly random, we need to add 2 - // random blinding factors into each of them. i.e. a'(X) = a(X) + (r_1X + r_2) where r_1 and - // r_2 are uniformly random scalar field elements. A natural question is: Why do we need 2 - // random scalars in witness polynomials? The reason is: our witness polynomials are - // evaluated at only 1 point (\scripted{z}), so adding a random degree-1 polynomial - // suffices. - // - // NOTE: In TurboPlonk and UltraPlonk, the witness polynomials are evaluated at 2 points and - // thus we need to add 3 random scalars in them. - // - // We start adding random scalars in `wire` polynomials from index (n - k) upto (n - k + 2). - // For simplicity, we add 3 random scalars even for standard plonk (recall, just 2 of them - // are required) since an additional random scalar would not affect things. - // - // NOTE: If in future there is a need to cut off more zeros off the vanishing polynomial, - // this method will not change. This must be changed only if the number of evaluations of - // witness polynomials change. - // - const size_t w_randomness = 3; - ASSERT(w_randomness < settings::num_roots_cut_out_of_vanishing_polynomial); - for (size_t k = 0; k < w_randomness; ++k) { - wire.at(n - settings::num_roots_cut_out_of_vanishing_polynomial + k) = - algebra::random_element(typename TCurve::scalar_field_type); - } - - math::polynomial &wire_fft = key->wire_ffts.at(wire_tag + "_fft"); - math::polynomial_arithmetic::copy_polynomial(&wire[0], &wire_fft[0], n, n); - queue.add_to_queue({ - work_queue::WorkType::IFFT, - nullptr, - wire_tag, - typename TCurve::scalar_field_type::value_type::zero(), - 0, - }); - } - } - - void execute_first_round() { - queue.flush_queue(); - compute_wire_pre_commitments(); - for (auto &widget : random_widgets) { - widget->compute_round_commitments(transcript, 1, queue); - } - } - - void execute_second_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("eta"); - for (auto &widget : random_widgets) { - widget->compute_round_commitments(transcript, 2, queue); - } - } - - void execute_third_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("beta"); - for (auto &widget : random_widgets) { - widget->compute_round_commitments(transcript, 3, queue); - } - - for (size_t i = 0; i < settings::program_width; ++i) { - std::string wire_tag = "w_" + std::to_string(i + 1); - queue.add_to_queue({ - work_queue::WorkType::FFT, - nullptr, - wire_tag, - typename TCurve::scalar_field_type::value_type::zero(), - 0, - }); - } - } - - void execute_fourth_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("alpha"); - - typename TCurve::scalar_field_type::value_type alpha_base = - typename TCurve::scalar_field_type::value_type::serialize_from_buffer( - transcript.get_challenge("alpha").begin()); - - for (auto &widget : random_widgets) { - alpha_base = widget->compute_quotient_contribution(alpha_base, transcript); - } - for (auto &widget : transition_widgets) { - alpha_base = widget->compute_quotient_contribution(alpha_base, transcript); - } - typename TCurve::scalar_field_type::value_type *q_mid = &key->quotient_mid[0]; - typename TCurve::scalar_field_type::value_type *q_large = &key->quotient_large[0]; - - if constexpr (settings::uses_quotient_mid) { - math::polynomial_arithmetic::divide_by_pseudo_vanishing_polynomial( - key->quotient_mid.get_coefficients(), key->small_domain, key->mid_domain); - } - math::polynomial_arithmetic::divide_by_pseudo_vanishing_polynomial( - key->quotient_large.get_coefficients(), key->small_domain, key->large_domain); - if (settings::uses_quotient_mid) { - key->quotient_mid.coset_ifft(key->mid_domain); - } - key->quotient_large.coset_ifft(key->large_domain); - if (settings::uses_quotient_mid) { - ITERATE_OVER_DOMAIN_START(key->mid_domain); - q_large[i] += q_mid[i]; - ITERATE_OVER_DOMAIN_END; - } - compute_quotient_pre_commitment(); - } - - void execute_fifth_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("z"); // end of 4th round - compute_linearisation_coefficients(); - } - - void execute_sixth_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("nu"); - - commitment->batch_open(transcript, queue, key, witness); - } - - typename TCurve::scalar_field_type::value_type compute_linearisation_coefficients() { - - typename TCurve::scalar_field_type::value_type zeta = crypto3::marshalling::algebra < - typename TCurve::scalar_field_type >> - (transcript.get_challenge("z").begin()); - - math::polynomial &r = key->linear_poly; - - commitment->add_opening_evaluations_to_transcript(transcript, key, witness, false); - typename TCurve::scalar_field_type::value_type t_eval = - key->quotient_large.evaluate(zeta, 4 * n); - - if constexpr (use_linearisation) { - typename TCurve::scalar_field_type::value_type alpha_base = - typename TCurve::scalar_field_type::value_type::serialize_from_buffer( - transcript.get_challenge("alpha").begin()); - - for (auto &widget : random_widgets) { - alpha_base = widget->compute_linear_contribution(alpha_base, transcript, r); - } - for (auto &widget : transition_widgets) { - alpha_base = widget->compute_linear_contribution(alpha_base, transcript, &r[0]); - } - typename TCurve::scalar_field_type::value_type linear_eval = r.evaluate(zeta, n); - transcript.add_element("r", linear_eval.to_buffer()); - } - transcript.add_element("t", t_eval.to_buffer()); - return t_eval; - } - - plonk_proof &export_proof() { - proof.proof_data = transcript.export_transcript(); - return proof; - } - - plonk_proof &construct_proof() { - execute_preamble_round(); - queue.process_queue(); - execute_first_round(); - queue.process_queue(); - execute_second_round(); - queue.process_queue(); - execute_third_round(); - queue.process_queue(); - execute_fourth_round(); - queue.process_queue(); - execute_fifth_round(); - execute_sixth_round(); - queue.process_queue(); - return export_proof(); - } - - void reset() { - transcript::Manifest manifest = transcript.get_manifest(); - transcript = transcript::StandardTranscript(manifest, settings::hash_type, - settings::num_challenge_bytes); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_PROVER_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proving_key.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proving_key.hpp deleted file mode 100644 index c6d07e51ba..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proving_key.hpp +++ /dev/null @@ -1,298 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_PLONK_BATCHED_KATE_PROVING_KEY_HPP -#define CRYPTO3_PLONK_BATCHED_KATE_PROVING_KEY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - struct plonk_proving_key_data; - - template - struct plonk_proving_key_data> { - std::uint32_t n; - std::uint32_t num_public_inputs; - bool contains_recursive_proof; - std::vector recursive_proof_public_input_indices; - std::map constraint_selectors; - std::map constraint_selector_ffts; - std::map permutation_selectors; - std::map permutation_selectors_lagrange_base; - std::map permutation_selector_ffts; - }; - - inline bool operator==(plonk_proving_key_data const &lhs, plonk_proving_key_data const &rhs) { - return lhs.n == rhs.n && lhs.num_public_inputs == rhs.num_public_inputs && - lhs.constraint_selectors == rhs.constraint_selectors && - lhs.constraint_selector_ffts == rhs.constraint_selector_ffts && - lhs.permutation_selectors == rhs.permutation_selectors && - lhs.permutation_selectors_lagrange_base == rhs.permutation_selectors_lagrange_base && - lhs.permutation_selector_ffts == rhs.permutation_selector_ffts && - lhs.contains_recursive_proof == rhs.contains_recursive_proof && - lhs.recursive_proof_public_input_indices == rhs.recursive_proof_public_input_indices; - } - - template - class plonk_proving_key; - - template - class plonk_proving_key> { - constexpr static const std::size_t scalar_bytes = TCurve::scalar_field_type::value_bits / BYTE_BITS; - - std::size_t n; - std::size_t num_public_inputs; - - std::map constraint_selectors; - std::map constraint_selectors_lagrange_base; - std::map constraint_selector_ffts; - - std::map permutation_selectors; - std::map permutation_selectors_lagrange_base; - std::map permutation_selector_ffts; - - std::map wire_ffts; - - math::evaluation_domain small_domain; - math::evaluation_domain mid_domain; - math::evaluation_domain large_domain; - - std::shared_ptr reference_string; - - math::polynomial lagrange_1; - math::polynomial opening_poly; - math::polynomial shifted_opening_poly; - math::polynomial linear_poly; - - math::polynomial quotient_mid; - math::polynomial quotient_large; - - algebra::scalar_multiplication::pippenger_runtime_state pippenger_runtime_state; - - std::vector polynomial_manifest; - - bool contains_recursive_proof = false; - std::vector recursive_proof_public_input_indices; - static constexpr std::size_t min_thread_block = 4UL; - - public: - enum LookupType { - NONE, - ABSOLUTE_LOOKUP, - RELATIVE_LOOKUP, - }; - - plonk_proving_key(const std::size_t num_gates, - const std::size_t num_inputs, - std::shared_ptr const &crs) : - n(num_gates), - num_public_inputs(num_inputs), small_domain(n, n), - mid_domain(2 * n, n > min_thread_block ? n : 2 * n), - large_domain(4 * n, n > min_thread_block ? n : 4 * n), reference_string(crs), - pippenger_runtime_state(n + 1) { - init(); - } - - plonk_proving_key(plonk_proving_key_data &&data, - std::shared_ptr const &crs) : - n(data.n), - num_public_inputs(data.num_public_inputs), - constraint_selectors(std::move(data.constraint_selectors)), - constraint_selector_ffts(std::move(data.constraint_selector_ffts)), - permutation_selectors(std::move(data.permutation_selectors)), - permutation_selectors_lagrange_base(std::move(data.permutation_selectors_lagrange_base)), - permutation_selector_ffts(std::move(data.permutation_selector_ffts)), small_domain(n, n), - mid_domain(2 * n, n > min_thread_block ? n : 2 * n), - large_domain(4 * n, n > min_thread_block ? n : 4 * n), reference_string(crs), - pippenger_runtime_state(n + 1), contains_recursive_proof(data.contains_recursive_proof), - recursive_proof_public_input_indices(std::move(data.recursive_proof_public_input_indices)) { - init(); - // TODO: Currently only supporting TurboComposer in serialization! - std::copy(turbo_polynomial_manifest, - turbo_polynomial_manifest + 20, - std::back_inserter(polynomial_manifest)); - } - - void init() { - if (n != 0) { - small_domain.compute_lookup_table(); - mid_domain.compute_lookup_table(); - large_domain.compute_lookup_table(); - } - - reset(); - - lagrange_1 = math::polynomial(4 * n, 4 * n + 8); - math::polynomial_arithmetic::compute_lagrange_polynomial_fft( - lagrange_1.get_coefficients(), small_domain, large_domain); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[0]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[1]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[2]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[3]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[4]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[5]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[6]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[7]); - - // The opening polynomial W_{\script{z}}(X) in round 5 of prover's algorithm has degree n. - // However, as explained in - // (./src/aztec/plonk/proof_system/prover/prover.cpp/ProverBase::compute_quotient_pre_commitment), - // for standard plonk (program_width = 3) and number of roots cut out of the vanishing - // polynomial is 4, the degree of the quotient polynomial t(X) is 3n. Thus, the number of - // coefficients in t_{high} is (n + 1). But our prover algorithm assumes that each of t_{low}, - // t_{mid}, t_{high} is of degree (n - 1) (i.e. n coefficients in each). Note that: - // deg(W_{\script{z}}) = max{ deg(t_{low}), deg(t_{mid}), deg(t_{high}), deg(a), deg(b), ... } - // => deg(W_{\script{z}}) = n + 1 when program_width is 3! - // Therefore, when program_width is 3, we need to allow the degree of the opening polynomial to - // be (n + 1) and NOT n. - // - opening_poly = math::polynomial(n, n); - shifted_opening_poly = math::polynomial(n, n); - linear_poly = math::polynomial(n, n); - - quotient_mid = math::polynomial(2 * n, 2 * n); - quotient_large = math::polynomial(4 * n, 4 * n); - - memset((void *)&opening_poly[0], 0x00, scalar_bytes * n); - memset((void *)&shifted_opening_poly[0], 0x00, scalar_bytes * n); - memset((void *)&linear_poly[0], 0x00, scalar_bytes * n); - memset((void *)"ient_mid[0], 0x00, scalar_bytes * 2 * n); - memset((void *)"ient_large[0], 0x00, scalar_bytes * 4 * n); - } - - void reset() { - wire_ffts.clear(); - - opening_poly = math::polynomial(n, n); - - math::polynomial w_1_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial w_2_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial w_3_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial w_4_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial z_fft = math::polynomial(4 * n + 4, 4 * n + 4); - - memset((void *)&w_1_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&w_2_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&w_3_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&w_4_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&z_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - - wire_ffts.insert({"w_1_fft", std::move(w_1_fft)}); - wire_ffts.insert({"w_2_fft", std::move(w_2_fft)}); - wire_ffts.insert({"w_3_fft", std::move(w_3_fft)}); - wire_ffts.insert({"w_4_fft", std::move(w_4_fft)}); - wire_ffts.insert({"z_fft", std::move(z_fft)}); - } - - plonk_proving_key &operator=(const plonk_proving_key &other) { - n = other.n; - num_public_inputs = other.num_public_inputs; - constraint_selectors = std::move(other.constraint_selectors); - constraint_selectors_lagrange_base = std::move(other.constraint_selectors_lagrange_base); - constraint_selector_ffts = std::move(other.constraint_selector_ffts); - permutation_selectors = std::move(other.permutation_selectors); - permutation_selectors_lagrange_base = std::move(other.permutation_selectors_lagrange_base); - permutation_selector_ffts = std::move(other.permutation_selector_ffts); - wire_ffts = std::move(other.wire_ffts); - small_domain = std::move(other.small_domain); - mid_domain = std::move(other.mid_domain); - large_domain = std::move(other.large_domain); - reference_string = std::move(other.reference_string); - lagrange_1 = std::move(other.lagrange_1); - opening_poly = std::move(other.opening_poly); - shifted_opening_poly = std::move(other.shifted_opening_poly); - linear_poly = std::move(other.linear_poly); - pippenger_runtime_state = std::move(other.pippenger_runtime_state); - polynomial_manifest = std::move(other.polynomial_manifest); - contains_recursive_proof = other.contains_recursive_proof; - recursive_proof_public_input_indices = std::move(other.recursive_proof_public_input_indices); - - return *this; - } - - plonk_proving_key(const plonk_proving_key &other) : - n(other.n), num_public_inputs(other.num_public_inputs), - constraint_selectors(other.constraint_selectors), - constraint_selectors_lagrange_base(other.constraint_selectors_lagrange_base), - constraint_selector_ffts(other.constraint_selector_ffts), - permutation_selectors(other.permutation_selectors), - permutation_selectors_lagrange_base(other.permutation_selectors_lagrange_base), - permutation_selector_ffts(other.permutation_selector_ffts), wire_ffts(other.wire_ffts), - small_domain(other.small_domain), mid_domain(other.mid_domain), - large_domain(other.large_domain), reference_string(other.reference_string), - lagrange_1(other.lagrange_1), opening_poly(other.opening_poly), - shifted_opening_poly(other.shifted_opening_poly), linear_poly(other.linear_poly), - quotient_mid(other.quotient_mid), quotient_large(other.quotient_large), - pippenger_runtime_state(n + 1), polynomial_manifest(other.polynomial_manifest), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(other.recursive_proof_public_input_indices) { - } - - plonk_proving_key(plonk_proving_key &&other) : - n(other.n), num_public_inputs(other.num_public_inputs), - constraint_selectors(other.constraint_selectors), - constraint_selectors_lagrange_base(other.constraint_selectors_lagrange_base), - constraint_selector_ffts(other.constraint_selector_ffts), - permutation_selectors(other.permutation_selectors), - permutation_selectors_lagrange_base(other.permutation_selectors_lagrange_base), - permutation_selector_ffts(other.permutation_selector_ffts), wire_ffts(other.wire_ffts), - small_domain(std::move(other.small_domain)), mid_domain(std::move(other.mid_domain)), - large_domain(std::move(other.large_domain)), - reference_string(std::move(other.reference_string)), lagrange_1(std::move(other.lagrange_1)), - opening_poly(std::move(other.opening_poly)), - shifted_opening_poly(std::move(other.shifted_opening_poly)), - linear_poly(std::move(other.linear_poly)), - pippenger_runtime_state(std::move(other.pippenger_runtime_state)), - polynomial_manifest(std::move(other.polynomial_manifest)), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(std::move(other.recursive_proof_public_input_indices)) { - } - - std::size_t size_in_bits() const { - ? ? ? ; - } - - bool operator==(const plonk_proving_key &other) const { - return this->n == other.n && this->num_public_inputs == other.num_public_inputs && - this->constraint_selectors == other.constraint_selectors && - this->constraint_selector_ffts == other.constraint_selector_ffts && - this->permutation_selectors == other.permutation_selectors && - this->permutation_selectors_lagrange_base == other.permutation_selectors_lagrange_base && - this->permutation_selector_ffts == other.permutation_selector_ffts && - this->contains_recursive_proof == other.contains_recursive_proof && - this->recursive_proof_public_input_indices == other.recursive_proof_public_input_indices; - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_PLONK_BATCHED_KATE_PROVING_KEY_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verification_key.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verification_key.hpp deleted file mode 100644 index 7062da58eb..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verification_key.hpp +++ /dev/null @@ -1,153 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_PLONK_BATCHED_KATE_VERIFICATION_KEY_HPP -#define CRYPTO3_PLONK_BATCHED_KATE_VERIFICATION_KEY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - struct plonk_verification_key_data; - - template - struct plonk_verification_key_data> { - std::uint32_t n; - std::uint32_t num_public_inputs; - std::map::value_type> constraint_selectors; - std::map::value_type> permutation_selectors; - bool contains_recursive_proof = false; - std::vector recursive_proof_public_input_indices; - }; - - inline bool operator==(plonk_verification_key_data const &lhs, plonk_verification_key_data const &rhs) { - return lhs.n == rhs.n && lhs.num_public_inputs == rhs.num_public_inputs && - lhs.constraint_selectors == rhs.constraint_selectors && - lhs.permutation_selectors == rhs.permutation_selectors; - } - - template - class plonk_verification_key; - - template - class plonk_verification_key> { - using commitment_scheme_type = batched_kate_commitment_scheme<...>; - - constexpr static const std::size_t scalar_bytes = TCurve::scalar_field_type::value_bits / BYTE_BITS; - - std::size_t n; - std::size_t num_public_inputs; - - math::evaluation_domain domain; - - std::shared_ptr reference_string; - - std::map::value_type> constraint_selectors; - - std::map::value_type> permutation_selectors; - - std::vector polynomial_manifest; - - // this is a member variable because stdlib::field has no `pow` method, we - // have to compute this differently for the normal and recursive settings respectively - typename TCurve::scalar_field_type::value_type z_pow_n; - - bool contains_recursive_proof = false; - std::vector recursive_proof_public_input_indices; - std::size_t program_width = 3; - - public: - plonk_verification_key(const std::size_t num_gates, - const std::size_t num_inputs, - std::shared_ptr const &crs) : - n(num_gates), - num_public_inputs(num_inputs), domain(n), reference_string(crs) { - } - - plonk_verification_key(plonk_verification_key_data &&data, - std::shared_ptr const &crs) : - n(data.n), - num_public_inputs(data.num_public_inputs), domain(n), reference_string(crs), - constraint_selectors(std::move(data.constraint_selectors)), - permutation_selectors(std::move(data.permutation_selectors)), - contains_recursive_proof(data.contains_recursive_proof), - recursive_proof_public_input_indices(std::move(data.recursive_proof_public_input_indices)) { - // TODO: Currently only supporting TurboComposer in serialization! - std::copy(turbo_polynomial_manifest, - turbo_polynomial_manifest + 20, - std::back_inserter(polynomial_manifest)); - } - - plonk_verification_key &operator=(plonk_verification_key &&other) { - n = other.n; - num_public_inputs = other.num_public_inputs; - reference_string = std::move(other.reference_string); - constraint_selectors = std::move(other.constraint_selectors); - permutation_selectors = std::move(other.permutation_selectors); - polynomial_manifest = std::move(other.polynomial_manifest); - domain = std::move(other.domain); - contains_recursive_proof = (other.contains_recursive_proof); - recursive_proof_public_input_indices = std::move(other.recursive_proof_public_input_indices); - return *this; - } - - plonk_verification_key(const plonk_verification_key &other) : - n(other.n), num_public_inputs(other.num_public_inputs), domain(other.domain), - reference_string(other.reference_string), constraint_selectors(other.constraint_selectors), - permutation_selectors(other.permutation_selectors), - polynomial_manifest(other.polynomial_manifest), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(other.recursive_proof_public_input_indices) { - } - - plonk_verification_key(plonk_verification_key &&other) : - n(other.n), num_public_inputs(other.num_public_inputs), domain(other.domain), - reference_string(other.reference_string), constraint_selectors(other.constraint_selectors), - permutation_selectors(other.permutation_selectors), - polynomial_manifest(other.polynomial_manifest), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(other.recursive_proof_public_input_indices) { - } - - std::size_t size_in_bits() const { - ? ? ? ; - } - - bool operator==(const plonk_verification_key &other) const { - return this->n == rhs.n && this->num_public_inputs == rhs.num_public_inputs && - this->constraint_selectors == rhs.constraint_selectors && - this->permutation_selectors == rhs.permutation_selectors; - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_PLONK_BATCHED_KATE_VERIFICATION_KEY_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verifier.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verifier.hpp deleted file mode 100644 index a6bde2e252..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verifier.hpp +++ /dev/null @@ -1,293 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_VERIFIER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_VERIFIER_HPP - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - class plonk_verifier; - - template - class plonk_verifier> { - using commitment_scheme_type = batched_kate_commitment_scheme<...>; - using constraint_system_type = plonk_constraint_system; - - transcript::Manifest manifest; - - std::shared_ptr> key; - std::map::value_type> kate_g1_elements; - std::map kate_fr_elements; - std::unique_ptr commitment; - - public: - plonk_verifier(std::shared_ptr> verifier_key, - const transcript::Manifest &input_manifest) : - manifest(input_manifest), - key(verifier_key) { - } - - plonk_verifier &operator=(plonk_verifier &&other) { - key = other.key; - manifest = other.manifest; - commitment = (std::move(other.commitment)); - kate_g1_elements.clear(); - kate_fr_elements.clear(); - return *this; - } - - plonk_verifier(plonk_verifier &&other) : - manifest(other.manifest), key(other.key), commitment(std::move(other.commitment)) { - } - - bool validate_commitments() { - // TODO - return true; - } - - bool validate_scalars() { - // TODO - return true; - } - - bool process(const plonk_proof &proof) { - // This function verifies a PLONK proof for given program settings. - // A PLONK proof for standard PLONK with linearisation as on page 31 in the paper is of the - // form: - // - // π_SNARK = { [a]_1,[b]_1,[c]_1,[z]_1,[t_{low}]_1,[t_{mid}]_1,[t_{high}]_1,[W_z]_1,[W_zω]_1 - // \in G, - // a_eval, b_eval, c_eval, sigma1_eval, sigma2_eval, r_eval, z_eval_omega \in F } - // - // Proof π_SNARK must be first added in the transcrip with other program settings. - // - key->program_width = program_settings::program_width; - transcript::StandardTranscript transcript = - transcript::StandardTranscript(proof.proof_data, - manifest, - program_settings::hash_type, - program_settings::num_challenge_bytes); - - // Compute challenges using Fiat-Shamir heuristic from transcript - transcript.add_element( - "circuit_size", - {static_cast(key->n >> 24), static_cast(key->n >> 16), - static_cast(key->n >> 8), static_cast(key->n)}); - transcript.add_element("public_input_size", - {static_cast(key->num_public_inputs >> 24), - static_cast(key->num_public_inputs >> 16), - static_cast(key->num_public_inputs >> 8), - static_cast(key->num_public_inputs)}); - transcript.apply_fiat_shamir("init"); - transcript.apply_fiat_shamir("eta"); - transcript.apply_fiat_shamir("beta"); - transcript.apply_fiat_shamir("alpha"); - transcript.apply_fiat_shamir("z"); - - const typename TCurve::scalar_field_type::value_type alpha = - crypto3::marshalling::algebra( - transcript.get_challenge("alpha").begin()); - const typename TCurve::scalar_field_type::value_type zeta = - crypto3::marshalling::algebra( - transcript.get_challenge("z").begin()); - - // Compute the evaluations of the lagrange polynomials L_1(X) and L_{n - k}(X) at X = zeta. - // Here k = num_roots_cut_out_of_the_vanishing_polynomial and n is the size of the evaluation - // domain. - const auto lagrange_evals = - math::polynomial_arithmetic::get_lagrange_evaluations(zeta, key->domain); - - // Step 8: Compute quotient polynomial evaluation at zeta - // r_eval − ((a_eval + β.sigma1_eval + γ)(b_eval + β.sigma2_eval + γ)(c_eval + γ) - // z_eval_omega)α − L_1(zeta).α^{3} + (z_eval_omega - ∆_{PI}).L_{n-k}(zeta)α^{2} - // t_eval = - // -------------------------------------------------------------------------------------------------------------------------------------------------------------- - // Z_H*(zeta) - // where Z_H*(X) is the modified vanishing polynomial. - // The `compute_quotient_evaluation_contribution` function computes the numerator of t_eval - // according to the program settings for standard/turbo/ultra PLONK. - // - key->z_pow_n = zeta; - for (size_t i = 0; i < key->domain.log2_size; ++i) { - key->z_pow_n *= key->z_pow_n; - } - typename TCurve::scalar_field_type::value_type t_eval = - typename TCurve::scalar_field_type::value_type::zero(); - program_settings::compute_quotient_evaluation_contribution( - key.get(), alpha, transcript, t_eval); - t_eval *= lagrange_evals.vanishing_poly.invert(); - transcript.add_element("t", t_eval.to_buffer()); - - transcript.apply_fiat_shamir("nu"); - transcript.apply_fiat_shamir("separator"); - const typename TCurve::scalar_field_type::value_type separator_challenge = - crypto3::marshalling::algebra( - transcript.get_challenge("separator").begin()); - - // In the following function, we do the following computation. - // Step 10: Compute batch opening commitment [F]_1 - // [F] := [t_{low}]_1 + \zeta^{n}.[tmid]1 + \zeta^{2n}.[t_{high}]_1 - // + [D]_1 + \nu_{a}.[a]_1 + \nu_{b}.[b]_1 + \nu_{c}.[c]_1 - // + \nu_{\sigma1}.[s_{\sigma_1}]1 + \nu_{\sigma2}.[s_{\sigma_2}]1 - // - // We do not compute [D]_1 term in this method as the information required to compute [D]_1 - // in inadequate as far as this KateCommitmentScheme class is concerned. - // - // Step 11: Compute batch evaluation commitment [E]_1 - // [E]_1 := (t_eval + \nu_{r}.r_eval + \nu_{a}.a_eval + \nu_{b}.b_eval - // \nu_{c}.c_eval + \nu_{\sigma1}.sigma1_eval + \nu_{\sigma2}.sigma2_eval + - // nu_z_omega.separator.z_eval_omega) . [1]_1 - // - // Note that we do not actually compute the scalar multiplications but just accumulate the - // scalars and the group elements in different vectors. - // - commitment->batch_verify(transcript, kate_g1_elements, kate_fr_elements, key); - - // Step 9: Compute partial opening batch commitment [D]_1: - // [D]_1 = (a_eval.b_eval.[qM]_1 + a_eval.[qL]_1 + b_eval.[qR]_1 + c_eval.[qO]_1 + - // [qC]_1) * nu_{linear} * α - // >> selector polynomials - // + [(a_eval + β.z + γ)(b_eval + β.k_1.z + γ)(c_eval + β.k_2.z + γ).α + - // L_1(z).α^{3}].nu_{linear}.[z]_1 >> grand product perm polynomial - // - (a_eval + β.sigma1_eval + γ)(b_eval + β.sigma2_eval + - // γ)α.β.nu_{linear}.z_omega_eval.[sigma3]_1 >> last perm polynomial - // - // Again, we dont actually compute the MSMs and just accumulate scalars and group elements and - // postpone MSM to last step. - // - append_scalar_multiplication_inputs(key.get(), alpha, transcript, kate_fr_elements); - - // Fetch the group elements [W_z]_1,[W_zω]_1 from the transcript - typename TCurve::g1_type::value_type PI_Z = - crypto3::marshalling::algebra::value_type>( - &transcript.get_element("PI_Z")[0]); - typename TCurve::g1_type::value_type PI_Z_OMEGA = - crypto3::marshalling::algebra::value_type>( - &transcript.get_element("PI_Z_OMEGA")[0]); - - // Accumulate pairs of scalars and group elements which would be used in the final pairing - // check. - kate_g1_elements.insert({"PI_Z_OMEGA", PI_Z_OMEGA}); - kate_fr_elements.insert({"PI_Z_OMEGA", zeta * key->domain.root * separator_challenge}); - - kate_g1_elements.insert({"PI_Z", PI_Z}); - kate_fr_elements.insert({"PI_Z", zeta}); - - validate_commitments(); - validate_scalars(); - - std::vector scalars; - std::vector::value_type> elements; - - for (const auto &[key, value] : kate_g1_elements) { - if (value.on_curve()) { - scalars.emplace_back(kate_fr_elements.at(key)); - elements.emplace_back(value); - } - } - - size_t num_elements = elements.size(); - elements.resize(num_elements * 2); - algebra::scalar_multiplication::generate_pippenger_point_table( - &elements[0], &elements[0], num_elements); - scalar_multiplication::pippenger_runtime_state state(num_elements); - - typename TCurve::g1_type<>::value_type P[2]; - - P[0] = - alegbra::scalar_multiplication::pippenger(&scalars[0], &elements[0], num_elements, state); - P[1] = -(typename TCurve::g1_type<>::value_type(PI_Z_OMEGA) * separator_challenge + PI_Z); - - if (key->contains_recursive_proof) { - assert(key->recursive_proof_public_input_indices.size() == 16); - const auto &inputs = transcript.get_field_element_vector("public_inputs"); - const auto recover_fq_from_public_inputs = - [&inputs](const size_t idx0, const size_t idx1, const size_t idx2, const size_t idx3) { - const uint256_t l0 = inputs[idx0]; - const uint256_t l1 = inputs[idx1]; - const uint256_t l2 = inputs[idx2]; - const uint256_t l3 = inputs[idx3]; - - const uint256_t limb = l0 + (l1 << NUM_LIMB_BITS_IN_FIELD_SIMULATION) + - (l2 << (NUM_LIMB_BITS_IN_FIELD_SIMULATION * 2)) + - (l3 << (NUM_LIMB_BITS_IN_FIELD_SIMULATION * 3)); - return typename TCurve::base_field_type::value_type(limb); - }; - - const auto recursion_separator_challenge = - transcript.get_challenge_field_element("separator").sqr(); - - const typename TCurve::base_field_type::value_type x0 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[0], - key->recursive_proof_public_input_indices[1], - key->recursive_proof_public_input_indices[2], - key->recursive_proof_public_input_indices[3]); - const typename TCurve::base_field_type::value_type y0 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[4], - key->recursive_proof_public_input_indices[5], - key->recursive_proof_public_input_indices[6], - key->recursive_proof_public_input_indices[7]); - const typename TCurve::base_field_type::value_type x1 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[8], - key->recursive_proof_public_input_indices[9], - key->recursive_proof_public_input_indices[10], - key->recursive_proof_public_input_indices[11]); - const typename TCurve::base_field_type::value_type y1 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[12], - key->recursive_proof_public_input_indices[13], - key->recursive_proof_public_input_indices[14], - key->recursive_proof_public_input_indices[15]); - P[0] += typename TCurve::g1_type<>::value_type(x0, y0, 1) * recursion_separator_challenge; - P[1] += typename TCurve::g1_type<>::value_type(x1, y1, 1) * recursion_separator_challenge; - } - - typename TCurve::g1_type<>::value_type::batch_normalize(P, 2); - - typename TCurve::g1_type::value_type P_affine[2] { - {P[0].x, P[0].y}, - {P[1].x, P[1].y}, - }; - - // The final pairing check of step 12. - typename TCurve::gt_type::value_type result = - algebra::pairing::reduced_ate_pairing_batch_precomputed( - P_affine, key->reference_string->get_precomputed_g2_lines(), 2); - - return (result == typename TCurve::gt_type::value_type::one()); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_VERIFIER_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/alphas.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/alphas.hpp deleted file mode 100644 index 148668c6a6..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/alphas.hpp +++ /dev/null @@ -1,93 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ALPHAS_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ALPHAS_HPP - -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - enum argument_type; - - template - struct Alphas { - /// The next power of alpha to use - /// the end result will be [1, alpha^{next_power - 1}] - int next_power; - /// The mapping between constraint types and powers of alpha - // std::map> mapping; - /// The powers of alpha: 1, alpha, alpha^2, etc. - /// If set to [Some], you can't register new constraints. - std::vector alphas; - std::unordered_map> mapping; - - Alphas() : next_power(0) {} - // Create alphas from 0 to next_power - 1 - - void register_(argument_type arg, int power){ - if(mapping.find(arg) == mapping.end()){ - mapping[arg] = std::make_pair(next_power, power); - } - - next_power += power; - } - - void instantiate(typename FieldType::value_type alpha) { - typename FieldType::value_type last_power = FieldType::value_type::one(); - alphas.clear(); - alphas.reserve(next_power); - alphas.push_back(last_power); - for (size_t i = 1; i < next_power; ++i) { - alphas.push_back(alphas.back() * alpha); - // last_power *= alpha; - // alphas[i + 1] = last_power; - } - } - - // Return num alphas - std::vector get_alphas(argument_type arg, std::size_t num) { - if(mapping.find(arg) == mapping.end()){ - assert(false); - } - std::pair range = mapping[arg]; - BOOST_ASSERT_MSG(num <= range.second, "Not enough alphas to return"); - - return std::vector(alphas.begin() + range.first, alphas.begin() + range.first + num); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -}; // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ALPHAS_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constants.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constants.hpp deleted file mode 100644 index d9f0f08099..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constants.hpp +++ /dev/null @@ -1,51 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_CONSTANTS_HPP -#define CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_CONSTANTS_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - struct kimchi_constant { - constexpr static const std::size_t CHALLENGE_LENGTH_IN_LIMBS = 2; - constexpr static const std::size_t PERMUTES = 7; - constexpr static const std::size_t CONSTRAINTS = 3; - constexpr static const std::size_t COLUMNS = 15; - constexpr static const std::size_t SPONGE_CAPACITY = 1; - constexpr static const std::size_t SPONGE_RATE = 2; - constexpr static const std::size_t ZK_ROWS = 3; - }; - } // namespace components - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_CONSTANTS_HPP \ No newline at end of file diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constraints.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constraints.hpp deleted file mode 100644 index 54024379d1..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constraints.hpp +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_CONSTRAINTS_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_CONSTRAINTS_HPP - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct ConstraintSystem{ - typedef typename FieldType::value_type value_type; - // typedef proof_evaluation_type proof_evaluation_type; - - constexpr static const std::size_t CONSTRAINTS = 3; - constexpr static const std::size_t ZK_ROWS = 3; - constexpr static const std::size_t GENERIC_REGISTERS = 3; - - static value_type perm_scalars(std::vector>& e, value_type beta, - value_type& gamma, std::vector& alphas, - value_type& zkp_zeta){ - value_type res = e[1].z * beta * alphas.front() * zkp_zeta; - for(int i = 0; i < std::min(e[0].w.size(), e[0].s.size()); ++i){ - res *= (gamma + (beta * e[0].s[i]) + e[0].w[i]); - } - - return -res; - } - - static void generic_gate(std::vector& res, const value_type& alpha_pow, - const std::size_t register_offset, const value_type& generic_zeta, - const std::array& w_zeta){ - value_type alpha_generic = alpha_pow * generic_zeta; - - // addition - res.push_back(alpha_generic * w_zeta[register_offset]); - res.push_back(alpha_generic * w_zeta[register_offset + 1]); - res.push_back(alpha_generic * w_zeta[register_offset + 2]); - - // multiplication - res.push_back(alpha_generic * w_zeta[register_offset] * w_zeta[register_offset + 1]); - - // constant - res.push_back(alpha_generic); - } - static std::vector gnrc_scalars(const std::vector& alphas, - const std::array& w_zeta, - const value_type& generic_zeta){ - std::vector res; - - generic_gate(res, alphas[0], 0, generic_zeta, w_zeta); - generic_gate(res, alphas[1], GENERIC_REGISTERS, generic_zeta, w_zeta); - - return res; - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - - -#endif \ No newline at end of file diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail.hpp deleted file mode 100644 index c32684508b..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail.hpp +++ /dev/null @@ -1,175 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_DETAIL_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_DETAIL_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - /// The collection of constants required to evaluate an `Expr`. - template - struct Constants { - /// The challenge alpha from the PLONK IOP. - typename FieldType::value_type alpha; - /// The challenge beta from the PLONK IOP. - typename FieldType::value_type beta; - /// The challenge gamma from the PLONK IOP. - typename FieldType::value_type gamma; - /// The challenge joint_combiner which is used to combine - /// joint lookup tables. - typename FieldType::value_type joint_combiner; - /// The endomorphism coefficient - typename FieldType::value_type endo_coefficient; - /// The MDS matrix - typename hashes::detail::poseidon_constants>::mds_matrix_type mds; - }; - - enum gate_type { - /// Zero gate - Zero = 0, - /// Generic arithmetic gate - Generic = 1, - /// Poseidon permutation gate - Poseidon = 2, - /// Complete EC addition in Affine form - CompleteAdd = 3, - /// EC variable base scalar multiplication - VarBaseMul = 4, - /// EC variable base scalar multiplication with group endomorphim optimization - EndoMul = 5, - /// Gate for computing the scalar corresponding to an endoscaling - EndoMulScalar = 6, - /// ChaCha - ChaCha0 = 7, - ChaCha1 = 8, - ChaCha2 = 9, - ChaChaFinal = 10, - /// Lookup - Lookup = 11, - /// Cairo - CairoClaim = 12, - CairoInstruction = 13, - CairoFlags = 14, - CairoTransition = 15, - // Range check (16-24) - RangeCheck0 = 16, - RangeCheck1 = 17, - }; - - enum argument_type { - /// Gates in the PLONK constraint system. - /// As gates are mutually exclusive (a single gate is set per row), - /// we can reuse the same powers of alpha across gates. - GateType, - /// The permutation argument - Permutation, - /// The lookup argument - LookupArgument - }; - - template - struct evaluation_domain { - std::size_t log_size_of_group; - FieldType group_gen; - }; - - template - struct arithmetic_sponge_params { - std::vector> round_constants; - typename hashes::detail::poseidon_constants>::mds_matrix_type mds; - }; - - struct Column; - - template - struct Linearization { - ContainerType constant_term; - std::vector> index_term; - }; - - template - struct lookup_verifier_index { - typedef typename commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - - enum lookups_used { - Single, Joint - } lookup_used; - std::vector lookup_table; - std::vector lookup_selectors; - - commitment_type table_ids; - - std::size_t max_joint_size; - - commitment_type runtime_tables_selector; - bool runtime_tables_selector_is_used; - - static commitment_type combine_table(std::vector &columns, - typename scalar_field_type::value_type column_combiner, - typename scalar_field_type::value_type table_id_combiner, - commitment_type &table_id_vector, - commitment_type &runtime_vector) { - typename scalar_field_type::value_type j = scalar_field_type::value_type::one(); - std::vector scalars; - std::vector commitments; - - for (auto &comm: columns) { - scalars.push_back(j); - commitments.push_back(comm); - j *= column_combiner; - } - - if (table_id_vector.unshifted.size() != 0) { - scalars.push_back(table_id_combiner); - commitments.push_back(table_id_vector); - } - - if (runtime_vector.unshifted.size() != 0) { - scalars.push_back(column_combiner); - commitments.push_back(runtime_vector); - } - - return commitment_scheme::commitment_type::multi_scalar_mul(commitments, scalars); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_DETAIL_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/kimchi_functions.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/kimchi_functions.hpp deleted file mode 100644 index 68b97fc43c..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/kimchi_functions.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef CRYPTO3_ZK_KIMCHI_FUNCTIONS -#define CRYPTO3_ZK_KIMCHI_FUNCTIONS - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct kimchi_functions { - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - - static typename scalar_field_type::value_type - shift_scalar(const typename scalar_field_type::value_type &x) { - typename scalar_field_type::value_type two = typename scalar_field_type::value_type(2); - typename scalar_field_type::value_type two_pow = two.pow(scalar_field_type::modulus_bits); - if (scalar_field_type::modulus < base_field_type::modulus) { - return (x - (two_pow + scalar_field_type::value_type::one())) / two; - } else { - return x - two_pow; - } - } - }; - } - } - } -} - -#endif \ No newline at end of file diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/mapping.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/mapping.hpp deleted file mode 100644 index 6613e53615..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/mapping.hpp +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef CRYPTO3_ZK_SNARK_PICKLES_TO_GROUP_MAP -#define CRYPTO3_ZK_SNARK_PICKLES_TO_GROUP_MAP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct group_map { - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - typedef typename CurveType::template g1_type group_type; - typedef typename base_field_type::value_type value_type; - constexpr static const typename base_field_type::integral_type a = CurveType::template g1_type<>::params_type::a; - constexpr static const typename base_field_type::integral_type b = CurveType::template g1_type<>::params_type::b; - - value_type u; - value_type fu; - value_type sqrt_neg_three_u_squared_minus_u_over_2; - value_type sqrt_neg_three_u_squared; - value_type inv_three_u_squared; - - static value_type curve_eqn(value_type x) { - value_type res = x; - res *= x; - res += a; - res *= x; - res += b; - return res; - } - - group_map() { - u = value_type(1); - while (true) { - fu = curve_eqn(u); - if (!fu.is_zero()) { - break; - } else { - ++u; - } - } - - value_type three_u_squared = value_type(3) * u.squared(); - inv_three_u_squared = three_u_squared.inversed(); - sqrt_neg_three_u_squared = (-three_u_squared).sqrt(); - sqrt_neg_three_u_squared_minus_u_over_2 = - (sqrt_neg_three_u_squared - u) * (value_type(2)).inversed(); - } - - std::array potential_xs_helper(value_type &t2, value_type &alpha) { - value_type x1 = sqrt_neg_three_u_squared_minus_u_over_2 - - t2.squared() * alpha * sqrt_neg_three_u_squared; - value_type x2 = -u - x1; - value_type t2_plus_fu = t2 + fu; - value_type x3 = u - t2_plus_fu.squared() * alpha * t2_plus_fu * inv_three_u_squared; - return std::array({x1, x2, x3}); - } - - std::array potential_xs(value_type &t) { - value_type t2 = t.squared(); - value_type alpha = ((t2 + fu) * t2).inversed(); - - return potential_xs_helper(t2, alpha); - } - - typename group_type::value_type get_xy(value_type &t) { - std::array xvec = potential_xs(t); - for (auto &x: xvec) { - value_type y = curve_eqn(x).sqrt(); - if (y.squared() == x.pow(3) + a * x + b) { - return typename group_type::value_type(x, y); - } - } - return typename group_type::value_type(); - } - - typename group_type::value_type to_group(value_type t) { - return get_xy(t); - } - }; - - template - struct ScalarChallenge { - typename FieldType::value_type to_field(const typename FieldType::value_type &endo_coeff) { - uint64_t length_in_bits = (64 * kimchi_constant::CHALLENGE_LENGTH_IN_LIMBS); - typename FieldType::integral_type rep = typename FieldType::integral_type(_val.data); - - typename FieldType::value_type a = 2; - typename FieldType::value_type b = 2; - - typename FieldType::value_type one = FieldType::value_type::one(); - typename FieldType::value_type neg_one = -one; - - for (int32_t i = length_in_bits / 2 - 1; i >= 0; --i) { - a = a.doubled(); - b = b.doubled(); - - bool r_2i = boost::multiprecision::bit_test(rep, 2 * i); - typename FieldType::value_type s; - if (r_2i) { - s = one; - } else { - s = neg_one; - } - if (boost::multiprecision::bit_test(rep, 2 * i + 1) == 0) { - b += s; - } else { - a += s; - } - } - - return a * endo_coeff + b; - } - - typename FieldType::value_type value() { - return _val; - } - - ScalarChallenge(typename FieldType::value_type _val) : _val(_val) {} - - ScalarChallenge() = default; - - typename FieldType::value_type _val; - }; - } - } - } -} - - -#endif \ No newline at end of file diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/expr.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/expr.hpp deleted file mode 100644 index 6a62452cf6..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/expr.hpp +++ /dev/null @@ -1,240 +0,0 @@ -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_EXPR_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_EXPR_HPP - -#include -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - typename FieldType::value_type unnormalized_lagrange_basis(math::basic_radix2_domain domain, int i, - typename FieldType::value_type pt){ - typename FieldType::value_type omega_i = i < 0 ? domain.omega.pow(-i).inversed() : domain.omega.pow(i); - - return domain.compute_vanishing_polynomial(pt) / (pt - omega_i); - } - - struct LookupPattern { - enum lookup_pattern_type{ - ChaCha, - ChaChaFinal, - LookupGate, - RangeCheckGate, - }; - }; - - enum column_type { - Witness, - Z, - LookupSorted, - LookupAggreg, - LookupTable, - LookupKindIndex, - LookupRuntimeSelector, - LookupRuntimeTable, - Index, - Coefficient - }; - - struct Column{ - - Column(gate_type gate) : column(column_type::Index), index_value(gate) {} - - Column(column_type column, std::size_t value) : column(column), witness_value(value), - lookup_sorted_value(value), coefficient_value(value) {} - - Column() = default; - - column_type column; - std::size_t witness_value; - std::size_t lookup_sorted_value; - LookupPattern::lookup_pattern_type lookup_kind_index_value; - gate_type index_value; - std::size_t coefficient_value; - }; - - enum CurrOrNext{ - Curr = 0, - Next = 1, - }; - - struct Variable{ - Column col; - CurrOrNext row; - - Variable(Column col, CurrOrNext row = CurrOrNext::Curr) : col(col), row(row) {} - - Variable() = default; - }; - - template - typename FieldType::value_type variable_evaluate(Variable& var, std::vector> &evals){ - proof_evaluation_type temp_eval = evals[var.row]; - - if(var.col.column == column_type::Witness){ - return temp_eval.w[var.col.witness_value]; - } - else if(var.col.column == column_type::Z){ - return temp_eval.z; - } - else if(var.col.column == column_type::LookupSorted){ - return temp_eval.lookup.sorted[var.col.lookup_sorted_value]; - } - else if(var.col.column == column_type::LookupAggreg){ - return temp_eval.lookup.aggreg; - } - else if(var.col.column == column_type::LookupTable){ - return temp_eval.lookup.table; - } - else if(var.col.column == column_type::LookupRuntimeTable){ - return temp_eval.lookup.runtime; - } - else if(var.col.column == column_type::Index && var.col.index_value == gate_type::Poseidon){ - return temp_eval.poseidon_selector; - } - else if(var.col.column == column_type::Index && var.col.index_value == gate_type::Generic){ - return temp_eval.generic_selector; - } - - return typename FieldType::value_type(); - } - - enum token_type{ - Alpha, - Beta, - Gamma, - JointCombiner, - EndoCoefficient, - Mds, - Literal, - Cell, - Dup, - Pow, - Add, - Mul, - Sub, - VanishesOnLast4Rows, - UnnormalizedLagrangeBasis, - Store, - Load - }; - - template - struct PolishToken { - // typedef typename CurveType::scalar_field_type scalar_field_type; - // typedef proof_evaluation_type - - token_type token; - std::pair mds_value; - typename FieldType::value_type literal_value; - Variable cell_value; - std::size_t pow_value; - int unnormalized_lagrange_basis_value; - std::size_t load_value; - - PolishToken(token_type token) : token(token) {} - - PolishToken(std::pair mds_value) : token(token_type::Mds), mds_value(mds_value) {} - - PolishToken(typename FieldType::value_type literal_value) : token(token_type::Literal), literal_value(literal_value) {} - - PolishToken(Variable cell_value) : token(token_type::Cell), cell_value(cell_value) {} - - PolishToken(token_type token, std::size_t value) : token(token), pow_value(value), load_value(value) {} - - PolishToken(int unnormalized_lagrange_basis_value) : token(token), - unnormalized_lagrange_basis_value(unnormalized_lagrange_basis_value) {} - - static typename FieldType::value_type evaluate(std::vector>& toks, - math::basic_radix2_domain& domain, - typename FieldType::value_type pt, - std::vector>& evals, - Constants& c){ - std::vector stack, cache; - for(auto &t : toks){ - if(t.token == token_type::Alpha){ - stack.push_back(c.alpha); - } - else if(t.token == token_type::Beta){ - stack.push_back(c.beta); - } - else if(t.token == token_type::Gamma){ - stack.push_back(c.gamma); - } - else if(t.token == token_type::JointCombiner){ - stack.push_back(c.joint_combiner); - } - else if(t.token == token_type::EndoCoefficient){ - stack.push_back(c.endo_coefficient); - } - else if(t.token == token_type::Mds){ - stack.push_back(c.mds[t.mds_value.first][t.mds_value.second]); - } - else if(t.token == token_type::VanishesOnLast4Rows){ - stack.push_back(eval_vanishes_on_last_4_rows(domain, pt)); - } - else if(t.token == token_type::UnnormalizedLagrangeBasis){ - stack.push_back(unnormalized_lagrange_basis(domain, t.unnormalized_lagrange_basis_value, pt)); - } - else if(t.token == token_type::Literal){ - stack.push_back(t.literal_value); - } - else if(t.token == token_type::Dup){ - stack.push_back(stack.back()); - } - else if(t.token == token_type::Cell){ - stack.push_back(variable_evaluate(t.cell_value, evals)); - } - else if(t.token == token_type::Pow){ - stack.back() = stack.back().pow(t.pow_value); - } - else if(t.token == token_type::Add){ - assert(stack.size() > 1); - typename FieldType::value_type y = stack.back(); - stack.pop_back(); - typename FieldType::value_type x = stack.back(); - stack.pop_back(); - - stack.push_back(x + y); - } - else if(t.token == token_type::Mul){ - assert(stack.size() > 1); - typename FieldType::value_type y = stack.back(); - stack.pop_back(); - typename FieldType::value_type x = stack.back(); - stack.pop_back(); - - stack.push_back(x * y); - } - else if(t.token == token_type::Sub){ - assert(stack.size() > 1); - typename FieldType::value_type y = stack.back(); - stack.pop_back(); - typename FieldType::value_type x = stack.back(); - stack.pop_back(); - - stack.push_back(x - y); - } - else if(t.token == token_type::Store){ - cache.push_back(stack.back()); - } - else if(t.token == token_type::Load){ - stack.push_back(cache[t.load_value]); - } - } - - assert(stack.size() == 1); - return stack.front(); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_EXPR_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/oracles.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/oracles.hpp deleted file mode 100644 index d848ce4070..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/oracles.hpp +++ /dev/null @@ -1,472 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ORACLES_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ORACLES_HPP - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct RandomOracles { - std::tuple, typename FieldType::value_type> joint_combiner; - typename FieldType::value_type beta; - typename FieldType::value_type gamma; - ScalarChallenge alpha_chal; - typename FieldType::value_type alpha; - typename FieldType::value_type zeta; - typename FieldType::value_type v; - typename FieldType::value_type u; - ScalarChallenge zeta_chal; - ScalarChallenge v_chal; - ScalarChallenge u_chal; - }; - - template - struct OraclesResult { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - /// A sponge that acts on the base field of a curve - EFqSponge fq_sponge; - /// the last evaluation of the Fq-Sponge in this protocol - typename scalar_field_type::value_type digest; - /// the challenges produced in the protocol - RandomOracles oracles; - /// the computed powers of alpha - Alphas all_alphas; - /// public polynomial evaluations - std::vector> p_eval; - /// zeta^n and (zeta * omega)^n - std::array powers_of_eval_points_for_chunks; - /// ? - std::vector>>> polys; - /// pre-computed zeta^n - typename scalar_field_type::value_type zeta1; - /// The evaluation f(zeta) - t(zeta) * Z_H(zeta) - typename scalar_field_type::value_type ft_eval0; - typename scalar_field_type::value_type combined_inner_product; - }; - - template> - std::vector>> - prev_chal_evals( - proof_type proof, - VerifierIndexType index, - std::vector evaluation_points, - std::array powers_of_eval_points_for_chunks) { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename CurveType::scalar_field_type scalar_field_type; // Fr - typedef typename CurveType::base_field_type base_field_type; // Fq - - std::vector>> prev_chal_evals; - - for (auto &[chals, comm]: proof.prev_challenges) { - std::size_t b_len = 1 << chals.size(); - std::vector b; - prev_chal_evals.push_back(std::vector>()); - - for (int i = 0; i < evaluation_points.size(); ++i) { - // prev_chal_evals.back().push_back(std::vector()); - typename scalar_field_type::value_type full = commitment_scheme::b_poly(chals, - evaluation_points[i]); - if (index.max_poly_size == b_len) { - std::vector vec_full = {full}; - prev_chal_evals.back().emplace_back(vec_full); - } else { - typename scalar_field_type::value_type betaacc = scalar_field_type::value_type::one(); - typename scalar_field_type::value_type diff; - - for (std::size_t j = index.max_poly_size; j < b_len; ++j) { - typename scalar_field_type::value_type b_j; - if (b.empty()) { - b = commitment_scheme::b_poly_coefficents(chals); - } - b_j = b[j]; - - diff += betaacc * b[j]; - betaacc *= evaluation_points[i]; - } - std::vector tmp_vec = { - full - (diff * powers_of_eval_points_for_chunks[i]), diff, - }; - - prev_chal_evals.back().emplace_back(tmp_vec); - } - } - } - - return prev_chal_evals; - } - - /// This function runs the random oracle argument - template> - OraclesResult oracles(proof_type proof, - VerifierIndexType index, - typename commitments::kimchi_pedersen::commitment_type p_comm) { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - typedef typename commitment_scheme::evaluation_type evaluation_type; - typedef typename CurveType::scalar_field_type scalar_field_type; // Fr - typedef typename CurveType::base_field_type base_field_type; // Fq - //~ - //~ #### Fiat-Shamir argument - //~ - //~ We run the following algorithm: - //~ - size_t n = index.domain.size(); - - //~typename CurveType::scalar_field_type; 1. Setup the Fq-Sponge. - EFqSponge fq_sponge; - - //~ 2. Absorb the commitment of the public input polynomial with the Fq-Sponge. - fq_sponge.absorb_g(p_comm.unshifted); - - //~ 3. Absorb the commitments to the registers / witness columns with the Fq-Sponge. - for (auto &commit: proof.commitments.w_comm) { - fq_sponge.absorb_g(commit.unshifted); - } - - std::tuple, - typename CurveType::scalar_field_type::value_type> - joint_combiner; - if (index.lookup_index_is_used) { - BOOST_ASSERT_MSG(proof.commitments.lookup_is_used, "lookup should be in proof commitments"); - - if (index.lookup_index.runtime_tables_selector_is_used) { - BOOST_ASSERT_MSG(proof.commitments.lookup.runtime_is_used, - "lookup runtime should be in proof commitments"); - fq_sponge.absorb_g(proof.commitments.lookup.runtime.unshifted); - } - - ScalarChallenge s; - - if (index.lookup_index.lookup_used == lookup_verifier_index::lookups_used::Single) { - s = ScalarChallenge( - CurveType::scalar_field_type::value_type::zero()); - } else if (index.lookup_index.lookup_used == - lookup_verifier_index::lookups_used::Joint) { - s = ScalarChallenge(fq_sponge.challenge()); - } - - joint_combiner = std::make_tuple(s, s.to_field(index.srs.endo_r)); - - for (auto &commit: proof.commitments.lookup.sorted) { - fq_sponge.absorb_g(commit.unshifted); - } - } - //~ 4. TODO: lookup (joint combiner challenge) - - //~ 5. TODO: lookup (absorb) - - // for (size_t i = 0; i < proof.commitments.lookup.size(); ++i) { - // proof.commitments.lookup[i] = fq_sponge.absorb_g(proof.commitments.lookup[i].unshifted); - // } - - //~ 6. Sample $\beta$ with the Fq-Sponge. - typename scalar_field_type::value_type beta = fq_sponge.challenge(); - - //~ 7. Sample $\gamma$ with the Fq-Sponge. - typename scalar_field_type::value_type gamma = fq_sponge.challenge(); - - //~ 8. TODO: lookup - // for (size_t i = 0; i < proof.commitments.lookup.size(); ++i) { - // proof.commitments.lookup[i] = fq_sponge.absorb_g(proof.commitments.lookup[i].aggreg.unshifted); - // } - - if (proof.commitments.lookup_is_used) { - fq_sponge.absorb_g(proof.commitments.lookup.aggreg.unshifted); - } - - - //~ 9. Absorb the commitment to the permutation trace with the Fq-Sponge. - fq_sponge.absorb_g(proof.commitments.z_comm.unshifted); - - //~ 10. Sample $\alpha'$ with the Fq-Sponge. - ScalarChallenge alpha_chal = ScalarChallenge( - fq_sponge.challenge()); - - //~ 11. Derive $\alpha$ from $\alpha'$ using the endomorphism (TODO: details). - typename scalar_field_type::value_type alpha = alpha_chal.to_field(index.srs.endo_r); - //~ 12. Enforce that the length of the $t$ commitment is of size `PERMUTS`. - BOOST_ASSERT_MSG(proof.commitments.t_comm.unshifted.size() == kimchi_constant::PERMUTES, - "IncorrectCommitmentLength(t)"); - - //~ 13. Absorb the commitment to the quotient polynomial $t$ into the argument. - fq_sponge.absorb_g(proof.commitments.t_comm.unshifted); - - //~ 14. Sample $\zeta'$ with the Fq-Sponge. - ScalarChallenge zeta_chal = ScalarChallenge( - fq_sponge.challenge()); - - //~ 15. Derive $\zeta$ from $\zeta'$ using the endomorphism (TODO: specify). - typename scalar_field_type::value_type zeta = zeta_chal.to_field(index.srs.endo_r); - - //~ 16. Setup the Fr-Sponge. - EFqSponge fq_sponge_cloned = fq_sponge; - typename scalar_field_type::value_type digest = fq_sponge_cloned.digest(); - EFrSponge fr_sponge = EFrSponge(); - - //~ 17. Squeeze the Fq-sponge and absorb the result with the Fr-Sponge. - fr_sponge.absorb(digest); - - // prepare some often used values - typename scalar_field_type::value_type zeta1 = zeta.pow(n); - typename scalar_field_type::value_type zetaw = zeta * index.domain.omega; - - // retrieve ranges for the powers of alphas - - std::vector w; - w.reserve(proof.public_input.size()); - if (proof.public_input.size() > 0) { - w.push_back(scalar_field_type::value_type::one()); - } - - Alphas all_alphas = index.powers_of_alpha; - - all_alphas.instantiate(alpha); - - for (int i = 0; i < proof.public_input.size(); ++i) { - w.push_back(w.back() * index.domain.omega); - } - - // compute Lagrange base evaluation denominators - std::vector zeta_minus_x; - for (auto &i: w) { - zeta_minus_x.push_back(zeta - i); - } - - for (size_t i = 0; i < proof.public_input.size(); ++i) { - zeta_minus_x.push_back(zetaw - w[i]); - } - - // Given a vector of field elements {v_i}, compute the vector {coeff * v_i^(-1)}, where coeff = - // F::one() - // ark_ff::fields::batch_inversion::>(&mut zeta_minus_x); - // zeta_minus_x = zeta_minus_x.inverse() * Fr::one(); - - std::transform(zeta_minus_x.begin(), zeta_minus_x.end(), zeta_minus_x.begin(), [](auto &element) { - return element.inversed(); - }); - //~ 18. Evaluate the negated public polynomial (if present) at $\zeta$ and $\zeta\omega$. - //~ NOTE: this works only in the case when the poly segment size is not smaller than that of the - // domain. - std::vector> p_eval; - if (!proof.public_input.empty()) { - typename scalar_field_type::value_type tmp; - std::size_t iter_size = std::min({proof.public_input.size(), zeta_minus_x.size(), w.size()}); - - for (int i = 0; i < iter_size; ++i) { - tmp -= proof.public_input[i] * zeta_minus_x[i] * w[i]; - } - - typename scalar_field_type::value_type size_inv = typename scalar_field_type::value_type( - index.domain.size()).inversed(); - - p_eval[0].push_back(tmp * (zeta1 - scalar_field_type::value_type::one()) * size_inv); - p_eval[1].push_back(tmp * (zetaw.pow(n) - scalar_field_type::value_type::one()) * size_inv); - } else { - p_eval.resize(2); - } - - //~ 19. Absorb all the polynomial evaluations in $\zeta$ and $\zeta\omega$: - //~ - the public polynomial - //~ - z - //~ - generic selector - //~ - poseidon selector - //~ - the 15 register/witness - //~ - 6 sigmas evaluations (the last one is not evaluated) - for (size_t i = 0; i < p_eval.size(); ++i) { - fr_sponge.absorb_evaluations(p_eval[i], proof.evals[i]); - } - - //~ 20. Absorb the unique evaluation of ft: $ft(\zeta\omega)$. - fr_sponge.absorb(proof.ft_eval1); - - //~ 21. Sample $v'$ with the Fr-Sponge. - ScalarChallenge v_chal = fr_sponge.challenge(); - - //~ 22. Derive $v$ from $v'$ using the endomorphism (TODO: specify). - typename scalar_field_type::value_type v = v_chal.to_field(index.srs.endo_r); - - //~ 23. Sample $u'$ with the Fr-Sponge. - ScalarChallenge u_chal = fr_sponge.challenge(); - - //~ 24. Derive $u$ from $u'$ using the endomorphism (TODO: specify). - typename scalar_field_type::value_type u = u_chal.to_field(index.srs.endo_r); - - //~ 25. Create a list of all polynomials that have an evaluation proof. - std::vector evaluation_points = {zeta, zetaw}; - std::array powers_of_eval_points_for_chunks = { - zeta.pow(index.max_poly_size), - zetaw.pow(index.max_poly_size) - }; - - // let polys : Vec<(PolyComm, _)> = - // self.prev_challenges.iter() - // .zip(self.prev_chal_evals(index, &evaluation_points, - // &powers_of_eval_points_for_chunks)) - // .map(| (c, e) | (c.1.clone(), e)) - // .collect(); - - std::vector>>> polys; - std::vector>> prev_chal_evals_vec = prev_chal_evals( - proof, index, evaluation_points, powers_of_eval_points_for_chunks - ); - - for (int i = 0; i < proof.prev_challenges.size(); ++i) { - polys.emplace_back(std::get<1>(proof.prev_challenges[i]), prev_chal_evals_vec[i]); - } - - - std::vector> evals = { - proof.evals[0].combine(powers_of_eval_points_for_chunks[0]), - proof.evals[1].combine(powers_of_eval_points_for_chunks[1]) - }; - - //~ 26. Compute the evaluation of $ft(\zeta)$. - typename scalar_field_type::value_type zkp = index.zkpm.evaluate(zeta); - typename scalar_field_type::value_type zeta1m1 = zeta1 - scalar_field_type::value_type::one(); - - std::vector alpha_powers = all_alphas.get_alphas( - argument_type::Permutation, kimchi_constant::CONSTRAINTS); - typename scalar_field_type::value_type alpha0 = alpha_powers[0]; - typename scalar_field_type::value_type alpha1 = alpha_powers[1]; - typename scalar_field_type::value_type alpha2 = alpha_powers[2]; - - typename scalar_field_type::value_type ft_eval0 = - (evals[0].w[kimchi_constant::PERMUTES - 1] + gamma) * evals[1].z * alpha0 * zkp; - for (size_t i = 0; i < evals[0].s.size(); ++i) { - ft_eval0 *= (beta * evals[0].s[i]) + evals[0].w[i] + gamma; - } - - if (!p_eval.empty() && !p_eval[0].empty()) { - ft_eval0 -= p_eval[0][0]; - } else { // ?????????????? - ft_eval0 -= scalar_field_type::value_type::zero(); - } - - typename scalar_field_type::value_type tmp = alpha0 * zkp * evals[0].z; - for (size_t i = 0; i < std::min(evals[0].w.size(), index.shift.size()); ++i) { - tmp *= gamma + (beta * zeta * index.shift[i]) + evals[0].w[i]; - } - - ft_eval0 -= tmp; - - typename scalar_field_type::value_type numerator = ((zeta1m1 * alpha1 * (zeta - index.w)) + - (zeta1m1 * alpha2 * (zeta - - scalar_field_type::value_type::one()))) * - (scalar_field_type::value_type::one() - - evals[0].z); - - typename scalar_field_type::value_type denominator = - (zeta - index.w) * (zeta - scalar_field_type::value_type::one()); - denominator = denominator.inversed(); - - ft_eval0 += numerator * denominator; - - Constants cs{alpha, beta, gamma, std::get<1>(joint_combiner), index.endo, - index.fr_sponge_params.mds_matrix}; - - ft_eval0 -= - PolishToken::evaluate(index.linearization.constant_term, index.domain, - zeta, evals, cs); - - - std::vector> es; - - for (auto &poly: polys) { - evaluation_type eval(commitment_type(), std::get<1>(poly), -1); - es.emplace_back(eval, -1); - } - - es.emplace_back(evaluation_type(commitment_type(), p_eval, -1), -1); - std::vector> ft_eval = {{ft_eval0}, - {proof.ft_eval1}}; - es.emplace_back(evaluation_type(commitment_type(), ft_eval, -1), -1); - - std::vector> z; - std::vector> generic_selector; - std::vector> poseidon_selector; - for (auto &eval: proof.evals) { - z.push_back(eval.z); - generic_selector.push_back(eval.generic_selector); - poseidon_selector.push_back(eval.poseidon_selector); - } - es.emplace_back(evaluation_type(commitment_type(), z, -1), -1); - es.emplace_back(evaluation_type(commitment_type(), generic_selector, -1), -1); - es.emplace_back(evaluation_type(commitment_type(), poseidon_selector, -1), -1); - - for (int i = 0; i < proof.evals[0].w.size(); ++i) { - std::vector> w_copy = {proof.evals[0].w[i], - proof.evals[1].w[i]}; - es.emplace_back(evaluation_type(commitment_type(), w_copy, -1), -1); - } - - for (int i = 0; i < proof.evals[0].s.size(); ++i) { - std::vector> s_copy = {proof.evals[0].s[i], - proof.evals[1].s[i]}; - es.emplace_back(evaluation_type(commitment_type(), s_copy, -1), -1); - } - - - typename scalar_field_type::value_type combined_inner_product0 = commitment_scheme::combined_inner_product( - evaluation_points, - v, - u, - es, - index.srs.g.size() - ); - - RandomOracles oracles = { - joint_combiner, beta, gamma, alpha_chal, alpha, zeta, v, u, zeta_chal, v_chal, u_chal - }; - - return OraclesResult{fq_sponge, digest, oracles, - all_alphas, p_eval, powers_of_eval_points_for_chunks, - polys, zeta1, ft_eval0, combined_inner_product0}; - } - } // namespace snark - } // namespace zk - } // namespace crypto3 -}; // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ORACLES_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/permutation.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/permutation.hpp deleted file mode 100644 index ba7450441b..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/permutation.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_PERMUTATION_HPP -#define CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_PERMUTATION_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - typename FieldType::value_type eval_vanishes_on_last_4_rows(math::basic_radix2_domain& domain, - typename FieldType::value_type& x){ - typename FieldType::value_type w4 = domain.get_domain_element(domain.size() - (kimchi_constant::ZK_ROWS + 1)); - typename FieldType::value_type w3 = domain.omega * w4; - typename FieldType::value_type w2 = domain.omega * w3; - typename FieldType::value_type w1 = domain.omega * w2; - - return (x - w1) * (x - w2) * (x - w3) * (x - w4); - } - } // namespace components - } // namespace zk - } // namespace crypto3 -} - -#endif diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/proof.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/proof.hpp deleted file mode 100644 index 47a0be6680..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/proof.hpp +++ /dev/null @@ -1,194 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PICKLES_PROOF_HPP -#define CRYPTO3_ZK_PICKLES_PROOF_HPP - -#include -#include -#include - -#include -#include - - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct lookup_evaluation_type { - std::vector sorted; - value_type aggreg; - value_type table; - value_type runtime; - bool runtime_is_used; - - lookup_evaluation_type(std::vector& sorted, value_type& aggreg, - value_type& table, value_type& runtime) : sorted(sorted), - aggreg(aggreg), table(table), runtime(runtime) {}; - - lookup_evaluation_type() = default; - }; - - template - struct base_proof_evaluation_type { - constexpr static const std::size_t Permuts = kimchi_constant::PERMUTES; - constexpr static const std::size_t WiresAmount = kimchi_constant::COLUMNS; - - std::array w; - value_type z; - std::array s; - lookup_evaluation_type lookup; - bool lookup_is_used; - value_type generic_selector; - value_type poseidon_selector; - - base_proof_evaluation_type(std::array& w, - value_type& z, std::array& s, - lookup_evaluation_type &lookup, - value_type& generic_selector, value_type& poseidon_selector) : - w(w), z(z), s(s), lookup(lookup), generic_selector(generic_selector), - poseidon_selector(poseidon_selector) {} - - base_proof_evaluation_type() = default; - }; - - template - struct proof_evaluation_type : base_proof_evaluation_type { - using base_proof_evaluation_type::base_proof_evaluation_type; - }; - - template - struct proof_evaluation_type> : base_proof_evaluation_type>{ - using base_proof_evaluation_type>::base_proof_evaluation_type; - - proof_evaluation_type combine(value_type& pt){ - std::array s_combined; - for(int i = 0; i < s_combined.size(); ++i){ - math::polynomial temp_polynomial(this->s[i].begin(), this->s[i].end()); - s_combined[i] = temp_polynomial.evaluate(pt); - } - - std::array w_combined; - for(int i = 0; i < w_combined.size(); ++i){ - math::polynomial temp_polynomial(this->w[i].begin(), this->w[i].end()); - w_combined[i] = temp_polynomial.evaluate(pt); - } - - math::polynomial temp_polynomial_z(this->z.begin(), this->z.end()); - value_type z_combined = temp_polynomial_z.evaluate(pt); - - math::polynomial temp_polynomial_gs(this->generic_selector.begin(), this->generic_selector.end()); - value_type generic_selector_combined = temp_polynomial_gs.evaluate(pt); - - math::polynomial temp_polynomial_ps(this->poseidon_selector.begin(), this->poseidon_selector.end()); - value_type poseidon_selector_combined = temp_polynomial_ps.evaluate(pt); - - lookup_evaluation_type lookup_combined; - if(this->lookup_is_used){ - lookup_combined = lookup_evaluation_type(); - - math::polynomial temp_polynomial_table(this->lookup.table.begin(), this->lookup.table.end()); - lookup_combined.table = temp_polynomial_table.evaluate(pt); - - math::polynomial temp_polynomial_aggreg(this->lookup.aggreg.begin(), this->lookup.aggreg.end()); - lookup_combined.aggreg = temp_polynomial_aggreg.evaluate(pt); - - for(int i = 0; i < this->lookup.sorted.size(); ++i){ - math::polynomial temp_polynomial_sorted(this->lookup.sorted[i].begin(), this->lookup.sorted[i].end()); - lookup_combined.sorted[i] = temp_polynomial_sorted.evaluate(pt); - } - - if(this->lookup.runtime_is_used){ - math::polynomial temp_polynomial_runtime(this->lookup.runtime.begin(), - this->lookup.runtime.end()); - lookup_combined.runtime = temp_polynomial_runtime.evaluate(pt); - } - } - - return proof_evaluation_type(w_combined, z_combined, s_combined, lookup_combined, - generic_selector_combined, poseidon_selector_combined); - } - }; - - template - struct lookup_commitment_type { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - - std::vector sorted; - commitment_type aggreg; - commitment_type runtime; - bool runtime_is_used; - }; - - template - struct proof_commitment_type { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - - // constexpr static const std::size_t Permuts = kimchi_constant::PERMUTES; - constexpr static const std::size_t WiresAmount = kimchi_constant::COLUMNS; - - std::array w_comm; - commitment_type z_comm; - commitment_type t_comm; - lookup_commitment_type lookup; - bool lookup_is_used; - }; - - template - class proof_type { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - - public: - // Commitments: - - proof_commitment_type commitments; - typename commitments::kimchi_pedersen::proof_type proof; - std::array>, 2> evals; - - // ft_eval1 - typename scalar_field_type::value_type ft_eval1; - // public - std::vector public_input; - // Previous challenges - std::vector< - std::pair< - std::vector, - commitment_type - > - > prev_challenges; - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_PROOF_HPP \ No newline at end of file diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier.hpp deleted file mode 100644 index f95c77cdd0..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier.hpp +++ /dev/null @@ -1,399 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template> - struct verifier { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - typedef typename commitment_scheme::evaluation_type evaluation_type; - typedef typename commitment_scheme::scalar_field_type scalar_field_type; // Fr; - typedef typename commitment_scheme::base_field_type base_field_type; // Fq; - typedef typename commitment_scheme::group_type group_type; // Fq; - typedef typename commitment_scheme::batchproof_type batchproof_type; - typedef typename std::vector>> proofs_type; - - typedef typename commitment_scheme::sponge_type EFqSponge; - typedef transcript::DefaultFrSponge EFrSponge; - - constexpr static const std::size_t COLUMNS = kimchi_constant::COLUMNS; - constexpr static const std::size_t PERMUTES = kimchi_constant::PERMUTES; - - static batchproof_type to_batch(VerifierIndexType index, proof_type proof) { - //~ - //~ #### Partial verification - //~ - //~ For every proof we want to verify, we defer the proof opening to the very end. - //~ This allows us to potentially batch verify a number of partially verified proofs. - //~ Essentially, this steps verifies that $f(\zeta) = t(\zeta) * Z_H(\zeta)$. - //~ - - //~ 1. Commit to the negated public input polynomial. - BOOST_ASSERT_MSG( - index.srs.lagrange_bases.find(index.domain.size()) != index.srs.lagrange_bases.end(), - "pre-computed committed lagrange bases not found"); - std::vector lgr_comm = index.srs.lagrange_bases[index.domain.size()]; // calculate lgr_comm - BOOST_ASSERT(lgr_comm.size() == 512); // ?? - std::vector com; - - for (size_t i = 0; i < proof.public_input.size(); ++i) { - std::vector unshifted = {lgr_comm[i]}; - typename group_type::value_type shifted; - com.push_back(commitment_type(unshifted, shifted)); - } - // std::vector *com_ref = &com; - std::vector elm; - for (auto &i: proof.public_input) { - elm.push_back(-i); - } - - commitment_type p_comm = commitment_type::multi_scalar_mul(com, elm); - - //~ 2. Run the [Fiat-Shamir argument](#fiat-shamir-argument). - OraclesResult oracles_res = oracles( - proof, index, p_comm); - // fq_sponge, - // oracles, - // all_alphas, - // p_eval, - // powers_of_eval_points_for_chunks, - // polys, - // zeta1 : zeta_to_domain_size, - // ft_eval0, - // ..> = proof.oracles::(index, &p_comm); - - //~ 3. Combine the chunked polynomials' evaluations - //~ (TODO: most likely only the quotient polynomial is chunked) - //~ with the right powers of $\zeta^n$ and $(\zeta * \omega)^n$. - - // Calculate polynoms in pointers powers_of_eval_points_for_chunks[0] and - // powers_of_eval_points_for_chunks[1] - std::vector> evals = { - proof.evals[0].combine(oracles_res.powers_of_eval_points_for_chunks[0]), - proof.evals[1].combine(oracles_res.powers_of_eval_points_for_chunks[1]) - }; - - //~ 4. Compute the commitment to the linearized polynomial $f$. - // permutation - typename scalar_field_type::value_type zkp = index.zkpm.evaluate(oracles_res.oracles.zeta); - - std::vector alphas = oracles_res.all_alphas.get_alphas( - argument_type::Permutation, kimchi_constant::CONSTRAINTS); - - std::vector commitments = {index.sigma_comm[PERMUTES - 1]}; - std::vector scalars = { - ConstraintSystem::perm_scalars(evals, oracles_res.oracles.beta, - oracles_res.oracles.gamma, alphas, - zkp)}; - - // generic - - std::vector generic_scalars = - ConstraintSystem::gnrc_scalars(alphas, evals[0].w, - evals[0].generic_selector); - - std::vector generic_com( - index.coefficients_comm.begin(), - index.coefficients_comm.begin() + generic_scalars.size()); - - BOOST_ASSERT(generic_scalars.size() == generic_com.size()); - - scalars.insert(scalars.end(), generic_scalars.begin(), generic_scalars.end()); - commitments.insert(commitments.end(), generic_com.begin(), generic_com.end()); - - - // other gates are implemented using the expression framework - { - // TODO: Reuse constants from oracles function - Constants constants = { - oracles_res.oracles.alpha, - oracles_res.oracles.beta, - oracles_res.oracles.gamma, - std::get<1>(oracles_res.oracles.joint_combiner), - index.endo, - index.fr_sponge_params.mds_matrix - }; - - for (auto i: index.linearization.index_term) { - auto col = std::get<0>(i); - auto tokens = std::get<1>(i); - - auto scalar = - PolishToken::evaluate(tokens, index.domain, - oracles_res.oracles.zeta, evals, - constants); - auto l = proof.commitments.lookup; - if (col.column == column_type::Witness) { - scalars.push_back(scalar); - commitments.push_back(proof.commitments.w_comm[col.witness_value]); - } else if (col.column == column_type::Coefficient) { - scalars.push_back(scalar); - commitments.push_back(index.coefficients_comm[col.coefficient_value]); - } else if (col.column == column_type::Z) { - scalars.push_back(scalar); - commitments.push_back(proof.commitments.z_comm); - } else if (col.column == column_type::LookupSorted) { - scalars.push_back(scalar); - commitments.push_back(l.sorted[col.lookup_sorted_value]); - } else if (col.column == column_type::LookupAggreg) { - scalars.push_back(scalar); - commitments.push_back(l.aggreg); - } else if (col.column == column_type::LookupKindIndex) { - if (index.lookup_index_is_used) { - // assert("Attempted to use, but no lookup index was given"); - } else { - scalars.push_back(scalar); - commitments.push_back( - index.lookup_index.lookup_selectors[col.lookup_kind_index_value]); - } - } else if (col.column == column_type::LookupTable) { - if (index.lookup_index_is_used) { - // assert("Attempted to use, but no lookup index was given"); - } else { - typename scalar_field_type::value_type j = scalar_field_type::value_type::one(); - scalars.push_back(scalar); - commitments.push_back(index.lookup_index.lookup_table[0]); - for (size_t k = 1; k < index.lookup_index.lookup_table.size(); ++k) { - j *= constants.joint_combiner; - scalars.push_back(scalar * j); - commitments.push_back(index.lookup_index.lookup_table[k]); - } - } - } else if (col.column == column_type::Index) { - commitment_type c; - if (col.index_value == gate_type::Zero || col.index_value == gate_type::Generic || - col.index_value == gate_type::Lookup) { - std::cout << "Selector for {:?} not defined\n"; - } else if (col.index_value == gate_type::CompleteAdd) { - c = index.complete_add_comm; - } else if (col.index_value == gate_type::VarBaseMul) { - c = index.mul_comm; - } else if (col.index_value == gate_type::EndoMul) { - c = index.emul_comm; - } else if (col.index_value == gate_type::EndoMulScalar) { - c = index.endomul_scalar_comm; - } else if (col.index_value == gate_type::Poseidon) { - c = index.psm_comm; - } else if (col.index_value == gate_type::ChaCha0) { - c = index.chacha_comm[0]; - } else if (col.index_value == gate_type::ChaCha1) { - c = index.chacha_comm[1]; - } else if (col.index_value == gate_type::ChaCha2) { - c = index.chacha_comm[2]; - } else if (col.index_value == gate_type::ChaChaFinal) { - c = index.chacha_comm[3]; - } else if (col.index_value == gate_type::RangeCheck0) { - c = index.range_check_comm[0]; - } else if (col.index_value == gate_type::RangeCheck1) { - c = index.range_check_comm[1]; - } - - scalars.push_back(scalar); - commitments.push_back(c); - } - } - } - - // MSM - commitment_type f_comm = commitment_type::multi_scalar_mul(commitments, scalars); - - //~ 5. Compute the (chuncked) commitment of $ft$ - //~ (see [Maller's optimization](../crypto/plonk/maller_15.html)). - typename scalar_field_type::value_type zeta_to_srs_len = oracles_res.oracles.zeta.pow( - index.max_poly_size); - commitment_type chunked_f_comm = f_comm.chunk_commitment(zeta_to_srs_len); - commitment_type chunked_t_comm = proof.commitments.t_comm.chunk_commitment(zeta_to_srs_len); - commitment_type ft_comm = chunked_f_comm - chunked_t_comm.scale( - oracles_res.zeta1 - scalar_field_type::value_type::one()); - - //~ 6. List the polynomial commitments, and their associated evaluations, - //~ that are associated to the aggregated evaluation proof in the proof: - std::vector evaluations; - - //~ - recursion - for (auto i: oracles_res.polys) { - evaluations.emplace_back(std::get<0>(i), std::get<1>(i), -1); - } - - //~ - public input commitment - evaluations.emplace_back(p_comm, oracles_res.p_eval, -1); - - //~ - ft commitment (chunks of it) - std::vector> ft_comm_evals = {{oracles_res.ft_eval0}, - {proof.ft_eval1}}; - evaluations.emplace_back(ft_comm, ft_comm_evals, -1); - - //~ - permutation commitment - std::vector> tmp_evals; - for (auto &i: proof.evals) { - tmp_evals.push_back(i.z); - } - evaluations.emplace_back(proof.commitments.z_comm, tmp_evals, -1); - - //~ - index commitments that use the coefficients - tmp_evals.clear(); - for (auto i: proof.evals) { - tmp_evals.push_back(i.generic_selector); - } - evaluations.emplace_back(index.generic_comm, tmp_evals, -1); - - tmp_evals.clear(); - for (auto i: proof.evals) { - tmp_evals.push_back(i.poseidon_selector); - } - evaluations.emplace_back(index.psm_comm, tmp_evals, -1); - - //~ - witness commitments - for (size_t i = 0; i < COLUMNS; ++i) { - std::vector> witness_comm_evals = { - proof.evals[0].w[i], proof.evals[1].w[i]}; - evaluations.emplace_back(proof.commitments.w_comm[i], witness_comm_evals, -1); - } - - //~ - sigma commitments - for (size_t i = 0; i < PERMUTES - 1; ++i) { - std::vector> sigma_comm_evals = { - proof.evals[0].s[i], proof.evals[1].s[i]}; - evaluations.emplace_back(index.sigma_comm[i], sigma_comm_evals, -1); - } - - if (index.lookup_index_is_used) { - std::size_t lookup_len = std::min({ - proof.commitments.lookup.sorted.size(), - proof.evals[0].lookup.sorted.size(), - proof.evals[1].lookup.sorted.size(), - }); - - for (int i = 0; i < lookup_len; ++i) { - std::vector> lookup_sorted_comm_evals = { - proof.evals[0].lookup.sorted[i], proof.evals[1].lookup.sorted[i]}; - evaluations.emplace_back( - proof.commitments.lookup.sorted[i], - lookup_sorted_comm_evals, - -1 - ); - } - - std::vector> lookup_aggreg_comm_evals = { - proof.evals[0].lookup.aggreg, proof.evals[1].lookup.aggreg}; - evaluations.emplace_back( - proof.commitments.lookup.aggreg, - lookup_aggreg_comm_evals, - -1 - ); - - commitment_type table_comm = lookup_verifier_index::combine_table( - index.lookup_index.lookup_table, - std::get<1>(oracles_res.oracles.joint_combiner), - std::get<1>(oracles_res.oracles.joint_combiner).pow( - index.lookup_index.max_joint_size), - index.lookup_index.table_ids, - proof.commitments.lookup.runtime - ); - - std::vector> lookup_table_comm_evals = { - proof.evals[0].lookup.table, proof.evals[1].lookup.table}; - evaluations.emplace_back( - table_comm, - lookup_table_comm_evals, - -1 - ); - - if (index.lookup_index.runtime_tables_selector_is_used) { - std::vector> lookup_runtime_comm_evals = { - proof.evals[0].lookup.runtime, proof.evals[1].lookup.runtime}; - evaluations.emplace_back( - index.lookup_index.runtime_tables_selector, - lookup_runtime_comm_evals, - -1 - ); - } - } - - // prepare for the opening proof verification - std::vector evaluation_points = { - oracles_res.oracles.zeta, - oracles_res.oracles.zeta * index.domain.omega}; - return batchproof_type({ - oracles_res.fq_sponge, - evaluations, - evaluation_points, - oracles_res.oracles.v, - oracles_res.oracles.u, - proof.proof - }); - } - - static bool batch_verify(group_map &g_map, - proofs_type &proofs) { - std::vector batch; - - typename commitment_scheme::params_type &srs = std::get<0>(proofs.front()).srs; - for (auto &[index, proof]: proofs) { - batch.push_back(to_batch(index, proof)); - } - - return commitment_scheme::verify_eval(srs, g_map, batch); - } - - static bool verify(group_map &g_map, - VerifierIndexType &index, - proof_type &proof) { - proofs_type proofs; - proofs.emplace_back(index, proof); - - return batch_verify(g_map, proofs); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_HPP \ No newline at end of file diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier_index.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier_index.hpp deleted file mode 100644 index e4cbca1f83..0000000000 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier_index.hpp +++ /dev/null @@ -1,108 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_INDEXER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_INDEXER_HPP - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - // arithmetic_sponge_params fr_sponge_params; - // arithmetic_sponge_params fq_sponge_params; - // hashes::detail::poseidon_constants_kimchi fr_sponge_params; - // hashes::detail::poseidon_constants_kimchi fq_sponge_params; - template>, - typename PoseidonKimchiBaseConstants = hashes::detail::poseidon_constants>, - std::size_t WiresAmount = kimchi_constant::COLUMNS, - std::size_t Permuts = kimchi_constant::PERMUTES - > - struct verifier_index { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - using curve_type = CurveType; - using scalar_field_type = typename CurveType::scalar_field_type; - using base_field_type = typename CurveType::base_field_type; - - math::basic_radix2_domain domain; - size_t max_poly_size; - size_t max_quot_size; - typename commitment_scheme::params_type srs; - - std::array sigma_comm; - std::array coefficients_comm; - commitment_type generic_comm; - - commitment_type psm_comm; - - commitment_type complete_add_comm; - commitment_type mul_comm; - commitment_type emul_comm; - commitment_type endomul_scalar_comm; - - std::array chacha_comm; - bool chacha_comm_is_used; - std::vector range_check_comm; - - std::array shift; - // Polynomial in coefficients form - math::polynomial zkpm; - typename scalar_field_type::value_type w; - typename scalar_field_type::value_type endo; - - lookup_verifier_index lookup_index; - bool lookup_index_is_used; - Linearization>> linearization; - // linearization; // TODO: - // Linearization>>> - Alphas powers_of_alpha; - PoseidonKimchiScalarConstants fr_sponge_params; - PoseidonKimchiBaseConstants fq_sponge_params; - - verifier_index() : domain(2) {} - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -}; // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_INDEXER_HPP diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp index 98cc6d9414..46514a6350 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp @@ -117,13 +117,13 @@ namespace nil { ); // Marshall the initialization context and push it to the transcript. - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; auto filled_context = nil::crypto3::marshalling::types::fill_transcript_initialization_context< Endianness, nil::crypto3::zk::snark::detail::transcript_initialization_context>(context); std::vector cv(filled_context.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_context.write(write_iter, cv.size()); + nil::crypto3::marshalling::status_type status = filled_context.write(write_iter, cv.size()); THROW_IF_ERROR_STATUS(status, "transcript_initialization_context::compute_constraint_system_with_params_hash"); // Append constraint_system to the buffer "cv". diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp index 1f63bbfb7b..b5a69cb561 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp @@ -77,7 +77,7 @@ namespace nil { static inline void build_variable_value_map( const math::expression& expr, - const plonk_polynomial_dfs_table &assignments, + const plonk_polynomial_dfs_table& assignments, std::shared_ptr> domain, std::size_t extended_domain_size, std::unordered_map& variable_values_out, @@ -116,8 +116,7 @@ namespace nil { static inline std::array prove_eval( const typename policy_type::constraint_system_type &constraint_system, - const plonk_polynomial_dfs_table - &column_polynomials, + const plonk_polynomial_dfs_table& column_polynomials, std::shared_ptr> original_domain, std::uint32_t max_gates_degree, const polynomial_dfs_type &mask_polynomial, diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp index 03d9ffe36d..dee26b5ebf 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp @@ -47,9 +47,11 @@ #include #include #include +#include #include + namespace nil { namespace crypto3 { namespace zk { @@ -134,8 +136,7 @@ namespace nil { &constraint_system, const typename placeholder_public_preprocessor::preprocessed_data_type &preprocessed_data, - const plonk_polynomial_dfs_table - &plonk_columns, + const plonk_polynomial_dfs_table& plonk_columns, commitment_scheme_type &commitment_scheme, transcript_type &transcript) : constraint_system(constraint_system) @@ -655,7 +656,7 @@ namespace nil { const plonk_constraint_system &constraint_system; const typename placeholder_public_preprocessor::preprocessed_data_type& preprocessed_data; - const plonk_polynomial_dfs_table &plonk_columns; + const plonk_polynomial_dfs_table& plonk_columns; commitment_scheme_type& commitment_scheme; transcript_type& transcript; std::shared_ptr> basic_domain; @@ -721,8 +722,8 @@ namespace nil { const auto &table = lookup_tables[t_id]; auto key = std::tuple(table.tag_index, 0, plonk_variable::column_type::selector); auto shifted_key = std::tuple(table.tag_index, 1, plonk_variable::column_type::selector); - typename FieldType::value_type selector_value = evaluations[key];; - typename FieldType::value_type shifted_selector_value = evaluations[shifted_key];; + typename FieldType::value_type selector_value = evaluations[key]; + typename FieldType::value_type shifted_selector_value = evaluations[shifted_key]; for( std::size_t o_id = 0; o_id < table.lookup_options.size(); o_id++){ typename FieldType::value_type v = selector_value * (t_id + 1); typename FieldType::value_type shifted_v = shifted_selector_value * (t_id + 1); @@ -746,7 +747,7 @@ namespace nil { for( std::size_t g_id = 0; g_id < lookup_gates.size(); g_id++ ){ const auto &gate = lookup_gates[g_id]; auto key = std::tuple(gate.tag_index, 0, plonk_variable::column_type::selector); - typename FieldType::value_type selector_value= evaluations[key]; + typename FieldType::value_type selector_value = evaluations[key]; for( std::size_t c_id = 0; c_id < gate.constraints.size(); c_id++){ const auto &constraint = gate.constraints[c_id]; typename FieldType::value_type l = selector_value * constraint.table_id; diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp index 7f8dfa4d32..5d4460ba4e 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp @@ -43,6 +43,7 @@ #include #include #include +#include #include @@ -73,7 +74,7 @@ namespace nil { const typename placeholder_public_preprocessor::preprocessed_data_type preprocessed_data, const plonk_table_description &table_description, - const plonk_polynomial_dfs_table &column_polynomials, + const plonk_polynomial_dfs_table& column_polynomials, typename ParamsType::commitment_scheme_type& commitment_scheme, transcript_type& transcript ) { diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp index f9fd0e8df7..fbe87f708e 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp @@ -76,6 +76,7 @@ namespace nil { using commitment_type = typename commitment_scheme_type::commitment_type; using transcript_type = typename commitment_scheme_type::transcript_type; using transcript_hash_type = typename commitment_scheme_type::transcript_hash_type; + using public_assignment_type = typename policy_type::variable_assignment_type::public_table_type; public: static std::size_t permutation_partitions_num( @@ -264,7 +265,7 @@ namespace nil { }; bool operator==(const preprocessed_data_type &rhs) const { - return public_polynomial_table == rhs.public_polynomial_table && + return shared_ptr_equal(public_polynomial_table, rhs.public_polynomial_table) && permutation_polynomials == rhs.permutation_polynomials && identity_polynomials == rhs.identity_polynomials && q_last == rhs.q_last && @@ -276,7 +277,7 @@ namespace nil { return !(rhs == *this); } - plonk_public_polynomial_dfs_table_type public_polynomial_table; + std::shared_ptr public_polynomial_table; // S_sigma std::vector permutation_polynomials; @@ -287,6 +288,19 @@ namespace nil { polynomial_dfs_type q_blind; common_data_type common_data; + + private: + template + static bool shared_ptr_equal(const std::shared_ptr &lhs, const std::shared_ptr &rhs) { + bool both_null = (lhs == nullptr && rhs == nullptr); + if (both_null) { + return true; + } + if (lhs == nullptr || rhs == nullptr) { + return false; + } + return *lhs == *rhs; + } }; private: @@ -384,6 +398,18 @@ namespace nil { } }; + static inline std::shared_ptr> convert_public_table( + std::shared_ptr public_assignment, + std::shared_ptr> basic_domain + ) { + return std::make_shared>( + detail::column_range_polynomial_dfs(public_assignment->public_inputs(), basic_domain), + detail::column_range_polynomial_dfs(public_assignment->constants(), basic_domain), + detail::column_range_polynomial_dfs(public_assignment->selectors(), basic_domain) + ); + } + + public: static inline std::vector> columns_rotations( @@ -535,7 +561,7 @@ namespace nil { // TODO: columns_with_copy_constraints -- It should be extracted from constraint_system static inline preprocessed_data_type process( const plonk_constraint_system &constraint_system, - typename policy_type::variable_assignment_type::public_table_type public_assignment, + std::shared_ptr public_assignment, const plonk_table_description &table_description, typename ParamsType::commitment_scheme_type &commitment_scheme, @@ -580,15 +606,7 @@ namespace nil { q_last_q_blind[0] = lagrange_polynomial(basic_domain, usable_rows); q_last_q_blind[1] = selector_blind(usable_rows, basic_domain); - plonk_public_polynomial_dfs_table - public_polynomial_table = - plonk_public_polynomial_dfs_table( - detail::column_range_polynomial_dfs(public_assignment.move_public_inputs(), - basic_domain), - detail::column_range_polynomial_dfs(public_assignment.move_constants(), - basic_domain), - detail::column_range_polynomial_dfs(public_assignment.move_selectors(), - basic_domain)); + auto public_polynomial_table = convert_public_table(std::move(public_assignment), basic_domain); // prepare commitments for short verifier //typename preprocessed_data_type::public_precommitments_type public_precommitments = @@ -600,7 +618,7 @@ namespace nil { std::size_t lookup_parts_num = constraint_system.lookup_parts(max_quotient_poly_chunks).size(); typename preprocessed_data_type::public_commitments_type public_commitments = commitments( - public_polynomial_table, id_perm_polys, + *public_polynomial_table, id_perm_polys, sigma_perm_polys, q_last_q_blind, commitment_scheme ); @@ -658,12 +676,14 @@ namespace nil { struct preprocessed_data_type { std::shared_ptr> basic_domain; - plonk_private_polynomial_dfs_table private_polynomial_table; + std::shared_ptr> private_polynomial_table; }; + using private_assignment_type = typename policy_type::variable_assignment_type::private_table_type; + static inline preprocessed_data_type process( const plonk_constraint_system &constraint_system, - typename policy_type::variable_assignment_type::private_table_type private_assignment, + std::shared_ptr private_assignment, const plonk_table_description &table_description ) { std::size_t N_rows = table_description.rows_amount; @@ -671,10 +691,13 @@ namespace nil { std::shared_ptr> basic_domain = math::make_evaluation_domain(N_rows); - plonk_private_polynomial_dfs_table - private_polynomial_table(detail::column_range_polynomial_dfs( - private_assignment.move_witnesses(), basic_domain)); - return preprocessed_data_type({basic_domain, std::move(private_polynomial_table)}); + auto private_polynomial_table = std::make_shared>( + detail::column_range_polynomial_dfs( + private_assignment->witnesses(), + basic_domain + ) + ); + return preprocessed_data_type({basic_domain, private_polynomial_table}); } }; } // namespace snark diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp index 1155a15274..c1b726e422 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp @@ -97,33 +97,33 @@ namespace nil { typename private_preprocessor_type::preprocessed_data_type preprocessed_private_data, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - const commitment_scheme_type& commitment_scheme, + commitment_scheme_type commitment_scheme, bool skip_commitment_scheme_eval_proofs = false ) { auto prover = placeholder_prover( preprocessed_public_data, std::move(preprocessed_private_data), table_description, - constraint_system, commitment_scheme, skip_commitment_scheme_eval_proofs); + constraint_system, std::move(commitment_scheme), skip_commitment_scheme_eval_proofs); return prover.process(); } placeholder_prover( const typename public_preprocessor_type::preprocessed_data_type &preprocessed_public_data, - typename private_preprocessor_type::preprocessed_data_type preprocessed_private_data, + const typename private_preprocessor_type::preprocessed_data_type &preprocessed_private_data, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - const commitment_scheme_type &commitment_scheme, + commitment_scheme_type commitment_scheme, bool skip_commitment_scheme_eval_proofs = false ) : preprocessed_public_data(preprocessed_public_data) , table_description(table_description) , constraint_system(constraint_system) - , _polynomial_table(new plonk_polynomial_dfs_table( - std::move(preprocessed_private_data.private_polynomial_table), - preprocessed_public_data.public_polynomial_table)) - + , _polynomial_table(std::make_unique>( + preprocessed_private_data.private_polynomial_table, + preprocessed_public_data.public_polynomial_table + )) , transcript(std::vector({})) , _is_lookup_enabled(constraint_system.lookup_gates().size() > 0) - , _commitment_scheme(commitment_scheme) + , _commitment_scheme(std::move(commitment_scheme)) , _skip_commitment_scheme_eval_proofs(skip_commitment_scheme_eval_proofs) { // Initialize transcript. @@ -192,12 +192,12 @@ namespace nil { transcript )[0]; + _polynomial_table.reset(); // not needed anymore, release memory + /////TEST #ifdef ZK_PLACEHOLDER_DEBUG_ENABLED placeholder_debug_output(); #endif - // _polynomial_table not needed, clean its memory - _polynomial_table.reset(nullptr); // 7. Aggregate quotient polynomial { @@ -229,6 +229,10 @@ namespace nil { return _commitment_scheme; } + commitment_scheme_type move_commitment_scheme() { + return std::move(_commitment_scheme); + } + private: std::vector quotient_polynomial_split_dfs() { PROFILE_SCOPE("quotient_polynomial_split_dfs"); @@ -318,7 +322,7 @@ namespace nil { _commitment_scheme, transcript ); -; + lookup_argument_result = lookup_argument_prover.prove_eval(); _proof.commitments[LOOKUP_BATCH] = lookup_argument_result.lookup_commitment; } @@ -346,7 +350,7 @@ namespace nil { for (std::size_t j = 0; j < gates[i].constraints.size(); j++) { polynomial_dfs_type constraint_result = gates[i].constraints[j].evaluate( - *_polynomial_table, preprocessed_public_data.common_data.basic_domain) * + _polynomial_table, preprocessed_public_data.common_data.basic_domain) * _polynomial_table.selector(gates[i].selector_index); // for (std::size_t k = 0; k < table_description.rows_amount; k++) { if (constraint_result.evaluate( @@ -414,7 +418,7 @@ namespace nil { _commitment_scheme.append_eval_point(FIXED_VALUES_BATCH, start_index - 1, _proof.eval_proof.challenge * _omega); for (std::size_t ind = 0; - ind < constant_columns + preprocessed_public_data.public_polynomial_table.selectors().size(); + ind < constant_columns + preprocessed_public_data.public_polynomial_table->selectors().size(); ind++, i++ ) { const std::set& fixed_values_rotation = diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp index c7c74e325f..6e2bdffe0f 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp @@ -150,7 +150,7 @@ namespace nil { const placeholder_proof &proof, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - commitment_scheme_type commitment_scheme, + commitment_scheme_type& commitment_scheme, const std::vector> &public_input ){ // TODO: process rotations for public input. @@ -191,7 +191,7 @@ namespace nil { const placeholder_proof &proof, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - commitment_scheme_type commitment_scheme + commitment_scheme_type& commitment_scheme ) { // We cannot add eval points unless everything is committed, so when verifying assume it's committed. diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp index b6c9ba00d3..1cb880fb42 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp @@ -91,9 +91,9 @@ namespace nil { ); acc(data); } else { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; typename hash_type::construction::type::block_type byte_data = - nil::marshalling::pack(data, status); + nil::crypto3::marshalling::pack(data, status); THROW_IF_ERROR_STATUS(status, "fiat_shamir_heuristic_accumulative::operator()"); acc(byte_data); } @@ -136,7 +136,7 @@ namespace nil { struct fiat_shamir_heuristic_sequential { typedef Hash hash_type; - typedef typename boost::multiprecision::cpp_int_modular_backend modular_backend_of_hash_size; + typedef nil::crypto3::multiprecision::big_uint big_uint_of_hash_size; fiat_shamir_heuristic_sequential() : state(hash({0})) { } @@ -173,9 +173,9 @@ namespace nil { algebra::is_field_element::value > operator()(element const& data) { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector byte_data = - nil::marshalling::pack(data, status); + nil::crypto3::marshalling::pack(data, status); THROW_IF_ERROR_STATUS(status, "fiat_shamir_heuristic_sequential::operator()"); auto acc_convertible = hash(state); state = accumulators::extract::hash( @@ -199,9 +199,9 @@ namespace nil { std::size_t count = std::min(data.size(), state.size()); std::copy(state.begin(), state.begin() + count, data.begin() + data.size() - count); - nil::marshalling::status_type status; - boost::multiprecision::number raw_result = - nil::marshalling::pack(state, status); + nil::crypto3::marshalling::status_type status; + big_uint_of_hash_size raw_result = + nil::crypto3::marshalling::pack(state, status); THROW_IF_ERROR_STATUS(status, "fiat_shamir_heuristic_sequential::challenge"); return raw_result; } @@ -209,8 +209,8 @@ namespace nil { template Integral int_challenge() { state = hash(state); - nil::marshalling::status_type status; - boost::multiprecision::number raw_result = nil::marshalling::pack(state, status); + nil::crypto3::marshalling::status_type status; + big_uint_of_hash_size raw_result = nil::crypto3::marshalling::pack(state, status); // If we remove the next line, raw_result is a much larger number, conversion to 'Integral' will overflow // and in debug mode an assert will fire. In release mode nothing will change. raw_result &= ~Integral(0); @@ -267,8 +267,8 @@ namespace nil { // Not to replace current hacks with new bigger ones, we'll just keep it. typedef Hash hash_type; - using field_type = nil::crypto3::algebra::curves::pallas::base_field_type; - using poseidon_policy = nil::crypto3::hashes::detail::mina_poseidon_policy; + using field_type = typename Hash::policy_type::field_type; + using poseidon_policy = typename Hash::policy_type; using permutation_type = nil::crypto3::hashes::detail::poseidon_permutation; using state_type = typename permutation_type::state_type; @@ -329,7 +329,7 @@ namespace nil { Integral result = 0u; Integral factor = 1u; size_t bytes_to_fill = sizeof(Integral); - // TODO(martun): consider using export_bits here, or nil::marshalling::pack, instead of this. + // TODO(martun): consider using export_bits here, or nil::crypto3::marshalling::pack, instead of this. while (intermediate_result > 0u && bytes_to_fill != 0u) { auto last_byte = intermediate_result % 0x100u; Integral last_byte_integral = static_cast(last_byte); diff --git a/crypto3/libs/zk/include/nil/crypto3/zk/transcript/kimchi_transcript.hpp b/crypto3/libs/zk/include/nil/crypto3/zk/transcript/kimchi_transcript.hpp index a953d35d9f..e7549fe080 100644 --- a/crypto3/libs/zk/include/nil/crypto3/zk/transcript/kimchi_transcript.hpp +++ b/crypto3/libs/zk/include/nil/crypto3/zk/transcript/kimchi_transcript.hpp @@ -7,9 +7,6 @@ #include #include -#include -#include - #include #include @@ -32,15 +29,15 @@ namespace nil { template integral_type pack(std::vector limbs_lsb) { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::size_t byte_size = - boost::multiprecision::backends::max_precision::value / + integral_type::Bits / // TODO(ioxid): should round up here CHAR_BIT; std::size_t size = byte_size / sizeof(uint64_t) + (byte_size % sizeof(uint64_t) ? 1 : 0); limbs_lsb.resize(size); std::reverse(limbs_lsb.begin(), limbs_lsb.end()); - integral_type res = nil::marshalling::pack(limbs_lsb, status); + integral_type res = nil::crypto3::marshalling::pack(limbs_lsb, status); THROW_IF_ERROR_STATUS(status, "std::vector to integral_type"); return res; @@ -48,10 +45,10 @@ namespace nil { template std::vector unpack(value_type &value) { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; integral_type scalar_value = integral_type(value.data); std::vector limbs_lsb = - nil::marshalling::pack(scalar_value, status); + nil::crypto3::marshalling::pack(scalar_value, status); THROW_IF_ERROR_STATUS(status, "integral_type to std::vector"); std::reverse(limbs_lsb.begin(), limbs_lsb.end()); @@ -255,10 +252,10 @@ namespace nil { typename base_field_type::integral_type(f.data)); this->sponge.absorb(casted_to_base_value); } else { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; typename scalar_field_type::integral_type scalar_f(f.data); std::vector bits = - nil::marshalling::pack(scalar_f, status); + nil::crypto3::marshalling::pack(scalar_f, status); THROW_IF_ERROR_STATUS(status, "FqSponge::absorb_fr"); std::vector shifted_bits(bits.size(), false); @@ -270,7 +267,7 @@ namespace nil { typename base_field_type::integral_type(0); typename base_field_type::integral_type high_bits = - nil::marshalling::pack(shifted_bits, status); + nil::crypto3::marshalling::pack(shifted_bits, status); THROW_IF_ERROR_STATUS(status, "FqSponge::absorb_fr"); typename base_field_type::value_type high_bits_field = diff --git a/crypto3/libs/zk/test/CMakeLists.txt b/crypto3/libs/zk/test/CMakeLists.txt index dc8641ecfa..4443ef17aa 100644 --- a/crypto3/libs/zk/test/CMakeLists.txt +++ b/crypto3/libs/zk/test/CMakeLists.txt @@ -19,6 +19,8 @@ cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} Boost::unit_test_framework Boost::log ) +set_target_properties(_cm_internal_tests-crypto3-zk-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-crypto3-zk-test REUSE_FROM crypto3_precompiled_headers) if(PROFILING_ENABLED) add_definitions(-DPROFILING_ENABLED) @@ -36,26 +38,21 @@ macro(define_zk_test test) ${Boost_INCLUDE_DIRS}) - set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 20) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(${full_test_name} PRIVATE "-fconstexpr-steps=2147483647") elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(${full_test_name} PRIVATE "-fconstexpr-ops-limit=4294967295") endif() - + target_precompile_headers(${full_test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(TESTS_NAMES - "commitment/lpc" "commitment/fri" + "commitment/lpc" "commitment/kzg" "commitment/fold_polynomial" - "commitment/pedersen" - "commitment/proof_of_knowledge" -# "commitment/powers_of_tau" -# "commitment/type_traits" -# "commitment/kimchi_pedersen" "commitment/proof_of_work" "math/expression" diff --git a/crypto3/libs/zk/test/commitment/kimchi_pedersen.cpp b/crypto3/libs/zk/test/commitment/kimchi_pedersen.cpp deleted file mode 100644 index 6c757c188f..0000000000 --- a/crypto3/libs/zk/test/commitment/kimchi_pedersen.cpp +++ /dev/null @@ -1,252 +0,0 @@ -#define BOOST_TEST_MODULE kimchi_commitment_test - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::zk; -using curve_type = algebra::curves::vesta; -using group_type = curve_type::template g1_type; -using scalar_field_type = curve_type::scalar_field_type; -using base_field_type = curve_type::base_field_type; -using scalar_value_type = scalar_field_type::value_type; -using kimchi_pedersen = commitments::kimchi_pedersen; -using sponge_type = kimchi_pedersen::sponge_type; -using params_type = kimchi_pedersen::params_type; -using batchproof_type = kimchi_pedersen::batchproof_type; -using commitment_type = kimchi_pedersen::commitment_type; -using blinding_type = kimchi_pedersen::blinding_type; -using proof_type = kimchi_pedersen::proof_type; -using polynomial_type = kimchi_pedersen::polynomial_type; -using polynomial_type_single = kimchi_pedersen::polynomial_type_single; -using evaluation_type = kimchi_pedersen::evaluation_type; -using blinded_commitment_type = kimchi_pedersen::blinded_commitment_type; - -struct Commitment { - /// the commitment itself, potentially in chunks - commitment_type chunked_commitment; - - /// an optional degree bound - std::size_t bound; -}; - -/// An evaluated commitment (given a number of evaluation points) -struct evaluated_commitment { - /// the commitment - Commitment commit; - - /// the chunked evaluations given in the same order as the evaluation points - std::vector> chunked_evals; -}; - -struct CommitmentAndSecrets { - /// the commitment evaluated at some points - evaluated_commitment eval_commit; - - /// the polynomial - math::polynomial poly; - - /// the blinding part - blinding_type chunked_blinding; -}; - -struct aggregated_evaluation_proof { - /// a number of evaluation points - std::vector eval_points; - - /// a number of commitments evaluated at these evaluation points - std::vector eval_commitments; - - /// the random value used to separate polynomials - scalar_value_type polymask; - - /// the random value used to separate evaluations - scalar_value_type evalmask; - - /// an Fq-sponge - sponge_type fq_sponge; - - /// the actual evaluation proof - proof_type proof; - - batchproof_type verify_type() { - std::vector coms; - - for (auto &eval_com: eval_commitments) { - assert(eval_points.size() == eval_com.chunked_evals.size()); - coms.push_back( - evaluation_type( - {eval_com.commit.chunked_commitment, eval_com.chunked_evals, (int) eval_com.commit.bound})); - } - - return batchproof_type({fq_sponge, coms, eval_points, polymask, evalmask, proof}); - } -}; - -struct chunked_polynomial { - std::vector> chunked_polynomials; - unsigned int chunk_size; - - chunked_polynomial(math::polynomial &big_polynomial, unsigned int chunk_size) : - chunk_size(chunk_size) { - unsigned int number_of_chunks = - big_polynomial.size() / chunk_size + (big_polynomial.size() % chunk_size ? 1 : 0); - - for (unsigned int i = 0; i < number_of_chunks; ++i) { - auto iter_chunk_begin = big_polynomial.begin() + i * chunk_size; - auto iter_chunk_end = - big_polynomial.begin() + (i == number_of_chunks - 1 ? big_polynomial.size() : (i + 1) * chunk_size); - chunked_polynomials.emplace_back(iter_chunk_begin, iter_chunk_end); - } - } - - std::vector evaluate_chunks(scalar_value_type &point) { - std::vector result; - - for (auto &a: chunked_polynomials) { - result.push_back(a.evaluate(point)); - } - - return result; - } -}; - -BOOST_AUTO_TEST_SUITE(kimchi_commitment_test_suite) - - BOOST_AUTO_TEST_CASE(kimchi_commitment_test_opening_proof) { - snark::group_map g_map; - sponge_type fq_sponge; - params_type params = kimchi_pedersen::setup(20); - - std::vector coeffs; - for (int i = 0; i < 10; ++i) { - coeffs.emplace_back(i); - } - - math::polynomial poly1(coeffs); - math::polynomial poly2(coeffs.begin(), coeffs.begin() + 5); - - blinded_commitment_type commitment = kimchi_pedersen::commitment(params, poly1, -1); - blinded_commitment_type bounded_commitment = kimchi_pedersen::commitment(params, poly2, poly2.degree() + 1); - - scalar_value_type u = algebra::random_element(); - scalar_value_type v = algebra::random_element(); - - polynomial_type polys{{poly1, -1, std::get<1>(commitment)}, - {poly2, static_cast(poly2.degree() + 1), std::get<1>(bounded_commitment)}}; - - std::vector elm{algebra::random_element(), - algebra::random_element()}; - - proof_type proof = kimchi_pedersen::proof_eval(params, g_map, polys, elm, v, u, fq_sponge); - - chunked_polynomial poly1_chunked(poly1, params.g.size()); - chunked_polynomial poly2_chunked(poly2, params.g.size()); - - std::vector> poly1_chunked_evals = {poly1_chunked.evaluate_chunks(elm[0]), - poly1_chunked.evaluate_chunks(elm[1])}; - std::vector> poly2_chunked_evals = {poly2_chunked.evaluate_chunks(elm[0]), - poly2_chunked.evaluate_chunks(elm[1])}; - - std::vector evals; - evals.emplace_back(std::get<0>(commitment), poly1_chunked_evals, -1); - evals.emplace_back(std::get<0>(bounded_commitment), poly2_chunked_evals, poly2.degree() + 1); - sponge_type new_fq_sponge; - std::vector batch; - batch.emplace_back(new_fq_sponge, evals, elm, v, u, proof); - - BOOST_CHECK(kimchi_pedersen::verify_eval(params, g_map, batch)); - } - - BOOST_AUTO_TEST_CASE(kimchi_commitment_test_case) { - - snark::group_map g_map; - sponge_type fq_sponge; - params_type params = kimchi_pedersen::setup(1 << 7); - - std::vector proofs; - - std::size_t count_eval_proofs = 1; - for (std::size_t i = 0; i < count_eval_proofs; ++i) { - std::vector eval_points(7); - - // Random_element is called with the default parameter, yet we need to wrap it in a lamda. - std::generate(eval_points.begin(), eval_points.end(), - []() { return algebra::random_element(); }); - - std::vector commitments; - - for (unsigned int i = 0; i < 3; ++i) { - unsigned int len = std::rand() % 500; - std::vector polynom_coeffs(len); - - // Random_element is called with the default parameter, yet we need to wrap it in a lamda. - std::generate(polynom_coeffs.begin(), polynom_coeffs.end(), - []() { return algebra::random_element(); }); - unsigned int bound = polynom_coeffs.size(); - - math::polynomial poly(polynom_coeffs.begin(), polynom_coeffs.end()); - - blinded_commitment_type blinded_commitment = kimchi_pedersen::commitment(params, poly, bound); - - std::vector> chunked_evals; - - chunked_polynomial chunked_poly(poly, params.g.size()); - - for (auto &point: eval_points) { - chunked_evals.emplace_back(chunked_poly.evaluate_chunks(point)); - } - - Commitment commit{std::get<0>(blinded_commitment), bound}; - evaluated_commitment eval_commit{commit, chunked_evals}; - commitments.emplace_back(CommitmentAndSecrets({eval_commit, poly, std::get<1>(blinded_commitment)})); - } - - polynomial_type polynomials; - - for (auto &c: commitments) { - polynomials.emplace_back(c.poly, c.eval_commit.commit.bound, c.chunked_blinding); - } - - scalar_value_type polymask = algebra::random_element(); - scalar_value_type evalmask = algebra::random_element(); - - proof_type proof = - kimchi_pedersen::proof_eval(params, g_map, polynomials, eval_points, polymask, evalmask, fq_sponge); - - std::vector eval_commitments; - for (auto &c: commitments) { - eval_commitments.emplace_back(c.eval_commit); - } - - sponge_type new_fq_sponge; - proofs.emplace_back( - aggregated_evaluation_proof( - {eval_points, eval_commitments, polymask, evalmask, new_fq_sponge, proof})); - } - - std::vector batch; - for (auto &proof: proofs) { - batch.emplace_back(proof.verify_type()); - } - - BOOST_CHECK(kimchi_pedersen::verify_eval(params, g_map, batch)); - } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/test/commitment/kzg.cpp b/crypto3/libs/zk/test/commitment/kzg.cpp index 2ca172bd12..70fdca8a5d 100644 --- a/crypto3/libs/zk/test/commitment/kzg.cpp +++ b/crypto3/libs/zk/test/commitment/kzg.cpp @@ -220,23 +220,23 @@ BOOST_AUTO_TEST_CASE(kzg_test_mnt6_accumulated) { std::size_t n = 8; scalar_value_type z = 2u; const polynomial f = { - 0x0ed6fb07f52c1f1ef7952250702368474f20fd7af906ba3a5842cdb7946c69b603852bf1069_cppui_modular298, - 0x14db9efba58de09f8ccb1d73fefce45393856e6a7509006561fe67ea354ec69d791b44c1476_cppui_modular298, - 0x0e9fa83a6f8891bc7e6aa1afae85e11dd80cdef32dfcef7cedc12792cf74141c899c8fb1f98_cppui_modular298, - 0x101cc0b43782ca40ae5bf96aabf461e1a623ab9284acac3bb6d55bff4429356dad714ee0bd0_cppui_modular298, - 0x1310586a4d1ed251d1e4c95711fb9346a2b233649f5ce32fe1cf3aea423d131787187a13799_cppui_modular298, - 0x0d9ed064a24e83ac6134de7cca08bdc3e31ffd4db0a004b63039f76821ec2cc53b7e6a74735_cppui_modular298, - 0x2839e48822f55b4e487b817ddf06a6e32e0dcc0c2ced1e738d38fec15bd4717d7680dda90ec_cppui_modular298, + 0x0ed6fb07f52c1f1ef7952250702368474f20fd7af906ba3a5842cdb7946c69b603852bf1069_big_uint298, + 0x14db9efba58de09f8ccb1d73fefce45393856e6a7509006561fe67ea354ec69d791b44c1476_big_uint298, + 0x0e9fa83a6f8891bc7e6aa1afae85e11dd80cdef32dfcef7cedc12792cf74141c899c8fb1f98_big_uint298, + 0x101cc0b43782ca40ae5bf96aabf461e1a623ab9284acac3bb6d55bff4429356dad714ee0bd0_big_uint298, + 0x1310586a4d1ed251d1e4c95711fb9346a2b233649f5ce32fe1cf3aea423d131787187a13799_big_uint298, + 0x0d9ed064a24e83ac6134de7cca08bdc3e31ffd4db0a004b63039f76821ec2cc53b7e6a74735_big_uint298, + 0x2839e48822f55b4e487b817ddf06a6e32e0dcc0c2ced1e738d38fec15bd4717d7680dda90ec_big_uint298, }; auto f_eval = f.evaluate(alpha); auto params = typename kzg_type::params_type(n, alpha); auto commit = zk::algorithms::commit(params, f); - nil::marshalling::status_type status; - using endianness = nil::marshalling::option::big_endian; + nil::crypto3::marshalling::status_type status; + using endianness = nil::crypto3::marshalling::option::big_endian; std::vector single_commitment_bytes = - nil::marshalling::pack(commit, status); + nil::crypto3::marshalling::pack(commit, status); dump_vector(single_commitment_bytes, "commitment"); BOOST_CHECK(curve_type::template g1_type<>::value_type::one() == params.commitment_key[0]); @@ -395,83 +395,83 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { //~-~-~-~ commiting to batch: 0~-~-~-~ {8, { 0x1u, - 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_cppui_modular298, - 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_cppui_modular298, - 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_cppui_modular298, - 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_cppui_modular298, - 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_cppui_modular298, - 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_cppui_modular298, + 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_big_uint298, + 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_big_uint298, + 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_big_uint298, + 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_big_uint298, + 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_big_uint298, + 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_big_uint298, }}, {8, { 0x11u, - 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_cppui_modular298, - 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_cppui_modular298, - 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_cppui_modular298, - 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_cppui_modular298, - 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_cppui_modular298, - 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_cppui_modular298, + 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_big_uint298, + 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_big_uint298, + 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_big_uint298, + 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_big_uint298, + 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_big_uint298, + 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_big_uint298, }}, {8, { 0x121u, - 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_cppui_modular298, - 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_cppui_modular298, - 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_cppui_modular298, - 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_cppui_modular298, - 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_cppui_modular298, - 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_cppui_modular298, + 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_big_uint298, + 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_big_uint298, + 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_big_uint298, + 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_big_uint298, + 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_big_uint298, + 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_big_uint298, }}, {8, { 0x1331u, - 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_cppui_modular298, - 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_cppui_modular298, - 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_cppui_modular298, - 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_cppui_modular298, - 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_cppui_modular298, - 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_cppui_modular298, + 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_big_uint298, + 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_big_uint298, + 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_big_uint298, + 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_big_uint298, + 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_big_uint298, + 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_big_uint298, }}, {8, { 0x1u, - 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_cppui_modular298, - 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_cppui_modular298, - 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_cppui_modular298, - 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_cppui_modular298, - 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_cppui_modular298, - 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_cppui_modular298, + 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_big_uint298, + 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_big_uint298, + 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_big_uint298, + 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_big_uint298, + 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_big_uint298, + 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_big_uint298, }}, {8, { 0x11u, - 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_cppui_modular298, - 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_cppui_modular298, - 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_cppui_modular298, - 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_cppui_modular298, - 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_cppui_modular298, - 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_cppui_modular298, + 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_big_uint298, + 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_big_uint298, + 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_big_uint298, + 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_big_uint298, + 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_big_uint298, + 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_big_uint298, }}, {8, { 0x121u, - 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_cppui_modular298, - 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_cppui_modular298, - 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_cppui_modular298, - 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_cppui_modular298, - 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_cppui_modular298, - 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_cppui_modular298, + 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_big_uint298, + 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_big_uint298, + 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_big_uint298, + 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_big_uint298, + 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_big_uint298, + 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_big_uint298, }}, {8, { 0x1331u, - 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_cppui_modular298, - 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_cppui_modular298, - 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_cppui_modular298, - 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_cppui_modular298, - 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_cppui_modular298, - 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_cppui_modular298, + 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_big_uint298, + 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_big_uint298, + 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_big_uint298, + 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_big_uint298, + 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_big_uint298, + 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_big_uint298, }}, {8, {0x0u, 0x0u, 0x0u, 0x0u, 0x0u, 0x1u, 0x0u, 0x0u,}}, {8, {0x0u, 0x0u, 0x0u, 0x0u, 0x0u, 0x0u, 0x1u, 0x1u,}}, @@ -481,9 +481,9 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { 0x1u, 0x0u, 0x0u, - 0x1f8915cc2533543f2bc6164e6238fc23a81c0f463c4646f1d40c1d7dfd0ae08ab78492cbef1_cppui_modular298, - 0x39bef1b52e65b396fbac77780f097c34e4287e259355a4ea31e0dcfacd0677a359e136b2fdd_cppui_modular298, - 0x173564dab75ba19b463030c03996325d30e7829fc226518b459919e6d64278946b02141888b_cppui_modular298, + 0x1f8915cc2533543f2bc6164e6238fc23a81c0f463c4646f1d40c1d7dfd0ae08ab78492cbef1_big_uint298, + 0x39bef1b52e65b396fbac77780f097c34e4287e259355a4ea31e0dcfacd0677a359e136b2fdd_big_uint298, + 0x173564dab75ba19b463030c03996325d30e7829fc226518b459919e6d64278946b02141888b_big_uint298, }}, {8, { 0x0u, @@ -491,43 +491,43 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { 0x0u, 0x1u, 0x1u, - 0x0722a67f49f9ecfe9f0874df295dcd87a484fabc9ed6fa56696cb563b4ded702bbe2984c787_cppui_modular298, - 0x3b1bf86dcd7b7526048b0705c8287a3b97ca771ba445718a3614352160278d229349a1b7d08_cppui_modular298, - 0x1e127023ee88eeab382e9d07a328168599c3a9e3c0fe99eadb31575515db872426d7356b1bb_cppui_modular298, + 0x0722a67f49f9ecfe9f0874df295dcd87a484fabc9ed6fa56696cb563b4ded702bbe2984c787_big_uint298, + 0x3b1bf86dcd7b7526048b0705c8287a3b97ca771ba445718a3614352160278d229349a1b7d08_big_uint298, + 0x1e127023ee88eeab382e9d07a328168599c3a9e3c0fe99eadb31575515db872426d7356b1bb_big_uint298, }}, //~-~-~-~ commiting to batch: 1~-~-~-~ {8, { - 0x39ef702ef59ff1816e4f51f2ae7fe2d78108c006d5f3039cd1a474ba8c48c16a62518f86863_cppui_modular298, - 0x17dadc1965bae6d9426ef1a2e6d3640ac4cd96089c55c7dc3800924668fcc450cbaa7de9f4c_cppui_modular298, - 0x1202bd2e4122c826d8ba7cd66346c0df0326468fd6e7989c8eebe3dedfcbd9b0ecdc1fb41c2_cppui_modular298, - 0x3b718dda0c9262c55640bd1e364df577ec246e46cb05109733008263282cc1a8959b4bf6fa7_cppui_modular298, - 0x27b08d175547d973e48f341c081c3851eee512d6e73200bfa47b1e049e1d268409ad2ce21c9_cppui_modular298, - 0x1872fd6e208095436bfcb92388e0d1c8509c3f8e89235d0430c61add0ab203ac30370518ce6_cppui_modular298, - 0x304c1332568ebbe7347b598eef6cb41f198a574c4ff7cd151337211efea753ec6fc7d61330b_cppui_modular298, - 0x1b41e76a1c5a4daa01029a0ec27b5f0b06ca7b480b600b8b573ae00feaab4ad9f1146a99459_cppui_modular298, + 0x39ef702ef59ff1816e4f51f2ae7fe2d78108c006d5f3039cd1a474ba8c48c16a62518f86863_big_uint298, + 0x17dadc1965bae6d9426ef1a2e6d3640ac4cd96089c55c7dc3800924668fcc450cbaa7de9f4c_big_uint298, + 0x1202bd2e4122c826d8ba7cd66346c0df0326468fd6e7989c8eebe3dedfcbd9b0ecdc1fb41c2_big_uint298, + 0x3b718dda0c9262c55640bd1e364df577ec246e46cb05109733008263282cc1a8959b4bf6fa7_big_uint298, + 0x27b08d175547d973e48f341c081c3851eee512d6e73200bfa47b1e049e1d268409ad2ce21c9_big_uint298, + 0x1872fd6e208095436bfcb92388e0d1c8509c3f8e89235d0430c61add0ab203ac30370518ce6_big_uint298, + 0x304c1332568ebbe7347b598eef6cb41f198a574c4ff7cd151337211efea753ec6fc7d61330b_big_uint298, + 0x1b41e76a1c5a4daa01029a0ec27b5f0b06ca7b480b600b8b573ae00feaab4ad9f1146a99459_big_uint298, }}, {8, { - 0x11cccdf2e5ccc50aa597c4194181c1fe652f508e4aafb2a0137f878c4b3b9d09511285954a1_cppui_modular298, - 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_cppui_modular298, - 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_cppui_modular298, - 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_cppui_modular298, - 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_cppui_modular298, - 0x011394bbd52cee496c395d41b68e0732c88572384d492e195f8f5b1c7a1c61f6ed67f94c950_cppui_modular298, - 0x194e4123c5669a48341b2f6b127f0a8b109818666a3d2229f23414de9c5d23d2d63c05309be_cppui_modular298, - 0x30641ec0f843aeb8202263821cac300d11b237ce42e2876763c8c16513494b993aaf5941f61_cppui_modular298, + 0x11cccdf2e5ccc50aa597c4194181c1fe652f508e4aafb2a0137f878c4b3b9d09511285954a1_big_uint298, + 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_big_uint298, + 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_big_uint298, + 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_big_uint298, + 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_big_uint298, + 0x011394bbd52cee496c395d41b68e0732c88572384d492e195f8f5b1c7a1c61f6ed67f94c950_big_uint298, + 0x194e4123c5669a48341b2f6b127f0a8b109818666a3d2229f23414de9c5d23d2d63c05309be_big_uint298, + 0x30641ec0f843aeb8202263821cac300d11b237ce42e2876763c8c16513494b993aaf5941f61_big_uint298, }}, {8, { - 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_cppui_modular298, - 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_cppui_modular298, - 0x0c3d778f1a6196ab1c2ba05597c7b275b23cb23faf7b128228ae23ad2aac20cc2bb1cc68ae9_cppui_modular298, - 0x1d871330c3db0fc34493247dc5f22570c08e3c4d3019e89ccadb340ddf48317d9dda6bf5cd9_cppui_modular298, - 0x114ac4e3bcbc6bf412878efb87080a493920fdbdb54535e797af6c6f15cacfa5a93c46626f0_cppui_modular298, - 0x0cfede4389503774cda3e57a7034cc1c54ad074f86f551b54a44118a30afd0fc06ad7393ee6_cppui_modular298, - 0x3b079297527c765d71f9db51a85f47c081d4047080ad9352f6a325410e1e8490ddc59988939_cppui_modular298, - 0x299eacd3439bb98b27f8cbaafb3983162a895d3de16cb29360ad4b12f5f114dee4f5a065b97_cppui_modular298, + 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_big_uint298, + 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_big_uint298, + 0x0c3d778f1a6196ab1c2ba05597c7b275b23cb23faf7b128228ae23ad2aac20cc2bb1cc68ae9_big_uint298, + 0x1d871330c3db0fc34493247dc5f22570c08e3c4d3019e89ccadb340ddf48317d9dda6bf5cd9_big_uint298, + 0x114ac4e3bcbc6bf412878efb87080a493920fdbdb54535e797af6c6f15cacfa5a93c46626f0_big_uint298, + 0x0cfede4389503774cda3e57a7034cc1c54ad074f86f551b54a44118a30afd0fc06ad7393ee6_big_uint298, + 0x3b079297527c765d71f9db51a85f47c081d4047080ad9352f6a325410e1e8490ddc59988939_big_uint298, + 0x299eacd3439bb98b27f8cbaafb3983162a895d3de16cb29360ad4b12f5f114dee4f5a065b97_big_uint298, }}, {8, { - 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_cppui_modular298, + 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_big_uint298, 0x0u, 0x1u, 0x0u, 0x0u, 0x0u, 0x0u, 0x0u, }}, @@ -536,24 +536,24 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { //~-~-~-~ commiting to batch: 3~-~-~-~ {8, { - 0x2783a8a7c5cf7e94e4d1fdc4aa6eb807ea4eddbf81ea87939f040dc851e9212b9dca604ac9a_cppui_modular298, - 0x13230785fb96c79b65251354a51866632384c4dc7ceff4e48dc2fac8f09db1ce7367e20608b_cppui_modular298, - 0x2ccbbf5a905e4515c62fede907c2625d90bfda58027217f7e58155b67d5851fb4cf46f04364_cppui_modular298, - 0x17adaf6b5019e118bc7ac6213b0dc84cf1a9cada9cc620471384b7a191db27251337ec3d3b7_cppui_modular298, - 0x05b19c26a34901d91528679eeac2c7f311aa3f5f0fa669855b10522373949671df3f1e23c38_cppui_modular298, - 0x37421ad4e9cf2ccadc50246390593aa253e4ca3ba5767e931130a2f905a49443e0e02fc0ce8_cppui_modular298, - 0x2a2814a40ce271f86b0369793c4c79d31686212ad02a382f6288ef94cabe1e2cff80ce74bd5_cppui_modular298, - 0x383fcb086d115688ba77b1449bd46480f3bd7cbb070242833338005e60dcaa9ba238c801961_cppui_modular298, + 0x2783a8a7c5cf7e94e4d1fdc4aa6eb807ea4eddbf81ea87939f040dc851e9212b9dca604ac9a_big_uint298, + 0x13230785fb96c79b65251354a51866632384c4dc7ceff4e48dc2fac8f09db1ce7367e20608b_big_uint298, + 0x2ccbbf5a905e4515c62fede907c2625d90bfda58027217f7e58155b67d5851fb4cf46f04364_big_uint298, + 0x17adaf6b5019e118bc7ac6213b0dc84cf1a9cada9cc620471384b7a191db27251337ec3d3b7_big_uint298, + 0x05b19c26a34901d91528679eeac2c7f311aa3f5f0fa669855b10522373949671df3f1e23c38_big_uint298, + 0x37421ad4e9cf2ccadc50246390593aa253e4ca3ba5767e931130a2f905a49443e0e02fc0ce8_big_uint298, + 0x2a2814a40ce271f86b0369793c4c79d31686212ad02a382f6288ef94cabe1e2cff80ce74bd5_big_uint298, + 0x383fcb086d115688ba77b1449bd46480f3bd7cbb070242833338005e60dcaa9ba238c801961_big_uint298, }}, {8, { - 0x0710f09328ac0442d2d93a61f4eda9b265a27ea0570484e3a1cf1aaa249974ea1a99377a11c_cppui_modular298, - 0x2bb0eec490c8ac0bbe164c6ee7072a8989e33a7006d8f222b1476b15c2ef0386b49b7d6bc28_cppui_modular298, - 0x3552ef5f48bc3702e4e9f8fc7b236de25d1a78e256d8417ff106bbc75b7cbfc36c8977b2896_cppui_modular298, - 0x3871e84395a7af9c0fdd19321af6b742815a982bb5f59bcf7be6793caa98f4a919032d2969d_cppui_modular298, - 0x153bd600c1074537112d1df7afd22932c713cc84c08d3c197cbdd9d84b675ab9c62e78d36a0_cppui_modular298, - 0x12d86d35994854ef3606ae63e5114209bec8dbb0d3ebb1bb9a786fd27ced58870d3779d3d7a_cppui_modular298, - 0x2e0895904268862017c64e0a495813bf84b1d2137a53102097557bd90c2aac21c0802fc1787_cppui_modular298, - 0x0742ee092a59ae6b7169ac51e7339c52adc1dc74471e0d207a3d29dd37d60ea9bc9438e5c15_cppui_modular298, + 0x0710f09328ac0442d2d93a61f4eda9b265a27ea0570484e3a1cf1aaa249974ea1a99377a11c_big_uint298, + 0x2bb0eec490c8ac0bbe164c6ee7072a8989e33a7006d8f222b1476b15c2ef0386b49b7d6bc28_big_uint298, + 0x3552ef5f48bc3702e4e9f8fc7b236de25d1a78e256d8417ff106bbc75b7cbfc36c8977b2896_big_uint298, + 0x3871e84395a7af9c0fdd19321af6b742815a982bb5f59bcf7be6793caa98f4a919032d2969d_big_uint298, + 0x153bd600c1074537112d1df7afd22932c713cc84c08d3c197cbdd9d84b675ab9c62e78d36a0_big_uint298, + 0x12d86d35994854ef3606ae63e5114209bec8dbb0d3ebb1bb9a786fd27ced58870d3779d3d7a_big_uint298, + 0x2e0895904268862017c64e0a495813bf84b1d2137a53102097557bd90c2aac21c0802fc1787_big_uint298, + 0x0742ee092a59ae6b7169ac51e7339c52adc1dc74471e0d207a3d29dd37d60ea9bc9438e5c15_big_uint298, }}, math::polynomial_dfs::zero(), math::polynomial_dfs::zero(), @@ -570,48 +570,48 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { // auto params = typename kzg_type::params_type(8, 8, alpha); auto params = create_kzg_params(3 /*degree_log*/); auto commits = zk::algorithms::commit(params, polys); - using endianness = nil::marshalling::option::big_endian; + using endianness = nil::crypto3::marshalling::option::big_endian; for (auto &c: commits) { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector single_commitment_bytes = - nil::marshalling::pack(c, status); + nil::crypto3::marshalling::pack(c, status); dump_vector(single_commitment_bytes, "commitment"); } std::vector> S = { - /* points_k_i:0,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,6: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,7: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,8: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298,}, - /* points_k_i:0,9: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298,}, - /* points_k_i:0,10:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,11:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:2,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298,}, - /* points_k_i:3,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, + /* points_k_i:0,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,6: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,7: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,8: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298,}, + /* points_k_i:0,9: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298,}, + /* points_k_i:0,10:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,11:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:2,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298,}, + /* points_k_i:3,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, }; std::vector T = zk::algorithms::merge_eval_points(S); { std::vector T_check = { - 0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298, + 0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298, }; std::sort(T.begin(), T.end()); BOOST_CHECK(T == T_check); diff --git a/crypto3/libs/zk/test/commitment/pedersen.cpp b/crypto3/libs/zk/test/commitment/pedersen.cpp deleted file mode 100644 index c7de3d9a8b..0000000000 --- a/crypto3/libs/zk/test/commitment/pedersen.cpp +++ /dev/null @@ -1,165 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE pedersen_test - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(pedersen_test_suite) - -BOOST_AUTO_TEST_CASE(pedersen_basic_test) { - - // setup - using curve_type = algebra::curves::bls12<381>; - using curve_group_type = curve_type::template g1_type<>; - using field_type = typename curve_type::scalar_field_type; - - constexpr static const int n = 50; - constexpr static const int k = 26; - curve_group_type::value_type g = algebra::random_element(); - curve_group_type::value_type h = algebra::random_element(); - while (g == h) { - h = algebra::random_element(); - } - - typedef typename zk::commitments::pedersen pedersen_type; - - typedef typename pedersen_type::proof_type proof_type; - typedef typename pedersen_type::params_type params_type; - - params_type params; - - params.n = n; - params.k = k; - params.g = g; - params.h = h; - - BOOST_CHECK(g != h); - BOOST_CHECK(n >= k); - BOOST_CHECK(k > 0); - - // commit - constexpr static const field_type::value_type w = field_type::value_type(37684); - - // eval - proof_type proof = pedersen_type::proof_eval(params, w); - - // verify - BOOST_CHECK(pedersen_type::verify_eval(params, proof)); - - std::vector idx; - std::vector idx_base; - for (int i = 1; i <= n; ++i) { - idx_base.push_back(i); - } - std::random_device rd; - std::mt19937 gen(rd()); - std::shuffle(idx_base.begin(), idx_base.end(), gen); - for (int i = 0; i < k; ++i) { - idx.push_back(idx_base[i]); - } - - BOOST_CHECK(idx.size() >= k); - field_type::value_type secret = pedersen_type::message_eval(params, proof, idx); - BOOST_CHECK(w == secret); -} - -BOOST_AUTO_TEST_CASE(pedersen_short_test) { - - // setup - using curve_type = algebra::curves::bls12<381>; - using curve_group_type = curve_type::template g1_type<>; - using field_type = typename curve_type::scalar_field_type; - - constexpr static const int n = 2; - constexpr static const int k = 1; - static curve_group_type::value_type g = algebra::random_element(); - static curve_group_type::value_type h = algebra::random_element(); - while (g == h) { - h = algebra::random_element(); - } - - typedef typename zk::commitments::pedersen pedersen_type; - - typedef typename pedersen_type::proof_type proof_type; - typedef typename pedersen_type::params_type params_type; - - params_type params; - - params.n = n; - params.k = k; - params.g = g; - params.h = h; - - BOOST_CHECK(g != h); - BOOST_CHECK(n >= k); - BOOST_CHECK(k > 0); - - // commit - constexpr static const field_type::value_type w = field_type::value_type(3); - - // eval - proof_type proof = pedersen_type::proof_eval(params, w); - - // verify - BOOST_CHECK(pedersen_type::verify_eval(params, proof)); - - std::vector idx; - std::vector idx_base; - for (int i = 1; i <= n; ++i) { - idx_base.push_back(i); - } - std::random_device rd; - std::mt19937 gen(rd()); - std::shuffle(idx_base.begin(), idx_base.end(), gen); - for (int i = 0; i < k; ++i) { - idx.push_back(idx_base[i]); - } - - BOOST_CHECK(idx.size() >= k); - field_type::value_type secret = pedersen_type::message_eval(params, proof, idx); - BOOST_CHECK(w == secret); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/test/commitment/powers_of_tau.cpp b/crypto3/libs/zk/test/commitment/powers_of_tau.cpp deleted file mode 100644 index ec820748da..0000000000 --- a/crypto3/libs/zk/test/commitment/powers_of_tau.cpp +++ /dev/null @@ -1,189 +0,0 @@ -#define BOOST_TEST_MODULE powers_of_tau_test - -#include - -#include -#include -#include -#include -#include - -#include - -using namespace nil::crypto3::algebra; -using namespace nil::crypto3::zk::commitments; - -BOOST_AUTO_TEST_SUITE(powers_of_tau_test_suite) - - BOOST_AUTO_TEST_CASE(powers_of_tau_result_basic_test) { - using curve_type = curves::bls12<381>; - using g1_value_type = curve_type::g1_type<>::value_type; - using g2_value_type = curve_type::g2_type<>::value_type; - using scalar_field_type = curve_type::scalar_field_type; - - constexpr const unsigned tau_powers = 1 << 5; - - using scheme_type = powers_of_tau; - - auto acc1 = scheme_type::accumulator_type(); - auto acc2 = acc1; - auto sk = scheme_type::generate_private_key(); - auto pk = scheme_type::proof_eval(sk, acc1); - acc2.transform(sk); - - BOOST_CHECK(scheme_type::verify_eval(pk, acc1, acc2)); - auto result = scheme_type::result_type::from_accumulator(acc2, tau_powers); - - auto g1_generator = g1_value_type::one(); - auto g2_generator = g2_value_type::one(); - - BOOST_CHECK(result.alpha_g1 == g1_generator * sk.alpha); - BOOST_CHECK(result.beta_g1 == g1_generator * sk.beta); - BOOST_CHECK(result.beta_g2 == g2_generator * sk.beta); - - BOOST_CHECK_EQUAL(result.coeffs_g1.size(), tau_powers); - BOOST_CHECK_EQUAL(result.coeffs_g2.size(), tau_powers); - BOOST_CHECK_EQUAL(result.alpha_coeffs_g1.size(), tau_powers); - BOOST_CHECK_EQUAL(result.beta_coeffs_g1.size(), tau_powers); - - auto domain = nil::crypto3::math::make_evaluation_domain(tau_powers); - auto u = domain->evaluate_all_lagrange_polynomials(sk.tau); - - for (std::size_t i = 0; i < domain->m; ++i) { - BOOST_CHECK_MESSAGE(result.coeffs_g1[i] == g1_generator * u[i], std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result.coeffs_g2[i] == g2_generator * u[i], std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result.alpha_coeffs_g1[i] == g1_generator * (sk.alpha * u[i]), - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result.beta_coeffs_g1[i] == g1_generator * (sk.beta * u[i]), - std::string("i=") + std::to_string(i)); - } - - BOOST_CHECK_EQUAL(result.h.size(), domain->m - 1); - auto Zt = domain->compute_vanishing_polynomial(sk.tau); - for (std::size_t i = 0; i < domain->m - 1; ++i) { - BOOST_CHECK_MESSAGE(result.h[i] == g1_generator * (sk.tau.pow(i) * Zt), - std::string("i=") + std::to_string(i)); - } - - auto result_16 = scheme_type::result_type::from_accumulator(acc2, 16); - auto domain_16 = nil::crypto3::math::make_evaluation_domain(16); - auto u_16 = domain_16->evaluate_all_lagrange_polynomials(sk.tau); - - BOOST_CHECK_EQUAL(u_16.size(), 16); - - BOOST_CHECK(result_16.alpha_g1 == g1_generator * sk.alpha); - BOOST_CHECK(result_16.beta_g1 == g1_generator * sk.beta); - BOOST_CHECK(result_16.beta_g2 == g2_generator * sk.beta); - - BOOST_CHECK_EQUAL(result_16.coeffs_g1.size(), 16); - BOOST_CHECK_EQUAL(result_16.coeffs_g2.size(), 16); - BOOST_CHECK_EQUAL(result_16.alpha_coeffs_g1.size(), 16); - BOOST_CHECK_EQUAL(result_16.beta_coeffs_g1.size(), 16); - - for (std::size_t i = 0; i < domain_16->m; ++i) { - BOOST_CHECK_MESSAGE(result_16.coeffs_g1[i] == g1_generator * u_16[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_16.coeffs_g2[i] == g2_generator * u_16[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_16.alpha_coeffs_g1[i] == g1_generator * (sk.alpha * u_16[i]), - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_16.beta_coeffs_g1[i] == g1_generator * (sk.beta * u_16[i]), - std::string("i=") + std::to_string(i)); - } - - BOOST_CHECK_EQUAL(result_16.h.size(), domain_16->m - 1); - auto Zt_16 = domain_16->compute_vanishing_polynomial(sk.tau); - for (std::size_t i = 0; i < domain_16->m - 1; ++i) { - BOOST_CHECK_MESSAGE(result_16.h[i] == g1_generator * (sk.tau.pow(i) * Zt_16), - std::string("i=") + std::to_string(i)); - } - - auto result_24 = scheme_type::result_type::from_accumulator(acc2, 24); - auto domain_24 = nil::crypto3::math::make_evaluation_domain(24); - auto u_24 = domain_24->evaluate_all_lagrange_polynomials(sk.tau); - - BOOST_CHECK_EQUAL(u_24.size(), 24); - - BOOST_CHECK(result_24.alpha_g1 == g1_generator * sk.alpha); - BOOST_CHECK(result_24.beta_g1 == g1_generator * sk.beta); - BOOST_CHECK(result_24.beta_g2 == g2_generator * sk.beta); - - BOOST_CHECK_EQUAL(result_24.coeffs_g1.size(), 24); - BOOST_CHECK_EQUAL(result_24.coeffs_g2.size(), 24); - BOOST_CHECK_EQUAL(result_24.alpha_coeffs_g1.size(), 24); - BOOST_CHECK_EQUAL(result_24.beta_coeffs_g1.size(), 24); - - for (std::size_t i = 0; i < domain_24->m; ++i) { - BOOST_CHECK_MESSAGE(result_24.coeffs_g1[i] == g1_generator * u_24[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_24.coeffs_g2[i] == g2_generator * u_24[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_24.alpha_coeffs_g1[i] == g1_generator * (sk.alpha * u_24[i]), - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_24.beta_coeffs_g1[i] == g1_generator * (sk.beta * u_24[i]), - std::string("i=") + std::to_string(i)); - } - - BOOST_CHECK_EQUAL(result_24.h.size(), domain_24->m - 1); - auto Zt_24 = domain_24->compute_vanishing_polynomial(sk.tau); - for (std::size_t i = 0; i < domain_24->m - 1; ++i) { - BOOST_CHECK_MESSAGE(result_24.h[i] == g1_generator * (sk.tau.pow(i) * Zt_24), - std::string("i=") + std::to_string(i)); - } - } - - BOOST_AUTO_TEST_CASE(powers_of_tau_basic_test) { - using curve_type = curves::bls12<381>; - using scheme_type = powers_of_tau; - auto acc1 = scheme_type::accumulator_type(); - auto acc2 = acc1; - auto sk = scheme_type::generate_private_key(); - auto pubkey = scheme_type::proof_eval(sk, acc2); - acc2.transform(sk); - - BOOST_CHECK(acc1.tau_powers_g1[0] == acc2.tau_powers_g1[0]); - BOOST_CHECK(scheme_type::verify_eval(pubkey, acc1, acc2)); - auto acc3 = acc2; - std::vector beacon{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - auto rng = scheme_type::rng_from_beacon(beacon); - auto beacon_sk = scheme_type::generate_private_key(rng); - auto beacon_pubkey = scheme_type::proof_eval(beacon_sk, acc2, rng); - acc3.transform(beacon_sk); - BOOST_CHECK(scheme_type::verify_eval(beacon_pubkey, acc2, acc3)); - - // Check reproducibility - auto rng_reproduced = scheme_type::rng_from_beacon(beacon); - auto beacon_sk_reproduced = scheme_type::generate_private_key(rng_reproduced); - BOOST_CHECK(beacon_sk.tau == beacon_sk_reproduced.tau); - BOOST_CHECK(beacon_sk.alpha == beacon_sk_reproduced.alpha); - BOOST_CHECK(beacon_sk.beta == beacon_sk_reproduced.beta); - auto beacon_pubkey_reproduced = scheme_type::proof_eval(beacon_sk_reproduced, acc2, rng_reproduced); - BOOST_CHECK(scheme_type::verify_eval(beacon_pubkey_reproduced, acc2, acc3)); - - auto result = scheme_type::result_type::from_accumulator(acc3, 32); - } - - BOOST_AUTO_TEST_CASE(keypair_generation_basic_test) { - using curve_type = curves::bls12<381>; - using scheme_type = powers_of_tau; - auto sk = scheme_type::generate_private_key(); - auto acc = scheme_type::accumulator_type(); - - std::vector transcript = scheme_type::compute_transcript(acc); - - auto pubkey = scheme_type::proof_eval(sk, acc); - auto tau_gs2 = scheme_type::proof_of_knowledge_scheme_type::compute_g2_s(pubkey.tau_pok.g1_s, - pubkey.tau_pok.g1_s_x, - transcript, 0); - BOOST_CHECK(scheme_type::proof_of_knowledge_scheme_type::verify_eval(pubkey.tau_pok, tau_gs2)); - auto alpha_gs2 = scheme_type::proof_of_knowledge_scheme_type::compute_g2_s(pubkey.alpha_pok.g1_s, - pubkey.alpha_pok.g1_s_x, transcript, - 1); - BOOST_CHECK(scheme_type::proof_of_knowledge_scheme_type::verify_eval(pubkey.alpha_pok, alpha_gs2)); - auto beta_gs2 = scheme_type::proof_of_knowledge_scheme_type::compute_g2_s(pubkey.beta_pok.g1_s, - pubkey.beta_pok.g1_s_x, transcript, - 2); - BOOST_CHECK(scheme_type::proof_of_knowledge_scheme_type::verify_eval(pubkey.beta_pok, beta_gs2)); - } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/test/commitment/proof_of_knowledge.cpp b/crypto3/libs/zk/test/commitment/proof_of_knowledge.cpp deleted file mode 100644 index 370880956d..0000000000 --- a/crypto3/libs/zk/test/commitment/proof_of_knowledge.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#define BOOST_TEST_MODULE powers_of_a_test - -#include - -#include -#include -#include -#include -#include - -#include - -using namespace nil::crypto3::algebra; -using namespace nil::crypto3::zk::commitments; - -BOOST_AUTO_TEST_SUITE(proof_of_knowledge_test_suite) - - BOOST_AUTO_TEST_CASE(pok_basic_test) { - using curve_type = curves::bls12<381>; - using scalar_field_type = curve_type::scalar_field_type; - using scheme_type = proof_of_knowledge; - std::vector transcript(64, 1); - scalar_field_type::value_type a = random_element(); - - auto a_pok = scheme_type::proof_eval(a, transcript, 0); - - auto a_gs2 = scheme_type::compute_g2_s(a_pok.g1_s, a_pok.g1_s_x, transcript, 0); - BOOST_CHECK(scheme_type::verify_eval(a_pok, a_gs2)); - BOOST_CHECK(scheme_type::verify_eval(a_pok, transcript, 0)); - } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/test/commitment/proof_of_work.cpp b/crypto3/libs/zk/test/commitment/proof_of_work.cpp index 3c7d02df10..f5606a5602 100644 --- a/crypto3/libs/zk/test/commitment/proof_of_work.cpp +++ b/crypto3/libs/zk/test/commitment/proof_of_work.cpp @@ -41,7 +41,7 @@ using namespace nil::crypto3::algebra; using namespace nil::crypto3::zk::commitments; -BOOST_AUTO_TEST_SUITE(proof_of_knowledge_test_suite) +BOOST_AUTO_TEST_SUITE(proof_of_work_test_suite) BOOST_AUTO_TEST_CASE(pow_poseidon_basic_test) { using curve_type = curves::pallas; diff --git a/crypto3/libs/zk/test/commitment/type_traits.cpp b/crypto3/libs/zk/test/commitment/type_traits.cpp index f4f855d28f..7f39e91ecb 100644 --- a/crypto3/libs/zk/test/commitment/type_traits.cpp +++ b/crypto3/libs/zk/test/commitment/type_traits.cpp @@ -36,8 +36,6 @@ // #include #include #include -#include -#include #include using namespace nil::crypto3; @@ -65,8 +63,6 @@ BOOST_AUTO_TEST_SUITE(commitments_type_traits_test_suite) zk::is_commitment>>::value); - static_assert(zk::is_commitment>::value); - static_assert(zk::is_commitment>::value); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/test/systems/plonk/pickles/kimchi.cpp b/crypto3/libs/zk/test/systems/plonk/pickles/kimchi.cpp index 0f2bc627d3..f0d8d9566e 100644 --- a/crypto3/libs/zk/test/systems/plonk/pickles/kimchi.cpp +++ b/crypto3/libs/zk/test/systems/plonk/pickles/kimchi.cpp @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include @@ -64,9 +64,9 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) >; template - boost::multiprecision::uint256_modular_t get_cppui_modular256(Iterator it) { + nil::crypto3::multiprecision::uint256_t get_big_uint256(Iterator it) { BOOST_ASSERT(it->second.template get_value() != ""); - return boost::multiprecision::uint256_modular_t(it->second.template get_value()); + return nil::crypto3::multiprecision::uint256_t(it->second.template get_value()); } // make_proof function name is similar to crypto3/marshalling naming style @@ -80,14 +80,14 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) i = 0; for (auto &row: best_chain.second.get_child(base_path + "messages.w_comm")) { auto it = row.second.get_child("").begin()->second.get_child("").begin(); - proof.commitments.w_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + proof.commitments.w_comm[i].unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); ++i; } auto it = best_chain.second.get_child(base_path + "messages.z_comm").begin()->second.get_child("").begin(); - proof.commitments.z_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + proof.commitments.z_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); it = best_chain.second.get_child(base_path + "messages.t_comm").begin()->second.get_child("").begin(); - proof.commitments.t_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + proof.commitments.t_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); // proof.commitments.lookup; // TODO: where it is? i = 0; @@ -96,18 +96,18 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) auto it1 = row.second.begin(); it1++; it1 = it1->second.begin(); - proof.proof.lr.push_back({{get_cppui_modular256(it0++), get_cppui_modular256(it0)}, - {get_cppui_modular256(it1++), get_cppui_modular256(it1)}}); + proof.proof.lr.push_back({{get_big_uint256(it0++), get_big_uint256(it0)}, + {get_big_uint256(it1++), get_big_uint256(it1)}}); ++i; } it = best_chain.second.get_child(base_path + "openings.proof.delta").begin(); - proof.proof.delta = {get_cppui_modular256(it++), get_cppui_modular256(it)}; + proof.proof.delta = {get_big_uint256(it++), get_big_uint256(it)}; it = best_chain.second.get_child(base_path + "openings.proof.sg").begin(); - proof.proof.sg = {get_cppui_modular256(it++), get_cppui_modular256(it)}; + proof.proof.sg = {get_big_uint256(it++), get_big_uint256(it)}; - proof.proof.z1 = boost::multiprecision::uint256_modular_t( + proof.proof.z1 = nil::crypto3::multiprecision::uint256_t( best_chain.second.get(base_path + "openings.proof.z_1")); - proof.proof.z2 = boost::multiprecision::uint256_modular_t( + proof.proof.z2 = nil::crypto3::multiprecision::uint256_t( best_chain.second.get(base_path + "openings.proof.z_2")); std::size_t ev_i = 0; @@ -116,37 +116,37 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) i = 0; for (auto &row: evals_it.second.get_child("w")) { for (auto &cell: row.second) { - proof.evals[ev_i].w[i].emplace_back(get_cppui_modular256(&cell)); + proof.evals[ev_i].w[i].emplace_back(get_big_uint256(&cell)); } i++; } - //proof.evals[ev_i].z.size();= get_cppui_modular256(evals_it.second.get_child("z").begin()); + //proof.evals[ev_i].z.size();= get_big_uint256(evals_it.second.get_child("z").begin()); for (auto z_it: evals_it.second.get_child("z")) { - proof.evals[ev_i].z.emplace_back(get_cppui_modular256(&z_it)); + proof.evals[ev_i].z.emplace_back(get_big_uint256(&z_it)); } i = 0; for (auto &row: evals_it.second.get_child("s")) { for (auto &cell: row.second) { - proof.evals[ev_i].s[i].emplace_back(get_cppui_modular256(&cell)); + proof.evals[ev_i].s[i].emplace_back(get_big_uint256(&cell)); } i++; } -// proof.evals[ev_i].generic_selector = get_cppui_modular256(evals_it.second.get_child("generic_selector").begin()); +// proof.evals[ev_i].generic_selector = get_big_uint256(evals_it.second.get_child("generic_selector").begin()); for (auto s_it: evals_it.second.get_child("generic_selector")) { - proof.evals[ev_i].generic_selector.emplace_back(get_cppui_modular256(&s_it)); + proof.evals[ev_i].generic_selector.emplace_back(get_big_uint256(&s_it)); } -// proof.evals[ev_i].poseidon_selector = get_cppui_modular256(evals_it.second.get_child("poseidon_selector").begin()); +// proof.evals[ev_i].poseidon_selector = get_big_uint256(evals_it.second.get_child("poseidon_selector").begin()); for (auto p_it: evals_it.second.get_child("poseidon_selector")) { - proof.evals[ev_i].poseidon_selector.emplace_back(get_cppui_modular256(&p_it)); + proof.evals[ev_i].poseidon_selector.emplace_back(get_big_uint256(&p_it)); } ev_i++; } - proof.ft_eval1 = boost::multiprecision::uint256_modular_t( + proof.ft_eval1 = nil::crypto3::multiprecision::uint256_t( best_chain.second.get(base_path + "openings.ft_eval1")); // // public // std::vector public_p; // TODO: where it is? @@ -168,7 +168,7 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) // TODO Is it right? Is it a good way to set domain generator? // We need to assert, need to check that the input is indeed the root of unity - auto d_gen = boost::multiprecision::uint256_modular_t( + auto d_gen = nil::crypto3::multiprecision::uint256_t( const_root.get("verify_index.domain.group_gen")); auto d_size = const_root.get("verify_index.domain.log_size_of_group"); // std::cout << d_gen << " " << d_size << std::endl; @@ -183,52 +183,52 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) i = 0; for (auto &row: root.get_child("data.blockchainVerificationKey.commitments.sigma_comm")) { auto it = row.second.begin(); - ver_index.sigma_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.sigma_comm[i].unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); ++i; } i = 0; for (auto &row: root.get_child("data.blockchainVerificationKey.commitments.coefficients_comm")) { auto it = row.second.begin(); - ver_index.coefficients_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.coefficients_comm[i].unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); ++i; } auto it = root.get_child("data.blockchainVerificationKey.commitments.generic_comm").begin(); - ver_index.generic_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.generic_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); it = root.get_child("data.blockchainVerificationKey.commitments.psm_comm").begin(); - ver_index.psm_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.psm_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); it = root.get_child("data.blockchainVerificationKey.commitments.complete_add_comm").begin(); - ver_index.complete_add_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.complete_add_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); it = root.get_child("data.blockchainVerificationKey.commitments.mul_comm").begin(); - ver_index.mul_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.mul_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); it = root.get_child("data.blockchainVerificationKey.commitments.emul_comm").begin(); - ver_index.emul_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.emul_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); it = root.get_child("data.blockchainVerificationKey.commitments.endomul_scalar_comm").begin(); - ver_index.endomul_scalar_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + ver_index.endomul_scalar_comm.unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); // TODO: null in example // i = 0; // for (auto &row : root.get_child("data.blockchainVerificationKey.commitments.chacha_comm")) { // auto it = row.second.begin(); - // ver_index.chacha_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); + // ver_index.chacha_comm[i].unshifted.emplace_back(get_big_uint256(it++), get_big_uint256(it)); // ++i; // } //i = 0; // No member shifts //for (auto &row : root.get_child("data.blockchainVerificationKey.index.shifts")) { - // ver_index.shifts[i] = boost::multiprecision::cpp_int(row.second.get_value()); + // ver_index.shifts[i] = nil::crypto3::multiprecision::uint256_t(row.second.get_value()); // ++i; //} // Polynomial in coefficients form // Const - ver_index.zkpm = {0x2C46205451F6C3BBEA4BABACBEE609ECF1039A903C42BFF639EDC5BA33356332_cppui_modular256, - 0x1764D9CB4C64EBA9A150920807637D458919CB6948821F4D15EB1994EADF9CE3_cppui_modular256, - 0x0140117C8BBC4CE4644A58F7007148577782213065BB9699BF5C391FBE1B3E6D_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256}; - ver_index.w = boost::multiprecision::uint256_modular_t(const_root.get("verify_index.w")); - ver_index.endo = boost::multiprecision::uint256_modular_t(const_root.get("verify_index.endo")); + ver_index.zkpm = {0x2C46205451F6C3BBEA4BABACBEE609ECF1039A903C42BFF639EDC5BA33356332_big_uint256, + 0x1764D9CB4C64EBA9A150920807637D458919CB6948821F4D15EB1994EADF9CE3_big_uint256, + 0x0140117C8BBC4CE4644A58F7007148577782213065BB9699BF5C391FBE1B3E6D_big_uint256, + 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256}; + ver_index.w = nil::crypto3::multiprecision::uint256_t(const_root.get("verify_index.w")); + ver_index.endo = nil::crypto3::multiprecision::uint256_t(const_root.get("verify_index.endo")); //ver_index.lookup_index = root.get_child("data.blockchainVerificationKey.index.lookup_index"); // TODO: null //ver_index.linearization; // TODO: where it is? @@ -240,7 +240,7 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) for (auto &row: const_root.get_child("verify_index.fr_sponge_params.round_constants")) { size_t j = 0; for (auto cell: row.second) { - ver_index.fr_sponge_params.round_constants[i].emplace_back(get_cppui_modular256(&cell)); + ver_index.fr_sponge_params.round_constants[i].emplace_back(get_big_uint256(&cell)); j++; } i++; @@ -250,7 +250,7 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) for (auto &row: const_root.get_child("verify_index.fr_sponge_params.mds")) { size_t j = 0; for (auto cell: row.second) { - ver_index.fr_sponge_params.mds[i][j] = get_cppui_modular256(&cell); + ver_index.fr_sponge_params.mds[i][j] = get_big_uint256(&cell); j++; } i++; @@ -262,7 +262,7 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) for (auto &row: const_root.get_child("verify_index.fq_sponge_params.round_constants")) { size_t j = 0; for (auto cell: row.second) { - ver_index.fq_sponge_params.round_constants[i].emplace_back(get_cppui_modular256(&cell)); + ver_index.fq_sponge_params.round_constants[i].emplace_back(get_big_uint256(&cell)); j++; } i++; @@ -272,7 +272,7 @@ BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) for (auto &row: const_root.get_child("verify_index.fq_sponge_params.mds")) { size_t j = 0; for (auto cell: row.second) { - ver_index.fr_sponge_params.mds[i][j] = get_cppui_modular256(&cell); + ver_index.fr_sponge_params.mds[i][j] = get_big_uint256(&cell); j++; } i++; diff --git a/crypto3/libs/zk/test/systems/plonk/pickles/pickles.cpp b/crypto3/libs/zk/test/systems/plonk/pickles/pickles.cpp index 391c0bbe53..2f6c014f82 100644 --- a/crypto3/libs/zk/test/systems/plonk/pickles/pickles.cpp +++ b/crypto3/libs/zk/test/systems/plonk/pickles/pickles.cpp @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include @@ -64,21 +64,21 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { zk::snark::proof_type proof; zk::snark::verifier_index index; std::vector> w_comm_unshifted = {{ - {0x37D59F0CA7295B0B8C8A658A848933E8EE65F1524C1D2FAD1A2BBEBA01F34DB5_cppui_modular256, 0x38BE9AFC02BE5C46B256233C81A668AF9F96B8482E6DCC09C96A70DDDF442FEE_cppui_modular256}, - {0x2091BF5506C80B75CA58F2A7DB834C2EB165472D0B2A81BE8021BF9A9CCA5AA2_cppui_modular256, 0x39F8E74CCED923CC68A42FE5BADD44A606F0F534A52DB0931DECF6AC8DC11A39_cppui_modular256}, - {0x15D23E10A563E84D239600A75B11523D4522B2C251FD75B0BC517D62676EC397_cppui_modular256, 0x14978858398AF358CE60C21B331E58E7617A5FB7D3F3D25B0079945905FA152C_cppui_modular256}, - {0x3C2AE60A1169863541F6435E895B2BFED6BE488027489194B9060F246F228781_cppui_modular256, 0x0C593145B42D87F2F6BFA525E53F6F70BF70ABBDDAF7DC2328A7C4E62429DC2D_cppui_modular256}, - {0x1D66359053B1B305F65D69FEA147CF182C4D8E1130EA6F3D0224952AEB9A88CD_cppui_modular256, 0x28759D87B74BF16443700034A42A7E7AC307FE949992B59BD3C57A3A6B2F8EC2_cppui_modular256}, - {0x297F2B9076E473E9BF3A385F1BCE10480E65CA640B08587E059AF017AB8D4172_cppui_modular256, 0x12EB28BE66434FF49E5F897066CE07F492C21983DE7961575B894DE46DF0E341_cppui_modular256}, - {0x3D40963F63F238DCA50026C01F6A7A265165624E956FBC16578D8ED303A68EC0_cppui_modular256, 0x3E269040E3E7BDEF490CEE6B0CAA3425367E777A8E18E9B5641E6BB1931EE690_cppui_modular256}, - {0x238BD7EBC99EAB0458C81D7D2F3601F3F8F2DCE5D8C9ECFA84D9156B268920B9_cppui_modular256, 0x3E76531982AB5721C2A843667FEA035E5CF0CC46E09764E8CA0E490F5F71C616_cppui_modular256}, - {0x31A91EC4F6FBA9193F10385AFAAC0631A9E062426BED82DEE9F70464DAFEDB27_cppui_modular256, 0x364F995D1C7B1ACC8FEE6612FFA89B4499F3AC6B7A52898B99F2648F15116000_cppui_modular256}, - {0x3EBF8308C09A54C9F828658CE46562DAC696F0C455F5ADFA6437DAA49328AAC6_cppui_modular256, 0x177B5E81A8C2BCA234C1BE2D06A43463B41D58D8C8A1426B58FE8EF2CBD19E84_cppui_modular256}, - {0x02F7E5219B5F53DF4FE489F9827D79DCBBCBC43BC0F11403B6F9F9AB0F2D5287_cppui_modular256, 0x0F1326405C0DDE95C8DB9D90A8983CE7F549ACEE1791AEDD15794FA7FEDF56BB_cppui_modular256}, - {0x310126DE51CA0F4E88A15B5192F2E10645B3D3FFEF137609805B1D112ACEAD93_cppui_modular256, 0x2AA8D27909092417B8513EBF43E3B2F80D6212C845BFCD79C5E76343D1047581_cppui_modular256}, - {0x36FB4AF93A11A17EB064DE001D7BE84D6F957539B66243A31773CE1254672FD5_cppui_modular256, 0x3D750F7FD0EBF2A251C123870D94305A357A2AF90232FF3DD613B28B6C95B152_cppui_modular256}, - {0x14D1F0BEB1F9E03A7C0D2D137318E9EC825F445FD62E533C758C120597159648_cppui_modular256, 0x1829116C05DB93863741AFEF107AD3DD16CDEBAB91D0800E059D51696F4FB1F0_cppui_modular256}, - {0x1AFA3C262588E880CD82B938F1DC48E209A170562F480B9FFCA27B4CFFF9C5BD_cppui_modular256, 0x1EF02FAAC420520FAEEC93CE20A41639AE47B495035EB70A7E09953B9EB05E3C_cppui_modular256}, + {0x37D59F0CA7295B0B8C8A658A848933E8EE65F1524C1D2FAD1A2BBEBA01F34DB5_big_uint256, 0x38BE9AFC02BE5C46B256233C81A668AF9F96B8482E6DCC09C96A70DDDF442FEE_big_uint256}, + {0x2091BF5506C80B75CA58F2A7DB834C2EB165472D0B2A81BE8021BF9A9CCA5AA2_big_uint256, 0x39F8E74CCED923CC68A42FE5BADD44A606F0F534A52DB0931DECF6AC8DC11A39_big_uint256}, + {0x15D23E10A563E84D239600A75B11523D4522B2C251FD75B0BC517D62676EC397_big_uint256, 0x14978858398AF358CE60C21B331E58E7617A5FB7D3F3D25B0079945905FA152C_big_uint256}, + {0x3C2AE60A1169863541F6435E895B2BFED6BE488027489194B9060F246F228781_big_uint256, 0x0C593145B42D87F2F6BFA525E53F6F70BF70ABBDDAF7DC2328A7C4E62429DC2D_big_uint256}, + {0x1D66359053B1B305F65D69FEA147CF182C4D8E1130EA6F3D0224952AEB9A88CD_big_uint256, 0x28759D87B74BF16443700034A42A7E7AC307FE949992B59BD3C57A3A6B2F8EC2_big_uint256}, + {0x297F2B9076E473E9BF3A385F1BCE10480E65CA640B08587E059AF017AB8D4172_big_uint256, 0x12EB28BE66434FF49E5F897066CE07F492C21983DE7961575B894DE46DF0E341_big_uint256}, + {0x3D40963F63F238DCA50026C01F6A7A265165624E956FBC16578D8ED303A68EC0_big_uint256, 0x3E269040E3E7BDEF490CEE6B0CAA3425367E777A8E18E9B5641E6BB1931EE690_big_uint256}, + {0x238BD7EBC99EAB0458C81D7D2F3601F3F8F2DCE5D8C9ECFA84D9156B268920B9_big_uint256, 0x3E76531982AB5721C2A843667FEA035E5CF0CC46E09764E8CA0E490F5F71C616_big_uint256}, + {0x31A91EC4F6FBA9193F10385AFAAC0631A9E062426BED82DEE9F70464DAFEDB27_big_uint256, 0x364F995D1C7B1ACC8FEE6612FFA89B4499F3AC6B7A52898B99F2648F15116000_big_uint256}, + {0x3EBF8308C09A54C9F828658CE46562DAC696F0C455F5ADFA6437DAA49328AAC6_big_uint256, 0x177B5E81A8C2BCA234C1BE2D06A43463B41D58D8C8A1426B58FE8EF2CBD19E84_big_uint256}, + {0x02F7E5219B5F53DF4FE489F9827D79DCBBCBC43BC0F11403B6F9F9AB0F2D5287_big_uint256, 0x0F1326405C0DDE95C8DB9D90A8983CE7F549ACEE1791AEDD15794FA7FEDF56BB_big_uint256}, + {0x310126DE51CA0F4E88A15B5192F2E10645B3D3FFEF137609805B1D112ACEAD93_big_uint256, 0x2AA8D27909092417B8513EBF43E3B2F80D6212C845BFCD79C5E76343D1047581_big_uint256}, + {0x36FB4AF93A11A17EB064DE001D7BE84D6F957539B66243A31773CE1254672FD5_big_uint256, 0x3D750F7FD0EBF2A251C123870D94305A357A2AF90232FF3DD613B28B6C95B152_big_uint256}, + {0x14D1F0BEB1F9E03A7C0D2D137318E9EC825F445FD62E533C758C120597159648_big_uint256, 0x1829116C05DB93863741AFEF107AD3DD16CDEBAB91D0800E059D51696F4FB1F0_big_uint256}, + {0x1AFA3C262588E880CD82B938F1DC48E209A170562F480B9FFCA27B4CFFF9C5BD_big_uint256, 0x1EF02FAAC420520FAEEC93CE20A41639AE47B495035EB70A7E09953B9EB05E3C_big_uint256}, }}; std::vector w_comm_shifted(COLUMNS); @@ -90,259 +90,259 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { } // // z_comm proof.commitments.z_comm.unshifted.emplace_back( - 0x02D12945583E0CE5C20142E1DB4B19A8E644BCEE07F25516941DB26A38E1EA5D_cppui_modular256, - 0x36F230B302E081E88BAEB5B3FD213D99CAD1CD7E8B2A2483B05FBA2D414155DD_cppui_modular256); + 0x02D12945583E0CE5C20142E1DB4B19A8E644BCEE07F25516941DB26A38E1EA5D_big_uint256, + 0x36F230B302E081E88BAEB5B3FD213D99CAD1CD7E8B2A2483B05FBA2D414155DD_big_uint256); // t_comm proof.commitments.t_comm.unshifted.assign({ - {0x110D9EF8090D154F6EFF13AC56AABA47F74566FFE37ACD28620A2B20E4F6F103_cppui_modular256, - 0x26E410DBC25C6D70806230921A18EFCF8CB5118B86D107DF470B52CD3F886768_cppui_modular256}, - {0x01EE59DAF6AB1C13AF0D05909EFD17A1C032956371384A0AD9555E42A6E52AAF_cppui_modular256, - 0x2ABDF22ED010D9A34FCC62D43B3B06432976EAF2855A1AD2292F189E45E0A0F9_cppui_modular256}, - {0x3FA91D5BC8AC02F5E88CE34492E06354C8FB35E2FB635EC0D6E7DF97DB2FDAB2_cppui_modular256, - 0x30F90A99F0EA41BFA466310309F220FF4C3442878FBC6A0EDDCC1D1C1B5B9AEC_cppui_modular256}, - {0x37962BA26AB78DA50CD54712604EF151EB45AF2A3903D77129495E7ECD6CFF65_cppui_modular256, - 0x1BD455ED670C7C422A6A2B179411D014EC970B2AFB3491AEEC09DF613B47DB1D_cppui_modular256}, - {0x1EB582AA419C591322EA6295EE6E028CAB38DAF13F611EFFA7C605369253E561_cppui_modular256, - 0x0BEF30013E760029F68C81BCA30D73BC09F7F9BB8F632F2CB438783834D854A1_cppui_modular256}, - {0x2CEF8331B908170318C146626953800A8B0B3DDFA060B6BE9C1303903004A10D_cppui_modular256, - 0x1C381FC7E8A986E28DE8E254FE335019EF0B016E9EE74118FB1D38FBD6C611FF_cppui_modular256}, - {0x0A8C3CE07FC7DABF928F064376C201AF936AC5501AC32E08B87BC6C3D02B4703_cppui_modular256, - 0x14740C6D1C4984E1049CC26F7F1C8AD4605C3BB32C704214CBD9F845E8E24635_cppui_modular256}, + {0x110D9EF8090D154F6EFF13AC56AABA47F74566FFE37ACD28620A2B20E4F6F103_big_uint256, + 0x26E410DBC25C6D70806230921A18EFCF8CB5118B86D107DF470B52CD3F886768_big_uint256}, + {0x01EE59DAF6AB1C13AF0D05909EFD17A1C032956371384A0AD9555E42A6E52AAF_big_uint256, + 0x2ABDF22ED010D9A34FCC62D43B3B06432976EAF2855A1AD2292F189E45E0A0F9_big_uint256}, + {0x3FA91D5BC8AC02F5E88CE34492E06354C8FB35E2FB635EC0D6E7DF97DB2FDAB2_big_uint256, + 0x30F90A99F0EA41BFA466310309F220FF4C3442878FBC6A0EDDCC1D1C1B5B9AEC_big_uint256}, + {0x37962BA26AB78DA50CD54712604EF151EB45AF2A3903D77129495E7ECD6CFF65_big_uint256, + 0x1BD455ED670C7C422A6A2B179411D014EC970B2AFB3491AEEC09DF613B47DB1D_big_uint256}, + {0x1EB582AA419C591322EA6295EE6E028CAB38DAF13F611EFFA7C605369253E561_big_uint256, + 0x0BEF30013E760029F68C81BCA30D73BC09F7F9BB8F632F2CB438783834D854A1_big_uint256}, + {0x2CEF8331B908170318C146626953800A8B0B3DDFA060B6BE9C1303903004A10D_big_uint256, + 0x1C381FC7E8A986E28DE8E254FE335019EF0B016E9EE74118FB1D38FBD6C611FF_big_uint256}, + {0x0A8C3CE07FC7DABF928F064376C201AF936AC5501AC32E08B87BC6C3D02B4703_big_uint256, + 0x14740C6D1C4984E1049CC26F7F1C8AD4605C3BB32C704214CBD9F845E8E24635_big_uint256}, }); proof.proof.lr.assign({ - {{0x0097DDEE3FC1597E4CA77260AC311372574CD19B0E48466745DDA9A5927F9525_cppui_modular256, 0x114F2A66D1AAE2C1A0ADA357F7F454DD4BD6722A0C747C84712CD498EEC814D1_cppui_modular256}, - {0x30C7AE3DC6B1BA3E35385FEBCEFE39DA16D4ACF77780B098387B1450D4773D2E_cppui_modular256, 0x1F3CCD56C3D0523F675FA85361878ECC6A69C5D833408DB32E16F78C6733BA10_cppui_modular256}}, - {{0x17F3C28356AB5AF3FC69DF809114E10081FD01DAFE81F26A2538223033258FA2_cppui_modular256, 0x2361848DC301E6534FEECE2CCF9FF176BA15C57C5011EBCC05C8B663EB4D2D8F_cppui_modular256}, - {0x2F05F9AC607AB4E99E2B2A25D1B81A677FC58AE964B6C58F8DF7348F0798D28C_cppui_modular256, 0x3DFD1D28554A0787E24FCD989A3C0B8D957DB7094FE7CA54F849DCC7DDE42D0C_cppui_modular256}}, - {{0x2DC7573E0F46A4EA37CBECCAD3DE5C2E2150956C85111805C57EDA0F6B62F064_cppui_modular256, 0x33CA15AA795016559B5E00380D4931E35809D9A1F574063B7BEB6AC195CB9F8B_cppui_modular256}, - {0x24689817A7690449627E6FE240CBAFB2BEA71D2FC6825BD7EE4B29B5339AA457_cppui_modular256, 0x29308F028040D033813FBDF844C0512F4472440CE72C44B241B03D776AF8178C_cppui_modular256}}, - {{0x3C289CD39608326A27B949CA9332C4B7F3A9F82668E2A8DFC187952A6ECA4734_cppui_modular256, 0x2AB833558061F365CA621F5E570953AD5BBFBF45809B245C8D66D0CD00C9C8D6_cppui_modular256}, - {0x22A6D04A1964B9B54F5183648117CD67FCAF9AB2B0D926565D725B87108F586B_cppui_modular256, 0x36016051DA2BA6FE1D8BE3A614959AE431B3DC9F543D4CC3E6526A843FD3F668_cppui_modular256}}, - {{0x3C4DE244A5E4B969BBB3BA8A41FC1076FBF8FCD1174AB350AB9F414B2B5F02B7_cppui_modular256, 0x273F19EDC54275DF166E3A80D3F8BBCE48C67F49154C45D576F5838E59049401_cppui_modular256}, - {0x1A6C28E8E8679AE8998192577C2FA9B5ABC67FFE84ADB63D4F655960ADCA06C3_cppui_modular256, 0x16A0AD9FE756A1285C0F151EAB8E8C90A84862E3C3B552BF11BD473FDF42AEA5_cppui_modular256}}, - {{0x25DB17042CD86EFBF52B129CF874E093D0F6930D6D9B91A1874954B8E2F89DAC_cppui_modular256, 0x1790B39E7FF4D2C2D40ACF986D32EAC3D0C8CA6024555867BE258A9F581D68A4_cppui_modular256}, - {0x213853D57B0E3FD0D663149C5DE7A1CDC9B4796F946D33BCFC5731A1FE262D76_cppui_modular256, 0x0D6156942605E3AD61EAE4D43D60434B1351B2F1817C9E322F7A0BD78EA0E7FD_cppui_modular256}}, + {{0x0097DDEE3FC1597E4CA77260AC311372574CD19B0E48466745DDA9A5927F9525_big_uint256, 0x114F2A66D1AAE2C1A0ADA357F7F454DD4BD6722A0C747C84712CD498EEC814D1_big_uint256}, + {0x30C7AE3DC6B1BA3E35385FEBCEFE39DA16D4ACF77780B098387B1450D4773D2E_big_uint256, 0x1F3CCD56C3D0523F675FA85361878ECC6A69C5D833408DB32E16F78C6733BA10_big_uint256}}, + {{0x17F3C28356AB5AF3FC69DF809114E10081FD01DAFE81F26A2538223033258FA2_big_uint256, 0x2361848DC301E6534FEECE2CCF9FF176BA15C57C5011EBCC05C8B663EB4D2D8F_big_uint256}, + {0x2F05F9AC607AB4E99E2B2A25D1B81A677FC58AE964B6C58F8DF7348F0798D28C_big_uint256, 0x3DFD1D28554A0787E24FCD989A3C0B8D957DB7094FE7CA54F849DCC7DDE42D0C_big_uint256}}, + {{0x2DC7573E0F46A4EA37CBECCAD3DE5C2E2150956C85111805C57EDA0F6B62F064_big_uint256, 0x33CA15AA795016559B5E00380D4931E35809D9A1F574063B7BEB6AC195CB9F8B_big_uint256}, + {0x24689817A7690449627E6FE240CBAFB2BEA71D2FC6825BD7EE4B29B5339AA457_big_uint256, 0x29308F028040D033813FBDF844C0512F4472440CE72C44B241B03D776AF8178C_big_uint256}}, + {{0x3C289CD39608326A27B949CA9332C4B7F3A9F82668E2A8DFC187952A6ECA4734_big_uint256, 0x2AB833558061F365CA621F5E570953AD5BBFBF45809B245C8D66D0CD00C9C8D6_big_uint256}, + {0x22A6D04A1964B9B54F5183648117CD67FCAF9AB2B0D926565D725B87108F586B_big_uint256, 0x36016051DA2BA6FE1D8BE3A614959AE431B3DC9F543D4CC3E6526A843FD3F668_big_uint256}}, + {{0x3C4DE244A5E4B969BBB3BA8A41FC1076FBF8FCD1174AB350AB9F414B2B5F02B7_big_uint256, 0x273F19EDC54275DF166E3A80D3F8BBCE48C67F49154C45D576F5838E59049401_big_uint256}, + {0x1A6C28E8E8679AE8998192577C2FA9B5ABC67FFE84ADB63D4F655960ADCA06C3_big_uint256, 0x16A0AD9FE756A1285C0F151EAB8E8C90A84862E3C3B552BF11BD473FDF42AEA5_big_uint256}}, + {{0x25DB17042CD86EFBF52B129CF874E093D0F6930D6D9B91A1874954B8E2F89DAC_big_uint256, 0x1790B39E7FF4D2C2D40ACF986D32EAC3D0C8CA6024555867BE258A9F581D68A4_big_uint256}, + {0x213853D57B0E3FD0D663149C5DE7A1CDC9B4796F946D33BCFC5731A1FE262D76_big_uint256, 0x0D6156942605E3AD61EAE4D43D60434B1351B2F1817C9E322F7A0BD78EA0E7FD_big_uint256}}, }); - proof.proof.delta = {0x1841D56E15736C31F97ADAE3DCA7B0C7EFDDB800C6AD958C8C317206C00DC72D_cppui_modular256, - 0x371285C1D5F12E0C32C4913C64678ABC8947C5D61BE6C7D0AB102CBF4E955893_cppui_modular256}; - proof.proof.z1 = 0x0F55A25FD477DB4D5486AD5B7FDECD3BA87AEABD8FD8EB81158D68CE342AD400_cppui_modular256; - proof.proof.z2 = 0x35E29FC28BED57075811257A7182C30C0273CB460AF5212E14B5D47C6B820E9E_cppui_modular256; - proof.proof.sg = {0x22202A4EE86A05EAD5695178EC52EE4B27B162B4A41AA26D2181BC8BE7620F2F_cppui_modular256, - 0x195B0A20E4C1CD6840DF5B0937CB00CA9C10AEB7B2A05C8721D5571ECBECAA7D_cppui_modular256}; + proof.proof.delta = {0x1841D56E15736C31F97ADAE3DCA7B0C7EFDDB800C6AD958C8C317206C00DC72D_big_uint256, + 0x371285C1D5F12E0C32C4913C64678ABC8947C5D61BE6C7D0AB102CBF4E955893_big_uint256}; + proof.proof.z1 = 0x0F55A25FD477DB4D5486AD5B7FDECD3BA87AEABD8FD8EB81158D68CE342AD400_big_uint256; + proof.proof.z2 = 0x35E29FC28BED57075811257A7182C30C0273CB460AF5212E14B5D47C6B820E9E_big_uint256; + proof.proof.sg = {0x22202A4EE86A05EAD5695178EC52EE4B27B162B4A41AA26D2181BC8BE7620F2F_big_uint256, + 0x195B0A20E4C1CD6840DF5B0937CB00CA9C10AEB7B2A05C8721D5571ECBECAA7D_big_uint256}; - proof.evals[0].w[0] = {0x218C1B364EAB7D60FB30A1D1865BB51B9EC1BBD61308CAAE14244A054B122E93_cppui_modular256}; - proof.evals[0].w[1] = {0x3E72A7C4AB5A497B6B4C19E2F4BDBFDA667526DFF7310B59053536560A5B69B1_cppui_modular256}; - proof.evals[0].w[2] = {0x2E678A3459123FBCAB752483B33EE996CDE93AA456A77AA68EE2B392E85A8AD3_cppui_modular256}; - proof.evals[0].w[3] = {0x15051A7601CC5949B5CE177941BA55869E860C39C9DE872387958B8907979BCE_cppui_modular256}; - proof.evals[0].w[4] = {0x0485A39322005BF5C7A01501646A1CAED8BF7BDF3EBBF563D7E38DD59EED4C1F_cppui_modular256}; - proof.evals[0].w[5] = {0x0AC812E8C385BF25F1CB39E9F5081567AA21329558BE4DD1A9108344C23184BD_cppui_modular256}; - proof.evals[0].w[6] = {0x3FF83F99525275EFE8A9BA42F177E083ADDF4618AC5981BB99510FEE28384A24_cppui_modular256}; - proof.evals[0].w[7] = {0x14736CB71FEDE1E1F004BC88D20A9897F5DE9E48C06B22536450EA9CBE66BDF3_cppui_modular256}; - proof.evals[0].w[8] = {0x3E0A7FD54262D5A95C13E98950C29412D2D70C410F294958A2D3876C1C59B6BE_cppui_modular256}; - proof.evals[0].w[9] = {0x298284D82997B6D9814B8643C976B43601DE36E710C2A67CFDB83AADA8532744_cppui_modular256}; - proof.evals[0].w[10] = {0x0D478CF727DADD5E084A9077F49EEFFE9337E7FF43B079617BBAE51A67ABE0C6_cppui_modular256}; - proof.evals[0].w[11] = {0x3E25792FCB0C4C612C3BC6C772B7E8D74EB844F841D25C766406DD497D594EDF_cppui_modular256}; - proof.evals[0].w[12] = {0x33F1A21853B94B69C3838A5BB737F6795F927047521344F98A9C42EC62131941_cppui_modular256}; - proof.evals[0].w[13] = {0x29BDCB00DC664A725ACB4DEFFBB8041B706C9B9662542D7CB131A88F46CCE3A3_cppui_modular256}; - proof.evals[0].w[14] = {0x1F89F3E96513497AF2131184403811BD8146C6E5729515FFD7C70E322B86AE05_cppui_modular256}; - proof.evals[0].z = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - // proof.evals[0].poseidon_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - // proof.evals[0].generic_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - proof.evals[0].s[0] = {0x0284596D78C52B3B5BA71D1A9A173ABF9E63F9B848C39206169C36B878AF6DDA_cppui_modular256}; - proof.evals[0].s[1] = {0x0614A2627FBCD1D7356FB7BFB33DD7D7C81F761E421B12251672D250A0C2F5A5_cppui_modular256}; - proof.evals[0].s[2] = {0x06170D49F379823E790EE625247E2DCFD100B5B5ACF8A900D86405D09C480A72_cppui_modular256}; - proof.evals[0].s[3] = {0x2E1F15C0649E24B7F3AB4DA6E881866F2E74C11656850F1DDD9EA945B3BFA6A9_cppui_modular256}; - proof.evals[0].s[4] = {0x3725E0A20A90564DACEEBD1B8E4037D9A563AD0105BB87932846E5194F5853FF_cppui_modular256}; - proof.evals[0].s[5] = {0x315BC904B7DBD7D45780562C242882BF93CE41138876DA231D9D0AFB8036CF11_cppui_modular256}; + proof.evals[0].w[0] = {0x218C1B364EAB7D60FB30A1D1865BB51B9EC1BBD61308CAAE14244A054B122E93_big_uint256}; + proof.evals[0].w[1] = {0x3E72A7C4AB5A497B6B4C19E2F4BDBFDA667526DFF7310B59053536560A5B69B1_big_uint256}; + proof.evals[0].w[2] = {0x2E678A3459123FBCAB752483B33EE996CDE93AA456A77AA68EE2B392E85A8AD3_big_uint256}; + proof.evals[0].w[3] = {0x15051A7601CC5949B5CE177941BA55869E860C39C9DE872387958B8907979BCE_big_uint256}; + proof.evals[0].w[4] = {0x0485A39322005BF5C7A01501646A1CAED8BF7BDF3EBBF563D7E38DD59EED4C1F_big_uint256}; + proof.evals[0].w[5] = {0x0AC812E8C385BF25F1CB39E9F5081567AA21329558BE4DD1A9108344C23184BD_big_uint256}; + proof.evals[0].w[6] = {0x3FF83F99525275EFE8A9BA42F177E083ADDF4618AC5981BB99510FEE28384A24_big_uint256}; + proof.evals[0].w[7] = {0x14736CB71FEDE1E1F004BC88D20A9897F5DE9E48C06B22536450EA9CBE66BDF3_big_uint256}; + proof.evals[0].w[8] = {0x3E0A7FD54262D5A95C13E98950C29412D2D70C410F294958A2D3876C1C59B6BE_big_uint256}; + proof.evals[0].w[9] = {0x298284D82997B6D9814B8643C976B43601DE36E710C2A67CFDB83AADA8532744_big_uint256}; + proof.evals[0].w[10] = {0x0D478CF727DADD5E084A9077F49EEFFE9337E7FF43B079617BBAE51A67ABE0C6_big_uint256}; + proof.evals[0].w[11] = {0x3E25792FCB0C4C612C3BC6C772B7E8D74EB844F841D25C766406DD497D594EDF_big_uint256}; + proof.evals[0].w[12] = {0x33F1A21853B94B69C3838A5BB737F6795F927047521344F98A9C42EC62131941_big_uint256}; + proof.evals[0].w[13] = {0x29BDCB00DC664A725ACB4DEFFBB8041B706C9B9662542D7CB131A88F46CCE3A3_big_uint256}; + proof.evals[0].w[14] = {0x1F89F3E96513497AF2131184403811BD8146C6E5729515FFD7C70E322B86AE05_big_uint256}; + proof.evals[0].z = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_big_uint256}; + // proof.evals[0].poseidon_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_big_uint256}; + // proof.evals[0].generic_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_big_uint256}; + proof.evals[0].s[0] = {0x0284596D78C52B3B5BA71D1A9A173ABF9E63F9B848C39206169C36B878AF6DDA_big_uint256}; + proof.evals[0].s[1] = {0x0614A2627FBCD1D7356FB7BFB33DD7D7C81F761E421B12251672D250A0C2F5A5_big_uint256}; + proof.evals[0].s[2] = {0x06170D49F379823E790EE625247E2DCFD100B5B5ACF8A900D86405D09C480A72_big_uint256}; + proof.evals[0].s[3] = {0x2E1F15C0649E24B7F3AB4DA6E881866F2E74C11656850F1DDD9EA945B3BFA6A9_big_uint256}; + proof.evals[0].s[4] = {0x3725E0A20A90564DACEEBD1B8E4037D9A563AD0105BB87932846E5194F5853FF_big_uint256}; + proof.evals[0].s[5] = {0x315BC904B7DBD7D45780562C242882BF93CE41138876DA231D9D0AFB8036CF11_big_uint256}; - proof.evals[1].w[0] = {0x0CE4579CFE87F1D15160DDE1078E01AC2795B12A93D40263C613A3341EF2C27D_cppui_modular256}; - proof.evals[1].w[1] = {0x3728E63BF46BAA60AC6078292280E1FD7F4FB0F85BBD642CB62F4600737A6CAC_cppui_modular256}; - proof.evals[1].w[2] = {0x3C89AC7E8C016AF82E276185E310D5D36E0F3A14202A981C4F51D014569E458E_cppui_modular256}; - proof.evals[1].w[3] = {0x3099E164DFF4B7506A32E0D10119A74A0EE794BB1F4C488EBE192C37BC4E4E5C_cppui_modular256}; - proof.evals[1].w[4] = {0x1A8C403E7B17F751B6C9573DD36C1BFCE6FA6B0C1A51D5759184D63DFF2CB28A_cppui_modular256}; - proof.evals[1].w[5] = {0x092E41B804AA2C03F28EE41EBA2F370C6FD6C1ADBEA08D1C19C50DDF3D7E7154_cppui_modular256}; - proof.evals[1].w[6] = {0x208E4B0B4277B90CE839D21A96E3C68ECA076C6EC3992A7F0D2277E6CC4A9C55_cppui_modular256}; - proof.evals[1].w[7] = {0x3BF1050F00050486620C9ABC34863D8628AAC362EC76BA4234618EC7956EC9F2_cppui_modular256}; - proof.evals[1].w[8] = {0x04E39785D3438752F23993771796047837282E33171C5A62EF1E7B5141855829_cppui_modular256}; - proof.evals[1].w[9] = {0x1B5BA02A80313D49A8D2BFCE1E951A3C795EB2A01A65C193D92B46D61B26ACCF_cppui_modular256}; - proof.evals[1].w[10] = {0x327242E90C704A0EB53538A6F1311E6B8E1DBC86812246DA7597B3AC1A4FF8CD_cppui_modular256}; - proof.evals[1].w[11] = {0x109B911705D2385C5AD5B80ED76D78835971175398C34D2E962C49FB1F3F3FCE_cppui_modular256}; - proof.evals[1].w[12] = {0x39F57515F459363F447611DFF8F54D4A1AF705D7E477086F2154258DCCE6C991_cppui_modular256}; - proof.evals[1].w[13] = {0x234F5914E2E034222E166BB11A7D2210BA365B6026DDCA94134ED0337A8E5353_cppui_modular256}; - proof.evals[1].w[14] = {0x0CA93D13D167320517B6C5823C04F6D75975B0E869448CB905497AD92835DD15_cppui_modular256}; - proof.evals[1].z = {0x359872A0067A0765E595D6AFEB42B023EAC3EBC9735945F780A635A9CC256703_cppui_modular256}; - // proof.evals[1].poseidon_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - // proof.evals[1].generic_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - proof.evals[1].s[0] = {0x353E417DD92E1B8C4C2BB40358A4FF43CED6AFDF2218C49867D2C45D1DB174AF_cppui_modular256}; - proof.evals[1].s[1] = {0x109165335DD3FABD6AF198D5E7CC45B4E11356D1A4027B8BC01344356F7ADABB_cppui_modular256}; - proof.evals[1].s[2] = {0x177C41BBAE20A957704CBCD4777244F4BC252BEA68362D9F0B00A22267247C3A_cppui_modular256}; - proof.evals[1].s[3] = {0x34D9D201F2E42D5E3D86CD5C70DF153E472CD9401CE1E1FB9EC742EFF8BEDE2C_cppui_modular256}; - proof.evals[1].s[4] = {0x00C022C8689A0F23EFA00918CCA8ECCB106CB89037E7B034840DCD614E4DECF7_cppui_modular256}; - proof.evals[1].s[5] = {0x0E9A479740A633919DF200A1F25FF75982AFF0749111C1E87EBB69DC2B1A5BC7_cppui_modular256}; + proof.evals[1].w[0] = {0x0CE4579CFE87F1D15160DDE1078E01AC2795B12A93D40263C613A3341EF2C27D_big_uint256}; + proof.evals[1].w[1] = {0x3728E63BF46BAA60AC6078292280E1FD7F4FB0F85BBD642CB62F4600737A6CAC_big_uint256}; + proof.evals[1].w[2] = {0x3C89AC7E8C016AF82E276185E310D5D36E0F3A14202A981C4F51D014569E458E_big_uint256}; + proof.evals[1].w[3] = {0x3099E164DFF4B7506A32E0D10119A74A0EE794BB1F4C488EBE192C37BC4E4E5C_big_uint256}; + proof.evals[1].w[4] = {0x1A8C403E7B17F751B6C9573DD36C1BFCE6FA6B0C1A51D5759184D63DFF2CB28A_big_uint256}; + proof.evals[1].w[5] = {0x092E41B804AA2C03F28EE41EBA2F370C6FD6C1ADBEA08D1C19C50DDF3D7E7154_big_uint256}; + proof.evals[1].w[6] = {0x208E4B0B4277B90CE839D21A96E3C68ECA076C6EC3992A7F0D2277E6CC4A9C55_big_uint256}; + proof.evals[1].w[7] = {0x3BF1050F00050486620C9ABC34863D8628AAC362EC76BA4234618EC7956EC9F2_big_uint256}; + proof.evals[1].w[8] = {0x04E39785D3438752F23993771796047837282E33171C5A62EF1E7B5141855829_big_uint256}; + proof.evals[1].w[9] = {0x1B5BA02A80313D49A8D2BFCE1E951A3C795EB2A01A65C193D92B46D61B26ACCF_big_uint256}; + proof.evals[1].w[10] = {0x327242E90C704A0EB53538A6F1311E6B8E1DBC86812246DA7597B3AC1A4FF8CD_big_uint256}; + proof.evals[1].w[11] = {0x109B911705D2385C5AD5B80ED76D78835971175398C34D2E962C49FB1F3F3FCE_big_uint256}; + proof.evals[1].w[12] = {0x39F57515F459363F447611DFF8F54D4A1AF705D7E477086F2154258DCCE6C991_big_uint256}; + proof.evals[1].w[13] = {0x234F5914E2E034222E166BB11A7D2210BA365B6026DDCA94134ED0337A8E5353_big_uint256}; + proof.evals[1].w[14] = {0x0CA93D13D167320517B6C5823C04F6D75975B0E869448CB905497AD92835DD15_big_uint256}; + proof.evals[1].z = {0x359872A0067A0765E595D6AFEB42B023EAC3EBC9735945F780A635A9CC256703_big_uint256}; + // proof.evals[1].poseidon_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_big_uint256}; + // proof.evals[1].generic_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_big_uint256}; + proof.evals[1].s[0] = {0x353E417DD92E1B8C4C2BB40358A4FF43CED6AFDF2218C49867D2C45D1DB174AF_big_uint256}; + proof.evals[1].s[1] = {0x109165335DD3FABD6AF198D5E7CC45B4E11356D1A4027B8BC01344356F7ADABB_big_uint256}; + proof.evals[1].s[2] = {0x177C41BBAE20A957704CBCD4777244F4BC252BEA68362D9F0B00A22267247C3A_big_uint256}; + proof.evals[1].s[3] = {0x34D9D201F2E42D5E3D86CD5C70DF153E472CD9401CE1E1FB9EC742EFF8BEDE2C_big_uint256}; + proof.evals[1].s[4] = {0x00C022C8689A0F23EFA00918CCA8ECCB106CB89037E7B034840DCD614E4DECF7_big_uint256}; + proof.evals[1].s[5] = {0x0E9A479740A633919DF200A1F25FF75982AFF0749111C1E87EBB69DC2B1A5BC7_big_uint256}; - proof.ft_eval1 = 0x01AEC83A8925441906ED7C843289815B1F2098EBE21BA2EC9C9BDE738323A79C_cppui_modular256; + proof.ft_eval1 = 0x01AEC83A8925441906ED7C843289815B1F2098EBE21BA2EC9C9BDE738323A79C_big_uint256; index.domain = math::basic_radix2_domain(64); - index.domain.omega = 0x1868CA50534A180D97FF23A878E088B0B9569C85B0A15D666C23DED157FCEEBA_cppui_modular256; + index.domain.omega = 0x1868CA50534A180D97FF23A878E088B0B9569C85B0A15D666C23DED157FCEEBA_big_uint256; // std::cout << "index domain size " << index.domain.size() << '\n'; index.max_poly_size = 64; index.max_quot_size = 448; index.srs.g.assign({ - {0x121C4426885FD5A9701385AAF8D43E52E7660F1FC5AFC5F6468CC55312FC60F8_cppui_modular256, 0x21B439C01247EA3518C5DDEB324E4CB108AF617780DDF766D96D3FD8AB028B70_cppui_modular256}, - {0x26C9349FF7FB4AB230A6F6AEF045F451FBBE9B37C43C3274E2AA4B82D131FD26_cppui_modular256, 0x1996274D67EC0464C51F79CCFA1F511C2AABB666ABE67733EE8185B71B27A504_cppui_modular256}, - {0x26985F27306586711466C5B2C28754AA62FE33516D75CEF1F7751F1A169713FD_cppui_modular256, 0x2E8930092FE6A18B331CE0E6E27B413AA18E76394F18A2835DA9FAE10AA3229D_cppui_modular256}, - {0x014B2DB7B753A74D454061FCB3AC537E1B4BA512F9ED258C996A59D9DACD13E5_cppui_modular256, 0x06F392D371494FC39174C4B70C692B96F3B7C42DA288F6B7AABF463334A952D0_cppui_modular256}, - {0x12CA0E2DBF286021CB76B7C12B6C9AD7FDF1D05F722F6EF14BD43E53E7B92120_cppui_modular256, 0x216A80B79D3995D1F39CE19855C475052D1148ACBDD379FE98961BFBD0A3E428_cppui_modular256}, - {0x1D257C1F4EC9872C9E06549BC910F7B7196F2E7CB120AEC3FDCEB049C7A0C9A5_cppui_modular256, 0x191CBEC20ED5EA342B6B395E92996215F7D93C675DA56A13D548EFB58524D336_cppui_modular256}, - {0x06236026ED7DC19C44540FBAF0C1C3498F82880A34422547FFF519FFF744BB48_cppui_modular256, 0x3A02C5410DABDE160BD09232A14F00B1EF6CD4D6285C90A8D41FA00BFF922F0A_cppui_modular256}, - {0x079333FDE60D3F670068B5A1D486EDDD87DDF91D1E1FC000F387991B4ED848B4_cppui_modular256, 0x3F7FC1A39FD74BDEDC129195080D298CFC2C2CF714BAD9F9334F0DAFB035C200_cppui_modular256}, - {0x069B398C2968553B7987FF840CF0B71359D10F249F08C40898550A63F196D856_cppui_modular256, 0x1B68BB879D6EC4EFAA2207E212B59BAD0D8E5E2493F99BE3F2F24764046CD277_cppui_modular256}, - {0x2CBD65973AE0BE0B9E652CEC35EFE509E1FA8DD8349DC1E644DB494DC2B4FD75_cppui_modular256, 0x1E27B8178E720407694F4EA1413B0CB87AF4058CB308BBD68FF42D5078DE243E_cppui_modular256}, - {0x0F29A22EF6949DE85427F72CCD04E3F8F56837BB56DA17D8FA5DE9025E6B9ED5_cppui_modular256, 0x26A2CD91BD2771E20DECAACDC6CA96E7759668F3D0B7E8810866D27737627A59_cppui_modular256}, - {0x300EE47C831AB28067BFE9364A819C894FA02155C5FC3E94E83A0EAD3110E9E5_cppui_modular256, 0x2D4FD253E12958FD548AC51E62F3158EB3EE8CB10F148F0A44D2C6E562D632CA_cppui_modular256}, - {0x2A9EA5BCE9D10ED951E11E4DE64DED939D1FC6B5DE07DFF33D49861B7DE2EE71_cppui_modular256, 0x0708F926C80F2A68C3F59C8C25D26F29FF90842A7C1BEDE0B1801D7DF258077B_cppui_modular256}, - {0x2DEA83FC8EA7A9727A5F2184EDCBF6A17083C10DACE4F45DADB330CE1624DC8B_cppui_modular256, 0x02DE1252440BF67F0B7A40DE4B7D9157993CE1D0DC47F8D4B3BCF126FBE00E2B_cppui_modular256}, - {0x341DE1D9B175235F492C6DAD8580443D11B12DF39EE95D497935BFF99D4E775F_cppui_modular256, 0x01177651EA542F5402CA5B075C5A2082F5F4EE1D3B054FC97CF7D30758D89841_cppui_modular256}, - {0x37D2BB9884B41B3125444D81C59E8EDA167284FB5D637C9D54B21753830F14A0_cppui_modular256, 0x0D5708EB79051B4704EDB309CDFCA38030CD8B656A5C9051B5C1AFA6B1C30D46_cppui_modular256}, - {0x026A67515EF102D65C7694144B457240C4E3270A0240640A5EAF9B3E7489C54E_cppui_modular256, 0x1B78FD66A3E4A168D0CEC1846F03B1624342491857F9204743A44DE2E90A42E2_cppui_modular256}, - {0x2E2489CBFD8534059574AACD43C137788C54D86B1292CF4B17850EE95F913198_cppui_modular256, 0x10D13EAD8E28E1493325B7DBB89025DA06A8867EE60BCADD1D794A847D871A46_cppui_modular256}, - {0x3FB39F7B1DBD63694D40FC6C105FBD8242908DB2CF82B5F0FACE46A7792CC0A0_cppui_modular256, 0x01DF2D8291BAA5ECFF544683F16F36D8C83078DFD24B5C8C93DFEDA524704750_cppui_modular256}, - {0x39DA705C7CD47D34F9B2E2A7F57200F656A229398E7A0F89A5534D72C8BAA2C7_cppui_modular256, 0x1C5E177C851121F1A90AC844245B7D7D5512C822ABF4AF37213AF5B2EBCED4F0_cppui_modular256}, - {0x0A35295A58443F71E676CE42BA6FC44D4EF1DEB8E9E9C7D537CE4CD453576521_cppui_modular256, 0x3600DA2E2E5D3674E13613871FA8B9A5D96F905DD69114FBF3F69F61D0C57263_cppui_modular256}, - {0x2879FDC5D79EC2FD73D8776DD5ED76F8BC6DA10D4501AA892D11CC02152E33C5_cppui_modular256, 0x06FC48C9C7CF8B4CD94812DC8EE2ABBC4A0775D52E01097E6877F2A1A7547786_cppui_modular256}, - {0x0A3499DB18871CBF14818C2D5152742B4457FDF30DF5936172EDE2FE9A537701_cppui_modular256, 0x0548D846722829A12B1C9C39411DE0AC8C5C2F97C1953432DF60251E0DAE91B2_cppui_modular256}, - {0x25A8F59C1D7C23576952D07640231EEBDE39D9F89BB85110966096D36043DB0A_cppui_modular256, 0x0F6EB10365B419FA5179D3278BC7F834D27AD930AE11674FFC5F00549556DBB8_cppui_modular256}, - {0x1F4A67F9C220741648FBACFAC1934B09C3E903EFBE12DECFA6820656D3778DAA_cppui_modular256, 0x3685316B926A7C4351AB8AB802174B11BF8EBD5999989F0343555D9575CFA3CC_cppui_modular256}, - {0x1ECC9BE71F9ACF900FA6CDCC452550C7991BFC25258CEFACBCF51D541DF2D819_cppui_modular256, 0x0FBDFA76ACB83F9C4DF9337FEC47F38672D31E9EB5406034812E5C21C6494BDD_cppui_modular256}, - {0x2E79A282F86F8FC1B2DB59443975544DD7C92883322C82C2C283DC51A0E34825_cppui_modular256, 0x0118E6A449918C38AA0D290373F1D605DC21B6B5F228C41BFF596C635AF7761E_cppui_modular256}, - {0x3FCD47170790B2A3E85CEAEE44940DACA0E11DD132960092FB2E1613B364849B_cppui_modular256, 0x2859254A7ABFB288138B64009A85178250FD120351634CCD41D9ECE993D9F6A3_cppui_modular256}, - {0x1A29CFD3AF8F7C0F19861362DAC9FD8034F82C2C1750A425B446461B5BC63E4B_cppui_modular256, 0x15E12C10AE7FFF431F6FAAB8EE607386AA85EB7AFB806E264B8952D51404E17D_cppui_modular256}, - {0x2EECD04E0E37FAF9C51C61249470F118C5C5EA8E6DDB4B645F99C47D3BA07F68_cppui_modular256, 0x33E6418DD36692F7EE870BB3577115F87D62E9D257374950A17A3B0154B8B35D_cppui_modular256}, - {0x3BADB4DCEADF739775588552805A959B7D216BFD86847BA54D662B777B2B1FCF_cppui_modular256, 0x0CB8DEE5BE3197C76685F25D4596C766A2DA3542BD89FD9633D7590EA2B68FD0_cppui_modular256}, - {0x3FC5DE9E2422625B53D18E55C069CBCEC9C2D2C4F8DAB5B1BC11D3702F3F5E22_cppui_modular256, 0x0EE46C6ABF41C33D66B60AA4E508CE43DFE02535EF19E158AB66B49D12BD171F_cppui_modular256}, - {0x0172960667016B5FFF7A489C3BC65F38A63FB833A16AC7AF4882A193A1B9E0DE_cppui_modular256, 0x241362235399643C11C8DA0E103B5F17975EB78BF493F02DC9749905CE1E7BA7_cppui_modular256}, - {0x060A1110F23BFB345A81751266E1394C0CF7939CB382AD2387FC0F43B83E330C_cppui_modular256, 0x0403BDFA41BAD631ADE30CFE0EF41ABE17E3F4F02BE4F4394D680BD287D4152E_cppui_modular256}, - {0x0C0411B3AC12207D214F1749F3EB08746DEF500AFD2288417A03CB8C64ADCFDC_cppui_modular256, 0x05A41050D3CC198441E920E2B1D07E9B50E082B65911F4305533BE021269AC45_cppui_modular256}, - {0x136245F44B95D1AC824C6C7F385F8260F6D5C4970FE7AE3C170A37AE6622EB28_cppui_modular256, 0x197FC03FCD4758E4B7D3B28CAF5A94911DB2993EFC37F29DAF39853F58AFC559_cppui_modular256}, - {0x3C542327CCAAFA02BCE394AD125622601ADB4DDF55FF9608F31E352B57BAA272_cppui_modular256, 0x201A3AF528EDABBA05CC0B972DA2EDC9C645596ED0C89306516C93C3724C17E1_cppui_modular256}, - {0x0CBA8DE360D3EF1E92303DAEC903351A356881500BF66686F7990B0BFC9CC4D9_cppui_modular256, 0x33DADFB27017F21BAC0F56BD9AD5A7BE0A5A19A714C4DC982FB480D5186EBBD2_cppui_modular256}, - {0x3BD1FDD3FA99286EC812DBE11FD2B988AE6132BDF17A85C80ED2FD3751A6841E_cppui_modular256, 0x105AFCE44F11C190275BB98AEBFB482BCC0021812EAEA404961584C07660FE1F_cppui_modular256}, - {0x07CFF56D62EEBE6F42B55715F8982558E9F252ACBD39D30362D103EF3C98223E_cppui_modular256, 0x084950454C739DF8CC80BCF70D8B95A0ADF5843244DD1CE5D6A083E993F25E18_cppui_modular256}, - {0x1FBB25E4665F8BAB853FA6F5D416757573D546EF597E5F0479293CF2C2A94A6A_cppui_modular256, 0x197C835ECE76501982D3FC07CF8668B416738EABA5A2B7D47B670A9EF6F1F9CC_cppui_modular256}, - {0x0F9348EE41AD355E13B8EA3E11E9C3310A9BE6202C1A5AD59F644F959A51C2C7_cppui_modular256, 0x0A951D45F026168B6BBE24F6DC2C06E1E835877590215529CCA99ECCB4B22782_cppui_modular256}, - {0x146E17ACFCBFCAEA52213C07111BE2749CEF66F8659DC5C06DD0B03231A92BC3_cppui_modular256, 0x3C43FA8A983391EDFBE6756FE64AA67919BBB049323BF191962A0825B909D86D_cppui_modular256}, - {0x3A1ED0BBD35E9AFBAA00826D113E54F9823AE6344728F4A42BBC9EFFD7074832_cppui_modular256, 0x3C20D27B56210D0FE45A7AC692FE929E0768305A1790DA1E8CB5BBAE24B906BE_cppui_modular256}, - {0x171063605C748AFDF525BE0BBE745017A1105871B955BFD210F56E7AA76852E6_cppui_modular256, 0x07687195D7A46F80CE26DADA430C7824F537641F6C654033A418358383427EB6_cppui_modular256}, - {0x363E263819EEB4997CD47FA7FBC35B47FF78D551BD6ABAB919C8996A63A188BC_cppui_modular256, 0x2334D5A3A1685AA651A300835BE4D863AF5512DAE6A7971465937627C9DDD35A_cppui_modular256}, - {0x19C69BC40754819BE0BE01E22A097FB3911E061F8B1818A55B0FF2BA6952A2B5_cppui_modular256, 0x3B6BCF2566E3A1C894C6AEB801B740F767A51B5F7E931002F5AE385A601129C0_cppui_modular256}, - {0x3471FB5C070BD548AD32FEF8CB1F3F9F0E22CD7380FC7E9739D80304EFE69331_cppui_modular256, 0x3B1B5D6A11C58B24B1E6E69628C50C8894FEDCF4EA42190BB1188803D45F9D44_cppui_modular256}, - {0x177D76562D402928EA6EE3838C20AD6426841D2167307EEC3058C85481DBFFAB_cppui_modular256, 0x3E38C317E2E2B5035DC2E80653768DFC5CA8088DD8C7F2EA04861CF3CDFB6E62_cppui_modular256}, - {0x28BCEA14F64CFD5162DE1066DD22B68A20D49A1BC6FC16E71449573E1B9DC8B0_cppui_modular256, 0x21884B615876855022D0B96B1FDE642B96A11D08D90A23BC96A78BE5D1386AF9_cppui_modular256}, - {0x01EBE18E65A82CD77E7F442D534D2DA483BB6723E0B5D4B874A67E318532B0E1_cppui_modular256, 0x14E7278F16C6153C09706C2CC1D608FA47253B5F2AE0900574FEAFBE1378E26D_cppui_modular256}, - {0x366A1904B0AF71A6AFD2AA761C79B98985F39F6097CA440F5CE65563FE0B1E06_cppui_modular256, 0x2A00227D98A2C2E75EB8FA537141585C13181744CA41680F12B9703B5187AADD_cppui_modular256}, - {0x21DF93F25B9A4383F9004C8252C2D0AE2BAE44E7A6D2611D737D85FDF0F5FEAB_cppui_modular256, 0x05D8D88A4A1A9F22FD14BF7D5EC1C10ABE794B84C3871028A3DF69AF48F19193_cppui_modular256}, - {0x3A25707AA4604A4E0DB2E250BF60008BC5E3F33C77B8DF183F7AEE9294504B91_cppui_modular256, 0x2870F2ED277AA0CFBD81A4EAF3E8737589B15ECB81B0FA063656D5C445795646_cppui_modular256}, - {0x2653831E973B7D7C77C45F31C2A7209B2F6C353C731EB9128B692E5447EF42F2_cppui_modular256, 0x3C9017F46FD225938BD8F7DEE085C42C069905C4F9AD7612EFB2997C95E5238E_cppui_modular256}, - {0x08A413C57382ACF055DB927E2ED34CCB8259C7290FF8400EACFD6BF16308BC6F_cppui_modular256, 0x398990AF4D3FEC325BE1E6A3D0A8AB183D494112B9B0FD8A7AA92E2FD7741794_cppui_modular256}, - {0x02E242BDEA7226C5ADAFCC278015F469301BF4C9A4F8687FF9CDE09EF3D8BC38_cppui_modular256, 0x279D5FA5CD209F89675257B185659B89F548EBEE2865A0DAE1D12929DDD36DA8_cppui_modular256}, - {0x3C58D4342E718537E4231F3502A39F3724A03C07E5B3D68AC291E645BD4EA9C3_cppui_modular256, 0x314E911944450CE2050DD050EA72550D64F0A7FD9F1C47CD31EB1E4D19DAA8F2_cppui_modular256}, - {0x3DCE5FCF09DE55C8BC95BBDB2EF08BCD558361AE86455746DCBA6FD142513627_cppui_modular256, 0x1D461F17B4A16512A3908E117011D151E8A15354AEEF357652A7B541C9FA220F_cppui_modular256}, - {0x1371BAD9CCDDA06E18DCD9C23551DC89CCEB8D323395D8B3D83B3D0950B4A20D_cppui_modular256, 0x3CE57B893A3BD3666EAD668622B901F6E25A1B3D359642251438CEC04BB38570_cppui_modular256}, - {0x2102942CA851EF0ED89CE016C172D6EBFB72C7110A04D50B27EC230143914714_cppui_modular256, 0x02E9DBF7C11BC61F61ABE7648195F851543040551808C81E6DFE424D2D701F40_cppui_modular256}, - {0x33F626F2BDDF65045480FDF7CD921CA42254B8F4FBEEDC68D751D7DFF48AAF9A_cppui_modular256, 0x3640D5780FE1EFC6391F777B6ED6B09B7EBFAAA9B2CC0B6AF6E3BF7B572EBB79_cppui_modular256}, - {0x221F9081BAED33F9B610EBBA00D87F33A0E2F209C333E31BE17BE83B87AC838A_cppui_modular256, 0x01098EEAE4534F394020A9F2E3A9408BF2B88151D23CB87D9A7D0F306D694658_cppui_modular256}, - {0x018E6B0BEBB52C9F275C971F2FF0FCE922435A309DC9A15FD4CEC218D3700B59_cppui_modular256, 0x3B61D8723EFE39A06E9ACC7D0A2C67DCAC479479934F5593E7E9542E64B3FDA6_cppui_modular256}, + {0x121C4426885FD5A9701385AAF8D43E52E7660F1FC5AFC5F6468CC55312FC60F8_big_uint256, 0x21B439C01247EA3518C5DDEB324E4CB108AF617780DDF766D96D3FD8AB028B70_big_uint256}, + {0x26C9349FF7FB4AB230A6F6AEF045F451FBBE9B37C43C3274E2AA4B82D131FD26_big_uint256, 0x1996274D67EC0464C51F79CCFA1F511C2AABB666ABE67733EE8185B71B27A504_big_uint256}, + {0x26985F27306586711466C5B2C28754AA62FE33516D75CEF1F7751F1A169713FD_big_uint256, 0x2E8930092FE6A18B331CE0E6E27B413AA18E76394F18A2835DA9FAE10AA3229D_big_uint256}, + {0x014B2DB7B753A74D454061FCB3AC537E1B4BA512F9ED258C996A59D9DACD13E5_big_uint256, 0x06F392D371494FC39174C4B70C692B96F3B7C42DA288F6B7AABF463334A952D0_big_uint256}, + {0x12CA0E2DBF286021CB76B7C12B6C9AD7FDF1D05F722F6EF14BD43E53E7B92120_big_uint256, 0x216A80B79D3995D1F39CE19855C475052D1148ACBDD379FE98961BFBD0A3E428_big_uint256}, + {0x1D257C1F4EC9872C9E06549BC910F7B7196F2E7CB120AEC3FDCEB049C7A0C9A5_big_uint256, 0x191CBEC20ED5EA342B6B395E92996215F7D93C675DA56A13D548EFB58524D336_big_uint256}, + {0x06236026ED7DC19C44540FBAF0C1C3498F82880A34422547FFF519FFF744BB48_big_uint256, 0x3A02C5410DABDE160BD09232A14F00B1EF6CD4D6285C90A8D41FA00BFF922F0A_big_uint256}, + {0x079333FDE60D3F670068B5A1D486EDDD87DDF91D1E1FC000F387991B4ED848B4_big_uint256, 0x3F7FC1A39FD74BDEDC129195080D298CFC2C2CF714BAD9F9334F0DAFB035C200_big_uint256}, + {0x069B398C2968553B7987FF840CF0B71359D10F249F08C40898550A63F196D856_big_uint256, 0x1B68BB879D6EC4EFAA2207E212B59BAD0D8E5E2493F99BE3F2F24764046CD277_big_uint256}, + {0x2CBD65973AE0BE0B9E652CEC35EFE509E1FA8DD8349DC1E644DB494DC2B4FD75_big_uint256, 0x1E27B8178E720407694F4EA1413B0CB87AF4058CB308BBD68FF42D5078DE243E_big_uint256}, + {0x0F29A22EF6949DE85427F72CCD04E3F8F56837BB56DA17D8FA5DE9025E6B9ED5_big_uint256, 0x26A2CD91BD2771E20DECAACDC6CA96E7759668F3D0B7E8810866D27737627A59_big_uint256}, + {0x300EE47C831AB28067BFE9364A819C894FA02155C5FC3E94E83A0EAD3110E9E5_big_uint256, 0x2D4FD253E12958FD548AC51E62F3158EB3EE8CB10F148F0A44D2C6E562D632CA_big_uint256}, + {0x2A9EA5BCE9D10ED951E11E4DE64DED939D1FC6B5DE07DFF33D49861B7DE2EE71_big_uint256, 0x0708F926C80F2A68C3F59C8C25D26F29FF90842A7C1BEDE0B1801D7DF258077B_big_uint256}, + {0x2DEA83FC8EA7A9727A5F2184EDCBF6A17083C10DACE4F45DADB330CE1624DC8B_big_uint256, 0x02DE1252440BF67F0B7A40DE4B7D9157993CE1D0DC47F8D4B3BCF126FBE00E2B_big_uint256}, + {0x341DE1D9B175235F492C6DAD8580443D11B12DF39EE95D497935BFF99D4E775F_big_uint256, 0x01177651EA542F5402CA5B075C5A2082F5F4EE1D3B054FC97CF7D30758D89841_big_uint256}, + {0x37D2BB9884B41B3125444D81C59E8EDA167284FB5D637C9D54B21753830F14A0_big_uint256, 0x0D5708EB79051B4704EDB309CDFCA38030CD8B656A5C9051B5C1AFA6B1C30D46_big_uint256}, + {0x026A67515EF102D65C7694144B457240C4E3270A0240640A5EAF9B3E7489C54E_big_uint256, 0x1B78FD66A3E4A168D0CEC1846F03B1624342491857F9204743A44DE2E90A42E2_big_uint256}, + {0x2E2489CBFD8534059574AACD43C137788C54D86B1292CF4B17850EE95F913198_big_uint256, 0x10D13EAD8E28E1493325B7DBB89025DA06A8867EE60BCADD1D794A847D871A46_big_uint256}, + {0x3FB39F7B1DBD63694D40FC6C105FBD8242908DB2CF82B5F0FACE46A7792CC0A0_big_uint256, 0x01DF2D8291BAA5ECFF544683F16F36D8C83078DFD24B5C8C93DFEDA524704750_big_uint256}, + {0x39DA705C7CD47D34F9B2E2A7F57200F656A229398E7A0F89A5534D72C8BAA2C7_big_uint256, 0x1C5E177C851121F1A90AC844245B7D7D5512C822ABF4AF37213AF5B2EBCED4F0_big_uint256}, + {0x0A35295A58443F71E676CE42BA6FC44D4EF1DEB8E9E9C7D537CE4CD453576521_big_uint256, 0x3600DA2E2E5D3674E13613871FA8B9A5D96F905DD69114FBF3F69F61D0C57263_big_uint256}, + {0x2879FDC5D79EC2FD73D8776DD5ED76F8BC6DA10D4501AA892D11CC02152E33C5_big_uint256, 0x06FC48C9C7CF8B4CD94812DC8EE2ABBC4A0775D52E01097E6877F2A1A7547786_big_uint256}, + {0x0A3499DB18871CBF14818C2D5152742B4457FDF30DF5936172EDE2FE9A537701_big_uint256, 0x0548D846722829A12B1C9C39411DE0AC8C5C2F97C1953432DF60251E0DAE91B2_big_uint256}, + {0x25A8F59C1D7C23576952D07640231EEBDE39D9F89BB85110966096D36043DB0A_big_uint256, 0x0F6EB10365B419FA5179D3278BC7F834D27AD930AE11674FFC5F00549556DBB8_big_uint256}, + {0x1F4A67F9C220741648FBACFAC1934B09C3E903EFBE12DECFA6820656D3778DAA_big_uint256, 0x3685316B926A7C4351AB8AB802174B11BF8EBD5999989F0343555D9575CFA3CC_big_uint256}, + {0x1ECC9BE71F9ACF900FA6CDCC452550C7991BFC25258CEFACBCF51D541DF2D819_big_uint256, 0x0FBDFA76ACB83F9C4DF9337FEC47F38672D31E9EB5406034812E5C21C6494BDD_big_uint256}, + {0x2E79A282F86F8FC1B2DB59443975544DD7C92883322C82C2C283DC51A0E34825_big_uint256, 0x0118E6A449918C38AA0D290373F1D605DC21B6B5F228C41BFF596C635AF7761E_big_uint256}, + {0x3FCD47170790B2A3E85CEAEE44940DACA0E11DD132960092FB2E1613B364849B_big_uint256, 0x2859254A7ABFB288138B64009A85178250FD120351634CCD41D9ECE993D9F6A3_big_uint256}, + {0x1A29CFD3AF8F7C0F19861362DAC9FD8034F82C2C1750A425B446461B5BC63E4B_big_uint256, 0x15E12C10AE7FFF431F6FAAB8EE607386AA85EB7AFB806E264B8952D51404E17D_big_uint256}, + {0x2EECD04E0E37FAF9C51C61249470F118C5C5EA8E6DDB4B645F99C47D3BA07F68_big_uint256, 0x33E6418DD36692F7EE870BB3577115F87D62E9D257374950A17A3B0154B8B35D_big_uint256}, + {0x3BADB4DCEADF739775588552805A959B7D216BFD86847BA54D662B777B2B1FCF_big_uint256, 0x0CB8DEE5BE3197C76685F25D4596C766A2DA3542BD89FD9633D7590EA2B68FD0_big_uint256}, + {0x3FC5DE9E2422625B53D18E55C069CBCEC9C2D2C4F8DAB5B1BC11D3702F3F5E22_big_uint256, 0x0EE46C6ABF41C33D66B60AA4E508CE43DFE02535EF19E158AB66B49D12BD171F_big_uint256}, + {0x0172960667016B5FFF7A489C3BC65F38A63FB833A16AC7AF4882A193A1B9E0DE_big_uint256, 0x241362235399643C11C8DA0E103B5F17975EB78BF493F02DC9749905CE1E7BA7_big_uint256}, + {0x060A1110F23BFB345A81751266E1394C0CF7939CB382AD2387FC0F43B83E330C_big_uint256, 0x0403BDFA41BAD631ADE30CFE0EF41ABE17E3F4F02BE4F4394D680BD287D4152E_big_uint256}, + {0x0C0411B3AC12207D214F1749F3EB08746DEF500AFD2288417A03CB8C64ADCFDC_big_uint256, 0x05A41050D3CC198441E920E2B1D07E9B50E082B65911F4305533BE021269AC45_big_uint256}, + {0x136245F44B95D1AC824C6C7F385F8260F6D5C4970FE7AE3C170A37AE6622EB28_big_uint256, 0x197FC03FCD4758E4B7D3B28CAF5A94911DB2993EFC37F29DAF39853F58AFC559_big_uint256}, + {0x3C542327CCAAFA02BCE394AD125622601ADB4DDF55FF9608F31E352B57BAA272_big_uint256, 0x201A3AF528EDABBA05CC0B972DA2EDC9C645596ED0C89306516C93C3724C17E1_big_uint256}, + {0x0CBA8DE360D3EF1E92303DAEC903351A356881500BF66686F7990B0BFC9CC4D9_big_uint256, 0x33DADFB27017F21BAC0F56BD9AD5A7BE0A5A19A714C4DC982FB480D5186EBBD2_big_uint256}, + {0x3BD1FDD3FA99286EC812DBE11FD2B988AE6132BDF17A85C80ED2FD3751A6841E_big_uint256, 0x105AFCE44F11C190275BB98AEBFB482BCC0021812EAEA404961584C07660FE1F_big_uint256}, + {0x07CFF56D62EEBE6F42B55715F8982558E9F252ACBD39D30362D103EF3C98223E_big_uint256, 0x084950454C739DF8CC80BCF70D8B95A0ADF5843244DD1CE5D6A083E993F25E18_big_uint256}, + {0x1FBB25E4665F8BAB853FA6F5D416757573D546EF597E5F0479293CF2C2A94A6A_big_uint256, 0x197C835ECE76501982D3FC07CF8668B416738EABA5A2B7D47B670A9EF6F1F9CC_big_uint256}, + {0x0F9348EE41AD355E13B8EA3E11E9C3310A9BE6202C1A5AD59F644F959A51C2C7_big_uint256, 0x0A951D45F026168B6BBE24F6DC2C06E1E835877590215529CCA99ECCB4B22782_big_uint256}, + {0x146E17ACFCBFCAEA52213C07111BE2749CEF66F8659DC5C06DD0B03231A92BC3_big_uint256, 0x3C43FA8A983391EDFBE6756FE64AA67919BBB049323BF191962A0825B909D86D_big_uint256}, + {0x3A1ED0BBD35E9AFBAA00826D113E54F9823AE6344728F4A42BBC9EFFD7074832_big_uint256, 0x3C20D27B56210D0FE45A7AC692FE929E0768305A1790DA1E8CB5BBAE24B906BE_big_uint256}, + {0x171063605C748AFDF525BE0BBE745017A1105871B955BFD210F56E7AA76852E6_big_uint256, 0x07687195D7A46F80CE26DADA430C7824F537641F6C654033A418358383427EB6_big_uint256}, + {0x363E263819EEB4997CD47FA7FBC35B47FF78D551BD6ABAB919C8996A63A188BC_big_uint256, 0x2334D5A3A1685AA651A300835BE4D863AF5512DAE6A7971465937627C9DDD35A_big_uint256}, + {0x19C69BC40754819BE0BE01E22A097FB3911E061F8B1818A55B0FF2BA6952A2B5_big_uint256, 0x3B6BCF2566E3A1C894C6AEB801B740F767A51B5F7E931002F5AE385A601129C0_big_uint256}, + {0x3471FB5C070BD548AD32FEF8CB1F3F9F0E22CD7380FC7E9739D80304EFE69331_big_uint256, 0x3B1B5D6A11C58B24B1E6E69628C50C8894FEDCF4EA42190BB1188803D45F9D44_big_uint256}, + {0x177D76562D402928EA6EE3838C20AD6426841D2167307EEC3058C85481DBFFAB_big_uint256, 0x3E38C317E2E2B5035DC2E80653768DFC5CA8088DD8C7F2EA04861CF3CDFB6E62_big_uint256}, + {0x28BCEA14F64CFD5162DE1066DD22B68A20D49A1BC6FC16E71449573E1B9DC8B0_big_uint256, 0x21884B615876855022D0B96B1FDE642B96A11D08D90A23BC96A78BE5D1386AF9_big_uint256}, + {0x01EBE18E65A82CD77E7F442D534D2DA483BB6723E0B5D4B874A67E318532B0E1_big_uint256, 0x14E7278F16C6153C09706C2CC1D608FA47253B5F2AE0900574FEAFBE1378E26D_big_uint256}, + {0x366A1904B0AF71A6AFD2AA761C79B98985F39F6097CA440F5CE65563FE0B1E06_big_uint256, 0x2A00227D98A2C2E75EB8FA537141585C13181744CA41680F12B9703B5187AADD_big_uint256}, + {0x21DF93F25B9A4383F9004C8252C2D0AE2BAE44E7A6D2611D737D85FDF0F5FEAB_big_uint256, 0x05D8D88A4A1A9F22FD14BF7D5EC1C10ABE794B84C3871028A3DF69AF48F19193_big_uint256}, + {0x3A25707AA4604A4E0DB2E250BF60008BC5E3F33C77B8DF183F7AEE9294504B91_big_uint256, 0x2870F2ED277AA0CFBD81A4EAF3E8737589B15ECB81B0FA063656D5C445795646_big_uint256}, + {0x2653831E973B7D7C77C45F31C2A7209B2F6C353C731EB9128B692E5447EF42F2_big_uint256, 0x3C9017F46FD225938BD8F7DEE085C42C069905C4F9AD7612EFB2997C95E5238E_big_uint256}, + {0x08A413C57382ACF055DB927E2ED34CCB8259C7290FF8400EACFD6BF16308BC6F_big_uint256, 0x398990AF4D3FEC325BE1E6A3D0A8AB183D494112B9B0FD8A7AA92E2FD7741794_big_uint256}, + {0x02E242BDEA7226C5ADAFCC278015F469301BF4C9A4F8687FF9CDE09EF3D8BC38_big_uint256, 0x279D5FA5CD209F89675257B185659B89F548EBEE2865A0DAE1D12929DDD36DA8_big_uint256}, + {0x3C58D4342E718537E4231F3502A39F3724A03C07E5B3D68AC291E645BD4EA9C3_big_uint256, 0x314E911944450CE2050DD050EA72550D64F0A7FD9F1C47CD31EB1E4D19DAA8F2_big_uint256}, + {0x3DCE5FCF09DE55C8BC95BBDB2EF08BCD558361AE86455746DCBA6FD142513627_big_uint256, 0x1D461F17B4A16512A3908E117011D151E8A15354AEEF357652A7B541C9FA220F_big_uint256}, + {0x1371BAD9CCDDA06E18DCD9C23551DC89CCEB8D323395D8B3D83B3D0950B4A20D_big_uint256, 0x3CE57B893A3BD3666EAD668622B901F6E25A1B3D359642251438CEC04BB38570_big_uint256}, + {0x2102942CA851EF0ED89CE016C172D6EBFB72C7110A04D50B27EC230143914714_big_uint256, 0x02E9DBF7C11BC61F61ABE7648195F851543040551808C81E6DFE424D2D701F40_big_uint256}, + {0x33F626F2BDDF65045480FDF7CD921CA42254B8F4FBEEDC68D751D7DFF48AAF9A_big_uint256, 0x3640D5780FE1EFC6391F777B6ED6B09B7EBFAAA9B2CC0B6AF6E3BF7B572EBB79_big_uint256}, + {0x221F9081BAED33F9B610EBBA00D87F33A0E2F209C333E31BE17BE83B87AC838A_big_uint256, 0x01098EEAE4534F394020A9F2E3A9408BF2B88151D23CB87D9A7D0F306D694658_big_uint256}, + {0x018E6B0BEBB52C9F275C971F2FF0FCE922435A309DC9A15FD4CEC218D3700B59_big_uint256, 0x3B61D8723EFE39A06E9ACC7D0A2C67DCAC479479934F5593E7E9542E64B3FDA6_big_uint256}, }); std::unordered_map > lb; lb[64] = { - {0x3C89BC840A9BFA941E3795587975566DE58A27D3D437C50C38F2617E22A39C83_cppui_modular256, 0x037A0EEEB2D1297911993DC43C13A6784351957A116C1A66D0748242690CF999_cppui_modular256}, - {0x311B73AC73D24F10E03F64D457B8FCC469CA69A718031DE58D754745447381E3_cppui_modular256, 0x3D5F15A562AFE60D10EEDCC494E91029156D901A5366814B5019FAD10767E308_cppui_modular256}, - {0x17FAAA160C38DE2C4F890E8E9F9D0CC55CF655400AD1F6D9BE86718DEA48A634_cppui_modular256, 0x2FF9EA226552FB4B51796F638C35D335A41F80B1AD2D7D665BD92907C5CBCEDD_cppui_modular256}, - {0x24FEBDFCBDC67B69F1899A665D6D1D2C210B63452B3F85D8D1B139D766DEDD8B_cppui_modular256, 0x09CFE9337A2A9095F46A0B43D2E6C28A055BBDCDB1314F71131022880D3C16F0_cppui_modular256}, - {0x0136DAD72EBCE55FA8F3763293D74D6360CACFE6C1E2E49B1932B45F0C45FB52_cppui_modular256, 0x2F149D6CF6936BB6F04E15CC317B7D847AD3C6364743077F8DD813378E4D8958_cppui_modular256}, - {0x0804A76DA2C0326D97EAEBC790CF96FFAD0511F8AAD2322448B2E61D3DB1832C_cppui_modular256, 0x0C7ABD82BA04EDE7FFFF200360F13E79A64F51DE5B2B48D88829F9BE7FDC0B7D_cppui_modular256}, - {0x38A6EFBB2BB65133E17DBE78A32DD92D2CC7203F9F170F5557EB7B8D8D4A0286_cppui_modular256, 0x145532FAA79ED6F2ABA0C8BA0A0FBCCC34A4960E44B6B522BC1D8988DAD201E6_cppui_modular256}, - {0x04D4CFA5D074EAD706F31AF4988023B9B785F1140A19D01D8A69817ECFBC0771_cppui_modular256, 0x0E74A9CE01A11DF980FA7BDD75981EE0583E31796AE55DFD222609FAA8C02731_cppui_modular256}, - {0x1F48A4346711E5FAA4487B424AA17AE53E6D4104414F9ED47E47FE663E3017C0_cppui_modular256, 0x0F934EA50068A5F16B15BCF2F95FA7B708640149AACA3AA9B3557AE7C111E4EE_cppui_modular256}, - {0x1ACDF9E08E6D7FDB7F359034A7055D54B5FDB5F04546B9886FA43A56CE224F13_cppui_modular256, 0x0511C6980AFE051256A6F0CEAF1D391F4634C307AC432CAD6694899E88700A6F_cppui_modular256}, - {0x263AAA4441BB60272EEF0774918FB22DA9BB2D40893ED3C95397266DD2646F46_cppui_modular256, 0x14AFC51B9C097EBC59187FA9B5C5E0E3D370A33D4D95D8B00D0AD1D4EF16C644_cppui_modular256}, - {0x00FB91CCBD9B18645BDC0B54096458F20A286CFDC7271E79C1102E3AF6D20A4D_cppui_modular256, 0x02EB26A22949C21D5015E9CD09A4723EB3EC0D5F03D86D80648F96D2AC8AE68F_cppui_modular256}, - {0x2DF6658AB48DA915166CB36E301D39FCDC4C22FF3BC729858F4D832E2437713F_cppui_modular256, 0x371210957FE84FA3861700AD6565AF2B5255E1615E13C035595A884DB4D17F1D_cppui_modular256}, - {0x222C42D9F0E4B95745B4942D329E9F175E98045286D7043FA927087B977D471D_cppui_modular256, 0x2918339EBEA41F2BA9AAF690CB4DBC23A6B73441A4394B9F4A4D6909F38ACA0C_cppui_modular256}, - {0x3624A396CB168A1203C991119ECBBC6198722121298DC4B3ED0C5815BC5CF25A_cppui_modular256, 0x3FD7696D730E57FFD17411388C1394F00B0ED51BED3949D6E8104DF6E7051034_cppui_modular256}, - {0x15FDB7C4200AFE05277EE9BAEFA8A35DBD6B2064DFFD19BBADF0451C87737CB4_cppui_modular256, 0x1679DF1E82C8D7B213CA50AE4FB4C01B451C35FB9773D1AFCA88F4036E7DE6B5_cppui_modular256}, - {0x168C859A6F15D8FCF7F04CD64CCB765E40D5133230772A96D5794F345339056F_cppui_modular256, 0x12DBDEDA81DC4F3BFF48DED7ED60871EBDCE3F645230430F854532FDC7669EF5_cppui_modular256}, - {0x29BCFC91A2A6AD3A0967E2B413A426C8B55105479AB3D7E5A6E1F6E14112042D_cppui_modular256, 0x0B838A8D03F7A7E4CAF0FAA27CF26298380D8877C22AB47D226EC6C94ED1D41E_cppui_modular256}, - {0x107059654B51B4DE00EA74A04AEB2F1D262BB0ADBC1F74886098152FC1D42C21_cppui_modular256, 0x2007CF92469A2E935A5B6849146B974AE49F5A226FD0FF348C9BBA3E49D03F77_cppui_modular256}, - {0x320E00A7C54FDD11AFDC1CFFCE893A578B89EC7929A369735387503CBD7BAD56_cppui_modular256, 0x18516D9F2EEF18B9CD474EAB18E58F08C8FF7A647514D212E617343CFA8E4BFD_cppui_modular256}, - {0x3352BB1A90CF8A7250183BA1AE95644B390C8429F2D3CB0A1F9A0B8FA69C12D8_cppui_modular256, 0x0906450E7D4AC8394CC2723FDA6A84D9BD2DD83F65F19D93D85C3B14970AFAF1_cppui_modular256}, - {0x2080B1B270D63DF226EE44C5E03036656B437F88E972061E3D26A190A3427FCB_cppui_modular256, 0x34D9BA01F40B2E521EA0A7493ED7B7AD7F419634BDE91809BB747981F4BA4691_cppui_modular256}, - {0x1B72B4BD6713F958EAEB8F91A1DB37D245B0B31E43C98282DE58DA424D0E7CDC_cppui_modular256, 0x3B36009A35DED46973B3E2BF4BB64EE3406916D927F8A00E452FAE381D3C2AD6_cppui_modular256}, - {0x3AD4D7F604FC1261F3AA227E61ABFD3DB766B9CADF07660471289264682633BD_cppui_modular256, 0x2C87A76A484DF472917476A5ABCC8FE7324123F4365B176391A5F65A3D4EE47F_cppui_modular256}, - {0x3E0A9D8A6BD0DF3C64D8964829CA93FB70B400344BB0AB6E117874F4DDE6DF6A_cppui_modular256, 0x311DED62A49E2E452C9B96350E45B2C52AA2951F09321652B255703AFD213FE6_cppui_modular256}, - {0x3E4C3344680BDE8FCD5E7934067D0642C178BAD402F2CD554DC15C7E29D9982B_cppui_modular256, 0x2A92BBC7B9DC4A592BDEBC06510476FDAB5B5AC2BF28984A27C4ADA37CE39D97_cppui_modular256}, - {0x0F429110528C4DCBA1E59682B9467A30C6F366F0BE8FC2FC597DE75A4447FDAC_cppui_modular256, 0x0813847967DB68D88DA632E74A3E1D2C7C09E775719F48D802D6A2546B122DFE_cppui_modular256}, - {0x3AB2F27A8040747A3D0A74B9F45AF533DAD6D79103D5B7EF02D4A0EB09C9B91B_cppui_modular256, 0x11EE126988D11C7232E60D920B51B7CC2391AD5324AF32AEC1EAC8C485FABEBC_cppui_modular256}, - {0x20CBDB07812379E2074B969E43A22699FA6B2803FC00087BBDA531E5C6D14B39_cppui_modular256, 0x15A465EDDC45B8EB428E9B23B14D3084F99096AF3E5988E1098A5957F9937BB4_cppui_modular256}, - {0x23CF677347411249DB6BC8853AB2B562229E7B773C4E18AFEFB57A5123B5EDC5_cppui_modular256, 0x03A2CF573B4EB51DEB58A057A611B8A641FA3C4B78B039BC1D25522F1F4E152B_cppui_modular256}, - {0x0A844BAB65A39230B31A1F8339D275C932BDC044F3E45C20118F2CB0A3585F49_cppui_modular256, 0x154E9EA6E40A8F5243BACC1D5613300F2D709AE0E8958FD3CC47143BD5C532B5_cppui_modular256}, - {0x0D072415CB893496134E551EE4C4582262FB1B8E37AFD1BF6C7CD57E33115B7F_cppui_modular256, 0x3804E5B57477FB43239378D6C220EF0930C6732CCC242ABC6A9368C0664AAD7A_cppui_modular256}, - {0x1E7B4D1881A5BB64CAA8FB1E2815A8CDC8AFEF00649BDECE17596554C636AA9C_cppui_modular256, 0x177CC53E9B41D37E5058B9AE33D82413F32F535DA37444B212CB4B3BC221F9AF_cppui_modular256}, - {0x3F43332116BD7C42986271B0C98066D0A5F5A2B5FC9DB32F3F8E272BF7EB9FF2_cppui_modular256, 0x0C827C6BDB35BCE4F8DD289056AA2F1B95F9A7BFBA3116B20CFE98E894682092_cppui_modular256}, - {0x28CA8B3695515D80A55CB135B42DC68B11204EDEC6E1E57B90763D8B764D4E4A_cppui_modular256, 0x2366E50F7EBBE57A68E0320B0CF43615A1A038F56885FAF4D4F08390518A31F1_cppui_modular256}, - {0x28BA918C4AFDAA3E87F07B1DBA299F849C323C66463B81E7D29381532DA03DCC_cppui_modular256, 0x21C5E945F8877E52CDAF2B7D37AAD1F895F1F23C853FB5F36B7E822611284F82_cppui_modular256}, - {0x3FCFA209B59D36F244DFDBB45C667CD518B58D21DD042B76785F4FBA80F4B7EA_cppui_modular256, 0x1DAA63C559BF92982E773F16524722CFEF8384A1CB7DB8FD500847EAFA2386E0_cppui_modular256}, - {0x1C52D056521BC5AAB401F489B5A099BC4E2FF9112E8E89F79ABFA83F6141B1E7_cppui_modular256, 0x3975139F4FF73871BA2D1B228135C1ED6F807FD4729BFD25773DCD0CA0567AEC_cppui_modular256}, - {0x39CA6B9121820798E4F8C9E56FAA19F6C6186E91FB58B9219A57CF946EB4404C_cppui_modular256, 0x00F36DE792588AE497FC844588103E3EF3AEC5378443D5CF4D8A31924B15F409_cppui_modular256}, - {0x366276BAC098B06CCB3BF10CDD74AE208A6F72DD295A439481F3FF0F19EA4472_cppui_modular256, 0x05682488CC82C1C4B963B0F4B696574B216D10E3DEF1970E7DD6EF1D4D9DC95E_cppui_modular256}, - {0x3E6E698789A213627EEF178DCCE852BBDCDE95F2FEF6F99ADB54BA91A4DBD633_cppui_modular256, 0x3D1BCC88A6C0F515C42AD2FF96B4485580D8900B53CBD1E9D9B6C874012DA1CA_cppui_modular256}, - {0x06FDA94AC505426D3D5C8B82B96A1512E44F4A84849178753BE8346EB068E4C9_cppui_modular256, 0x1EB1DB4AA54111F8105904ACE22576022989821736A3273ADAA71E561717B410_cppui_modular256}, - {0x340DCBE21EA8A8F1D9DF1F07E51B3CB97D8284F28ACCE8497E445C259F213BB4_cppui_modular256, 0x2DA0ABCF3573491D505CC5F619523BD2453FD67287A6109EAEDF00E5A2906740_cppui_modular256}, - {0x1AF462A6713530F9C71A555363B5199F839B8B39154663C67264F3B5DC6F9691_cppui_modular256, 0x209E3B30E10ABE2F47D0D28E56BC22E4F7FD746D9BFEF7CD5093880D4A32BDD8_cppui_modular256}, - {0x0A5A714A06E8CEF3695DC12B7BB2CE62682EF127A922E1941595EEA4521DAA9B_cppui_modular256, 0x083549F026A2C593AD6A21B5B18546AD77B8999C8EC48FBB90F4A7A5CBF4BBE6_cppui_modular256}, - {0x319D8AAF8C24EB1067A600FEDD5E89DF9141395BF1C51E0145ACD251A375C616_cppui_modular256, 0x1231B2BCE3B7E245A93682F5C776B387F0AAB9637E984C8C9023E27F60DCBD85_cppui_modular256}, - {0x2839EA83958EB5C4018A2618FA89A78C99E905A49A119A4DECD2FC80319C3E5F_cppui_modular256, 0x1D74130ED38B699544BA43687070012EE571009FEB480B15346104AE1A5E910A_cppui_modular256}, - {0x24914C51064F1BEEF7A723A34A26709AA02BC4CE8D44FB4ED3F31356838A095F_cppui_modular256, 0x152137EC9B4777B8C6F913E3268E2261B44C41B8DA89A7BCF1BCB24711CA45F1_cppui_modular256}, - {0x2E1B58CC9A736C19547D35B15B88E4A5C6852B93B9FA079A564B25F63608B97C_cppui_modular256, 0x267DBE881E33F759E3CA043DC58991CDE682DDF3D52A2C9C6C743369CF34D52C_cppui_modular256}, - {0x1997469E9AFCE26367CBFAEAB96C25BC79B36EFDA34885B2E9EEBD16EF5F7E1D_cppui_modular256, 0x1538A3F7C25841AC797CF7E25EEEFCA7F41C071CC306728F174A4ED211FE6ACD_cppui_modular256}, - {0x32BE50F7D0C1E119F925FFECB9D6EDF01F2051628EA6B8D473A1E3813E39A6CD_cppui_modular256, 0x2819810C3D069979C7BDD4DF764E7E5EB21CDC68C4C6D856D7FFC35EE5A35615_cppui_modular256}, - {0x2C29D5A8980BDACE5708A7D42C4EE5900C14638D63B5E4A56D2A525384ECEB0D_cppui_modular256, 0x14097A6815520C3EC8B0D61CF6E1ACBFC37B3FBB9CC588F04DFD4F8F3DB0C8B3_cppui_modular256}, - {0x02DE03DB892A85BD073B31F33E4F7DA209AF0F66A7185A23C537C453A152292F_cppui_modular256, 0x3A31D9BB9A44A12E2685C23AB864490D0A7943187BDD31F87FE9E6E787448E0E_cppui_modular256}, - {0x37E39B187FF0747D2CCAD7092AA9CB24A6AE2DB7CF17BFD23D3DA657FCCA695D_cppui_modular256, 0x2CE80F107CCB457C9E78CE10B4BA5BE5623DA20C1ED45BB00E6780C6A767CC83_cppui_modular256}, - {0x3B593FA9CB5848054B88DF7A09E84F97F999545DD30524BA158D1C77144A7D14_cppui_modular256, 0x0F0A7E093F5DA7C75DFC238BC36125F02ED97BD79C425B1A77B740467D379509_cppui_modular256}, - {0x056338F486ACBC5048CB96BE50676D31DBA01F962FBF177A9E9F3112671AD51D_cppui_modular256, 0x0C8EC6604982DF2AF84709DCD16FD7EF89CCE63EED31868106E0FE53478F5EE3_cppui_modular256}, - {0x123E53A4A256FD4711C68003B0F17D90708976723116BF1972B10643BACCFB06_cppui_modular256, 0x23F176C9D80799DB9F7396E649517B942747AB57F79E2CCBCC9A46BD954BAACE_cppui_modular256}, - {0x3237CF192BD09509F090E30147FDE7877BC2214DA7CD4524E6D46F4AA24422F8_cppui_modular256, 0x0489D219C52A9912C4DDF4713F8E2B5D7D1470AFAF7DD1D31206C0549DDFCB3B_cppui_modular256}, - {0x19029EB9DEC80B3A35F875F806C621E19938211623B0CA7325F092A091A8ED4A_cppui_modular256, 0x38EC6FA4220CBFB39BA2ABB78861FD1B293D1147833BF7C19430E8CEE4DDB688_cppui_modular256}, - {0x2B3C070B9B85E1723CEB55DE10A309F0E948F1A8507134DD7188024F8DE12BA9_cppui_modular256, 0x3F2992F73FECA28A841A4F51662BF667B2B8CE49DEE75C7B51AEE082FB050FCF_cppui_modular256}, - {0x227D4B9A0C21B7CDA0D85E91AFFD9D8E38B51CBD0BC877B92A7EC1B315B3B24D_cppui_modular256, 0x39E7154095B659B654F69BE25AD02188536ADDD0F30C4235C22282847E809B8C_cppui_modular256}, - {0x20C8053B87A050C01008750EFC18489AA56C138743769A4AD7553D29F2531AE7_cppui_modular256, 0x2F46839877B7DB1EC2689916B93533D60F4F6E6C583A2CBB43879695E059B4FE_cppui_modular256}, - {0x21533DF31582C49F0534D6B39711EF3FCE360E85354949F4E717F337F3EA3024_cppui_modular256, 0x064F8D082581EBAE41A3BCB4BB388941EA3B679E2DF0E6D6F5F4D9E21A508E8A_cppui_modular256}, - {0x318F8D6E431858DE00CAD3B9EDDFA82B9AA5332DDFE90DD511D13405BEBC45D5_cppui_modular256, 0x1CD48075F42F46FA8E87CF3D326CE480DB2BBDFE144FBC75AD0A2409E6C91406_cppui_modular256}, + {0x3C89BC840A9BFA941E3795587975566DE58A27D3D437C50C38F2617E22A39C83_big_uint256, 0x037A0EEEB2D1297911993DC43C13A6784351957A116C1A66D0748242690CF999_big_uint256}, + {0x311B73AC73D24F10E03F64D457B8FCC469CA69A718031DE58D754745447381E3_big_uint256, 0x3D5F15A562AFE60D10EEDCC494E91029156D901A5366814B5019FAD10767E308_big_uint256}, + {0x17FAAA160C38DE2C4F890E8E9F9D0CC55CF655400AD1F6D9BE86718DEA48A634_big_uint256, 0x2FF9EA226552FB4B51796F638C35D335A41F80B1AD2D7D665BD92907C5CBCEDD_big_uint256}, + {0x24FEBDFCBDC67B69F1899A665D6D1D2C210B63452B3F85D8D1B139D766DEDD8B_big_uint256, 0x09CFE9337A2A9095F46A0B43D2E6C28A055BBDCDB1314F71131022880D3C16F0_big_uint256}, + {0x0136DAD72EBCE55FA8F3763293D74D6360CACFE6C1E2E49B1932B45F0C45FB52_big_uint256, 0x2F149D6CF6936BB6F04E15CC317B7D847AD3C6364743077F8DD813378E4D8958_big_uint256}, + {0x0804A76DA2C0326D97EAEBC790CF96FFAD0511F8AAD2322448B2E61D3DB1832C_big_uint256, 0x0C7ABD82BA04EDE7FFFF200360F13E79A64F51DE5B2B48D88829F9BE7FDC0B7D_big_uint256}, + {0x38A6EFBB2BB65133E17DBE78A32DD92D2CC7203F9F170F5557EB7B8D8D4A0286_big_uint256, 0x145532FAA79ED6F2ABA0C8BA0A0FBCCC34A4960E44B6B522BC1D8988DAD201E6_big_uint256}, + {0x04D4CFA5D074EAD706F31AF4988023B9B785F1140A19D01D8A69817ECFBC0771_big_uint256, 0x0E74A9CE01A11DF980FA7BDD75981EE0583E31796AE55DFD222609FAA8C02731_big_uint256}, + {0x1F48A4346711E5FAA4487B424AA17AE53E6D4104414F9ED47E47FE663E3017C0_big_uint256, 0x0F934EA50068A5F16B15BCF2F95FA7B708640149AACA3AA9B3557AE7C111E4EE_big_uint256}, + {0x1ACDF9E08E6D7FDB7F359034A7055D54B5FDB5F04546B9886FA43A56CE224F13_big_uint256, 0x0511C6980AFE051256A6F0CEAF1D391F4634C307AC432CAD6694899E88700A6F_big_uint256}, + {0x263AAA4441BB60272EEF0774918FB22DA9BB2D40893ED3C95397266DD2646F46_big_uint256, 0x14AFC51B9C097EBC59187FA9B5C5E0E3D370A33D4D95D8B00D0AD1D4EF16C644_big_uint256}, + {0x00FB91CCBD9B18645BDC0B54096458F20A286CFDC7271E79C1102E3AF6D20A4D_big_uint256, 0x02EB26A22949C21D5015E9CD09A4723EB3EC0D5F03D86D80648F96D2AC8AE68F_big_uint256}, + {0x2DF6658AB48DA915166CB36E301D39FCDC4C22FF3BC729858F4D832E2437713F_big_uint256, 0x371210957FE84FA3861700AD6565AF2B5255E1615E13C035595A884DB4D17F1D_big_uint256}, + {0x222C42D9F0E4B95745B4942D329E9F175E98045286D7043FA927087B977D471D_big_uint256, 0x2918339EBEA41F2BA9AAF690CB4DBC23A6B73441A4394B9F4A4D6909F38ACA0C_big_uint256}, + {0x3624A396CB168A1203C991119ECBBC6198722121298DC4B3ED0C5815BC5CF25A_big_uint256, 0x3FD7696D730E57FFD17411388C1394F00B0ED51BED3949D6E8104DF6E7051034_big_uint256}, + {0x15FDB7C4200AFE05277EE9BAEFA8A35DBD6B2064DFFD19BBADF0451C87737CB4_big_uint256, 0x1679DF1E82C8D7B213CA50AE4FB4C01B451C35FB9773D1AFCA88F4036E7DE6B5_big_uint256}, + {0x168C859A6F15D8FCF7F04CD64CCB765E40D5133230772A96D5794F345339056F_big_uint256, 0x12DBDEDA81DC4F3BFF48DED7ED60871EBDCE3F645230430F854532FDC7669EF5_big_uint256}, + {0x29BCFC91A2A6AD3A0967E2B413A426C8B55105479AB3D7E5A6E1F6E14112042D_big_uint256, 0x0B838A8D03F7A7E4CAF0FAA27CF26298380D8877C22AB47D226EC6C94ED1D41E_big_uint256}, + {0x107059654B51B4DE00EA74A04AEB2F1D262BB0ADBC1F74886098152FC1D42C21_big_uint256, 0x2007CF92469A2E935A5B6849146B974AE49F5A226FD0FF348C9BBA3E49D03F77_big_uint256}, + {0x320E00A7C54FDD11AFDC1CFFCE893A578B89EC7929A369735387503CBD7BAD56_big_uint256, 0x18516D9F2EEF18B9CD474EAB18E58F08C8FF7A647514D212E617343CFA8E4BFD_big_uint256}, + {0x3352BB1A90CF8A7250183BA1AE95644B390C8429F2D3CB0A1F9A0B8FA69C12D8_big_uint256, 0x0906450E7D4AC8394CC2723FDA6A84D9BD2DD83F65F19D93D85C3B14970AFAF1_big_uint256}, + {0x2080B1B270D63DF226EE44C5E03036656B437F88E972061E3D26A190A3427FCB_big_uint256, 0x34D9BA01F40B2E521EA0A7493ED7B7AD7F419634BDE91809BB747981F4BA4691_big_uint256}, + {0x1B72B4BD6713F958EAEB8F91A1DB37D245B0B31E43C98282DE58DA424D0E7CDC_big_uint256, 0x3B36009A35DED46973B3E2BF4BB64EE3406916D927F8A00E452FAE381D3C2AD6_big_uint256}, + {0x3AD4D7F604FC1261F3AA227E61ABFD3DB766B9CADF07660471289264682633BD_big_uint256, 0x2C87A76A484DF472917476A5ABCC8FE7324123F4365B176391A5F65A3D4EE47F_big_uint256}, + {0x3E0A9D8A6BD0DF3C64D8964829CA93FB70B400344BB0AB6E117874F4DDE6DF6A_big_uint256, 0x311DED62A49E2E452C9B96350E45B2C52AA2951F09321652B255703AFD213FE6_big_uint256}, + {0x3E4C3344680BDE8FCD5E7934067D0642C178BAD402F2CD554DC15C7E29D9982B_big_uint256, 0x2A92BBC7B9DC4A592BDEBC06510476FDAB5B5AC2BF28984A27C4ADA37CE39D97_big_uint256}, + {0x0F429110528C4DCBA1E59682B9467A30C6F366F0BE8FC2FC597DE75A4447FDAC_big_uint256, 0x0813847967DB68D88DA632E74A3E1D2C7C09E775719F48D802D6A2546B122DFE_big_uint256}, + {0x3AB2F27A8040747A3D0A74B9F45AF533DAD6D79103D5B7EF02D4A0EB09C9B91B_big_uint256, 0x11EE126988D11C7232E60D920B51B7CC2391AD5324AF32AEC1EAC8C485FABEBC_big_uint256}, + {0x20CBDB07812379E2074B969E43A22699FA6B2803FC00087BBDA531E5C6D14B39_big_uint256, 0x15A465EDDC45B8EB428E9B23B14D3084F99096AF3E5988E1098A5957F9937BB4_big_uint256}, + {0x23CF677347411249DB6BC8853AB2B562229E7B773C4E18AFEFB57A5123B5EDC5_big_uint256, 0x03A2CF573B4EB51DEB58A057A611B8A641FA3C4B78B039BC1D25522F1F4E152B_big_uint256}, + {0x0A844BAB65A39230B31A1F8339D275C932BDC044F3E45C20118F2CB0A3585F49_big_uint256, 0x154E9EA6E40A8F5243BACC1D5613300F2D709AE0E8958FD3CC47143BD5C532B5_big_uint256}, + {0x0D072415CB893496134E551EE4C4582262FB1B8E37AFD1BF6C7CD57E33115B7F_big_uint256, 0x3804E5B57477FB43239378D6C220EF0930C6732CCC242ABC6A9368C0664AAD7A_big_uint256}, + {0x1E7B4D1881A5BB64CAA8FB1E2815A8CDC8AFEF00649BDECE17596554C636AA9C_big_uint256, 0x177CC53E9B41D37E5058B9AE33D82413F32F535DA37444B212CB4B3BC221F9AF_big_uint256}, + {0x3F43332116BD7C42986271B0C98066D0A5F5A2B5FC9DB32F3F8E272BF7EB9FF2_big_uint256, 0x0C827C6BDB35BCE4F8DD289056AA2F1B95F9A7BFBA3116B20CFE98E894682092_big_uint256}, + {0x28CA8B3695515D80A55CB135B42DC68B11204EDEC6E1E57B90763D8B764D4E4A_big_uint256, 0x2366E50F7EBBE57A68E0320B0CF43615A1A038F56885FAF4D4F08390518A31F1_big_uint256}, + {0x28BA918C4AFDAA3E87F07B1DBA299F849C323C66463B81E7D29381532DA03DCC_big_uint256, 0x21C5E945F8877E52CDAF2B7D37AAD1F895F1F23C853FB5F36B7E822611284F82_big_uint256}, + {0x3FCFA209B59D36F244DFDBB45C667CD518B58D21DD042B76785F4FBA80F4B7EA_big_uint256, 0x1DAA63C559BF92982E773F16524722CFEF8384A1CB7DB8FD500847EAFA2386E0_big_uint256}, + {0x1C52D056521BC5AAB401F489B5A099BC4E2FF9112E8E89F79ABFA83F6141B1E7_big_uint256, 0x3975139F4FF73871BA2D1B228135C1ED6F807FD4729BFD25773DCD0CA0567AEC_big_uint256}, + {0x39CA6B9121820798E4F8C9E56FAA19F6C6186E91FB58B9219A57CF946EB4404C_big_uint256, 0x00F36DE792588AE497FC844588103E3EF3AEC5378443D5CF4D8A31924B15F409_big_uint256}, + {0x366276BAC098B06CCB3BF10CDD74AE208A6F72DD295A439481F3FF0F19EA4472_big_uint256, 0x05682488CC82C1C4B963B0F4B696574B216D10E3DEF1970E7DD6EF1D4D9DC95E_big_uint256}, + {0x3E6E698789A213627EEF178DCCE852BBDCDE95F2FEF6F99ADB54BA91A4DBD633_big_uint256, 0x3D1BCC88A6C0F515C42AD2FF96B4485580D8900B53CBD1E9D9B6C874012DA1CA_big_uint256}, + {0x06FDA94AC505426D3D5C8B82B96A1512E44F4A84849178753BE8346EB068E4C9_big_uint256, 0x1EB1DB4AA54111F8105904ACE22576022989821736A3273ADAA71E561717B410_big_uint256}, + {0x340DCBE21EA8A8F1D9DF1F07E51B3CB97D8284F28ACCE8497E445C259F213BB4_big_uint256, 0x2DA0ABCF3573491D505CC5F619523BD2453FD67287A6109EAEDF00E5A2906740_big_uint256}, + {0x1AF462A6713530F9C71A555363B5199F839B8B39154663C67264F3B5DC6F9691_big_uint256, 0x209E3B30E10ABE2F47D0D28E56BC22E4F7FD746D9BFEF7CD5093880D4A32BDD8_big_uint256}, + {0x0A5A714A06E8CEF3695DC12B7BB2CE62682EF127A922E1941595EEA4521DAA9B_big_uint256, 0x083549F026A2C593AD6A21B5B18546AD77B8999C8EC48FBB90F4A7A5CBF4BBE6_big_uint256}, + {0x319D8AAF8C24EB1067A600FEDD5E89DF9141395BF1C51E0145ACD251A375C616_big_uint256, 0x1231B2BCE3B7E245A93682F5C776B387F0AAB9637E984C8C9023E27F60DCBD85_big_uint256}, + {0x2839EA83958EB5C4018A2618FA89A78C99E905A49A119A4DECD2FC80319C3E5F_big_uint256, 0x1D74130ED38B699544BA43687070012EE571009FEB480B15346104AE1A5E910A_big_uint256}, + {0x24914C51064F1BEEF7A723A34A26709AA02BC4CE8D44FB4ED3F31356838A095F_big_uint256, 0x152137EC9B4777B8C6F913E3268E2261B44C41B8DA89A7BCF1BCB24711CA45F1_big_uint256}, + {0x2E1B58CC9A736C19547D35B15B88E4A5C6852B93B9FA079A564B25F63608B97C_big_uint256, 0x267DBE881E33F759E3CA043DC58991CDE682DDF3D52A2C9C6C743369CF34D52C_big_uint256}, + {0x1997469E9AFCE26367CBFAEAB96C25BC79B36EFDA34885B2E9EEBD16EF5F7E1D_big_uint256, 0x1538A3F7C25841AC797CF7E25EEEFCA7F41C071CC306728F174A4ED211FE6ACD_big_uint256}, + {0x32BE50F7D0C1E119F925FFECB9D6EDF01F2051628EA6B8D473A1E3813E39A6CD_big_uint256, 0x2819810C3D069979C7BDD4DF764E7E5EB21CDC68C4C6D856D7FFC35EE5A35615_big_uint256}, + {0x2C29D5A8980BDACE5708A7D42C4EE5900C14638D63B5E4A56D2A525384ECEB0D_big_uint256, 0x14097A6815520C3EC8B0D61CF6E1ACBFC37B3FBB9CC588F04DFD4F8F3DB0C8B3_big_uint256}, + {0x02DE03DB892A85BD073B31F33E4F7DA209AF0F66A7185A23C537C453A152292F_big_uint256, 0x3A31D9BB9A44A12E2685C23AB864490D0A7943187BDD31F87FE9E6E787448E0E_big_uint256}, + {0x37E39B187FF0747D2CCAD7092AA9CB24A6AE2DB7CF17BFD23D3DA657FCCA695D_big_uint256, 0x2CE80F107CCB457C9E78CE10B4BA5BE5623DA20C1ED45BB00E6780C6A767CC83_big_uint256}, + {0x3B593FA9CB5848054B88DF7A09E84F97F999545DD30524BA158D1C77144A7D14_big_uint256, 0x0F0A7E093F5DA7C75DFC238BC36125F02ED97BD79C425B1A77B740467D379509_big_uint256}, + {0x056338F486ACBC5048CB96BE50676D31DBA01F962FBF177A9E9F3112671AD51D_big_uint256, 0x0C8EC6604982DF2AF84709DCD16FD7EF89CCE63EED31868106E0FE53478F5EE3_big_uint256}, + {0x123E53A4A256FD4711C68003B0F17D90708976723116BF1972B10643BACCFB06_big_uint256, 0x23F176C9D80799DB9F7396E649517B942747AB57F79E2CCBCC9A46BD954BAACE_big_uint256}, + {0x3237CF192BD09509F090E30147FDE7877BC2214DA7CD4524E6D46F4AA24422F8_big_uint256, 0x0489D219C52A9912C4DDF4713F8E2B5D7D1470AFAF7DD1D31206C0549DDFCB3B_big_uint256}, + {0x19029EB9DEC80B3A35F875F806C621E19938211623B0CA7325F092A091A8ED4A_big_uint256, 0x38EC6FA4220CBFB39BA2ABB78861FD1B293D1147833BF7C19430E8CEE4DDB688_big_uint256}, + {0x2B3C070B9B85E1723CEB55DE10A309F0E948F1A8507134DD7188024F8DE12BA9_big_uint256, 0x3F2992F73FECA28A841A4F51662BF667B2B8CE49DEE75C7B51AEE082FB050FCF_big_uint256}, + {0x227D4B9A0C21B7CDA0D85E91AFFD9D8E38B51CBD0BC877B92A7EC1B315B3B24D_big_uint256, 0x39E7154095B659B654F69BE25AD02188536ADDD0F30C4235C22282847E809B8C_big_uint256}, + {0x20C8053B87A050C01008750EFC18489AA56C138743769A4AD7553D29F2531AE7_big_uint256, 0x2F46839877B7DB1EC2689916B93533D60F4F6E6C583A2CBB43879695E059B4FE_big_uint256}, + {0x21533DF31582C49F0534D6B39711EF3FCE360E85354949F4E717F337F3EA3024_big_uint256, 0x064F8D082581EBAE41A3BCB4BB388941EA3B679E2DF0E6D6F5F4D9E21A508E8A_big_uint256}, + {0x318F8D6E431858DE00CAD3B9EDDFA82B9AA5332DDFE90DD511D13405BEBC45D5_big_uint256, 0x1CD48075F42F46FA8E87CF3D326CE480DB2BBDFE144FBC75AD0A2409E6C91406_big_uint256}, }; index.srs.lagrange_bases = lb; - index.srs.h = {0x092060386301C999AAB4F263757836369CA27975E28BC7A8E5B2CE5B26262201_cppui_modular256, - 0x314FC4D83AE66A509F9D41BE6165F2606A209A9B5805EE85CE20249C5EBCBE26_cppui_modular256}; + index.srs.h = {0x092060386301C999AAB4F263757836369CA27975E28BC7A8E5B2CE5B26262201_big_uint256, + 0x314FC4D83AE66A509F9D41BE6165F2606A209A9B5805EE85CE20249C5EBCBE26_big_uint256}; - index.srs.endo_q = 0x06819A58283E528E511DB4D81CF70F5A0FED467D47C033AF2AA9D2E050AA0E4F_cppui_modular256; - index.srs.endo_r = 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular256; + index.srs.endo_q = 0x06819A58283E528E511DB4D81CF70F5A0FED467D47C033AF2AA9D2E050AA0E4F_big_uint256; + index.srs.endo_r = 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_big_uint256; std::vector> sigma_commitments_unshifted = { - {{0x26C9349FF7FB4AB230A6F6AEF045F451FBBE9B37C43C3274E2AA4B82D131FD26_cppui_modular256, 0x1996274D67EC0464C51F79CCFA1F511C2AABB666ABE67733EE8185B71B27A504_cppui_modular256}}, - {{0x35AF80504B4DBF58CE3535F3E159BD407695088EFBF1EF56D4597A7F1CBEF531_cppui_modular256, 0x2D36B9BCB23702DF2F4A2C9E60ABBB81C2BE261D227AF025DDDE4FFF354727CB_cppui_modular256}}, - {{0x1CFDC82F8279850B957D0BDE2A188AD5060D80A97EF8B4E56CD17CFE1067CBD9_cppui_modular256, 0x2863D1D7D5EFC2155B2BCCB849B6EA6738E2705A4DC63115045B797E2CFA6511_cppui_modular256}}, - {{0x262ABA0787800EF4CBD18688A534659AB77861C373006A4E0E42BC06D85F9E79_cppui_modular256, 0x150A55D182F3B621B10774BD11C8B8198048DEE7C535DDD08992B41928E45DC3_cppui_modular256}}, - {{0x0C51759D046C2382B5800C5CAA9D9DF74636E1FE0671DF237CD2AC771D56436D_cppui_modular256, 0x39AE43E4BE7084DB9EFDCA61204B29929A2C242605FEFE95F41F0D5DD286DA38_cppui_modular256}}, - {{0x18819B168F851F614CF0DD2F4C30030C1267688C1723BF68293324770AB41DE3_cppui_modular256, 0x1E03B384B597E7A9F17F1B7E36A0B1179291AD17F30C8871379318BADEC65C8C_cppui_modular256}}, - {{0x12D8B90170966FA0956A13A852F52EA682F50A66738527AD24827CAC02A7EDF0_cppui_modular256, 0x3566FB28328CAA573331BECEAE6CED6440F32CD9191FA3DFC7A97BBC681DFF30_cppui_modular256}}, + {{0x26C9349FF7FB4AB230A6F6AEF045F451FBBE9B37C43C3274E2AA4B82D131FD26_big_uint256, 0x1996274D67EC0464C51F79CCFA1F511C2AABB666ABE67733EE8185B71B27A504_big_uint256}}, + {{0x35AF80504B4DBF58CE3535F3E159BD407695088EFBF1EF56D4597A7F1CBEF531_big_uint256, 0x2D36B9BCB23702DF2F4A2C9E60ABBB81C2BE261D227AF025DDDE4FFF354727CB_big_uint256}}, + {{0x1CFDC82F8279850B957D0BDE2A188AD5060D80A97EF8B4E56CD17CFE1067CBD9_big_uint256, 0x2863D1D7D5EFC2155B2BCCB849B6EA6738E2705A4DC63115045B797E2CFA6511_big_uint256}}, + {{0x262ABA0787800EF4CBD18688A534659AB77861C373006A4E0E42BC06D85F9E79_big_uint256, 0x150A55D182F3B621B10774BD11C8B8198048DEE7C535DDD08992B41928E45DC3_big_uint256}}, + {{0x0C51759D046C2382B5800C5CAA9D9DF74636E1FE0671DF237CD2AC771D56436D_big_uint256, 0x39AE43E4BE7084DB9EFDCA61204B29929A2C242605FEFE95F41F0D5DD286DA38_big_uint256}}, + {{0x18819B168F851F614CF0DD2F4C30030C1267688C1723BF68293324770AB41DE3_big_uint256, 0x1E03B384B597E7A9F17F1B7E36A0B1179291AD17F30C8871379318BADEC65C8C_big_uint256}}, + {{0x12D8B90170966FA0956A13A852F52EA682F50A66738527AD24827CAC02A7EDF0_big_uint256, 0x3566FB28328CAA573331BECEAE6CED6440F32CD9191FA3DFC7A97BBC681DFF30_big_uint256}}, }; for(int i = 0; i < index.sigma_comm.size(); ++i){ @@ -350,29 +350,29 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { } index.complete_add_comm.unshifted = { - {0x0A4A178180BC6805CE9A4EBD32096780850C51CCC28D177FD967545D2B258B7F_cppui_modular256, - 0x0FEE8D807491B9385C499C3FC4048B076FFA334C5D14E19FFCF4A3AA26391F91_cppui_modular256} + {0x0A4A178180BC6805CE9A4EBD32096780850C51CCC28D177FD967545D2B258B7F_big_uint256, + 0x0FEE8D807491B9385C499C3FC4048B076FFA334C5D14E19FFCF4A3AA26391F91_big_uint256} }; index.shift = { - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256, - 0x00B9CDC8FD0BD4B27E2A74AF7AEBD5734D52D75BDF85EBF1CAD03413E914A2E3_cppui_modular256, - 0x0033BFCF8112720332825BD83D44D92CADC0C30466E8102C419C30FA2665695A_cppui_modular256, - 0x0087F4BB29954E16960F2DE3A1FA5AC7B62146DB348C7C9F0E8BF10B2C8E8411_cppui_modular256, - 0x00EC71373B9F6CF15ED1949647365DB60B2E26C3A8ABBA5BB06BF23E9DBE5893_cppui_modular256, - 0x00F39197CC4C55084C68D31F64F1A172406B585CB86445F00C248C721C496D10_cppui_modular256, - 0x00B8DD039799DBEE12D2E6A4299A83E067353C0143C5DFD203190C239159EEA3_cppui_modular256, + 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256, + 0x00B9CDC8FD0BD4B27E2A74AF7AEBD5734D52D75BDF85EBF1CAD03413E914A2E3_big_uint256, + 0x0033BFCF8112720332825BD83D44D92CADC0C30466E8102C419C30FA2665695A_big_uint256, + 0x0087F4BB29954E16960F2DE3A1FA5AC7B62146DB348C7C9F0E8BF10B2C8E8411_big_uint256, + 0x00EC71373B9F6CF15ED1949647365DB60B2E26C3A8ABBA5BB06BF23E9DBE5893_big_uint256, + 0x00F39197CC4C55084C68D31F64F1A172406B585CB86445F00C248C721C496D10_big_uint256, + 0x00B8DD039799DBEE12D2E6A4299A83E067353C0143C5DFD203190C239159EEA3_big_uint256, }; index.zkpm = { - 0x09A34F1BBA67AF009244016BF35AC10B2E69F4D0CCD1D4DC3224A0EB1B74A8B0_cppui_modular256, - 0x0C8A48BFC715E34B967F6C3AC31D85365479365291235AEFB8FD6316EE248595_cppui_modular256, - 0x3F325BBF0B081782F305686C3A74163236DBB334B393D9B7AF4B577B6CE6EDBB_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256, + 0x09A34F1BBA67AF009244016BF35AC10B2E69F4D0CCD1D4DC3224A0EB1B74A8B0_big_uint256, + 0x0C8A48BFC715E34B967F6C3AC31D85365479365291235AEFB8FD6316EE248595_big_uint256, + 0x3F325BBF0B081782F305686C3A74163236DBB334B393D9B7AF4B577B6CE6EDBB_big_uint256, + 0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256, }; - index.w = 0x3DFB4B65F2CDFB71DF8EAFB896CAE55375F24670939CE3BD5EBCB1BB6D3421E9_cppui_modular256; - index.endo = 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_cppui_modular256; + index.w = 0x3DFB4B65F2CDFB71DF8EAFB896CAE55375F24670939CE3BD5EBCB1BB6D3421E9_big_uint256; + index.endo = 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_big_uint256; index.linearization.constant_term = { PolishToken(Variable(Column(gate_type::Poseidon))), // @@ -665,7 +665,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 3), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -673,7 +673,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 6), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -681,7 +681,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -689,7 +689,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 5), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -697,7 +697,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 4), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -758,14 +758,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -773,14 +773,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -788,14 +788,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -803,14 +803,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -818,14 +818,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -833,14 +833,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -848,14 +848,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -863,14 +863,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), + PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), + PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), + PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -886,112 +886,112 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 0), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 2), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 3), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 4), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 5), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 6), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Dup), PolishToken(token_type::Add), PolishToken(token_type::Load, 7), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Add), PolishToken(token_type::Add), PolishToken(token_type::Add), @@ -1002,15 +1002,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 3), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1019,15 +1019,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 4), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1036,15 +1036,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 5), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1053,15 +1053,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 6), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1070,15 +1070,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 7), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -1087,15 +1087,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 8), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -1104,15 +1104,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 9), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -1121,15 +1121,15 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 1), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), + PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_big_uint256), PolishToken(token_type::Add), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::Mul), @@ -1140,7 +1140,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1179,10 +1179,10 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 4), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), PolishToken(token_type::EndoCoefficient), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(token_type::Mul), PolishToken(token_type::Add), @@ -1196,7 +1196,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1256,10 +1256,10 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Add), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 7), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), PolishToken(token_type::EndoCoefficient), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(token_type::Mul), PolishToken(token_type::Add), @@ -1273,7 +1273,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), PolishToken(token_type::Dup), PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1359,7 +1359,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 7), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1367,7 +1367,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1375,7 +1375,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 2), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1383,7 +1383,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 8), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1394,7 +1394,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Sub), PolishToken(token_type::Store), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Sub), PolishToken(token_type::Sub), @@ -1423,7 +1423,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(token_type::Load, 1), PolishToken(token_type::Sub), PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), PolishToken(token_type::Sub), PolishToken(token_type::Load, 0), @@ -1485,14 +1485,14 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { })), std::make_tuple(Column(column_type::Coefficient, 0), std::vector>({ PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), })), std::make_tuple(Column(column_type::Coefficient, 1), std::vector>({ PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1540,7 +1540,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1617,7 +1617,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1694,7 +1694,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1771,7 +1771,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1848,7 +1848,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), + PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_big_uint256), PolishToken(token_type::Sub), PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), PolishToken(token_type::Mul), @@ -1910,7 +1910,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1918,7 +1918,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), @@ -1926,7 +1926,7 @@ BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { PolishToken(Variable(Column(gate_type::Poseidon))), PolishToken(token_type::Alpha), PolishToken(token_type::Pow, 9), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), + PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_big_uint256), PolishToken(token_type::Mul), PolishToken(token_type::Mul), })), diff --git a/crypto3/libs/zk/test/systems/plonk/pickles/to_field.cpp b/crypto3/libs/zk/test/systems/plonk/pickles/to_field.cpp index 7ce23a565a..032064f4f2 100644 --- a/crypto3/libs/zk/test/systems/plonk/pickles/to_field.cpp +++ b/crypto3/libs/zk/test/systems/plonk/pickles/to_field.cpp @@ -52,10 +52,10 @@ BOOST_AUTO_TEST_CASE(pickles_kimchi_to_field_vesta_test) { using curve_type = algebra::curves::vesta; using field_type = curve_type::scalar_field_type; - typename field_type::value_type endo_r = 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular256; - std::vector inputs = {0, 0x00000000000000000000000000000000347936BC4A445B92516BE8A8EAB7D2B9_cppui_modular256}; - std::vector expected_results = {0x1955ABB8AF556360261C069D1C8AEB8444BD73BE7B3163ADBE2E2610A9922C78_cppui_modular256, - 0x01FD131CD87BB2DDCF0D446F7E0EEBCDCE145EE5CA5C7851FC5D22AC186BDDBB_cppui_modular256}; + typename field_type::value_type endo_r = 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_big_uint256; + std::vector inputs = {0, 0x00000000000000000000000000000000347936BC4A445B92516BE8A8EAB7D2B9_big_uint256}; + std::vector expected_results = {0x1955ABB8AF556360261C069D1C8AEB8444BD73BE7B3163ADBE2E2610A9922C78_big_uint256, + 0x01FD131CD87BB2DDCF0D446F7E0EEBCDCE145EE5CA5C7851FC5D22AC186BDDBB_big_uint256}; for (std::size_t i = 0; i < inputs.size(); i++) { typename field_type::value_type res = to_field(endo_r, inputs[i]); BOOST_CHECK(res == expected_results[i]); diff --git a/crypto3/libs/zk/test/systems/plonk/pickles/to_group.cpp b/crypto3/libs/zk/test/systems/plonk/pickles/to_group.cpp index d4a659958d..a54a2e1149 100644 --- a/crypto3/libs/zk/test/systems/plonk/pickles/to_group.cpp +++ b/crypto3/libs/zk/test/systems/plonk/pickles/to_group.cpp @@ -22,10 +22,10 @@ BOOST_AUTO_TEST_CASE(pickles_kimchi_to_field_test_case_1){ zk::snark::group_map map; - field_type::value_type value = field_type::value_type(0x2060BAF54AE1E0CE2BA2AA4B7629A41FE5768E1BAB024882BAC729FF5747F100_cppui_modular256); + field_type::value_type value = field_type::value_type(0x2060BAF54AE1E0CE2BA2AA4B7629A41FE5768E1BAB024882BAC729FF5747F100_big_uint256); auto result = map.to_group(value); - BOOST_CHECK(result.X == field_type::value_type(0x344483C5EC8A0B6619CD78B13B20A32E68064ACC43DA911EF5FDD8DF8EB15CA9_cppui_modular256)); - BOOST_CHECK(result.Y == field_type::value_type(0x184C418DCCDD4751FF8F2FA1ADC1E617F8BAC4FDA7C177B42F3863A957B7EAA8_cppui_modular256)); + BOOST_CHECK(result.X == field_type::value_type(0x344483C5EC8A0B6619CD78B13B20A32E68064ACC43DA911EF5FDD8DF8EB15CA9_big_uint256)); + BOOST_CHECK(result.Y == field_type::value_type(0x184C418DCCDD4751FF8F2FA1ADC1E617F8BAC4FDA7C177B42F3863A957B7EAA8_big_uint256)); } diff --git a/crypto3/libs/zk/test/systems/plonk/placeholder/circuits.hpp b/crypto3/libs/zk/test/systems/plonk/placeholder/circuits.hpp index b851d0aca0..e407189374 100644 --- a/crypto3/libs/zk/test/systems/plonk/placeholder/circuits.hpp +++ b/crypto3/libs/zk/test/systems/plonk/placeholder/circuits.hpp @@ -29,6 +29,7 @@ #ifndef CRYPTO3_ZK_TEST_PLONK_CIRCUITS_HPP #define CRYPTO3_ZK_TEST_PLONK_CIRCUITS_HPP +#include #define _RND_ algebra::random_element(); #include @@ -177,8 +178,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -316,8 +317,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -414,8 +415,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -521,8 +522,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); @@ -618,8 +619,8 @@ namespace nil { selectors_assignment[0][1] = 1u; test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -714,8 +715,8 @@ namespace nil { test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -820,8 +821,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + selector_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -972,8 +973,8 @@ namespace nil { std::vector> public_input_assignment(public_columns); test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -1128,8 +1129,8 @@ namespace nil { } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selector_assignment diff --git a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_hashes.cpp b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_hashes.cpp index 09aa37808b..e23b755229 100644 --- a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_hashes.cpp +++ b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_hashes.cpp @@ -32,18 +32,17 @@ #define BOOST_TEST_MODULE placeholder_hashes_test -#include -#include #include - +#include +#include +#include #include +#include #include - #include -#include #include #include - +#include #include #include "circuits.hpp" @@ -53,32 +52,48 @@ using namespace nil::crypto3; using namespace nil::crypto3::zk; using namespace nil::crypto3::zk::snark; - BOOST_AUTO_TEST_SUITE(placeholder_hashes_test) - using curve_type = algebra::curves::pallas; - using field_type = typename curve_type::base_field_type; - using poseidon_type = hashes::poseidon>; - using keccak_256_type = hashes::keccak_1600<256>; - using keccak_512_type = hashes::keccak_1600<512>; - using sha2_256_type = hashes::sha2<256>; +using pallas_curve_type = algebra::curves::pallas; +using pallas_field_type = typename pallas_curve_type::base_field_type; +using mina_poseidon_type = + hashes::poseidon>; +using alt_bn_curve_type = algebra::curves::alt_bn128<254>; +using alt_bn_field_type = typename alt_bn_curve_type::scalar_field_type; +using original_poseidon_type = + hashes::poseidon>; +using keccak_256_type = hashes::keccak_1600<256>; +using keccak_512_type = hashes::keccak_1600<512>; +using sha2_256_type = hashes::sha2<256>; - using TestRunners = boost::mpl::list< - placeholder_test_runner, - placeholder_test_runner, - placeholder_test_runner, - placeholder_test_runner - >; +using PallasTestRunners = boost::mpl::list< + placeholder_test_runner, + placeholder_test_runner, + placeholder_test_runner, + placeholder_test_runner>; - BOOST_AUTO_TEST_CASE_TEMPLATE(hash_test, TestRunner, TestRunners) { - test_tools::random_test_initializer random_test_initializer; - auto circuit = circuit_test_1( - random_test_initializer.alg_random_engines.template get_alg_engine(), - random_test_initializer.generic_random_engine - ); - TestRunner test_runner(circuit); - BOOST_CHECK(test_runner.run_test()); - } +using AltBnTestRunners = boost::mpl::list< + placeholder_test_runner, + placeholder_test_runner, + placeholder_test_runner, + placeholder_test_runner>; -BOOST_AUTO_TEST_SUITE_END() +BOOST_AUTO_TEST_CASE_TEMPLATE(hash_test_pallas, TestRunner, PallasTestRunners) { + test_tools::random_test_initializer random_test_initializer; + auto circuit = circuit_test_1( + random_test_initializer.alg_random_engines.template get_alg_engine(), + random_test_initializer.generic_random_engine); + TestRunner test_runner(circuit); + BOOST_CHECK(test_runner.run_test()); +} + +BOOST_AUTO_TEST_CASE_TEMPLATE(hash_test_alt_bn, TestRunner, AltBnTestRunners) { + test_tools::random_test_initializer random_test_initializer; + auto circuit = circuit_test_1( + random_test_initializer.alg_random_engines.template get_alg_engine(), + random_test_initializer.generic_random_engine); + TestRunner test_runner(circuit); + BOOST_CHECK(test_runner.run_test()); +} +BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp index 2c5e2fa01f..396b7c5b6d 100644 --- a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp +++ b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp @@ -43,7 +43,6 @@ #include #include -#include #include #include diff --git a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp index ea5133e9c6..247978fbfb 100644 --- a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp +++ b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp @@ -130,12 +130,12 @@ BOOST_AUTO_TEST_SUITE(permutation_argument) typename placeholder_public_preprocessor::preprocessed_data_type lpc_preprocessed_public_data = placeholder_public_preprocessor::process( - constraint_system, assignments.move_public_table(), desc, lpc_scheme + constraint_system, assignments.public_table(), desc, lpc_scheme ); typename placeholder_private_preprocessor::preprocessed_data_type lpc_preprocessed_private_data = placeholder_private_preprocessor::process( - constraint_system, assignments.move_private_table(), desc + constraint_system, assignments.private_table(), desc ); auto polynomial_table = @@ -237,12 +237,12 @@ BOOST_AUTO_TEST_SUITE(permutation_argument) typename placeholder_public_preprocessor::preprocessed_data_type preprocessed_public_data = placeholder_public_preprocessor::process( - constraint_system, assignments.move_public_table(), desc, lpc_scheme + constraint_system, assignments.public_table(), desc, lpc_scheme ); typename placeholder_private_preprocessor::preprocessed_data_type preprocessed_private_data = placeholder_private_preprocessor::process( - constraint_system, assignments.move_private_table(), desc + constraint_system, assignments.private_table(), desc ); auto polynomial_table = diff --git a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp index b6ffe491f7..b35f66fa92 100644 --- a/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp +++ b/crypto3/libs/zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp @@ -94,11 +94,11 @@ struct placeholder_test_runner { typename placeholder_public_preprocessor::preprocessed_data_type lpc_preprocessed_public_data = placeholder_public_preprocessor::process( - constraint_system, assignments.move_public_table(), desc, lpc_scheme, max_quotient_poly_chunks); + constraint_system, assignments.public_table(), desc, lpc_scheme, max_quotient_poly_chunks); typename placeholder_private_preprocessor::preprocessed_data_type lpc_preprocessed_private_data = placeholder_private_preprocessor::process( - constraint_system, assignments.move_private_table(), desc); + constraint_system, assignments.private_table(), desc); auto lpc_proof = placeholder_prover::process( lpc_preprocessed_public_data, std::move(lpc_preprocessed_private_data), desc, constraint_system, diff --git a/crypto3/libs/zk/test/systems/plonk/plonk_constraint.cpp b/crypto3/libs/zk/test/systems/plonk/plonk_constraint.cpp index 32d2f4d44b..cf7857f46e 100644 --- a/crypto3/libs/zk/test/systems/plonk/plonk_constraint.cpp +++ b/crypto3/libs/zk/test/systems/plonk/plonk_constraint.cpp @@ -24,6 +24,7 @@ // SOFTWARE. //---------------------------------------------------------------------------// +#include #define BOOST_TEST_MODULE plonk_constraint_test #include @@ -79,9 +80,15 @@ BOOST_AUTO_TEST_CASE(plonk_constraint_basic_test) { std::cout << witness_columns[1][0].data << std::endl; std::cout << witness_columns[2][0].data << std::endl; - zk::snark::plonk_private_assignment_table private_assignment(witness_columns); + using public_table = zk::snark::plonk_public_assignment_table; + using private_table = zk::snark::plonk_private_assignment_table; - zk::snark::plonk_assignment_table assignment(private_assignment); + auto private_assignment = std::make_shared(witness_columns); + + zk::snark::plonk_assignment_table assignment( + private_assignment, + std::make_shared() + ); BOOST_CHECK((witness_columns[0][0] + witness_columns[1][0] - witness_columns[2][0]) == constraint.evaluate(0, assignment)); diff --git a/crypto3/libs/zk/test/transcript/kimchi_transcript.cpp b/crypto3/libs/zk/test/transcript/kimchi_transcript.cpp index 8295b5444f..83a2abeb1e 100644 --- a/crypto3/libs/zk/test/transcript/kimchi_transcript.cpp +++ b/crypto3/libs/zk/test/transcript/kimchi_transcript.cpp @@ -66,50 +66,50 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) group_type::value_type g[15]; g[0] = group_type::value_type( - 0x1CF10D1482EB88632AEFED15C16082007B38DDC528626195CF6B040E2C7D5914_cppui_modular256, - 0x15A406A92FA16DB6E24D125C8EC5365D76DD8BB188106C0063BA9EC51E0FB8E7_cppui_modular256); + 0x1CF10D1482EB88632AEFED15C16082007B38DDC528626195CF6B040E2C7D5914_big_uint256, + 0x15A406A92FA16DB6E24D125C8EC5365D76DD8BB188106C0063BA9EC51E0FB8E7_big_uint256); g[1] = group_type::value_type( - 0x3B38AC47170B2DB158AE7C02E939B2877139040D240171F6A6BB01183902566E_cppui_modular256, - 0x05AAC7FD92471BBFF23D5E4F9AD0B64783467A4809940FEBB7BD6C91A9E9E1C0_cppui_modular256); + 0x3B38AC47170B2DB158AE7C02E939B2877139040D240171F6A6BB01183902566E_big_uint256, + 0x05AAC7FD92471BBFF23D5E4F9AD0B64783467A4809940FEBB7BD6C91A9E9E1C0_big_uint256); g[2] = group_type::value_type( - 0x281BD2B891CF0795B1439B3AB149ED2A535B8E08C4430112D7D4BF53F3789BEF_cppui_modular256, - 0x10B2FA452CAC5D11CC8040D5DD504222A2621FC378EFD7D08A01BAB3A3DE28DF_cppui_modular256); + 0x281BD2B891CF0795B1439B3AB149ED2A535B8E08C4430112D7D4BF53F3789BEF_big_uint256, + 0x10B2FA452CAC5D11CC8040D5DD504222A2621FC378EFD7D08A01BAB3A3DE28DF_big_uint256); g[3] = group_type::value_type( - 0x0158FEA0E6586A75F36FB621E9C9FC7A38970812F0F1753D3BB716655E3B9D79_cppui_modular256, - 0x2A9688F370DCC43130D38AB7AD2B3FF2A925791F587B55AD138B1F067E874C59_cppui_modular256); + 0x0158FEA0E6586A75F36FB621E9C9FC7A38970812F0F1753D3BB716655E3B9D79_big_uint256, + 0x2A9688F370DCC43130D38AB7AD2B3FF2A925791F587B55AD138B1F067E874C59_big_uint256); g[4] = group_type::value_type( - 0x0CA7898337AB528838EAD23D7CBCD4861F1E5E2E5D3B1BD3B733A832C7931547_cppui_modular256, - 0x351C82EC1D20E977ABFC632BBA2330AF61270A00BC2D32B6F2E1DA93AA0D51F1_cppui_modular256); + 0x0CA7898337AB528838EAD23D7CBCD4861F1E5E2E5D3B1BD3B733A832C7931547_big_uint256, + 0x351C82EC1D20E977ABFC632BBA2330AF61270A00BC2D32B6F2E1DA93AA0D51F1_big_uint256); g[5] = group_type::value_type( - 0x00DCE7DC20642A850002731F9B3820327CF5856B1D8C3B0EE6BD7BC03BC85FFD_cppui_modular256, - 0x3B1BCBA06B0D33F08123EDD6DF725CC1F8CD2213EA867FF4020C2D18619BB2DB_cppui_modular256); + 0x00DCE7DC20642A850002731F9B3820327CF5856B1D8C3B0EE6BD7BC03BC85FFD_big_uint256, + 0x3B1BCBA06B0D33F08123EDD6DF725CC1F8CD2213EA867FF4020C2D18619BB2DB_big_uint256); g[6] = group_type::value_type( - 0x0F7C2FF92D8F0776629F87BBF25702CEAA45B1893617F7C9AC10AACB080B6E10_cppui_modular256, - 0x16E7207D6596C7FAFF46FB335E14DC57E08E150AB7F692607F3B8DCC9E6CDA93_cppui_modular256); + 0x0F7C2FF92D8F0776629F87BBF25702CEAA45B1893617F7C9AC10AACB080B6E10_big_uint256, + 0x16E7207D6596C7FAFF46FB335E14DC57E08E150AB7F692607F3B8DCC9E6CDA93_big_uint256); g[7] = group_type::value_type( - 0x2CD748E8C8806196ABE34DF032864491CADCF205AF70CB9152507BD16B912BEC_cppui_modular256, - 0x2219EC3C1873373A6717E7BFA24827AD89BF949B0F240D7B9D8981C2006E400F_cppui_modular256); + 0x2CD748E8C8806196ABE34DF032864491CADCF205AF70CB9152507BD16B912BEC_big_uint256, + 0x2219EC3C1873373A6717E7BFA24827AD89BF949B0F240D7B9D8981C2006E400F_big_uint256); g[8] = group_type::value_type( - 0x027E878BD478FC5DE36CA783CB60297C5F75CB638C71615A04714C52E9B15E8E_cppui_modular256, - 0x2CCE580022C7D44E72BA8E7E608C3733A3F3EDC0304566097C07D6CCA172A1B4_cppui_modular256); + 0x027E878BD478FC5DE36CA783CB60297C5F75CB638C71615A04714C52E9B15E8E_big_uint256, + 0x2CCE580022C7D44E72BA8E7E608C3733A3F3EDC0304566097C07D6CCA172A1B4_big_uint256); g[9] = group_type::value_type( - 0x0DC7C8FE3A9007F09283D29C5BE99AACEB9DA6996CD691BBAC5D075BDD6DA223_cppui_modular256, - 0x1FA4B95451090B8A36D503BFDBF086D4462745626B4BA4490AF42A7A6B5FD449_cppui_modular256); + 0x0DC7C8FE3A9007F09283D29C5BE99AACEB9DA6996CD691BBAC5D075BDD6DA223_big_uint256, + 0x1FA4B95451090B8A36D503BFDBF086D4462745626B4BA4490AF42A7A6B5FD449_big_uint256); g[10] = group_type::value_type( - 0x20254A64C61A3C1882EC3E9FCA0ABAE814B0EB0477C3396E562C1006054347F3_cppui_modular256, - 0x23CDCBDE9DCBD33AD86BF48181B1616FC76D24A18711A3953D184E772D936418_cppui_modular256); + 0x20254A64C61A3C1882EC3E9FCA0ABAE814B0EB0477C3396E562C1006054347F3_big_uint256, + 0x23CDCBDE9DCBD33AD86BF48181B1616FC76D24A18711A3953D184E772D936418_big_uint256); g[11] = group_type::value_type( - 0x00DB22BCFC9A1D1A10A53716A7E7D4022DBF101B8767B68E78837CB8263BE097_cppui_modular256, - 0x3E283D2F0D90CAC87B3FCD95E7A8933FB2B2B43EF07FA577CA566527481AB6C9_cppui_modular256); + 0x00DB22BCFC9A1D1A10A53716A7E7D4022DBF101B8767B68E78837CB8263BE097_big_uint256, + 0x3E283D2F0D90CAC87B3FCD95E7A8933FB2B2B43EF07FA577CA566527481AB6C9_big_uint256); g[12] = group_type::value_type( - 0x0D24814B6FE1C8C42FC05834B95212E473B76C8B9588D1272BFAE8FA0E2B9384_cppui_modular256, - 0x11C75275709440AC01B74C4E64E2606F7826294F868F6B0265008E758C148369_cppui_modular256); + 0x0D24814B6FE1C8C42FC05834B95212E473B76C8B9588D1272BFAE8FA0E2B9384_big_uint256, + 0x11C75275709440AC01B74C4E64E2606F7826294F868F6B0265008E758C148369_big_uint256); g[13] = group_type::value_type( - 0x007997CB753B919B586243FCAF6E5886676F180C2220BAC055AE9739CA4A1B4B_cppui_modular256, - 0x166859AE2ECE3520D33C2D146F6DBCFC819779C288E9D81C3F7369DF5642EF31_cppui_modular256); + 0x007997CB753B919B586243FCAF6E5886676F180C2220BAC055AE9739CA4A1B4B_big_uint256, + 0x166859AE2ECE3520D33C2D146F6DBCFC819779C288E9D81C3F7369DF5642EF31_big_uint256); g[14] = group_type::value_type( - 0x04E774B3DE1A78D6C9408D7B10D9E4614FC8AE4DFE4BFE6762278EE72BB9E25D_cppui_modular256, - 0x178AC19F836752BAF356D9E9C3C35470F27A52C16B7572EEF2C61A43B4D0499B_cppui_modular256); + 0x04E774B3DE1A78D6C9408D7B10D9E4614FC8AE4DFE4BFE6762278EE72BB9E25D_big_uint256, + 0x178AC19F836752BAF356D9E9C3C35470F27A52C16B7572EEF2C61A43B4D0499B_big_uint256); for (int i = 0; i < 15; ++i) { std::vector input({g[i]}); @@ -117,7 +117,7 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) } auto check1 = spng.challenge(); - scalar_field_type::value_type chal1 = 0x0000000000000000000000000000000006906F18EE1C02C944C3186D54A8D03E_cppui_modular256; + scalar_field_type::value_type chal1 = 0x0000000000000000000000000000000006906F18EE1C02C944C3186D54A8D03E_big_uint256; BOOST_CHECK(check1 == chal1); } @@ -126,50 +126,50 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) group_type::value_type g[15]; g[0] = group_type::value_type( - 0x0A0C2BD5D6D122644F29A3AD675F1EB7BA01AE9D9EBC323086E3BDED095987D4_cppui_modular256, - 0x273211F773739D39B20CCD4D5EB77479115769B4742F2FB03A4F3ED1A1EC22D4_cppui_modular256); + 0x0A0C2BD5D6D122644F29A3AD675F1EB7BA01AE9D9EBC323086E3BDED095987D4_big_uint256, + 0x273211F773739D39B20CCD4D5EB77479115769B4742F2FB03A4F3ED1A1EC22D4_big_uint256); g[1] = group_type::value_type( - 0x220593B5A19D0A67847BBF80DB81F49D6CF8F9591B9E8C9A2F32670DDA1D8AC6_cppui_modular256, - 0x07211D7F83661CB78042848839E2DBD04B101F157A7DA31B30A3DB8886E9B7B0_cppui_modular256); + 0x220593B5A19D0A67847BBF80DB81F49D6CF8F9591B9E8C9A2F32670DDA1D8AC6_big_uint256, + 0x07211D7F83661CB78042848839E2DBD04B101F157A7DA31B30A3DB8886E9B7B0_big_uint256); g[2] = group_type::value_type( - 0x02D77AF331102A224026E24CA18EE6B7B0D5D7709527D066F1FE5FABE4CE85D1_cppui_modular256, - 0x0845660D92C66C0462CF57ADA39E558E0AD9ECC2359F0332901B1D2FE98A10D6_cppui_modular256); + 0x02D77AF331102A224026E24CA18EE6B7B0D5D7709527D066F1FE5FABE4CE85D1_big_uint256, + 0x0845660D92C66C0462CF57ADA39E558E0AD9ECC2359F0332901B1D2FE98A10D6_big_uint256); g[3] = group_type::value_type( - 0x0639954FFC6E0B2CCD1929139BE3105E15252BC2FA0A36024455525E659B7D88_cppui_modular256, - 0x15A3400CC3658E630DDBAA76288D06ADFC22DA21C84575D444D633F8DA6DC932_cppui_modular256); + 0x0639954FFC6E0B2CCD1929139BE3105E15252BC2FA0A36024455525E659B7D88_big_uint256, + 0x15A3400CC3658E630DDBAA76288D06ADFC22DA21C84575D444D633F8DA6DC932_big_uint256); g[4] = group_type::value_type( - 0x2CB8A1CA2F4340039B7912FED931EF963E442CE9920FB0A3126E25BD83E598B6_cppui_modular256, - 0x37651EF464571CEF0E7F6DC731365AFDEF8216C6D253DD2BA93A2AFB676C04E2_cppui_modular256); + 0x2CB8A1CA2F4340039B7912FED931EF963E442CE9920FB0A3126E25BD83E598B6_big_uint256, + 0x37651EF464571CEF0E7F6DC731365AFDEF8216C6D253DD2BA93A2AFB676C04E2_big_uint256); g[5] = group_type::value_type( - 0x3A427D5DBECF18AB05809180B1F80E7509BCD963FBA6217E2E9A3292513F2049_cppui_modular256, - 0x1E66FA970D768A59A53D6349E03A4C8D7A93316D08572A133CDE18C2FE64AA03_cppui_modular256); + 0x3A427D5DBECF18AB05809180B1F80E7509BCD963FBA6217E2E9A3292513F2049_big_uint256, + 0x1E66FA970D768A59A53D6349E03A4C8D7A93316D08572A133CDE18C2FE64AA03_big_uint256); g[6] = group_type::value_type( - 0x31525F1FEC6FB330DAB5CEFEC348E7221108CF82F543DA0A8E512F3A390AE5E1_cppui_modular256, - 0x1CFCABDD222DBFD199A208CFCF97FA22627E03B878AE4FD1284AF1CCDFE48384_cppui_modular256); + 0x31525F1FEC6FB330DAB5CEFEC348E7221108CF82F543DA0A8E512F3A390AE5E1_big_uint256, + 0x1CFCABDD222DBFD199A208CFCF97FA22627E03B878AE4FD1284AF1CCDFE48384_big_uint256); g[7] = group_type::value_type( - 0x20BCF66A9DBB51680B5976759A9B9BABC07153E95978C3571B85DAE260326428_cppui_modular256, - 0x0FC9D105713B9FD6CC8587E84D1521BBF3737834FE5384AD76D98051619F7813_cppui_modular256); + 0x20BCF66A9DBB51680B5976759A9B9BABC07153E95978C3571B85DAE260326428_big_uint256, + 0x0FC9D105713B9FD6CC8587E84D1521BBF3737834FE5384AD76D98051619F7813_big_uint256); g[8] = group_type::value_type( - 0x31975A5C9BD269C5B7B115205B63A9F82C9E5FAFB789FC0E3A1D9F6D1698FCFF_cppui_modular256, - 0x2B3B885F8AB568D02E0DE2BCADDBD2D9B6EDE04AA3DEC5ABB8B53913F6EE0E35_cppui_modular256); + 0x31975A5C9BD269C5B7B115205B63A9F82C9E5FAFB789FC0E3A1D9F6D1698FCFF_big_uint256, + 0x2B3B885F8AB568D02E0DE2BCADDBD2D9B6EDE04AA3DEC5ABB8B53913F6EE0E35_big_uint256); g[9] = group_type::value_type( - 0x380C43392B70A7370D69266BFFC5D21825D80F34EB6DD165BF300618E0871AE7_cppui_modular256, - 0x267301AFABFE44E37DD209B0C38D662582F7CF13EE036BD77576767A70D07B88_cppui_modular256); + 0x380C43392B70A7370D69266BFFC5D21825D80F34EB6DD165BF300618E0871AE7_big_uint256, + 0x267301AFABFE44E37DD209B0C38D662582F7CF13EE036BD77576767A70D07B88_big_uint256); g[10] = group_type::value_type( - 0x1458C0D03E1240A352ACDF0B8858993ACF8F4D4EC4091E695C69A1F5CE30D939_cppui_modular256, - 0x1EDB145A8D6C3EDF28A85B0B7CCD77792C06AD3B787394BD0D98B3B453CE634A_cppui_modular256); + 0x1458C0D03E1240A352ACDF0B8858993ACF8F4D4EC4091E695C69A1F5CE30D939_big_uint256, + 0x1EDB145A8D6C3EDF28A85B0B7CCD77792C06AD3B787394BD0D98B3B453CE634A_big_uint256); g[11] = group_type::value_type( - 0x20E6522DB98F94CD90E75B74AE0F038C245BD8FACDF94652B4220B139F9A8E36_cppui_modular256, - 0x133B8A97B147D68805619B1579DD49A6B898F713DC63EBCDBD311C1B99F4CED9_cppui_modular256); + 0x20E6522DB98F94CD90E75B74AE0F038C245BD8FACDF94652B4220B139F9A8E36_big_uint256, + 0x133B8A97B147D68805619B1579DD49A6B898F713DC63EBCDBD311C1B99F4CED9_big_uint256); g[12] = group_type::value_type( - 0x00203F56944A4BA0454C150B4922711F88B429B8304DE1D7AFA3AF26BBAB84A5_cppui_modular256, - 0x1371005325482F9B36105AD5C548CB5B16B94B55876F22AE1B396744C76AA548_cppui_modular256); + 0x00203F56944A4BA0454C150B4922711F88B429B8304DE1D7AFA3AF26BBAB84A5_big_uint256, + 0x1371005325482F9B36105AD5C548CB5B16B94B55876F22AE1B396744C76AA548_big_uint256); g[13] = group_type::value_type( - 0x27E71C246DEB9222E939D9994A010A063231BA76DAE041FB38C0DEF3E5A8E92D_cppui_modular256, - 0x17A6FF821B3E498999B1500CE2C3CDFB1B44691B990585B0522B6548BDDAAA83_cppui_modular256); + 0x27E71C246DEB9222E939D9994A010A063231BA76DAE041FB38C0DEF3E5A8E92D_big_uint256, + 0x17A6FF821B3E498999B1500CE2C3CDFB1B44691B990585B0522B6548BDDAAA83_big_uint256); g[14] = group_type::value_type( - 0x0E86C27EF127EFDF0374B82A92D675AF7A0A02EC8A8D0EF2F9BA888427E6CFAB_cppui_modular256, - 0x2A14FA11389648694F68426BDA965E8380C1B155B277467B0C96C5EC73CE17EB_cppui_modular256); + 0x0E86C27EF127EFDF0374B82A92D675AF7A0A02EC8A8D0EF2F9BA888427E6CFAB_big_uint256, + 0x2A14FA11389648694F68426BDA965E8380C1B155B277467B0C96C5EC73CE17EB_big_uint256); for (int i = 0; i < 15; ++i) { std::vector input({g[i]}); @@ -177,7 +177,7 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) } typename scalar_field_type::value_type chal1( - 0x000000000000000000000000000000006586A4AF99E47C9EA8C7AD23A9E42247_cppui_modular256); + 0x000000000000000000000000000000006586A4AF99E47C9EA8C7AD23A9E42247_big_uint256); BOOST_CHECK(spng.challenge() == chal1); } @@ -186,74 +186,74 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) group_type::value_type g[23]; g[0] = group_type::value_type( - 0x27CCCDE41398B04DD09FAEEFB7B78767B51BB2AFC6587838D0F5A43C43A4A218_cppui_modular256, - 0x1728B31CFD99AD2D3DA948387D407DC6F61CD630758344996E05C21B89B4FF7E_cppui_modular256); + 0x27CCCDE41398B04DD09FAEEFB7B78767B51BB2AFC6587838D0F5A43C43A4A218_big_uint256, + 0x1728B31CFD99AD2D3DA948387D407DC6F61CD630758344996E05C21B89B4FF7E_big_uint256); g[1] = group_type::value_type( - 0x2AEF45CFCF1C7A3AB0437D11B00089226C1EAD9F65D17B02EBFBEEDD6ED8FFFB_cppui_modular256, - 0x354C1269DA294634A5E6E3C6D85F5068044BE97B9A41E47CFFD096AA3991D61F_cppui_modular256); + 0x2AEF45CFCF1C7A3AB0437D11B00089226C1EAD9F65D17B02EBFBEEDD6ED8FFFB_big_uint256, + 0x354C1269DA294634A5E6E3C6D85F5068044BE97B9A41E47CFFD096AA3991D61F_big_uint256); g[2] = group_type::value_type( - 0x01B21F2FBE8FADFD3CF5ADA9332F17B86DE9AF278982CC4E1E5CEDBC6ADFB5C5_cppui_modular256, - 0x11FFAFCFDE4766A966DCB1083C422E8A863BB1871EA5657E79149504BDF4C3F7_cppui_modular256); + 0x01B21F2FBE8FADFD3CF5ADA9332F17B86DE9AF278982CC4E1E5CEDBC6ADFB5C5_big_uint256, + 0x11FFAFCFDE4766A966DCB1083C422E8A863BB1871EA5657E79149504BDF4C3F7_big_uint256); g[3] = group_type::value_type( - 0x10B268CA02F1CCC0A9179B4DC8678E0E5E63B04D8149E8A85515B81529AD04F5_cppui_modular256, - 0x1DD587777C89876DFAF9135F7F58D4A1B37DE6F6B610043C231E23BEAAA84CF6_cppui_modular256); + 0x10B268CA02F1CCC0A9179B4DC8678E0E5E63B04D8149E8A85515B81529AD04F5_big_uint256, + 0x1DD587777C89876DFAF9135F7F58D4A1B37DE6F6B610043C231E23BEAAA84CF6_big_uint256); g[4] = group_type::value_type( - 0x13C0DC5466D51C6852266A549093DA4F59C1B06B278ABEBB85519F07D75972ED_cppui_modular256, - 0x109EA2EA135BC41544A6892C17E0F4202C6E8EA4E75E0202436104F1D2DD0AEC_cppui_modular256); + 0x13C0DC5466D51C6852266A549093DA4F59C1B06B278ABEBB85519F07D75972ED_big_uint256, + 0x109EA2EA135BC41544A6892C17E0F4202C6E8EA4E75E0202436104F1D2DD0AEC_big_uint256); g[5] = group_type::value_type( - 0x30F72723AC67E979D3956C3CDFE0662D0A515C3EA6D257F24BD292DB5E0450F4_cppui_modular256, - 0x1E021A1B6BF8A365E8251A51B430C39F3F1B9E08E3A13B5DCC641094EEA10A0E_cppui_modular256); + 0x30F72723AC67E979D3956C3CDFE0662D0A515C3EA6D257F24BD292DB5E0450F4_big_uint256, + 0x1E021A1B6BF8A365E8251A51B430C39F3F1B9E08E3A13B5DCC641094EEA10A0E_big_uint256); g[6] = group_type::value_type( - 0x04F8423216ED528B6ACB493F9E122F8E88BB173037489185ADED577FB35DD4C8_cppui_modular256, - 0x0568CBE5D3AF7A1DC593E160088A1438B8570A87E1A40AFF548F19AB88246186_cppui_modular256); + 0x04F8423216ED528B6ACB493F9E122F8E88BB173037489185ADED577FB35DD4C8_big_uint256, + 0x0568CBE5D3AF7A1DC593E160088A1438B8570A87E1A40AFF548F19AB88246186_big_uint256); g[7] = group_type::value_type( - 0x3C276D9F50711A0FADC6C9215B7FE55772D8854ED88055B61D624D50A46BF2D1_cppui_modular256, - 0x064EC8440A5C9EE94D2E495DD697031A0FFAB03AD8AF8653B083B024EC2E0947_cppui_modular256); + 0x3C276D9F50711A0FADC6C9215B7FE55772D8854ED88055B61D624D50A46BF2D1_big_uint256, + 0x064EC8440A5C9EE94D2E495DD697031A0FFAB03AD8AF8653B083B024EC2E0947_big_uint256); g[8] = group_type::value_type( - 0x37F0A0BFF99A231FBEB6FA8BF1BAC5D27D681D96A3BFE439526E8E36DC3F456B_cppui_modular256, - 0x05438AD52E7ED1CADD62053822F42888E4F4027A009541D26BBB8A3277747690_cppui_modular256); + 0x37F0A0BFF99A231FBEB6FA8BF1BAC5D27D681D96A3BFE439526E8E36DC3F456B_big_uint256, + 0x05438AD52E7ED1CADD62053822F42888E4F4027A009541D26BBB8A3277747690_big_uint256); g[9] = group_type::value_type( - 0x21EF274FA84AD809DDE6858504CB06764F23349E9AD698AB06C7C88AB9938F10_cppui_modular256, - 0x22BB862C8B9C96A349540FF9127984EDEB425FA7727A86A33F0521A36F385567_cppui_modular256); + 0x21EF274FA84AD809DDE6858504CB06764F23349E9AD698AB06C7C88AB9938F10_big_uint256, + 0x22BB862C8B9C96A349540FF9127984EDEB425FA7727A86A33F0521A36F385567_big_uint256); g[10] = group_type::value_type( - 0x339487A2AE045A6CE9B13B548CAF8C9580B1216EC279026A9EA12E5685745822_cppui_modular256, - 0x019050F98DE9302849A3C7F024544DD6D73FC5A174D0A1D3D7FED3E8612C0BDF_cppui_modular256); + 0x339487A2AE045A6CE9B13B548CAF8C9580B1216EC279026A9EA12E5685745822_big_uint256, + 0x019050F98DE9302849A3C7F024544DD6D73FC5A174D0A1D3D7FED3E8612C0BDF_big_uint256); g[11] = group_type::value_type( - 0x11FD07718FACABBFA2B0FDB6D559EECE04406643C11AE03228A6A55C0199B78F_cppui_modular256, - 0x1B3F5E6BDB2CFC18947322EB26A6A89E1CE0B3BCB79EE30245FCA702CE174390_cppui_modular256); + 0x11FD07718FACABBFA2B0FDB6D559EECE04406643C11AE03228A6A55C0199B78F_big_uint256, + 0x1B3F5E6BDB2CFC18947322EB26A6A89E1CE0B3BCB79EE30245FCA702CE174390_big_uint256); g[12] = group_type::value_type( - 0x3393E80C17EB7DF85CA4FAD7F6043A084773ACD3B5ED712030E4B2000FF5086F_cppui_modular256, - 0x033B8C65937B8EE3B1DC600E4BA1FD9EBD851D29590C16379BEEFB93A6F6226E_cppui_modular256); + 0x3393E80C17EB7DF85CA4FAD7F6043A084773ACD3B5ED712030E4B2000FF5086F_big_uint256, + 0x033B8C65937B8EE3B1DC600E4BA1FD9EBD851D29590C16379BEEFB93A6F6226E_big_uint256); g[13] = group_type::value_type( - 0x15E069E1CFD96C634513360C4BED63D8D22D32947BC156649D447BFA415D9D25_cppui_modular256, - 0x3F183AD1D896978D1AB0568AF4AA91CF413A2E011352B7692E17E5C0157619EF_cppui_modular256); + 0x15E069E1CFD96C634513360C4BED63D8D22D32947BC156649D447BFA415D9D25_big_uint256, + 0x3F183AD1D896978D1AB0568AF4AA91CF413A2E011352B7692E17E5C0157619EF_big_uint256); g[14] = group_type::value_type( - 0x1D42ED837696F2A777E7C1FF0436D46E96878B624ECDE039732E37AFCD409C88_cppui_modular256, - 0x1DD9078FBA2CE4F2ECE3D8374E805A0494D5F6FF85B7B1A0F255F91C79F08929_cppui_modular256); + 0x1D42ED837696F2A777E7C1FF0436D46E96878B624ECDE039732E37AFCD409C88_big_uint256, + 0x1DD9078FBA2CE4F2ECE3D8374E805A0494D5F6FF85B7B1A0F255F91C79F08929_big_uint256); g[15] = group_type::value_type( - 0x0A4020BF547A53FAF4DA99584BBAC1FD5D878D264A99BDF19710748597362B9B_cppui_modular256, - 0x179AFDC1C16BD21205B6B9E487799A032BE077512F18F1DD3215250F0C67FC64_cppui_modular256); + 0x0A4020BF547A53FAF4DA99584BBAC1FD5D878D264A99BDF19710748597362B9B_big_uint256, + 0x179AFDC1C16BD21205B6B9E487799A032BE077512F18F1DD3215250F0C67FC64_big_uint256); g[16] = group_type::value_type( - 0x363AA1A805E5BAFF2DB4BDD817E60CCC546DE456367677C5ECD48CAC2675E21F_cppui_modular256, - 0x1638CDF842DB7274F494B0DC06D9CD0B2565666F7C9E4330A21412F216227FEC_cppui_modular256); + 0x363AA1A805E5BAFF2DB4BDD817E60CCC546DE456367677C5ECD48CAC2675E21F_big_uint256, + 0x1638CDF842DB7274F494B0DC06D9CD0B2565666F7C9E4330A21412F216227FEC_big_uint256); g[17] = group_type::value_type( - 0x39A5B4737045A5192E159C13092B428E3AED966EE0A4DDA365F54AA14D17674E_cppui_modular256, - 0x052FBAB263CAC3E2B7C701B154F8F621A9BE5390D5795A3D7622C57536A30ACB_cppui_modular256); + 0x39A5B4737045A5192E159C13092B428E3AED966EE0A4DDA365F54AA14D17674E_big_uint256, + 0x052FBAB263CAC3E2B7C701B154F8F621A9BE5390D5795A3D7622C57536A30ACB_big_uint256); g[18] = group_type::value_type( - 0x3A90A56D28DC7E01F9384207FAE64E783C7A628048F155C8D14ECB1CD53C93A8_cppui_modular256, - 0x17A22DB9090348E8C363B687BF96EC25CCA79BA366F28F176097BF5474D8C32C_cppui_modular256); + 0x3A90A56D28DC7E01F9384207FAE64E783C7A628048F155C8D14ECB1CD53C93A8_big_uint256, + 0x17A22DB9090348E8C363B687BF96EC25CCA79BA366F28F176097BF5474D8C32C_big_uint256); g[19] = group_type::value_type( - 0x02790E33CB485684C1D1CB250DBA08DE299C27F4CD340AC03720983FBF9441BE_cppui_modular256, - 0x30022C5A33C30487C1B375625E5317A351C2E5498C27B39FB0DF2DE8E95036FA_cppui_modular256); + 0x02790E33CB485684C1D1CB250DBA08DE299C27F4CD340AC03720983FBF9441BE_big_uint256, + 0x30022C5A33C30487C1B375625E5317A351C2E5498C27B39FB0DF2DE8E95036FA_big_uint256); g[20] = group_type::value_type( - 0x1E98D2E550D673BF3B2CEEC098C5319494441382C9427F71557B82187A1F6E72_cppui_modular256, - 0x0D336D94B3CE0D0C30073BDE4C3044F458A598B6B50A1FD1944D29C9F681EB60_cppui_modular256); + 0x1E98D2E550D673BF3B2CEEC098C5319494441382C9427F71557B82187A1F6E72_big_uint256, + 0x0D336D94B3CE0D0C30073BDE4C3044F458A598B6B50A1FD1944D29C9F681EB60_big_uint256); g[21] = group_type::value_type( - 0x0E826DABA538B6DFDFBC0133093600E5FB812F513D0FCC04106CB4BD3F32FAD3_cppui_modular256, - 0x282038D2B42F1EEF395753E663C6C62523F3C22857CFD6BCFF83B1B0F130B320_cppui_modular256); + 0x0E826DABA538B6DFDFBC0133093600E5FB812F513D0FCC04106CB4BD3F32FAD3_big_uint256, + 0x282038D2B42F1EEF395753E663C6C62523F3C22857CFD6BCFF83B1B0F130B320_big_uint256); g[22] = group_type::value_type( - 0x0557F05F4FE835D81BF63FFA8E35B5C014E2A4828AC3E5AEE216F11F4662D8F3_cppui_modular256, - 0x22083FE3C84501B1C06B8BF9EDC10783523E080B10B41106555D3994B42DE333_cppui_modular256); + 0x0557F05F4FE835D81BF63FFA8E35B5C014E2A4828AC3E5AEE216F11F4662D8F3_big_uint256, + 0x22083FE3C84501B1C06B8BF9EDC10783523E080B10B41106555D3994B42DE333_big_uint256); for (int i = 0; i < 15; ++i) { std::vector input({g[i]}); @@ -261,17 +261,17 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) } typename scalar_field_type::value_type chal1( - 0x000000000000000000000000000000005D6E02ED382BBF4A9FF5C2C13A1F0E3D_cppui_modular256); + 0x000000000000000000000000000000005D6E02ED382BBF4A9FF5C2C13A1F0E3D_big_uint256); BOOST_CHECK(spng.challenge() == chal1); typename scalar_field_type::value_type chal2( - 0x0000000000000000000000000000000058C638E4FE632BB34E9D712D10953688_cppui_modular256); + 0x0000000000000000000000000000000058C638E4FE632BB34E9D712D10953688_big_uint256); BOOST_CHECK(spng.challenge() == chal2); std::vector input({g[15]}); spng.absorb_g(input); typename scalar_field_type::value_type chal3( - 0x0000000000000000000000000000000072D58D72518968134276BCBD15848A54_cppui_modular256); + 0x0000000000000000000000000000000072D58D72518968134276BCBD15848A54_big_uint256); BOOST_CHECK(spng.challenge() == chal3); for (int i = 16; i < 23; ++i) { @@ -279,7 +279,7 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) spng.absorb_g(input); } typename scalar_field_type::value_type chal4( - 0x00000000000000000000000000000000126C2E2D31FBDDB543E4FE174987EDBC_cppui_modular256); + 0x00000000000000000000000000000000126C2E2D31FBDDB543E4FE174987EDBC_big_uint256); BOOST_CHECK(spng.challenge() == chal4); } @@ -287,36 +287,36 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) fq_sponge_type spng; // fq_sponge_type2 spng2; scalar_field_type::value_type g[30] = { - 0x1CF10D1482EB88632AEFED15C16082007B38DDC528626195CF6B040E2C7D5914_cppui_modular256, - 0x15A406A92FA16DB6E24D125C8EC5365D76DD8BB188106C0063BA9EC51E0FB8E7_cppui_modular256, - 0x3B38AC47170B2DB158AE7C02E939B2877139040D240171F6A6BB01183902566E_cppui_modular256, - 0x05AAC7FD92471BBFF23D5E4F9AD0B64783467A4809940FEBB7BD6C91A9E9E1C0_cppui_modular256, - 0x281BD2B891CF0795B1439B3AB149ED2A535B8E08C4430112D7D4BF53F3789BEF_cppui_modular256, - 0x10B2FA452CAC5D11CC8040D5DD504222A2621FC378EFD7D08A01BAB3A3DE28DF_cppui_modular256, - 0x0158FEA0E6586A75F36FB621E9C9FC7A38970812F0F1753D3BB716655E3B9D79_cppui_modular256, - 0x2A9688F370DCC43130D38AB7AD2B3FF2A925791F587B55AD138B1F067E874C59_cppui_modular256, - 0x0CA7898337AB528838EAD23D7CBCD4861F1E5E2E5D3B1BD3B733A832C7931547_cppui_modular256, - 0x351C82EC1D20E977ABFC632BBA2330AF61270A00BC2D32B6F2E1DA93AA0D51F1_cppui_modular256, - 0x00DCE7DC20642A850002731F9B3820327CF5856B1D8C3B0EE6BD7BC03BC85FFD_cppui_modular256, - 0x3B1BCBA06B0D33F08123EDD6DF725CC1F8CD2213EA867FF4020C2D18619BB2DB_cppui_modular256, - 0x0F7C2FF92D8F0776629F87BBF25702CEAA45B1893617F7C9AC10AACB080B6E10_cppui_modular256, - 0x16E7207D6596C7FAFF46FB335E14DC57E08E150AB7F692607F3B8DCC9E6CDA93_cppui_modular256, - 0x2CD748E8C8806196ABE34DF032864491CADCF205AF70CB9152507BD16B912BEC_cppui_modular256, - 0x2219EC3C1873373A6717E7BFA24827AD89BF949B0F240D7B9D8981C2006E400F_cppui_modular256, - 0x027E878BD478FC5DE36CA783CB60297C5F75CB638C71615A04714C52E9B15E8E_cppui_modular256, - 0x2CCE580022C7D44E72BA8E7E608C3733A3F3EDC0304566097C07D6CCA172A1B4_cppui_modular256, - 0x0DC7C8FE3A9007F09283D29C5BE99AACEB9DA6996CD691BBAC5D075BDD6DA223_cppui_modular256, - 0x1FA4B95451090B8A36D503BFDBF086D4462745626B4BA4490AF42A7A6B5FD449_cppui_modular256, - 0x20254A64C61A3C1882EC3E9FCA0ABAE814B0EB0477C3396E562C1006054347F3_cppui_modular256, - 0x23CDCBDE9DCBD33AD86BF48181B1616FC76D24A18711A3953D184E772D936418_cppui_modular256, - 0x00DB22BCFC9A1D1A10A53716A7E7D4022DBF101B8767B68E78837CB8263BE097_cppui_modular256, - 0x3E283D2F0D90CAC87B3FCD95E7A8933FB2B2B43EF07FA577CA566527481AB6C9_cppui_modular256, - 0x0D24814B6FE1C8C42FC05834B95212E473B76C8B9588D1272BFAE8FA0E2B9384_cppui_modular256, - 0x11C75275709440AC01B74C4E64E2606F7826294F868F6B0265008E758C148369_cppui_modular256, - 0x007997CB753B919B586243FCAF6E5886676F180C2220BAC055AE9739CA4A1B4B_cppui_modular256, - 0x166859AE2ECE3520D33C2D146F6DBCFC819779C288E9D81C3F7369DF5642EF31_cppui_modular256, - 0x04E774B3DE1A78D6C9408D7B10D9E4614FC8AE4DFE4BFE6762278EE72BB9E25D_cppui_modular256, - 0x178AC19F836752BAF356D9E9C3C35470F27A52C16B7572EEF2C61A43B4D0499B_cppui_modular256}; + 0x1CF10D1482EB88632AEFED15C16082007B38DDC528626195CF6B040E2C7D5914_big_uint256, + 0x15A406A92FA16DB6E24D125C8EC5365D76DD8BB188106C0063BA9EC51E0FB8E7_big_uint256, + 0x3B38AC47170B2DB158AE7C02E939B2877139040D240171F6A6BB01183902566E_big_uint256, + 0x05AAC7FD92471BBFF23D5E4F9AD0B64783467A4809940FEBB7BD6C91A9E9E1C0_big_uint256, + 0x281BD2B891CF0795B1439B3AB149ED2A535B8E08C4430112D7D4BF53F3789BEF_big_uint256, + 0x10B2FA452CAC5D11CC8040D5DD504222A2621FC378EFD7D08A01BAB3A3DE28DF_big_uint256, + 0x0158FEA0E6586A75F36FB621E9C9FC7A38970812F0F1753D3BB716655E3B9D79_big_uint256, + 0x2A9688F370DCC43130D38AB7AD2B3FF2A925791F587B55AD138B1F067E874C59_big_uint256, + 0x0CA7898337AB528838EAD23D7CBCD4861F1E5E2E5D3B1BD3B733A832C7931547_big_uint256, + 0x351C82EC1D20E977ABFC632BBA2330AF61270A00BC2D32B6F2E1DA93AA0D51F1_big_uint256, + 0x00DCE7DC20642A850002731F9B3820327CF5856B1D8C3B0EE6BD7BC03BC85FFD_big_uint256, + 0x3B1BCBA06B0D33F08123EDD6DF725CC1F8CD2213EA867FF4020C2D18619BB2DB_big_uint256, + 0x0F7C2FF92D8F0776629F87BBF25702CEAA45B1893617F7C9AC10AACB080B6E10_big_uint256, + 0x16E7207D6596C7FAFF46FB335E14DC57E08E150AB7F692607F3B8DCC9E6CDA93_big_uint256, + 0x2CD748E8C8806196ABE34DF032864491CADCF205AF70CB9152507BD16B912BEC_big_uint256, + 0x2219EC3C1873373A6717E7BFA24827AD89BF949B0F240D7B9D8981C2006E400F_big_uint256, + 0x027E878BD478FC5DE36CA783CB60297C5F75CB638C71615A04714C52E9B15E8E_big_uint256, + 0x2CCE580022C7D44E72BA8E7E608C3733A3F3EDC0304566097C07D6CCA172A1B4_big_uint256, + 0x0DC7C8FE3A9007F09283D29C5BE99AACEB9DA6996CD691BBAC5D075BDD6DA223_big_uint256, + 0x1FA4B95451090B8A36D503BFDBF086D4462745626B4BA4490AF42A7A6B5FD449_big_uint256, + 0x20254A64C61A3C1882EC3E9FCA0ABAE814B0EB0477C3396E562C1006054347F3_big_uint256, + 0x23CDCBDE9DCBD33AD86BF48181B1616FC76D24A18711A3953D184E772D936418_big_uint256, + 0x00DB22BCFC9A1D1A10A53716A7E7D4022DBF101B8767B68E78837CB8263BE097_big_uint256, + 0x3E283D2F0D90CAC87B3FCD95E7A8933FB2B2B43EF07FA577CA566527481AB6C9_big_uint256, + 0x0D24814B6FE1C8C42FC05834B95212E473B76C8B9588D1272BFAE8FA0E2B9384_big_uint256, + 0x11C75275709440AC01B74C4E64E2606F7826294F868F6B0265008E758C148369_big_uint256, + 0x007997CB753B919B586243FCAF6E5886676F180C2220BAC055AE9739CA4A1B4B_big_uint256, + 0x166859AE2ECE3520D33C2D146F6DBCFC819779C288E9D81C3F7369DF5642EF31_big_uint256, + 0x04E774B3DE1A78D6C9408D7B10D9E4614FC8AE4DFE4BFE6762278EE72BB9E25D_big_uint256, + 0x178AC19F836752BAF356D9E9C3C35470F27A52C16B7572EEF2C61A43B4D0499B_big_uint256}; for (int i = 0; i < 30; ++i) { std::vector input({g[i]}); @@ -324,7 +324,7 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) } auto check1 = spng.challenge(); - scalar_field_type::value_type chal1 = 0x0000000000000000000000000000000006906F18EE1C02C944C3186D54A8D03E_cppui_modular256; + scalar_field_type::value_type chal1 = 0x0000000000000000000000000000000006906F18EE1C02C944C3186D54A8D03E_big_uint256; BOOST_CHECK(check1 == chal1); } @@ -338,13 +338,13 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) using fq_sponge_type = zk::transcript::DefaultFqSponge; std::vector input_values = { - 0x3AA52C0B2BC507CEC6CEEDBFD2C02B9C74CFA1043847011BA789D6F871201A52_cppui_modular256}; + 0x3AA52C0B2BC507CEC6CEEDBFD2C02B9C74CFA1043847011BA789D6F871201A52_big_uint256}; fq_sponge_type spng; spng.absorb_fr(input_values); base_field_type::value_type real_value = spng.challenge_fq(); algebra::fields::detail::element_fp> real_inputs( - 0x1D52960595E283E7636776DFE96015CE3A67D0821C23808DD3C4EB7C38900D29_cppui_modular256); + 0x1D52960595E283E7636776DFE96015CE3A67D0821C23808DD3C4EB7C38900D29_big_uint256); fq_sponge_type spng_real; spng_real.sponge.absorb(real_inputs); base_field_type::value_type expected_value = spng_real.challenge_fq(); @@ -354,132 +354,132 @@ BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) BOOST_AUTO_TEST_CASE(zk_sponge_test_real_case) { fq_sponge_type spng; - spng.absorb_fr(value_type(0x1B76B0452DBEE0301162D6D04350DDC0361222FEF7467C285DB383D51E043D83_cppui_modular256)); + spng.absorb_fr(value_type(0x1B76B0452DBEE0301162D6D04350DDC0361222FEF7467C285DB383D51E043D83_big_uint256)); BOOST_CHECK( spng.challenge_fq() == base_field_type::value_type( - 0x23A5199486C064AC4CB9D8BBD59B20EB2A2B1A3CA77DFA6E9DAB7C387D270E23_cppui_modular256)); + 0x23A5199486C064AC4CB9D8BBD59B20EB2A2B1A3CA77DFA6E9DAB7C387D270E23_big_uint256)); spng.absorb_g(group_type::value_type( - 0x1757CFBC6F79F5DA18CAD5BFE889D8BB11A04BEFD2F5F4ECA71CDF1541FD6A10_cppui_modular256, - 0x3440D97DA37051ACEA71310B6A9519E8989E86DE57D324745616A3BA065F2272_cppui_modular256)); + 0x1757CFBC6F79F5DA18CAD5BFE889D8BB11A04BEFD2F5F4ECA71CDF1541FD6A10_big_uint256, + 0x3440D97DA37051ACEA71310B6A9519E8989E86DE57D324745616A3BA065F2272_big_uint256)); spng.absorb_g(group_type::value_type( - 0x2D47BB4464D0A3788F10C5D70FC35BF750246155649C6B6690F657D372CCE6FF_cppui_modular256, - 0x1A86D626C558F0BC02FA5F89A591DD8392DA153EB457611BA1B3A40AE3E68BD8_cppui_modular256)); + 0x2D47BB4464D0A3788F10C5D70FC35BF750246155649C6B6690F657D372CCE6FF_big_uint256, + 0x1A86D626C558F0BC02FA5F89A591DD8392DA153EB457611BA1B3A40AE3E68BD8_big_uint256)); BOOST_CHECK(spng.challenge() == - value_type(0x000000000000000000000000000000005A694EDCBC5D63D83F6E14016563BD69_cppui_modular256)); + value_type(0x000000000000000000000000000000005A694EDCBC5D63D83F6E14016563BD69_big_uint256)); spng.absorb_g(group_type::value_type( - 0x3FCEA348F31BE8357433DBC714AAB303EE1477D6BCFFEC816D45199D004EA0EB_cppui_modular256, - 0x37851472B67A5A35A8F54A001659CB995C7C501CEFF4BE5448D7250508A14FBC_cppui_modular256)); + 0x3FCEA348F31BE8357433DBC714AAB303EE1477D6BCFFEC816D45199D004EA0EB_big_uint256, + 0x37851472B67A5A35A8F54A001659CB995C7C501CEFF4BE5448D7250508A14FBC_big_uint256)); spng.absorb_g(group_type::value_type( - 0x32ACB0BD9286BDE74B949BEFA7224706890479EF2B3AE5BD11B977910D1B7478_cppui_modular256, - 0x2FB122CE2BFC57B5FF1D2CDB673D3328B6770C065E8253E90980A283AF8EBB15_cppui_modular256)); + 0x32ACB0BD9286BDE74B949BEFA7224706890479EF2B3AE5BD11B977910D1B7478_big_uint256, + 0x2FB122CE2BFC57B5FF1D2CDB673D3328B6770C065E8253E90980A283AF8EBB15_big_uint256)); BOOST_CHECK(spng.challenge() == - value_type(0x0000000000000000000000000000000063597BF8593B53D1BEA983CAE5AA0140_cppui_modular256)); + value_type(0x0000000000000000000000000000000063597BF8593B53D1BEA983CAE5AA0140_big_uint256)); spng.absorb_g(group_type::value_type( - 0x1012AEEE4AB904D4A3B47AACDD04BD8D119B3A8015F76DF7F24AD13B7C06BB90_cppui_modular256, - 0x03428FD045BAA622B9F7EEB54E8321D96EE1CC04CEFB26F1AEB3D6D40A4DED20_cppui_modular256)); + 0x1012AEEE4AB904D4A3B47AACDD04BD8D119B3A8015F76DF7F24AD13B7C06BB90_big_uint256, + 0x03428FD045BAA622B9F7EEB54E8321D96EE1CC04CEFB26F1AEB3D6D40A4DED20_big_uint256)); spng.absorb_g(group_type::value_type( - 0x184F8EA7DFF1970F52E5A75BC74D8F0FAF76BEB2C56A42D44CB96CCCA895870A_cppui_modular256, - 0x110904EE3F6325E6D3D591FC6D1EAE61D43ACDB54357A7F76AD4FD6DFA59FCB8_cppui_modular256)); + 0x184F8EA7DFF1970F52E5A75BC74D8F0FAF76BEB2C56A42D44CB96CCCA895870A_big_uint256, + 0x110904EE3F6325E6D3D591FC6D1EAE61D43ACDB54357A7F76AD4FD6DFA59FCB8_big_uint256)); BOOST_CHECK(spng.challenge() == - value_type(0x0000000000000000000000000000000027ABB6B27E12348F52A181F17FE29F41_cppui_modular256)); + value_type(0x0000000000000000000000000000000027ABB6B27E12348F52A181F17FE29F41_big_uint256)); spng.absorb_g(group_type::value_type( - 0x22F5F9CD40DE3BA2268208BAC69D839A0EFF28C445FFC36C21EA64FCC62A7FC5_cppui_modular256, - 0x35FF2C0CAB2901382134A1862322C212A143237419EE758AE4CB6B02FF1BA141_cppui_modular256)); + 0x22F5F9CD40DE3BA2268208BAC69D839A0EFF28C445FFC36C21EA64FCC62A7FC5_big_uint256, + 0x35FF2C0CAB2901382134A1862322C212A143237419EE758AE4CB6B02FF1BA141_big_uint256)); spng.absorb_g(group_type::value_type( - 0x1E0518490D0DD242420C8786B744E444FF09E2ECB44217B3FC2323BF739BE8A0_cppui_modular256, - 0x00A9F106114217ECA4313604AA123351DEC9EE0B6C42624270CA9390D34DD0F1_cppui_modular256)); + 0x1E0518490D0DD242420C8786B744E444FF09E2ECB44217B3FC2323BF739BE8A0_big_uint256, + 0x00A9F106114217ECA4313604AA123351DEC9EE0B6C42624270CA9390D34DD0F1_big_uint256)); BOOST_CHECK(spng.challenge() == - value_type(0x000000000000000000000000000000000B79378485D93E3A44F4E3EAEF25D3DA_cppui_modular256)); + value_type(0x000000000000000000000000000000000B79378485D93E3A44F4E3EAEF25D3DA_big_uint256)); spng.absorb_g(group_type::value_type( - 0x14309CF280C4C82C856B17A808A2E5A583DA7EEB1C385F3B4EB12039EA76AE83_cppui_modular256, - 0x241285C939BD25A6CA34D6F347596BD110FE55AF173A0EBBFB659630A4C96B99_cppui_modular256)); + 0x14309CF280C4C82C856B17A808A2E5A583DA7EEB1C385F3B4EB12039EA76AE83_big_uint256, + 0x241285C939BD25A6CA34D6F347596BD110FE55AF173A0EBBFB659630A4C96B99_big_uint256)); spng.absorb_g(group_type::value_type( - 0x09DA297567A8850406E640FF07BC76CCB9A4FA5C11F328EF03708414CBC1F4B9_cppui_modular256, - 0x3BE674505BBBD0F9ED806218258E029084BAECD51ABE6F9264E80C1899307ED6_cppui_modular256)); + 0x09DA297567A8850406E640FF07BC76CCB9A4FA5C11F328EF03708414CBC1F4B9_big_uint256, + 0x3BE674505BBBD0F9ED806218258E029084BAECD51ABE6F9264E80C1899307ED6_big_uint256)); BOOST_CHECK(spng.challenge() == - value_type(0x000000000000000000000000000000003CBCF6C44411CE451A33BAB179026502_cppui_modular256)); + value_type(0x000000000000000000000000000000003CBCF6C44411CE451A33BAB179026502_big_uint256)); spng.absorb_g(group_type::value_type( - 0x1DA94235A1E998434A93578409C4EB18BD82A01EC5A25E5D7C7C7C5E001F18FB_cppui_modular256, - 0x04A566923D712C1CEBF2DBE553DD185F8FDACF604E50948925264D3A49C037EA_cppui_modular256)); + 0x1DA94235A1E998434A93578409C4EB18BD82A01EC5A25E5D7C7C7C5E001F18FB_big_uint256, + 0x04A566923D712C1CEBF2DBE553DD185F8FDACF604E50948925264D3A49C037EA_big_uint256)); BOOST_CHECK(spng.challenge() == - value_type(0x0000000000000000000000000000000072FF5A26FAF972660330A5D0CC5C4700_cppui_modular256)); + value_type(0x0000000000000000000000000000000072FF5A26FAF972660330A5D0CC5C4700_big_uint256)); } BOOST_AUTO_TEST_CASE(zk_fr_sponge_test_real_case) { // using value_type = base_field_type::value_type; fr_sponge_type spng; - spng.absorb(value_type(0x0ACB65E0765F80498D643313EAAEBFBC7899766A4A337EAF61261344E8C2C551_cppui_modular256)); - - spng.absorb(value_type(0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256)); - spng.absorb(value_type(0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256)); - spng.absorb(value_type(0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256)); - spng.absorb(value_type(0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256)); - spng.absorb(value_type(0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256)); - spng.absorb(value_type(0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256)); - spng.absorb(value_type(0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256)); - spng.absorb(value_type(0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256)); - spng.absorb(value_type(0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256)); - spng.absorb(value_type(0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256)); - spng.absorb(value_type(0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256)); - spng.absorb(value_type(0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256)); - spng.absorb(value_type(0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256)); - spng.absorb(value_type(0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256)); - spng.absorb(value_type(0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256)); - spng.absorb(value_type(0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256)); - spng.absorb(value_type(0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256)); - spng.absorb(value_type(0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256)); - spng.absorb(value_type(0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256)); - spng.absorb(value_type(0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256)); - spng.absorb(value_type(0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256)); - spng.absorb(value_type(0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256)); + spng.absorb(value_type(0x0ACB65E0765F80498D643313EAAEBFBC7899766A4A337EAF61261344E8C2C551_big_uint256)); + + spng.absorb(value_type(0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_big_uint256)); + spng.absorb(value_type(0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_big_uint256)); + spng.absorb(value_type(0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_big_uint256)); + spng.absorb(value_type(0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_big_uint256)); + spng.absorb(value_type(0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_big_uint256)); + spng.absorb(value_type(0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_big_uint256)); + spng.absorb(value_type(0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_big_uint256)); + spng.absorb(value_type(0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_big_uint256)); + spng.absorb(value_type(0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_big_uint256)); + spng.absorb(value_type(0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_big_uint256)); + spng.absorb(value_type(0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_big_uint256)); + spng.absorb(value_type(0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_big_uint256)); + spng.absorb(value_type(0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_big_uint256)); + spng.absorb(value_type(0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_big_uint256)); + spng.absorb(value_type(0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_big_uint256)); + spng.absorb(value_type(0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_big_uint256)); + spng.absorb(value_type(0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_big_uint256)); + spng.absorb(value_type(0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_big_uint256)); + spng.absorb(value_type(0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_big_uint256)); + spng.absorb(value_type(0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_big_uint256)); + spng.absorb(value_type(0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_big_uint256)); + spng.absorb(value_type(0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_big_uint256)); // BOOST_CHECK(spng.challenge().value() == - // value_type(0x0000000000000000000000000000000000F9B1BCD2BB1DE25807BE9313410D43_cppui_modular256)); - - spng.absorb(value_type(0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256)); - spng.absorb(value_type(0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256)); - spng.absorb(value_type(0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256)); - spng.absorb(value_type(0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256)); - spng.absorb(value_type(0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256)); - spng.absorb(value_type(0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256)); - spng.absorb(value_type(0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256)); - spng.absorb(value_type(0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256)); - spng.absorb(value_type(0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256)); - spng.absorb(value_type(0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256)); - spng.absorb(value_type(0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256)); - spng.absorb(value_type(0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256)); - spng.absorb(value_type(0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256)); - spng.absorb(value_type(0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256)); - spng.absorb(value_type(0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256)); - spng.absorb(value_type(0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256)); - spng.absorb(value_type(0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256)); - spng.absorb(value_type(0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256)); - spng.absorb(value_type(0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256)); - spng.absorb(value_type(0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256)); - spng.absorb(value_type(0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256)); - spng.absorb(value_type(0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256)); + // value_type(0x0000000000000000000000000000000000F9B1BCD2BB1DE25807BE9313410D43_big_uint256)); + + spng.absorb(value_type(0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_big_uint256)); + spng.absorb(value_type(0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_big_uint256)); + spng.absorb(value_type(0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_big_uint256)); + spng.absorb(value_type(0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_big_uint256)); + spng.absorb(value_type(0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_big_uint256)); + spng.absorb(value_type(0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_big_uint256)); + spng.absorb(value_type(0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_big_uint256)); + spng.absorb(value_type(0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_big_uint256)); + spng.absorb(value_type(0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_big_uint256)); + spng.absorb(value_type(0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_big_uint256)); + spng.absorb(value_type(0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_big_uint256)); + spng.absorb(value_type(0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_big_uint256)); + spng.absorb(value_type(0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_big_uint256)); + spng.absorb(value_type(0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_big_uint256)); + spng.absorb(value_type(0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_big_uint256)); + spng.absorb(value_type(0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_big_uint256)); + spng.absorb(value_type(0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_big_uint256)); + spng.absorb(value_type(0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_big_uint256)); + spng.absorb(value_type(0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_big_uint256)); + spng.absorb(value_type(0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_big_uint256)); + spng.absorb(value_type(0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_big_uint256)); + spng.absorb(value_type(0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_big_uint256)); // BOOST_CHECK(spng.challenge().value() == - // value_type(0x00000000000000000000000000000000578543A9BA83C66925F5301C187FBF94_cppui_modular256)); + // value_type(0x00000000000000000000000000000000578543A9BA83C66925F5301C187FBF94_big_uint256)); - spng.absorb(value_type(0x16FE1AE7F56997161DB512632BE7BFA337F47F422E0D01AF06DE298DD8C429D5_cppui_modular256)); + spng.absorb(value_type(0x16FE1AE7F56997161DB512632BE7BFA337F47F422E0D01AF06DE298DD8C429D5_big_uint256)); auto squeezed_val1 = spng.challenge().value(); // std::cout << std::hex << squeezed_val1.data << '\n'; BOOST_CHECK(squeezed_val1 == - value_type(0x0000000000000000000000000000000070BB1327D20E6ADBCA0F584AEC2D4D0C_cppui_modular256)); + value_type(0x0000000000000000000000000000000070BB1327D20E6ADBCA0F584AEC2D4D0C_big_uint256)); squeezed_val1 = spng.challenge().value(); // std::cout << std::hex << squeezed_val1.data << '\n'; BOOST_CHECK(squeezed_val1 == - value_type(0x0000000000000000000000000000000062BE7EB9CB6245B29DF02D68B4B51EC5_cppui_modular256)); + value_type(0x0000000000000000000000000000000062BE7EB9CB6245B29DF02D68B4B51EC5_big_uint256)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/libs/zk/test/transcript/transcript.cpp b/crypto3/libs/zk/test/transcript/transcript.cpp index 5f5535199d..1195508d02 100644 --- a/crypto3/libs/zk/test/transcript/transcript.cpp +++ b/crypto3/libs/zk/test/transcript/transcript.cpp @@ -63,12 +63,12 @@ BOOST_AUTO_TEST_CASE(zk_transcript_manual_test) { auto ch2 = tr.challenge(); auto ch_n = tr.challenges(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0xe858ba005424eabd6d97de7e930779def59a85c1a9ff7e8a5d001cdb07f6e4_cppui_modular254).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0xf61f38f58a55b3bbee0480fc5ec3cf8df81603579f4f7134f764bfd3ca5938b_cppui_modular254).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0xe858ba005424eabd6d97de7e930779def59a85c1a9ff7e8a5d001cdb07f6e4_big_uint254).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0xf61f38f58a55b3bbee0480fc5ec3cf8df81603579f4f7134f764bfd3ca5938b_big_uint254).data); - BOOST_CHECK_EQUAL(ch_n[0].data, field_type::value_type(0x4f6b97a9bc99d6996fab5e03d1cd0b418a9b3c97ed64cca070e15777e7cc99a_cppui_modular254).data); - BOOST_CHECK_EQUAL(ch_n[1].data, field_type::value_type(0x2414ddf7ecff246500beb2c01b0c5912a400bc3cdca6d7f24bd2bd4987b21e04_cppui_modular254).data); - BOOST_CHECK_EQUAL(ch_n[2].data, field_type::value_type(0x10bfe2f4a414eec551dda5fd9899e9b46e327648b4fa564ed0517b6a99396aec_cppui_modular254).data); + BOOST_CHECK_EQUAL(ch_n[0].data, field_type::value_type(0x4f6b97a9bc99d6996fab5e03d1cd0b418a9b3c97ed64cca070e15777e7cc99a_big_uint254).data); + BOOST_CHECK_EQUAL(ch_n[1].data, field_type::value_type(0x2414ddf7ecff246500beb2c01b0c5912a400bc3cdca6d7f24bd2bd4987b21e04_big_uint254).data); + BOOST_CHECK_EQUAL(ch_n[2].data, field_type::value_type(0x10bfe2f4a414eec551dda5fd9899e9b46e327648b4fa564ed0517b6a99396aec_big_uint254).data); } BOOST_AUTO_TEST_SUITE_END() @@ -90,8 +90,8 @@ BOOST_AUTO_TEST_CASE(zk_poseidon_transcript_init_test) { auto ch2 = tr.challenge(); int ch_int = tr.int_challenge(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x27B1BE8A820DE1A5E91A441F59F29D42D9DB9FC7778A0852819F331D5CD60B43_cppui_modular255).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x12096E03B2ADEC9B317042D36F048C06AF123EED4A3FC040579E66DCE46C0AEE_cppui_modular255).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x27B1BE8A820DE1A5E91A441F59F29D42D9DB9FC7778A0852819F331D5CD60B43_big_uint255).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x12096E03B2ADEC9B317042D36F048C06AF123EED4A3FC040579E66DCE46C0AEE_big_uint255).data); BOOST_CHECK_EQUAL(ch_int, 0x6296); init_blob = {}; @@ -100,8 +100,8 @@ BOOST_AUTO_TEST_CASE(zk_poseidon_transcript_init_test) { ch2 = tr.challenge(); ch_int = tr.int_challenge(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947FA1063436F4E5434029CCAEC64075C9FC80034C0923054A2B1D30BD2_cppui_modular255).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1B961886411EE8722DD6B576CBA5876EB30999B5237FE0E14255E6D006CFF63C_cppui_modular255).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947FA1063436F4E5434029CCAEC64075C9FC80034C0923054A2B1D30BD2_big_uint255).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1B961886411EE8722DD6B576CBA5876EB30999B5237FE0E14255E6D006CFF63C_big_uint255).data); BOOST_CHECK_EQUAL(ch_int, 0xC92); } @@ -115,8 +115,8 @@ BOOST_AUTO_TEST_CASE(zk_poseidon_transcript_no_init_test) { auto ch2 = tr.challenge(); int ch_int = tr.int_challenge(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947fa1063436f4e5434029ccaec64075c9fc80034c0923054a2b1d30bd2_cppui_modular255).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1b961886411ee8722dd6b576cba5876eb30999b5237fe0e14255e6d006cff63c_cppui_modular255).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947fa1063436f4e5434029ccaec64075c9fc80034c0923054a2b1d30bd2_big_uint255).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1b961886411ee8722dd6b576cba5876eb30999b5237fe0e14255e6d006cff63c_big_uint255).data); BOOST_CHECK_EQUAL(ch_int, 0xc92); } @@ -141,20 +141,20 @@ void test_transcript(typename curve_type::base_field_type::value_type const& exp BOOST_AUTO_TEST_CASE(mnt4_keccak) { test_transcript> - (0xb985b0419fda7e26db3867b38cbb55465717e8d3ff208768cac6949bd68c2b7_cppui_modular298); + (0xb985b0419fda7e26db3867b38cbb55465717e8d3ff208768cac6949bd68c2b7_big_uint298); } BOOST_AUTO_TEST_CASE(mnt6_keccak) { test_transcript> - (0x56d23a0a6f75fe3a7670906b341b29cdde80696fc418771e3c84910217546ef1_cppui_modular298); + (0x56d23a0a6f75fe3a7670906b341b29cdde80696fc418771e3c84910217546ef1_big_uint298); } BOOST_AUTO_TEST_CASE(bls12_keccak) { test_transcript> - (0x7cc24317960f68f067e0a1cfe610fe3db024d52b064ff2115ea0f594602f0784_cppui_modular381); + (0x7cc24317960f68f067e0a1cfe610fe3db024d52b064ff2115ea0f594602f0784_big_uint381); /* TODO: no marshalling for bls12-377 curve test_transcript> - (0x0_cppui_modular377); + (0x0_big_uint377); */ } @@ -164,7 +164,7 @@ BOOST_AUTO_TEST_CASE(pallas_poseidon) { using hash_type = hashes::poseidon>; test_transcript - (0xb4a4cca5ad2d998a81ce64953c1fe0b16e27e4d298808165644421eebd2bc3a_cppui_modular256); + (0xb4a4cca5ad2d998a81ce64953c1fe0b16e27e4d298808165644421eebd2bc3a_big_uint256); } BOOST_AUTO_TEST_SUITE_END() diff --git a/crypto3/readme.md b/crypto3/readme.md index 9fc940a37e..e4b077834f 100644 --- a/crypto3/readme.md +++ b/crypto3/readme.md @@ -35,25 +35,14 @@ root ├── docs: documentation , tutorials and guides ├── libs: all directories added as submodules which are independent projects. │ ├── algebra: algebraic operations and structures being used for elliptic-curve cryptography -│ ├── block: block ciphers +│ ├── benchmark_tools: utilities to run benchmarks │ ├── blueprint: components and circuits for zk schemes -│ ├── codec: encoding/decoding algorithms │ ├── containers: containers and generic commitment schemes for accumulating data, includes Merkle Tree │ ├── hash: hashing algorithms -│ ├── kdf: key derivation functions -│ ├── mac: message authentication codes │ ├── marshalling: marshalling libraries for types in crypto3 library │ ├── math: set of Fast Fourier Transforms evaluation algorithms and Polynomial Arithmetics -│ ├── modes: cipher modes │ ├── multiprecision: integer, rational, floating-point, complex and interval number types. -│ ├── passhash: password hashing operations -│ ├── pbkdf: password based key derivation functions -│ ├── pkmodes: threshold, aggregation modes for public key schemes -│ ├── pkpad: padding module for public key schemes -│ ├── pubkey: pubkey signing APIs │ ├── random: randomisation primitives -│ ├── stream: stream ciphers -│ ├── vdf: verifiable delay functions │ ├── zk: zk cryptography schemes ``` @@ -121,24 +110,6 @@ The generic module can be added to your c++ project as follows ``` git submodule add https://github.com/NilFoundation/crypto3.git ``` -### Selective -Developer can select to include a one or more modules to reduce the sources of resulting project and dependencies tree height. This however -does require the developer to manually resolve all required dependencies and stay upto date regarding -compatibilities across modules. - -Example of such embedding is =nil; Foundation's [Actor Library](https://github.com/nilfoundation/actor). It uses only -[hashes](https://github.com/nilfoundation/hash) so the dependency graph requires -for the project to submodule [block ciphers library](https://github.com/nilfoundation/block) and optional -[codec library](https://github.com/nilfoundation/codec) for testing purposes. So, -the root Actor repository has only related libraries submoduled: -[block](https://github.com/nilfoundation/mtl/libs/block), -[codec](https://github.com/nilfoundation/mtl/libs/codec) and -[hash](https://github.com/nilfoundation/mtl/hash). - -Selective modules can be added to your project as follows: - -``` git submodule add https://github.com/NilFoundation/crypto3-.git ``` - ## Contributing diff --git a/debug-tools/bin/circgen/CMakeLists.txt b/debug-tools/bin/circgen/CMakeLists.txt index 7a8b8f6794..003f359d2a 100644 --- a/debug-tools/bin/circgen/CMakeLists.txt +++ b/debug-tools/bin/circgen/CMakeLists.txt @@ -16,7 +16,7 @@ add_executable(circgen set_target_properties(circgen PROPERTIES LINKER_LANGUAGE CXX EXPORT_NAME circgen - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) diff --git a/debug-tools/bin/excalibur/src/CMakeLists.txt b/debug-tools/bin/excalibur/src/CMakeLists.txt index a52dca836b..3b54265c50 100644 --- a/debug-tools/bin/excalibur/src/CMakeLists.txt +++ b/debug-tools/bin/excalibur/src/CMakeLists.txt @@ -59,7 +59,7 @@ add_executable(${C3_TARGET} set_target_properties(${C3_TARGET} PROPERTIES LINKER_LANGUAGE CXX EXPORT_NAME ${CMAKE_PROJECT_NAME} - CXX_STANDARD 17 + CXX_STANDARD 20 CXX_STANDARD_REQUIRED TRUE) target_link_directories( diff --git a/evm-assigner.nix b/evm-assigner.nix deleted file mode 100644 index e6f2c3f993..0000000000 --- a/evm-assigner.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ lib, - stdenv, - ninja, - pkg-config, - cmake, - boost183, - # We'll use boost183 by default, but you can override it - boost_lib ? boost183, - gdb, - lldb, - cmake_modules, - ethash, - intx, - sszpp, - valijson, - gtest, - enableDebugging, - enableDebug ? false, - runTests ? false, - }: -let - inherit (lib) optional; -in stdenv.mkDerivation rec { - name = "evm-assigner"; - - src = lib.sourceByRegex ./. ["^evm-assigner(/.*)?$" "^crypto3(/.*)?$" "^parallel-crypto3(/.*)?$" "CMakeLists.txt"]; - hardeningDisable = [ "fortify" ]; - - nativeBuildInputs = [ cmake ninja pkg-config ] ++ - (lib.optional (!stdenv.isDarwin) gdb) ++ - (lib.optional (stdenv.isDarwin) lldb); - - # enableDebugging will keep debug symbols in boost - propagatedBuildInputs = [ (if enableDebug then (enableDebugging boost_lib) else boost_lib) ]; - - buildInputs = [sszpp valijson cmake_modules ethash intx gtest]; - - cmakeFlags = - [ - (if runTests then "-DBUILD_ASSIGNER_TESTS=TRUE" else "") - (if enableDebug then "-DCMAKE_BUILD_TYPE=Debug" else "-DCMAKE_BUILD_TYPE=Release") - "-DZKEVM_FRAMEWORK_ENABLE=TRUE" - "-G Ninja" - ]; - - doCheck = runTests; - - shellHook = '' - PS1="\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ " - echo "Welcome to evm-assigner development environment!" - ''; -} diff --git a/evm-assigner/CMakeLists.txt b/evm-assigner/CMakeLists.txt deleted file mode 100644 index d4546f24cd..0000000000 --- a/evm-assigner/CMakeLists.txt +++ /dev/null @@ -1,112 +0,0 @@ -# evmone: Ethereum Virtual Machine -# Copyright 2019 The evmone Authors. -# SPDX-License-Identifier: Apache-2.0 - -cmake_minimum_required(VERSION 3.22 FATAL_ERROR) - -option(BUILD_SHARED_LIBS "Build evmone as a shared library" ON) -option(EVMONE_TESTING "Build tests and test tools" OFF) -option(EVMONE_FUZZING "Instrument libraries and build fuzzing tools" OFF) - -include(cmake/cable/bootstrap.cmake) -include(CableBuildType) -include(CableCompilerSettings) -include(CablePackage) -include(CableToolchains) -include(CMakePackageConfigHelpers) - -cable_configure_toolchain(DEFAULT cxx17-pic) -cable_set_build_type(DEFAULT Release CONFIGURATION_TYPES Release Debug) - -project(evm-assigner LANGUAGES CXX C) - -set(PROJECT_VERSION 0.11.0-dev) - -string(REGEX MATCH "([0-9]+)\\.([0-9]+)" _ ${PROJECT_VERSION}) -set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1}) -set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2}) - -set(PROJECT_SOVERSION ${PROJECT_VERSION_MAJOR}) -if(PROJECT_VERSION_MAJOR EQUAL 0) - set(PROJECT_SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) -endif() - -find_package(ethash CONFIG REQUIRED) - -cable_configure_compiler(NO_STACK_PROTECTION) -if(CABLE_COMPILER_GNULIKE) - add_compile_options( - -Wmissing-declarations - $<$:-Wextra-semi> - - $<$:-Wno-attributes> - $<$:-Wno-missing-field-initializers> - $<$:-Wduplicated-cond> - $<$:-Wlogical-op> - - $<$:-Wno-unknown-attributes> - $<$:-Wduplicate-enum> - $<$:-Wnewline-eof> - $<$:-Wunreachable-code-aggressive> - ) - - if(CABLE_COMPILER_CLANG) - set(CMAKE_CXX_FLAGS_COVERAGE "-fprofile-instr-generate -fcoverage-mapping") - elseif(CABLE_COMPILER_GNU) - set(CMAKE_CXX_FLAGS_COVERAGE "--coverage") - endif() -elseif(MSVC) - add_compile_options(/wd4324) # Disabled warning about alignment caused by alignas. - add_compile_options(/wd5030) # Allow using unknown attributes. -endif() - -set(CMAKE_C_VISIBILITY_PRESET hidden) -set(CMAKE_CXX_VISIBILITY_PRESET hidden) -set(CMAKE_VISIBILITY_INLINES_HIDDEN YES) - -if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) - # Setup options for x86_64 micro-architecture levels. - # https://clang.llvm.org/docs/UsersManual.html#x86 - - set(EVMONE_X86_64_ARCH_LEVEL_INIT 2) - if(APPLE) - # On macos with Apple Silicon CPU (arm64) the x86 is emulated and SSE4.2 is not available. - set(EVMONE_X86_64_ARCH_LEVEL_INIT 1) - endif() - - set(EVMONE_X86_64_ARCH_LEVEL ${EVMONE_X86_64_ARCH_LEVEL_INIT} CACHE STRING "The x86_64 micro-architecture level") - if(EVMONE_X86_64_ARCH_LEVEL GREATER_EQUAL 1 AND EVMONE_X86_64_ARCH_LEVEL LESS_EQUAL 4) - message(STATUS "x86_64 micro-architecture level: ${EVMONE_X86_64_ARCH_LEVEL}") - if(EVMONE_X86_64_ARCH_LEVEL GREATER_EQUAL 2) - add_compile_options(-march=x86-64-v${EVMONE_X86_64_ARCH_LEVEL}) - endif() - else() - message(FATAL_ERROR "Invalid EVMONE_X86_64_ARCH_LEVEL: ${EVMONE_X86_64_ARCH_LEVEL}") - endif() -endif() - -include(GNUInstallDirs) - -if(EVMONE_FUZZING) - if(NOT ${CMAKE_CXX_COMPILER_ID} MATCHES Clang OR ${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 8) - message(FATAL_ERROR "Clang 8+ compiler is required for fuzzing") - endif() - - set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build evmone as a shared library" FORCE) - set(EVMONE_TESTING ON CACHE BOOL "Build tests and test tools" FORCE) - - string(TOUPPER ${CMAKE_BUILD_TYPE} build_type) - string(COMPARE EQUAL ${build_type} COVERAGE fuzzing_coverage) - if(NOT fuzzing_coverage) - # Add fuzzing instrumentation only for non-coverage builds. - # The coverage builds should be without fuzzing instrumentation to allow - # running fuzzing corpus once and getting code coverage. - set(fuzzing_flags -fsanitize=fuzzer-no-link,address,undefined,shift-exponent,implicit-conversion,nullability) - add_compile_options(${fuzzing_flags}) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${fuzzing_flags}") - endif() -endif() - -include(CTest) - -add_subdirectory(lib) diff --git a/evm-assigner/LICENSE b/evm-assigner/LICENSE deleted file mode 100644 index de2951a0f2..0000000000 --- a/evm-assigner/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 =nil; Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/evm-assigner/README.md b/evm-assigner/README.md deleted file mode 100644 index 728533509b..0000000000 --- a/evm-assigner/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# evm-assigner - -Simulator of Ethereum Virtual Machine pipeline for fill assignment table associate with evm1 circuit. - -Based on a C++ implementation of the Ethereum Virtual Machine (EVM). -Created by members of the [Ipsilon] (ex-[Ewasm]) team. - -## Dependencies - -### Build tools - -- CMake 3.16+ -- Clang or GCC (tested with GCC 13) -- Ninja (recommended) - -### Libraries - -- [intx](https://github.com/chfast/intx) -- [ethash](https://github.com/chfast/ethash) -- [blueprint](https://github.com/NilFoundation/zkllvm-blueprint) -- [crypto3](https://github.com/NilFoundation/crypto3) - -## Nix support - -`evm-assigner` supports [Nix](https://nixos.org/) flakes. This means that you can get development-ready environment with: - -```bash -nix develop -``` - -Build package: - -```bash -nix build -``` - -Build debug package: - -```bash -nix build .#debug -``` - -Run tests: - -```bash -nix flake check -``` - -## Build without Nix - -### Provide CMAKE_PREFIX_PATH with paths to dependent modules -```bash -export CMAKE_PREFIX_PATH=$EVMC_PATH:$INTX_PATH:$ETHASH_PATH:$BLUEPRINT_PATH:$CRYPTO3_PATH -``` -Note: this variable could be retrieved from Nix shell environment - -### Configure cmake - -```bash -cmake -G "Ninja" -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_ASSIGNER_TESTS=TRUE - -``` - -### Build test - -```bash -cmake --build build -t assigner_tests -``` diff --git a/evm-assigner/cmake/Config.cmake.in b/evm-assigner/cmake/Config.cmake.in deleted file mode 100644 index 78767806e1..0000000000 --- a/evm-assigner/cmake/Config.cmake.in +++ /dev/null @@ -1,7 +0,0 @@ -@PACKAGE_INIT@ - -include(CMakeFindDependencyMacro) -find_dependency(intx REQUIRED) -find_dependency(ethash REQUIRED) - -include("${CMAKE_CURRENT_LIST_DIR}/assignerTargets.cmake") diff --git a/evm-assigner/cmake/LibraryTools.cmake b/evm-assigner/cmake/LibraryTools.cmake deleted file mode 100644 index 7a5dc20a64..0000000000 --- a/evm-assigner/cmake/LibraryTools.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# evmone: Fast Ethereum Virtual Machine implementation -# Copyright 2019 The evmone Authors. -# SPDX-License-Identifier: Apache-2.0 - -# For given target of a static library creates a custom target with -standalone suffix -# that merges the given target and all its static library dependencies -# into a single static library. -# -# It silently ignores non-static library target and unsupported platforms. -function(add_standalone_library TARGET) - get_target_property(type ${TARGET} TYPE) - if(NOT type STREQUAL STATIC_LIBRARY) - return() - endif() - - set(name ${TARGET}-standalone) - - if(CMAKE_AR) - # Generate ar linker script. - set(script_file ${name}.mri) - set(script "CREATE $\n") - string(APPEND script "ADDLIB $\n") - - get_target_property(link_libraries ${TARGET} LINK_LIBRARIES) - foreach(lib ${link_libraries}) - get_target_property(type ${lib} TYPE) - if(NOT type STREQUAL INTERFACE_LIBRARY) - string(APPEND script "ADDLIB $\n") - endif() - endforeach() - - string(APPEND script "SAVE\n") - file(GENERATE OUTPUT ${script_file} CONTENT ${script}) - - # Add -standalone static library. - add_library(${name} STATIC) - target_sources(${name} PRIVATE ${script_file}) - add_custom_command(TARGET ${name} POST_BUILD COMMAND ${CMAKE_AR} -M < ${script_file}) - add_dependencies(${name} ${TARGET}) - - get_property(enabled_languages GLOBAL PROPERTY ENABLED_LANGUAGES) - list(GET enabled_languages -1 lang) - set_target_properties(${name} PROPERTIES LINKER_LANGUAGE ${lang}) - endif() -endfunction() diff --git a/evm-assigner/cmake/cable/.gitignore b/evm-assigner/cmake/cable/.gitignore deleted file mode 100644 index a09c56df5c..0000000000 --- a/evm-assigner/cmake/cable/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/.idea diff --git a/evm-assigner/cmake/cable/CableBuildInfo.cmake b/evm-assigner/cmake/cable/CableBuildInfo.cmake deleted file mode 100644 index 75b16a2420..0000000000 --- a/evm-assigner/cmake/cable/CableBuildInfo.cmake +++ /dev/null @@ -1,109 +0,0 @@ -# Cable: CMake Bootstrap Library -# Copyright 2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -# Cable Build Info, version 1.0.0 -# -# This CMake module collects build information and provides it in different -# forms: static librar, JSON file, shell scripts. -# -# CHANGELOG -# -# 1.0.1 - 2023-04-19 -# - Fix -Wstrict-prototypes warning in buildinfo source files. -# -# 1.0.0 - 2022-02-12 - -include_guard(GLOBAL) - -include(GNUInstallDirs) - -# TODO: From CMake 3.17 the CMAKE_CURRENT_FUNCTION_LIST_DIR can be used instead. -set(cable_buildinfo_template_dir ${CMAKE_CURRENT_LIST_DIR}/buildinfo) - -function(cable_add_buildinfo_library) - - cmake_parse_arguments("" "" PROJECT_NAME;EXPORT "" ${ARGN}) - - if(NOT _PROJECT_NAME) - message(FATAL_ERROR "The PROJECT_NAME argument missing") - endif() - - # Come up with the target and the C function names. - set(name ${_PROJECT_NAME}-buildinfo) - set(FUNCTION_NAME ${_PROJECT_NAME}_get_buildinfo) - - set(output_dir ${CMAKE_CURRENT_BINARY_DIR}/${_PROJECT_NAME}) - set(header_file ${output_dir}/buildinfo.h) - set(source_file ${output_dir}/buildinfo.c) - - if(CMAKE_CONFIGURATION_TYPES) - set(build_type ${CMAKE_CFG_INTDIR}) - else() - set(build_type ${CMAKE_BUILD_TYPE}) - endif() - - # Find git here to allow the user to provide hints. - find_package(Git) - - # Git info target. - # - # This target is named -git and is always built. - # The executed script gitinfo.cmake check git status and updates files - # containing git information if anything has changed. - add_custom_target( - ${name}-git - COMMAND ${CMAKE_COMMAND} - -DGIT=${GIT_EXECUTABLE} - -DSOURCE_DIR=${PROJECT_SOURCE_DIR} - -DOUTPUT_DIR=${output_dir} - -P ${cable_buildinfo_template_dir}/gitinfo.cmake - BYPRODUCTS ${output_dir}/gitinfo.txt - ) - - add_custom_command( - COMMENT "Updating ${name}:" - OUTPUT ${source_file} ${output_dir}/buildinfo.json - COMMAND ${CMAKE_COMMAND} - -DOUTPUT_DIR=${output_dir} - -DPROJECT_NAME=${_PROJECT_NAME} - -DFUNCTION_NAME=${FUNCTION_NAME} - -DPROJECT_VERSION=${PROJECT_VERSION} - -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} - -DSYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR} - -DCOMPILER_ID=${CMAKE_CXX_COMPILER_ID} - -DCOMPILER_VERSION=${CMAKE_CXX_COMPILER_VERSION} - -DBUILD_TYPE=${build_type} - -P ${cable_buildinfo_template_dir}/buildinfo.cmake - DEPENDS - ${cable_buildinfo_template_dir}/buildinfo.cmake - ${cable_buildinfo_template_dir}/buildinfo.c.in - ${cable_buildinfo_template_dir}/buildinfo.json.in - ${cable_buildinfo_template_dir}/version.h.in - ${name}-git - ${output_dir}/gitinfo.txt - ) - - string(TIMESTAMP TIMESTAMP) - configure_file(${cable_buildinfo_template_dir}/buildinfo.h.in ${header_file}) - - # Add buildinfo library under given name. - # Make is static and do not build by default until some other target will actually use it. - add_library(${name} STATIC ${source_file} ${header_file}) - - target_include_directories(${name} PUBLIC $) - set_target_properties( - ${name} PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${output_dir} - ARCHIVE_OUTPUT_DIRECTORY ${output_dir} - ) - - if(_EXPORT) - install(TARGETS ${name} EXPORT ${_EXPORT} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) - endif() - -endfunction() diff --git a/evm-assigner/cmake/cable/CableBuildType.cmake b/evm-assigner/cmake/cable/CableBuildType.cmake deleted file mode 100644 index 70665c5f8c..0000000000 --- a/evm-assigner/cmake/cable/CableBuildType.cmake +++ /dev/null @@ -1,55 +0,0 @@ -# Cable: CMake Bootstrap Library -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -# Cable Build Type, version 1.0.1 -# -# This CMake module helps with setting default build type -# and build configurations for multi-configuration generators. -# Use cable_set_build_type(). -# -# CHANGELOG -# -# 1.0.1 - 2021-05-20 -# - Fix usage in CMake sub-project. -# -# 1.0.0 - 2020-01-02 - - -if(cable_build_type_included) - return() -endif() -set(cable_build_type_included TRUE) - -macro(cable_set_build_type) - if(NOT PROJECT_SOURCE_DIR) # Before the main project(). - cmake_parse_arguments(build_type "" DEFAULT CONFIGURATION_TYPES ${ARGN}) - - if(CMAKE_CONFIGURATION_TYPES) - if(build_type_CONFIGURATION_TYPES) - set( - CMAKE_CONFIGURATION_TYPES - ${build_type_CONFIGURATION_TYPES} - CACHE - STRING - "Available configurations for multi-configuration generators" - FORCE - ) - endif() - message(STATUS "Configurations: ${CMAKE_CONFIGURATION_TYPES}") - else() - if(build_type_DEFAULT AND NOT CMAKE_BUILD_TYPE) - set( - CMAKE_BUILD_TYPE - ${build_type_DEFAULT} - CACHE STRING - "Build type for single-configuration generators" - FORCE - ) - endif() - message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") - endif() - elseif(PROJECT_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) # After the main project(). - message(FATAL_ERROR "cable_set_build_type() must be used before project()") - endif() # Sub-project - silently ignore. -endmacro() diff --git a/evm-assigner/cmake/cable/CableCompilerSettings.cmake b/evm-assigner/cmake/cable/CableCompilerSettings.cmake deleted file mode 100644 index e872fac61e..0000000000 --- a/evm-assigner/cmake/cable/CableCompilerSettings.cmake +++ /dev/null @@ -1,172 +0,0 @@ -# Cable: CMake Bootstrap Library -# Copyright 2018-2020 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -# Cable Compiler Settings, version 1.0.1 -# -# This CMake module provides default configuration (with some options) -# for C/C++ compilers. Use cable_configure_compiler(). -# -# CHANGELOG -# -# 1.0.1 - 2020-01-30 -# - Do not explicitly set -mtune=generic, this is default anyway. -# -# 1.0.0 - 2019-12-20 - -if(cable_compiler_settings_included) - return() -endif() -set(cable_compiler_settings_included TRUE) - -include(CheckCXXCompilerFlag) - -# Adds CXX compiler flag if the flag is supported by the compiler. -# -# This is effectively a combination of CMake's check_cxx_compiler_flag() -# and add_compile_options(): -# -# if(check_cxx_compiler_flag(flag)) -# add_compile_options(flag) -# -function(cable_add_cxx_compiler_flag_if_supported FLAG) - # Remove leading - or / from the flag name. - string(REGEX REPLACE "^-|/" "" name ${FLAG}) - check_cxx_compiler_flag(${FLAG} ${name}) - if(${name}) - add_compile_options(${FLAG}) - endif() - - # If the optional argument passed, store the result there. - if(ARGV1) - set(${ARGV1} ${name} PARENT_SCOPE) - endif() -endfunction() - - -# Configures the compiler with default flags. -macro(cable_configure_compiler) - if(NOT PROJECT_SOURCE_DIR) - message(FATAL_ERROR "cable_configure_compiler() must be used after project()") - endif() - - # Determine if this is the main or a subproject. Leave this variable available for later use. - if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) - set(PROJECT_IS_MAIN TRUE) - else() - set(PROJECT_IS_MAIN FALSE) - endif() - - if(PROJECT_IS_MAIN) - # Do this configuration only in the main project. - - cmake_parse_arguments(cable "NO_CONVERSION_WARNINGS;NO_STACK_PROTECTION;NO_PEDANTIC" "" "" ${ARGN}) - - if(cable_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "cable_configure_compiler: Unknown options: ${cable_UNPARSED_ARGUMENTS}") - endif() - - # Set helper variables recognizing C++ compilers. - if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) - set(CABLE_COMPILER_GNU TRUE) - elseif(${CMAKE_CXX_COMPILER_ID} MATCHES Clang) - # This matches both clang and AppleClang. - set(CABLE_COMPILER_CLANG TRUE) - endif() - - if(CABLE_COMPILER_GNU OR CABLE_COMPILER_CLANG) - set(CABLE_COMPILER_GNULIKE TRUE) - endif() - - if(CABLE_COMPILER_GNULIKE) - - if(NOT cable_NO_PEDANTIC) - add_compile_options(-Wpedantic) - endif() - - if (ENABLE_WARNINGS) - # Enable basing warnings set and treat them as errors. - add_compile_options(-Werror -Wall -Wextra -Wshadow) - endif() - - if(NOT cable_NO_CONVERSION_WARNINGS) - # Enable conversion warnings if not explicitly disabled. - add_compile_options(-Wconversion -Wsign-conversion) - endif() - - # Allow unknown pragmas, we don't want to wrap them with #ifdefs. - add_compile_options(-Wno-unknown-pragmas) - - # Stack protection. - check_cxx_compiler_flag(-fstack-protector fstack-protector) - if(fstack-protector) - # The compiler supports stack protection options. - if(cable_NO_STACK_PROTECTION) - # Stack protection explicitly disabled. - # Add "no" flag, because in some configuration the compiler has it enabled by default. - add_compile_options(-fno-stack-protector) - else() - # Try enabling the "strong" variant. - cable_add_cxx_compiler_flag_if_supported(-fstack-protector-strong have_stack_protector_strong_support) - if(NOT have_stack_protector_strong_support) - # Fallback to standard variant if "strong" not available. - add_compile_options(-fstack-protector) - endif() - endif() - endif() - - cable_add_cxx_compiler_flag_if_supported(-Wimplicit-fallthrough) - - elseif(MSVC) - - # Get rid of default warning level. - string(REPLACE " /W3" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE " /W3" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - - # Enable basing warnings set and treat them as errors. - add_compile_options(/W4 /WX) - - # Allow unknown pragmas, we don't want to wrap them with #ifdefs. - add_compile_options(/wd4068) - - endif() - - # Option for arch=native. - option(NATIVE "Build for native CPU" OFF) - if(NATIVE) - if(MSVC) - add_compile_options(-arch:AVX) - else() - add_compile_options(-mtune=native -march=native) - endif() - endif() - - # Sanitizers support. - set(SANITIZE OFF CACHE STRING "Build with the specified sanitizer") - if(SANITIZE) - # Set the linker flags first, they are required to properly test the compiler flag. - set(CMAKE_SHARED_LINKER_FLAGS "-fsanitize=${SANITIZE} ${CMAKE_SHARED_LINKER_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS "-fsanitize=${SANITIZE} ${CMAKE_EXE_LINKER_FLAGS}") - - set(test_name have_fsanitize_${SANITIZE}) - check_cxx_compiler_flag(-fsanitize=${SANITIZE} ${test_name}) - if(NOT ${test_name}) - message(FATAL_ERROR "Unsupported sanitizer: ${SANITIZE}") - endif() - add_compile_options(-fno-omit-frame-pointer -fsanitize=${SANITIZE}) - - set(blacklist_file ${PROJECT_SOURCE_DIR}/sanitizer-blacklist.txt) - if(EXISTS ${blacklist_file}) - cable_add_cxx_compiler_flag_if_supported(-fsanitize-blacklist=${blacklist_file}) - endif() - unset(blacklist_file) - endif() - - # The "Coverage" build type. - if(CABLE_COMPILER_CLANG) - set(CMAKE_CXX_FLAGS_COVERAGE "-fprofile-instr-generate -fcoverage-mapping") - elseif(CABLE_COMPILER_GNU) - set(CMAKE_CXX_FLAGS_COVERAGE "--coverage") - endif() - endif() -endmacro() diff --git a/evm-assigner/cmake/cable/CablePackage.cmake b/evm-assigner/cmake/cable/CablePackage.cmake deleted file mode 100644 index b051ad0482..0000000000 --- a/evm-assigner/cmake/cable/CablePackage.cmake +++ /dev/null @@ -1,36 +0,0 @@ -# Cable: CMake Bootstrap Library -# Copyright 2019-2020 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -# Cable Package, version 1.0.0 -# -# This CMake module provides default configuration for CPack -# -# CHANGELOG -# -# 1.0.0 - 2020-05-06 - -if(cable_package_included) - return() -endif() -set(cable_package_included TRUE) - -# Configures CPack to build the archive package. -macro(cable_add_archive_package) - if(WIN32) - set(CPACK_GENERATOR ZIP) - set(CPACK_SOURCE_GENERATOR ZIP) - else() - set(CPACK_GENERATOR TGZ) - set(CPACK_SOURCE_GENERATOR TGZ) - endif() - string(TOLOWER ${CMAKE_SYSTEM_NAME} system_name) - string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} system_processor) - set(CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION}-${system_name}-${system_processor}) - set(CPACK_SOURCE_PACKAGE_FILE_NAME ${PROJECT_NAME}-${PROJECT_VERSION}-source) - set(CPACK_PACKAGE_CHECKSUM SHA256) - set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY FALSE) - unset(system_name) - unset(system_processor) - include(CPack) -endmacro() diff --git a/evm-assigner/cmake/cable/CableToolchains.cmake b/evm-assigner/cmake/cable/CableToolchains.cmake deleted file mode 100644 index d5af2cb3f6..0000000000 --- a/evm-assigner/cmake/cable/CableToolchains.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(cable_toolchain_dir ${CMAKE_CURRENT_LIST_DIR}/toolchains) - -function(cable_configure_toolchain) - if(NOT PROJECT_IS_NESTED) - # Do this configuration only in the top project. - - cmake_parse_arguments("" "" "DEFAULT" "" ${ARGN}) - - set(default_toolchain default) - if(_DEFAULT) - set(default_toolchain ${_DEFAULT}) - endif() - - set(TOOLCHAIN ${default_toolchain} CACHE STRING "CMake toolchain") - - set(toolchain_file toolchains/${TOOLCHAIN}.cmake) - foreach(path ${CMAKE_MODULE_PATH}) - if(EXISTS "${path}/${toolchain_file}") - set(toolchain_file "${path}/${toolchain_file}") - break() - endif() - endforeach() - - cable_debug("Toolchain file: ${toolchain_file}") - set(CMAKE_TOOLCHAIN_FILE ${toolchain_file} CACHE FILEPATH "CMake toolchain file") - endif() -endfunction() diff --git a/evm-assigner/cmake/cable/LICENSE b/evm-assigner/cmake/cable/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/evm-assigner/cmake/cable/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/evm-assigner/cmake/cable/README.md b/evm-assigner/cmake/cable/README.md deleted file mode 100644 index def365a202..0000000000 --- a/evm-assigner/cmake/cable/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# Cable - -[![readme style: standard][readme style standard badge]][standard readme] - -> Cable: CMake Bootstrap Library - -Cable is a set of CMake modules and scripts containing common patterns used -in CMake-based C++ projects. The design goal is to be pragmatic rather than -generic so the number of provided options is minimal. The Cable modules are -independent and it is easy to use them individually. - - -## Table of Contents - -- [Install](#install) -- [Usage](#usage) -- [Maintainer](#maintainer) -- [License](#license) - - -## Install - -The suggested Cable location is `cmake/cable` relative to your project root directory. - - -### With cable.cmake script - -Copy [cable.cmake](cable.cmake) script to your project. -Then use it to download individual Cable CMake modules. - -```bash -./cable.cmake install CableBuildType -``` - - -### As git subtree - -Adding a dependency project as a [git subtree] is just a copy of the source code -done in a bit more systematic way. - -If you are not familiar with managing dependencies with git subtree read the -[Git subtree: the alternative to Git submodule][git subtree tutorial]. - -#### To install - -```sh -git remote add cable https://github.com/ethereum/cable -git subtree add --prefix cmake/cable cable master --squash -``` - -#### To update - -```sh -git subtree pull --prefix cmake/cable cable master --squash -``` - -### As git submodule - -Include the Cable library as [git submodule] in your project. - -```sh -git submodule add https://github.com/ethereum/cable cmake/cable -``` - -## Usage - -Cable contains the `bootstrap.cmake` file that initializes the library. -Start by including this file in your main `CMakeLists.txt` from the Cable -submodule/subtree or any other location. The `bootstrap.cmake` must be included -before the `project()` command. After that, you can include and use other -Cable modules. - -### Example - -```cmake -cmake_minimum_required(VERSION 3.5) - -include(cmake/cable/bootstrap.cmake) -include(CableBuildType) - -project(tothemoon) - -cable_set_build_type(DEFAULT RelWithDebInfo CONFIGURATION_TYPES Debug Release RelWithDebInfo) -``` - - -## Maintainer - -Paweł Bylica [@chfast] - -## License - -Licensed under the [Apache License, Version 2.0]. - - -[@chfast]: https://github.com/chfast -[Apache License, Version 2.0]: LICENSE -[git submodule]: https://git-scm.com/book/en/v2/Git-Tools-Submodules -[git subtree]: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt -[git subtree tutorial]: https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree -[standard readme]: https://github.com/RichardLitt/standard-readme - -[readme style standard badge]: https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square diff --git a/evm-assigner/cmake/cable/bootstrap.cmake b/evm-assigner/cmake/cable/bootstrap.cmake deleted file mode 100644 index 47dcdf1723..0000000000 --- a/evm-assigner/cmake/cable/bootstrap.cmake +++ /dev/null @@ -1,71 +0,0 @@ -# Cable: CMake Bootstrap Library -# Copyright 2019-2020 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -# Bootstrap the Cable - CMake Bootstrap Library by including this file. -# e.g. include(cmake/cable/bootstrap.cmake). - - -# Cable version. -# -# This is internal variable automatically updated with external tools. -# Use CABLE_VERSION variable if you need this information. -set(version 0.5.0) - -# For convenience, add the project CMake module dir to module path. -set(module_dir ${CMAKE_CURRENT_SOURCE_DIR}/cmake) -if(EXISTS ${module_dir}) - list(APPEND CMAKE_MODULE_PATH ${module_dir}) -endif() - -# Always add this Cable instance modules to the CMake module path. -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) - -if(CABLE_VERSION) - # Some other instance of Cable has been initialized in the top project. - - # Mark this project as nested. - set(PROJECT_IS_NESTED TRUE) - - # Compare versions of the top project and this instances. - if(CABLE_VERSION VERSION_LESS version) - set(comment " (version older than ${version})") - elseif(CABLE_VERSION VERSION_GREATER version) - set(comment " (version newer than ${version})") - endif() - - # Log information about initialization in the top project. - file(RELATIVE_PATH subproject_dir ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) - cable_debug("${subproject_dir}: Cable ${CABLE_VERSION}${comment} already initialized in the top project") - cable_debug("Project CMake modules directory: ${module_dir}") - - unset(version) - unset(module_dir) - unset(comment) - return() -endif() - - -option(CABLE_DEBUG "Enable Cable debug logs" OFF) - -function(cable_log) - message(STATUS "[cable ] ${ARGN}") -endfunction() - -function(cable_debug) - if(CABLE_DEBUG) - message(STATUS "[cable*] ${ARGN}") - endif() -endfunction() - -# Export Cable version. -set(CABLE_VERSION ${version}) - -# Mark this project as non-nested. -set(PROJECT_IS_NESTED FALSE) - -cable_log("Cable ${CABLE_VERSION} initialized") -cable_debug("Project CMake modules directory: ${module_dir}") - -unset(version) -unset(module_dir) diff --git a/evm-assigner/cmake/cable/buildinfo/buildinfo.c.in b/evm-assigner/cmake/cable/buildinfo/buildinfo.c.in deleted file mode 100644 index eddc11aa9d..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/buildinfo.c.in +++ /dev/null @@ -1,25 +0,0 @@ -/* Cable: CMake Bootstrap Library. - * Copyright 2018 Pawel Bylica. - * Licensed under the Apache License, Version 2.0. See the LICENSE file. - */ - -/* Generated by Cable Build Info on @TIMESTAMP@. Do not modify directly. */ - -#include "buildinfo.h" - -const struct buildinfo* @FUNCTION_NAME@(void) -{ - static const struct buildinfo buildinfo = { - .project_name = "@PROJECT_NAME@", - .project_version = "@PROJECT_VERSION@", - .project_name_with_version = "@PROJECT_NAME@-@PROJECT_VERSION@", - .git_commit_hash = "@GIT_COMMIT_HASH@", - .git_branch = "@GIT_BRANCH@", - .system_name = "@SYSTEM_NAME@", - .system_processor = "@SYSTEM_PROCESSOR@", - .compiler_id = "@COMPILER_ID@", - .compiler_version = "@COMPILER_VERSION@", - .build_type = "@BUILD_TYPE@", - }; - return &buildinfo; -} diff --git a/evm-assigner/cmake/cable/buildinfo/buildinfo.cmake b/evm-assigner/cmake/cable/buildinfo/buildinfo.cmake deleted file mode 100644 index 79dfb2cf4b..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/buildinfo.cmake +++ /dev/null @@ -1,89 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018-2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -string(TOUPPER "${PROJECT_NAME}" PROJECT_NAME_UPPERCASE) -string(TOLOWER "${SYSTEM_NAME}" SYSTEM_NAME) -string(TOLOWER "${SYSTEM_PROCESSOR}" SYSTEM_PROCESSOR) -string(TOLOWER "${COMPILER_ID}" COMPILER_ID) -string(TOLOWER "${BUILD_TYPE}" BUILD_TYPE) -string(TIMESTAMP TIMESTAMP) - -# Read the git info from a file. The gitinfo is suppose to update the file -# only if the information has changed. -file(STRINGS ${OUTPUT_DIR}/gitinfo.txt gitinfo) -list(LENGTH gitinfo gitinfo_len) -if(gitinfo_len LESS 3) - message(WARNING "Git info not available") -else() - list(GET gitinfo 0 describe) - list(GET gitinfo 1 GIT_BRANCH) - list(GET gitinfo 2 GIT_ORIGIN_URL) -endif() - -# The output of `git describe --always --long --tags --match=v*`. -string(REGEX MATCH "(v(.+)-([0-9]+)-g)?([0-9a-f]+)(-dirty)?" match "${describe}") - -if(DEFINED describe AND NOT match) - message(WARNING "Cannot parse git describe: ${describe}") -endif() - -set(GIT_LATEST_PROJECT_VERSION ${CMAKE_MATCH_2}) -set(GIT_LATEST_PROJECT_VERSION_DISTANCE ${CMAKE_MATCH_3}) -set(GIT_COMMIT_HASH ${CMAKE_MATCH_4}) -if(CMAKE_MATCH_5) - set(GIT_DIRTY TRUE) - set(dirty_msg " (dirty)") -else() - set(GIT_DIRTY FALSE) -endif() - -if(GIT_COMMIT_HASH) - string(SUBSTRING ${GIT_COMMIT_HASH} 0 8 abbrev) - set(version_commit "+commit.${abbrev}") - if(GIT_DIRTY) - set(version_commit "${version_commit}.dirty") - endif() -endif() - -if(NOT PROJECT_VERSION) - message(WARNING "PROJECT_VERSION not specified") -endif() - -if(PROJECT_VERSION STREQUAL GIT_LATEST_PROJECT_VERSION) - if(${GIT_LATEST_PROJECT_VERSION_DISTANCE} GREATER 0) - set(PROJECT_VERSION "${PROJECT_VERSION}-${GIT_LATEST_PROJECT_VERSION_DISTANCE}${version_commit}") - endif() -else() - if(GIT_LATEST_PROJECT_VERSION) - message(WARNING "Git project version mismatch: '${GIT_LATEST_PROJECT_VERSION}' vs '${PROJECT_VERSION}'") - endif() - set(PROJECT_VERSION "${PROJECT_VERSION}${version_commit}") -endif() - -if(PROJECT_VERSION MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$") - set(PROJECT_VERSION_IS_PRERELEASE false) -else() - set(PROJECT_VERSION_IS_PRERELEASE true) - set(prerelease_comment " (prerelease)") -endif() - -message( - " Project Version: ${PROJECT_VERSION}${prerelease_comment}\n" - " System Name: ${SYSTEM_NAME}\n" - " System Processor: ${SYSTEM_PROCESSOR}\n" - " Compiler ID: ${COMPILER_ID}\n" - " Compiler Version: ${COMPILER_VERSION}\n" - " Build Type: ${BUILD_TYPE}\n" - " Git Info: ${GIT_LATEST_PROJECT_VERSION}/${GIT_LATEST_PROJECT_VERSION_DISTANCE}/${GIT_COMMIT_HASH}${dirty_msg}\n" - " Git Branch: ${GIT_BRANCH}\n" - " Git Origin URL: ${GIT_ORIGIN_URL}\n" - " Timestamp: ${TIMESTAMP}" -) - -configure_file(${CMAKE_CURRENT_LIST_DIR}/buildinfo.c.in ${OUTPUT_DIR}/buildinfo.c) -configure_file(${CMAKE_CURRENT_LIST_DIR}/buildinfo.json.in ${OUTPUT_DIR}/buildinfo.json) -configure_file(${CMAKE_CURRENT_LIST_DIR}/buildinfo.sh.in ${OUTPUT_DIR}/buildinfo.sh) -configure_file(${CMAKE_CURRENT_LIST_DIR}/buildinfo.ps1.in ${OUTPUT_DIR}/buildinfo.ps1) - -configure_file(${CMAKE_CURRENT_LIST_DIR}/version.h.in ${OUTPUT_DIR}/version.h) diff --git a/evm-assigner/cmake/cable/buildinfo/buildinfo.h.in b/evm-assigner/cmake/cable/buildinfo/buildinfo.h.in deleted file mode 100644 index 5b76770e04..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/buildinfo.h.in +++ /dev/null @@ -1,33 +0,0 @@ -/* Cable: CMake Bootstrap Library. - * Copyright 2018 Pawel Bylica. - * Licensed under the Apache License, Version 2.0. See the LICENSE file. - */ - -/* Generated by Cable Build Info on @TIMESTAMP@. Do not modify directly. */ - -#pragma once - -#ifdef __cplusplus -extern "C" -{ -#endif - -struct buildinfo -{ - const char* project_name; - const char* project_version; - const char* project_name_with_version; - const char* git_commit_hash; - const char* git_branch; - const char* system_name; - const char* system_processor; - const char* compiler_id; - const char* compiler_version; - const char* build_type; -}; - -const struct buildinfo* @FUNCTION_NAME@(void); - -#ifdef __cplusplus -} -#endif diff --git a/evm-assigner/cmake/cable/buildinfo/buildinfo.json.in b/evm-assigner/cmake/cable/buildinfo/buildinfo.json.in deleted file mode 100644 index 6a36a73834..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/buildinfo.json.in +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@PROJECT_NAME@", - "version": "@PROJECT_VERSION@", - "is_prerelease": @PROJECT_VERSION_IS_PRERELEASE@, - "commit": "@GIT_COMMIT_HASH@", - "branch": "@GIT_BRANCH@", - "repo": "@GIT_ORIGIN_URL@", - "system_name": "@SYSTEM_NAME@", - "system_processor": "@SYSTEM_PROCESSOR@" -} diff --git a/evm-assigner/cmake/cable/buildinfo/buildinfo.ps1.in b/evm-assigner/cmake/cable/buildinfo/buildinfo.ps1.in deleted file mode 100644 index a121ec7abd..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/buildinfo.ps1.in +++ /dev/null @@ -1,5 +0,0 @@ -$env:project_name="@PROJECT_NAME@" -$env:project_version="@PROJECT_VERSION@" -$env:project_version_is_prerelease="@PROJECT_VERSION_IS_PRERELEASE@" -$env:system_name='@SYSTEM_NAME@' -$env:system_processor='@SYSTEM_PROCESSOR@' diff --git a/evm-assigner/cmake/cable/buildinfo/buildinfo.sh.in b/evm-assigner/cmake/cable/buildinfo/buildinfo.sh.in deleted file mode 100644 index 97cf1ae9d7..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/buildinfo.sh.in +++ /dev/null @@ -1,5 +0,0 @@ -PROJECT_NAME='@PROJECT_NAME@' -PROJECT_VERSION='@PROJECT_VERSION@' -PROJECT_VERSION_IS_PRERELEASE='@PROJECT_VERSION_IS_PRERELEASE@' -SYSTEM_NAME='@SYSTEM_NAME@' -SYSTEM_PROCESSOR='@SYSTEM_PROCESSOR@' diff --git a/evm-assigner/cmake/cable/buildinfo/gitinfo.cmake b/evm-assigner/cmake/cable/buildinfo/gitinfo.cmake deleted file mode 100644 index 0d7bc2fcc0..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/gitinfo.cmake +++ /dev/null @@ -1,59 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -# Execute git only if the tool is available. -if(GIT) - execute_process( - COMMAND ${GIT} describe --always --long --tags --first-parent --match=v* --abbrev=40 --dirty - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE gitinfo - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_VARIABLE error - ERROR_STRIP_TRAILING_WHITESPACE - ) - if(error) - message(WARNING "Git ${error}") - endif() - - execute_process( - COMMAND ${GIT} rev-parse --abbrev-ref HEAD - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE gitbranch - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_VARIABLE error - ERROR_STRIP_TRAILING_WHITESPACE - ) - if(error) - message(WARNING "Git ${error}") - else() - set(gitinfo "${gitinfo}\n${gitbranch}") - endif() - - execute_process( - COMMAND ${GIT} config --get remote.origin.url - WORKING_DIRECTORY ${SOURCE_DIR} - OUTPUT_VARIABLE gitorigin - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_VARIABLE error - ERROR_STRIP_TRAILING_WHITESPACE - ) - if(error) - message(WARNING "Git ${error}") - else() - set(gitinfo "${gitinfo}\n${gitorigin}\n") - endif() -endif() - -set(gitinfo_file ${OUTPUT_DIR}/gitinfo.txt) - -if(EXISTS ${gitinfo_file}) - file(READ ${gitinfo_file} prev_gitinfo) -else() - # Create empty file, because other targets expect it to exist. - file(WRITE ${gitinfo_file} "") -endif() - -if(NOT "${gitinfo}" STREQUAL "${prev_gitinfo}") - file(WRITE ${gitinfo_file} ${gitinfo}) -endif() diff --git a/evm-assigner/cmake/cable/buildinfo/version.h.in b/evm-assigner/cmake/cable/buildinfo/version.h.in deleted file mode 100644 index c53e5364aa..0000000000 --- a/evm-assigner/cmake/cable/buildinfo/version.h.in +++ /dev/null @@ -1,14 +0,0 @@ -/* Cable: CMake Bootstrap Library. - * Copyright 2019 Pawel Bylica. - * Licensed under the Apache License, Version 2.0. - */ - -/* Generated by Cable Build Info on @TIMESTAMP@. Do not modify directly. */ - -#pragma once - -#define @PROJECT_NAME_UPPERCASE@_VERSION "@PROJECT_VERSION@" - -#ifdef __cplusplus -constexpr auto @PROJECT_NAME@_version = "@PROJECT_VERSION@"; -#endif diff --git a/evm-assigner/cmake/cable/cable.cmake b/evm-assigner/cmake/cable/cable.cmake deleted file mode 100755 index 0b85522d45..0000000000 --- a/evm-assigner/cmake/cable/cable.cmake +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env -S cmake -P - -# Cable: CMake Bootstrap Library -# Copyright 2019-2020 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -# The cable command-line tool, version 1.0.0 -# -# This CMake script allows installing or updating Cable modules. -# Commands: -# - list -# - install -# - update -# -# You can also include it from CMakeLists.txt to add Cable modules to -# CMAKE_MODULE_PATH. - -if(NOT CMAKE_SCRIPT_MODE_FILE) - # Setup Cable modules when included as include(cable.cmake). - list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) - return() -endif() - -set(repo_url https://github.com/ethereum/cable) -set(download_url ${repo_url}/raw/master) -set(cable_dir ${CMAKE_CURRENT_LIST_DIR}) - -function(get_modules_list OUTPUT_LIST) - file(GLOB modules_files RELATIVE ${cable_dir} "${cable_dir}/Cable*.cmake") - string(REPLACE ".cmake" "" modules "${modules_files}") - set(${OUTPUT_LIST} "${modules}" PARENT_SCOPE) -endfunction() - -function(download MODULE_NAME) - set(module_file ${MODULE_NAME}.cmake) - set(src "${download_url}/${module_file}") - set(dst "${cable_dir}/${module_file}") - file(DOWNLOAD "${src}" "${dst}" STATUS status) - list(GET status 0 status_code) - list(GET status 1 error_msg) - if(status EQUAL 0) - set(msg DONE) - else() - file(REMOVE "${dst}") - set(msg "${status_code} ${error_msg}\n ${src}") - endif() - message("Downloading ${MODULE_NAME}: ${msg}") -endfunction() - -set(cmd ${CMAKE_ARGV3}) # cmake -P cable.cmake ARGV3 ARGV4 ... -if(NOT cmd) - set(cmd list) -endif() - -if(cmd STREQUAL list) - get_modules_list(modules) - string(REPLACE ";" "\n " modules "${modules}") - message("Installed modules:\n ${modules}") -elseif(cmd STREQUAL update) - get_modules_list(modules) - foreach(module ${modules}) - download(${module}) - endforeach() -elseif(cmd STREQUAL install) - download(${CMAKE_ARGV4}) -else() - message(FATAL_ERROR "Unknown command '${cmd}'") -endif() diff --git a/evm-assigner/cmake/cable/toolchains/cxx11-32bit.cmake b/evm-assigner/cmake/cable/toolchains/cxx11-32bit.cmake deleted file mode 100644 index f3f28cf23a..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx11-32bit.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018-2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_C_FLAGS_INIT -m32) -set(CMAKE_CXX_FLAGS_INIT -m32) diff --git a/evm-assigner/cmake/cable/toolchains/cxx11-c99.cmake b/evm-assigner/cmake/cable/toolchains/cxx11-c99.cmake deleted file mode 100644 index 91a93b33cc..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx11-c99.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_C_STANDARD 99) -set(CMAKE_C_EXTENSIONS OFF) diff --git a/evm-assigner/cmake/cable/toolchains/cxx11-fpic.cmake b/evm-assigner/cmake/cable/toolchains/cxx11-fpic.cmake deleted file mode 100644 index 52d4f972e6..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx11-fpic.cmake +++ /dev/null @@ -1,12 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_POSITION_INDEPENDENT_CODE ON) - -set(CMAKE_CXX_FLAGS_INIT "-fPIC" CACHE STRING "" FORCE) -set(CMAKE_C_FLAGS_INIT "-fPIC" CACHE STRING "" FORCE) diff --git a/evm-assigner/cmake/cable/toolchains/cxx11-pic.cmake b/evm-assigner/cmake/cable/toolchains/cxx11-pic.cmake deleted file mode 100644 index db7d9e5b27..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx11-pic.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_POSITION_INDEPENDENT_CODE ON) diff --git a/evm-assigner/cmake/cable/toolchains/cxx11.cmake b/evm-assigner/cmake/cable/toolchains/cxx11.cmake deleted file mode 100644 index cd6b82ffe7..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx11.cmake +++ /dev/null @@ -1,7 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/evm-assigner/cmake/cable/toolchains/cxx14-32bit.cmake b/evm-assigner/cmake/cable/toolchains/cxx14-32bit.cmake deleted file mode 100644 index 15145ff94f..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx14-32bit.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_C_FLAGS_INIT -m32) -set(CMAKE_CXX_FLAGS_INIT -m32) diff --git a/evm-assigner/cmake/cable/toolchains/cxx14-pic.cmake b/evm-assigner/cmake/cable/toolchains/cxx14-pic.cmake deleted file mode 100644 index 507771fc29..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx14-pic.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_POSITION_INDEPENDENT_CODE ON) diff --git a/evm-assigner/cmake/cable/toolchains/cxx14.cmake b/evm-assigner/cmake/cable/toolchains/cxx14.cmake deleted file mode 100644 index 646acafb79..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx14.cmake +++ /dev/null @@ -1,7 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/evm-assigner/cmake/cable/toolchains/cxx17-32bit.cmake b/evm-assigner/cmake/cable/toolchains/cxx17-32bit.cmake deleted file mode 100644 index 183aab3129..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx17-32bit.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_C_FLAGS_INIT -m32) -set(CMAKE_CXX_FLAGS_INIT -m32) diff --git a/evm-assigner/cmake/cable/toolchains/cxx17-pic.cmake b/evm-assigner/cmake/cable/toolchains/cxx17-pic.cmake deleted file mode 100644 index edb3559e54..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx17-pic.cmake +++ /dev/null @@ -1,9 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -set(CMAKE_POSITION_INDEPENDENT_CODE ON) diff --git a/evm-assigner/cmake/cable/toolchains/cxx17.cmake b/evm-assigner/cmake/cable/toolchains/cxx17.cmake deleted file mode 100644 index a4efcaa212..0000000000 --- a/evm-assigner/cmake/cable/toolchains/cxx17.cmake +++ /dev/null @@ -1,7 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2019 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/evm-assigner/cmake/cable/toolchains/default.cmake b/evm-assigner/cmake/cable/toolchains/default.cmake deleted file mode 100644 index 9869b6e157..0000000000 --- a/evm-assigner/cmake/cable/toolchains/default.cmake +++ /dev/null @@ -1,3 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. diff --git a/evm-assigner/cmake/cable/toolchains/mips64.cmake b/evm-assigner/cmake/cable/toolchains/mips64.cmake deleted file mode 100644 index e90d748fb6..0000000000 --- a/evm-assigner/cmake/cable/toolchains/mips64.cmake +++ /dev/null @@ -1,24 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(CMAKE_SYSTEM_PROCESSOR mips64) -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_C_COMPILER mips64-linux-gnuabi64-gcc) -set(CMAKE_CXX_COMPILER mips64-linux-gnuabi64-g++) - -set(CMAKE_FIND_ROOT_PATH /usr/mips64-linux-gnuabi64) -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS Off) - -if(${CMAKE_VERSION} VERSION_LESS 3.10.0) - # Until CMake 3.10 the FindThreads uses try_run() check of -pthread flag, - # what causes CMake error in crosscompiling mode. Avoid the try_run() check - # by specifying the result up front. - set(THREADS_PTHREAD_ARG TRUE) -endif() diff --git a/evm-assigner/cmake/cable/toolchains/powerpc64.cmake b/evm-assigner/cmake/cable/toolchains/powerpc64.cmake deleted file mode 100644 index e6c7e7fce6..0000000000 --- a/evm-assigner/cmake/cable/toolchains/powerpc64.cmake +++ /dev/null @@ -1,24 +0,0 @@ -# Cable: CMake Bootstrap Library. -# Copyright 2018 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(CMAKE_SYSTEM_PROCESSOR powerpc64) -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_C_COMPILER powerpc64-linux-gnu-gcc) -set(CMAKE_CXX_COMPILER powerpc64-linux-gnu-g++) - -set(CMAKE_FIND_ROOT_PATH /usr/powerpc64-linux-gnu) -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) -set(CMAKE_CXX_EXTENSIONS OFF) - -if(${CMAKE_VERSION} VERSION_LESS 3.10.0) - # Until CMake 3.10 the FindThreads uses try_run() check of -pthread flag, - # what causes CMake error in crosscompiling mode. Avoid the try_run() check - # by specifying the result up front. - set(THREADS_PTHREAD_ARG TRUE) -endif() diff --git a/evm-assigner/cmake/toolchains/riscv32.cmake b/evm-assigner/cmake/toolchains/riscv32.cmake deleted file mode 100644 index 5fa0f754a5..0000000000 --- a/evm-assigner/cmake/toolchains/riscv32.cmake +++ /dev/null @@ -1,19 +0,0 @@ -# evmone: Ethereum Virtual Machine -# Copyright 2023 Pawel Bylica. -# Licensed under the Apache License, Version 2.0. See the LICENSE file. - -set(RISCV /usr/local/riscv) - -set(CMAKE_SYSTEM_PROCESSOR riscv32) -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_C_COMPILER ${RISCV}/bin/clang) -set(CMAKE_CXX_COMPILER ${RISCV}/bin/clang++) - -set(CMAKE_CXX_FLAGS_INIT -stdlib=libc++) - -set(CMAKE_FIND_ROOT_PATH ${RISCV}/sysroot) -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -set(CMAKE_CROSSCOMPILING_EMULATOR qemu-riscv32-static;-L;${CMAKE_FIND_ROOT_PATH}) diff --git a/evm-assigner/docs/efficient_gas_calculation_algorithm.md b/evm-assigner/docs/efficient_gas_calculation_algorithm.md deleted file mode 100644 index 359a89b812..0000000000 --- a/evm-assigner/docs/efficient_gas_calculation_algorithm.md +++ /dev/null @@ -1,163 +0,0 @@ -# Efficient gas calculation algorithm for EVM - -This article describes how to efficiently calculate gas and check stack requirements -for Ethereum Virtual Machine (EVM) instructions. - - -## Instructions metadata - -Let's start by defining some basic and universal instructions' parameters. - -1. Base gas cost. - - This is the static gas cost of instructions. Some instructions may have - _additional_ cost depending on their operand values and/or the environment - — these have to be handled individually during the instruction execution. - The _final_ cost is never less than the _base_ cost. - -2. Stack height requirement. - - This is the minimum stack height (number of items on the stack) - required prior to the instruction execution. - -3. Stack height change. - - This is difference of the stack height before and after the instruction - execution. Can be negative if the instruction pops more items than pushes. - -Examples: - -| opcode | base gas cost | stack height requirement | stack height change | -| ------- | ------------- | ------------------------ | ------------------- | -| ADD | 3 | 2 | -1 | -| EXP | 50 | 2 | -1 | -| DUP4 | 3 | 4 | 1 | -| SWAP1 | 3 | 2 | 0 | -| ADDRESS | 2 | 0 | 1 | -| CALL | 700 | 7 | -6 | - - -## Basic instruction blocks - -A _basic instruction block_ is a sequence of "straight-line" instructions -without jumps and jumpdests in the middle. -Jumpdests are only allowed at the entry, jumps at the exit. -Basic blocks are nodes in the _control flow graph_. -See [Basic Block] in Wikipedia. - -In EVM there are simple rules to identify basic instruction block boundaries: - -1. A basic instruction block _starts_ right before: - - the first instruction in the code, - - `JUMPDEST` instruction. - -2. A basic instruction block _ends_ after the "terminator" instructions: - - `JUMP`, - - `JUMPI`, - - `STOP`, - - `RETURN`, - - `REVERT`, - - `SELFDESTRUCT`. - -A basic instruction block is a shortest sequence of instructions such that -a basic block starts before the first instruction and ends after the last. - -In some cases multiple of the above rules can apply to single basic instruction -block boundary. - -## Algorithm - -The algorithm for calculating gas and checking stack requirements pre-computes -the values for basic instruction blocks and during execution the checks -are done only once per instruction block. - -### Collecting requirements for basic blocks - -For a basic block we need to collect the following information: - -- total **base gas cost** of all instructions, -- the **stack height required** (the minimum stack height needed to execute all - instructions in the block), -- the **maximum stack height growth** relative to the stack height at block - start. - -This is done as follows: - -1. Split code into basic blocks. -2. For each basic block: - -```python -class Instruction: - base_gas_cost = 0 - stack_required = 0 - stack_change = 0 - -class BasicBlock: - base_gas_cost = 0 - stack_required = 0 - stack_max_growth = 0 - -def collect_basic_block_requirements(basic_block): - stack_change = 0 - for instruction in basic_block: - basic_block.base_gas_cost += instruction.base_gas_cost - - current_stack_required = instruction.stack_required - stack_change - basic_block.stack_required = max(basic_block.stack_required, current_stack_required) - - stack_change += instruction.stack_change - - basic_block.stack_max_growth = max(basic_block.stack_max_growth, stack_change) -``` - -### Checking basic block requirements - -During execution, before executing an instruction that starts a basic block, -the basic block requirements must be checked. - -```python -class ExecutionState: - gas_left = 0 - stack = [] - -def check_basic_block_requirements(state, basic_block): - state.gas_left -= basic_block.base_gas_cost - if state.gas_left < 0: - raise OutOfGas() - - if len(state.stack) < basic_block.stack_required: - raise StackUnderflow() - - if len(state.stack) + basic_block.stack_max_growth > 1024: - raise StackOverflow() -``` - -## Misc - -### EVM may terminate earlier - -Because requirements for a whole basic block are checked up front, the instructions -that have observable external effects might not be executed although they would be -executed if the gas counting would have been done per instruction. -This is not a consensus issue because the execution terminates with a "hard" exception -anyway (and all effects are reverted) but might produce unexpected traces -or terminate with a different exception type. - -### Current "gas left" value - -In EVMJIT additional instructions that begin a basic block are `GAS` and any of the _call_ instructions. This is because -these instructions need to know the precise _gas left_ counter value. -However, in evmone this problem has been solved without additional blocks splitting -by attaching the correction value to the mentioned instructions. - -### Undefined instructions - -Undefined instructions have base gas cost 0 and not stack requirements. - - - - -[Basic Block]: https://en.wikipedia.org/wiki/Basic_block - - - diff --git a/evm-assigner/lib/CMakeLists.txt b/evm-assigner/lib/CMakeLists.txt deleted file mode 100644 index 0adfd026c9..0000000000 --- a/evm-assigner/lib/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# evmone: Fast Ethereum Virtual Machine implementation -# Copyright 2018 The evmone Authors. -# SPDX-License-Identifier: Apache-2.0 - -find_package(intx CONFIG REQUIRED) - -add_subdirectory(assigner) diff --git a/evm-assigner/lib/assigner/CMakeLists.txt b/evm-assigner/lib/assigner/CMakeLists.txt deleted file mode 100644 index 709206511d..0000000000 --- a/evm-assigner/lib/assigner/CMakeLists.txt +++ /dev/null @@ -1,55 +0,0 @@ -cmake_minimum_required(VERSION 3.22 FATAL_ERROR) - -option(BUILD_ASSIGNER_TESTS "Build unit tests" FALSE) - -set(evmone_sources - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/baseline.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/baseline_instruction_table.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/eof.cpp -) - -add_library(${PROJECT_NAME} STATIC ${evmone_sources}) - -target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20) - -target_include_directories(${PROJECT_NAME} PUBLIC - $ - $ - $ - $) - -target_link_libraries(${PROJECT_NAME} - PUBLIC intx::intx crypto3::common ethash::keccak) - -set_target_properties( - ${PROJECT_NAME} - PROPERTIES - VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_SOVERSION} -) - -# Install assigner headers -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -# Install library -install(TARGETS ${PROJECT_NAME} EXPORT assignerTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}) - -# Install evmone headers -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/evmone/execution_state.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/baseline_instruction_table.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/instructions.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/instructions_traits.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/instructions_xmacro.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/baseline.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/eof.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmone/instructions_opcodes.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmc/evmc.h - ${CMAKE_CURRENT_SOURCE_DIR}/evmc/evmc.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmc/filter_iterator.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmc/helpers.h - ${CMAKE_CURRENT_SOURCE_DIR}/evmc/hex.hpp - ${CMAKE_CURRENT_SOURCE_DIR}/evmc/utils.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) -if(BUILD_ASSIGNER_TESTS) - add_subdirectory(test) -endif() diff --git a/evm-assigner/lib/assigner/evmc/evmc.h b/evm-assigner/lib/assigner/evmc/evmc.h deleted file mode 100644 index f0578034f0..0000000000 --- a/evm-assigner/lib/assigner/evmc/evmc.h +++ /dev/null @@ -1,1198 +0,0 @@ -/** - * EVMC: Ethereum Client-VM Connector API - * - * @copyright - * Copyright 2016 The EVMC Authors. - * Licensed under the Apache License, Version 2.0. - * - * @defgroup EVMC EVMC - * @{ - */ -#ifndef EVM_ASSIGNER_EVMC_EVMC_H_ -#define EVM_ASSIGNER_EVMC_EVMC_H_ - -#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ >= 6) -/** - * Portable declaration of "deprecated" attribute. - * - * Available for clang and GCC 6+ compilers. The older GCC compilers know - * this attribute, but it cannot be applied to enum elements. - */ -#define EVMC_DEPRECATED __attribute__((deprecated)) -#else -#define EVMC_DEPRECATED -#endif - - -#include /* Definition of bool, true and false. */ -#include /* Definition of size_t. */ -#include /* Definition of int64_t, uint64_t. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* BEGIN Python CFFI declarations */ - -enum -{ - /** - * The EVMC ABI version number of the interface declared in this file. - * - * The EVMC ABI version always equals the major version number of the EVMC project. - * The Host SHOULD check if the ABI versions match when dynamically loading VMs. - * - * @see @ref versioning - */ - EVMC_ABI_VERSION = 11 -}; - - -/** - * The fixed size array of 32 bytes. - * - * 32 bytes of data capable of storing e.g. 256-bit hashes. - */ -typedef struct evmc_bytes32 -{ - /** The 32 bytes. */ - uint8_t bytes[32]; -} evmc_bytes32; - -/** - * The alias for evmc_bytes32 to represent a big-endian 256-bit integer. - */ -typedef struct evmc_bytes32 evmc_uint256be; - -/** Big-endian 160-bit hash suitable for keeping an Ethereum address. */ -typedef struct evmc_address -{ - /** The 20 bytes of the hash. */ - uint8_t bytes[20]; -} evmc_address; - -/** The kind of call-like instruction. */ -enum evmc_call_kind -{ - EVMC_CALL = 0, /**< Request CALL. */ - EVMC_DELEGATECALL = 1, /**< Request DELEGATECALL. Valid since Homestead. - The value param ignored. */ - EVMC_CALLCODE = 2, /**< Request CALLCODE. */ - EVMC_CREATE = 3, /**< Request CREATE. */ - EVMC_CREATE2 = 4 /**< Request CREATE2. Valid since Constantinople.*/ -}; - -/** The flags for ::evmc_message. */ -enum evmc_flags -{ - EVMC_STATIC = 1 /**< Static call mode. */ -}; - -/** - * The message describing an EVM call, including a zero-depth calls from a transaction origin. - * - * Most of the fields are modelled by the section 8. Message Call of the Ethereum Yellow Paper. - */ -struct evmc_message -{ - /** The kind of the call. For zero-depth calls ::EVMC_CALL SHOULD be used. */ - enum evmc_call_kind kind; - - /** - * Additional flags modifying the call execution behavior. - * In the current version the only valid values are ::EVMC_STATIC or 0. - */ - uint32_t flags; - - /** - * The present depth of the message call stack. - * - * Defined as `e` in the Yellow Paper. - */ - int32_t depth; - - /** - * The amount of gas available to the message execution. - * - * Defined as `g` in the Yellow Paper. - */ - int64_t gas; - - /** - * The recipient of the message. - * - * This is the address of the account which storage/balance/nonce is going to be modified - * by the message execution. In case of ::EVMC_CALL, this is also the account where the - * message value evmc_message::value is going to be transferred. - * For ::EVMC_CALLCODE or ::EVMC_DELEGATECALL, this may be different from - * the evmc_message::code_address. - * - * Defined as `r` in the Yellow Paper. - */ - evmc_address recipient; - - /** - * The sender of the message. - * - * The address of the sender of a message call defined as `s` in the Yellow Paper. - * This must be the message recipient of the message at the previous (lower) depth, - * except for the ::EVMC_DELEGATECALL where recipient is the 2 levels above the present depth. - * At the depth 0 this must be the transaction origin. - */ - evmc_address sender; - - /** - * The message input data. - * - * The arbitrary length byte array of the input data of the call, - * defined as `d` in the Yellow Paper. - * This MAY be NULL. - */ - const uint8_t* input_data; - - /** - * The size of the message input data. - * - * If input_data is NULL this MUST be 0. - */ - size_t input_size; - - /** - * The amount of Ether transferred with the message. - * - * This is transferred value for ::EVMC_CALL or apparent value for ::EVMC_DELEGATECALL. - * Defined as `v` or `v~` in the Yellow Paper. - */ - evmc_uint256be value; - - /** - * The optional value used in new contract address construction. - * - * Needed only for a Host to calculate created address when kind is ::EVMC_CREATE2. - * Ignored in evmc_execute_fn(). - */ - evmc_bytes32 create2_salt; - - /** - * The address of the code to be executed. - * - * For ::EVMC_CALLCODE or ::EVMC_DELEGATECALL this may be different from - * the evmc_message::recipient. - * Not required when invoking evmc_execute_fn(), only when invoking evmc_call_fn(). - * Ignored if kind is ::EVMC_CREATE or ::EVMC_CREATE2. - * - * In case of ::EVMC_CAPABILITY_PRECOMPILES implementation, this fields should be inspected - * to identify the requested precompile. - * - * Defined as `c` in the Yellow Paper. - */ - evmc_address code_address; -}; - - -/** The transaction and block data for execution. */ -struct evmc_tx_context -{ - evmc_uint256be tx_gas_price; /**< The transaction gas price. */ - evmc_address tx_origin; /**< The transaction origin account. */ - evmc_address block_coinbase; /**< The miner of the block. */ - int64_t block_number; /**< The block number. */ - int64_t block_timestamp; /**< The block timestamp. */ - int64_t block_gas_limit; /**< The block gas limit. */ - evmc_uint256be block_prev_randao; /**< The block previous RANDAO (EIP-4399). */ - evmc_uint256be chain_id; /**< The blockchain's ChainID. */ - evmc_uint256be block_base_fee; /**< The block base fee per gas (EIP-1559, EIP-3198). */ - evmc_uint256be blob_base_fee; /**< The blob base fee (EIP-7516). */ - const evmc_bytes32* blob_hashes; /**< The array of blob hashes (EIP-4844). */ - size_t blob_hashes_count; /**< The number of blob hashes (EIP-4844). */ -}; - -/** - * @struct evmc_host_context - * The opaque data type representing the Host execution context. - * @see evmc_execute_fn(). - */ -struct evmc_host_context; - -/** - * Get transaction context callback function. - * - * This callback function is used by an EVM to retrieve the transaction and - * block context. - * - * @param context The pointer to the Host execution context. - * @return The transaction context. - */ -typedef struct evmc_tx_context (*evmc_get_tx_context_fn)(struct evmc_host_context* context); - -/** - * Get block hash callback function. - * - * This callback function is used by a VM to query the hash of the header of the given block. - * If the information about the requested block is not available, then this is signalled by - * returning null bytes. - * - * @param context The pointer to the Host execution context. - * @param number The block number. - * @return The block hash or null bytes - * if the information about the block is not available. - */ -typedef evmc_bytes32 (*evmc_get_block_hash_fn)(struct evmc_host_context* context, int64_t number); - -/** - * The execution status code. - * - * Successful execution is represented by ::EVMC_SUCCESS having value 0. - * - * Positive values represent failures defined by VM specifications with generic - * ::EVMC_FAILURE code of value 1. - * - * Status codes with negative values represent VM internal errors - * not provided by EVM specifications. These errors MUST not be passed back - * to the caller. They MAY be handled by the Client in predefined manner - * (see e.g. ::EVMC_REJECTED), otherwise internal errors are not recoverable. - * The generic representant of errors is ::EVMC_INTERNAL_ERROR but - * an EVM implementation MAY return negative status codes that are not defined - * in the EVMC documentation. - * - * @note - * In case new status codes are needed, please create an issue or pull request - * in the EVMC repository (https://github.com/ethereum/evmc). - */ -enum evmc_status_code -{ - /** Execution finished with success. */ - EVMC_SUCCESS = 0, - - /** Generic execution failure. */ - EVMC_FAILURE = 1, - - /** - * Execution terminated with REVERT opcode. - * - * In this case the amount of gas left MAY be non-zero and additional output - * data MAY be provided in ::evmc_result. - */ - EVMC_REVERT = 2, - - /** The execution has run out of gas. */ - EVMC_OUT_OF_GAS = 3, - - /** - * The designated INVALID instruction has been hit during execution. - * - * The EIP-141 (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-141.md) - * defines the instruction 0xfe as INVALID instruction to indicate execution - * abortion coming from high-level languages. This status code is reported - * in case this INVALID instruction has been encountered. - */ - EVMC_INVALID_INSTRUCTION = 4, - - /** An undefined instruction has been encountered. */ - EVMC_UNDEFINED_INSTRUCTION = 5, - - /** - * The execution has attempted to put more items on the EVM stack - * than the specified limit. - */ - EVMC_STACK_OVERFLOW = 6, - - /** Execution of an opcode has required more items on the EVM stack. */ - EVMC_STACK_UNDERFLOW = 7, - - /** Execution has violated the jump destination restrictions. */ - EVMC_BAD_JUMP_DESTINATION = 8, - - /** - * Tried to read outside memory bounds. - * - * An example is RETURNDATACOPY reading past the available buffer. - */ - EVMC_INVALID_MEMORY_ACCESS = 9, - - /** Call depth has exceeded the limit (if any) */ - EVMC_CALL_DEPTH_EXCEEDED = 10, - - /** Tried to execute an operation which is restricted in static mode. */ - EVMC_STATIC_MODE_VIOLATION = 11, - - /** - * A call to a precompiled or system contract has ended with a failure. - * - * An example: elliptic curve functions handed invalid EC points. - */ - EVMC_PRECOMPILE_FAILURE = 12, - - /** - * Contract validation has failed (e.g. due to EVM 1.5 jump validity, - * Casper's purity checker or ewasm contract rules). - */ - EVMC_CONTRACT_VALIDATION_FAILURE = 13, - - /** - * An argument to a state accessing method has a value outside of the - * accepted range of values. - */ - EVMC_ARGUMENT_OUT_OF_RANGE = 14, - - /** - * A WebAssembly `unreachable` instruction has been hit during execution. - */ - EVMC_WASM_UNREACHABLE_INSTRUCTION = 15, - - /** - * A WebAssembly trap has been hit during execution. This can be for many - * reasons, including division by zero, validation errors, etc. - */ - EVMC_WASM_TRAP = 16, - - /** The caller does not have enough funds for value transfer. */ - EVMC_INSUFFICIENT_BALANCE = 17, - - /** EVM implementation generic internal error. */ - EVMC_INTERNAL_ERROR = -1, - - /** - * The execution of the given code and/or message has been rejected - * by the EVM implementation. - * - * This error SHOULD be used to signal that the EVM is not able to or - * willing to execute the given code type or message. - * If an EVM returns the ::EVMC_REJECTED status code, - * the Client MAY try to execute it in other EVM implementation. - * For example, the Client tries running a code in the EVM 1.5. If the - * code is not supported there, the execution falls back to the EVM 1.0. - */ - EVMC_REJECTED = -2, - - /** The VM failed to allocate the amount of memory needed for execution. */ - EVMC_OUT_OF_MEMORY = -3 -}; - -/* Forward declaration. */ -struct evmc_result; - -/** - * Releases resources assigned to an execution result. - * - * This function releases memory (and other resources, if any) assigned to the - * specified execution result making the result object invalid. - * - * @param result The execution result which resources are to be released. The - * result itself it not modified by this function, but becomes - * invalid and user MUST discard it as well. - * This MUST NOT be NULL. - * - * @note - * The result is passed by pointer to avoid (shallow) copy of the ::evmc_result - * struct. Think of this as the best possible C language approximation to - * passing objects by reference. - */ -typedef void (*evmc_release_result_fn)(const struct evmc_result* result); - -/** The EVM code execution result. */ -struct evmc_result -{ - /** The execution status code. */ - enum evmc_status_code status_code; - - /** - * The amount of gas left after the execution. - * - * If evmc_result::status_code is neither ::EVMC_SUCCESS nor ::EVMC_REVERT - * the value MUST be 0. - */ - int64_t gas_left; - - /** - * The refunded gas accumulated from this execution and its sub-calls. - * - * The transaction gas refund limit is not applied. - * If evmc_result::status_code is other than ::EVMC_SUCCESS the value MUST be 0. - */ - int64_t gas_refund; - - /** - * The reference to output data. - * - * The output contains data coming from RETURN opcode (iff evmc_result::code - * field is ::EVMC_SUCCESS) or from REVERT opcode. - * - * The memory containing the output data is owned by EVM and has to be - * freed with evmc_result::release(). - * - * This pointer MAY be NULL. - * If evmc_result::output_size is 0 this pointer MUST NOT be dereferenced. - */ - const uint8_t* output_data; - - /** - * The size of the output data. - * - * If evmc_result::output_data is NULL this MUST be 0. - */ - size_t output_size; - - /** - * The method releasing all resources associated with the result object. - * - * This method (function pointer) is optional (MAY be NULL) and MAY be set - * by the VM implementation. If set it MUST be called by the user once to - * release memory and other resources associated with the result object. - * Once the resources are released the result object MUST NOT be used again. - * - * The suggested code pattern for releasing execution results: - * @code - * struct evmc_result result = ...; - * if (result.release) - * result.release(&result); - * @endcode - * - * @note - * It works similarly to C++ virtual destructor. Attaching the release - * function to the result itself allows VM composition. - */ - evmc_release_result_fn release; - - /** - * The address of the possibly created contract. - * - * The create address may be provided even though the contract creation has failed - * (evmc_result::status_code is not ::EVMC_SUCCESS). This is useful in situations - * when the address is observable, e.g. access to it remains warm. - * In all other cases the address MUST be null bytes. - */ - evmc_address create_address; - - /** - * Reserved data that MAY be used by a evmc_result object creator. - * - * This reserved 4 bytes together with 20 bytes from create_address form - * 24 bytes of memory called "optional data" within evmc_result struct - * to be optionally used by the evmc_result object creator. - * - * @see evmc_result_optional_data, evmc_get_optional_data(). - * - * Also extends the size of the evmc_result to 64 bytes (full cache line). - */ - uint8_t padding[4]; -}; - - -/** - * Check account existence callback function. - * - * This callback function is used by the VM to check if - * there exists an account at given address. - * @param context The pointer to the Host execution context. - * @param address The address of the account the query is about. - * @return true if exists, false otherwise. - */ -typedef bool (*evmc_account_exists_fn)(struct evmc_host_context* context, - const evmc_address* address); - -/** - * Get storage callback function. - * - * This callback function is used by a VM to query the given account storage entry. - * - * @param context The Host execution context. - * @param address The address of the account. - * @param key The index of the account's storage entry. - * @return The storage value at the given storage key or null bytes - * if the account does not exist. - */ -typedef evmc_bytes32 (*evmc_get_storage_fn)(struct evmc_host_context* context, - const evmc_address* address, - const evmc_bytes32* key); - -/** - * Get transient storage callback function. - * - * This callback function is used by a VM to query - * the given account transient storage (EIP-1153) entry. - * - * @param context The Host execution context. - * @param address The address of the account. - * @param key The index of the account's transient storage entry. - * @return The transient storage value at the given storage key or null bytes - * if the account does not exist. - */ -typedef evmc_bytes32 (*evmc_get_transient_storage_fn)(struct evmc_host_context* context, - const evmc_address* address, - const evmc_bytes32* key); - - -/** - * The effect of an attempt to modify a contract storage item. - * - * See @ref storagestatus for additional information about design of this enum - * and analysis of the specification. - * - * For the purpose of explaining the meaning of each element, the following - * notation is used: - * - 0 is zero value, - * - X != 0 (X is any value other than 0), - * - Y != 0, Y != X, (Y is any value other than X and 0), - * - Z != 0, Z != X, Z != X (Z is any value other than Y and X and 0), - * - the "o -> c -> v" triple describes the change status in the context of: - * - o: original value (cold value before a transaction started), - * - c: current storage value, - * - v: new storage value to be set. - * - * The order of elements follows EIPs introducing net storage gas costs: - * - EIP-2200: https://eips.ethereum.org/EIPS/eip-2200, - * - EIP-1283: https://eips.ethereum.org/EIPS/eip-1283. - */ -enum evmc_storage_status -{ - /** - * The new/same value is assigned to the storage item without affecting the cost structure. - * - * The storage value item is either: - * - left unchanged (c == v) or - * - the dirty value (o != c) is modified again (c != v). - * This is the group of cases related to minimal gas cost of only accessing warm storage. - * 0|X -> 0 -> 0 (current value unchanged) - * 0|X|Y -> Y -> Y (current value unchanged) - * 0|X -> Y -> Z (modified previously added/modified value) - * - * This is "catch all remaining" status. I.e. if all other statuses are correctly matched - * this status should be assigned to all remaining cases. - */ - EVMC_STORAGE_ASSIGNED = 0, - - /** - * A new storage item is added by changing - * the current clean zero to a nonzero value. - * 0 -> 0 -> Z - */ - EVMC_STORAGE_ADDED = 1, - - /** - * A storage item is deleted by changing - * the current clean nonzero to the zero value. - * X -> X -> 0 - */ - EVMC_STORAGE_DELETED = 2, - - /** - * A storage item is modified by changing - * the current clean nonzero to other nonzero value. - * X -> X -> Z - */ - EVMC_STORAGE_MODIFIED = 3, - - /** - * A storage item is added by changing - * the current dirty zero to a nonzero value other than the original value. - * X -> 0 -> Z - */ - EVMC_STORAGE_DELETED_ADDED = 4, - - /** - * A storage item is deleted by changing - * the current dirty nonzero to the zero value and the original value is not zero. - * X -> Y -> 0 - */ - EVMC_STORAGE_MODIFIED_DELETED = 5, - - /** - * A storage item is added by changing - * the current dirty zero to the original value. - * X -> 0 -> X - */ - EVMC_STORAGE_DELETED_RESTORED = 6, - - /** - * A storage item is deleted by changing - * the current dirty nonzero to the original zero value. - * 0 -> Y -> 0 - */ - EVMC_STORAGE_ADDED_DELETED = 7, - - /** - * A storage item is modified by changing - * the current dirty nonzero to the original nonzero value other than the current value. - * X -> Y -> X - */ - EVMC_STORAGE_MODIFIED_RESTORED = 8 -}; - - -/** - * Set storage callback function. - * - * This callback function is used by a VM to update the given account storage entry. - * The VM MUST make sure that the account exists. This requirement is only a formality because - * VM implementations only modify storage of the account of the current execution context - * (i.e. referenced by evmc_message::recipient). - * - * @param context The pointer to the Host execution context. - * @param address The address of the account. - * @param key The index of the storage entry. - * @param value The value to be stored. - * @return The effect on the storage item. - */ -typedef enum evmc_storage_status (*evmc_set_storage_fn)(struct evmc_host_context* context, - const evmc_address* address, - const evmc_bytes32* key, - const evmc_bytes32* value); - -/** - * Set transient storage callback function. - * - * This callback function is used by a VM to update - * the given account's transient storage (EIP-1153) entry. - * The VM MUST make sure that the account exists. This requirement is only a formality because - * VM implementations only modify storage of the account of the current execution context - * (i.e. referenced by evmc_message::recipient). - * - * @param context The pointer to the Host execution context. - * @param address The address of the account. - * @param key The index of the transient storage entry. - * @param value The value to be stored. - */ -typedef void (*evmc_set_transient_storage_fn)(struct evmc_host_context* context, - const evmc_address* address, - const evmc_bytes32* key, - const evmc_bytes32* value); - -/** - * Get balance callback function. - * - * This callback function is used by a VM to query the balance of the given account. - * - * @param context The pointer to the Host execution context. - * @param address The address of the account. - * @return The balance of the given account or 0 if the account does not exist. - */ -typedef evmc_uint256be (*evmc_get_balance_fn)(struct evmc_host_context* context, - const evmc_address* address); - -/** - * Get code size callback function. - * - * This callback function is used by a VM to get the size of the code stored - * in the account at the given address. - * - * @param context The pointer to the Host execution context. - * @param address The address of the account. - * @return The size of the code in the account or 0 if the account does not exist. - */ -typedef size_t (*evmc_get_code_size_fn)(struct evmc_host_context* context, - const evmc_address* address); - -/** - * Get code hash callback function. - * - * This callback function is used by a VM to get the keccak256 hash of the code stored - * in the account at the given address. For existing accounts not having a code, this - * function returns keccak256 hash of empty data. - * - * @param context The pointer to the Host execution context. - * @param address The address of the account. - * @return The hash of the code in the account or null bytes if the account does not exist. - */ -typedef evmc_bytes32 (*evmc_get_code_hash_fn)(struct evmc_host_context* context, - const evmc_address* address); - -/** - * Copy code callback function. - * - * This callback function is used by an EVM to request a copy of the code - * of the given account to the memory buffer provided by the EVM. - * The Client MUST copy the requested code, starting with the given offset, - * to the provided memory buffer up to the size of the buffer or the size of - * the code, whichever is smaller. - * - * @param context The pointer to the Host execution context. See ::evmc_host_context. - * @param address The address of the account. - * @param code_offset The offset of the code to copy. - * @param buffer_data The pointer to the memory buffer allocated by the EVM - * to store a copy of the requested code. - * @param buffer_size The size of the memory buffer. - * @return The number of bytes copied to the buffer by the Client. - */ -typedef size_t (*evmc_copy_code_fn)(struct evmc_host_context* context, - const evmc_address* address, - size_t code_offset, - uint8_t* buffer_data, - size_t buffer_size); - -/** - * Selfdestruct callback function. - * - * This callback function is used by an EVM to SELFDESTRUCT given contract. - * The execution of the contract will not be stopped, that is up to the EVM. - * - * @param context The pointer to the Host execution context. See ::evmc_host_context. - * @param address The address of the contract to be selfdestructed. - * @param beneficiary The address where the remaining ETH is going to be transferred. - * @return The information if the given address has not been registered as - * selfdestructed yet. True if registered for the first time, false otherwise. - */ -typedef bool (*evmc_selfdestruct_fn)(struct evmc_host_context* context, - const evmc_address* address, - const evmc_address* beneficiary); - -/** - * Log callback function. - * - * This callback function is used by an EVM to inform about a LOG that happened - * during an EVM bytecode execution. - * - * @param context The pointer to the Host execution context. See ::evmc_host_context. - * @param address The address of the contract that generated the log. - * @param data The pointer to unindexed data attached to the log. - * @param data_size The length of the data. - * @param topics The pointer to the array of topics attached to the log. - * @param topics_count The number of the topics. Valid values are between 0 and 4 inclusively. - */ -typedef void (*evmc_emit_log_fn)(struct evmc_host_context* context, - const evmc_address* address, - const uint8_t* data, - size_t data_size, - const evmc_bytes32 topics[], - size_t topics_count); - -/** - * Access status per EIP-2929: Gas cost increases for state access opcodes. - */ -enum evmc_access_status -{ - /** - * The entry hasn't been accessed before – it's the first access. - */ - EVMC_ACCESS_COLD = 0, - - /** - * The entry is already in accessed_addresses or accessed_storage_keys. - */ - EVMC_ACCESS_WARM = 1 -}; - -/** - * Access account callback function. - * - * This callback function is used by a VM to add the given address - * to accessed_addresses substate (EIP-2929). - * - * @param context The Host execution context. - * @param address The address of the account. - * @return EVMC_ACCESS_WARM if accessed_addresses already contained the address - * or EVMC_ACCESS_COLD otherwise. - */ -typedef enum evmc_access_status (*evmc_access_account_fn)(struct evmc_host_context* context, - const evmc_address* address); - -/** - * Access storage callback function. - * - * This callback function is used by a VM to add the given account storage entry - * to accessed_storage_keys substate (EIP-2929). - * - * @param context The Host execution context. - * @param address The address of the account. - * @param key The index of the account's storage entry. - * @return EVMC_ACCESS_WARM if accessed_storage_keys already contained the key - * or EVMC_ACCESS_COLD otherwise. - */ -typedef enum evmc_access_status (*evmc_access_storage_fn)(struct evmc_host_context* context, - const evmc_address* address, - const evmc_bytes32* key); - -/** - * Pointer to the callback function supporting EVM calls. - * - * @param context The pointer to the Host execution context. - * @param msg The call parameters. - * @return The result of the call. - */ -typedef struct evmc_result (*evmc_call_fn)(struct evmc_host_context* context, - const struct evmc_message* msg); - -/** - * The Host interface. - * - * The set of all callback functions expected by VM instances. This is C - * realisation of vtable for OOP interface (only virtual methods, no data). - * Host implementations SHOULD create constant singletons of this (similarly - * to vtables) to lower the maintenance and memory management cost. - */ -struct evmc_host_interface -{ - /** Check account existence callback function. */ - evmc_account_exists_fn account_exists; - - /** Get storage callback function. */ - evmc_get_storage_fn get_storage; - - /** Set storage callback function. */ - evmc_set_storage_fn set_storage; - - /** Get balance callback function. */ - evmc_get_balance_fn get_balance; - - /** Get code size callback function. */ - evmc_get_code_size_fn get_code_size; - - /** Get code hash callback function. */ - evmc_get_code_hash_fn get_code_hash; - - /** Copy code callback function. */ - evmc_copy_code_fn copy_code; - - /** Selfdestruct callback function. */ - evmc_selfdestruct_fn selfdestruct; - - /** Call callback function. */ - evmc_call_fn call; - - /** Get transaction context callback function. */ - evmc_get_tx_context_fn get_tx_context; - - /** Get block hash callback function. */ - evmc_get_block_hash_fn get_block_hash; - - /** Emit log callback function. */ - evmc_emit_log_fn emit_log; - - /** Access account callback function. */ - evmc_access_account_fn access_account; - - /** Access storage callback function. */ - evmc_access_storage_fn access_storage; - - /** Get transient storage callback function. */ - evmc_get_transient_storage_fn get_transient_storage; - - /** Set transient storage callback function. */ - evmc_set_transient_storage_fn set_transient_storage; -}; - - -/* Forward declaration. */ -struct evmc_vm; - -/** - * Destroys the VM instance. - * - * @param vm The VM instance to be destroyed. - */ -typedef void (*evmc_destroy_fn)(struct evmc_vm* vm); - -/** - * Possible outcomes of evmc_set_option. - */ -enum evmc_set_option_result -{ - EVMC_SET_OPTION_SUCCESS = 0, - EVMC_SET_OPTION_INVALID_NAME = 1, - EVMC_SET_OPTION_INVALID_VALUE = 2 -}; - -/** - * Configures the VM instance. - * - * Allows modifying options of the VM instance. - * Options: - * - code cache behavior: on, off, read-only, ... - * - optimizations, - * - * @param vm The VM instance to be configured. - * @param name The option name. NULL-terminated string. Cannot be NULL. - * @param value The new option value. NULL-terminated string. Cannot be NULL. - * @return The outcome of the operation. - */ -typedef enum evmc_set_option_result (*evmc_set_option_fn)(struct evmc_vm* vm, - char const* name, - char const* value); - - -/** - * EVM revision. - * - * The revision of the EVM specification based on the Ethereum - * upgrade / hard fork codenames. - */ -enum evmc_revision -{ - /** - * The Frontier revision. - * - * The one Ethereum launched with. - */ - EVMC_FRONTIER = 0, - - /** - * The Homestead revision. - * - * https://eips.ethereum.org/EIPS/eip-606 - */ - EVMC_HOMESTEAD = 1, - - /** - * The Tangerine Whistle revision. - * - * https://eips.ethereum.org/EIPS/eip-608 - */ - EVMC_TANGERINE_WHISTLE = 2, - - /** - * The Spurious Dragon revision. - * - * https://eips.ethereum.org/EIPS/eip-607 - */ - EVMC_SPURIOUS_DRAGON = 3, - - /** - * The Byzantium revision. - * - * https://eips.ethereum.org/EIPS/eip-609 - */ - EVMC_BYZANTIUM = 4, - - /** - * The Constantinople revision. - * - * https://eips.ethereum.org/EIPS/eip-1013 - */ - EVMC_CONSTANTINOPLE = 5, - - /** - * The Petersburg revision. - * - * Other names: Constantinople2, ConstantinopleFix. - * - * https://eips.ethereum.org/EIPS/eip-1716 - */ - EVMC_PETERSBURG = 6, - - /** - * The Istanbul revision. - * - * https://eips.ethereum.org/EIPS/eip-1679 - */ - EVMC_ISTANBUL = 7, - - /** - * The Berlin revision. - * - * https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md - */ - EVMC_BERLIN = 8, - - /** - * The London revision. - * - * https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md - */ - EVMC_LONDON = 9, - - /** - * The Paris revision (aka The Merge). - * - * https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/paris.md - */ - EVMC_PARIS = 10, - - /** - * The Shanghai revision. - * - * https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/shanghai.md - */ - EVMC_SHANGHAI = 11, - - /** - * The Cancun revision. - * - * The future next revision after Shanghai. - * https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md - */ - EVMC_CANCUN = 12, - - /** - * The Prague revision. - * - * The future next revision after Cancun. - */ - EVMC_PRAGUE = 13, - - /** The maximum EVM revision supported. */ - EVMC_MAX_REVISION = EVMC_PRAGUE, - - /** - * The latest known EVM revision with finalized specification. - * - * This is handy for EVM tools to always use the latest revision available. - */ - EVMC_LATEST_STABLE_REVISION = EVMC_SHANGHAI -}; - - -/** - * Executes the given code using the input from the message. - * - * This function MAY be invoked multiple times for a single VM instance. - * - * @param vm The VM instance. This argument MUST NOT be NULL. - * @param host The Host interface. This argument MUST NOT be NULL unless - * the @p vm has the ::EVMC_CAPABILITY_PRECOMPILES capability. - * @param context The opaque pointer to the Host execution context. - * This argument MAY be NULL. The VM MUST pass the same - * pointer to the methods of the @p host interface. - * The VM MUST NOT dereference the pointer. - * @param rev The requested EVM specification revision. - * @param msg The call parameters. See ::evmc_message. This argument MUST NOT be NULL. - * @param code The reference to the code to be executed. This argument MAY be NULL. - * @param code_size The length of the code. If @p code is NULL this argument MUST be 0. - * @return The execution result. - */ -typedef struct evmc_result (*evmc_execute_fn)(struct evmc_vm* vm, - const struct evmc_host_interface* host, - struct evmc_host_context* context, - enum evmc_revision rev, - const struct evmc_message* msg, - uint8_t const* code, - size_t code_size); - -/** - * Possible capabilities of a VM. - */ -enum evmc_capabilities -{ - /** - * The VM is capable of executing EVM1 bytecode. - */ - EVMC_CAPABILITY_EVM1 = (1u << 0), - - /** - * The VM is capable of executing ewasm bytecode. - */ - EVMC_CAPABILITY_EWASM = (1u << 1), - - /** - * The VM is capable of executing the precompiled contracts - * defined for the range of code addresses. - * - * The EIP-1352 (https://eips.ethereum.org/EIPS/eip-1352) specifies - * the range 0x000...0000 - 0x000...ffff of addresses - * reserved for precompiled and system contracts. - * - * This capability is **experimental** and MAY be removed without notice. - */ - EVMC_CAPABILITY_PRECOMPILES = (1u << 2) -}; - -/** - * Alias for unsigned integer representing a set of bit flags of EVMC capabilities. - * - * @see evmc_capabilities - */ -typedef uint32_t evmc_capabilities_flagset; - -/** - * Return the supported capabilities of the VM instance. - * - * This function MAY be invoked multiple times for a single VM instance, - * and its value MAY be influenced by calls to evmc_vm::set_option. - * - * @param vm The VM instance. - * @return The supported capabilities of the VM. @see evmc_capabilities. - */ -typedef evmc_capabilities_flagset (*evmc_get_capabilities_fn)(struct evmc_vm* vm); - - -/** - * The VM instance. - * - * Defines the base struct of the VM implementation. - */ -struct evmc_vm -{ - /** - * EVMC ABI version implemented by the VM instance. - * - * Can be used to detect ABI incompatibilities. - * The EVMC ABI version represented by this file is in ::EVMC_ABI_VERSION. - */ - const int abi_version; - - /** - * The name of the EVMC VM implementation. - * - * It MUST be a NULL-terminated not empty string. - * The content MUST be UTF-8 encoded (this implies ASCII encoding is also allowed). - */ - const char* name; - - /** - * The version of the EVMC VM implementation, e.g. "1.2.3b4". - * - * It MUST be a NULL-terminated not empty string. - * The content MUST be UTF-8 encoded (this implies ASCII encoding is also allowed). - */ - const char* version; - - /** - * Pointer to function destroying the VM instance. - * - * This is a mandatory method and MUST NOT be set to NULL. - */ - evmc_destroy_fn destroy; - - /** - * Pointer to function executing a code by the VM instance. - * - * This is a mandatory method and MUST NOT be set to NULL. - */ - evmc_execute_fn execute; - - /** - * A method returning capabilities supported by the VM instance. - * - * The value returned MAY change when different options are set via the set_option() method. - * - * A Client SHOULD only rely on the value returned if it has queried it after - * it has called the set_option(). - * - * This is a mandatory method and MUST NOT be set to NULL. - */ - evmc_get_capabilities_fn get_capabilities; - - /** - * Optional pointer to function modifying VM's options. - * - * If the VM does not support this feature the pointer can be NULL. - */ - evmc_set_option_fn set_option; -}; - -/* END Python CFFI declarations */ - -#ifdef EVMC_DOCUMENTATION -/** - * Example of a function creating an instance of an example EVM implementation. - * - * Each EVM implementation MUST provide a function returning an EVM instance. - * The function SHOULD be named `evmc_create_(void)`. If the VM name contains hyphens - * replaces them with underscores in the function names. - * - * @par Binaries naming convention - * For VMs distributed as shared libraries, the name of the library SHOULD match the VM name. - * The convetional library filename prefixes and extensions SHOULD be ignored by the Client. - * For example, the shared library with the "beta-interpreter" implementation may be named - * `libbeta-interpreter.so`. - * - * @return The VM instance or NULL indicating instance creation failure. - */ -struct evmc_vm* evmc_create_example_vm(void); -#endif - -#ifdef __cplusplus -} -#endif - -#endif // EVM_ASSIGNER_EVMC_EVMC_H_ -/** @} */ diff --git a/evm-assigner/lib/assigner/evmc/evmc.hpp b/evm-assigner/lib/assigner/evmc/evmc.hpp deleted file mode 100644 index 8f411e1609..0000000000 --- a/evm-assigner/lib/assigner/evmc/evmc.hpp +++ /dev/null @@ -1,964 +0,0 @@ -// EVMC: Ethereum Client-VM Connector API. -// Copyright 2018 The EVMC Authors. -// Licensed under the Apache License, Version 2.0. -#ifndef EVM_ASSIGNER_EVMC_EVMC_HPP_ -#define EVM_ASSIGNER_EVMC_EVMC_HPP_ - -#include -#include -#include - -#include -#include -#include -#include -#include - -static_assert(EVMC_LATEST_STABLE_REVISION <= EVMC_MAX_REVISION, - "latest stable revision ill-defined"); - -/// EVMC C++ API - wrappers and bindings for C++ -/// @ingroup cpp -namespace evmc -{ -/// String view of uint8_t chars. -using bytes_view = std::basic_string_view; - -/// The big-endian 160-bit hash suitable for keeping an Ethereum address. -/// -/// This type wraps C ::evmc_address to make sure objects of this type are always initialized. -struct address : evmc_address -{ - /// Default and converting constructor. - /// - /// Initializes bytes to zeros if not other @p init value provided. - constexpr address(evmc_address init = {}) noexcept : evmc_address{init} {} - - /// Converting constructor from unsigned integer value. - /// - /// This constructor assigns the @p v value to the last 8 bytes [12:19] - /// in big-endian order. - constexpr explicit address(uint64_t v) noexcept - : evmc_address{{0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - static_cast(v >> 56), - static_cast(v >> 48), - static_cast(v >> 40), - static_cast(v >> 32), - static_cast(v >> 24), - static_cast(v >> 16), - static_cast(v >> 8), - static_cast(v >> 0)}} - {} - - /// Explicit operator converting to bool. - inline constexpr explicit operator bool() const noexcept; - - /// Implicit operator converting to bytes_view. - inline constexpr operator bytes_view() const noexcept { return {bytes, sizeof(bytes)}; } -}; - -/// The fixed size array of 32 bytes for storing 256-bit EVM values. -/// -/// This type wraps C ::evmc_bytes32 to make sure objects of this type are always initialized. -struct bytes32 : evmc_bytes32 -{ - /// Default and converting constructor. - /// - /// Initializes bytes to zeros if not other @p init value provided. - constexpr bytes32(evmc_bytes32 init = {}) noexcept : evmc_bytes32{init} {} - - /// Converting constructor from unsigned integer value. - /// - /// This constructor assigns the @p v value to the last 8 bytes [24:31] - /// in big-endian order. - constexpr explicit bytes32(uint64_t v) noexcept - : evmc_bytes32{{0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - static_cast(v >> 56), - static_cast(v >> 48), - static_cast(v >> 40), - static_cast(v >> 32), - static_cast(v >> 24), - static_cast(v >> 16), - static_cast(v >> 8), - static_cast(v >> 0)}} - {} - - /// Explicit operator converting to bool. - inline constexpr explicit operator bool() const noexcept; - - /// Implicit operator converting to bytes_view. - inline constexpr operator bytes_view() const noexcept { return {bytes, sizeof(bytes)}; } -}; - -/// The alias for evmc::bytes32 to represent a big-endian 256-bit integer. -using uint256be = bytes32; - - -/// Loads 64 bits / 8 bytes of data from the given @p data array in big-endian order. -inline constexpr uint64_t load64be(const uint8_t* data) noexcept -{ - return (uint64_t{data[0]} << 56) | (uint64_t{data[1]} << 48) | (uint64_t{data[2]} << 40) | - (uint64_t{data[3]} << 32) | (uint64_t{data[4]} << 24) | (uint64_t{data[5]} << 16) | - (uint64_t{data[6]} << 8) | uint64_t{data[7]}; -} - -/// Loads 64 bits / 8 bytes of data from the given @p data array in little-endian order. -inline constexpr uint64_t load64le(const uint8_t* data) noexcept -{ - return uint64_t{data[0]} | (uint64_t{data[1]} << 8) | (uint64_t{data[2]} << 16) | - (uint64_t{data[3]} << 24) | (uint64_t{data[4]} << 32) | (uint64_t{data[5]} << 40) | - (uint64_t{data[6]} << 48) | (uint64_t{data[7]} << 56); -} - -/// Loads 32 bits / 4 bytes of data from the given @p data array in big-endian order. -inline constexpr uint32_t load32be(const uint8_t* data) noexcept -{ - return (uint32_t{data[0]} << 24) | (uint32_t{data[1]} << 16) | (uint32_t{data[2]} << 8) | - uint32_t{data[3]}; -} - -/// Loads 32 bits / 4 bytes of data from the given @p data array in little-endian order. -inline constexpr uint32_t load32le(const uint8_t* data) noexcept -{ - return uint32_t{data[0]} | (uint32_t{data[1]} << 8) | (uint32_t{data[2]} << 16) | - (uint32_t{data[3]} << 24); -} - -namespace fnv -{ -constexpr auto prime = 0x100000001b3; ///< The 64-bit FNV prime number. -constexpr auto offset_basis = 0xcbf29ce484222325; ///< The 64-bit FNV offset basis. - -/// The hashing transformation for 64-bit inputs based on the FNV-1a formula. -inline constexpr uint64_t fnv1a_by64(uint64_t h, uint64_t x) noexcept -{ - return (h ^ x) * prime; -} -} // namespace fnv - - -/// The "equal to" comparison operator for the evmc::address type. -inline constexpr bool operator==(const address& a, const address& b) noexcept -{ - return load64le(&a.bytes[0]) == load64le(&b.bytes[0]) && - load64le(&a.bytes[8]) == load64le(&b.bytes[8]) && - load32le(&a.bytes[16]) == load32le(&b.bytes[16]); -} - -/// The "not equal to" comparison operator for the evmc::address type. -inline constexpr bool operator!=(const address& a, const address& b) noexcept -{ - return !(a == b); -} - -/// The "less than" comparison operator for the evmc::address type. -inline constexpr bool operator<(const address& a, const address& b) noexcept -{ - return load64be(&a.bytes[0]) < load64be(&b.bytes[0]) || - (load64be(&a.bytes[0]) == load64be(&b.bytes[0]) && - (load64be(&a.bytes[8]) < load64be(&b.bytes[8]) || - (load64be(&a.bytes[8]) == load64be(&b.bytes[8]) && - load32be(&a.bytes[16]) < load32be(&b.bytes[16])))); -} - -/// The "greater than" comparison operator for the evmc::address type. -inline constexpr bool operator>(const address& a, const address& b) noexcept -{ - return b < a; -} - -/// The "less than or equal to" comparison operator for the evmc::address type. -inline constexpr bool operator<=(const address& a, const address& b) noexcept -{ - return !(b < a); -} - -/// The "greater than or equal to" comparison operator for the evmc::address type. -inline constexpr bool operator>=(const address& a, const address& b) noexcept -{ - return !(a < b); -} - -/// The "equal to" comparison operator for the evmc::bytes32 type. -inline constexpr bool operator==(const bytes32& a, const bytes32& b) noexcept -{ - return load64le(&a.bytes[0]) == load64le(&b.bytes[0]) && - load64le(&a.bytes[8]) == load64le(&b.bytes[8]) && - load64le(&a.bytes[16]) == load64le(&b.bytes[16]) && - load64le(&a.bytes[24]) == load64le(&b.bytes[24]); -} - -/// The "not equal to" comparison operator for the evmc::bytes32 type. -inline constexpr bool operator!=(const bytes32& a, const bytes32& b) noexcept -{ - return !(a == b); -} - -/// The "less than" comparison operator for the evmc::bytes32 type. -inline constexpr bool operator<(const bytes32& a, const bytes32& b) noexcept -{ - return load64be(&a.bytes[0]) < load64be(&b.bytes[0]) || - (load64be(&a.bytes[0]) == load64be(&b.bytes[0]) && - (load64be(&a.bytes[8]) < load64be(&b.bytes[8]) || - (load64be(&a.bytes[8]) == load64be(&b.bytes[8]) && - (load64be(&a.bytes[16]) < load64be(&b.bytes[16]) || - (load64be(&a.bytes[16]) == load64be(&b.bytes[16]) && - load64be(&a.bytes[24]) < load64be(&b.bytes[24])))))); -} - -/// The "greater than" comparison operator for the evmc::bytes32 type. -inline constexpr bool operator>(const bytes32& a, const bytes32& b) noexcept -{ - return b < a; -} - -/// The "less than or equal to" comparison operator for the evmc::bytes32 type. -inline constexpr bool operator<=(const bytes32& a, const bytes32& b) noexcept -{ - return !(b < a); -} - -/// The "greater than or equal to" comparison operator for the evmc::bytes32 type. -inline constexpr bool operator>=(const bytes32& a, const bytes32& b) noexcept -{ - return !(a < b); -} - -/// Checks if the given address is the zero address. -inline constexpr bool is_zero(const address& a) noexcept -{ - return a == address{}; -} - -inline constexpr address::operator bool() const noexcept -{ - return !is_zero(*this); -} - -/// Checks if the given bytes32 object has all zero bytes. -inline constexpr bool is_zero(const bytes32& a) noexcept -{ - return a == bytes32{}; -} - -inline constexpr bytes32::operator bool() const noexcept -{ - return !is_zero(*this); -} - -namespace literals -{ -/// Converts a raw literal into value of type T. -/// -/// This function is expected to be used on literals in constexpr context only. -/// In case the input is invalid the std::terminate() is called. -/// TODO(c++20): Use consteval. -template -constexpr T parse(std::string_view s) noexcept -{ - return from_hex(s).value(); -} - -/// Literal for evmc::address. -constexpr address operator""_address(const char* s) noexcept -{ - return parse
(s); -} - -/// Literal for evmc::bytes32. -constexpr bytes32 operator""_bytes32(const char* s) noexcept -{ - return parse(s); -} -} // namespace literals - -using namespace literals; - - -/// @copydoc evmc_status_code_to_string -inline const char* to_string(evmc_status_code status_code) noexcept -{ - return evmc_status_code_to_string(status_code); -} - -/// @copydoc evmc_revision_to_string -inline const char* to_string(evmc_revision rev) noexcept -{ - return evmc_revision_to_string(rev); -} - - -/// Alias for evmc_make_result(). -constexpr auto make_result = evmc_make_result; - -/// @copydoc evmc_result -/// -/// This is a RAII wrapper for evmc_result and objects of this type -/// automatically release attached resources. -class Result : private evmc_result -{ -public: - using evmc_result::create_address; - using evmc_result::gas_left; - using evmc_result::gas_refund; - using evmc_result::output_data; - using evmc_result::output_size; - using evmc_result::status_code; - - /// Creates the result from the provided arguments. - /// - /// The provided output is copied to memory allocated with malloc() - /// and the evmc_result::release function is set to one invoking free(). - /// - /// @param _status_code The status code. - /// @param _gas_left The amount of gas left. - /// @param _gas_refund The amount of refunded gas. - /// @param _output_data The pointer to the output. - /// @param _output_size The output size. - explicit Result(evmc_status_code _status_code, - int64_t _gas_left, - int64_t _gas_refund, - const uint8_t* _output_data, - size_t _output_size) noexcept - : evmc_result{make_result(_status_code, _gas_left, _gas_refund, _output_data, _output_size)} - {} - - /// Creates the result without output. - /// - /// @param _status_code The status code. - /// @param _gas_left The amount of gas left. - /// @param _gas_refund The amount of refunded gas. - explicit Result(evmc_status_code _status_code = EVMC_INTERNAL_ERROR, - int64_t _gas_left = 0, - int64_t _gas_refund = 0) noexcept - : evmc_result{make_result(_status_code, _gas_left, _gas_refund, nullptr, 0)} - {} - - /// Creates the result of contract creation. - /// - /// @param _status_code The status code. - /// @param _gas_left The amount of gas left. - /// @param _gas_refund The amount of refunded gas. - /// @param _create_address The address of the possibly created account. - explicit Result(evmc_status_code _status_code, - int64_t _gas_left, - int64_t _gas_refund, - const evmc_address& _create_address) noexcept - : evmc_result{make_result(_status_code, _gas_left, _gas_refund, nullptr, 0)} - { - create_address = _create_address; - } - - /// Converting constructor from raw evmc_result. - /// - /// This object takes ownership of the resources of @p res. - explicit Result(const evmc_result& res) noexcept : evmc_result{res} {} - - /// Destructor responsible for automatically releasing attached resources. - ~Result() noexcept - { - if (release != nullptr) - release(this); - } - - /// Move constructor. - Result(Result&& other) noexcept : evmc_result{other} - { - other.release = nullptr; // Disable releasing of the rvalue object. - } - - /// Move assignment operator. - /// - /// The self-assignment MUST never happen. - /// - /// @param other The other result object. - /// @return The reference to the left-hand side object. - Result& operator=(Result&& other) noexcept - { - this->~Result(); // Release this object. - static_cast(*this) = other; // Copy data. - other.release = nullptr; // Disable releasing of the rvalue object. - return *this; - } - - /// Access the result object as a referenced to ::evmc_result. - evmc_result& raw() noexcept { return *this; } - - /// Access the result object as a const referenced to ::evmc_result. - const evmc_result& raw() const noexcept { return *this; } - - /// Releases the ownership and returns the raw copy of evmc_result. - /// - /// This method drops the ownership of the result - /// (result's resources are not going to be released when this object is destructed). - /// It is the caller's responsibility having the returned copy of the result to release it. - /// This object MUST NOT be used after this method is invoked. - /// - /// @return The copy of this object converted to raw evmc_result. - evmc_result release_raw() noexcept - { - const auto out = evmc_result{*this}; // Copy data. - this->release = nullptr; // Disable releasing of this object. - return out; - } -}; - - -/// The EVMC Host interface -class HostInterface -{ -public: - virtual ~HostInterface() noexcept = default; - - /// @copydoc evmc_host_interface::account_exists - virtual bool account_exists(const address& addr) noexcept = 0; - - /// @copydoc evmc_host_interface::get_storage - virtual bytes32 get_storage(const address& addr, const bytes32& key) noexcept = 0; - - /// @copydoc evmc_host_interface::set_storage - virtual evmc_storage_status set_storage(const address& addr, - const bytes32& key, - const bytes32& value) noexcept = 0; - - /// @copydoc evmc_host_interface::get_balance - virtual uint256be get_balance(const address& addr) noexcept = 0; - - /// @copydoc evmc_host_interface::get_code_size - virtual size_t get_code_size(const address& addr) noexcept = 0; - - /// @copydoc evmc_host_interface::get_code_hash - virtual bytes32 get_code_hash(const address& addr) noexcept = 0; - - /// @copydoc evmc_host_interface::copy_code - virtual size_t copy_code(const address& addr, - size_t code_offset, - uint8_t* buffer_data, - size_t buffer_size) noexcept = 0; - - /// @copydoc evmc_host_interface::selfdestruct - virtual bool selfdestruct(const address& addr, const address& beneficiary) noexcept = 0; - - /// @copydoc evmc_host_interface::call - virtual Result call(const evmc_message& msg) noexcept = 0; - - /// @copydoc evmc_host_interface::get_tx_context - virtual evmc_tx_context get_tx_context() const noexcept = 0; - - /// @copydoc evmc_host_interface::get_block_hash - virtual bytes32 get_block_hash(int64_t block_number) const noexcept = 0; - - /// @copydoc evmc_host_interface::emit_log - virtual void emit_log(const address& addr, - const uint8_t* data, - size_t data_size, - const bytes32 topics[], - size_t num_topics) noexcept = 0; - - /// @copydoc evmc_host_interface::access_account - virtual evmc_access_status access_account(const address& addr) noexcept = 0; - - /// @copydoc evmc_host_interface::access_storage - virtual evmc_access_status access_storage(const address& addr, const bytes32& key) noexcept = 0; - - /// @copydoc evmc_host_interface::get_transient_storage - virtual bytes32 get_transient_storage(const address& addr, - const bytes32& key) noexcept = 0; - - /// @copydoc evmc_host_interface::set_transient_storage - virtual void set_transient_storage(const address& addr, - const bytes32& key, - const bytes32& value) noexcept = 0; -}; - - -/// Wrapper around EVMC host context / host interface. -/// -/// To be used by VM implementations as better alternative to using ::evmc_host_context directly. -class HostContext : public HostInterface -{ - const evmc_host_interface* host = nullptr; - evmc_host_context* context = nullptr; - -public: - /// Default constructor for null Host context. - HostContext() = default; - - /// Constructor from the EVMC Host primitives. - /// @param interface The reference to the Host interface. - /// @param ctx The pointer to the Host context object. This parameter MAY be null. - HostContext(const evmc_host_interface& interface, evmc_host_context* ctx) noexcept - : host{&interface}, context{ctx} - {} - - bool account_exists(const address& address) noexcept final - { - return host->account_exists(context, &address); - } - - bytes32 get_storage(const address& address, const bytes32& key) noexcept final - { - return host->get_storage(context, &address, &key); - } - - evmc_storage_status set_storage(const address& address, - const bytes32& key, - const bytes32& value) noexcept final - { - return host->set_storage(context, &address, &key, &value); - } - - uint256be get_balance(const address& address) noexcept final - { - return host->get_balance(context, &address); - } - - size_t get_code_size(const address& address) noexcept final - { - return host->get_code_size(context, &address); - } - - bytes32 get_code_hash(const address& address) noexcept final - { - return host->get_code_hash(context, &address); - } - - size_t copy_code(const address& address, - size_t code_offset, - uint8_t* buffer_data, - size_t buffer_size) noexcept final - { - return host->copy_code(context, &address, code_offset, buffer_data, buffer_size); - } - - bool selfdestruct(const address& addr, const address& beneficiary) noexcept final - { - return host->selfdestruct(context, &addr, &beneficiary); - } - - Result call(const evmc_message& message) noexcept final - { - return Result{host->call(context, &message)}; - } - - /// @copydoc HostInterface::get_tx_context() - evmc_tx_context get_tx_context() const noexcept final { return host->get_tx_context(context); } - - bytes32 get_block_hash(int64_t number) const noexcept final - { - return host->get_block_hash(context, number); - } - - void emit_log(const address& addr, - const uint8_t* data, - size_t data_size, - const bytes32 topics[], - size_t topics_count) noexcept final - { - host->emit_log(context, &addr, data, data_size, topics, topics_count); - } - - evmc_access_status access_account(const address& address) noexcept final - { - return host->access_account(context, &address); - } - - evmc_access_status access_storage(const address& address, const bytes32& key) noexcept final - { - return host->access_storage(context, &address, &key); - } - - bytes32 get_transient_storage(const address& address, const bytes32& key) noexcept final - { - return host->get_transient_storage(context, &address, &key); - } - - void set_transient_storage(const address& address, - const bytes32& key, - const bytes32& value) noexcept final - { - host->set_transient_storage(context, &address, &key, &value); - } -}; - - -/// Abstract class to be used by Host implementations. -/// -/// When implementing EVMC Host, you can directly inherit from the evmc::Host class. -/// This way your implementation will be simpler by avoiding manual handling -/// of the ::evmc_host_context and the ::evmc_host_interface. -class Host : public HostInterface -{ -public: - /// Provides access to the global host interface. - /// @returns Reference to the host interface object. - static const evmc_host_interface& get_interface() noexcept; - - /// Converts the Host object to the opaque host context pointer. - /// @returns Pointer to evmc_host_context. - evmc_host_context* to_context() noexcept { return reinterpret_cast(this); } - - /// Converts the opaque host context pointer back to the original Host object. - /// @tparam DerivedClass The class derived from the Host class. - /// @param context The opaque host context pointer. - /// @returns The pointer to DerivedClass. - template - static DerivedClass* from_context(evmc_host_context* context) noexcept - { - // Get pointer of the Host base class. - auto* h = reinterpret_cast(context); - - // Additional downcast, only possible if DerivedClass inherits from Host. - return static_cast(h); - } -}; - - -/// @copybrief evmc_vm -/// -/// This is a RAII wrapper for evmc_vm, and object of this type -/// automatically destroys the VM instance. -class VM -{ -public: - VM() noexcept = default; - - /// Converting constructor from evmc_vm. - explicit VM(evmc_vm* vm) noexcept : m_instance{vm} {} - - /// Destructor responsible for automatically destroying the VM instance. - ~VM() noexcept - { - if (m_instance != nullptr) - m_instance->destroy(m_instance); - } - - VM(const VM&) = delete; - VM& operator=(const VM&) = delete; - - /// Move constructor. - VM(VM&& other) noexcept : m_instance{other.m_instance} { other.m_instance = nullptr; } - - /// Move assignment operator. - VM& operator=(VM&& other) noexcept - { - this->~VM(); - m_instance = other.m_instance; - other.m_instance = nullptr; - return *this; - } - - /// The constructor that captures a VM instance and configures the instance - /// with the provided list of options. - inline VM(evmc_vm* vm, - std::initializer_list> options) noexcept; - - /// Checks if contains a valid pointer to the VM instance. - explicit operator bool() const noexcept { return m_instance != nullptr; } - - /// Checks whenever the VM instance is ABI compatible with the current EVMC API. - bool is_abi_compatible() const noexcept { return m_instance->abi_version == EVMC_ABI_VERSION; } - - /// @copydoc evmc_vm::name - char const* name() const noexcept { return m_instance->name; } - - /// @copydoc evmc_vm::version - char const* version() const noexcept { return m_instance->version; } - - /// Checks if the VM has the given capability. - bool has_capability(evmc_capabilities capability) const noexcept - { - return (get_capabilities() & static_cast(capability)) != 0; - } - - /// @copydoc evmc_vm::get_capabilities - evmc_capabilities_flagset get_capabilities() const noexcept - { - return m_instance->get_capabilities(m_instance); - } - - /// @copydoc evmc_set_option() - evmc_set_option_result set_option(const char name[], const char value[]) noexcept - { - return evmc_set_option(m_instance, name, value); - } - - /// @copydoc evmc_execute() - Result execute(const evmc_host_interface& host, - evmc_host_context* ctx, - evmc_revision rev, - const evmc_message& msg, - const uint8_t* code, - size_t code_size) noexcept - { - return Result{m_instance->execute(m_instance, &host, ctx, rev, &msg, code, code_size)}; - } - - /// Convenient variant of the VM::execute() that takes reference to evmc::Host class. - Result execute(Host& host, - evmc_revision rev, - const evmc_message& msg, - const uint8_t* code, - size_t code_size) noexcept - { - return execute(Host::get_interface(), host.to_context(), rev, msg, code, code_size); - } - - /// Executes code without the Host context. - /// - /// The same as - /// execute(const evmc_host_interface&, evmc_host_context*, evmc_revision, - /// const evmc_message&, const uint8_t*, size_t), - /// but without providing the Host context and interface. - /// This method is for experimental precompiles support where execution is - /// guaranteed not to require any Host access. - Result execute(evmc_revision rev, - const evmc_message& msg, - const uint8_t* code, - size_t code_size) noexcept - { - return Result{ - m_instance->execute(m_instance, nullptr, nullptr, rev, &msg, code, code_size)}; - } - - /// Returns the pointer to C EVMC struct representing the VM. - /// - /// Gives access to the C EVMC VM struct to allow advanced interaction with the VM not supported - /// by the C++ interface. Use as the last resort. - /// This object still owns the VM after returning the pointer. The returned pointer MAY be null. - evmc_vm* get_raw_pointer() const noexcept { return m_instance; } - -private: - evmc_vm* m_instance = nullptr; -}; - -inline VM::VM(evmc_vm* vm, - std::initializer_list> options) noexcept - : m_instance{vm} -{ - // This constructor is implemented outside of the class definition to workaround a doxygen bug. - for (const auto& option : options) - set_option(option.first, option.second); -} - - -namespace internal -{ -inline bool account_exists(evmc_host_context* h, const evmc_address* addr) noexcept -{ - return Host::from_context(h)->account_exists(*addr); -} - -inline evmc_bytes32 get_storage(evmc_host_context* h, - const evmc_address* addr, - const evmc_bytes32* key) noexcept -{ - return Host::from_context(h)->get_storage(*addr, *key); -} - -inline evmc_storage_status set_storage(evmc_host_context* h, - const evmc_address* addr, - const evmc_bytes32* key, - const evmc_bytes32* value) noexcept -{ - return Host::from_context(h)->set_storage(*addr, *key, *value); -} - -inline evmc_uint256be get_balance(evmc_host_context* h, const evmc_address* addr) noexcept -{ - return Host::from_context(h)->get_balance(*addr); -} - -inline size_t get_code_size(evmc_host_context* h, const evmc_address* addr) noexcept -{ - return Host::from_context(h)->get_code_size(*addr); -} - -inline evmc_bytes32 get_code_hash(evmc_host_context* h, const evmc_address* addr) noexcept -{ - return Host::from_context(h)->get_code_hash(*addr); -} - -inline size_t copy_code(evmc_host_context* h, - const evmc_address* addr, - size_t code_offset, - uint8_t* buffer_data, - size_t buffer_size) noexcept -{ - return Host::from_context(h)->copy_code(*addr, code_offset, buffer_data, buffer_size); -} - -inline bool selfdestruct(evmc_host_context* h, - const evmc_address* addr, - const evmc_address* beneficiary) noexcept -{ - return Host::from_context(h)->selfdestruct(*addr, *beneficiary); -} - -inline evmc_result call(evmc_host_context* h, const evmc_message* msg) noexcept -{ - return Host::from_context(h)->call(*msg).release_raw(); -} - -inline evmc_tx_context get_tx_context(evmc_host_context* h) noexcept -{ - return Host::from_context(h)->get_tx_context(); -} - -inline evmc_bytes32 get_block_hash(evmc_host_context* h, int64_t block_number) noexcept -{ - return Host::from_context(h)->get_block_hash(block_number); -} - -inline void emit_log(evmc_host_context* h, - const evmc_address* addr, - const uint8_t* data, - size_t data_size, - const evmc_bytes32 topics[], - size_t num_topics) noexcept -{ - Host::from_context(h)->emit_log(*addr, data, data_size, static_cast(topics), - num_topics); -} - -inline evmc_access_status access_account(evmc_host_context* h, const evmc_address* addr) noexcept -{ - return Host::from_context(h)->access_account(*addr); -} - -inline evmc_access_status access_storage(evmc_host_context* h, - const evmc_address* addr, - const evmc_bytes32* key) noexcept -{ - return Host::from_context(h)->access_storage(*addr, *key); -} - -inline evmc_bytes32 get_transient_storage(evmc_host_context* h, - const evmc_address* addr, - const evmc_bytes32* key) noexcept -{ - return Host::from_context(h)->get_transient_storage(*addr, *key); -} - -inline void set_transient_storage(evmc_host_context* h, - const evmc_address* addr, - const evmc_bytes32* key, - const evmc_bytes32* value) noexcept -{ - Host::from_context(h)->set_transient_storage(*addr, *key, *value); -} -} // namespace internal - -inline const evmc_host_interface& Host::get_interface() noexcept -{ - static constexpr evmc_host_interface interface = { - ::evmc::internal::account_exists, - ::evmc::internal::get_storage, - ::evmc::internal::set_storage, - ::evmc::internal::get_balance, - ::evmc::internal::get_code_size, - ::evmc::internal::get_code_hash, - ::evmc::internal::copy_code, - ::evmc::internal::selfdestruct, - ::evmc::internal::call, - ::evmc::internal::get_tx_context, - ::evmc::internal::get_block_hash, - ::evmc::internal::emit_log, - ::evmc::internal::access_account, - ::evmc::internal::access_storage, - ::evmc::internal::get_transient_storage, - ::evmc::internal::set_transient_storage, - }; - return interface; -} -} // namespace evmc - - -/// "Stream out" operator implementation for ::evmc_status_code. -/// -/// @note This is defined in global namespace to match ::evmc_status_code definition and allow -/// convenient operator overloading usage. -inline std::ostream& operator<<(std::ostream& os, evmc_status_code status_code) -{ - return os << evmc::to_string(status_code); -} - -/// "Stream out" operator implementation for ::evmc_revision. -/// -/// @note This is defined in global namespace to match ::evmc_revision definition and allow -/// convenient operator overloading usage. -inline std::ostream& operator<<(std::ostream& os, evmc_revision rev) -{ - return os << evmc::to_string(rev); -} - -namespace std -{ -/// Hash operator template specialization for evmc::address. Needed for unordered containers. -template <> -struct hash -{ - /// Hash operator using FNV1a-based folding. - constexpr size_t operator()(const evmc::address& s) const noexcept - { - using namespace evmc; - using namespace fnv; - return static_cast(fnv1a_by64( - fnv1a_by64(fnv1a_by64(fnv::offset_basis, load64le(&s.bytes[0])), load64le(&s.bytes[8])), - load32le(&s.bytes[16]))); - } -}; - -/// Hash operator template specialization for evmc::bytes32. Needed for unordered containers. -template <> -struct hash -{ - /// Hash operator using FNV1a-based folding. - constexpr size_t operator()(const evmc::bytes32& s) const noexcept - { - using namespace evmc; - using namespace fnv; - return static_cast( - fnv1a_by64(fnv1a_by64(fnv1a_by64(fnv1a_by64(fnv::offset_basis, load64le(&s.bytes[0])), - load64le(&s.bytes[8])), - load64le(&s.bytes[16])), - load64le(&s.bytes[24]))); - } -}; -} // namespace std - -#endif // EVM_ASSIGNER_EVMC_EVMC_HPP_ diff --git a/evm-assigner/lib/assigner/evmc/filter_iterator.hpp b/evm-assigner/lib/assigner/evmc/filter_iterator.hpp deleted file mode 100644 index 0a349fc93a..0000000000 --- a/evm-assigner/lib/assigner/evmc/filter_iterator.hpp +++ /dev/null @@ -1,105 +0,0 @@ -// EVMC: Ethereum Client-VM Connector API. -// Copyright 2022 The EVMC Authors. -// Licensed under the Apache License, Version 2.0. -#pragma once - -#include - -namespace evmc -{ -/// The constexpr variant of std::isspace(). -inline constexpr bool isspace(char ch) noexcept -{ - // Implementation taken from LLVM's libc. - return ch == ' ' || (static_cast(ch) - '\t') < 5; -} - -/// Checks if a character is not a white space. -inline constexpr bool is_not_space(char ch) noexcept -{ - return !isspace(ch); -} - -/// The filter iterator adaptor creates a view of an iterator range in which some elements of the -/// range are skipped. A predicate function controls which elements are skipped. When the predicate -/// is applied to an element, if it returns true then the element is retained and if it returns -/// false then the element is skipped over. When skipping over elements, it is necessary for the -/// filter adaptor to know when to stop so as to avoid going past the end of the underlying range. -/// A filter iterator is therefore constructed with pair of iterators indicating the range of -/// elements in the unfiltered sequence to be traversed. -/// -/// Similar to boost::filter_iterator. -template ::value_type) noexcept> -struct filter_iterator -{ - /// The iterator difference type. - using difference_type = typename std::iterator_traits::difference_type; - - /// The iterator value type. - using value_type = typename std::iterator_traits::value_type; - - /// The iterator pointer type. - using pointer = typename std::iterator_traits::pointer; - - /// The iterator reference type. - using reference = typename std::iterator_traits::reference; - - /// The iterator category. - using iterator_category = std::input_iterator_tag; - -private: - BaseIterator base; - BaseIterator base_end; - value_type value; - - constexpr void forward_to_next_value() noexcept - { - for (; base != base_end; ++base) - { - value = *base; - if (predicate(value)) - break; - } - } - -public: - /// The constructor of the base iterator pair. - constexpr filter_iterator(BaseIterator it, BaseIterator end) noexcept : base{it}, base_end{end} - { - forward_to_next_value(); - } - - /// The dereference operator. - constexpr auto operator*() noexcept - { - // We should not read from an input base iterator twice. So the only read is in - // forward_to_next_value() and here we return the cached value. - return value; - } - - /// The increment operator. - constexpr void operator++() noexcept - { - ++base; - forward_to_next_value(); - } - - /// The equality operator. - constexpr bool operator==(const filter_iterator& o) const noexcept { return base == o.base; } - - /// The inequality operator. - constexpr bool operator!=(const filter_iterator& o) const noexcept { return base != o.base; } -}; - -/// The input filter iterator which skips whitespace characters from the base input iterator. -template -struct skip_space_iterator : filter_iterator -{ - using filter_iterator::filter_iterator; -}; - -/// Class template argument deduction guide. -template -skip_space_iterator(BaseIterator, BaseIterator) -> skip_space_iterator; -} // namespace evmc diff --git a/evm-assigner/lib/assigner/evmc/helpers.h b/evm-assigner/lib/assigner/evmc/helpers.h deleted file mode 100644 index f00f5d89e9..0000000000 --- a/evm-assigner/lib/assigner/evmc/helpers.h +++ /dev/null @@ -1,318 +0,0 @@ -// EVMC: Ethereum Client-VM Connector API. -// Copyright 2018 The EVMC Authors. -// Licensed under the Apache License, Version 2.0. - -/** - * EVMC Helpers - * - * A collection of C helper functions for invoking a VM instance methods. - * These are convenient for languages where invoking function pointers - * is "ugly" or impossible (such as Go). - * - * @defgroup helpers EVMC Helpers - * @{ - */ -#ifndef EVM_ASSIGNER_EVMC_HELPERS_H_ -#define EVM_ASSIGNER_EVMC_HELPERS_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#ifdef __GNUC__ -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wold-style-cast" -#endif -#endif - -/** - * Returns true if the VM has a compatible ABI version. - */ -static inline bool evmc_is_abi_compatible(struct evmc_vm* vm) -{ - return vm->abi_version == EVMC_ABI_VERSION; -} - -/** - * Returns the name of the VM. - */ -static inline const char* evmc_vm_name(struct evmc_vm* vm) -{ - return vm->name; -} - -/** - * Returns the version of the VM. - */ -static inline const char* evmc_vm_version(struct evmc_vm* vm) -{ - return vm->version; -} - -/** - * Checks if the VM has the given capability. - * - * @see evmc_get_capabilities_fn - */ -static inline bool evmc_vm_has_capability(struct evmc_vm* vm, enum evmc_capabilities capability) -{ - return (vm->get_capabilities(vm) & (evmc_capabilities_flagset)capability) != 0; -} - -/** - * Destroys the VM instance. - * - * @see evmc_destroy_fn - */ -static inline void evmc_destroy(struct evmc_vm* vm) -{ - vm->destroy(vm); -} - -/** - * Sets the option for the VM, if the feature is supported by the VM. - * - * @see evmc_set_option_fn - */ -static inline enum evmc_set_option_result evmc_set_option(struct evmc_vm* vm, - char const* name, - char const* value) -{ - if (vm->set_option) - return vm->set_option(vm, name, value); - return EVMC_SET_OPTION_INVALID_NAME; -} - -/** - * Executes code in the VM instance. - * - * @see evmc_execute_fn. - */ -static inline struct evmc_result evmc_execute(struct evmc_vm* vm, - const struct evmc_host_interface* host, - struct evmc_host_context* context, - enum evmc_revision rev, - const struct evmc_message* msg, - uint8_t const* code, - size_t code_size) -{ - return vm->execute(vm, host, context, rev, msg, code, code_size); -} - -/// The evmc_result release function using free() for releasing the memory. -/// -/// This function is used in the evmc_make_result(), -/// but may be also used in other case if convenient. -/// -/// @param result The result object. -static void evmc_free_result_memory(const struct evmc_result* result) -{ - free((uint8_t*)result->output_data); -} - -/// Creates the result from the provided arguments. -/// -/// The provided output is copied to memory allocated with malloc() -/// and the evmc_result::release function is set to one invoking free(). -/// -/// In case of memory allocation failure, the result has all fields zeroed -/// and only evmc_result::status_code is set to ::EVMC_OUT_OF_MEMORY internal error. -/// -/// @param status_code The status code. -/// @param gas_left The amount of gas left. -/// @param gas_refund The amount of refunded gas. -/// @param output_data The pointer to the output. -/// @param output_size The output size. -static inline struct evmc_result evmc_make_result(enum evmc_status_code status_code, - int64_t gas_left, - int64_t gas_refund, - const uint8_t* output_data, - size_t output_size) -{ - struct evmc_result result; - memset(&result, 0, sizeof(result)); - - if (output_size != 0) - { - uint8_t* buffer = (uint8_t*)malloc(output_size); - - if (!buffer) - { - result.status_code = EVMC_OUT_OF_MEMORY; - return result; - } - - memcpy(buffer, output_data, output_size); - result.output_data = buffer; - result.output_size = output_size; - result.release = evmc_free_result_memory; - } - - result.status_code = status_code; - result.gas_left = gas_left; - result.gas_refund = gas_refund; - return result; -} - -/** - * Releases the resources allocated to the execution result. - * - * @param result The result object to be released. MUST NOT be NULL. - * - * @see evmc_result::release() evmc_release_result_fn - */ -static inline void evmc_release_result(struct evmc_result* result) -{ - if (result->release) - result->release(result); -} - - -/** - * Helpers for optional storage of evmc_result. - * - * In some contexts (i.e. evmc_result::create_address is unused) objects of - * type evmc_result contains a memory storage that MAY be used by the object - * owner. This group defines helper types and functions for accessing - * the optional storage. - * - * @defgroup result_optional_storage Result Optional Storage - * @{ - */ - -/** - * The union representing evmc_result "optional storage". - * - * The evmc_result struct contains 24 bytes of optional storage that can be - * reused by the object creator if the object does not contain - * evmc_result::create_address. - * - * A VM implementation MAY use this memory to keep additional data - * when returning result from evmc_execute_fn(). - * The host application MAY use this memory to keep additional data - * when returning result of performed calls from evmc_call_fn(). - * - * @see evmc_get_optional_storage(), evmc_get_const_optional_storage(). - */ -union evmc_result_optional_storage -{ - uint8_t bytes[24]; /**< 24 bytes of optional storage. */ - void* pointer; /**< Optional pointer. */ -}; - -/** Provides read-write access to evmc_result "optional storage". */ -static inline union evmc_result_optional_storage* evmc_get_optional_storage( - struct evmc_result* result) -{ - return (union evmc_result_optional_storage*)&result->create_address; -} - -/** Provides read-only access to evmc_result "optional storage". */ -static inline const union evmc_result_optional_storage* evmc_get_const_optional_storage( - const struct evmc_result* result) -{ - return (const union evmc_result_optional_storage*)&result->create_address; -} - -/** @} */ - -/** Returns text representation of the ::evmc_status_code. */ -static inline const char* evmc_status_code_to_string(enum evmc_status_code status_code) -{ - switch (status_code) - { - case EVMC_SUCCESS: - return "success"; - case EVMC_FAILURE: - return "failure"; - case EVMC_REVERT: - return "revert"; - case EVMC_OUT_OF_GAS: - return "out of gas"; - case EVMC_INVALID_INSTRUCTION: - return "invalid instruction"; - case EVMC_UNDEFINED_INSTRUCTION: - return "undefined instruction"; - case EVMC_STACK_OVERFLOW: - return "stack overflow"; - case EVMC_STACK_UNDERFLOW: - return "stack underflow"; - case EVMC_BAD_JUMP_DESTINATION: - return "bad jump destination"; - case EVMC_INVALID_MEMORY_ACCESS: - return "invalid memory access"; - case EVMC_CALL_DEPTH_EXCEEDED: - return "call depth exceeded"; - case EVMC_STATIC_MODE_VIOLATION: - return "static mode violation"; - case EVMC_PRECOMPILE_FAILURE: - return "precompile failure"; - case EVMC_CONTRACT_VALIDATION_FAILURE: - return "contract validation failure"; - case EVMC_ARGUMENT_OUT_OF_RANGE: - return "argument out of range"; - case EVMC_WASM_UNREACHABLE_INSTRUCTION: - return "wasm unreachable instruction"; - case EVMC_WASM_TRAP: - return "wasm trap"; - case EVMC_INSUFFICIENT_BALANCE: - return "insufficient balance"; - case EVMC_INTERNAL_ERROR: - return "internal error"; - case EVMC_REJECTED: - return "rejected"; - case EVMC_OUT_OF_MEMORY: - return "out of memory"; - } - return ""; -} - -/** Returns the name of the ::evmc_revision. */ -static inline const char* evmc_revision_to_string(enum evmc_revision rev) -{ - switch (rev) - { - case EVMC_FRONTIER: - return "Frontier"; - case EVMC_HOMESTEAD: - return "Homestead"; - case EVMC_TANGERINE_WHISTLE: - return "Tangerine Whistle"; - case EVMC_SPURIOUS_DRAGON: - return "Spurious Dragon"; - case EVMC_BYZANTIUM: - return "Byzantium"; - case EVMC_CONSTANTINOPLE: - return "Constantinople"; - case EVMC_PETERSBURG: - return "Petersburg"; - case EVMC_ISTANBUL: - return "Istanbul"; - case EVMC_BERLIN: - return "Berlin"; - case EVMC_LONDON: - return "London"; - case EVMC_PARIS: - return "Paris"; - case EVMC_SHANGHAI: - return "Shanghai"; - case EVMC_CANCUN: - return "Cancun"; - case EVMC_PRAGUE: - return "Prague"; - } - return ""; -} - -/** @} */ - -#ifdef __cplusplus -#ifdef __GNUC__ -#pragma GCC diagnostic pop -#endif -} // extern "C" -#endif - -#endif // EVM_ASSIGNER_EVMC_HELPERS_H_ diff --git a/evm-assigner/lib/assigner/evmc/hex.hpp b/evm-assigner/lib/assigner/evmc/hex.hpp deleted file mode 100644 index 9ad9a94c64..0000000000 --- a/evm-assigner/lib/assigner/evmc/hex.hpp +++ /dev/null @@ -1,161 +0,0 @@ -// EVMC: Ethereum Client-VM Connector API. -// Copyright 2021 The EVMC Authors. -// Licensed under the Apache License, Version 2.0. -#ifndef EVM_ASSIGNER_EVMC_HEX_HPP_ -#define EVM_ASSIGNER_EVMC_HEX_HPP_ - -#include -#include -#include -#include -#include - -namespace evmc -{ -/// String of uint8_t chars. -using bytes = std::basic_string; - -/// String view of uint8_t chars. -using bytes_view = std::basic_string_view; - - -/// Encode a byte to a hex string. -inline std::string hex(uint8_t b) noexcept -{ - static constexpr auto hex_digits = "0123456789abcdef"; - return {hex_digits[b >> 4], hex_digits[b & 0xf]}; -} - -/// Encodes bytes as hex string. -inline std::string hex(bytes_view bs) -{ - std::string str; - str.reserve(bs.size() * 2); - for (const auto b : bs) - str += hex(b); - return str; -} - -namespace internal -{ -/// Extracts the nibble value out of a hex digit. -/// Returns -1 in case of invalid hex digit. -inline constexpr int from_hex_digit(char h) noexcept -{ - if (h >= '0' && h <= '9') - return h - '0'; - else if (h >= 'a' && h <= 'f') - return h - 'a' + 10; - else if (h >= 'A' && h <= 'F') - return h - 'A' + 10; - else - return -1; -} -} // namespace internal - -/// Decodes hex-encoded sequence of characters. -/// -/// It is guaranteed that the output will not be longer than half of the input length. -/// -/// @param begin The input begin iterator. It only must satisfy input iterator concept. -/// @param end The input end iterator. It only must satisfy input iterator concept. -/// @param out The output iterator. It must satisfy output iterator concept. -/// @return True if successful, false if input is invalid hex. -template -inline constexpr bool from_hex(InputIt begin, InputIt end, OutputIt out) noexcept -{ - int hi_nibble = -1; // Init with invalid value, should never be used. - size_t i = 0; - for (auto it = begin; it != end; ++it, ++i) - { - const auto h = *it; - const int v = evmc::internal::from_hex_digit(h); - if (v < 0) - { - if (i == 1 && hi_nibble == 0 && h == 'x') // 0x prefix - continue; - return false; - } - - if (i % 2 == 0) - hi_nibble = v << 4; - else - *out++ = static_cast(hi_nibble | v); - } - - return i % 2 == 0; -} - -/// Validates hex encoded string. -/// -/// @return True if the input is valid hex. -inline bool validate_hex(std::string_view hex) noexcept -{ - struct noop_output_iterator - { - uint8_t sink = {}; - uint8_t& operator*() noexcept { return sink; } - noop_output_iterator operator++(int) noexcept { return *this; } // NOLINT(cert-dcl21-cpp) - }; - - return from_hex(hex.begin(), hex.end(), noop_output_iterator{}); -} - -/// Decodes hex encoded string to bytes. -/// -/// In case the input is invalid the returned value is std::nullopt. -/// This can happen if a non-hex digit or odd number of digits is encountered. -inline std::optional from_hex(std::string_view hex) -{ - bytes bs; - bs.reserve(hex.size() / 2); - if (!from_hex(hex.begin(), hex.end(), std::back_inserter(bs))) - return {}; - return bs; -} - -/// Decodes hex-encoded string into custom type T with .bytes array of uint8_t. -/// -/// When the input is smaller than the result type, the result is padded with zeros on the left -/// (the result bytes of lowest indices are filled with zeros). -/// TODO: Support optional left alignment. -template -constexpr std::optional from_hex(std::string_view s) noexcept -{ - // Omit the optional 0x prefix. - if (s.size() >= 2 && s[0] == '0' && s[1] == 'x') - s.remove_prefix(2); - - T r{}; // The T must have .bytes array. This may be lifted if std::bit_cast is available. - constexpr auto num_out_bytes = std::size(r.bytes); - const auto num_in_bytes = s.length() / 2; - if (num_in_bytes > num_out_bytes) - return {}; - if (!from_hex(s.begin(), s.end(), &r.bytes[num_out_bytes - num_in_bytes])) - return {}; - return r; -} - -/// Decodes hex encoded string to bytes. The whitespace in the input is ignored. -/// -/// In case the input is invalid the returned value is std::nullopt. -/// This can happen if a non-hex digit or odd number of digits is encountered. -/// The whitespace (as defined by std::isspace) in the input is ignored. -template -std::optional from_spaced_hex(InputIterator begin, InputIterator end) noexcept -{ - bytes bs; - if (!from_hex(skip_space_iterator{begin, end}, skip_space_iterator{end, end}, - std::back_inserter(bs))) - return {}; - return bs; -} - -/// @copydoc from_spaced_hex -inline std::optional from_spaced_hex(std::string_view hex) noexcept -{ - return from_spaced_hex(hex.begin(), hex.end()); -} -} // namespace evmc - -#endif // EVM_ASSIGNER_EVMC_HEX_HPP_ diff --git a/evm-assigner/lib/assigner/evmc/utils.h b/evm-assigner/lib/assigner/evmc/utils.h deleted file mode 100644 index 01c0cc0ef9..0000000000 --- a/evm-assigner/lib/assigner/evmc/utils.h +++ /dev/null @@ -1,37 +0,0 @@ -// EVMC: Ethereum Client-VM Connector API. -// Copyright 2018 The EVMC Authors. -// Licensed under the Apache License, Version 2.0. - -#ifndef EVM_ASSIGNER_UTILS_HEX_H_ -#define EVM_ASSIGNER_UTILS_HEX_H_ - -/** - * @file - * A collection of helper macros to handle some non-portable features of C/C++ compilers. - * - * @addtogroup helpers - * @{ - */ - -/** - * @def EVMC_EXPORT - * Marks a function to be exported from a shared library. - */ -#if defined _MSC_VER || defined __MINGW32__ -#define EVMC_EXPORT __declspec(dllexport) -#else -#define EVMC_EXPORT __attribute__((visibility("default"))) -#endif - -/** - * @def EVMC_NOEXCEPT - * Safe way of marking a function with `noexcept` C++ specifier. - */ -#ifdef __cplusplus -#define EVMC_NOEXCEPT noexcept -#else -#define EVMC_NOEXCEPT -#endif - -#endif // EVM_ASSIGNER_UTILS_HEX_H_ -/** @} */ diff --git a/evm-assigner/lib/assigner/evmone/baseline.cpp b/evm-assigner/lib/assigner/evmone/baseline.cpp deleted file mode 100644 index aec90118cc..0000000000 --- a/evm-assigner/lib/assigner/evmone/baseline.cpp +++ /dev/null @@ -1,86 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2020 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 - -#include "baseline.hpp" - -#ifdef NDEBUG -#define release_inline gnu::always_inline, msvc::forceinline -#else -#define release_inline -#endif - -#if defined(__GNUC__) -#define ASM_COMMENT(COMMENT) asm("# " #COMMENT) // NOLINT(hicpp-no-assembler) -#else -#define ASM_COMMENT(COMMENT) -#endif - -namespace evmone::baseline -{ -namespace -{ -CodeAnalysis::JumpdestMap analyze_jumpdests(bytes_view code) -{ - // To find if op is any PUSH opcode (OP_PUSH1 <= op <= OP_PUSH32) - // it can be noticed that OP_PUSH32 is INT8_MAX (0x7f) therefore - // static_cast(op) <= OP_PUSH32 is always true and can be skipped. - static_assert(OP_PUSH32 == std::numeric_limits::max()); - - CodeAnalysis::JumpdestMap map(code.size()); // Allocate and init bitmap with zeros. - for (size_t i = 0; i < code.size(); ++i) - { - const auto op = code[i]; - if (static_cast(op) >= OP_PUSH1) // If any PUSH opcode (see explanation above). - i += op - size_t{OP_PUSH1 - 1}; // Skip PUSH data. - else if (op == OP_JUMPDEST) - map[i] = true; - } - - return map; -} - -std::unique_ptr pad_code(bytes_view code) -{ - // We need at most 33 bytes of code padding: 32 for possible missing all data bytes of PUSH32 - // at the very end of the code; and one more byte for STOP to guarantee there is a terminating - // instruction at the code end. - constexpr auto padding = 32 + 1; - - // Using "raw" new operator instead of std::make_unique() to get uninitialized array. - std::unique_ptr padded_code{new uint8_t[code.size() + padding]}; - std::copy(std::begin(code), std::end(code), padded_code.get()); - std::fill_n(&padded_code[code.size()], padding, uint8_t{OP_STOP}); - return padded_code; -} - - -CodeAnalysis analyze_legacy(bytes_view code) -{ - // TODO: The padded code buffer and jumpdest bitmap can be created with single allocation. - return {pad_code(code), code.size(), analyze_jumpdests(code)}; -} - -CodeAnalysis analyze_eof1(bytes_view container) -{ - auto header = read_valid_eof1_header(container); - - // Extract all code sections as single buffer reference. - // TODO: It would be much easier if header had code_sections_offset and data_section_offset - // with code_offsets[] being relative to code_sections_offset. - const auto code_sections_offset = header.code_offsets[0]; - const auto code_sections_end = size_t{header.code_offsets.back()} + header.code_sizes.back(); - const auto executable_code = - container.substr(code_sections_offset, code_sections_end - code_sections_offset); - - return CodeAnalysis{executable_code, std::move(header)}; -} -} // namespace - -CodeAnalysis analyze(evmc_revision rev, bytes_view code) -{ - if (rev < EVMC_PRAGUE || !is_eof_container(code)) - return analyze_legacy(code); - return analyze_eof1(code); -} -} // namespace evmone::baseline diff --git a/evm-assigner/lib/assigner/evmone/baseline.hpp b/evm-assigner/lib/assigner/evmone/baseline.hpp deleted file mode 100644 index 25f9760f60..0000000000 --- a/evm-assigner/lib/assigner/evmone/baseline.hpp +++ /dev/null @@ -1,254 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2020 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 -#pragma once - -#include "eof.hpp" -#include "baseline_instruction_table.hpp" -#include "execution_state.hpp" -#include "instructions.hpp" - -#include -#include -#include -#include -#include - -#ifdef NDEBUG -#define release_inline gnu::always_inline, msvc::forceinline -#else -#define release_inline -#endif - -#if defined(__GNUC__) -#define ASM_COMMENT(COMMENT) asm("# " #COMMENT) // NOLINT(hicpp-no-assembler) -#else -#define ASM_COMMENT(COMMENT) -#endif - -namespace evmone -{ -using bytes_view = std::basic_string_view; - -template -class ExecutionState; -class VM; - -namespace baseline -{ -class CodeAnalysis -{ -public: - using JumpdestMap = std::vector; - - bytes_view executable_code; ///< Executable code section. - JumpdestMap jumpdest_map; ///< Map of valid jump destinations. - EOF1Header eof_header; ///< The EOF header. - -private: - /// Padded code for faster legacy code execution. - /// If not nullptr the executable_code must point to it. - std::unique_ptr m_padded_code; - -public: - CodeAnalysis(std::unique_ptr padded_code, size_t code_size, JumpdestMap map) - : executable_code{padded_code.get(), code_size}, - jumpdest_map{std::move(map)}, - m_padded_code{std::move(padded_code)} - {} - - CodeAnalysis(bytes_view code, EOF1Header header) - : executable_code{code}, eof_header{std::move(header)} - {} -}; -static_assert(std::is_move_constructible_v); -static_assert(std::is_move_assignable_v); -static_assert(!std::is_copy_constructible_v); -static_assert(!std::is_copy_assignable_v); - -CodeAnalysis analyze(evmc_revision rev, bytes_view code); - -/// Analyze the code to build the bitmap of valid JUMPDEST locations. -EVMC_EXPORT CodeAnalysis analyze(evmc_revision rev, bytes_view code); - -/// The execution position. -template -struct Position -{ - code_iterator code_it; ///< The position in the code. - nil::evm_assigner::zkevm_word* stack_top; ///< The pointer to the stack top. -}; - -/// Checks instruction requirements before execution. -/// -/// This checks: -/// - if the instruction is defined -/// - if stack height requirements are fulfilled (stack overflow, stack underflow) -/// - charges the instruction base gas cost and checks is there is any gas left. -/// -/// @tparam Op Instruction opcode. -/// @param cost_table Table of base gas costs. -/// @param [in,out] gas_left Gas left. -/// @param stack_top Pointer to the stack top item. -/// @param stack_bottom Pointer to the stack bottom. -/// The stack height is stack_top - stack_bottom. -/// @return Status code with information which check has failed -/// or EVMC_SUCCESS if everything is fine. -template -inline evmc_status_code check_requirements(const CostTable& cost_table, int64_t& gas_left, - const nil::evm_assigner::zkevm_word* stack_top, - const nil::evm_assigner::zkevm_word* stack_bottom, - Opcode op) noexcept -{ - assert( - !instr::has_const_gas_cost(op) || instr::gas_costs[EVMC_FRONTIER][op] != instr::undefined); - - auto gas_cost = instr::gas_costs[EVMC_FRONTIER][op]; // Init assuming const cost. - if (!instr::has_const_gas_cost(op)) - { - gas_cost = cost_table[op]; // If not, load the cost from the table. - - // Negative cost marks an undefined instruction. - // This check must be first to produce correct error code. - if (gas_cost < 0) - return EVMC_UNDEFINED_INSTRUCTION; - } - - // Check stack requirements first. This is order is not required, - // but it is nicer because complete gas check may need to inspect operands. - if (instr::traits[op].stack_height_change > 0) - { - assert(instr::traits[op].stack_height_change == 1); - if (stack_top == stack_bottom + StackSpace::limit) - return EVMC_STACK_OVERFLOW; - } - if (instr::traits[op].stack_height_required > 0) - { - // Check stack underflow using pointer comparison <= (better optimization). - const auto min_offset = instr::traits[op].stack_height_required - 1; - if (stack_top <= stack_bottom + min_offset) - return EVMC_STACK_UNDERFLOW; - } - - if ((gas_left -= gas_cost) < 0) - return EVMC_OUT_OF_GAS; - - return EVMC_SUCCESS; -} - -/// Helpers for invoking instruction implementations of different signatures. -/// @{ -template -[[release_inline]] inline code_iterator invoke(std::nullptr_t /*fn*/, Position pos, - int64_t& /*gas*/, ExecutionState& /*state*/) noexcept -{ - return nullptr; -} - -template -[[release_inline]] inline code_iterator invoke(void (*instr_fn)(StackTop) noexcept, Position pos, - int64_t& /*gas*/, ExecutionState& /*state*/) noexcept -{ - instr_fn(pos.stack_top); - return pos.code_it + 1; -} - -template -[[release_inline]] inline code_iterator invoke( - Result (*instr_fn)(StackTop, int64_t, ExecutionState&) noexcept, Position pos, int64_t& gas, - ExecutionState& state) noexcept -{ - const auto o = instr_fn(pos.stack_top, gas, state); - gas = o.gas_left; - if (o.status != EVMC_SUCCESS) - { - state.status = o.status; - return nullptr; - } - return pos.code_it + 1; -} - -template -[[release_inline]] inline code_iterator invoke(void (*instr_fn)(StackTop, ExecutionState&) noexcept, - Position pos, int64_t& /*gas*/, ExecutionState& state) noexcept -{ - instr_fn(pos.stack_top, state); - return pos.code_it + 1; -} - -template -[[release_inline]] inline code_iterator invoke( - code_iterator (*instr_fn)(StackTop, ExecutionState&, code_iterator) noexcept, Position pos, - int64_t& /*gas*/, ExecutionState& state) noexcept -{ - return instr_fn(pos.stack_top, state, pos.code_it); -} - -template -[[release_inline]] inline code_iterator invoke( - TermResult (*instr_fn)(StackTop, int64_t, ExecutionState&) noexcept, Position pos, int64_t& gas, - ExecutionState& state) noexcept -{ - const auto result = instr_fn(pos.stack_top, gas, state); - gas = result.gas_left; - state.status = result.status; - return nullptr; -} -/// A helper to invoke the instruction implementation of the given opcode Op. -template -[[release_inline]] inline Position invoke(const CostTable& cost_table, const nil::evm_assigner::zkevm_word* stack_bottom, - Position pos, int64_t& gas, ExecutionState& state, const uint8_t& op) noexcept -{ - if (const auto status = check_requirements(cost_table, gas, pos.stack_top, stack_bottom, Opcode(op)); - status != EVMC_SUCCESS) - { - state.status = status; - return {nullptr, pos.stack_top}; - } - code_iterator new_pos = pos.code_it; - switch (op) - { -#undef ON_OPCODE_IDENTIFIER -#define ON_OPCODE_IDENTIFIER(OPCODE, IDENTIFIER) \ -case OPCODE: \ - ASM_COMMENT(OPCODE); \ - new_pos = invoke(instr::core::IDENTIFIER, pos, gas, state); \ - break; - MAP_OPCODES -#undef ON_OPCODE_IDENTIFIER - - default: - state.status = EVMC_UNDEFINED_INSTRUCTION; - return {nullptr, pos.stack_top};; - } - const auto new_stack_top = pos.stack_top + instr::traits[op].stack_height_change; - return Position(new_pos, new_stack_top); -} -/// @} - -template -int64_t dispatch(const CostTable& cost_table, ExecutionState& state, int64_t gas, - const uint8_t* code) noexcept -{ - const auto stack_bottom = state.stack_space.bottom(); - - // Code iterator and stack top pointer for interpreter loop. - Position position{code, stack_bottom}; - - while (true) // Guaranteed to terminate because padded code ends with STOP. - { - const auto op = *position.code_it; - const auto next = invoke(cost_table, stack_bottom, position, gas, state, op); - if (next.code_it == nullptr) - { - return gas; - } else { - /*Update current position only when no error, - this improves compiler optimization.*/ - position = next; - } - } -} - -} // namespace baseline -} // namespace evmone diff --git a/evm-assigner/lib/assigner/evmone/baseline_instruction_table.cpp b/evm-assigner/lib/assigner/evmone/baseline_instruction_table.cpp deleted file mode 100644 index 95405d436b..0000000000 --- a/evm-assigner/lib/assigner/evmone/baseline_instruction_table.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2020 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 - -#include "baseline_instruction_table.hpp" -#include "instructions_traits.hpp" - -namespace evmone::baseline -{ -namespace -{ -constexpr auto common_cost_tables = []() noexcept { - std::array tables{}; - for (size_t r = EVMC_FRONTIER; r <= EVMC_MAX_REVISION; ++r) - { - auto& table = tables[r]; - for (size_t i = 0; i < table.size(); ++i) - { - table[i] = instr::gas_costs[r][i]; // Include instr::undefined in the table. - } - } - return tables; -}(); - -constexpr auto legacy_cost_tables = []() noexcept { - auto tables = common_cost_tables; - tables[EVMC_PRAGUE][OP_RJUMP] = instr::undefined; - tables[EVMC_PRAGUE][OP_RJUMPI] = instr::undefined; - tables[EVMC_PRAGUE][OP_RJUMPV] = instr::undefined; - tables[EVMC_PRAGUE][OP_CALLF] = instr::undefined; - tables[EVMC_PRAGUE][OP_RETF] = instr::undefined; - tables[EVMC_PRAGUE][OP_JUMPF] = instr::undefined; - tables[EVMC_PRAGUE][OP_DATALOAD] = instr::undefined; - tables[EVMC_PRAGUE][OP_DATALOADN] = instr::undefined; - tables[EVMC_PRAGUE][OP_DATASIZE] = instr::undefined; - tables[EVMC_PRAGUE][OP_DATACOPY] = instr::undefined; - return tables; -}(); - -constexpr auto eof_cost_tables = []() noexcept { - auto tables = common_cost_tables; - tables[EVMC_PRAGUE][OP_JUMP] = instr::undefined; - tables[EVMC_PRAGUE][OP_JUMPI] = instr::undefined; - tables[EVMC_PRAGUE][OP_PC] = instr::undefined; - tables[EVMC_PRAGUE][OP_CALLCODE] = instr::undefined; - tables[EVMC_PRAGUE][OP_SELFDESTRUCT] = instr::undefined; - return tables; -}(); - -} // namespace - -const CostTable& get_baseline_cost_table(evmc_revision rev, uint8_t eof_version) noexcept -{ - const auto& tables = (eof_version == 0) ? legacy_cost_tables : eof_cost_tables; - return tables[rev]; -} -} // namespace evmone::baseline diff --git a/evm-assigner/lib/assigner/evmone/baseline_instruction_table.hpp b/evm-assigner/lib/assigner/evmone/baseline_instruction_table.hpp deleted file mode 100644 index 9154f62011..0000000000 --- a/evm-assigner/lib/assigner/evmone/baseline_instruction_table.hpp +++ /dev/null @@ -1,16 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2020 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 -#pragma once - -#include -#include - -namespace evmone::baseline -{ -using CostTable = std::array; - -const CostTable& get_baseline_cost_table(evmc_revision rev, uint8_t eof_version) noexcept; - -const CostTable& get_baseline_legacy_cost_table(evmc_revision rev) noexcept; -} // namespace evmone::baseline diff --git a/evm-assigner/lib/assigner/evmone/eof.cpp b/evm-assigner/lib/assigner/evmone/eof.cpp deleted file mode 100644 index 6f41947c39..0000000000 --- a/evm-assigner/lib/assigner/evmone/eof.cpp +++ /dev/null @@ -1,710 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2021 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 - -#include "eof.hpp" -#include "baseline_instruction_table.hpp" -#include "instructions_traits.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace evmone -{ -namespace -{ -constexpr uint8_t MAGIC[] = {0xef, 0x00}; -constexpr uint8_t TERMINATOR = 0x00; -constexpr uint8_t TYPE_SECTION = 0x01; -constexpr uint8_t CODE_SECTION = 0x02; -constexpr uint8_t DATA_SECTION = 0x04; -constexpr uint8_t MAX_SECTION = DATA_SECTION; -constexpr auto CODE_SECTION_NUMBER_LIMIT = 1024; -constexpr auto MAX_STACK_HEIGHT = 0x03FF; -constexpr auto OUTPUTS_INPUTS_NUMBER_LIMIT = 0x7F; -constexpr auto REL_OFFSET_SIZE = sizeof(int16_t); -constexpr auto STACK_SIZE_LIMIT = 1024; -constexpr uint8_t NON_RETURNING_FUNCITON = 0x80; - -using EOFSectionHeaders = std::array, MAX_SECTION + 1>; - -size_t eof_header_size(const EOFSectionHeaders& headers) noexcept -{ - const auto non_code_section_count = 2; // type section and data section - const auto code_section_count = headers[CODE_SECTION].size(); - - constexpr auto non_code_section_header_size = 3; // (SECTION_ID + SIZE) per each section - constexpr auto code_section_size_size = 2; - - return sizeof(MAGIC) + 1 + // 1 version byte - non_code_section_count * non_code_section_header_size + sizeof(CODE_SECTION) + 2 + - code_section_count * code_section_size_size + sizeof(TERMINATOR); -} - -EOFValidationError get_section_missing_error(uint8_t section_id) noexcept -{ - switch (section_id) - { - case TERMINATOR: - return EOFValidationError::header_terminator_missing; - case TYPE_SECTION: - return EOFValidationError::type_section_missing; - case CODE_SECTION: - return EOFValidationError::code_section_missing; - case DATA_SECTION: - return EOFValidationError::data_section_missing; - default: - return EOFValidationError::impossible; - } -} - -std::variant validate_eof_headers(bytes_view container) -{ - enum class State - { - section_id, - section_size, - terminated - }; - - auto state = State::section_id; - uint8_t section_id = 0; - uint16_t section_num = 0; - EOFSectionHeaders section_headers{}; - const auto container_end = container.end(); - auto it = container.begin() + std::size(MAGIC) + 1; // MAGIC + VERSION - uint8_t expected_section_id = TYPE_SECTION; - while (it != container_end && state != State::terminated) - { - switch (state) - { - case State::section_id: - { - section_id = *it++; - - if (section_id != expected_section_id) - return get_section_missing_error(expected_section_id); - - switch (section_id) - { - case TERMINATOR: - state = State::terminated; - break; - case TYPE_SECTION: - expected_section_id = CODE_SECTION; - state = State::section_size; - break; - case CODE_SECTION: - { - if (it >= container_end - 1) - return EOFValidationError::incomplete_section_number; - section_num = read_uint16_be(it); - it += 2; - if (section_num == 0) - return EOFValidationError::zero_section_size; - if (section_num > CODE_SECTION_NUMBER_LIMIT) - return EOFValidationError::too_many_code_sections; - expected_section_id = DATA_SECTION; - state = State::section_size; - break; - } - case DATA_SECTION: - expected_section_id = TERMINATOR; - state = State::section_size; - break; - default: - assert(false); - } - break; - } - case State::section_size: - { - if (section_id == CODE_SECTION) - { - assert(section_num > 0); // Guaranteed by previous validation step. - for (size_t i = 0; i < section_num; ++i) - { - if (it >= container_end - 1) - return EOFValidationError::incomplete_section_size; - const auto section_size = read_uint16_be(it); - it += 2; - if (section_size == 0) - return EOFValidationError::zero_section_size; - - section_headers[section_id].emplace_back(section_size); - } - } - else // TYPES_SECTION or DATA_SECTION - { - if (it >= container_end - 1) - return EOFValidationError::incomplete_section_size; - const auto section_size = read_uint16_be(it); - it += 2; - if (section_size == 0 && section_id != DATA_SECTION) - return EOFValidationError::zero_section_size; - - section_headers[section_id].emplace_back(section_size); - } - - state = State::section_id; - break; - } - case State::terminated: - return EOFValidationError::impossible; - } - } - - if (state != State::terminated) - return EOFValidationError::section_headers_not_terminated; - - const auto section_bodies_size = section_headers[TYPE_SECTION].front() + - std::accumulate(section_headers[CODE_SECTION].begin(), - section_headers[CODE_SECTION].end(), 0) + - section_headers[DATA_SECTION].front(); - const auto remaining_container_size = container_end - it; - if (section_bodies_size != remaining_container_size) - return EOFValidationError::invalid_section_bodies_size; - - if (section_headers[TYPE_SECTION][0] != section_headers[CODE_SECTION].size() * 4) - return EOFValidationError::invalid_type_section_size; - - return section_headers; -} - -std::variant, EOFValidationError> validate_types( - bytes_view container, size_t header_size, uint16_t type_section_size) noexcept -{ - assert(!container.empty()); // guaranteed by EOF headers validation - - std::vector types; - - // guaranteed by EOF headers validation - assert(header_size + type_section_size < container.size()); - - for (auto offset = header_size; offset < header_size + type_section_size; offset += 4) - { - types.emplace_back( - container[offset], container[offset + 1], read_uint16_be(&container[offset + 2])); - } - - // check 1st section is (0, 0x80) - if (types[0].inputs != 0 || types[0].outputs != NON_RETURNING_FUNCITON) - return EOFValidationError::invalid_first_section_type; - - for (const auto& t : types) - { - if ((t.outputs > OUTPUTS_INPUTS_NUMBER_LIMIT && t.outputs != NON_RETURNING_FUNCITON) || - t.inputs > OUTPUTS_INPUTS_NUMBER_LIMIT) - return EOFValidationError::inputs_outputs_num_above_limit; - - if (t.max_stack_height > MAX_STACK_HEIGHT) - return EOFValidationError::max_stack_height_above_limit; - } - - return types; -} - -EOFValidationError validate_instructions( - evmc_revision rev, const EOF1Header& header, size_t code_idx, bytes_view container) noexcept -{ - const bytes_view code{header.get_code(container, code_idx)}; - assert(!code.empty()); // guaranteed by EOF headers validation - - const auto& cost_table = baseline::get_baseline_cost_table(rev, 1); - - bool is_returning = false; - - for (size_t i = 0; i < code.size(); ++i) - { - const auto op = code[i]; - if (cost_table[op] == instr::undefined) - return EOFValidationError::undefined_instruction; - - if (i + instr::traits[op].immediate_size >= code.size()) - return EOFValidationError::truncated_instruction; - - if (op == OP_RJUMPV) - { - const auto count = code[i + 1] + 1; - i += static_cast(1 /* max_index */ + count * 2 /* tbl */); - if (i >= code.size()) - return EOFValidationError::truncated_instruction; - } - else if (op == OP_CALLF) - { - const auto fid = read_uint16_be(&code[i + 1]); - if (fid >= header.types.size()) - return EOFValidationError::invalid_code_section_index; - if (header.types[fid].outputs == NON_RETURNING_FUNCITON) - return EOFValidationError::callf_to_non_returning_function; - i += 2; - } - else if (op == OP_RETF) - { - is_returning = true; - static_assert(instr::traits[OP_RETF].immediate_size == 0); - } - else if (op == OP_JUMPF) - { - const auto fid = read_uint16_be(&code[i + 1]); - if (fid >= header.types.size()) - return EOFValidationError::invalid_code_section_index; - // JUMPF into returning function means current function is returning. - if (header.types[fid].outputs != NON_RETURNING_FUNCITON) - is_returning = true; - i += 2; - } - else if (op == OP_DATALOADN) - { - const auto index = read_uint16_be(&code[i + 1]); - if (header.data_size < 32 || index > header.data_size - 32) - return EOFValidationError::invalid_dataloadn_index; - i += 2; - } - else - i += instr::traits[op].immediate_size; - } - - const auto declared_returning = (header.types[code_idx].outputs != NON_RETURNING_FUNCITON); - if (is_returning != declared_returning) - return EOFValidationError::invalid_non_returning_flag; - - return EOFValidationError::success; -} - -/// Validates that that we don't rjump inside an instruction's immediate. -/// Requires that the input is validated against truncation. -bool validate_rjump_destinations(bytes_view code) noexcept -{ - // Collect relative jump destinations and immediate locations - const auto code_size = code.size(); - // list of all possible absolute rjumps destinations positions - std::vector rjumpdests; - // bool map of immediate arguments positions in the code - std::vector immediate_map(code_size); - - /// Validates relative jump destination. If valid pushes the destination to the rjumpdests. - const auto check_rjump_destination = [code_size, &rjumpdests]( - auto rel_offset_data_it, size_t post_pos) -> bool { - const auto rel_offset = read_int16_be(rel_offset_data_it); - const auto jumpdest = static_cast(post_pos) + rel_offset; - if (jumpdest < 0 || static_cast(jumpdest) >= code_size) - return false; - - rjumpdests.emplace_back(static_cast(jumpdest)); - return true; - }; - - for (size_t i = 0; i < code_size; ++i) - { - const auto op = code[i]; - size_t imm_size = instr::traits[op].immediate_size; - - if (op == OP_RJUMP || op == OP_RJUMPI) - { - if (!check_rjump_destination(&code[i + 1], i + REL_OFFSET_SIZE + 1)) - return false; - } - else if (op == OP_RJUMPV) - { - const auto count = size_t{code[i + 1]} + 1; - imm_size += count * REL_OFFSET_SIZE /* tbl */; - const size_t post_pos = i + 1 + imm_size; - - for (size_t k = 0; k < count * REL_OFFSET_SIZE; k += REL_OFFSET_SIZE) - { - if (!check_rjump_destination(&code[i + 1 + 1 + static_cast(k)], post_pos)) - return false; - } - } - - std::fill_n(immediate_map.begin() + static_cast(i) + 1, imm_size, true); - i += imm_size; - } - - // Check relative jump destinations against immediate locations. - for (const auto rjumpdest : rjumpdests) - if (immediate_map[rjumpdest]) - return false; - - return true; -} - -/// Requires that the input is validated against truncation. -std::variant validate_max_stack_height( - bytes_view code, size_t func_index, const std::vector& code_types) -{ - assert(!code.empty()); - - // Special values used for detecting errors. - static constexpr int32_t LOC_UNVISITED = -1; // Unvisited byte. - static constexpr int32_t LOC_IMMEDIATE = -2; // Immediate byte. - - // Stack height in the header is limited to uint16_t, - // but keeping larger size for ease of calculation. - std::vector stack_heights(code.size(), LOC_UNVISITED); - stack_heights[0] = code_types[func_index].inputs; - - std::stack worklist; - worklist.push(0); - - while (!worklist.empty()) - { - const auto i = worklist.top(); - worklist.pop(); - - const auto opcode = static_cast(code[i]); - - auto stack_height_required = instr::traits[opcode].stack_height_required; - auto stack_height_change = instr::traits[opcode].stack_height_change; - - auto stack_height = stack_heights[i]; - assert(stack_height != LOC_UNVISITED); - - if (opcode == OP_CALLF) - { - const auto fid = read_uint16_be(&code[i + 1]); - - stack_height_required = static_cast(code_types[fid].inputs); - - if (stack_height + code_types[fid].max_stack_height - stack_height_required > - STACK_SIZE_LIMIT) - return EOFValidationError::stack_overflow; - - // Instruction validation ensures target function is returning - assert(code_types[fid].outputs != NON_RETURNING_FUNCITON); - stack_height_change = - static_cast(code_types[fid].outputs - stack_height_required); - } - else if (opcode == OP_JUMPF) - { - const auto fid = read_uint16_be(&code[i + 1]); - - if (stack_height + code_types[fid].max_stack_height - code_types[fid].inputs > - STACK_SIZE_LIMIT) - return EOFValidationError::stack_overflow; - - if (code_types[fid].outputs == NON_RETURNING_FUNCITON) - { - stack_height_required = static_cast(code_types[fid].inputs); - } - else - { - if (code_types[func_index].outputs < code_types[fid].outputs) - return EOFValidationError::jumpf_destination_incompatible_outputs; - - stack_height_required = - static_cast(code_types[func_index].outputs + code_types[fid].inputs - - code_types[fid].outputs); - if (stack_heights[i] > stack_height_required) - return EOFValidationError::stack_higher_than_outputs_required; - } - } - else if (opcode == OP_RETF) - { - stack_height_required = static_cast(code_types[func_index].outputs); - if (stack_height > code_types[func_index].outputs) - return EOFValidationError::stack_higher_than_outputs_required; - } - - if (stack_height < stack_height_required) - return EOFValidationError::stack_underflow; - - stack_height += stack_height_change; - - // Determine size of immediate, including the special case of RJUMPV. - const size_t imm_size = (opcode == OP_RJUMPV) ? - (1 + /*count*/ (size_t{code[i + 1]} + 1) * REL_OFFSET_SIZE) : - instr::traits[opcode].immediate_size; - - // Mark immediate locations. - std::fill_n(&stack_heights[i + 1], imm_size, LOC_IMMEDIATE); - - // Validates the successor instruction and updates its stack height. - const auto validate_successor = [&stack_heights, &worklist](size_t successor_offset, - int32_t expected_stack_height) { - auto& successor_stack_height = stack_heights[successor_offset]; - if (successor_stack_height == LOC_UNVISITED) - { - successor_stack_height = expected_stack_height; - worklist.push(successor_offset); - return true; - } - else - return successor_stack_height == expected_stack_height; - }; - - const auto next = i + imm_size + 1; // Offset of the next instruction (may be invalid). - - // Check validity of next instruction. We skip RJUMP and terminating instructions. - if (!instr::traits[opcode].is_terminating && opcode != OP_RJUMP) - { - if (next >= code.size()) - return EOFValidationError::no_terminating_instruction; - if (!validate_successor(next, stack_height)) - return EOFValidationError::stack_height_mismatch; - } - - // Validate non-fallthrough successors of relative jumps. - if (opcode == OP_RJUMP || opcode == OP_RJUMPI) - { - const auto target_rel_offset = read_int16_be(&code[i + 1]); - const auto target = static_cast(i) + target_rel_offset + 3; - if (!validate_successor(static_cast(target), stack_height)) - return EOFValidationError::stack_height_mismatch; - } - else if (opcode == OP_RJUMPV) - { - const auto max_index = code[i + 1]; - - // Insert all jump targets. - for (size_t k = 0; k <= max_index; ++k) - { - const auto target_rel_offset = read_int16_be(&code[i + k * REL_OFFSET_SIZE + 2]); - const auto target = static_cast(next) + target_rel_offset; - if (!validate_successor(static_cast(target), stack_height)) - return EOFValidationError::stack_height_mismatch; - } - } - } - - const auto max_stack_height = *std::max_element(stack_heights.begin(), stack_heights.end()); - - if (std::find(stack_heights.begin(), stack_heights.end(), LOC_UNVISITED) != stack_heights.end()) - return EOFValidationError::unreachable_instructions; - - return max_stack_height; -} - -std::variant validate_eof1( - evmc_revision rev, bytes_view container) noexcept -{ - const auto section_headers_or_error = validate_eof_headers(container); - if (const auto* error = std::get_if(§ion_headers_or_error)) - return *error; - - const auto& section_headers = std::get(section_headers_or_error); - const auto& code_sizes = section_headers[CODE_SECTION]; - const auto data_size = section_headers[DATA_SECTION][0]; - - const auto header_size = eof_header_size(section_headers); - - const auto types_or_error = - validate_types(container, header_size, section_headers[TYPE_SECTION].front()); - if (const auto* error = std::get_if(&types_or_error)) - return *error; - const auto& types = std::get>(types_or_error); - - std::vector code_offsets; - const auto type_section_size = section_headers[TYPE_SECTION][0]; - auto offset = header_size + type_section_size; - for (const auto code_size : code_sizes) - { - assert(offset <= std::numeric_limits::max()); - code_offsets.emplace_back(static_cast(offset)); - offset += code_size; - } - - EOF1Header header{container[2], code_sizes, code_offsets, data_size, types}; - - for (size_t code_idx = 0; code_idx < header.code_sizes.size(); ++code_idx) - { - const auto error_instr = validate_instructions(rev, header, code_idx, container); - if (error_instr != EOFValidationError::success) - return error_instr; - - if (!validate_rjump_destinations(header.get_code(container, code_idx))) - return EOFValidationError::invalid_rjump_destination; - - auto msh_or_error = - validate_max_stack_height(header.get_code(container, code_idx), code_idx, header.types); - if (const auto* error = std::get_if(&msh_or_error)) - return *error; - if (std::get(msh_or_error) != header.types[code_idx].max_stack_height) - return EOFValidationError::invalid_max_stack_height; - } - - return header; -} - -} // namespace - -bool is_eof_container(bytes_view container) noexcept -{ - return container.size() > 1 && container[0] == MAGIC[0] && container[1] == MAGIC[1]; -} - -/// This function expects the prefix and version to be valid, as it ignores it. -EOF1Header read_valid_eof1_header(bytes_view container) -{ - EOFSectionHeaders section_headers; - auto it = container.begin() + std::size(MAGIC) + 1; // MAGIC + VERSION - while (*it != TERMINATOR) - { - const auto section_id = *it++; - if (section_id == CODE_SECTION) - { - const auto code_section_num = read_uint16_be(it); - it += 2; - for (uint16_t i = 0; i < code_section_num; ++i) - { - const auto section_size = read_uint16_be(it); - it += 2; - section_headers[section_id].emplace_back(section_size); - } - } - else - { - const auto section_size = read_uint16_be(it); - it += 2; - section_headers[section_id].emplace_back(section_size); - } - } - const auto header_size = eof_header_size(section_headers); - - EOF1Header header; - - header.version = container[2]; - - for (auto type_offset = header_size; - type_offset < header_size + section_headers[TYPE_SECTION][0]; type_offset += 4) - { - header.types.emplace_back(container[type_offset], container[type_offset + 1], - read_uint16_be(&container[type_offset + 2])); - } - - header.code_sizes = section_headers[CODE_SECTION]; - auto code_offset = header_size + section_headers[TYPE_SECTION][0]; - for (const auto code_size : header.code_sizes) - { - assert(code_offset <= std::numeric_limits::max()); - header.code_offsets.emplace_back(static_cast(code_offset)); - code_offset += code_size; - } - - header.data_size = section_headers[DATA_SECTION][0]; - - return header; -} - -uint8_t get_eof_version(bytes_view container) noexcept -{ - return (container.size() >= 3 && container[0] == MAGIC[0] && container[1] == MAGIC[1]) ? - container[2] : - 0; -} - -EOFValidationError validate_eof(evmc_revision rev, bytes_view container) noexcept -{ - if (!is_eof_container(container)) - return EOFValidationError::invalid_prefix; - - const auto version = get_eof_version(container); - - if (version == 1) - { - if (rev < EVMC_PRAGUE) - return EOFValidationError::eof_version_unknown; - - const auto header_or_error = validate_eof1(rev, container); - if (const auto* error = std::get_if(&header_or_error)) - return *error; - else - return EOFValidationError::success; - } - else - return EOFValidationError::eof_version_unknown; -} - -std::string_view get_error_message(EOFValidationError err) noexcept -{ - switch (err) - { - case EOFValidationError::success: - return "success"; - case EOFValidationError::starts_with_format: - return "starts_with_format"; - case EOFValidationError::invalid_prefix: - return "invalid_prefix"; - case EOFValidationError::eof_version_mismatch: - return "eof_version_mismatch"; - case EOFValidationError::eof_version_unknown: - return "eof_version_unknown"; - case EOFValidationError::incomplete_section_size: - return "incomplete_section_size"; - case EOFValidationError::incomplete_section_number: - return "incomplete_section_number"; - case EOFValidationError::header_terminator_missing: - return "header_terminator_missing"; - case EOFValidationError::type_section_missing: - return "type_section_missing"; - case EOFValidationError::code_section_missing: - return "code_section_missing"; - case EOFValidationError::data_section_missing: - return "data_section_missing"; - case EOFValidationError::zero_section_size: - return "zero_section_size"; - case EOFValidationError::section_headers_not_terminated: - return "section_headers_not_terminated"; - case EOFValidationError::invalid_section_bodies_size: - return "invalid_section_bodies_size"; - case EOFValidationError::undefined_instruction: - return "undefined_instruction"; - case EOFValidationError::truncated_instruction: - return "truncated_instruction"; - case EOFValidationError::invalid_rjump_destination: - return "invalid_rjump_destination"; - case EOFValidationError::too_many_code_sections: - return "too_many_code_sections"; - case EOFValidationError::invalid_type_section_size: - return "invalid_type_section_size"; - case EOFValidationError::invalid_first_section_type: - return "invalid_first_section_type"; - case EOFValidationError::invalid_max_stack_height: - return "invalid_max_stack_height"; - case EOFValidationError::max_stack_height_above_limit: - return "max_stack_height_above_limit"; - case EOFValidationError::inputs_outputs_num_above_limit: - return "inputs_outputs_num_above_limit"; - case EOFValidationError::no_terminating_instruction: - return "no_terminating_instruction"; - case EOFValidationError::stack_height_mismatch: - return "stack_height_mismatch"; - case EOFValidationError::stack_higher_than_outputs_required: - return "stack_higher_than_outputs_required"; - case EOFValidationError::unreachable_instructions: - return "unreachable_instructions"; - case EOFValidationError::stack_underflow: - return "stack_underflow"; - case EOFValidationError::stack_overflow: - return "stack_overflow"; - case EOFValidationError::invalid_code_section_index: - return "invalid_code_section_index"; - case EOFValidationError::invalid_dataloadn_index: - return "invalid_dataloadn_index"; - case EOFValidationError::jumpf_destination_incompatible_outputs: - return "jumpf_destination_incompatible_outputs"; - case EOFValidationError::invalid_non_returning_flag: - return "invalid_non_returning_flag"; - case EOFValidationError::callf_to_non_returning_function: - return "callf_to_non_returning_function"; - case EOFValidationError::impossible: - return "impossible"; - } - return ""; -} - -std::ostream& operator<<(std::ostream& os, EOFValidationError err) noexcept -{ - os << get_error_message(err); - return os; -} -} // namespace evmone diff --git a/evm-assigner/lib/assigner/evmone/eof.hpp b/evm-assigner/lib/assigner/evmone/eof.hpp deleted file mode 100644 index ca64e8ff15..0000000000 --- a/evm-assigner/lib/assigner/evmone/eof.hpp +++ /dev/null @@ -1,142 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2021 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 -#pragma once - -#include -#include -#include "utils.h" -#include -#include -#include -#include -#include - -namespace evmone -{ -using bytes_view = std::basic_string_view; - -struct EOFCodeType -{ - uint8_t inputs; ///< Number of code inputs. - uint8_t outputs; ///< Number of code outputs. - uint16_t max_stack_height; ///< Maximum stack height reached in the code. - - EOFCodeType(uint8_t inputs_, uint8_t outputs_, uint16_t max_stack_height_) - : inputs{inputs_}, outputs{outputs_}, max_stack_height{max_stack_height_} - {} -}; - -struct EOF1Header -{ - /// The EOF version, 0 means legacy code. - uint8_t version = 0; - - /// Size of every code section. - std::vector code_sizes; - - /// Offset of every code section from the beginning of the EOF container. - std::vector code_offsets; - - uint16_t data_size = 0; - - std::vector types; - - /// A helper to extract reference to a specific code section. - [[nodiscard]] bytes_view get_code(bytes_view container, size_t code_idx) const noexcept - { - assert(code_idx < code_offsets.size()); - return container.substr(code_offsets[code_idx], code_sizes[code_idx]); - } - - /// A helper to extract reference to the data section. - [[nodiscard]] bytes_view get_data(bytes_view container) const noexcept - { - if (data_size == 0) - return {}; - - return container.substr(code_offsets.back() + code_sizes.back(), data_size); - } -}; - -/// Checks if code starts with EOF FORMAT + MAGIC, doesn't validate the format. -[[nodiscard]] EVMC_EXPORT bool is_eof_container(bytes_view code) noexcept; - -/// Reads the section sizes assuming that container has valid format. -/// (must be true for all EOF contracts on-chain) -[[nodiscard]] EVMC_EXPORT EOF1Header read_valid_eof1_header(bytes_view container); - -enum class EOFValidationError -{ - success, - starts_with_format, - invalid_prefix, - eof_version_mismatch, - eof_version_unknown, - - incomplete_section_size, - incomplete_section_number, - header_terminator_missing, - type_section_missing, - code_section_missing, - data_section_missing, - zero_section_size, - section_headers_not_terminated, - invalid_section_bodies_size, - undefined_instruction, - truncated_instruction, - invalid_rjump_destination, - too_many_code_sections, - invalid_type_section_size, - invalid_first_section_type, - invalid_max_stack_height, - no_terminating_instruction, - stack_height_mismatch, - stack_higher_than_outputs_required, - max_stack_height_above_limit, - inputs_outputs_num_above_limit, - unreachable_instructions, - stack_underflow, - stack_overflow, - invalid_code_section_index, - invalid_dataloadn_index, - jumpf_destination_incompatible_outputs, - invalid_non_returning_flag, - callf_to_non_returning_function, - - impossible, -}; - -/// Determines the EOF version of the container by inspecting container's EOF prefix. -/// If the prefix is missing or invalid, 0 is returned meaning legacy code. -[[nodiscard]] uint8_t get_eof_version(bytes_view container) noexcept; - -/// Validates whether given container is a valid EOF according to the rules of given revision. -[[nodiscard]] EVMC_EXPORT EOFValidationError validate_eof( - evmc_revision rev, bytes_view container) noexcept; - -/// Returns the error message corresponding to an error code. -[[nodiscard]] EVMC_EXPORT std::string_view get_error_message(EOFValidationError err) noexcept; - -/// Output operator for EOFValidationError. -EVMC_EXPORT std::ostream& operator<<(std::ostream& os, EOFValidationError err) noexcept; - -/// Loads big endian int16_t from data. Unsafe. -/// TODO: Move it to intx -inline int16_t read_int16_be(auto it) noexcept -{ - const uint8_t h = *it++; - const uint8_t l = *it; - return static_cast((h << 8) | l); -} - -/// Loads big endian uint16_t from data. Unsafe. -/// TODO: Move it to intx -inline uint16_t read_uint16_be(auto it) noexcept -{ - const uint8_t h = *it++; - const uint8_t l = *it; - return static_cast((h << 8) | l); -} - -} // namespace evmone diff --git a/evm-assigner/lib/assigner/evmone/execution_state.hpp b/evm-assigner/lib/assigner/evmone/execution_state.hpp deleted file mode 100644 index 4ba1f86933..0000000000 --- a/evm-assigner/lib/assigner/evmone/execution_state.hpp +++ /dev/null @@ -1,212 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2019 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 -#pragma once - -#include -#include -#include - -#include -#include - -namespace nil { - namespace evm_assigner { - template - struct assigner; - } -} - -namespace evmone -{ -namespace baseline -{ -class CodeAnalysis; -} - -using bytes = std::basic_string; -using bytes_view = std::basic_string_view; - -/// Provides memory for EVM stack. -template -class StackSpace -{ -public: - /// The maximum number of EVM stack items. - static constexpr auto limit = 1024; - - /// Returns the pointer to the "bottom", i.e. below the stack space. - [[nodiscard, clang::no_sanitize("bounds")]] nil::evm_assigner::zkevm_word* bottom() noexcept - { - return m_stack_space - 1; - } - -private: - /// The storage allocated for maximum possible number of items. - nil::evm_assigner::zkevm_word m_stack_space[limit]; -}; - - -/// The EVM memory. -/// -/// The implementations uses initial allocation of 4k and then grows capacity with 2x factor. -/// Some benchmarks has been done to confirm 4k is ok-ish value. -class Memory -{ - /// The size of allocation "page". - static constexpr size_t page_size = 4 * 1024; - - /// Pointer to allocated memory. - uint8_t* m_data = nullptr; - - /// The "virtual" size of the memory. - size_t m_size = 0; - - /// The size of allocated memory. The initialization value is the initial capacity. - size_t m_capacity = page_size; - - [[noreturn, gnu::cold]] static void handle_out_of_memory() noexcept { std::terminate(); } - - void allocate_capacity() noexcept - { - m_data = static_cast(std::realloc(m_data, m_capacity)); - if (m_data == nullptr) - handle_out_of_memory(); - } - -public: - /// Creates Memory object with initial capacity allocation. - Memory() noexcept { allocate_capacity(); } - - /// Frees all allocated memory. - ~Memory() noexcept { std::free(m_data); } - - Memory(const Memory&) = delete; - Memory& operator=(const Memory&) = delete; - - uint8_t& operator[](size_t index) noexcept { return m_data[index]; } - - [[nodiscard]] const uint8_t* data() const noexcept { return m_data; } - [[nodiscard]] size_t size() const noexcept { return m_size; } - - /// Grows the memory to the given size. The extend is filled with zeros. - /// - /// @param new_size New memory size. Must be larger than the current size and multiple of 32. - void grow(size_t new_size) noexcept - { - // Restriction for future changes. EVM always has memory size as multiple of 32 bytes. - assert(new_size % 32 == 0); - - // Allow only growing memory. Include hint for optimizing compiler. - assert(new_size > m_size); - - if (new_size > m_capacity) - { - m_capacity *= 2; // Double the capacity. - - if (m_capacity < new_size) // If not enough. - { - // Set capacity to required size rounded to multiple of page_size. - m_capacity = ((new_size + (page_size - 1)) / page_size) * page_size; - } - - allocate_capacity(); - } - std::memset(m_data + m_size, 0, new_size - m_size); - m_size = new_size; - } - - /// Virtually clears the memory by setting its size to 0. The capacity stays unchanged. - void clear() noexcept { m_size = 0; } -}; - -/// Generic execution state for generic instructions implementations. -// NOLINTNEXTLINE(clang-analyzer-optin.performance.Padding) -template -class ExecutionState -{ -public: - int64_t gas_refund = 0; - Memory memory; - const evmc_message* msg = nullptr; - evmc::HostContext host; - evmc_revision rev = {}; - bytes return_data; - - /// Reference to original EVM code container. - /// For legacy code this is a reference to entire original code. - /// For EOF-formatted code this is a reference to entire container. - bytes_view original_code; - - /// Reference to the EOF data section. May be empty. - bytes_view data; - - evmc_status_code status = EVMC_SUCCESS; - size_t output_offset = 0; - size_t output_size = 0; - - std::size_t call_id; - std::vector> rw_trace; - std::shared_ptr> assigner; - -private: - evmc_tx_context m_tx = {}; - -public: - /// Pointer to code analysis. - /// This should be set and used internally by execute() function of a particular interpreter. - union - { - const baseline::CodeAnalysis* baseline = nullptr; - } analysis{}; - - std::vector call_stack; - - /// Stack space allocation. - /// - /// This is the last field to make other fields' offsets of reasonable values. - StackSpace stack_space; - - ExecutionState() noexcept = default; - - ExecutionState(const evmc_message& message, evmc_revision revision, - const evmc_host_interface& host_interface, evmc_host_context* host_ctx, bytes_view _code, - bytes_view _data, size_t _call_id, std::shared_ptr> _assigner) noexcept - : msg{&message}, - host{host_interface, host_ctx}, - rev{revision}, - original_code{_code}, - data{_data}, - call_id{_call_id}, - assigner{_assigner} - {} - - /// Resets the contents of the ExecutionState so that it could be reused. - void reset(const evmc_message& message, evmc_revision revision, - const evmc_host_interface& host_interface, evmc_host_context* host_ctx, bytes_view _code, - bytes_view _data) noexcept - { - gas_refund = 0; - memory.clear(); - msg = &message; - host = {host_interface, host_ctx}; - rev = revision; - return_data.clear(); - original_code = _code; - data = _data; - status = EVMC_SUCCESS; - output_offset = 0; - output_size = 0; - m_tx = {}; - } - - [[nodiscard]] bool in_static_mode() const { return (msg->flags & EVMC_STATIC) != 0; } - - const evmc_tx_context& get_tx_context() noexcept - { - if (m_tx.block_timestamp == 0) - m_tx = host.get_tx_context(); - return m_tx; - } -}; -} // namespace evmone diff --git a/evm-assigner/lib/assigner/evmone/instructions.hpp b/evm-assigner/lib/assigner/evmone/instructions.hpp deleted file mode 100644 index f5402e16f9..0000000000 --- a/evm-assigner/lib/assigner/evmone/instructions.hpp +++ /dev/null @@ -1,1749 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2019 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 -#pragma once - -#include -#include -#include "eof.hpp" -#include "execution_state.hpp" -#include "instructions_traits.hpp" -#include "instructions_xmacro.hpp" -#include - -namespace evmone -{ -using code_iterator = const uint8_t*; - -/// Represents the pointer to the stack top item -/// and allows retrieving stack items and manipulating the pointer. -template -class StackTop -{ - nil::evm_assigner::zkevm_word* m_top; - -public: - StackTop(nil::evm_assigner::zkevm_word* top) noexcept : m_top{top} {} - - /// Returns the reference to the stack item by index, where 0 means the top item - /// and positive index values the items further down the stack. - /// Using [-1] is also valid, but .push() should be used instead. - [[nodiscard]] nil::evm_assigner::zkevm_word& operator[](int index) noexcept { return m_top[-index]; } - - /// Returns the reference to the stack top item. - [[nodiscard]] nil::evm_assigner::zkevm_word& top() noexcept { return *m_top; } - - /// Returns the current top item and move the stack top pointer down. - /// The value is returned by reference because the stack slot remains valid. - [[nodiscard]] nil::evm_assigner::zkevm_word& pop() noexcept { return *m_top--; } - - /// Assigns the value to the stack top and moves the stack top pointer up. - void push(const nil::evm_assigner::zkevm_word& value) noexcept { *++m_top = value; } - - /// size of stack - uint16_t size(nil::evm_assigner::zkevm_word* bottom) noexcept { return (m_top > bottom) ? (uint16_t)(m_top - bottom) : 0; } -}; - - -/// Instruction execution result. -struct Result -{ - evmc_status_code status; - int64_t gas_left; -}; - -struct DynStackResult -{ - evmc_status_code status; - int64_t gas_left; - int16_t stack_pop{-1}; -}; - -/// Instruction result indicating that execution terminates unconditionally. -struct TermResult : Result -{}; - -constexpr auto max_buffer_size = std::numeric_limits::max(); - -/// The size of the EVM 256-bit word. -constexpr auto word_size = 32; - -/// Returns number of words what would fit to provided number of bytes, -/// i.e. it rounds up the number bytes to number of words. -inline constexpr int64_t num_words(uint64_t size_in_bytes) noexcept -{ - return static_cast((size_in_bytes + (word_size - 1)) / word_size); -} - -/// Computes gas cost of copying the given amount of bytes to/from EVM memory. -inline constexpr int64_t copy_cost(uint64_t size_in_bytes) noexcept -{ - constexpr auto WordCopyCost = 3; - return num_words(size_in_bytes) * WordCopyCost; -} - -/// Grows EVM memory and checks its cost. -/// -/// This function should not be inlined because this may affect other inlining decisions: -/// - making check_memory() too costly to inline, -/// - making mload()/mstore()/mstore8() too costly to inline. -/// -/// TODO: This function should be moved to Memory class. -[[gnu::noinline]] inline int64_t grow_memory( - int64_t gas_left, Memory& memory, uint64_t new_size) noexcept -{ - // This implementation recomputes memory.size(). This value is already known to the caller - // and can be passed as a parameter, but this make no difference to the performance. - - const auto new_words = num_words(new_size); - const auto current_words = static_cast(memory.size() / word_size); - const auto new_cost = 3 * new_words + new_words * new_words / 512; - const auto current_cost = 3 * current_words + current_words * current_words / 512; - const auto cost = new_cost - current_cost; - - gas_left -= cost; - if (gas_left >= 0) [[likely]] - memory.grow(static_cast(new_words * word_size)); - return gas_left; -} - -/// The gas cost specification for storage instructions. -struct StorageCostSpec -{ - bool net_cost; ///< Is this net gas cost metering schedule? - int16_t warm_access; ///< Storage warm access cost, YP: G_{warmaccess} - int16_t set; ///< Storage addition cost, YP: G_{sset} - int16_t reset; ///< Storage modification cost, YP: G_{sreset} - int16_t clear; ///< Storage deletion refund, YP: R_{sclear} -}; - -/// Table of gas cost specification for storage instructions per EVM revision. -/// TODO: This can be moved to instruction traits and be used in other places: e.g. -/// SLOAD cost, replacement for warm_storage_read_cost. -constexpr auto storage_cost_spec = []() noexcept { - std::array tbl{}; - - // Legacy cost schedule. - for (auto rev : {EVMC_FRONTIER, EVMC_HOMESTEAD, EVMC_TANGERINE_WHISTLE, EVMC_SPURIOUS_DRAGON, - EVMC_BYZANTIUM, EVMC_PETERSBURG}) - tbl[rev] = {false, 200, 20000, 5000, 15000}; - - // Net cost schedule. - tbl[EVMC_CONSTANTINOPLE] = {true, 200, 20000, 5000, 15000}; - tbl[EVMC_ISTANBUL] = {true, 800, 20000, 5000, 15000}; - tbl[EVMC_BERLIN] = { - true, instr::warm_storage_read_cost, 20000, 5000 - instr::cold_sload_cost, 15000}; - tbl[EVMC_LONDON] = { - true, instr::warm_storage_read_cost, 20000, 5000 - instr::cold_sload_cost, 4800}; - tbl[EVMC_PARIS] = tbl[EVMC_LONDON]; - tbl[EVMC_SHANGHAI] = tbl[EVMC_LONDON]; - tbl[EVMC_CANCUN] = tbl[EVMC_LONDON]; - tbl[EVMC_PRAGUE] = tbl[EVMC_LONDON]; - return tbl; -}(); - - -struct StorageStoreCost -{ - int16_t gas_cost; - int16_t gas_refund; -}; - -// The lookup table of SSTORE costs by the storage update status. -constexpr auto sstore_costs = []() noexcept { - std::array, - EVMC_MAX_REVISION + 1> - tbl{}; - - for (size_t rev = EVMC_FRONTIER; rev <= EVMC_MAX_REVISION; ++rev) - { - auto& e = tbl[rev]; - if (const auto c = storage_cost_spec[rev]; !c.net_cost) // legacy - { - e[EVMC_STORAGE_ADDED] = {c.set, 0}; - e[EVMC_STORAGE_DELETED] = {c.reset, c.clear}; - e[EVMC_STORAGE_MODIFIED] = {c.reset, 0}; - e[EVMC_STORAGE_ASSIGNED] = e[EVMC_STORAGE_MODIFIED]; - e[EVMC_STORAGE_DELETED_ADDED] = e[EVMC_STORAGE_ADDED]; - e[EVMC_STORAGE_MODIFIED_DELETED] = e[EVMC_STORAGE_DELETED]; - e[EVMC_STORAGE_DELETED_RESTORED] = e[EVMC_STORAGE_ADDED]; - e[EVMC_STORAGE_ADDED_DELETED] = e[EVMC_STORAGE_DELETED]; - e[EVMC_STORAGE_MODIFIED_RESTORED] = e[EVMC_STORAGE_MODIFIED]; - } - else // net cost - { - e[EVMC_STORAGE_ASSIGNED] = {c.warm_access, 0}; - e[EVMC_STORAGE_ADDED] = {c.set, 0}; - e[EVMC_STORAGE_DELETED] = {c.reset, c.clear}; - e[EVMC_STORAGE_MODIFIED] = {c.reset, 0}; - e[EVMC_STORAGE_DELETED_ADDED] = {c.warm_access, static_cast(-c.clear)}; - e[EVMC_STORAGE_MODIFIED_DELETED] = {c.warm_access, c.clear}; - e[EVMC_STORAGE_DELETED_RESTORED] = { - c.warm_access, static_cast(c.reset - c.warm_access - c.clear)}; - e[EVMC_STORAGE_ADDED_DELETED] = { - c.warm_access, static_cast(c.set - c.warm_access)}; - e[EVMC_STORAGE_MODIFIED_RESTORED] = { - c.warm_access, static_cast(c.reset - c.warm_access)}; - } - } - - return tbl; -}(); - -namespace instr::core -{ -template -struct instructions { - /// Check memory requirements of a reasonable size. - static bool check_memory( - int64_t& gas_left, Memory& memory, const nil::evm_assigner::zkevm_word& offset, uint64_t size) noexcept - { - // TODO: This should be done in intx. - // There is "branchless" variant of this using | instead of ||, but benchmarks difference - // is within noise. This should be decided when moving the implementation to intx. - auto offset_uint = offset.to_uint64(); - if (offset_uint > max_buffer_size) - return false; - - const auto new_size = offset_uint + size; - if (new_size > memory.size()) - gas_left = grow_memory(gas_left, memory, new_size); - - return gas_left >= 0; // Always true for no-grow case. - } - - /// Check memory requirements for "copy" instructions. - static bool check_memory( - int64_t& gas_left, Memory& memory, const nil::evm_assigner::zkevm_word& offset, const nil::evm_assigner::zkevm_word& size) noexcept - { - if (size == 0) // Copy of size 0 is always valid (even if offset is huge). - return true; - - // This check has 3 same word checks with the check above. - // However, compilers do decent although not perfect job unifying common instructions. - // TODO: This should be done in intx. - const auto size_uint = size.to_uint64(); - if (size_uint > max_buffer_size) - return false; - - return check_memory(gas_left, memory, offset, size_uint); - } - /// The "core" instruction implementations. - /// - /// These are minimal EVM instruction implementations which assume: - /// - the stack requirements (overflow, underflow) have already been checked, - /// - the "base" gas const has already been charged, - /// - the `stack` pointer points to the EVM stack top element. - /// Moreover, these implementations _do not_ inform about new stack height - /// after execution. The adjustment must be performed by the caller. - static void noop(StackTop /*stack*/) noexcept {} - static void pop(StackTop /*stack*/) noexcept {} - static void jumpdest(StackTop /*stack*/) noexcept {} - - static TermResult stop_impl( - StackTop /*stack*/, int64_t gas_left, ExecutionState& /*state*/, evmc_status_code Status) noexcept - { - return {Status, gas_left}; - } - static TermResult stop(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return stop_impl(stack, gas_left, state, EVMC_SUCCESS); - } - - static TermResult invalid(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return stop_impl(stack, gas_left, state, EVMC_INVALID_INSTRUCTION); - } - - static void add(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = stack.top() + x;// calculate stack next - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void mul(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = stack.top() * x; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void sub(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = x - stack.top(); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void div(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - auto& v = stack[0]; - v = v != 0 ? x / v : 0; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void sdiv(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - auto& v = stack[0]; - v = x.sdiv(v); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void mod(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - auto& v = stack[0]; - v = v != 0 ? x % v : 0; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void smod(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - auto& v = stack[0]; - v = x.smod(v); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void addmod(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - const auto& y = stack.pop(); - auto& m = stack.top(); - m = x.addmod(y, m); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void mulmod(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack[0]; - const auto& y = stack[1]; - auto& m = stack[2]; - m = x.mulmod(y, m); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result exp(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& base = stack.pop(); - auto& exponent = stack.top(); - - const unsigned exponent_significant_bytes = exponent.count_significant_bytes(); - const unsigned exponent_cost = state.rev >= EVMC_SPURIOUS_DRAGON ? 50 : 10; - const auto additional_cost = exponent_significant_bytes * exponent_cost; - if ((gas_left -= additional_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - exponent = base.exp(exponent); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return {EVMC_SUCCESS, gas_left}; - } - - static void signextend(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& ext = stack.pop(); - auto& x = stack.top(); - - if (ext < 31) // For 31 we also don't need to do anything. - { - const auto e = ext.to_uint64(); // uint256 -> uint64. - const auto sign_word_index = - static_cast(e / sizeof(e)); // Index of the word with the sign bit. - const auto sign_byte_index = e % sizeof(e); // Index of the sign byte in the sign word. - auto sign_word = x.to_uint64(sign_word_index); - - const auto sign_byte_offset = sign_byte_index * 8; - const auto sign_byte = sign_word >> sign_byte_offset; // Move sign byte to position 0. - - // Sign-extend the "sign" byte and move it to the right position. Value bits are zeros. - const auto sext_byte = static_cast(int64_t{static_cast(sign_byte)}); - const auto sext = sext_byte << sign_byte_offset; - - const auto sign_mask = ~uint64_t{0} << sign_byte_offset; - const auto value = sign_word & ~sign_mask; // Reset extended bytes. - sign_word = sext | value; // Combine the result word. - - // Produce bits (all zeros or ones) for extended words. This is done by SAR of - // the sign-extended byte. Shift by any value 7-63 would work. - const auto sign_ex = static_cast(static_cast(sext_byte) >> 8); - - for (size_t i = 3; i > sign_word_index; --i) - x.set_val(sign_ex, i); // Clear extended words. - } - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void lt(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack[0] = x < stack[0]; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void gt(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack[0] = stack[0] < x; // Arguments are swapped and < is used. - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void slt(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack[0] = x.slt(stack[0]); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void sgt(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack[0] = stack[0].slt(x); // Arguments are swapped and SLT is used. - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void eq(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack[0] = stack[0] == x; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void iszero(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - stack.top() = stack.top() == 0; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void and_(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = stack.top() & x; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void or_(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = stack.top() | x; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void xor_(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = stack.top() ^ x; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void not_(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - stack.top() = ~stack.top(); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void byte(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& n = stack.pop(); - auto& x = stack.top(); - - const bool n_valid = n < 32; - const uint64_t byte_mask = (n_valid ? 0xff : 0); - - const auto index = 31 - static_cast(n.to_uint64() % 32); - const auto word = x.to_uint64(index / 8); - const auto byte_index = index % 8; - const auto byte = (word >> (byte_index * 8)) & byte_mask; - x = nil::evm_assigner::zkevm_word(byte); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void shl(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = stack.top() << x; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void shr(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& x = stack.pop(); - stack.top() = stack.top() >> x; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void sar(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& y = stack.pop(); - auto& x = stack.top(); - - const bool is_neg = x.to_uint64(3) < 0; // Inspect the top bit (words are LE). - const nil::evm_assigner::zkevm_word sign_mask = is_neg ? 1 : 0; - - const auto mask_shift = (y < 256) ? (256 - y.to_uint64(0)) : 0; - x = (x >> y) | (sign_mask << mask_shift); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result keccak256(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& index = stack.pop(); - auto& size = stack.top(); - - if (!check_memory(gas_left, state.memory, index, size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto i = index.to_uint64(); - const auto s = size.to_uint64(); - const auto w = num_words(s); - const auto cost = w * 6; - if ((gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - uint8_t* data = nullptr; - if (s != 0 ) { - data = &state.memory[i]; - for(uint64_t j = 0; j < 32; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, index + j, state.rw_trace.size(), false, data[j])); - } - } - size = nil::evm_assigner::zkevm_word(ethash::keccak256(data, s)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return {EVMC_SUCCESS, gas_left}; - } - - - static void address(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.msg->recipient)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result balance(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& x = stack.top(); - const auto addr = x.to_address(); - - if (state.rev >= EVMC_BERLIN && state.host.access_account(addr) == EVMC_ACCESS_COLD) - { - if ((gas_left -= instr::additional_cold_account_access_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - - x = nil::evm_assigner::zkevm_word(state.host.get_balance(addr)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return {EVMC_SUCCESS, gas_left}; - } - - static void origin(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.get_tx_context().tx_origin)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void caller(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.msg->sender)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void callvalue(StackTop stack, ExecutionState& state) noexcept - { - auto val = nil::evm_assigner::zkevm_word(state.msg->value); - stack.push(val); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void calldataload(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& index = stack.top(); - - const auto index_uint64 = index.to_uint64(); - if (state.msg->input_size < index_uint64) - index = 0; - else - { - const auto begin = index_uint64; - const auto end = std::min(begin + 32, state.msg->input_size); - - uint8_t data[32] = {}; - for (size_t i = 0; i < (end - begin); ++i) - data[i] = state.msg->input_data[begin + i]; - - index = nil::evm_assigner::zkevm_word(data, 32); - } - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void calldatasize(StackTop stack, ExecutionState& state) noexcept - { - stack.push(state.msg->input_size); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result calldatacopy(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& mem_index = stack.pop(); - const auto& input_index = stack.pop(); - const auto& size = stack.pop(); - - if (!check_memory(gas_left, state.memory, mem_index, size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - auto dst = mem_index.to_uint64(); - const auto input_index_uint64 = input_index.to_uint64(); - auto src = state.msg->input_size < input_index_uint64 ? state.msg->input_size : input_index_uint64; - auto s = size.to_uint64(); - auto copy_size = std::min(s, state.msg->input_size - src); - - if (const auto cost = copy_cost(s); (gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (copy_size > 0) - std::memcpy(&state.memory[dst], &state.msg->input_data[src], copy_size); - - if (s - copy_size > 0) - std::memset(&state.memory[dst + copy_size], 0, s - copy_size); - - for(uint64_t j = 0; j < copy_size; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, mem_index + j, state.rw_trace.size(), true, state.memory[dst + j])); - } - - return {EVMC_SUCCESS, gas_left}; - } - - static void codesize(StackTop stack, ExecutionState& state) noexcept - { - stack.push(state.original_code.size()); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result codecopy(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - // TODO: Similar to calldatacopy(). - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - - const auto& mem_index = stack.pop(); - const auto& input_index = stack.pop(); - const auto& size = stack.pop(); - - if (!check_memory(gas_left, state.memory, mem_index, size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto code_size = state.original_code.size(); - const auto dst = mem_index.to_uint64(); - const auto input_index_uint64 = input_index.to_uint64(); - const auto src = code_size < input_index_uint64 ? code_size : input_index_uint64; - const auto s = size.to_uint64(); - const auto copy_size = std::min(s, code_size - src); - - if (const auto cost = copy_cost(s); (gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - // TODO: Add unit tests for each combination of conditions. - if (copy_size > 0) - std::memcpy(&state.memory[dst], &state.original_code[src], copy_size); - - if (s - copy_size > 0) - std::memset(&state.memory[dst + copy_size], 0, s - copy_size); - - for(uint64_t j = 0; j < copy_size; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, mem_index + j, state.rw_trace.size(), true, state.memory[dst + j])); - } - - return {EVMC_SUCCESS, gas_left}; - } - - - static void gasprice(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.get_tx_context().tx_gas_price)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void basefee(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.get_tx_context().block_base_fee)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void blobhash(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& index = stack.top(); - const auto& tx = state.get_tx_context(); - const auto index_uin64 = index.to_uint64(); - - index = (index_uin64 < tx.blob_hashes_count) ? - nil::evm_assigner::zkevm_word(tx.blob_hashes[index_uin64]) : - 0; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void blobbasefee(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.get_tx_context().blob_base_fee)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result extcodesize(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& x = stack.top(); - const auto addr = x.to_address(); - - if (state.rev >= EVMC_BERLIN && state.host.access_account(addr) == EVMC_ACCESS_COLD) - { - if ((gas_left -= instr::additional_cold_account_access_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - - x = state.host.get_code_size(addr); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return {EVMC_SUCCESS, gas_left}; - } - - static Result extcodecopy(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-4, state.rw_trace.size(), false, stack[3])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto addr = stack.pop().to_address(); - const auto& mem_index = stack.pop(); - const auto& input_index = stack.pop(); - const auto& size = stack.pop(); - - if (!check_memory(gas_left, state.memory, mem_index, size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto s = size.to_uint64(); - if (const auto cost = copy_cost(s); (gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (state.rev >= EVMC_BERLIN && state.host.access_account(addr) == EVMC_ACCESS_COLD) - { - if ((gas_left -= instr::additional_cold_account_access_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - - if (s > 0) - { - const auto input_index_uint64 = input_index.to_uint64(); - const auto src = - (max_buffer_size < input_index_uint64) ? max_buffer_size : input_index_uint64; - const auto dst = mem_index.to_uint64(); - const auto num_bytes_copied = state.host.copy_code(addr, src, &state.memory[dst], s); - if (const auto num_bytes_to_clear = s - num_bytes_copied; num_bytes_to_clear > 0) - std::memset(&state.memory[dst + num_bytes_copied], 0, num_bytes_to_clear); - // TODO: add length write operations to memory - } - - return {EVMC_SUCCESS, gas_left}; - } - - static void returndatasize(StackTop stack, ExecutionState& state) noexcept - { - stack.push(state.return_data.size()); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result returndatacopy(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& mem_index = stack.pop(); - const auto& input_index = stack.pop(); - const auto& size = stack.pop(); - - if (!check_memory(gas_left, state.memory, mem_index, size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - auto dst = mem_index.to_uint64(); - auto s = size.to_uint64(); - - auto src = input_index.to_uint64(); - if (state.return_data.size() < src) - return {EVMC_INVALID_MEMORY_ACCESS, gas_left}; - - if (src + s > state.return_data.size()) - return {EVMC_INVALID_MEMORY_ACCESS, gas_left}; - - if (const auto cost = copy_cost(s); (gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (s > 0) { - std::memcpy(&state.memory[dst], &state.return_data[src], s); - for(uint64_t j = 0; j < s; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, dst + j, state.rw_trace.size(), true, state.memory[dst + j])); - } - } - - return {EVMC_SUCCESS, gas_left}; - } - - static Result extcodehash(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& x = stack.top(); - const auto addr = x.to_address(); - - if (state.rev >= EVMC_BERLIN && state.host.access_account(addr) == EVMC_ACCESS_COLD) - { - if ((gas_left -= instr::additional_cold_account_access_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - - x = nil::evm_assigner::zkevm_word(state.host.get_code_hash(addr)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return {EVMC_SUCCESS, gas_left}; - } - - - static void blockhash(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& number = stack.top(); - - const auto upper_bound = state.get_tx_context().block_number; - const auto lower_bound = std::max(upper_bound - 256, decltype(upper_bound){0}); - const auto n = number.to_uint64(); - const auto header = - (decltype(upper_bound)(n) < upper_bound && decltype(upper_bound)(n) >= lower_bound) ? - state.host.get_block_hash(decltype(upper_bound)(n)) : evmc::bytes32{}; - number = nil::evm_assigner::zkevm_word(header); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void coinbase(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.get_tx_context().block_coinbase)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void timestamp(StackTop stack, ExecutionState& state) noexcept - { - // TODO: Add tests for negative timestamp? - stack.push(static_cast(state.get_tx_context().block_timestamp)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void number(StackTop stack, ExecutionState& state) noexcept - { - // TODO: Add tests for negative block number? - stack.push(static_cast(state.get_tx_context().block_number)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void prevrandao(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.get_tx_context().block_prev_randao)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void gaslimit(StackTop stack, ExecutionState& state) noexcept - { - stack.push(static_cast(state.get_tx_context().block_gas_limit)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void chainid(StackTop stack, ExecutionState& state) noexcept - { - stack.push(nil::evm_assigner::zkevm_word(state.get_tx_context().chain_id)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static void selfbalance(StackTop stack, ExecutionState& state) noexcept - { - // TODO: introduce selfbalance in EVMC? - stack.push(nil::evm_assigner::zkevm_word(state.host.get_balance(state.msg->recipient))); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - template - static Result mload(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& index = stack.top(); - - if (!check_memory(gas_left, state.memory, index, nil::evm_assigner::zkevm_word::size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto addr = index.to_uint64(); - index = nil::evm_assigner::zkevm_word(&state.memory[addr], nil::evm_assigner::zkevm_word::size); - for(uint64_t j = 0; j < nil::evm_assigner::zkevm_word::size; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, addr + j, state.rw_trace.size(), false, state.memory[addr + j])); - } - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return {EVMC_SUCCESS, gas_left}; - } - - template - static Result mstore(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& index = stack.pop(); - auto& value = stack.pop(); - - if (!check_memory(gas_left, state.memory, index, nil::evm_assigner::zkevm_word::size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto addr = index.to_uint64(); - value.template store(&state.memory[addr]); - for(uint64_t j = 0; j < nil::evm_assigner::zkevm_word::size; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, addr + j, state.rw_trace.size(), true, state.memory[addr + j])); - } - return {EVMC_SUCCESS, gas_left}; - } - - static Result mstore8(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& index = stack.pop(); - const auto& value = stack.pop(); - - if (!check_memory(gas_left, state.memory, index, 1)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto addr = (int)index.to_uint64(); - state.memory[addr] = value.to_uint64(); - for(uint64_t j = 0; j < 8; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, addr + j, state.rw_trace.size(), true, state.memory[addr + j])); - } - return {EVMC_SUCCESS, gas_left}; - } - - /// Internal jump implementation for JUMP/JUMPI instructions. - static code_iterator jump_impl(ExecutionState& state, const nil::evm_assigner::zkevm_word& dst) noexcept - { - const auto& jumpdest_map = state.analysis.baseline->jumpdest_map; - const auto dst_uint64 = dst.to_uint64(); - if (dst_uint64 >= jumpdest_map.size() || !jumpdest_map[dst_uint64]) - { - state.status = EVMC_BAD_JUMP_DESTINATION; - return nullptr; - } - - return &state.analysis.baseline->executable_code[dst_uint64]; - } - - /// JUMP instruction implementation using baseline::CodeAnalysis. - static code_iterator jump(StackTop stack, ExecutionState& state, code_iterator /*pos*/) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - return jump_impl(state, stack.pop()); - } - - /// JUMPI instruction implementation using baseline::CodeAnalysis. - static code_iterator jumpi(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto& dst = stack.pop(); - const auto& cond = stack.pop(); - return cond.to_uint64() > 0 ? jump_impl(state, dst) : pos + 1; - } - - static code_iterator rjump(StackTop /*stack*/, ExecutionState& /*state*/, code_iterator pc) noexcept - { - // Reading next 2 bytes is guaranteed to be safe by deploy-time validation. - const auto offset = read_int16_be(&pc[1]); - return pc + 3 + offset; // PC_post_rjump + offset - } - - static code_iterator rjumpi(StackTop stack, ExecutionState& state, code_iterator pc) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto cond = stack.pop(); - return cond.to_uint64() > 0 ? rjump(stack, state, pc) : pc + 3; - } - - static code_iterator rjumpv(StackTop stack, ExecutionState& state, code_iterator pc) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - constexpr auto REL_OFFSET_SIZE = sizeof(int16_t); - const auto case_ = stack.pop(); - - const auto max_index = pc[1]; - const auto pc_post = pc + 1 + 1 /* max_index */ + (max_index + 1) * REL_OFFSET_SIZE /* tbl */; - - if (case_.to_uint64() > max_index) - { - return pc_post; - } - else - { - const auto rel_offset = - read_int16_be(&pc[2 + static_cast(case_.to_uint64()) * REL_OFFSET_SIZE]); - - return pc_post + rel_offset; - } - } - - static code_iterator pc(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - stack.push(static_cast(pos - state.analysis.baseline->executable_code.data())); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return pos + 1; - } - - static void msize(StackTop stack, ExecutionState& state) noexcept - { - stack.push(state.memory.size()); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result gas(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - stack.push(gas_left); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - return {EVMC_SUCCESS, gas_left}; - } - - static void tload(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& x = stack.top(); - evmc::bytes32 key = x.to_uint256be(); - const auto value = state.host.get_transient_storage(state.msg->recipient, key); - // TODO: add trasient storage operations - x = nil::evm_assigner::zkevm_word(value); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - static Result tstore(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - if (state.in_static_mode()) - return {EVMC_STATIC_MODE_VIOLATION, 0}; - - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - evmc::bytes32 key = stack.pop().to_uint256be(); - evmc::bytes32 value = stack.pop().to_uint256be(); - state.host.set_transient_storage(state.msg->recipient, key, value); - // TODO: add trasient storage operations - return {EVMC_SUCCESS, gas_left}; - } - - static void push0(StackTop stack, ExecutionState& state) noexcept - { - stack.push({}); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), true, stack[0])); - } - - /// PUSH instruction implementation. - /// @tparam Len The number of push data bytes, e.g. PUSH3 is push<3>. - /// - /// It assumes that at lest 32 bytes of data are available so code padding is required. - template - static code_iterator push(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - // TODO size of field in bytes - constexpr size_t word_size = 8; - constexpr auto num_full_words = Len / word_size; - constexpr auto num_partial_bytes = Len % word_size; - auto data = pos + 1; - - stack.push(0); - auto& r = stack.top(); - - // Load top partial word. - if constexpr (num_partial_bytes != 0) - { - r.load_partial_data(data, num_partial_bytes, num_full_words); - data += num_partial_bytes; - } - - // Load full words. - for (size_t i = 0; i < num_full_words; ++i) - { - r.load_partial_data(data, word_size, num_full_words - 1 - i); - data += word_size; - } - - int num_words = (int)(Len / nil::evm_assigner::zkevm_word::size) + (int)(Len % nil::evm_assigner::zkevm_word::size); - for (int i = 0; i < num_words; ++i) { - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom())- 1 - i), state.rw_trace.size(), true, stack[i])); - } - - return pos + (Len + 1); - } - - /// DUP instruction implementation. - /// @tparam N The number as in the instruction definition, e.g. DUP3 is dup<3>. - template - static void dup(StackTop stack, ExecutionState& state) noexcept - { - static_assert(N >= 0 && N <= 16); - if constexpr (N == 0) - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - const auto index = stack.pop(); - const auto addr = (int)index.to_uint64(); - assert(addr < std::numeric_limits::max()); - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - addr), state.rw_trace.size(), false, stack[addr - 1])); - stack.push(stack[addr - 1]); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())- 1, state.rw_trace.size(), true, stack[0])); - } - else - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - N, state.rw_trace.size(), false, stack[N - 1])); - stack.push(stack[N - 1]); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())- 1, state.rw_trace.size(), true, stack[0])); - } - } - - /// SWAP instruction implementation. - /// @tparam N The number as in the instruction definition, e.g. SWAP3 is swap<3>. - template - static void swap(StackTop stack, ExecutionState& state) noexcept - { - static_assert(N >= 0 && N <= 16); - - // The simple std::swap(stack.top(), stack[N]) is not used to workaround - // clang missed optimization: https://github.com/llvm/llvm-project/issues/59116 - // TODO(clang): Check if #59116 bug fix has been released. - nil::evm_assigner::zkevm_word* a; - uint16_t addr = N; - if constexpr (N == 0) - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& index = stack.pop(); - assert(index < std::numeric_limits::max()); - addr = (uint16_t)index.to_uint64(); - a = &stack[addr]; - } - else - { - a = &stack[N]; - } - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - addr - 1), state.rw_trace.size(), false, stack[addr])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())-1, state.rw_trace.size(), false, stack[0])); - auto& t = stack.top(); - auto t0 = t.to_uint64(0); - auto t1 = t.to_uint64(1); - auto t2 = t.to_uint64(2); - auto t3 = t.to_uint64(3); - t = *a; - a->set_val(t0, 0); - a->set_val(t1, 1); - a->set_val(t2, 2); - a->set_val(t3, 3); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())- 1, state.rw_trace.size(), true, stack[0])); - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - addr), state.rw_trace.size(), true, stack[addr - 1])); - } - - static void log(StackTop /*stack*/, ExecutionState& /*state*/) noexcept { - // do nothing - } - - static code_iterator dupn(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - const uint16_t n = pos[1] + 1; - - const uint16_t stack_size = (uint16_t)(&stack.top() - state.stack_space.bottom()); - - if (stack_size < n) - { - state.status = EVMC_STACK_UNDERFLOW; - return nullptr; - } - - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - n), state.rw_trace.size(), false, stack[n - 1])); - stack.push(stack[n - 1]); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())- 1, state.rw_trace.size(), true, stack[0])); - - return pos + 2; - } - - static code_iterator swapn(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - const auto n = pos[1] + 1; - - const auto stack_size = &stack.top() - state.stack_space.bottom(); - - if (stack_size <= n) - { - state.status = EVMC_STACK_UNDERFLOW; - return nullptr; - } - - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - n - 1), state.rw_trace.size(), false, stack[n])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - // TODO: This may not be optimal, see instr::core::swap(). - std::swap(stack.top(), stack[n]); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom())- 1, state.rw_trace.size(), true, stack[0])); - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - n - 1), state.rw_trace.size(), true, stack[n])); - - return pos + 2; - } - - static Result mcopy(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - const auto& dst_u256 = stack.pop(); - const auto& src_u256 = stack.pop(); - const auto& size_u256 = stack.pop(); - - if (!check_memory(gas_left, state.memory, std::max(dst_u256, src_u256), size_u256)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto dst = dst_u256.to_uint64(); - const auto src = src_u256.to_uint64(); - const auto size = size_u256.to_uint64(); - - if (const auto cost = copy_cost(size); (gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (size > 0) { - std::memmove(&state.memory[dst], &state.memory[src], size); - // TODO: add length read operations to memory - // TODO: add length write operations to memory - /*for(uint64_t j = 0; j < size; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, src + j, state.rw_trace.size(), false, state.memory[src + j])); - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, dst + j, state.rw_trace.size(), true, state.memory[dst + j])); - }*/ - } - - return {EVMC_SUCCESS, gas_left}; - } - - static void dataload(StackTop stack, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - auto& index = stack.top(); - - if (state.data.size() < index.to_uint64()) - index = 0; - else - { - const auto begin = index.to_uint64(); - const auto end = std::min(begin + 32, state.data.size()); - - uint8_t data[32] = {}; - for (size_t i = 0; i < (end - begin); ++i) - data[i] = state.data[begin + i]; - - index = nil::evm_assigner::zkevm_word(data, (end - begin)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), true, stack[0])); - } - } - - static void datasize(StackTop stack, ExecutionState& state) noexcept - { - stack.push(state.data.size()); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), true, stack[0])); - } - - static code_iterator dataloadn(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - const auto index = read_uint16_be(&pos[1]); - - stack.push(nil::evm_assigner::zkevm_word(&state.data[index], nil::evm_assigner::zkevm_word::size)); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), true, stack[0])); - return pos + 3; - } - - static Result datacopy(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 3, state.rw_trace.size(), false, stack[2])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - const auto& mem_index = stack.pop(); - const auto& data_index = stack.pop(); - const auto& size = stack.pop(); - - if (!check_memory(gas_left, state.memory, mem_index, size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto dst = mem_index.to_uint64(); - // TODO why? - const auto data_index_uint64 = data_index.to_uint64(); - const auto src = - state.data.size() < data_index_uint64 ? state.data.size() : data_index_uint64; - const auto s = size.to_uint64(); - const auto copy_size = std::min(s, state.data.size() - src); - - if (const auto cost = copy_cost(s); (gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (copy_size > 0) { - std::memcpy(&state.memory[dst], &state.data[src], copy_size); - for(uint64_t j = 0; j < copy_size; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, dst + j, state.rw_trace.size(), true, state.memory[dst + j])); - } - } - - if (s - copy_size > 0) { - std::memset(&state.memory[dst + copy_size], 0, s - copy_size); - for(uint64_t j = 0; j < s - copy_size; j++){ - state.rw_trace.push_back(nil::evm_assigner::memory_operation(state.call_id, dst + j, state.rw_trace.size(), true, 0)); - } - } - - return {EVMC_SUCCESS, gas_left}; - } - - static Result call_impl(StackTop stack, int64_t gas_left, ExecutionState& state, Opcode Op) noexcept - { - assert(Op == OP_CALL || Op == OP_CALLCODE || Op == OP_DELEGATECALL || Op == OP_STATICCALL); - - uint16_t num_stack_read = (Op == OP_STATICCALL || Op == OP_DELEGATECALL) ? 6 : 7; - for (uint16_t i = 0; i < num_stack_read; i++) { - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - (i + 1)), state.rw_trace.size(), false, stack[i])); - } - const auto gas = stack.pop(); - const auto dst = stack.pop().to_address(); - const auto value = (Op == OP_STATICCALL || Op == OP_DELEGATECALL) ? 0 : stack.pop(); - const auto has_value = value != 0; - const auto input_offset_u256 = stack.pop(); - const auto input_size_u256 = stack.pop(); - const auto output_offset_u256 = stack.pop(); - const auto output_size_u256 = stack.pop(); - - stack.push(0); // Assume failure. - state.return_data.clear(); - - if (state.rev >= EVMC_BERLIN && state.host.access_account(dst) == EVMC_ACCESS_COLD) - { - if ((gas_left -= instr::additional_cold_account_access_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - - if (!check_memory(gas_left, state.memory, input_offset_u256, input_size_u256)) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (!check_memory(gas_left, state.memory, output_offset_u256, output_size_u256)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto input_offset = input_offset_u256.to_uint64(); - const auto input_size = input_size_u256.to_uint64(); - const auto output_offset = output_offset_u256.to_uint64(); - const auto output_size = output_size_u256.to_uint64(); - - auto msg = evmc_message{}; - msg.kind = (Op == OP_DELEGATECALL) ? EVMC_DELEGATECALL : - (Op == OP_CALLCODE) ? EVMC_CALLCODE : - EVMC_CALL; - msg.flags = (Op == OP_STATICCALL) ? uint32_t{EVMC_STATIC} : state.msg->flags; - msg.depth = state.msg->depth + 1; - msg.recipient = (Op == OP_CALL || Op == OP_STATICCALL) ? dst : state.msg->recipient; - msg.code_address = dst; - msg.sender = (Op == OP_DELEGATECALL) ? state.msg->sender : state.msg->recipient; - msg.value = - (Op == OP_DELEGATECALL) ? state.msg->value : value.to_uint256be(); - - if (input_size > 0) - { - // input_offset may be garbage if input_size == 0. - msg.input_data = &state.memory[input_offset]; - msg.input_size = input_size; - } - - auto cost = has_value ? 9000 : 0; - - if (Op == OP_CALL) - { - if (has_value && state.in_static_mode()) - return {EVMC_STATIC_MODE_VIOLATION, gas_left}; - - if ((has_value || state.rev < EVMC_SPURIOUS_DRAGON) && !state.host.account_exists(dst)) - cost += 25000; - } - - if ((gas_left -= cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - msg.gas = std::numeric_limits::max(); - const auto gas_int64 = (int64_t)gas.to_uint64(); - if (gas_int64 < msg.gas) - msg.gas = gas_int64; - - if (state.rev >= EVMC_TANGERINE_WHISTLE) // TODO: Always true for STATICCALL. - msg.gas = std::min(msg.gas, gas_left - gas_left / 64); - else if (msg.gas > gas_left) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (has_value) - { - msg.gas += 2300; // Add stipend. - gas_left += 2300; - } - - if (state.msg->depth >= 1024) - return {EVMC_SUCCESS, gas_left}; // "Light" failure. - - if (has_value && nil::evm_assigner::zkevm_word(state.host.get_balance(state.msg->recipient)) < value) - return {EVMC_SUCCESS, gas_left}; // "Light" failure. - - if (Op == OP_DELEGATECALL) - { - if (state.rev >= EVMC_PRAGUE && is_eof_container(state.original_code)) - { - // The code targeted by DELEGATECALL must also be an EOF. - // This restriction has been added to EIP-3540 in - // https://github.com/ethereum/EIPs/pull/7131 - uint8_t target_code_prefix[2]; - const auto s = state.host.copy_code( - msg.code_address, 0, target_code_prefix, std::size(target_code_prefix)); - if (!is_eof_container({target_code_prefix, s})) - return {EVMC_SUCCESS, gas_left}; - } - } - - const auto result = state.host.call(msg); - state.return_data.assign(result.output_data, result.output_size); - stack.top() = result.status_code == EVMC_SUCCESS; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), true, stack[0])); - - if (const auto copy_size = std::min(output_size, result.output_size); copy_size > 0) - std::memcpy(&state.memory[output_offset], result.output_data, copy_size); - - const auto gas_used = msg.gas - result.gas_left; - gas_left -= gas_used; - state.gas_refund += result.gas_refund; - return {EVMC_SUCCESS, gas_left}; - } - - static Result call(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return call_impl(stack, gas_left, state, OP_CALL); - } - - static Result callcode(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return call_impl(stack, gas_left, state, OP_CALLCODE); - } - - static Result delegatecall(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return call_impl(stack, gas_left, state, OP_DELEGATECALL); - } - - static Result staticcall(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return call_impl(stack, gas_left, state, OP_STATICCALL); - } - - static Result create_impl(StackTop stack, int64_t gas_left, ExecutionState& state, Opcode Op) noexcept { - assert(Op == OP_CREATE || Op == OP_CREATE2); - - if (state.in_static_mode()) - return {EVMC_STATIC_MODE_VIOLATION, gas_left}; - - uint16_t num_stack_read = (Op == OP_CREATE2) ? 4 : 3; - for (uint16_t i = 0; i < num_stack_read; i++) { - state.rw_trace.push_back(stack_operation(state.call_id, (uint16_t)(stack.size(state.stack_space.bottom()) - (i + 1)), state.rw_trace.size(), false, stack[i])); - } - const auto endowment = stack.pop(); - const auto init_code_offset_u256 = stack.pop(); - const auto init_code_size_u256 = stack.pop(); - const auto salt = (Op == OP_CREATE2) ? stack.pop() : 0; - - stack.push(0); // Assume failure. - state.return_data.clear(); - - if (!check_memory(gas_left, state.memory, init_code_offset_u256, init_code_size_u256)) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto init_code_offset = init_code_offset_u256.to_uint64(); - const auto init_code_size = init_code_size_u256.to_uint64(); - - if (state.rev >= EVMC_SHANGHAI && init_code_size > 0xC000) - return {EVMC_OUT_OF_GAS, gas_left}; - - const auto init_code_word_cost = 6 * (Op == OP_CREATE2) + 2 * (state.rev >= EVMC_SHANGHAI); - const auto init_code_cost = num_words(init_code_size) * init_code_word_cost; - if ((gas_left -= init_code_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - - if (state.msg->depth >= 1024) - return {EVMC_SUCCESS, gas_left}; // "Light" failure. - - if (endowment != 0 && - nil::evm_assigner::zkevm_word(state.host.get_balance(state.msg->recipient)) < endowment) - return {EVMC_SUCCESS, gas_left}; // "Light" failure. - - auto msg = evmc_message{}; - msg.gas = gas_left; - if (state.rev >= EVMC_TANGERINE_WHISTLE) - msg.gas = msg.gas - msg.gas / 64; - - msg.kind = (Op == OP_CREATE) ? EVMC_CREATE : EVMC_CREATE2; - if (init_code_size > 0) - { - // init_code_offset may be garbage if init_code_size == 0. - msg.input_data = &state.memory[init_code_offset]; - msg.input_size = init_code_size; - } - msg.sender = state.msg->recipient; - msg.depth = state.msg->depth + 1; - msg.create2_salt = salt.to_uint256be(); - msg.value = endowment.to_uint256be(); - - const auto result = state.host.call(msg); - gas_left -= msg.gas - result.gas_left; - state.gas_refund += result.gas_refund; - - state.return_data.assign(result.output_data, result.output_size); - if (result.status_code == EVMC_SUCCESS) - stack.top() = nil::evm_assigner::zkevm_word(result.create_address); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), true, stack[0])); - - return {EVMC_SUCCESS, gas_left}; - } - - static Result create(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return create_impl(stack, gas_left, state, OP_CREATE); - } - - static constexpr auto create2(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return create_impl(stack, gas_left, state, OP_CREATE2); - } - - static code_iterator callf(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - const auto index = read_uint16_be(&pos[1]); - const auto& header = state.analysis.baseline->eof_header; - const auto stack_size = &stack.top() - state.stack_space.bottom(); - - const auto callee_required_stack_size = - header.types[index].max_stack_height - header.types[index].inputs; - if (stack_size + callee_required_stack_size > StackSpace::limit) - { - state.status = EVMC_STACK_OVERFLOW; - return nullptr; - } - - if (state.call_stack.size() >= StackSpace::limit) - { - // TODO: Add different error code. - state.status = EVMC_STACK_OVERFLOW; - return nullptr; - } - state.call_stack.push_back(pos + 3); - - const auto offset = header.code_offsets[index] - header.code_offsets[0]; - auto code = state.analysis.baseline->executable_code; - return code.data() + offset; - } - - static code_iterator retf(StackTop /*stack*/, ExecutionState& state, code_iterator /*pos*/) noexcept - { - const auto p = state.call_stack.back(); - state.call_stack.pop_back(); - return p; - } - - static code_iterator jumpf(StackTop stack, ExecutionState& state, code_iterator pos) noexcept - { - const auto index = read_uint16_be(&pos[1]); - const auto& header = state.analysis.baseline->eof_header; - const auto stack_size = &stack.top() - state.stack_space.bottom(); - - const auto callee_required_stack_size = - header.types[index].max_stack_height - header.types[index].inputs; - if (stack_size + callee_required_stack_size > StackSpace::limit) - { - state.status = EVMC_STACK_OVERFLOW; - return nullptr; - } - - const auto offset = header.code_offsets[index] - header.code_offsets[0]; - const auto code = state.analysis.baseline->executable_code; - return code.data() + offset; - } - - static TermResult return_impl(StackTop stack, int64_t gas_left, ExecutionState& state, evmc_status_code StatusCode) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - const auto& offset = stack[0]; - const auto& size = stack[1]; - - if (!check_memory(gas_left, state.memory, offset, size)) - return {EVMC_OUT_OF_GAS, gas_left}; - - state.output_size = size.to_uint64(); - if (state.output_size != 0) - state.output_offset = offset.to_uint64(); - return {StatusCode, gas_left}; - } - static TermResult return_(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return return_impl(stack, gas_left, state, EVMC_SUCCESS); - } - - static TermResult revert(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept { - return return_impl(stack, gas_left, state, EVMC_REVERT); - } - - static TermResult selfdestruct(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - if (state.in_static_mode()) - return {EVMC_STATIC_MODE_VIOLATION, gas_left}; - - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - const auto beneficiary = stack[0].to_address(); - - if (state.rev >= EVMC_BERLIN && state.host.access_account(beneficiary) == EVMC_ACCESS_COLD) - { - if ((gas_left -= instr::cold_account_access_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - - if (state.rev >= EVMC_TANGERINE_WHISTLE) - { - if (state.rev == EVMC_TANGERINE_WHISTLE || state.host.get_balance(state.msg->recipient)) - { - // After TANGERINE_WHISTLE apply additional cost of - // sending value to a non-existing account. - if (!state.host.account_exists(beneficiary)) - { - if ((gas_left -= 25000) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - } - } - - if (state.host.selfdestruct(state.msg->recipient, beneficiary)) - { - if (state.rev < EVMC_LONDON) - state.gas_refund += 24000; - } - return {EVMC_SUCCESS, gas_left}; - } - - static Result sload(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - auto& x = stack.top(); - const auto key = x.to_uint256be(); - - if (state.rev >= EVMC_BERLIN && - state.host.access_storage(state.msg->recipient, key) == EVMC_ACCESS_COLD) - { - // The warm storage access cost is already applied (from the cost table). - // Here we need to apply additional cold storage access cost. - constexpr auto additional_cold_sload_cost = - instr::cold_sload_cost - instr::warm_storage_read_cost; - if ((gas_left -= additional_cold_sload_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - } - - const auto value = nil::evm_assigner::zkevm_word(state.host.get_storage(state.msg->recipient, key)); - state.rw_trace.push_back(storage_operation( - state.call_id, - nil::evm_assigner::zkevm_word(state.msg->recipient),// should be transaction_id), WHY??? - x, - state.rw_trace.size(), - false, - value, - value - )); - x = value; - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), true, stack[0])); - - return {EVMC_SUCCESS, gas_left}; - } - - static Result sstore(StackTop stack, int64_t gas_left, ExecutionState& state) noexcept - { - if (state.in_static_mode()) - return {EVMC_STATIC_MODE_VIOLATION, gas_left}; - - if (state.rev >= EVMC_ISTANBUL && gas_left <= 2300) - return {EVMC_OUT_OF_GAS, gas_left}; - - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 2, state.rw_trace.size(), false, stack[1])); - state.rw_trace.push_back(stack_operation(state.call_id, stack.size(state.stack_space.bottom()) - 1, state.rw_trace.size(), false, stack[0])); - const auto key = stack.pop(); - const auto value = stack.pop(); - const auto key_uint64 = key.to_uint256be(); - const auto value_uint64 = value.to_uint256be(); - - const auto gas_cost_cold = - (state.rev >= EVMC_BERLIN && - state.host.access_storage(state.msg->recipient, key_uint64) == EVMC_ACCESS_COLD) ? - instr::cold_sload_cost : - 0; - state.rw_trace.push_back(storage_operation( - state.call_id,//TODO should be transaction_id) - nil::evm_assigner::zkevm_word(state.msg->recipient), - key, - state.rw_trace.size(), - true, - value, - state.host.get_storage(state.msg->recipient, key_uint64) - )); - const auto status = state.host.set_storage(state.msg->recipient, key_uint64, value_uint64); - - const auto [gas_cost_warm, gas_refund] = sstore_costs[state.rev][status]; - const auto gas_cost = gas_cost_warm + gas_cost_cold; - if ((gas_left -= gas_cost) < 0) - return {EVMC_OUT_OF_GAS, gas_left}; - state.gas_refund += gas_refund; - return {EVMC_SUCCESS, gas_left}; - } -}; // struct instructions -} // namespace instr::core -} // namespace evmone diff --git a/evm-assigner/lib/assigner/evmone/instructions_opcodes.hpp b/evm-assigner/lib/assigner/evmone/instructions_opcodes.hpp deleted file mode 100644 index e58c55d8a8..0000000000 --- a/evm-assigner/lib/assigner/evmone/instructions_opcodes.hpp +++ /dev/null @@ -1,200 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2022 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -namespace evmone -{ - -/// The list of EVM opcodes from every EVM revision. -/// -/// This is not enum class because we want implicit conversion to integers, -/// e.g. for usage as an array index. -enum Opcode : uint8_t -{ - OP_STOP = 0x00, - OP_ADD = 0x01, - OP_MUL = 0x02, - OP_SUB = 0x03, - OP_DIV = 0x04, - OP_SDIV = 0x05, - OP_MOD = 0x06, - OP_SMOD = 0x07, - OP_ADDMOD = 0x08, - OP_MULMOD = 0x09, - OP_EXP = 0x0a, - OP_SIGNEXTEND = 0x0b, - - OP_LT = 0x10, - OP_GT = 0x11, - OP_SLT = 0x12, - OP_SGT = 0x13, - OP_EQ = 0x14, - OP_ISZERO = 0x15, - OP_AND = 0x16, - OP_OR = 0x17, - OP_XOR = 0x18, - OP_NOT = 0x19, - OP_BYTE = 0x1a, - OP_SHL = 0x1b, - OP_SHR = 0x1c, - OP_SAR = 0x1d, - - OP_KECCAK256 = 0x20, - - OP_ADDRESS = 0x30, - OP_BALANCE = 0x31, - OP_ORIGIN = 0x32, - OP_CALLER = 0x33, - OP_CALLVALUE = 0x34, - OP_CALLDATALOAD = 0x35, - OP_CALLDATASIZE = 0x36, - OP_CALLDATACOPY = 0x37, - OP_CODESIZE = 0x38, - OP_CODECOPY = 0x39, - OP_GASPRICE = 0x3a, - OP_EXTCODESIZE = 0x3b, - OP_EXTCODECOPY = 0x3c, - OP_RETURNDATASIZE = 0x3d, - OP_RETURNDATACOPY = 0x3e, - OP_EXTCODEHASH = 0x3f, - - OP_BLOCKHASH = 0x40, - OP_COINBASE = 0x41, - OP_TIMESTAMP = 0x42, - OP_NUMBER = 0x43, - OP_PREVRANDAO = 0x44, - OP_GASLIMIT = 0x45, - OP_CHAINID = 0x46, - OP_SELFBALANCE = 0x47, - OP_BASEFEE = 0x48, - OP_BLOBHASH = 0x49, - OP_BLOBBASEFEE = 0x4a, - - OP_POP = 0x50, - OP_MLOAD = 0x51, - OP_MSTORE = 0x52, - OP_MSTORE8 = 0x53, - OP_SLOAD = 0x54, - OP_SSTORE = 0x55, - OP_JUMP = 0x56, - OP_JUMPI = 0x57, - OP_PC = 0x58, - OP_MSIZE = 0x59, - OP_GAS = 0x5a, - OP_JUMPDEST = 0x5b, - OP_TLOAD = 0x5c, - OP_TSTORE = 0x5d, - OP_MCOPY = 0x5e, - OP_PUSH0 = 0x5f, - OP_PUSH1 = 0x60, - OP_PUSH2 = 0x61, - OP_PUSH3 = 0x62, - OP_PUSH4 = 0x63, - OP_PUSH5 = 0x64, - OP_PUSH6 = 0x65, - OP_PUSH7 = 0x66, - OP_PUSH8 = 0x67, - OP_PUSH9 = 0x68, - OP_PUSH10 = 0x69, - OP_PUSH11 = 0x6a, - OP_PUSH12 = 0x6b, - OP_PUSH13 = 0x6c, - OP_PUSH14 = 0x6d, - OP_PUSH15 = 0x6e, - OP_PUSH16 = 0x6f, - OP_PUSH17 = 0x70, - OP_PUSH18 = 0x71, - OP_PUSH19 = 0x72, - OP_PUSH20 = 0x73, - OP_PUSH21 = 0x74, - OP_PUSH22 = 0x75, - OP_PUSH23 = 0x76, - OP_PUSH24 = 0x77, - OP_PUSH25 = 0x78, - OP_PUSH26 = 0x79, - OP_PUSH27 = 0x7a, - OP_PUSH28 = 0x7b, - OP_PUSH29 = 0x7c, - OP_PUSH30 = 0x7d, - OP_PUSH31 = 0x7e, - OP_PUSH32 = 0x7f, - OP_DUP1 = 0x80, - OP_DUP2 = 0x81, - OP_DUP3 = 0x82, - OP_DUP4 = 0x83, - OP_DUP5 = 0x84, - OP_DUP6 = 0x85, - OP_DUP7 = 0x86, - OP_DUP8 = 0x87, - OP_DUP9 = 0x88, - OP_DUP10 = 0x89, - OP_DUP11 = 0x8a, - OP_DUP12 = 0x8b, - OP_DUP13 = 0x8c, - OP_DUP14 = 0x8d, - OP_DUP15 = 0x8e, - OP_DUP16 = 0x8f, - OP_DUP = 0xa7, - OP_SWAP1 = 0x90, - OP_SWAP2 = 0x91, - OP_SWAP3 = 0x92, - OP_SWAP4 = 0x93, - OP_SWAP5 = 0x94, - OP_SWAP6 = 0x95, - OP_SWAP7 = 0x96, - OP_SWAP8 = 0x97, - OP_SWAP9 = 0x98, - OP_SWAP10 = 0x99, - OP_SWAP11 = 0x9a, - OP_SWAP12 = 0x9b, - OP_SWAP13 = 0x9c, - OP_SWAP14 = 0x9d, - OP_SWAP15 = 0x9e, - OP_SWAP16 = 0x9f, - OP_SWAP = 0xa6, - OP_LOG0 = 0xa0, - OP_LOG1 = 0xa1, - OP_LOG2 = 0xa2, - OP_LOG3 = 0xa3, - OP_LOG4 = 0xa4, - OP_PRINTF = 0xa5, - - OP_MSTORE16 = 0xb0, - OP_MSTORE32 = 0xb1, - OP_MSTORE64 = 0xb2, - - OP_MLOAD8 = 0xc0, - OP_MLOAD16 = 0xc1, - OP_MLOAD32 = 0xc2, - OP_MLOAD64 = 0xc3, - - OP_RJUMP = 0xe0, - OP_RJUMPI = 0xe1, - OP_RJUMPV = 0xe2, - OP_CALLF = 0xe3, - OP_RETF = 0xe4, - OP_JUMPF = 0xe5, - - OP_DUPN = 0xe6, - OP_SWAPN = 0xe7, - OP_DATALOAD = 0xe8, - OP_DATALOADN = 0xe9, - OP_DATASIZE = 0xea, - OP_DATACOPY = 0xeb, - - OP_CREATE = 0xf0, - OP_CALL = 0xf1, - OP_CALLCODE = 0xf2, - OP_RETURN = 0xf3, - OP_DELEGATECALL = 0xf4, - OP_CREATE2 = 0xf5, - - OP_STATICCALL = 0xfa, - - OP_REVERT = 0xfd, - OP_INVALID = 0xfe, - OP_SELFDESTRUCT = 0xff -}; -} // namespace evmone diff --git a/evm-assigner/lib/assigner/evmone/instructions_traits.hpp b/evm-assigner/lib/assigner/evmone/instructions_traits.hpp deleted file mode 100644 index dadcc6bb77..0000000000 --- a/evm-assigner/lib/assigner/evmone/instructions_traits.hpp +++ /dev/null @@ -1,438 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2020 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 -#pragma once - -#include "instructions_opcodes.hpp" -#include -#include - -namespace evmone::instr -{ -/// The special gas cost value marking an EVM instruction as "undefined". -constexpr int16_t undefined = -1; - -/// EIP-2929 constants (https://eips.ethereum.org/EIPS/eip-2929). -/// @{ -inline constexpr auto cold_sload_cost = 2100; -inline constexpr auto cold_account_access_cost = 2600; -inline constexpr auto warm_storage_read_cost = 100; - -/// Additional cold account access cost. -/// -/// The warm access cost is unconditionally applied for every account access instruction. -/// If the access turns out to be cold, this cost must be applied additionally. -inline constexpr auto additional_cold_account_access_cost = - cold_account_access_cost - warm_storage_read_cost; -/// @} - - -/// The table of instruction gas costs per EVM revision. -using GasCostTable = std::array, EVMC_MAX_REVISION + 1>; - -/// The EVM revision specific table of EVM instructions gas costs. For instructions undefined -/// in given EVM revision, the value is instr::undefined. -constexpr inline GasCostTable gas_costs = []() noexcept { - GasCostTable table{}; - - for (auto& t : table[EVMC_FRONTIER]) - t = undefined; - table[EVMC_FRONTIER][OP_STOP] = 0; - table[EVMC_FRONTIER][OP_ADD] = 3; - table[EVMC_FRONTIER][OP_MUL] = 5; - table[EVMC_FRONTIER][OP_SUB] = 3; - table[EVMC_FRONTIER][OP_DIV] = 5; - table[EVMC_FRONTIER][OP_SDIV] = 5; - table[EVMC_FRONTIER][OP_MOD] = 5; - table[EVMC_FRONTIER][OP_SMOD] = 5; - table[EVMC_FRONTIER][OP_ADDMOD] = 8; - table[EVMC_FRONTIER][OP_MULMOD] = 8; - table[EVMC_FRONTIER][OP_EXP] = 10; - table[EVMC_FRONTIER][OP_SIGNEXTEND] = 5; - table[EVMC_FRONTIER][OP_LT] = 3; - table[EVMC_FRONTIER][OP_GT] = 3; - table[EVMC_FRONTIER][OP_SLT] = 3; - table[EVMC_FRONTIER][OP_SGT] = 3; - table[EVMC_FRONTIER][OP_EQ] = 3; - table[EVMC_FRONTIER][OP_ISZERO] = 3; - table[EVMC_FRONTIER][OP_AND] = 3; - table[EVMC_FRONTIER][OP_OR] = 3; - table[EVMC_FRONTIER][OP_XOR] = 3; - table[EVMC_FRONTIER][OP_NOT] = 3; - table[EVMC_FRONTIER][OP_BYTE] = 3; - table[EVMC_FRONTIER][OP_KECCAK256] = 30; - table[EVMC_FRONTIER][OP_ADDRESS] = 2; - table[EVMC_FRONTIER][OP_BALANCE] = 20; - table[EVMC_FRONTIER][OP_ORIGIN] = 2; - table[EVMC_FRONTIER][OP_CALLER] = 2; - table[EVMC_FRONTIER][OP_CALLVALUE] = 2; - table[EVMC_FRONTIER][OP_CALLDATALOAD] = 3; - table[EVMC_FRONTIER][OP_CALLDATASIZE] = 2; - table[EVMC_FRONTIER][OP_CALLDATACOPY] = 3; - table[EVMC_FRONTIER][OP_CODESIZE] = 2; - table[EVMC_FRONTIER][OP_CODECOPY] = 3; - table[EVMC_FRONTIER][OP_GASPRICE] = 2; - table[EVMC_FRONTIER][OP_EXTCODESIZE] = 20; - table[EVMC_FRONTIER][OP_EXTCODECOPY] = 20; - table[EVMC_FRONTIER][OP_BLOCKHASH] = 20; - table[EVMC_FRONTIER][OP_COINBASE] = 2; - table[EVMC_FRONTIER][OP_TIMESTAMP] = 2; - table[EVMC_FRONTIER][OP_NUMBER] = 2; - table[EVMC_FRONTIER][OP_PREVRANDAO] = 2; - table[EVMC_FRONTIER][OP_GASLIMIT] = 2; - table[EVMC_FRONTIER][OP_POP] = 2; - table[EVMC_FRONTIER][OP_MLOAD] = 3; - table[EVMC_FRONTIER][OP_MLOAD8] = 3; - table[EVMC_FRONTIER][OP_MLOAD16] = 3; - table[EVMC_FRONTIER][OP_MLOAD32] = 3; - table[EVMC_FRONTIER][OP_MLOAD64] = 3; - table[EVMC_FRONTIER][OP_MSTORE] = 3; - table[EVMC_FRONTIER][OP_MSTORE8] = 3; - table[EVMC_FRONTIER][OP_MSTORE16] = 3; - table[EVMC_FRONTIER][OP_MSTORE32] = 3; - table[EVMC_FRONTIER][OP_MSTORE64] = 3; - table[EVMC_FRONTIER][OP_SLOAD] = 50; - table[EVMC_FRONTIER][OP_SSTORE] = 0; - table[EVMC_FRONTIER][OP_JUMP] = 8; - table[EVMC_FRONTIER][OP_JUMPI] = 10; - table[EVMC_FRONTIER][OP_PC] = 2; - table[EVMC_FRONTIER][OP_MSIZE] = 2; - table[EVMC_FRONTIER][OP_GAS] = 2; - table[EVMC_FRONTIER][OP_JUMPDEST] = 1; - table[EVMC_FRONTIER][OP_SHR] = 3; - table[EVMC_FRONTIER][OP_PUSH0] = 2; - for (auto op = size_t{OP_PUSH1}; op <= OP_PUSH32; ++op) - table[EVMC_FRONTIER][op] = 3; - for (auto op = size_t{OP_DUP1}; op <= OP_DUP16; ++op) - table[EVMC_FRONTIER][op] = 3; - table[EVMC_FRONTIER][OP_DUP] = 3; - for (auto op = size_t{OP_SWAP1}; op <= OP_SWAP16; ++op) - table[EVMC_FRONTIER][op] = 3; - table[EVMC_FRONTIER][OP_SWAP] = 3; - for (auto op = size_t{OP_LOG0}; op <= OP_LOG4; ++op) - table[EVMC_FRONTIER][op] = static_cast((op - OP_LOG0 + 1) * 375); - table[EVMC_FRONTIER][OP_PRINTF] = 3; - table[EVMC_FRONTIER][OP_CREATE] = 32000; - table[EVMC_FRONTIER][OP_CALL] = 40; - table[EVMC_FRONTIER][OP_CALLCODE] = 40; - table[EVMC_FRONTIER][OP_RETURN] = 0; - table[EVMC_FRONTIER][OP_INVALID] = 0; - table[EVMC_FRONTIER][OP_SELFDESTRUCT] = 0; - table[EVMC_FRONTIER][OP_LOG1] = 0; - - table[EVMC_HOMESTEAD] = table[EVMC_FRONTIER]; - table[EVMC_HOMESTEAD][OP_DELEGATECALL] = 40; - - table[EVMC_TANGERINE_WHISTLE] = table[EVMC_HOMESTEAD]; - table[EVMC_TANGERINE_WHISTLE][OP_BALANCE] = 400; - table[EVMC_TANGERINE_WHISTLE][OP_EXTCODESIZE] = 700; - table[EVMC_TANGERINE_WHISTLE][OP_EXTCODECOPY] = 700; - table[EVMC_TANGERINE_WHISTLE][OP_SLOAD] = 200; - table[EVMC_TANGERINE_WHISTLE][OP_CALL] = 700; - table[EVMC_TANGERINE_WHISTLE][OP_CALLCODE] = 700; - table[EVMC_TANGERINE_WHISTLE][OP_DELEGATECALL] = 700; - table[EVMC_TANGERINE_WHISTLE][OP_SELFDESTRUCT] = 5000; - - table[EVMC_SPURIOUS_DRAGON] = table[EVMC_TANGERINE_WHISTLE]; - - table[EVMC_BYZANTIUM] = table[EVMC_SPURIOUS_DRAGON]; - table[EVMC_BYZANTIUM][OP_RETURNDATASIZE] = 2; - table[EVMC_BYZANTIUM][OP_RETURNDATACOPY] = 3; - table[EVMC_BYZANTIUM][OP_STATICCALL] = 700; - table[EVMC_BYZANTIUM][OP_REVERT] = 0; - - table[EVMC_CONSTANTINOPLE] = table[EVMC_BYZANTIUM]; - table[EVMC_CONSTANTINOPLE][OP_SHL] = 3; - table[EVMC_CONSTANTINOPLE][OP_SHR] = 3; - table[EVMC_CONSTANTINOPLE][OP_SAR] = 3; - table[EVMC_CONSTANTINOPLE][OP_EXTCODEHASH] = 400; - table[EVMC_CONSTANTINOPLE][OP_CREATE2] = 32000; - - table[EVMC_PETERSBURG] = table[EVMC_CONSTANTINOPLE]; - - table[EVMC_ISTANBUL] = table[EVMC_PETERSBURG]; - table[EVMC_ISTANBUL][OP_BALANCE] = 700; - table[EVMC_ISTANBUL][OP_CHAINID] = 2; - table[EVMC_ISTANBUL][OP_EXTCODEHASH] = 700; - table[EVMC_ISTANBUL][OP_SELFBALANCE] = 5; - table[EVMC_ISTANBUL][OP_SLOAD] = 800; - - table[EVMC_BERLIN] = table[EVMC_ISTANBUL]; - table[EVMC_BERLIN][OP_EXTCODESIZE] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_EXTCODECOPY] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_EXTCODEHASH] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_BALANCE] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_CALL] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_CALLCODE] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_DELEGATECALL] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_STATICCALL] = warm_storage_read_cost; - table[EVMC_BERLIN][OP_SLOAD] = warm_storage_read_cost; - - table[EVMC_LONDON] = table[EVMC_BERLIN]; - table[EVMC_LONDON][OP_BASEFEE] = 2; - - table[EVMC_PARIS] = table[EVMC_LONDON]; - - table[EVMC_SHANGHAI] = table[EVMC_PARIS]; - table[EVMC_SHANGHAI][OP_PUSH0] = 2; - - table[EVMC_CANCUN] = table[EVMC_SHANGHAI]; - table[EVMC_CANCUN][OP_BLOBHASH] = 3; - table[EVMC_CANCUN][OP_BLOBBASEFEE] = 2; - table[EVMC_CANCUN][OP_TLOAD] = warm_storage_read_cost; - table[EVMC_CANCUN][OP_TSTORE] = warm_storage_read_cost; - table[EVMC_CANCUN][OP_MCOPY] = 3; - - table[EVMC_PRAGUE] = table[EVMC_CANCUN]; - table[EVMC_PRAGUE][OP_DUPN] = 3; - table[EVMC_PRAGUE][OP_SWAPN] = 3; - table[EVMC_PRAGUE][OP_RJUMP] = 2; - table[EVMC_PRAGUE][OP_RJUMPI] = 4; - table[EVMC_PRAGUE][OP_RJUMPV] = 4; - table[EVMC_PRAGUE][OP_CALLF] = 5; - table[EVMC_PRAGUE][OP_RETF] = 3; - table[EVMC_PRAGUE][OP_JUMPF] = 5; - table[EVMC_PRAGUE][OP_DATALOAD] = 4; - table[EVMC_PRAGUE][OP_DATALOADN] = 3; - table[EVMC_PRAGUE][OP_DATASIZE] = 2; - table[EVMC_PRAGUE][OP_DATACOPY] = 3; - - return table; -}(); - -static_assert(gas_costs[EVMC_MAX_REVISION][OP_ADD] > 0, "gas costs missing for a revision"); - - -/// The EVM instruction traits. -struct Traits -{ - /// The instruction name; - const char* name = nullptr; - - /// Size of the immediate argument in bytes. - uint8_t immediate_size = 0; - - /// Whether the instruction terminates execution. - /// This is false for undefined instructions but this can be changed if desired. - bool is_terminating = false; - - /// The number of stack items the instruction accesses during execution. - int8_t stack_height_required = 0; - - /// The stack height change caused by the instruction execution. Can be negative. - int8_t stack_height_change = 0; - - /// The EVM revision in which the instruction has been defined. For instructions available in - /// every EVM revision the value is ::EVMC_FRONTIER. For undefined instructions the value is not - /// available. - std::optional since; -}; - -/// Determines if an instruction has constant base gas cost across all revisions. -/// Note that this is not true for instructions with constant base gas cost but -/// not available in the first revision (e.g. SHL). -inline constexpr bool has_const_gas_cost(Opcode op) noexcept -{ - const auto g = gas_costs[EVMC_FRONTIER][op]; - for (size_t r = EVMC_FRONTIER + 1; r <= EVMC_MAX_REVISION; ++r) - { - if (gas_costs[r][op] != g) - return false; - } - return true; -} - - -/// The global, EVM revision independent, table of traits of all known EVM instructions. -constexpr inline std::array traits = []() noexcept { - std::array table{}; - - table[OP_STOP] = {"STOP", 0, true, 0, 0, EVMC_FRONTIER}; - table[OP_ADD] = {"ADD", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_MUL] = {"MUL", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_SUB] = {"SUB", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_DIV] = {"DIV", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_SDIV] = {"SDIV", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_MOD] = {"MOD", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_SMOD] = {"SMOD", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_ADDMOD] = {"ADDMOD", 0, false, 3, -2, EVMC_FRONTIER}; - table[OP_MULMOD] = {"MULMOD", 0, false, 3, -2, EVMC_FRONTIER}; - table[OP_EXP] = {"EXP", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_SIGNEXTEND] = {"SIGNEXTEND", 0, false, 2, -1, EVMC_FRONTIER}; - - table[OP_LT] = {"LT", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_GT] = {"GT", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_SLT] = {"SLT", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_SGT] = {"SGT", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_EQ] = {"EQ", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_ISZERO] = {"ISZERO", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_AND] = {"AND", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_OR] = {"OR", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_XOR] = {"XOR", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_NOT] = {"NOT", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_BYTE] = {"BYTE", 0, false, 2, -1, EVMC_FRONTIER}; - table[OP_SHL] = {"SHL", 0, false, 2, -1, EVMC_CONSTANTINOPLE}; - table[OP_SHR] = {"SHR", 0, false, 2, -1, EVMC_CONSTANTINOPLE}; - table[OP_SAR] = {"SAR", 0, false, 2, -1, EVMC_CONSTANTINOPLE}; - - table[OP_KECCAK256] = {"KECCAK256", 0, false, 2, -1, EVMC_FRONTIER}; - - table[OP_ADDRESS] = {"ADDRESS", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_BALANCE] = {"BALANCE", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_ORIGIN] = {"ORIGIN", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_CALLER] = {"CALLER", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_CALLVALUE] = {"CALLVALUE", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_CALLDATALOAD] = {"CALLDATALOAD", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_CALLDATASIZE] = {"CALLDATASIZE", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_CALLDATACOPY] = {"CALLDATACOPY", 0, false, 3, -3, EVMC_FRONTIER}; - table[OP_CODESIZE] = {"CODESIZE", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_CODECOPY] = {"CODECOPY", 0, false, 3, -3, EVMC_FRONTIER}; - table[OP_GASPRICE] = {"GASPRICE", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_EXTCODESIZE] = {"EXTCODESIZE", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_EXTCODECOPY] = {"EXTCODECOPY", 0, false, 4, -4, EVMC_FRONTIER}; - table[OP_RETURNDATASIZE] = {"RETURNDATASIZE", 0, false, 0, 1, EVMC_BYZANTIUM}; - table[OP_RETURNDATACOPY] = {"RETURNDATACOPY", 0, false, 3, -3, EVMC_BYZANTIUM}; - table[OP_EXTCODEHASH] = {"EXTCODEHASH", 0, false, 1, 0, EVMC_CONSTANTINOPLE}; - - table[OP_BLOCKHASH] = {"BLOCKHASH", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_COINBASE] = {"COINBASE", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_TIMESTAMP] = {"TIMESTAMP", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_NUMBER] = {"NUMBER", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_PREVRANDAO] = {"PREVRANDAO", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_GASLIMIT] = {"GASLIMIT", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_CHAINID] = {"CHAINID", 0, false, 0, 1, EVMC_ISTANBUL}; - table[OP_SELFBALANCE] = {"SELFBALANCE", 0, false, 0, 1, EVMC_ISTANBUL}; - table[OP_BASEFEE] = {"BASEFEE", 0, false, 0, 1, EVMC_LONDON}; - table[OP_BLOBHASH] = {"BLOBHASH", 0, false, 1, 0, EVMC_CANCUN}; - table[OP_BLOBBASEFEE] = {"BLOBBASEFEE", 0, false, 0, 1, EVMC_CANCUN}; - - table[OP_POP] = {"POP", 0, false, 1, -1, EVMC_FRONTIER}; - table[OP_MLOAD] = {"MLOAD", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_MLOAD8] = {"MLOAD8", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_MLOAD16] = {"MLOAD16", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_MLOAD32] = {"MLOAD32", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_MLOAD64] = {"MLOAD64", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_MSTORE] = {"MSTORE", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_MSTORE8] = {"MSTORE8", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_MSTORE16] = {"MSTORE16", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_MSTORE32] = {"MSTORE32", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_MSTORE64] = {"MSTORE64", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_SLOAD] = {"SLOAD", 0, false, 1, 0, EVMC_FRONTIER}; - table[OP_SSTORE] = {"SSTORE", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_JUMP] = {"JUMP", 0, false, 1, -1, EVMC_FRONTIER}; - table[OP_JUMPI] = {"JUMPI", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_PC] = {"PC", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_MSIZE] = {"MSIZE", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_GAS] = {"GAS", 0, false, 0, 1, EVMC_FRONTIER}; - table[OP_JUMPDEST] = {"JUMPDEST", 0, false, 0, 0, EVMC_FRONTIER}; - table[OP_RJUMP] = {"RJUMP", 2, false, 0, 0, EVMC_PRAGUE}; - table[OP_RJUMPI] = {"RJUMPI", 2, false, 1, -1, EVMC_PRAGUE}; - table[OP_RJUMPV] = { - "RJUMPV", 1 /* 1 byte static immediate + dynamic immediate */, false, 1, -1, EVMC_PRAGUE}; - - table[OP_TLOAD] = {"TLOAD", 0, false, 1, 0, EVMC_CANCUN}; - table[OP_TSTORE] = {"TSTORE", 0, false, 2, -2, EVMC_CANCUN}; - table[OP_PUSH0] = {"PUSH0", 0, false, 0, 1, EVMC_SHANGHAI}; - - table[OP_PUSH1] = {"PUSH1", 1, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH2] = {"PUSH2", 2, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH3] = {"PUSH3", 3, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH4] = {"PUSH4", 4, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH5] = {"PUSH5", 5, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH6] = {"PUSH6", 6, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH7] = {"PUSH7", 7, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH8] = {"PUSH8", 8, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH9] = {"PUSH9", 9, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH10] = {"PUSH10", 10, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH11] = {"PUSH11", 11, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH12] = {"PUSH12", 12, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH13] = {"PUSH13", 13, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH14] = {"PUSH14", 14, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH15] = {"PUSH15", 15, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH16] = {"PUSH16", 16, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH17] = {"PUSH17", 17, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH18] = {"PUSH18", 18, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH19] = {"PUSH19", 19, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH20] = {"PUSH20", 20, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH21] = {"PUSH21", 21, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH22] = {"PUSH22", 22, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH23] = {"PUSH23", 23, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH24] = {"PUSH24", 24, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH25] = {"PUSH25", 25, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH26] = {"PUSH26", 26, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH27] = {"PUSH27", 27, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH28] = {"PUSH28", 28, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH29] = {"PUSH29", 29, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH30] = {"PUSH30", 30, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH31] = {"PUSH31", 31, false, 0, 1, EVMC_FRONTIER}; - table[OP_PUSH32] = {"PUSH32", 32, false, 0, 1, EVMC_FRONTIER}; - - table[OP_DUP1] = {"DUP1", 0, false, 1, 1, EVMC_FRONTIER}; - table[OP_DUP2] = {"DUP2", 0, false, 2, 1, EVMC_FRONTIER}; - table[OP_DUP3] = {"DUP3", 0, false, 3, 1, EVMC_FRONTIER}; - table[OP_DUP4] = {"DUP4", 0, false, 4, 1, EVMC_FRONTIER}; - table[OP_DUP5] = {"DUP5", 0, false, 5, 1, EVMC_FRONTIER}; - table[OP_DUP6] = {"DUP6", 0, false, 6, 1, EVMC_FRONTIER}; - table[OP_DUP7] = {"DUP7", 0, false, 7, 1, EVMC_FRONTIER}; - table[OP_DUP8] = {"DUP8", 0, false, 8, 1, EVMC_FRONTIER}; - table[OP_DUP9] = {"DUP9", 0, false, 9, 1, EVMC_FRONTIER}; - table[OP_DUP10] = {"DUP10", 0, false, 10, 1, EVMC_FRONTIER}; - table[OP_DUP11] = {"DUP11", 0, false, 11, 1, EVMC_FRONTIER}; - table[OP_DUP12] = {"DUP12", 0, false, 12, 1, EVMC_FRONTIER}; - table[OP_DUP13] = {"DUP13", 0, false, 13, 1, EVMC_FRONTIER}; - table[OP_DUP14] = {"DUP14", 0, false, 14, 1, EVMC_FRONTIER}; - table[OP_DUP15] = {"DUP15", 0, false, 15, 1, EVMC_FRONTIER}; - table[OP_DUP16] = {"DUP16", 0, false, 16, 1, EVMC_FRONTIER}; - table[OP_DUP] = {"DUP", 0, false, 1, 0, EVMC_FRONTIER}; - - table[OP_SWAP1] = {"SWAP1", 0, false, 2, 0, EVMC_FRONTIER}; - table[OP_SWAP2] = {"SWAP2", 0, false, 3, 0, EVMC_FRONTIER}; - table[OP_SWAP3] = {"SWAP3", 0, false, 4, 0, EVMC_FRONTIER}; - table[OP_SWAP4] = {"SWAP4", 0, false, 5, 0, EVMC_FRONTIER}; - table[OP_SWAP5] = {"SWAP5", 0, false, 6, 0, EVMC_FRONTIER}; - table[OP_SWAP6] = {"SWAP6", 0, false, 7, 0, EVMC_FRONTIER}; - table[OP_SWAP7] = {"SWAP7", 0, false, 8, 0, EVMC_FRONTIER}; - table[OP_SWAP8] = {"SWAP8", 0, false, 9, 0, EVMC_FRONTIER}; - table[OP_SWAP9] = {"SWAP9", 0, false, 10, 0, EVMC_FRONTIER}; - table[OP_SWAP10] = {"SWAP10", 0, false, 11, 0, EVMC_FRONTIER}; - table[OP_SWAP11] = {"SWAP11", 0, false, 12, 0, EVMC_FRONTIER}; - table[OP_SWAP12] = {"SWAP12", 0, false, 13, 0, EVMC_FRONTIER}; - table[OP_SWAP13] = {"SWAP13", 0, false, 14, 0, EVMC_FRONTIER}; - table[OP_SWAP14] = {"SWAP14", 0, false, 15, 0, EVMC_FRONTIER}; - table[OP_SWAP15] = {"SWAP15", 0, false, 16, 0, EVMC_FRONTIER}; - table[OP_SWAP16] = {"SWAP16", 0, false, 17, 0, EVMC_FRONTIER}; - table[OP_SWAP] = {"SWAP", 0, false, 1, -1, EVMC_FRONTIER}; - - table[OP_LOG0] = {"LOG0", 0, false, 2, -2, EVMC_FRONTIER}; - table[OP_LOG1] = {"LOG1", 0, false, 3, -3, EVMC_FRONTIER}; - table[OP_LOG2] = {"LOG2", 0, false, 4, -4, EVMC_FRONTIER}; - table[OP_LOG3] = {"LOG3", 0, false, 5, -5, EVMC_FRONTIER}; - table[OP_LOG4] = {"LOG4", 0, false, 6, -6, EVMC_FRONTIER}; - table[OP_PRINTF] = {"PRINTF", 0, false, 0, 0, EVMC_FRONTIER}; - - table[OP_DUPN] = {"DUPN", 1, false, 0, 1, EVMC_PRAGUE}; - table[OP_SWAPN] = {"SWAPN", 1, false, 0, 0, EVMC_PRAGUE}; - table[OP_MCOPY] = {"MCOPY", 0, false, 3, -3, EVMC_CANCUN}; - table[OP_DATALOAD] = {"DATALOAD", 0, false, 1, 0, EVMC_PRAGUE}; - table[OP_DATALOADN] = {"DATALOADN", 2, false, 0, 1, EVMC_PRAGUE}; - table[OP_DATASIZE] = {"DATASIZE", 0, false, 0, 1, EVMC_PRAGUE}; - table[OP_DATACOPY] = {"DATACOPY", 0, false, 3, -3, EVMC_PRAGUE}; - - table[OP_CREATE] = {"CREATE", 0, false, 3, -2, EVMC_FRONTIER}; - table[OP_CALL] = {"CALL", 0, false, 7, -6, EVMC_FRONTIER}; - table[OP_CALLCODE] = {"CALLCODE", 0, false, 7, -6, EVMC_FRONTIER}; - table[OP_RETURN] = {"RETURN", 0, true, 2, -2, EVMC_FRONTIER}; - table[OP_DELEGATECALL] = {"DELEGATECALL", 0, false, 6, -5, EVMC_HOMESTEAD}; - table[OP_CREATE2] = {"CREATE2", 0, false, 4, -3, EVMC_CONSTANTINOPLE}; - table[OP_STATICCALL] = {"STATICCALL", 0, false, 6, -5, EVMC_BYZANTIUM}; - table[OP_CALLF] = {"CALLF", 2, false, 0, 0, EVMC_PRAGUE}; - table[OP_RETF] = {"RETF", 0, true, 0, 0, EVMC_PRAGUE}; - table[OP_JUMPF] = {"JUMPF", 2, true, 0, 0, EVMC_PRAGUE}; - table[OP_REVERT] = {"REVERT", 0, true, 2, -2, EVMC_BYZANTIUM}; - table[OP_INVALID] = {"INVALID", 0, true, 0, 0, EVMC_FRONTIER}; - table[OP_SELFDESTRUCT] = {"SELFDESTRUCT", 0, true, 1, -1, EVMC_FRONTIER}; - - return table; -}(); - -} // namespace evmone::instr diff --git a/evm-assigner/lib/assigner/evmone/instructions_xmacro.hpp b/evm-assigner/lib/assigner/evmone/instructions_xmacro.hpp deleted file mode 100644 index ed220816d2..0000000000 --- a/evm-assigner/lib/assigner/evmone/instructions_xmacro.hpp +++ /dev/null @@ -1,300 +0,0 @@ -// evmone: Fast Ethereum Virtual Machine implementation -// Copyright 2022 The evmone Authors. -// SPDX-License-Identifier: Apache-2.0 -#pragma once - -/// The default macro for ON_OPCODE_IDENTIFIER. It redirects to ON_OPCODE. -#define ON_OPCODE_IDENTIFIER_DEFAULT(OPCODE, NAME) ON_OPCODE(OPCODE) - -/// The default macro for ON_OPCODE_UNDEFINED. Empty implementation to ignore undefined opcodes. -#define ON_OPCODE_UNDEFINED_DEFAULT(OPCODE) - - -#define ON_OPCODE_IDENTIFIER ON_OPCODE_IDENTIFIER_DEFAULT -#define ON_OPCODE_UNDEFINED ON_OPCODE_UNDEFINED_DEFAULT - - -/// The "X Macro" for opcodes and their matching identifiers. -/// -/// The MAP_OPCODES is an extended variant of X Macro idiom. -/// It has 3 knobs for users. -/// -/// 1. The ON_OPCODE(OPCODE) macro must be defined. It will receive all defined opcodes from -/// the evmc_opcode enum. -/// 2. The ON_OPCODE_UNDEFINED(OPCODE) macro may be defined to receive -/// the values of all undefined opcodes. -/// This macro is by default alias to ON_OPCODE_UNDEFINED_DEFAULT therefore users must first -/// undef it and restore the alias after usage. -/// 3. The ON_OPCODE_IDENTIFIER(OPCODE, IDENTIFIER) macro may be defined to receive -/// the pairs of all defined opcodes and their matching identifiers. -/// This macro is by default alias to ON_OPCODE_IDENTIFIER_DEFAULT therefore users must first -/// undef it and restore the alias after usage. -/// -/// See for more about X Macros: https://en.wikipedia.org/wiki/X_Macro. -#define MAP_OPCODES \ - ON_OPCODE_IDENTIFIER(OP_STOP, instructions::stop) \ - ON_OPCODE_IDENTIFIER(OP_ADD, instructions::add) \ - ON_OPCODE_IDENTIFIER(OP_MUL, instructions::mul) \ - ON_OPCODE_IDENTIFIER(OP_SUB, instructions::sub) \ - ON_OPCODE_IDENTIFIER(OP_DIV, instructions::div) \ - ON_OPCODE_IDENTIFIER(OP_SDIV, instructions::sdiv) \ - ON_OPCODE_IDENTIFIER(OP_MOD, instructions::mod) \ - ON_OPCODE_IDENTIFIER(OP_SMOD, instructions::smod) \ - ON_OPCODE_IDENTIFIER(OP_ADDMOD, instructions::addmod) \ - ON_OPCODE_IDENTIFIER(OP_MULMOD, instructions::mulmod) \ - ON_OPCODE_IDENTIFIER(OP_EXP, instructions::exp) \ - ON_OPCODE_IDENTIFIER(OP_SIGNEXTEND, instructions::signextend) \ - ON_OPCODE_UNDEFINED(0x0c) \ - ON_OPCODE_UNDEFINED(0x0d) \ - ON_OPCODE_UNDEFINED(0x0e) \ - ON_OPCODE_UNDEFINED(0x0f) \ - \ - ON_OPCODE_IDENTIFIER(OP_LT, instructions::lt) \ - ON_OPCODE_IDENTIFIER(OP_GT, instructions::gt) \ - ON_OPCODE_IDENTIFIER(OP_SLT, instructions::slt) \ - ON_OPCODE_IDENTIFIER(OP_SGT, instructions::sgt) \ - ON_OPCODE_IDENTIFIER(OP_EQ, instructions::eq) \ - ON_OPCODE_IDENTIFIER(OP_ISZERO, instructions::iszero) \ - ON_OPCODE_IDENTIFIER(OP_AND, instructions::and_) \ - ON_OPCODE_IDENTIFIER(OP_OR, instructions::or_) \ - ON_OPCODE_IDENTIFIER(OP_XOR, instructions::xor_) \ - ON_OPCODE_IDENTIFIER(OP_NOT, instructions::not_) \ - ON_OPCODE_IDENTIFIER(OP_BYTE, instructions::byte) \ - ON_OPCODE_IDENTIFIER(OP_SHL, instructions::shl) \ - ON_OPCODE_IDENTIFIER(OP_SHR, instructions::shr) \ - ON_OPCODE_IDENTIFIER(OP_SAR, instructions::sar) \ - ON_OPCODE_UNDEFINED(0x1e) \ - ON_OPCODE_UNDEFINED(0x1f) \ - \ - ON_OPCODE_IDENTIFIER(OP_KECCAK256, instructions::keccak256) \ - ON_OPCODE_UNDEFINED(0x21) \ - ON_OPCODE_UNDEFINED(0x22) \ - ON_OPCODE_UNDEFINED(0x23) \ - ON_OPCODE_UNDEFINED(0x24) \ - ON_OPCODE_UNDEFINED(0x25) \ - ON_OPCODE_UNDEFINED(0x26) \ - ON_OPCODE_UNDEFINED(0x27) \ - ON_OPCODE_UNDEFINED(0x28) \ - ON_OPCODE_UNDEFINED(0x29) \ - ON_OPCODE_UNDEFINED(0x2a) \ - ON_OPCODE_UNDEFINED(0x2b) \ - ON_OPCODE_UNDEFINED(0x2c) \ - ON_OPCODE_UNDEFINED(0x2d) \ - ON_OPCODE_UNDEFINED(0x2e) \ - ON_OPCODE_UNDEFINED(0x2f) \ - \ - ON_OPCODE_IDENTIFIER(OP_ADDRESS, instructions::address) \ - ON_OPCODE_IDENTIFIER(OP_BALANCE, instructions::balance) \ - ON_OPCODE_IDENTIFIER(OP_ORIGIN, instructions::origin) \ - ON_OPCODE_IDENTIFIER(OP_CALLER, instructions::caller) \ - ON_OPCODE_IDENTIFIER(OP_CALLVALUE, instructions::callvalue) \ - ON_OPCODE_IDENTIFIER(OP_CALLDATALOAD, instructions::calldataload) \ - ON_OPCODE_IDENTIFIER(OP_CALLDATASIZE, instructions::calldatasize) \ - ON_OPCODE_IDENTIFIER(OP_CALLDATACOPY, instructions::calldatacopy) \ - ON_OPCODE_IDENTIFIER(OP_CODESIZE, instructions::codesize) \ - ON_OPCODE_IDENTIFIER(OP_CODECOPY, instructions::codecopy) \ - ON_OPCODE_IDENTIFIER(OP_GASPRICE, instructions::gasprice) \ - ON_OPCODE_IDENTIFIER(OP_EXTCODESIZE, instructions::extcodesize) \ - ON_OPCODE_IDENTIFIER(OP_EXTCODECOPY, instructions::extcodecopy) \ - ON_OPCODE_IDENTIFIER(OP_RETURNDATASIZE, instructions::returndatasize) \ - ON_OPCODE_IDENTIFIER(OP_RETURNDATACOPY, instructions::returndatacopy) \ - ON_OPCODE_IDENTIFIER(OP_EXTCODEHASH, instructions::extcodehash) \ - \ - ON_OPCODE_IDENTIFIER(OP_BLOCKHASH, instructions::blockhash) \ - ON_OPCODE_IDENTIFIER(OP_COINBASE, instructions::coinbase) \ - ON_OPCODE_IDENTIFIER(OP_TIMESTAMP, instructions::timestamp) \ - ON_OPCODE_IDENTIFIER(OP_NUMBER, instructions::number) \ - ON_OPCODE_IDENTIFIER(OP_PREVRANDAO, instructions::prevrandao) \ - ON_OPCODE_IDENTIFIER(OP_GASLIMIT, instructions::gaslimit) \ - ON_OPCODE_IDENTIFIER(OP_CHAINID, instructions::chainid) \ - ON_OPCODE_IDENTIFIER(OP_SELFBALANCE, instructions::selfbalance) \ - ON_OPCODE_IDENTIFIER(OP_BASEFEE, instructions::basefee) \ - ON_OPCODE_IDENTIFIER(OP_BLOBHASH, instructions::blobhash) \ - ON_OPCODE_IDENTIFIER(OP_BLOBBASEFEE, instructions::blobbasefee) \ - ON_OPCODE_UNDEFINED(0x4b) \ - ON_OPCODE_UNDEFINED(0x4c) \ - ON_OPCODE_UNDEFINED(0x4d) \ - ON_OPCODE_UNDEFINED(0x4e) \ - ON_OPCODE_UNDEFINED(0x4f) \ - \ - ON_OPCODE_IDENTIFIER(OP_POP, instructions::pop) \ - ON_OPCODE_IDENTIFIER(OP_MLOAD, instructions::template mload::value_type>) \ - ON_OPCODE_IDENTIFIER(OP_MLOAD8, instructions::template mload) \ - ON_OPCODE_IDENTIFIER(OP_MLOAD16, instructions::template mload) \ - ON_OPCODE_IDENTIFIER(OP_MLOAD32, instructions::template mload) \ - ON_OPCODE_IDENTIFIER(OP_MLOAD64, instructions::template mload) \ - ON_OPCODE_IDENTIFIER(OP_MSTORE, instructions::template mstore::value_type>) \ - ON_OPCODE_IDENTIFIER(OP_MSTORE8, instructions::template mstore) \ - ON_OPCODE_IDENTIFIER(OP_MSTORE16, instructions::template mstore) \ - ON_OPCODE_IDENTIFIER(OP_MSTORE32, instructions::template mstore) \ - ON_OPCODE_IDENTIFIER(OP_MSTORE64, instructions::template mstore) \ - ON_OPCODE_IDENTIFIER(OP_SLOAD, instructions::sload) \ - ON_OPCODE_IDENTIFIER(OP_SSTORE, instructions::sstore) \ - ON_OPCODE_IDENTIFIER(OP_JUMP, instructions::jump) \ - ON_OPCODE_IDENTIFIER(OP_JUMPI, instructions::jumpi) \ - ON_OPCODE_IDENTIFIER(OP_PC, instructions::pc) \ - ON_OPCODE_IDENTIFIER(OP_MSIZE, instructions::msize) \ - ON_OPCODE_IDENTIFIER(OP_GAS, instructions::gas) \ - ON_OPCODE_IDENTIFIER(OP_JUMPDEST, instructions::jumpdest) \ - ON_OPCODE_IDENTIFIER(OP_TLOAD, instructions::tload) \ - ON_OPCODE_IDENTIFIER(OP_TSTORE, instructions::tstore) \ - ON_OPCODE_IDENTIFIER(OP_MCOPY, instructions::mcopy) \ - ON_OPCODE_IDENTIFIER(OP_PUSH0, instructions::push0) \ - \ - ON_OPCODE_IDENTIFIER(OP_PUSH1, instructions::template push<1>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH2, instructions::template push<2>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH3, instructions::template push<3>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH4, instructions::template push<4>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH5, instructions::template push<5>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH6, instructions::template push<6>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH7, instructions::template push<7>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH8, instructions::template push<8>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH9, instructions::template push<9>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH10, instructions::template push<10>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH11, instructions::template push<11>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH12, instructions::template push<12>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH13, instructions::template push<13>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH14, instructions::template push<14>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH15, instructions::template push<15>) \ - \ - ON_OPCODE_IDENTIFIER(OP_PUSH16, instructions::template push<16>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH17, instructions::template push<17>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH18, instructions::template push<18>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH19, instructions::template push<19>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH20, instructions::template push<20>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH21, instructions::template push<21>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH22, instructions::template push<22>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH23, instructions::template push<23>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH24, instructions::template push<24>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH25, instructions::template push<25>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH26, instructions::template push<26>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH27, instructions::template push<27>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH28, instructions::template push<28>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH29, instructions::template push<29>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH30, instructions::template push<30>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH31, instructions::template push<31>) \ - ON_OPCODE_IDENTIFIER(OP_PUSH32, instructions::template push<32>) \ - \ - ON_OPCODE_IDENTIFIER(OP_DUP1, instructions::template dup<1>) \ - ON_OPCODE_IDENTIFIER(OP_DUP2, instructions::template dup<2>) \ - ON_OPCODE_IDENTIFIER(OP_DUP3, instructions::template dup<3>) \ - ON_OPCODE_IDENTIFIER(OP_DUP4, instructions::template dup<4>) \ - ON_OPCODE_IDENTIFIER(OP_DUP5, instructions::template dup<5>) \ - ON_OPCODE_IDENTIFIER(OP_DUP6, instructions::template dup<6>) \ - ON_OPCODE_IDENTIFIER(OP_DUP7, instructions::template dup<7>) \ - ON_OPCODE_IDENTIFIER(OP_DUP8, instructions::template dup<8>) \ - ON_OPCODE_IDENTIFIER(OP_DUP9, instructions::template dup<9>) \ - ON_OPCODE_IDENTIFIER(OP_DUP10, instructions::template dup<10>) \ - ON_OPCODE_IDENTIFIER(OP_DUP11, instructions::template dup<11>) \ - ON_OPCODE_IDENTIFIER(OP_DUP12, instructions::template dup<12>) \ - ON_OPCODE_IDENTIFIER(OP_DUP13, instructions::template dup<13>) \ - ON_OPCODE_IDENTIFIER(OP_DUP14, instructions::template dup<14>) \ - ON_OPCODE_IDENTIFIER(OP_DUP15, instructions::template dup<15>) \ - ON_OPCODE_IDENTIFIER(OP_DUP16, instructions::template dup<16>) \ - \ - ON_OPCODE_IDENTIFIER(OP_SWAP1, instructions::template swap<1>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP2, instructions::template swap<2>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP3, instructions::template swap<3>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP4, instructions::template swap<4>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP5, instructions::template swap<5>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP6, instructions::template swap<6>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP7, instructions::template swap<7>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP8, instructions::template swap<8>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP9, instructions::template swap<9>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP10, instructions::template swap<10>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP11, instructions::template swap<11>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP12, instructions::template swap<12>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP13, instructions::template swap<13>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP14, instructions::template swap<14>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP15, instructions::template swap<15>) \ - ON_OPCODE_IDENTIFIER(OP_SWAP16, instructions::template swap<16>) \ - \ - ON_OPCODE_IDENTIFIER(OP_SWAP, instructions::template swap<0>) \ - ON_OPCODE_IDENTIFIER(OP_DUP, instructions::template dup<0>) \ - ON_OPCODE_IDENTIFIER(OP_LOG1, instructions::log) \ - ON_OPCODE_UNDEFINED(0xa8) \ - ON_OPCODE_UNDEFINED(0xa9) \ - ON_OPCODE_UNDEFINED(0xaa) \ - ON_OPCODE_UNDEFINED(0xab) \ - ON_OPCODE_UNDEFINED(0xac) \ - ON_OPCODE_UNDEFINED(0xad) \ - ON_OPCODE_UNDEFINED(0xae) \ - ON_OPCODE_UNDEFINED(0xaf) \ - \ - ON_OPCODE_UNDEFINED(0xb3) \ - ON_OPCODE_UNDEFINED(0xb4) \ - ON_OPCODE_UNDEFINED(0xb5) \ - ON_OPCODE_UNDEFINED(0xb6) \ - ON_OPCODE_UNDEFINED(0xb7) \ - ON_OPCODE_UNDEFINED(0xb8) \ - ON_OPCODE_UNDEFINED(0xb9) \ - ON_OPCODE_UNDEFINED(0xba) \ - ON_OPCODE_UNDEFINED(0xbb) \ - ON_OPCODE_UNDEFINED(0xbc) \ - ON_OPCODE_UNDEFINED(0xbd) \ - ON_OPCODE_UNDEFINED(0xbe) \ - ON_OPCODE_UNDEFINED(0xbf) \ - \ - ON_OPCODE_UNDEFINED(0xc4) \ - ON_OPCODE_UNDEFINED(0xc5) \ - ON_OPCODE_UNDEFINED(0xc6) \ - ON_OPCODE_UNDEFINED(0xc7) \ - ON_OPCODE_UNDEFINED(0xc8) \ - ON_OPCODE_UNDEFINED(0xc9) \ - ON_OPCODE_UNDEFINED(0xca) \ - ON_OPCODE_UNDEFINED(0xcb) \ - ON_OPCODE_UNDEFINED(0xcc) \ - ON_OPCODE_UNDEFINED(0xcd) \ - ON_OPCODE_UNDEFINED(0xce) \ - ON_OPCODE_UNDEFINED(0xcf) \ - \ - ON_OPCODE_UNDEFINED(0xd0) \ - ON_OPCODE_UNDEFINED(0xd1) \ - ON_OPCODE_UNDEFINED(0xd2) \ - ON_OPCODE_UNDEFINED(0xd3) \ - ON_OPCODE_UNDEFINED(0xd4) \ - ON_OPCODE_UNDEFINED(0xd5) \ - ON_OPCODE_UNDEFINED(0xd6) \ - ON_OPCODE_UNDEFINED(0xd7) \ - ON_OPCODE_UNDEFINED(0xd8) \ - ON_OPCODE_UNDEFINED(0xd9) \ - ON_OPCODE_UNDEFINED(0xda) \ - ON_OPCODE_UNDEFINED(0xdb) \ - ON_OPCODE_UNDEFINED(0xdc) \ - ON_OPCODE_UNDEFINED(0xdd) \ - ON_OPCODE_UNDEFINED(0xde) \ - ON_OPCODE_UNDEFINED(0xdf) \ - \ - ON_OPCODE_IDENTIFIER(OP_RJUMP, instructions::rjump) \ - ON_OPCODE_IDENTIFIER(OP_RJUMPI, instructions::rjumpi) \ - ON_OPCODE_IDENTIFIER(OP_RJUMPV, instructions::rjumpv) \ - ON_OPCODE_IDENTIFIER(OP_CALLF, instructions::callf) \ - ON_OPCODE_IDENTIFIER(OP_RETF, instructions::retf) \ - ON_OPCODE_IDENTIFIER(OP_JUMPF, instructions::jumpf) \ - ON_OPCODE_IDENTIFIER(OP_DUPN, instructions::dupn) \ - ON_OPCODE_IDENTIFIER(OP_SWAPN, instructions::swapn) \ - ON_OPCODE_IDENTIFIER(OP_DATALOAD, instructions::dataload) \ - ON_OPCODE_IDENTIFIER(OP_DATALOADN, instructions::dataloadn) \ - ON_OPCODE_IDENTIFIER(OP_DATASIZE, instructions::datasize) \ - ON_OPCODE_IDENTIFIER(OP_DATACOPY, instructions::datacopy) \ - ON_OPCODE_UNDEFINED(0xec) \ - ON_OPCODE_UNDEFINED(0xed) \ - ON_OPCODE_UNDEFINED(0xee) \ - ON_OPCODE_UNDEFINED(0xef) \ - \ - ON_OPCODE_IDENTIFIER(OP_CREATE, instructions::create) \ - ON_OPCODE_IDENTIFIER(OP_CALL, instructions::call) \ - ON_OPCODE_IDENTIFIER(OP_CALLCODE, instructions::callcode) \ - ON_OPCODE_IDENTIFIER(OP_RETURN, instructions::return_) \ - ON_OPCODE_IDENTIFIER(OP_DELEGATECALL, instructions::delegatecall) \ - ON_OPCODE_IDENTIFIER(OP_CREATE2, instructions::create2) \ - ON_OPCODE_UNDEFINED(0xf6) \ - ON_OPCODE_UNDEFINED(0xf7) \ - ON_OPCODE_UNDEFINED(0xf8) \ - ON_OPCODE_UNDEFINED(0xf9) \ - ON_OPCODE_IDENTIFIER(OP_STATICCALL, instructions::staticcall) \ - ON_OPCODE_UNDEFINED(0xfb) \ - ON_OPCODE_UNDEFINED(0xfc) \ - ON_OPCODE_IDENTIFIER(OP_REVERT, instructions::revert) \ - ON_OPCODE_IDENTIFIER(OP_INVALID, instructions::invalid) \ - ON_OPCODE_IDENTIFIER(OP_SELFDESTRUCT, instructions::selfdestruct) diff --git a/evm-assigner/lib/assigner/include/assigner.hpp b/evm-assigner/lib/assigner/include/assigner.hpp deleted file mode 100644 index 2045938f53..0000000000 --- a/evm-assigner/lib/assigner/include/assigner.hpp +++ /dev/null @@ -1,122 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) Nil Foundation and its affiliates. -// -// This source code is licensed under the MIT license found in the -// LICENSE file in the root directory of this source tree. -//---------------------------------------------------------------------------// - -#ifndef EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_ASSIGNER_HPP_ -#define EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_ASSIGNER_HPP_ - -#include - -#include -#include -#include - -#include - -#include -#include - -#include -#include -#include -#include - -namespace nil { - namespace evm_assigner { - - enum zkevm_circuit : uint8_t { - ALL = 0xFF, - BYTECODE = 0x1, - RW = 0x2 - }; - - static const std::map zkevm_circuits_map = { - {"", zkevm_circuit::ALL}, - {"bytecode", zkevm_circuit::BYTECODE}, - {"rw", zkevm_circuit::RW} - }; - - template - struct assigner { - - using ArithmetizationType = crypto3::zk::snark::plonk_constraint_system; - - assigner(std::unordered_map> &assignments): m_assignments(assignments) {} - - // TODO error handling - void handle_bytecode(size_t original_code_size, const uint8_t* code) { - auto it = m_assignments.find(zkevm_circuit::BYTECODE); - if (it == m_assignments.end()) { - return; - } - return process_bytecode_input( - original_code_size, code, it->second); - } - - // TODO error handling - void handle_rw(std::vector>& rw_trace) { - auto it = m_assignments.find(zkevm_circuit::RW); - if (it == m_assignments.end()) { - return; - } - return process_rw_operations( - rw_trace, it->second); - } - - std::unordered_map> &m_assignments; - }; - - template - static evmc::Result evaluate(const evmc_host_interface* host, evmc_host_context* ctx, - evmc_revision rev, const evmc_message* msg, const uint8_t* code_ptr, size_t code_size, - std::shared_ptr> assigner, const std::string& target_circuit = "") { - if(zkevm_circuits_map.find(target_circuit) == zkevm_circuits_map.end()) { - std::cerr << "Unknown target circuit " << target_circuit << "\n"; - return evmc::Result{EVMC_FAILURE, msg->gas}; - } - const auto zkevm_target_circuit = zkevm_circuits_map.find(target_circuit)->second; - - const evmone::bytes_view container{code_ptr, code_size}; - const auto code_analysis = evmone::baseline::analyze(rev, container); - const auto data = code_analysis.eof_header.get_data(container); - evmone::ExecutionState state(*msg, rev, *host, ctx, container, data, 0, assigner); - - state.analysis.baseline = &code_analysis; // Assign code analysis for instruction implementations. - const auto code = code_analysis.executable_code; - - // fill assignments for bytecode circuit - if (zkevm_target_circuit & zkevm_circuit::BYTECODE) { - assigner->handle_bytecode(state.original_code.size(), code.data()); - } - - int64_t gas = msg->gas; - - const auto& cost_table = evmone::baseline::get_baseline_cost_table(state.rev, code_analysis.eof_header.version); - - BOOST_LOG_TRIVIAL(debug) << "Run evaluate\n"; - - gas = evmone::baseline::dispatch(cost_table, state, msg->gas, code.data()); - - BOOST_LOG_TRIVIAL(debug) << "Evaluate result = " << state.status << "\n"; - - // fill assignments for read/write circuit - if (zkevm_target_circuit & zkevm_circuit::RW) { - assigner->handle_rw(state.rw_trace); - } - - const auto gas_left = (state.status == EVMC_SUCCESS || state.status == EVMC_REVERT) ? gas : 0; - const auto gas_refund = (state.status == EVMC_SUCCESS) ? state.gas_refund : 0; - - assert(state.output_size != 0 || state.output_offset == 0); - const auto evmc_result = evmc::make_result(state.status, gas_left, gas_refund, - state.output_size != 0 ? &state.memory[state.output_offset] : nullptr, state.output_size); - return evmc::Result{evmc_result}; - } - - } // namespace evm_assigner -} // namespace nil - -#endif // EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_ASSIGNER_HPP_ diff --git a/evm-assigner/lib/assigner/include/bytecode.hpp b/evm-assigner/lib/assigner/include/bytecode.hpp deleted file mode 100644 index 4f7477f658..0000000000 --- a/evm-assigner/lib/assigner/include/bytecode.hpp +++ /dev/null @@ -1,112 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) Nil Foundation and its affiliates. -// -// This source code is licensed under the MIT license found in the -// LICENSE file in the root directory of this source tree. -//---------------------------------------------------------------------------// - -#ifndef EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_BYTECODE_HPP_ -#define EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_BYTECODE_HPP_ - -#include -#include - -#include -#include -#include - -#include -#include -#include - -namespace nil { - namespace evm_assigner { - - template - void process_bytecode_input(size_t original_code_size, const uint8_t* code, - nil::blueprint::assignment> &bytecode_table) { - using value_type = typename BlueprintFieldType::value_type; - using hash_type = nil::crypto3::hashes::keccak_1600<256>; - - BOOST_LOG_TRIVIAL(debug) << "Process bytecode circuit\n"; - BOOST_LOG_TRIVIAL(debug) << "Bytecode size: " << original_code_size << "\n"; - BOOST_LOG_TRIVIAL(debug) << "Bytecode: " << std::endl; - - std::vector bytecode; - for (size_t i = 0; i < original_code_size; i++) { - const auto op = code[i]; - bytecode.push_back(op); - BOOST_LOG_TRIVIAL(debug) << (uint)op << " "; - } - BOOST_LOG_TRIVIAL(debug) << "\n"; - - std::string hash = nil::crypto3::hash>(bytecode.begin(), bytecode.end()); - std::string str_hi = hash.substr(0, hash.size()-32); - std::string str_lo = hash.substr(hash.size()-32, 32); - value_type hash_hi; - value_type hash_lo; - for( std::size_t j = 0; j < str_hi.size(); j++ ){hash_hi *=16; hash_hi += str_hi[j] >= '0' && str_hi[j] <= '9'? str_hi[j] - '0' : str_hi[j] - 'a' + 10;} - for( std::size_t j = 0; j < str_lo.size(); j++ ){hash_lo *=16; hash_lo += str_lo[j] >= '0' && str_lo[j] <= '9'? str_lo[j] - '0' : str_lo[j] - 'a' + 10;} - BOOST_LOG_TRIVIAL(debug) << std::hex << "Contract hash = " << hash << " h:" << hash_hi << " l:" << hash_lo << std::dec << "\n"; - - static constexpr uint32_t TAG = 0; - static constexpr uint32_t INDEX = 1; - static constexpr uint32_t VALUE = 2; - static constexpr uint32_t IS_OPCODE = 3; - static constexpr uint32_t PUSH_SIZE = 4; - static constexpr uint32_t LENGTH_LEFT = 5; - static constexpr uint32_t HASH_HI = 6; - static constexpr uint32_t HASH_LO = 7; - static constexpr uint32_t VALUE_RLC = 8; - static constexpr uint32_t RLC_CHALLENGE = 9; - - value_type rlc_challenge = 15; - uint32_t cur = 0; - // no one another circuit uses witness column VALUE from 1th table - uint32_t start_row_index = bytecode_table.witness_column_size(VALUE); - std::size_t prev_length = 0; - value_type prev_vrlc = 0; - value_type push_size = 0; - for(size_t j = 0; j < original_code_size; j++, cur++){ - std::uint8_t byte = bytecode[j]; - bytecode_table.witness(VALUE, start_row_index + cur) = bytecode[j]; - bytecode_table.witness(HASH_HI, start_row_index + cur) = hash_hi; - bytecode_table.witness(HASH_LO, start_row_index + cur) = hash_lo; - bytecode_table.witness(RLC_CHALLENGE, start_row_index + cur) = rlc_challenge; - if( j == 0) { - // HEADER - bytecode_table.witness(TAG, start_row_index + cur) = 0; - bytecode_table.witness(INDEX, start_row_index + cur) = 0; - bytecode_table.witness(IS_OPCODE, start_row_index + cur) = 0; - bytecode_table.witness(PUSH_SIZE, start_row_index + cur) = 0; - prev_length = bytecode[j]; - bytecode_table.witness(LENGTH_LEFT, start_row_index + cur) = bytecode[j]; - prev_vrlc = 0; - bytecode_table.witness(VALUE_RLC, start_row_index + cur) = 0; - push_size = 0; - } else { - // BYTE - bytecode_table.witness(TAG, start_row_index + cur) = 1; - bytecode_table.witness(INDEX, start_row_index + cur) = j-1; - bytecode_table.witness(LENGTH_LEFT, start_row_index + cur) = prev_length - 1; - prev_length = prev_length - 1; - if (push_size == 0) { - bytecode_table.witness(IS_OPCODE, start_row_index + cur) = 1; - if(byte > 0x5f && byte < 0x80) { - push_size = byte - 0x5f; - } - } else { - bytecode_table.witness(IS_OPCODE, start_row_index + cur) = 0; - push_size--; - } - bytecode_table.witness(PUSH_SIZE, start_row_index + cur) = push_size; - bytecode_table.witness(VALUE_RLC, start_row_index + cur) = prev_vrlc * rlc_challenge + byte; - prev_vrlc = prev_vrlc * rlc_challenge + byte; - } - } - } - - } // namespace evm_assigner -} // namespace nil - -#endif // EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_BYTECODE_HPP_ diff --git a/evm-assigner/lib/assigner/include/rw.hpp b/evm-assigner/lib/assigner/include/rw.hpp deleted file mode 100644 index 04220c145e..0000000000 --- a/evm-assigner/lib/assigner/include/rw.hpp +++ /dev/null @@ -1,290 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) Nil Foundation and its affiliates. -// -// This source code is licensed under the MIT license found in the -// LICENSE file in the root directory of this source tree. -//---------------------------------------------------------------------------// - -#ifndef EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_RW_HPP_ -#define EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_RW_HPP_ - -#include -#include - -#include -#include -#include - -#include - -namespace nil { - namespace evm_assigner { - - template - struct rw_operation{ - std::uint8_t op; // described above - std::size_t id; // call_id for stack, memory, tx_id for - zkevm_word address; // 10 bit for stack, 160 bit for - std::uint8_t field; // Not used for stack, memory, storage - zkevm_word storage_key; // 256-bit, not used for stack, memory - std::size_t rw_id; // 32-bit - bool is_write; // 1 if it's write operation - zkevm_word value; // It's full 256 words for storage and stack, but it's only byte for memory. - zkevm_word value_prev; - - bool operator< (const rw_operation &other) const { - if( op != other.op ) return op < other.op; - if( address != other.address ) return address < other.address; - if( field != other.field ) return field < other.field; - if( storage_key != other.storage_key ) return storage_key < other.storage_key; - if( rw_id != other.rw_id) return rw_id < other.rw_id; - return false; - } - }; - - constexpr std::uint8_t START_OP = 0; - constexpr std::uint8_t STACK_OP = 1; - constexpr std::uint8_t MEMORY_OP = 2; - constexpr std::uint8_t STORAGE_OP = 3; - constexpr std::uint8_t TRANSIENT_STORAGE_OP = 4; - constexpr std::uint8_t CALL_CONTEXT_OP = 5; - constexpr std::uint8_t ACCOUNT_OP = 6; - constexpr std::uint8_t TX_REFUND_OP = 7; - constexpr std::uint8_t TX_ACCESS_LIST_ACCOUNT_OP = 8; - constexpr std::uint8_t TX_ACCESS_LIST_ACCOUNT_STORAGE_OP = 9; - constexpr std::uint8_t TX_LOG_OP = 10; - constexpr std::uint8_t TX_RECEIPT_OP = 11; - constexpr std::uint8_t PADDING_OP = 12; - constexpr std::uint8_t rw_options_amount = 13; - - // For testing purposes - template - std::ostream& operator<<(std::ostream& os, const rw_operation& obj){ - if(obj.op == START_OP ) os << "START: "; - if(obj.op == STACK_OP ) os << "STACK: "; - if(obj.op == MEMORY_OP ) os << "MEMORY: "; - if(obj.op == STORAGE_OP ) os << "STORAGE: "; - if(obj.op == TRANSIENT_STORAGE_OP ) os << "TRANSIENT_STORAGE: "; - if(obj.op == CALL_CONTEXT_OP ) os << "CALL_CONTEXT_OP: "; - if(obj.op == ACCOUNT_OP ) os << "ACCOUNT_OP: "; - if(obj.op == TX_REFUND_OP ) os << "TX_REFUND_OP: "; - if(obj.op == TX_ACCESS_LIST_ACCOUNT_OP ) os << "TX_ACCESS_LIST_ACCOUNT_OP: "; - if(obj.op == TX_ACCESS_LIST_ACCOUNT_STORAGE_OP ) os << "TX_ACCESS_LIST_ACCOUNT_STORAGE_OP: "; - if(obj.op == TX_LOG_OP ) os << "TX_LOG_OP: "; - if(obj.op == TX_RECEIPT_OP ) os << "TX_RECEIPT_OP: "; - if(obj.op == PADDING_OP ) os << "PADDING_OP: "; - os << obj.rw_id << ", addr =" << std::hex << obj.address << std::dec; - if(obj.op == STORAGE_OP || obj.op == TRANSIENT_STORAGE_OP) - os << " storage_key = " << obj.storage_key; - if(obj.is_write) os << " W "; else os << " R "; - os << "[" << std::hex << obj.value_prev << std::dec <<"] => "; - os << "[" << std::hex << obj.value << std::dec <<"]"; - return os; - } - - template - rw_operation start_operation(){ - return rw_operation({START_OP, 0, 0, 0, 0, 0, 0, 0}); - } - - template - rw_operation stack_operation(std::size_t id, uint16_t address, std::size_t rw_id, bool is_write, zkevm_word value){ - assert(id < ( 1 << 28)); // Maximum calls amount(?) - assert(address < 1024); - return rw_operation({STACK_OP, id, address, 0, 0, rw_id, is_write, value, 0}); - } - - template - rw_operation memory_operation(std::size_t id, zkevm_word address, std::size_t rw_id, bool is_write, zkevm_word value){ - assert(id < ( 1 << 28)); // Maximum calls amount(?) - return rw_operation({MEMORY_OP, id, address, 0, 0, rw_id, is_write, value, 0}); - } - - template - rw_operation storage_operation( - std::size_t id, - zkevm_word address, - zkevm_word storage_key, - std::size_t rw_id, - bool is_write, - zkevm_word value, - zkevm_word value_prev - ){ - return rw_operation({STORAGE_OP, id, address, 0, storage_key, rw_id, is_write, value, value_prev}); - } - - template - rw_operation padding_operation(){ - return rw_operation({PADDING_OP, 0, 0, 0, 0, 0, 0, 0}); - } - - template - void process_rw_operations(std::vector>& rw_trace, - nil::blueprint::assignment> &rw_table) { - constexpr std::size_t OP = 0; - constexpr std::size_t ID = 1; - constexpr std::size_t ADDRESS = 2; - constexpr std::size_t STORAGE_KEY_HI = 3; - constexpr std::size_t STORAGE_KEY_LO = 4; - constexpr std::size_t FIELD_TYPE = 5; // NOT USED FOR STACK, MEMORY and ACCOUNT STORAGE, but used by txComponent. - constexpr std::size_t RW_ID = 6; - constexpr std::size_t IS_WRITE = 7; - constexpr std::size_t VALUE_HI = 8; - constexpr std::size_t VALUE_LO = 9; - - constexpr std::size_t OP_SELECTORS_AMOUNT = 4; // index \in {0..31} - constexpr std::array OP_SELECTORS = {10, 11, 12, 13}; - - constexpr std::size_t INDICES_AMOUNT = 5; // index \in {0..31} - constexpr std::array INDICES = {14, 15, 16, 17, 18}; - - constexpr std::size_t IS_FIRST = 19; - - constexpr std::size_t CHUNKS_AMOUNT = 30; - constexpr std::array CHUNKS = { - 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49 - }; - - constexpr std::size_t DIFFERENCE = 50; - constexpr std::size_t INV_DIFFERENCE = 51; - constexpr std::size_t VALUE_BEFORE_HI = 52; // Check, where do we need it. - constexpr std::size_t VALUE_BEFORE_LO = 53; // Check, where do we need it. - constexpr std::size_t STATE_ROOT_HI = 54; // Check, where do we need it. - constexpr std::size_t STATE_ROOT_LO = 55; // Check, where do we need it. - constexpr std::size_t STATE_ROOT_BEFORE_HI = 56; // Check, where do we need it. - constexpr std::size_t STATE_ROOT_BEFORE_LO = 57; // Check, where do we need it. - constexpr std::size_t IS_LAST = 58; - - constexpr std::size_t SORTED_COLUMNS_AMOUNT = 32; - - constexpr std::size_t total_witness_amount = 60; - - uint32_t start_row_index = rw_table.witness_column_size(OP); - - BOOST_LOG_TRIVIAL(debug) << "Process RW circuit\n"; - BOOST_LOG_TRIVIAL(debug) << "Start row index: " << start_row_index << "\n"; - - std::vector sorting = { - OP, - // ID - CHUNKS[0], CHUNKS[1], - // address - CHUNKS[2], CHUNKS[3], CHUNKS[4], CHUNKS[5], CHUNKS[6], - CHUNKS[7], CHUNKS[8], CHUNKS[9], CHUNKS[10], CHUNKS[11], - // field - FIELD_TYPE, - // storage_key - CHUNKS[12], CHUNKS[13], CHUNKS[14], CHUNKS[15], CHUNKS[16], - CHUNKS[17], CHUNKS[18], CHUNKS[19], CHUNKS[20], CHUNKS[21], - CHUNKS[22], CHUNKS[23], CHUNKS[24], CHUNKS[25], CHUNKS[26], - CHUNKS[27], - // rw_id - CHUNKS[28], CHUNKS[29] - }; - //sort operations - std::sort(rw_trace.begin(), rw_trace.end()); - - BOOST_LOG_TRIVIAL(debug) << "Num operations = " << rw_trace.size() << "\n"; - for(uint32_t i = 0; i < rw_trace.size(); i++){ - BOOST_LOG_TRIVIAL(debug) << rw_trace[i] << "\n"; - // Lookup columns - rw_table.witness(OP, start_row_index + i) = rw_trace[i].op; - rw_table.witness(ID, start_row_index + i) = rw_trace[i].id; - rw_table.witness(ADDRESS, start_row_index + i) = rw_trace[i].address.to_field_as_address(); - rw_table.witness(STORAGE_KEY_HI, start_row_index + i) = rw_trace[i].storage_key.w_hi(); - rw_table.witness(STORAGE_KEY_LO, start_row_index + i) = rw_trace[i].storage_key.w_lo(); - rw_table.witness(RW_ID, start_row_index + i) = rw_trace[i].rw_id; - rw_table.witness(IS_WRITE, start_row_index + i) = rw_trace[i].is_write; - rw_table.witness(VALUE_HI, start_row_index + i) = rw_trace[i].value.w_hi(); - rw_table.witness(VALUE_LO, start_row_index + i) = rw_trace[i].value.w_lo(); - - // Op selectors - typename BlueprintFieldType::integral_type mask = (1 << OP_SELECTORS_AMOUNT); - for( std::size_t j = 0; j < OP_SELECTORS_AMOUNT; j++){ - mask >>= 1; - rw_table.witness(OP_SELECTORS[j], start_row_index + i) = (((rw_trace[i].op & mask) == 0) ? 0 : 1); - } - - // Fill chunks. - // id - mask = 0xffff; - mask <<= 16; - rw_table.witness(CHUNKS[0], start_row_index + i) = (mask & rw_trace[i].id) >> 16; - mask >>= 16; - rw_table.witness(CHUNKS[1], start_row_index + i) = (mask & rw_trace[i].id); - - // address - mask = 0xffff; - mask <<= (16 * 9); - for( std::size_t j = 0; j < 10; j++){ - rw_table.witness(CHUNKS[2+j], start_row_index + i) = (((rw_trace[i].address & mask) >> (16 * (9-j)))); - mask >>= 16; - } - - // storage key - mask = 0xffff; - mask <<= (16 * 15); - for( std::size_t j = 0; j < 16; j++){ - rw_table.witness(CHUNKS[12+j], start_row_index + i) = (((rw_trace[i].storage_key & mask) >> (16 * (15-j)))); - mask >>= 16; - } - - // rw_key - mask = 0xffff; - mask <<= 16; - rw_table.witness(CHUNKS[28], start_row_index + i) = (mask & rw_trace[i].rw_id) >> 16; - mask >>= 16; - rw_table.witness(CHUNKS[29], start_row_index + i) = (mask & rw_trace[i].rw_id); - - // fill sorting indices and advices - if( i == 0 ) continue; - bool neq = true; - std::size_t diff_ind = 0; - for(; diff_ind < sorting.size(); diff_ind++){ - if( - rw_table.witness(sorting[diff_ind], start_row_index+i) != - rw_table.witness(sorting[diff_ind], start_row_index+i - 1) - ) break; - } - if( diff_ind < 30 ){ - rw_table.witness(VALUE_BEFORE_HI, start_row_index + i) = rw_trace[i].value_prev.w_hi(); - rw_table.witness(VALUE_BEFORE_LO, start_row_index + i) = rw_trace[i].value_prev.w_lo(); - } else { - rw_table.witness(VALUE_BEFORE_HI, start_row_index + i) = rw_table.witness(VALUE_BEFORE_HI, start_row_index + i - 1); - rw_table.witness(VALUE_BEFORE_LO, start_row_index + i) = rw_table.witness(VALUE_BEFORE_LO, start_row_index + i - 1); - } - - mask = (1 << INDICES_AMOUNT); - for(std::size_t j = 0; j < INDICES_AMOUNT; j++){ - mask >>= 1; - rw_table.witness(INDICES[j], start_row_index + i) = ((mask & diff_ind) == 0? 0: 1); - } - if( rw_trace[i].op != START_OP && diff_ind < 30){ - rw_table.witness(IS_LAST, start_row_index + i - 1) = 1; - } - if( rw_trace[i].op != START_OP && rw_trace[i].op != PADDING_OP && diff_ind < 30){ - rw_table.witness(IS_FIRST, start_row_index + i) = 1; - } - - rw_table.witness(DIFFERENCE, start_row_index + i) = - rw_table.witness(sorting[diff_ind], start_row_index+i) - - rw_table.witness(sorting[diff_ind], start_row_index+i - 1); - BOOST_LOG_TRIVIAL(debug) << "Diff index = " << diff_ind << - " is_first = " << rw_table.witness(IS_FIRST, start_row_index + i) << - " is_last = " << rw_table.witness(IS_LAST, start_row_index + i) << - "\n"; - - if( rw_table.witness(DIFFERENCE, start_row_index + i) == 0) - rw_table.witness(INV_DIFFERENCE, start_row_index + i) = 0; - else - rw_table.witness(INV_DIFFERENCE, start_row_index + i) = BlueprintFieldType::value_type::one() / rw_table.witness(DIFFERENCE, start_row_index+i); - } - } - - } // namespace evm_assigner -} // namespace nil - -#endif // EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_RW_HPP_ diff --git a/evm-assigner/lib/assigner/include/vm_host.hpp b/evm-assigner/lib/assigner/include/vm_host.hpp deleted file mode 100644 index 9f40806dab..0000000000 --- a/evm-assigner/lib/assigner/include/vm_host.hpp +++ /dev/null @@ -1,332 +0,0 @@ -#ifndef EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_VM_HOST_H_ -#define EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_VM_HOST_H_ - -// Based on example host - -#include -#include - -#include -#include -#include -#include - -#include -#include - -using namespace evmc::literals; - -namespace evmc -{ -struct account -{ - virtual ~account() = default; - - evmc::uint256be balance = {}; - std::vector code; - std::map storage; - std::map transient_storage; - - virtual evmc::bytes32 code_hash() const - { - // Extremely dumb "hash" function. - evmc::bytes32 ret{}; - for (const auto v : code) - ret.bytes[v % sizeof(ret.bytes)] ^= v; - return ret; - } -}; - -using accounts = std::map; - -} // namespace evmc - -template -class VMHost : public evmc::Host -{ -public: - VMHost() = default; - explicit VMHost(evmc_tx_context& _tx_context, std::shared_ptr> _assigner, const std::string& _target_circuit = "") noexcept - : tx_context{_tx_context}, assigner{_assigner}, target_circuit{_target_circuit} - {} - - VMHost(evmc_tx_context& _tx_context, evmc::accounts& _accounts, std::shared_ptr> _assigner, const std::string& _target_circuit = "") noexcept - : accounts{_accounts}, tx_context{_tx_context}, assigner{_assigner}, target_circuit{_target_circuit} - {} - - bool account_exists(const evmc::address& addr) noexcept final - { - auto account_iter = get_account(addr); - return account_iter != accounts.end(); - } - - evmc::bytes32 get_storage(const evmc::address& addr, - const evmc::bytes32& key) noexcept final - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return {}; - } - const auto storage_iter = account_iter->second.storage.find(key); - if (storage_iter != account_iter->second.storage.end()) { - return storage_iter->second; - } - return {}; - } - - evmc_storage_status set_storage(const evmc::address& addr, - const evmc::bytes32& key, - const evmc::bytes32& value) noexcept final - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return EVMC_STORAGE_DELETED; - } - - auto storage_iter = account_iter->second.storage.find(key); - if (storage_iter == account_iter->second.storage.end()) { - return EVMC_STORAGE_DELETED; - } - auto prev_value = storage_iter->second; - storage_iter->second = value; - - return (prev_value == value) ? EVMC_STORAGE_ASSIGNED : EVMC_STORAGE_MODIFIED; - } - - evmc::uint256be get_balance(const evmc::address& addr) noexcept final - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return {}; - } - return account_iter->second.balance; - } - - size_t get_code_size(const evmc::address& addr) noexcept final - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return 0; - } - return account_iter->second.code.size(); - } - - evmc::bytes32 get_code_hash(const evmc::address& addr) noexcept final - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return {}; - } - return account_iter->second.code_hash(); - } - - size_t copy_code(const evmc::address& addr, - size_t code_offset, - uint8_t* buffer_data, - size_t buffer_size) noexcept final - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return 0; - } - - const auto& code = account_iter->second.code; - - if (code_offset >= code.size()) - return 0; - - const auto n = std::min(buffer_size, code.size() - code_offset); - - if (n > 0) - std::copy_n(&code[code_offset], n, buffer_data); - return n; - } - - bool selfdestruct(const evmc::address& addr, const evmc::address& beneficiary) noexcept final - { - (void)addr; - (void)beneficiary; - return false; - } - - evmc::Result call(const evmc_message& msg) noexcept final - { - switch (msg.kind) - { - case EVMC_CALL: - case EVMC_CALLCODE: - case EVMC_DELEGATECALL: - return handle_call(msg); - case EVMC_CREATE: - case EVMC_CREATE2: - return handle_create(msg); - default: - // Unexpected opcode - return evmc::Result{EVMC_INTERNAL_ERROR}; - } - } - - evmc_tx_context get_tx_context() const noexcept final { return tx_context; } - - // NOLINTNEXTLINE(bugprone-exception-escape) - evmc::bytes32 get_block_hash(int64_t number) const noexcept final - { - const int64_t current_block_number = get_tx_context().block_number; - - return (number < current_block_number && number >= current_block_number - 256) ? - 0xb10c8a5fb10c8a5fb10c8a5fb10c8a5fb10c8a5fb10c8a5fb10c8a5fb10c8a5f_bytes32 : - 0x0000000000000000000000000000000000000000000000000000000000000000_bytes32; - } - - void emit_log(const evmc::address& addr, - const uint8_t* data, - size_t data_size, - const evmc::bytes32 topics[], - size_t topics_count) noexcept final - { - (void)addr; - (void)data; - (void)data_size; - (void)topics; - (void)topics_count; - } - - evmc_access_status access_account(const evmc::address& addr) noexcept final - { - (void)addr; - return EVMC_ACCESS_COLD; - } - - evmc_access_status access_storage(const evmc::address& addr, - const evmc::bytes32& key) noexcept final - { - (void)addr; - (void)key; - return EVMC_ACCESS_COLD; - } - - evmc::bytes32 get_transient_storage(const evmc::address& addr, - const evmc::bytes32& key) noexcept override - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return {}; - } - - const auto transient_storage_iter = account_iter->second.transient_storage.find(key); - if (transient_storage_iter != account_iter->second.transient_storage.end()) - return transient_storage_iter->second; - return {}; - } - - void set_transient_storage(const evmc::address& addr, - const evmc::bytes32& key, - const evmc::bytes32& value) noexcept override - { - auto account_iter = get_account(addr); - if (account_iter == accounts.end()) { - return; - } - account_iter->second.transient_storage[key] = value; - } - -protected: - evmc::accounts accounts; - - virtual evmc::accounts::iterator get_account(const evmc::address& addr) noexcept { - return accounts.find(addr); - } -private: - evmc_tx_context tx_context{}; - std::shared_ptr> assigner; - std::string target_circuit; - - evmc::Result handle_call(const evmc_message& msg) { - auto sender_iter = get_account(msg.sender); - if (sender_iter == accounts.end()) - { - // Sender account does not exist - return evmc::Result{EVMC_INTERNAL_ERROR}; - } - auto &sender_acc = sender_iter->second; - auto account_iter = get_account(msg.code_address); - if (account_iter == accounts.end()) - { - // Create account - accounts[msg.code_address] = {}; - } - auto& acc = accounts[msg.code_address]; - if (msg.kind == EVMC_CALL) { - auto value_to_transfer = nil::evm_assigner::zkevm_word(msg.value); - auto balance = nil::evm_assigner::zkevm_word(sender_acc.balance); - // Balance was already checked in evmone, so simply adjust it - sender_acc.balance = (balance - value_to_transfer).to_uint256be(); - acc.balance = (value_to_transfer + nil::evm_assigner::zkevm_word(acc.balance)).to_uint256be(); - } - if (acc.code.empty()) - { - return evmc::Result{EVMC_SUCCESS, msg.gas, 0, msg.input_data, msg.input_size}; - } - // TODO: handle precompiled contracts - evmc::Result res = nil::evm_assigner::evaluate(&get_interface(), to_context(), - EVMC_LATEST_STABLE_REVISION, &msg, acc.code.data(), acc.code.size(), assigner, target_circuit); - return res; - } - - evmc::Result handle_create(const evmc_message& msg) { - evmc::address new_contract_address = calculate_address(msg); - if (get_account(new_contract_address) != accounts.end()) - { - // Address collision - return evmc::Result{EVMC_FAILURE}; - } - accounts[new_contract_address] = {}; - if (msg.input_size == 0) - { - return evmc::Result{EVMC_SUCCESS, msg.gas, 0, new_contract_address}; - } - evmc_message init_msg(msg); - init_msg.kind = EVMC_CALL; - init_msg.recipient = new_contract_address; - init_msg.sender = msg.sender; - init_msg.input_size = 0; - evmc::Result res = nil::evm_assigner::evaluate(&get_interface(), to_context(), - EVMC_LATEST_STABLE_REVISION, &init_msg, msg.input_data, msg.input_size, assigner, target_circuit); - if (res.status_code == EVMC_SUCCESS) - { - accounts[new_contract_address].code = - std::vector(res.output_data, res.output_data + res.output_size); - } - res.create_address = new_contract_address; - return res; - } - - evmc::address calculate_address(const evmc_message& msg) { - // TODO: Implement for CREATE opcode, for now the result is only correct for CREATE2 - // CREATE requires rlp encoding - auto seed = nil::evm_assigner::zkevm_word(msg.create2_salt); - auto hash = nil::evm_assigner::zkevm_word(ethash::keccak256(msg.input_data, msg.input_size)); - auto sender = nil::evm_assigner::zkevm_word(msg.sender); - auto sum = nil::evm_assigner::zkevm_word(0xff) + seed + hash + sender; - auto rehash = ethash::keccak256(reinterpret_cast(&sum.get_value()), - nil::evm_assigner::zkevm_word::size); - // Result address is the last 20 bytes of the hash - evmc::address res; - std::memcpy(res.bytes, rehash.bytes + 12, 20); - return res; - } -}; - -template -evmc_host_context* vm_host_create_context(evmc_tx_context tx_context, std::shared_ptr> assigner) { - auto host = new VMHost{tx_context, assigner}; - return host->to_context(); -} - -template -void vm_host_destroy_context(evmc_host_context* context) { - delete evmc::Host::from_context>(context); -} - - -#endif // EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_VM_HOST_H_ diff --git a/evm-assigner/lib/assigner/include/zkevm_word.hpp b/evm-assigner/lib/assigner/include/zkevm_word.hpp deleted file mode 100644 index 2d3d1c7b3f..0000000000 --- a/evm-assigner/lib/assigner/include/zkevm_word.hpp +++ /dev/null @@ -1,280 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) Nil Foundation and its affiliates. -// -// This source code is licensed under the MIT license found in the -// LICENSE file in the root directory of this source tree. -//---------------------------------------------------------------------------// - -#ifndef EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_ZKEVM_WORD_HPP_ -#define EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_ZKEVM_WORD_HPP_ - -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace nil { - namespace evm_assigner { - - using Endianness = nil::marshalling::option::big_endian; - using TTypeBase = nil::marshalling::field_type; - - template - struct zkevm_word { - using column_type_t = typename crypto3::zk::snark::plonk_column; - using value_type = intx::uint256; - static constexpr uint64_t size = sizeof(value_type); - // constructors - zkevm_word() { - value = 0; - } - - zkevm_word(int v) { - value = v; - } - - zkevm_word(int64_t v) { - value = v; - } - - zkevm_word(uint64_t v) { - value = v; - } - - zkevm_word(const intx::uint256& v) { - value = v; - } - - zkevm_word(const evmc::uint256be& v) { - value = intx::be::load(v); - } - - zkevm_word(const evmc::address& addr) { - value = intx::be::load(addr); - } - - zkevm_word(const ethash::hash256& hash) { - value = intx::be::load(hash); - } - - zkevm_word(const uint8_t* data, size_t len) { - assert(len <= 32); - // copy data into zero-padded memory - std::vector bytes(32, 0); - for (unsigned i = 0; i < len; ++i) { - bytes[32 - len + i] = data[i]; - } - value = intx::be::unsafe::load(bytes.data()); - } - - // operators - zkevm_word operator+(const zkevm_word& other) const { - return zkevm_word(value + other.value); - } - - zkevm_word operator-(const zkevm_word& other) const { - return zkevm_word(value - other.value); - } - - zkevm_word operator*(const zkevm_word& other) const { - return zkevm_word(value * other.value); - } - - zkevm_word operator/(const zkevm_word& other) const { - return zkevm_word(value / other.value); - } - - zkevm_word operator%(const zkevm_word& other) const { - return zkevm_word(value % other.value); - } - - zkevm_word sdiv(const zkevm_word& other) const { - return other.value != 0 ? intx::sdivrem(value, other.value).quot : 0; - } - - zkevm_word smod(const zkevm_word& other) const { - return other.value != 0 ? intx::sdivrem(value, other.value).rem : 0; - } - - zkevm_word addmod(const zkevm_word& other, const zkevm_word& m) const { - return m != 0 ? intx::addmod(value, other.value, m.value) : 0; - } - - zkevm_word mulmod(const zkevm_word& other, const zkevm_word& m) const { - return m != 0 ? intx::mulmod(value, other.value, m.value) : 0; - } - - zkevm_word exp(const zkevm_word& e) const { - return intx::exp(value, e.value); - } - - unsigned count_significant_bytes() const { - return intx::count_significant_bytes(value); - } - - bool slt(const zkevm_word& other) const { - return intx::slt(value, other.value); - } - - bool operator==(const zkevm_word& other) const { - return value == other.value; - } - - bool operator!=(const zkevm_word& other) const { - return value != other.value; - } - - bool operator!=(int v) const { - return value != v; - } - - bool operator<(const zkevm_word& other) const { - return value < other.value; - } - - bool operator<(int v) const { - return value < v; - } - - zkevm_word operator&(const zkevm_word& other) const { - return value & other.value; - } - - typename BlueprintFieldType::integral_type operator&(const typename BlueprintFieldType::integral_type& other) const { - typename BlueprintFieldType::integral_type val = value[0]; - typename BlueprintFieldType::integral_type lo = value[1]; - typename BlueprintFieldType::integral_type hi = value[2]; - typename BlueprintFieldType::integral_type h = value[3]; - val += lo << 64; - val += hi << 64 * 2; - val += h << 64 * 3; - return val & other; - } - - zkevm_word operator|(const zkevm_word& other) const { - return value | other.value; - } - - zkevm_word operator^(const zkevm_word& other) const { - return value ^ other.value; - } - - zkevm_word operator~() const { - return ~value; - } - - zkevm_word operator<<(const zkevm_word& other) const { - return value << other.value; - } - - zkevm_word operator>>(const zkevm_word& other) const { - return value >> other.value; - } - - zkevm_word operator<<(uint64_t v) const { - return value << v; - } - - zkevm_word operator>>(uint64_t v) const { - return value >> v; - } - - // convertions - uint64_t to_uint64(size_t i = 0) const { - return static_cast(value[i]); - } - - const value_type &get_value() const - { - return value; - } - - ethash::hash256 to_hash() const { - return intx::be::store(value); - } - - evmc::address to_address() const { - return intx::be::trunc(value); - } - - typename BlueprintFieldType::value_type to_field_as_address() const { - typename BlueprintFieldType::integral_type res = value[0]; - typename BlueprintFieldType::integral_type lo = value[1]; - typename BlueprintFieldType::integral_type hi = value[2]; - res += lo << 64; - res += hi << 128; - return res; - } - - evmc::uint256be to_uint256be() const { - return intx::be::store(value); - } - - //partial size_t - void set_val(uint64_t v, size_t i) { - value[i] = v; - } - - // memory - template // uint8, uint16, uint32, uint64, intx::uint256 - void store(uint8_t* data) const { - intx::be::unsafe::store(data, static_cast(value)); - } - - void load_partial_data(const uint8_t* data, size_t len, size_t i) { - switch (len) { - case 1: - value[i] = intx::be::unsafe::load(data); - break; - case 2: - value[i] = intx::be::unsafe::load(data); - break; - case 3: - value[i] = intx::be::unsafe::load(data) >> 8; - break; - case 4: - value[i] = intx::be::unsafe::load(data); - break; - case 5: - case 6: - case 7: - case 8: - value[i] = intx::be::unsafe::load(data) >> (8 * (sizeof(uint64_t) - len)); - break; - }; - } - - typename BlueprintFieldType::value_type w_hi() const { - typename BlueprintFieldType::integral_type res = value[3]; - res = res << 64; - res += value[2]; - return res; - } - - typename BlueprintFieldType::value_type w_lo() const { - typename BlueprintFieldType::integral_type res = value[1]; - res = res << 64; - res += value[0]; - return res; - } - - private: - intx::uint256 value; - }; - - template - std::ostream& operator<<(std::ostream& os, const zkevm_word& obj){ - const auto word = obj.to_uint256be(); - for (uint8_t i = 0; i < 32; i++) { - os << (int)word.bytes[i] << " "; - } - return os; - } - } // namespace evm_assigner -} // namespace nil -#endif // EVM_ASSIGNER_LIB_ASSIGNER_INCLUDE_ZKEVM_WORD_HPP_ diff --git a/evm-assigner/lib/assigner/test/CMakeLists.txt b/evm-assigner/lib/assigner/test/CMakeLists.txt deleted file mode 100644 index 1c0d51a273..0000000000 --- a/evm-assigner/lib/assigner/test/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -include(GoogleTest) - -find_package(GTest CONFIG REQUIRED) - -add_executable(assigner_tests - assigner_test.cpp) - -if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(assigner_tests PRIVATE "-fconstexpr-steps=2147483647") -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - target_compile_options(assigner_tests PRIVATE "-fconstexpr-ops-limit=4294967295") -endif() - -target_include_directories(assigner_tests PRIVATE - $) - -target_link_libraries( - assigner_tests - PRIVATE - ${PROJECT_NAME} - GTest::gtest_main - Boost::log -) -gtest_discover_tests(assigner_tests PROPERTIES LABELS ASSIGNER) - -add_custom_target(run_assigner_tests COMMAND ${CMAKE_CTEST_COMMAND} -L ASSIGNER --output-on-failure WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) -add_dependencies(run_assigner_tests assigner_tests) diff --git a/evm-assigner/lib/assigner/test/assigner_test.cpp b/evm-assigner/lib/assigner/test/assigner_test.cpp deleted file mode 100644 index 2f0bc39ec0..0000000000 --- a/evm-assigner/lib/assigner/test/assigner_test.cpp +++ /dev/null @@ -1,350 +0,0 @@ -#include -#include - -#include -#include - -#include -#include -#include - -#include - -class AssignerTest : public testing::Test -{ -public: - using BlueprintFieldType = typename nil::crypto3::algebra::curves::pallas::base_field_type; - using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; - static void SetUpTestSuite() - { - const std::size_t WitnessColumns = 65; - const std::size_t PublicInputColumns = 1; - - const std::size_t ConstantColumns = 5; - const std::size_t SelectorColumns = 30; - - nil::crypto3::zk::snark::plonk_table_description desc( - WitnessColumns, PublicInputColumns, ConstantColumns, SelectorColumns); - - assignments.insert(std::pair>(nil::evm_assigner::zkevm_circuit::BYTECODE, nil::blueprint::assignment(desc))); - assignments.insert(std::pair>(nil::evm_assigner::zkevm_circuit::RW, nil::blueprint::assignment(desc))); - - assigner_ptr = - std::make_shared>(assignments); - - const uint8_t input[] = "Hello World!"; - const evmc_uint256be value = {{1, 0}}; - const evmc_address sender_addr = {{0, 1, 2}}; - const evmc_address recipient_addr = {{1, 1, 2}}; - const evmc_address code_addr = {{2, 1, 2}}; - const int64_t gas = 200000; - struct evmc_tx_context tx_context = { - .block_number = 42, - .block_timestamp = 66, - .block_gas_limit = gas * 2, - }; - - msg = evmc_message { - .kind = EVMC_CALL, - .flags = 0, - .depth = 0, - .gas = gas, - .recipient = recipient_addr, - .sender = sender_addr, - .input_data = input, - .input_size = sizeof(input), - .value = value, - .create2_salt = {0}, - .code_address = code_addr - }; - - - host_interface = &evmc::Host::get_interface(); - ctx = vm_host_create_context(tx_context, assigner_ptr); - } - - static void TearDownTestSuite() - { - assigner_ptr.reset(); - vm_host_destroy_context(ctx); - } - - static std::shared_ptr> assigner_ptr; - static std::unordered_map> assignments; - static const struct evmc_host_interface* host_interface; - static struct evmc_host_context* ctx; - static evmc_revision rev; - static struct evmc_message msg; -}; - -std::shared_ptr> - AssignerTest::assigner_ptr; -std::unordered_map> - AssignerTest::assignments; -const struct evmc_host_interface* AssignerTest::host_interface; -struct evmc_host_context* AssignerTest::ctx; -evmc_revision AssignerTest::rev = {}; -struct evmc_message AssignerTest::msg; - -inline void check_eq(const uint8_t* l, const uint8_t* r, size_t len) { - for (int i = 0; i < len; i++) { - EXPECT_EQ(l[i], r[i]); - } -} - -inline void rw_circuit_check(const std::unordered_map> &assignments, - uint32_t start_row_index, - uint8_t operation_type, - uint32_t call_id, - const typename AssignerTest::BlueprintFieldType::value_type& address, - const typename AssignerTest::BlueprintFieldType::value_type& stoage_key_hi, - const typename AssignerTest::BlueprintFieldType::value_type& stoage_key_lo, - uint32_t rw_id, - bool is_write, - const typename AssignerTest::BlueprintFieldType::value_type& value_hi, - const typename AssignerTest::BlueprintFieldType::value_type& value_lo) { - auto it = assignments.find(nil::evm_assigner::zkevm_circuit::RW); - if (it == assignments.end()) { - return; - } - auto& rw_table = it->second; - // OP_TYPE - EXPECT_EQ(rw_table.witness(0, start_row_index), operation_type); - // CALL ID - EXPECT_EQ(rw_table.witness(1, start_row_index), call_id); - // address (stack size) - EXPECT_EQ(rw_table.witness(2, start_row_index), address); - // storage key hi - EXPECT_EQ(rw_table.witness(3, start_row_index), stoage_key_hi); - // storage key lo - EXPECT_EQ(rw_table.witness(4, start_row_index), stoage_key_lo); - // RW ID - EXPECT_EQ(rw_table.witness(6, start_row_index), rw_id); - // is write - EXPECT_EQ(rw_table.witness(7, start_row_index), (is_write ? 1 : 0)); - // value hi - EXPECT_EQ(rw_table.witness(8, start_row_index), value_hi); - // value lo - EXPECT_EQ(rw_table.witness(9, start_row_index), value_lo); -} - -inline std::string bytes_to_string(const uint8_t *data, int len) -{ - std::stringstream ss; - ss << std::hex; - - for (int i(0); i < len; ++i) { - ss << std::setw(2) << std::setfill('0') << (int)data[i]; - } - - // Cut all preceding zeros - std::string res = ss.str(); - while (res[0] == '0') res.erase(0,1); - - return res; -} - -TEST_F(AssignerTest, conversions_uint256be_to_zkevm_word) -{ - evmc::uint256be uint256be_number; - uint256be_number.bytes[2] = 10; // Some big number, 10 << 128 - // conversion to zkevm_word - auto tmp = nil::evm_assigner::zkevm_word(uint256be_number); - // compare string representations of the data - ASSERT_EQ(bytes_to_string(uint256be_number.bytes, 32), intx::to_string(tmp.get_value(), 16)); - // conversion back to uint256be - evmc::uint256be uint256be_result = tmp.to_uint256be(); - // check if same - check_eq(uint256be_number.bytes, uint256be_result.bytes, 32); -} - -TEST_F(AssignerTest, conversions_address_to_zkevm_word) -{ - evmc::address address; - address.bytes[19] = 10; - // conversion to zkevm_word - auto tmp = nil::evm_assigner::zkevm_word(address); - // compare string representations of the data - ASSERT_EQ(bytes_to_string(address.bytes, 20), intx::to_string(tmp.get_value(), 16)); - // conversion back to address - evmc::address address_result = tmp.to_address(); - // check if same - check_eq(address.bytes, address_result.bytes, 20); - // Check conversion to field - std::ostringstream ss; - ss << std::hex << tmp.to_field_as_address(); - ASSERT_EQ(bytes_to_string(address.bytes, 20), ss.str()); -} - -TEST_F(AssignerTest, conversions_hash_to_zkevm_word) -{ - ethash::hash256 hash {.bytes = {0}}; - hash.bytes[2] = 10; - // conversion to zkevm_word - auto tmp = nil::evm_assigner::zkevm_word(hash); - // compare string representations of the data - ASSERT_EQ(bytes_to_string(hash.bytes, 32), intx::to_string(tmp.get_value(), 16)); - // conversion back to address - ethash::hash256 hash_result = tmp.to_hash(); - // check if same - check_eq(hash.bytes, hash_result.bytes, 32); -} - -TEST_F(AssignerTest, conversions_uint64_to_zkevm_word) -{ - uint64_t number = std::numeric_limits::max(); - // conversion to zkevm_word - auto tmp = nil::evm_assigner::zkevm_word(number); - // compare string representations of the data - std::ostringstream ss; - ss << std::hex << number; - ASSERT_EQ(ss.str(), intx::to_string(tmp.get_value(), 16)); - // conversion back to address - auto number_result = tmp.to_uint64(); - // check if same - EXPECT_EQ(number_result, number); -} - -TEST_F(AssignerTest, conversions_load_store) -{ - uint32_t number = std::numeric_limits::max(); - // initialize from byte array - auto tmp = nil::evm_assigner::zkevm_word( - reinterpret_cast(&number), sizeof(number)); - - // compare string representations of the data - std::ostringstream ss; - ss << std::hex << number; - ASSERT_EQ(ss.str(), intx::to_string(tmp.get_value(), 16)); - // check store result - uint32_t restored_number = 0; - tmp.store(reinterpret_cast(&restored_number)); - // check if same - EXPECT_EQ(restored_number, number); -} - -TEST_F(AssignerTest, load_partial_zkevm_word) -{ - uint64_t number = std::numeric_limits::max(); - std::array bytes; - for (unsigned i = 0; i < bytes.size(); ++i) { - bytes[i] = static_cast(bytes.size() + i); - } - - nil::evm_assigner::zkevm_word tmp; - constexpr size_t word_size = 8; - constexpr auto num_full_words = bytes.size() / word_size; - constexpr auto num_partial_bytes = bytes.size() % word_size; - auto data = bytes.data(); - - // Load top partial word. - if constexpr (num_partial_bytes != 0) - { - tmp.load_partial_data(data, num_partial_bytes, num_full_words); - data += num_partial_bytes; - } - - // Load full words. - for (size_t i = 0; i < num_full_words; ++i) - { - tmp.load_partial_data(data, word_size, num_full_words - 1 - i); - data += word_size; - } - ASSERT_EQ(bytes_to_string(bytes.data(), bytes.size()), intx::to_string(tmp.get_value(), 16)); -} - -TEST_F(AssignerTest, field_bitwise_and) { - using intx::operator""_u256; - auto bits_set_zkevm_word = [](std::initializer_list bits) { - nil::evm_assigner::zkevm_word tmp(0); - for (unsigned bit_number : bits) - { - tmp = tmp + nil::evm_assigner::zkevm_word(1_u256 << bit_number); - } - return tmp; - }; - auto bits_set_integral = [](std::initializer_list bits) { - BlueprintFieldType::integral_type tmp = 0; - for (unsigned bit_number : bits) - { - boost::multiprecision::bit_set(tmp, bit_number); - } - return tmp; - }; - auto bits_test_integral = [&](BlueprintFieldType::integral_type val, - std::unordered_set bits) { - for (unsigned bit_number = 0; bit_number < BlueprintFieldType::number_bits; ++bit_number) - { - EXPECT_EQ(boost::multiprecision::bit_test(val, bit_number), bits.contains(bit_number)); - } - }; - std::initializer_list init_bits = {1, 12, 42, 77, 136, 201, 222}; - nil::evm_assigner::zkevm_word init = bits_set_zkevm_word(init_bits); - - std::initializer_list conjunction_bits = {4, 12, 77, 165, 222}; - BlueprintFieldType::integral_type op = bits_set_integral(conjunction_bits); - - BlueprintFieldType::integral_type res = init & op; - - std::unordered_set res_bit_set; - std::set_intersection(init_bits.begin(), init_bits.end(), conjunction_bits.begin(), - conjunction_bits.end(), std::inserter(res_bit_set, res_bit_set.begin())); - bits_test_integral(res, res_bit_set); -} - -TEST_F(AssignerTest, w_hi_lo) -{ - using intx::operator""_u256; - intx::uint256 hi = 0x12345678901234567890_u256; - intx::uint256 lo = 0x98765432109876543210_u256; - nil::evm_assigner::zkevm_word tmp((hi << 128) + lo); - std::ostringstream original_numbers; - original_numbers << intx::to_string(hi, 16) << "|" << intx::to_string(lo, 16); - std::ostringstream result_numbers; - result_numbers << std::hex << tmp.w_hi() << "|" << tmp.w_lo(); - EXPECT_EQ(original_numbers.str(), result_numbers.str()); -} - -TEST_F(AssignerTest, set_val) -{ - using intx::operator""_u256; - nil::evm_assigner::zkevm_word tmp; - tmp.set_val(0x1, 0); - tmp.set_val(0x12, 1); - tmp.set_val(0x123, 2); - tmp.set_val(0x1234, 3); - intx::uint256 expected_val = - (0x1234_u256 << 64 * 3) + (0x123_u256 << 64 * 2) + (0x12_u256 << 64) + 0x1; - ASSERT_EQ(tmp.get_value(), expected_val); -} - -TEST_F(AssignerTest, mul) { - - std::vector code = { - evmone::OP_PUSH1, - 4, - evmone::OP_PUSH1, - 8, - evmone::OP_MUL, - }; - - nil::evm_assigner::evaluate(host_interface, ctx, rev, &msg, code.data(), code.size(), assigner_ptr); - - uint32_t start_row_index = 0; - uint32_t call_id = 0; - //PUSH - rw_circuit_check(assignments, start_row_index, 1/*STACK_OP*/, call_id, 0/*address in stack*/, 0/*storage key hi*/, 0/*storage key lo*/, - 0/*trace size*/, true/*is_write*/, 0/*value_hi*/, 4/*value_lo*/); - //MUL - rw_circuit_check(assignments, start_row_index + 1, 1/*STACK_OP*/, call_id, 0/*address in stack*/, 0/*storage key hi*/, 0/*storage key lo*/, - 2/*trace size*/, false/*is_write*/, 0/*value_hi*/, 4/*value_lo*/); - //MUL - rw_circuit_check(assignments, start_row_index + 2, 1/*STACK_OP*/, call_id, 0/*address in stack*/, 0/*storage key hi*/, 0/*storage key lo*/, - 4/*trace size*/, true/*is_write*/, 0/*value_hi*/, 32/*value_lo*/); - //PUSH - rw_circuit_check(assignments, start_row_index + 3, 1/*STACK_OP*/, call_id, 1/*address in stack*/, 0/*storage key hi*/, 0/*storage key lo*/, - 1/*trace size*/, true/*is_write*/, 0/*value_hi*/, 8/*value_lo*/); - //MUL - rw_circuit_check(assignments, start_row_index + 4, 1/*STACK_OP*/, call_id, 1/*address in stack*/, 0/*storage key hi*/, 0/*storage key lo*/, - 3/*trace size*/, false/*is_write*/, 0/*value_hi*/, 8/*value_lo*/); -} diff --git a/flake.nix b/flake.nix index 0cc747f9a1..08ec737c75 100644 --- a/flake.nix +++ b/flake.nix @@ -34,17 +34,29 @@ enableDebug = true; runTests = true; }); - crypto3-sanitize = (pkgs.callPackage ./crypto3.nix { - enableDebug = true; + crypto3-clang-sanitize = (pkgs.callPackage ./crypto3.nix { + stdenv = pkgs.llvmPackages_19.stdenv; runTests = true; + enableDebug = false; sanitize = true; }); + crypto3-clang-bench = (pkgs.callPackage ./crypto3.nix { + runTests = true; + enableDebug = false; + benchmarkTests = true; + }); crypto3-clang-debug = (pkgs.callPackage ./crypto3.nix { stdenv = pkgs.llvmPackages_19.stdenv; - runTests = false; + runTests = true; + enableDebug = true; + }); + crypto3-clang-debug-tests = (pkgs.callPackage ./crypto3.nix { + stdenv = pkgs.llvmPackages_19.stdenv; + runTests = true; enableDebug = true; }); + parallel-crypto3 = (pkgs.callPackage ./parallel-crypto3.nix { runTests = false; enableDebug = false; @@ -53,6 +65,11 @@ runTests = true; enableDebug = false; }); + parallel-crypto3-clang-bench = (pkgs.callPackage ./parallel-crypto3.nix { + runTests = true; + enableDebug = false; + benchmarkTests = true; + }); parallel-crypto3-debug-tests = (pkgs.callPackage ./parallel-crypto3.nix { enableDebug = true; runTests = true; @@ -84,15 +101,24 @@ debug-tools = (pkgs.callPackage ./debug-tools.nix { }); + develop = (pkgs.callPackage ./proof-producer.nix { + enableDebug = true; + runTests = true; + sanitize = true; + crypto3_tests = true; + parallel_crypto3_tets = true; + crypto3_bechmarks = true; + parallel_crypto3_bechmarks = true; + }); # The "all" package will build all packages. Convenient for CI, # so that "nix build" will check that all packages are correct. # The packages that have no changes will not be rebuilt, and instead # fetched from the cache. all = pkgs.symlinkJoin { name = "all"; - paths = [ crypto3 proof-producer]; + paths = [ crypto3 parallel-crypto3 proof-producer]; }; - default = all; + default = develop; }; checks = rec { @@ -100,6 +126,11 @@ runTests = true; enableDebug = false; }); + crypto3-gcc-bench = (pkgs.callPackage ./crypto3.nix { + runTests = true; + enableDebug = false; + benchmarkTests = true; + }); crypto3-clang = (pkgs.callPackage ./crypto3.nix { stdenv = pkgs.llvmPackages_19.stdenv; runTests = true; @@ -111,16 +142,38 @@ enableDebug = false; sanitize = true; }); + crypto3-clang-bench = (pkgs.callPackage ./crypto3.nix { + stdenv = pkgs.llvmPackages_19.stdenv; + runTests = true; + enableDebug = false; + benchmarkTests = true; + }); parallel-crypto3-gcc = (pkgs.callPackage ./parallel-crypto3.nix { runTests = true; enableDebug = false; }); + parallel-crypto3-gcc-bench = (pkgs.callPackage ./parallel-crypto3.nix { + runTests = true; + enableDebug = false; + benchmarkTests = true; + }); parallel-crypto3-clang = (pkgs.callPackage ./parallel-crypto3.nix { stdenv = pkgs.llvmPackages_19.stdenv; runTests = true; enableDebug = false; }); + parallel-crypto3-clang-sanitize = (pkgs.callPackage ./parallel-crypto3.nix { + stdenv = pkgs.llvmPackages_19.stdenv; + runTests = true; + enableDebug = false; + }); + parallel-crypto3-clang-bench = (pkgs.callPackage ./parallel-crypto3.nix { + stdenv = pkgs.llvmPackages_19.stdenv; + runTests = true; + enableDebug = false; + benchmarkTests = true; + }); proof-producer-gcc = (pkgs.callPackage ./proof-producer.nix { runTests = true; @@ -131,14 +184,20 @@ runTests = true; enableDebug = false; }); + proof-producer-clang-sanitize = (pkgs.callPackage ./proof-producer.nix { + stdenv = pkgs.llvmPackages_19.stdenv; + runTests = true; + enableDebug = false; + sanitize = true; + }); all-clang = pkgs.symlinkJoin { name = "all"; paths = [ crypto3-clang parallel-crypto3-clang proof-producer-clang ]; }; - all-sanitizers = pkgs.symlinkJoin { + all-clang-sanitize = pkgs.symlinkJoin { name = "all"; - paths = [ crypto3-clang-sanitize ]; + paths = [ crypto3-clang-sanitize parallel-crypto3-clang-sanitize proof-producer-clang-sanitize ]; }; all-gcc = pkgs.symlinkJoin { name = "all"; diff --git a/parallel-crypto3.nix b/parallel-crypto3.nix index 2f6f163a69..0e26f4ae6e 100644 --- a/parallel-crypto3.nix +++ b/parallel-crypto3.nix @@ -6,10 +6,13 @@ boost, gdb, lldb, + mold, cmake_modules, enableDebugging, enableDebug ? false, runTests ? false, + sanitize? false, + benchmarkTests ? false, }: let inherit (lib) optional; @@ -31,14 +34,22 @@ in stdenv.mkDerivation { cmakeFlags = [ (if runTests then "-DBUILD_PARALLEL_CRYPTO3_TESTS=TRUE" else "") - (if enableDebug then "-DCMAKE_BUILD_TYPE=Debug" else "-DCMAKE_BUILD_TYPE=Release") + (if sanitize then "-DSANITIZE=ON" else "-DSANITIZE=OFF") + (if benchmarkTests then "-DENABLE_BENCHMARKS=ON" else "-DENABLE_BENCHMARKS=OFF") "-DPARALLEL_CRYPTO3_ENABLE=TRUE" ]; + cmakeBuildType = if enableDebug then "Debug" else "Release"; doCheck = runTests; # tests are inside parallel-crypto3-tests derivation checkPhase = '' - cd parallel-crypto3 && ctest --verbose --output-on-failure -R && cd .. + # JUNIT file without explicit file name is generated after the name of the master test suite inside `CMAKE_CURRENT_SOURCE_DIR` + export BOOST_TEST_LOGGER=JUNIT:HRF + cd parallel-crypto3 + ctest --verbose --output-on-failure -R + cd .. + mkdir -p ${placeholder "out"}/test-logs + find .. -type f -name '*_test.xml' -exec cp {} ${placeholder "out"}/test-logs \; ''; shellHook = '' diff --git a/parallel-crypto3/CMakeLists.txt b/parallel-crypto3/CMakeLists.txt index 2837852927..481878b48b 100644 --- a/parallel-crypto3/CMakeLists.txt +++ b/parallel-crypto3/CMakeLists.txt @@ -31,6 +31,9 @@ add_subdirectory(libs/parallelization-utils) add_subdirectory(libs/parallel-containers) add_subdirectory(libs/parallel-math) add_subdirectory(libs/parallel-zk) +if(ENABLE_BENCHMARKS) + add_subdirectory(benchmarks) +endif() add_library(${PROJECT_NAME}_all INTERFACE) add_library(${PROJECT_NAME}::all ALIAS ${PROJECT_NAME}_all) diff --git a/parallel-crypto3/benchmarks/CMakeLists.txt b/parallel-crypto3/benchmarks/CMakeLists.txt new file mode 100644 index 0000000000..6d7ed4fa39 --- /dev/null +++ b/parallel-crypto3/benchmarks/CMakeLists.txt @@ -0,0 +1,58 @@ +#---------------------------------------------------------------------------# +# Copyright (c) 2018-2020 Mikhail Komarov +# +# Distributed under the Boost Software License, Version 1.0 +# See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt +#---------------------------------------------------------------------------# + +include(CMTest) + +find_package(Boost REQUIRED COMPONENTS + timer + unit_test_framework +) + +macro(define_bench_test name) + set(test_name "parallel_crypto3_${name}_bench") + + set(additional_args "") + if(ENABLE_JUNIT_TEST_OUTPUT) + set(TEST_RESULTS_DIR "${CMAKE_CURRENT_BINARY_DIR}/junit_results") + set(TEST_LOGS_DIR "${TEST_RESULTS_DIR}/logs") + file(MAKE_DIRECTORY ${TEST_LOGS_DIR}) + + set(additional_args "--log_format=JUNIT" + "--log_sink=${TEST_LOGS_DIR}/${test_name}.xml") + endif() + + cm_test(NAME ${test_name} SOURCES ${name}.cpp ARGS ${additional_args}) + + target_include_directories(${test_name} PRIVATE + "$" + "$" + + ${Boost_INCLUDE_DIRS}) + + set_target_properties(${test_name} PROPERTIES CXX_STANDARD 20) + target_precompile_headers(${test_name} REUSE_FROM crypto3_precompiled_headers) +endmacro() + +cm_test_link_libraries( + crypto3::algebra + crypto3::math + crypto3::multiprecision + crypto3::random + Boost::unit_test_framework + Boost::timer +) +set_target_properties(_cm_internal_tests--parallel-crypto3-benchmarks PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests--parallel-crypto3-benchmarks REUSE_FROM crypto3_precompiled_headers) + +set(TESTS_NAMES + "polynomial_dfs_benchmark" +) + +foreach(TEST_NAME ${TESTS_NAMES}) + define_bench_test(${TEST_NAME}) +endforeach() diff --git a/parallel-crypto3/libs/parallel-math/test/benchmarks/polynomial_dfs_benchmark.cpp b/parallel-crypto3/benchmarks/polynomial_dfs_benchmark.cpp similarity index 98% rename from parallel-crypto3/libs/parallel-math/test/benchmarks/polynomial_dfs_benchmark.cpp rename to parallel-crypto3/benchmarks/polynomial_dfs_benchmark.cpp index 96fef13cf5..4abf14c727 100644 --- a/parallel-crypto3/libs/parallel-math/test/benchmarks/polynomial_dfs_benchmark.cpp +++ b/parallel-crypto3/benchmarks/polynomial_dfs_benchmark.cpp @@ -22,7 +22,7 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#define BOOST_TEST_MODULE polynomial_dfs_benchmark_test +#define BOOST_TEST_MODULE polynomial_dfs_benchmark #include #include @@ -153,7 +153,7 @@ BENCHMARK_AUTO_TEST_CASE(dummy_test, 100) { STOP_TIMER("dummy") } -BENCHMARK_AUTO_TEST_CASE(polynomial_product_test, 20) { +BENCHMARK_AUTO_TEST_CASE(polynomial_product_test, 10) { using Field = nil::crypto3::algebra::fields::bls12_fr<381>; std::vector> random_polynomials; @@ -174,7 +174,7 @@ BENCHMARK_AUTO_TEST_CASE(polynomial_product_test, 20) { STOP_TIMER("polynomial_product") } -BENCHMARK_AUTO_TEST_CASE(polynomial_sum_real_test, 20) { +BENCHMARK_AUTO_TEST_CASE(polynomial_sum_real_test, 10) { using Field = nil::crypto3::algebra::fields::bls12_fr<381>; std::vector> random_polynomials; diff --git a/parallel-crypto3/libs/parallel-containers/CMakeLists.txt b/parallel-crypto3/libs/parallel-containers/CMakeLists.txt index 8313bde9dc..a3893bdf58 100644 --- a/parallel-crypto3/libs/parallel-containers/CMakeLists.txt +++ b/parallel-crypto3/libs/parallel-containers/CMakeLists.txt @@ -65,9 +65,7 @@ target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE ${CMAKE_WORKSPACE_NAME}::core crypto3::algebra - crypto3::hash - - ${Boost_LIBRARIES}) + crypto3::hash) target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE "$" @@ -75,9 +73,7 @@ target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTER ${Boost_INCLUDE_DIRS}) -if (BUILD_TESTS) - add_subdirectory(test) -endif () +add_tests(test) if (BUILD_EXAMPLES) add_subdirectory(example) diff --git a/parallel-crypto3/libs/parallel-containers/example/CMakeLists.txt b/parallel-crypto3/libs/parallel-containers/example/CMakeLists.txt index 346575486f..1c949653b1 100644 --- a/parallel-crypto3/libs/parallel-containers/example/CMakeLists.txt +++ b/parallel-crypto3/libs/parallel-containers/example/CMakeLists.txt @@ -35,9 +35,9 @@ macro(define_containers_example example) add_executable(${target_name} ${example}.cpp) target_link_libraries(${target_name} PRIVATE ${CMAKE_WORKSPACE_NAME}::algebra - ${CMAKE_WORKSPACE_NAME}::hash - ${Boost_LIBRARIES}) - set_target_properties(${target_name} PROPERTIES CXX_STANDARD 17) + ${CMAKE_WORKSPACE_NAME}::hash) + + set_target_properties(${target_name} PROPERTIES CXX_STANDARD 20) endmacro() set(EXAMPLES_NAMES diff --git a/parallel-crypto3/libs/parallel-containers/example/merkle/merkle.cpp b/parallel-crypto3/libs/parallel-containers/example/merkle/merkle.cpp index cc7e60037c..cba6721707 100644 --- a/parallel-crypto3/libs/parallel-containers/example/merkle/merkle.cpp +++ b/parallel-crypto3/libs/parallel-containers/example/merkle/merkle.cpp @@ -24,7 +24,6 @@ //---------------------------------------------------------------------------// #include -#include #include #include @@ -64,4 +63,4 @@ int main() { std::cout << "Is leaf right was in tree in position 1: "; std::cout << std::boolalpha << simple_binary_proof_leaf_1.validate(right) << std::endl; -} \ No newline at end of file +} diff --git a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/accumulation_vector.hpp b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/accumulation_vector.hpp index f2d4832049..2d28ea08eb 100644 --- a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/accumulation_vector.hpp +++ b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/accumulation_vector.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_ACCUMULATION_VECTOR_HPP -#define CRYPTO3_ZK_SNARK_ACCUMULATION_VECTOR_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_ACCUMULATION_VECTOR_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_ACCUMULATION_VECTOR_HPP + +#ifdef CRYPTO3_ZK_SNARK_ACCUMULATION_VECTOR_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/node.hpp b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/node.hpp index 66940c9f7b..52383f74a2 100644 --- a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/node.hpp +++ b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/node.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MERKLE_TREE_NODE_HPP -#define CRYPTO3_MERKLE_TREE_NODE_HPP +#ifndef PARALLEL_CRYPTO3_MERKLE_TREE_NODE_HPP +#define PARALLEL_CRYPTO3_MERKLE_TREE_NODE_HPP + +#ifdef CRYPTO3_MERKLE_TREE_NODE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/proof.hpp b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/proof.hpp index 9fa25623c4..c0f57be849 100644 --- a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/proof.hpp +++ b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/proof.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MERKLE_PROOF_HPP -#define CRYPTO3_MERKLE_PROOF_HPP +#ifndef PARALLEL_CRYPTO3_MERKLE_PROOF_HPP +#define PARALLEL_CRYPTO3_MERKLE_PROOF_HPP + +#ifdef CRYPTO3_MERKLE_PROOF_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/tree.hpp b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/tree.hpp index cc6933af1c..45fc13ba8d 100644 --- a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/tree.hpp +++ b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/merkle/tree.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MERKLE_TREE_HPP -#define CRYPTO3_MERKLE_TREE_HPP +#ifndef PARALLEL_CRYPTO3_MERKLE_TREE_HPP +#define PARALLEL_CRYPTO3_MERKLE_TREE_HPP + +#ifdef CRYPTO3_MERKLE_TREE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/sparse_vector.hpp b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/sparse_vector.hpp index c074e3b263..6a264d6422 100644 --- a/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/sparse_vector.hpp +++ b/parallel-crypto3/libs/parallel-containers/include/nil/crypto3/container/sparse_vector.hpp @@ -25,8 +25,12 @@ // @file Declaration of interfaces for a sparse vector. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SPARSE_VECTOR_HPP -#define CRYPTO3_ZK_SPARSE_VECTOR_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SPARSE_VECTOR_HPP +#define PARALLEL_CRYPTO3_ZK_SPARSE_VECTOR_HPP + +#ifdef CRYPTO3_ZK_SPARSE_VECTOR_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-containers/test/CMakeLists.txt b/parallel-crypto3/libs/parallel-containers/test/CMakeLists.txt index 6451bb7284..259cfda1c4 100644 --- a/parallel-crypto3/libs/parallel-containers/test/CMakeLists.txt +++ b/parallel-crypto3/libs/parallel-containers/test/CMakeLists.txt @@ -26,11 +26,13 @@ include(CMTest) cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} - crypto3::algebra crypto3::hash - - Boost::random) + Boost::random + Boost::unit_test_framework +) +set_target_properties(_cm_internal_tests-actor-containers-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-actor-containers-test REUSE_FROM crypto3_precompiled_headers) macro(define_storage_test test) get_filename_component(test_name ${test} NAME) @@ -60,7 +62,7 @@ macro(define_storage_test test) ${Boost_INCLUDE_DIRS}) - set_target_properties(${target_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${target_name} PROPERTIES CXX_STANDARD 20) get_target_property(target_type Boost::unit_test_framework TYPE) if(target_type STREQUAL "SHARED_LIB") @@ -69,12 +71,12 @@ macro(define_storage_test test) endif() - if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(${target_name} PRIVATE "-fconstexpr-steps=2147483647" "-ftemplate-backtrace-limit=0") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") target_compile_options(${target_name} PRIVATE "-fconstexpr-ops-limit=4294967295" "-ftemplate-backtrace-limit=0") endif() - + target_precompile_headers(${target_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(TESTS_NAMES diff --git a/parallel-crypto3/libs/parallel-containers/test/merkle/merkle.cpp b/parallel-crypto3/libs/parallel-containers/test/merkle/merkle.cpp index fb0ec73caf..3c66946c19 100644 --- a/parallel-crypto3/libs/parallel-containers/test/merkle/merkle.cpp +++ b/parallel-crypto3/libs/parallel-containers/test/merkle/merkle.cpp @@ -30,10 +30,7 @@ #include #include #include -#include -#include #include -#include #include #include @@ -285,19 +282,17 @@ BOOST_AUTO_TEST_CASE(merkletree_construct_test_2) { BOOST_AUTO_TEST_CASE(merkletree_validate_test_1) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}}; testing_validate_template, 2>(v); - testing_validate_template(v); - testing_validate_template, 2>(v); BOOST_STATIC_ASSERT_MSG(algebra::is_field_element::value, "Expecting Poseidon to consume field elements"); std::vector> v_field = { - {0x0_cppui_modular255}, - {0x1_cppui_modular255}, - {0x2_cppui_modular255}, - {0x3_cppui_modular255}, - {0x4_cppui_modular255}, - {0x5_cppui_modular255}, - {0x6_cppui_modular255}, - {0x7_cppui_modular255} + {0x0_big_uint255}, + {0x1_big_uint255}, + {0x2_big_uint255}, + {0x3_big_uint255}, + {0x4_big_uint255}, + {0x5_big_uint255}, + {0x6_big_uint255}, + {0x7_big_uint255} }; testing_validate_template(v_field); testing_validate_template(v_field); @@ -316,8 +311,6 @@ BOOST_AUTO_TEST_CASE(merkletree_validate_test_1) { std::size_t leaf_number = 8; testing_validate_template_random_data, 2, std::uint8_t, 1>(leaf_number); - testing_validate_template_random_data(leaf_number); - testing_validate_template_random_data, 2, std::uint8_t, 1>(leaf_number); testing_validate_template_random_data(leaf_number); testing_validate_template_random_data(leaf_number); } @@ -325,51 +318,23 @@ BOOST_AUTO_TEST_CASE(merkletree_validate_test_1) { BOOST_AUTO_TEST_CASE(merkletree_validate_test_2) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}, {'8'}}; testing_validate_template, 3>(v); - testing_validate_template(v); - testing_validate_template, 3>(v); std::size_t leaf_number = 9; testing_validate_template_random_data, 3, std::uint8_t, 1>(leaf_number); - testing_validate_template_random_data(leaf_number); - testing_validate_template_random_data, 3, std::uint8_t, 1>(leaf_number); } -BOOST_AUTO_TEST_CASE(merkletree_validate_test_3) { - using hash_type = hashes::pedersen< - hashes::find_group_hash_default_params, hashes::sha2<256>, - algebra::curves::jubjub::template g1_type>; - std::size_t leaf_number = 8; - testing_validate_template_random_data(leaf_number); -} - -BOOST_AUTO_TEST_CASE(merkletree_validate_test_4) { - using hash_type = hashes::pedersen< - hashes::find_group_hash_default_params, hashes::sha2<256>, - algebra::curves::jubjub::template g1_type>; - testing_validate_template_random_data_compressed_proofs(8); - testing_validate_template_random_data_compressed_proofs(9); - testing_validate_template_random_data_compressed_proofs(16); -} BOOST_AUTO_TEST_CASE(merkletree_validate_test_5) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}, {'8'}}; testing_validate_template_compressed_proofs, 3>(v); - testing_validate_template_compressed_proofs(v); - testing_validate_template_compressed_proofs, 3>(v); std::size_t leaf_number = 16; testing_validate_template_random_data_compressed_proofs, 4, std::uint8_t, 1>(leaf_number); - testing_validate_template_random_data_compressed_proofs(leaf_number); - testing_validate_template_random_data_compressed_proofs, 4, std::uint8_t, 1>(leaf_number); } BOOST_AUTO_TEST_CASE(merkletree_hash_test_1) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}}; testing_hash_template, 2>(v, "3b828c4f4b48c5d4cb5562a474ec9e2fd8d5546fae40e90732ef635892e42720"); - testing_hash_template(v, "11ee8b50825ce6f816a1ae06d4aa0045"); - testing_hash_template, 2>(v, "0ed2a2145cae554ca57f08420d6cb58629ca1e89dc92f819c6c1d13d"); testing_hash_template, 2>(v, "568ff5eb286f51b8a3e8de4e53aa8daed44594a246deebbde119ea2eb27acd6b"); testing_hash_template, 2>(v, "1a0ca31dd9e0b27afdf77021dc50023cdd814eb53ede16e8c5c322a0bcb6bd7d26a0404e5af53971e1566c1649bb9686905cdedfa9a358023065e423522d4372"); @@ -390,14 +355,12 @@ BOOST_AUTO_TEST_CASE(merkletree_hash_test_1) { wrappers.emplace_back(inner_containers); } merkle_tree tree = make_merkle_tree(wrappers.begin(), wrappers.end()); - BOOST_CHECK(tree.root() == 0x6E7641F1EAE17C0DA8227840EFEA6E1D17FB5EBA600D9DC34F314D5400E5BF3_cppui_modular255); + BOOST_CHECK(tree.root() == 0x6E7641F1EAE17C0DA8227840EFEA6E1D17FB5EBA600D9DC34F314D5400E5BF3_big_uint255); } BOOST_AUTO_TEST_CASE(merkletree_hash_test_2) { std::vector> v = {{'0'}, {'1'}, {'2'}, {'3'}, {'4'}, {'5'}, {'6'}, {'7'}, {'8'}}; testing_hash_template, 3>(v, "6831d4d32538bedaa7a51970ac10474d5884701c840781f0a434e5b6868d4b73"); - testing_hash_template(v, "0733c4cd580b1523cfbb9751f42e9420"); - testing_hash_template, 3>(v, "d9d0ff26d10aaac2882c08eb2b55e78690c949d1a73b1cfc0eb322ee"); } BOOST_AUTO_TEST_SUITE_END() diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/calculate_domain_set.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/calculate_domain_set.hpp index 9720109cd4..3512b0b01a 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/calculate_domain_set.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/calculate_domain_set.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_CALCULATE_DOMAIN_SET_HPP -#define CRYPTO3_MATH_CALCULATE_DOMAIN_SET_HPP +#ifndef PARALLEL_CRYPTO3_MATH_CALCULATE_DOMAIN_SET_HPP +#define PARALLEL_CRYPTO3_MATH_CALCULATE_DOMAIN_SET_HPP + +#ifdef CRYPTO3_MATH_CALCULATE_DOMAIN_SET_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp index e18ff409c7..c016ab4105 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/make_evaluation_domain.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_MAKE_EVALUATION_DOMAIN_HPP -#define CRYPTO3_MATH_MAKE_EVALUATION_DOMAIN_HPP +#ifndef PARALLEL_CRYPTO3_MATH_MAKE_EVALUATION_DOMAIN_HPP +#define PARALLEL_CRYPTO3_MATH_MAKE_EVALUATION_DOMAIN_HPP + +#ifdef CRYPTO3_MATH_MAKE_EVALUATION_DOMAIN_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/unity_root.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/unity_root.hpp index c7f58c847a..c0b58598cf 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/unity_root.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/algorithms/unity_root.hpp @@ -23,14 +23,17 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_UNITY_ROOT_HPP -#define CRYPTO3_MATH_UNITY_ROOT_HPP +#ifndef PARALLEL_CRYPTO3_MATH_UNITY_ROOT_HPP +#define PARALLEL_CRYPTO3_MATH_UNITY_ROOT_HPP + +#ifdef CRYPTO3_MATH_UNITY_ROOT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include #include -#include #include #include @@ -88,20 +91,16 @@ namespace nil { * * @return a root of unity. */ - template - boost::multiprecision::number - unity_root(uint32_t m, const boost::multiprecision::number &modulo) { - using namespace boost::multiprecision; - - number M(m); + template + nil::crypto3::multiprecision::big_uint + unity_root(uint32_t m, const nil::crypto3::multiprecision::big_uint &modulo) { + nil::crypto3::multiprecision::big_uint M(m); - if ((modulo - number(1) % M) % M != 0) { + if ((modulo - nil::crypto3::multiprecision::big_uint(1) % M) % M != 0) { return {}; } - number>, ExpressionTemplates> - gen(find_generator(modulo), modulo), result = boost::multiprecision::pow(gen, (modulo - 1) / M); + nil::crypto3::multiprecision::big_mod_rt gen(find_generator(modulo), modulo), result = nil::crypto3::multiprecision::powm(gen, (modulo - 1) / M); if (result == 1u) { result = unity_root(m, modulo); } @@ -121,20 +120,20 @@ namespace nil { * */ - boost::multiprecision::number mu = modulo.ComputeMu(); - boost::multiprecision::number x(1); + nil::crypto3::multiprecision::big_uint mu = modulo.ComputeMu(); + nil::crypto3::multiprecision::big_uint x(1); x.ModMulEq(result, modulo, mu); - boost::multiprecision::number minRU(x); - boost::multiprecision::number curPowIdx(1); - std::vector> coprimes = algebra::totient_list>( + nil::crypto3::multiprecision::big_uint minRU(x); + nil::crypto3::multiprecision::big_uint curPowIdx(1); + std::vector> coprimes = algebra::totient_list>( m); for (uint32_t i = 0; i < coprimes.size(); i++) { auto nextPowIdx = coprimes[i]; - boost::multiprecision::number diffPow(nextPowIdx - curPowIdx); + nil::crypto3::multiprecision::big_uint diffPow(nextPowIdx - curPowIdx); for (std::size_t j = 0; j < diffPow; j++) { x.ModMulEq(result, modulo, mu); } - if (x < minRU && x != boost::multiprecision::number(1)) { + if (x < minRU && x != nil::crypto3::multiprecision::big_uint(1)) { minRU = x; } curPowIdx = nextPowIdx; diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/coset.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/coset.hpp index d1f983ffd5..07ef457085 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/coset.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/coset.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_COSET_HPP -#define CRYPTO3_MATH_COSET_HPP +#ifndef PARALLEL_CRYPTO3_MATH_COSET_HPP +#define PARALLEL_CRYPTO3_MATH_COSET_HPP + +#ifdef CRYPTO3_MATH_COSET_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/detail/field_utils.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/detail/field_utils.hpp index e2d9eb71bb..9a2ed1346c 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/detail/field_utils.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/detail/field_utils.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_FIELD_UTILS_HPP -#define CRYPTO3_MATH_FIELD_UTILS_HPP +#ifndef PARALLEL_CRYPTO3_MATH_FIELD_UTILS_HPP +#define PARALLEL_CRYPTO3_MATH_FIELD_UTILS_HPP + +#ifdef CRYPTO3_MATH_FIELD_UTILS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/arithmetic_sequence_domain.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/arithmetic_sequence_domain.hpp index d5ff786446..84a321f1e6 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/arithmetic_sequence_domain.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/arithmetic_sequence_domain.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_ARITHMETIC_SEQUENCE_DOMAIN_HPP -#define CRYPTO3_MATH_ARITHMETIC_SEQUENCE_DOMAIN_HPP +#ifndef PARALLEL_CRYPTO3_MATH_ARITHMETIC_SEQUENCE_DOMAIN_HPP +#define PARALLEL_CRYPTO3_MATH_ARITHMETIC_SEQUENCE_DOMAIN_HPP + +#ifdef CRYPTO3_MATH_ARITHMETIC_SEQUENCE_DOMAIN_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/basic_radix2_domain.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/basic_radix2_domain.hpp index b7a9de6b1a..0d5843d84b 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/basic_radix2_domain.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/basic_radix2_domain.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_HPP -#define CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_HPP +#ifndef PARALLEL_CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_HPP +#define PARALLEL_CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_HPP + +#ifdef CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/detail/basic_radix2_domain_aux.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/detail/basic_radix2_domain_aux.hpp index 7a6f9d6162..0160a04f9b 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/detail/basic_radix2_domain_aux.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/detail/basic_radix2_domain_aux.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_AUX_HPP -#define CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_AUX_HPP +#ifndef PARALLEL_CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_AUX_HPP +#define PARALLEL_CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_AUX_HPP + +#ifdef CRYPTO3_MATH_BASIC_RADIX2_DOMAIN_AUX_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/evaluation_domain.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/evaluation_domain.hpp index 7c95906ef3..ec1e676b7e 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/evaluation_domain.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/evaluation_domain.hpp @@ -23,12 +23,15 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_EVALUATION_DOMAIN_HPP -#define CRYPTO3_MATH_EVALUATION_DOMAIN_HPP +#ifndef PARALLEL_CRYPTO3_MATH_EVALUATION_DOMAIN_HPP +#define PARALLEL_CRYPTO3_MATH_EVALUATION_DOMAIN_HPP + +#ifdef CRYPTO3_MATH_EVALUATION_DOMAIN_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include -#include #include namespace nil { @@ -55,7 +58,7 @@ namespace nil { * * (See the function get_evaluation_domain below.) */ - evaluation_domain(const std::size_t m) : m(m), log2_size(boost::multiprecision::msb(m)) {}; + evaluation_domain(const std::size_t m) : m(m), log2_size(nil::crypto3::multiprecision::msb(m)) {}; inline std::size_t size() const { return m; diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/extended_radix2_domain.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/extended_radix2_domain.hpp index 9fc0b0434c..214a374719 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/extended_radix2_domain.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/extended_radix2_domain.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_EXTENDED_RADIX2_DOMAIN_HPP -#define CRYPTO3_MATH_EXTENDED_RADIX2_DOMAIN_HPP +#ifndef PARALLEL_CRYPTO3_MATH_EXTENDED_RADIX2_DOMAIN_HPP +#define PARALLEL_CRYPTO3_MATH_EXTENDED_RADIX2_DOMAIN_HPP + +#ifdef CRYPTO3_MATH_EXTENDED_RADIX2_DOMAIN_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/geometric_sequence_domain.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/geometric_sequence_domain.hpp index 9e24ba409d..530548ee70 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/geometric_sequence_domain.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/geometric_sequence_domain.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_GEOMETRIC_SEQUENCE_DOMAIN_HPP -#define CRYPTO3_MATH_GEOMETRIC_SEQUENCE_DOMAIN_HPP +#ifndef PARALLEL_CRYPTO3_MATH_GEOMETRIC_SEQUENCE_DOMAIN_HPP +#define PARALLEL_CRYPTO3_MATH_GEOMETRIC_SEQUENCE_DOMAIN_HPP + +#ifdef CRYPTO3_MATH_GEOMETRIC_SEQUENCE_DOMAIN_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/step_radix2_domain.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/step_radix2_domain.hpp index 32bab14408..7034103175 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/step_radix2_domain.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/domains/step_radix2_domain.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_STEP_RADIX2_DOMAIN_HPP -#define CRYPTO3_MATH_STEP_RADIX2_DOMAIN_HPP +#ifndef PARALLEL_CRYPTO3_MATH_STEP_RADIX2_DOMAIN_HPP +#define PARALLEL_CRYPTO3_MATH_STEP_RADIX2_DOMAIN_HPP + +#ifdef CRYPTO3_MATH_STEP_RADIX2_DOMAIN_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/kronecker_substitution.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/kronecker_substitution.hpp old mode 100755 new mode 100644 index 405619ce61..aa89912b98 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/kronecker_substitution.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/kronecker_substitution.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_KRONECKER_SUBSTITUTION_HPP -#define CRYPTO3_MATH_KRONECKER_SUBSTITUTION_HPP +#ifndef PARALLEL_CRYPTO3_MATH_KRONECKER_SUBSTITUTION_HPP +#define PARALLEL_CRYPTO3_MATH_KRONECKER_SUBSTITUTION_HPP + +#ifdef CRYPTO3_MATH_KRONECKER_SUBSTITUTION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basic_operations.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basic_operations.hpp index 3b503c3282..509b6f0792 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basic_operations.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basic_operations.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_POLYNOMIAL_BASIC_OPERATIONS_HPP -#define CRYPTO3_MATH_POLYNOMIAL_BASIC_OPERATIONS_HPP +#ifndef PARALLEL_CRYPTO3_MATH_POLYNOMIAL_BASIC_OPERATIONS_HPP +#define PARALLEL_CRYPTO3_MATH_POLYNOMIAL_BASIC_OPERATIONS_HPP + +#ifdef CRYPTO3_MATH_POLYNOMIAL_BASIC_OPERATIONS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basis_change.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basis_change.hpp index 12d7baed29..80ae0e088c 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basis_change.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/basis_change.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_BASIS_CHANGE_HPP -#define CRYPTO3_MATH_BASIS_CHANGE_HPP +#ifndef PARALLEL_CRYPTO3_MATH_BASIS_CHANGE_HPP +#define PARALLEL_CRYPTO3_MATH_BASIS_CHANGE_HPP + +#ifdef CRYPTO3_MATH_BASIS_CHANGE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/cyclotomic.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/cyclotomic.hpp index 79173a8a2f..d2cc3cee2b 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/cyclotomic.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/cyclotomic.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_CYCLOTOMIC_HPP -#define CRYPTO3_MATH_CYCLOTOMIC_HPP +#ifndef PARALLEL_CRYPTO3_MATH_CYCLOTOMIC_HPP +#define PARALLEL_CRYPTO3_MATH_CYCLOTOMIC_HPP + +#ifdef CRYPTO3_MATH_CYCLOTOMIC_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/evaluate.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/evaluate.hpp index 6d6a3c34e1..e5e1a73671 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/evaluate.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/evaluate.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_EVALUATE_HPP -#define CRYPTO3_MATH_EVALUATE_HPP +#ifndef PARALLEL_CRYPTO3_MATH_EVALUATE_HPP +#define PARALLEL_CRYPTO3_MATH_EVALUATE_HPP + +#ifdef CRYPTO3_MATH_EVALUATE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/lagrange_interpolation.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/lagrange_interpolation.hpp index 711b2fa6d4..e90481ba02 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/lagrange_interpolation.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/lagrange_interpolation.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_LAGRANGE_INTERPOLATION_HPP -#define CRYPTO3_MATH_LAGRANGE_INTERPOLATION_HPP +#ifndef PARALLEL_CRYPTO3_MATH_LAGRANGE_INTERPOLATION_HPP +#define PARALLEL_CRYPTO3_MATH_LAGRANGE_INTERPOLATION_HPP + +#ifdef CRYPTO3_MATH_LAGRANGE_INTERPOLATION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial.hpp index 53828a351c..dac95dda6e 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_HPP -#define CRYPTO3_MATH_POLYNOMIAL_POLYNOM_HPP +#ifndef PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_HPP +#define PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_HPP + +#ifdef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs.hpp index 4d1aa32400..6da143b12a 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFT_HPP -#define CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFT_HPP +#ifndef PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFT_HPP +#define PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFT_HPP + +#ifdef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs_view.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs_view.hpp index e358eece61..089087e8ac 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs_view.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_dfs_view.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFS_VIEW_HPP -#define CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFS_VIEW_HPP +#ifndef PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFS_VIEW_HPP +#define PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFS_VIEW_HPP + +#ifdef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_DFS_VIEW_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_view.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_view.hpp index a3f9cea65c..261478de8a 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_view.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/polynomial_view.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_VIEW_HPP -#define CRYPTO3_MATH_POLYNOMIAL_POLYNOM_VIEW_HPP +#ifndef PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_VIEW_HPP +#define PARALLEL_CRYPTO3_MATH_POLYNOMIAL_POLYNOM_VIEW_HPP + +#ifdef CRYPTO3_MATH_POLYNOMIAL_POLYNOM_VIEW_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/shift.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/shift.hpp index ae6b67a9e3..da08bb4f3a 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/shift.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/shift.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_POLYNOMIAL_SHIFT_HPP -#define CRYPTO3_MATH_POLYNOMIAL_SHIFT_HPP +#ifndef PARALLEL_CRYPTO3_MATH_POLYNOMIAL_SHIFT_HPP +#define PARALLEL_CRYPTO3_MATH_POLYNOMIAL_SHIFT_HPP + +#ifdef CRYPTO3_MATH_POLYNOMIAL_SHIFT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/xgcd.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/xgcd.hpp index 2411e1e5fc..6367ee3752 100644 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/xgcd.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/polynomial/xgcd.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_XGCD_HPP -#define CRYPTO3_MATH_XGCD_HPP +#ifndef PARALLEL_CRYPTO3_MATH_XGCD_HPP +#define PARALLEL_CRYPTO3_MATH_XGCD_HPP + +#ifdef CRYPTO3_MATH_XGCD_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/type_traits.hpp b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/type_traits.hpp old mode 100755 new mode 100644 index ff9443e538..d6070bb758 --- a/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/type_traits.hpp +++ b/parallel-crypto3/libs/parallel-math/include/nil/crypto3/math/type_traits.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_MATH_TYPE_TRAITS_HPP -#define CRYPTO3_MATH_TYPE_TRAITS_HPP +#ifndef PARALLEL_CRYPTO3_MATH_TYPE_TRAITS_HPP +#define PARALLEL_CRYPTO3_MATH_TYPE_TRAITS_HPP + +#ifdef CRYPTO3_MATH_TYPE_TRAITS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-math/test/CMakeLists.txt b/parallel-crypto3/libs/parallel-math/test/CMakeLists.txt index 525e1f6b90..8339de6ebf 100644 --- a/parallel-crypto3/libs/parallel-math/test/CMakeLists.txt +++ b/parallel-crypto3/libs/parallel-math/test/CMakeLists.txt @@ -34,7 +34,7 @@ macro(define_math_test name) ${Boost_INCLUDE_DIRS}) - set_target_properties(${test_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${test_name} PROPERTIES CXX_STANDARD 20) endmacro() @@ -52,7 +52,3 @@ set(TESTS_NAMES foreach(TEST_NAME ${TESTS_NAMES}) define_math_test(${TEST_NAME}) endforeach() - -if(ENABLE_BENCHMARKS) - add_subdirectory(benchmarks) -endif() diff --git a/parallel-crypto3/libs/parallel-math/test/benchmarks/CMakeLists.txt b/parallel-crypto3/libs/parallel-math/test/benchmarks/CMakeLists.txt deleted file mode 100644 index 374894a767..0000000000 --- a/parallel-crypto3/libs/parallel-math/test/benchmarks/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -#---------------------------------------------------------------------------# -# Copyright (c) 2018-2020 Mikhail Komarov -# -# Distributed under the Boost Software License, Version 1.0 -# See accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt -#---------------------------------------------------------------------------# - -find_package(Boost REQUIRED COMPONENTS - timer - unit_test_framework -) - -cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} - - crypto3::algebra - crypto3::multiprecision - crypto3::random - - ${Boost_LIBRARIES} -) - -set(TESTS_NAMES - "polynomial_dfs_benchmark" -) - -foreach(TEST_NAME ${TESTS_NAMES}) - define_math_test(${TEST_NAME}) -endforeach() - - -#get_target_property(my_include_dirs math_polynomial_dfs_benchmark_test INCLUDE_DIRECTORIES) -#message(include dirs: ${my_include_dirs}) diff --git a/parallel-crypto3/libs/parallel-math/test/polynomial_dfs.cpp b/parallel-crypto3/libs/parallel-math/test/polynomial_dfs.cpp index b3a1ab59b8..719db76f0a 100644 --- a/parallel-crypto3/libs/parallel-math/test/polynomial_dfs.cpp +++ b/parallel-crypto3/libs/parallel-math/test/polynomial_dfs.cpp @@ -52,23 +52,23 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_from_coefficients_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_equal_test){ polynomial_dfs a = { 7, - {0x35_cppui_modular253, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}}; + {0x35_big_uint255, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint255, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint255, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint255, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint255, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint255, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint255}}; polynomial_dfs a1 = { 7, - {0x35_cppui_modular253, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}}; + {0x35_big_uint255, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint255, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint255, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint255, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint255, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint255, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint255}}; BOOST_CHECK_EQUAL(a, a1); } @@ -81,14 +81,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_from_coefficients_less_degree) { a.from_coefficients(polynomial); std::vector c_res = { - 0x35_cppui_modular253, - 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}; + 0x35_big_uint255, + 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint255, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint255, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint255, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint255, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint255, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint255}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -103,13 +103,13 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_coefficients_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_coefficients_less_degree) { polynomial_dfs a = { 7, - {0x35_cppui_modular253, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}}; + {0x35_big_uint255, 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint255, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint255, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint255, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint255, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint255, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint255}}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u}; std::vector c = a.coefficients(); @@ -123,13 +123,13 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_coefficients_same_degree) { polynomial_dfs a = { 8, {0x37u, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u, 2u}; std::vector c = a.coefficients(); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -143,38 +143,38 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_addition_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_equal) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint255, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint255, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint255, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint255, + 0x6_big_uint255, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint255, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint255, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint255, }}; polynomial_dfs c = a + b; polynomial_dfs c_res = { 7, { - 0x71_cppui_modular253, - 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_cppui_modular253, - 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_cppui_modular253, - 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_cppui_modular253, - 0x13522f003a2269a89044690056226900000022fffffffffffc_cppui_modular253, - 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_cppui_modular253, + 0x71_big_uint255, + 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_big_uint255, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_big_uint255, + 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_big_uint255, + 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_big_uint255, + 0x13522f003a2269a89044690056226900000022fffffffffffc_big_uint255, + 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_big_uint255, }}; BOOST_CHECK_EQUAL(c_res, c); } @@ -182,57 +182,57 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_b) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}}; polynomial_dfs c = a + b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint255, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint255, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint255, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint255, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint255, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint255, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint255}}; BOOST_CHECK_EQUAL(c_res, c); } BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_a) { polynomial_dfs a = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}}; polynomial_dfs b = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; polynomial_dfs c = a + b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint255, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint255, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint255, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint255, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint255, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint255, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint255}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -241,27 +241,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_sum) { { 7, { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253 + 0x37_big_uint255, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255 } }, { 6, { - 0x4e_cppui_modular253, - 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253 + 0x4e_big_uint255, + 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint255, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint255, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint255, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint255, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint255, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint255 } } }; @@ -277,38 +277,38 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_addition_eq_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_eq_equal) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint255, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint255, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint255, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint255, + 0x6_big_uint255, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint255, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint255, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint255, }}; a += b; polynomial_dfs c_res = { 7, { - 0x71_cppui_modular253, - 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_cppui_modular253, - 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_cppui_modular253, - 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_cppui_modular253, - 0x13522f003a2269a89044690056226900000022fffffffffffc_cppui_modular253, - 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_cppui_modular253, + 0x71_big_uint255, + 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_big_uint255, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_big_uint255, + 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_big_uint255, + 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_big_uint255, + 0x13522f003a2269a89044690056226900000022fffffffffffc_big_uint255, + 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_big_uint255, }}; BOOST_CHECK_EQUAL(c_res, a); } @@ -316,57 +316,57 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_eq_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_b) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}}; a += b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint255, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint255, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint255, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint255, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint255, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint255, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint255}}; BOOST_CHECK_EQUAL(c_res, a); } BOOST_AUTO_TEST_CASE(polynomial_dfs_addition_less_a) { polynomial_dfs a = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}}; polynomial_dfs b = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; a += b; polynomial_dfs c_res = { 7, - {0x4e_cppui_modular253, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}}; + {0x4e_big_uint255, 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint255, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint255, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint255, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint255, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint255, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint255}}; BOOST_CHECK_EQUAL(c_res, a); } BOOST_AUTO_TEST_SUITE_END() @@ -379,27 +379,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_equal) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint255, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint255, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint255, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint255, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint255, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint255, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint255, }}; // {9, 3, 11, 14, 7, 1, 5, 8} polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint255, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint255, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint255, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint255, + 0x6_big_uint255, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint255, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint255, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint255, }}; polynomial_dfs c(8, 1, FieldType::value_type::zero()); @@ -409,14 +409,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_equal) { polynomial_dfs c_res = { 7, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000000fffffffffffc_cppui_modular253, - 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_cppui_modular253, - 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint255, + 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_big_uint255, + 0x8d51ccce760304d0ec030002760300000000fffffffffffc_big_uint255, + 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint255, + 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_big_uint255, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_big_uint255, + 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_big_uint255, }}; BOOST_CHECK_EQUAL(c_res, c); @@ -427,27 +427,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_b) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint255, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint255, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint255, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint255, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint255, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint255, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint255, }}; // 9, 3, 11, 14, 7 polynomial_dfs b = { 4, { - 0x2c_cppui_modular253, - 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_cppui_modular253, - 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_cppui_modular253, - 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_cppui_modular253, - 0xa_cppui_modular253, - 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_cppui_modular253, - 0x61283ccdf122134fa2421001b12210000000b000000000005_cppui_modular253, - 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_cppui_modular253, + 0x2c_big_uint255, + 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_big_uint255, + 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_big_uint255, + 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_big_uint255, + 0xa_big_uint255, + 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_big_uint255, + 0x61283ccdf122134fa2421001b12210000000b000000000005_big_uint255, + 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_big_uint255, }}; polynomial_dfs c(8, 1, FieldType::value_type::zero()); @@ -456,14 +456,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_b) { polynomial_dfs c_res = { 7, { - 0xb_cppui_modular253, - 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_cppui_modular253, - 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_cppui_modular253, - 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_cppui_modular253, - 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_cppui_modular253, - 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_cppui_modular253, - 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_cppui_modular253, + 0xb_big_uint255, + 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_big_uint255, + 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_big_uint255, + 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_big_uint255, + 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_big_uint255, + 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_big_uint255, + 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_big_uint255, }}; BOOST_CHECK_EQUAL(c_res, c); @@ -474,27 +474,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_a) { polynomial_dfs a = { 4, { - 0x27_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_cppui_modular253, - 0xc250799be244269f448420036244200000016000000000003_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_cppui_modular253, + 0x27_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_big_uint255, + 0xc250799be244269f448420036244200000016000000000003_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_big_uint255, }}; // 9, 3, 11, 14, 7, 1, 5 polynomial_dfs b = { 6, { - 0x32_cppui_modular253, - 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_cppui_modular253, - 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_cppui_modular253, - 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_cppui_modular253, - 0xe_cppui_modular253, - 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_cppui_modular253, - 0x5853200109c1e3029381e00189c1e0000000a000000000000_cppui_modular253, - 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_cppui_modular253, + 0x32_big_uint255, + 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_big_uint255, + 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_big_uint255, + 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_big_uint255, + 0xe_big_uint255, + 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_big_uint255, + 0x5853200109c1e3029381e00189c1e0000000a000000000000_big_uint255, + 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_big_uint255, }}; polynomial_dfs c(7, 1, FieldType::value_type::zero()); @@ -503,14 +503,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_less_a) { polynomial_dfs c_res = { 6, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_cppui_modular253, - 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_cppui_modular253, - 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_cppui_modular253, - 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000003_cppui_modular253, - 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_big_uint255, + 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_big_uint255, + 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_big_uint255, + 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000003_big_uint255, + 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_big_uint255, }}; BOOST_CHECK_EQUAL(c_res, c); @@ -524,27 +524,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_equal) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint255, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint255, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint255, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint255, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint255, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint255, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint255, }}; // {9, 3, 11, 14, 7, 1, 5, 8} polynomial_dfs b = { 7, { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint255, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint255, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint255, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint255, + 0x6_big_uint255, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint255, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint255, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint255, }}; a -= b; @@ -552,14 +552,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_equal) { polynomial_dfs c_res = { 7, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000000fffffffffffc_cppui_modular253, - 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_cppui_modular253, - 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint255, + 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_big_uint255, + 0x8d51ccce760304d0ec030002760300000000fffffffffffc_big_uint255, + 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint255, + 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_big_uint255, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_big_uint255, + 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_big_uint255, }}; BOOST_CHECK_EQUAL(c_res, a); @@ -570,23 +570,23 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_b) { polynomial_dfs a = { 7, { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint255, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint255, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint255, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint255, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint255, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint255, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint255, }}; // 9, 3, 11, 14 polynomial_dfs b = { 3, { - 0x2c_cppui_modular253, - 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_cppui_modular253, - 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_cppui_modular253, - 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_cppui_modular253, + 0x2c_big_uint255, + 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_big_uint255, + 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_big_uint255, + 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_big_uint255, }}; polynomial_dfs c(8, 1, FieldType::value_type::zero()); @@ -595,14 +595,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_b) { polynomial_dfs c_res = { 7, { - 0xb_cppui_modular253, - 0x2a0cf6cbe1265f2f69c5fd7f23de0a85a42a7b5b43d65a71dd6e2e081f3acfea_cppui_modular253, - 0x25dca9e18637dc987d958e25d84deb0599a1478360c5ed2566591d49ad40df0c_cppui_modular253, - 0x1200fa2d09728089883f89488cf6cfb560ba457f80713d469fdbf1666aff4730_cppui_modular253, - 0x61283ccdf122134fa2421001b12210000000affffffffffe8_cppui_modular253, - 0x6f8014ca51c232ed6480b1981a3dd3d72cfe0a9c2986ba7d8dc20181d20cf8db_cppui_modular253, - 0x151cdb46d4f99b9102fc2c91a0645c689d89f312c7239269a1362ba1abd896cb_cppui_modular253, - 0x35926b84873e2d16fc9273ec962a65b7d27133d4c3a8957fc8e27f9fcd265a6_cppui_modular253 + 0xb_big_uint255, + 0x2a0cf6cbe1265f2f69c5fd7f23de0a85a42a7b5b43d65a71dd6e2e081f3acfea_big_uint255, + 0x25dca9e18637dc987d958e25d84deb0599a1478360c5ed2566591d49ad40df0c_big_uint255, + 0x1200fa2d09728089883f89488cf6cfb560ba457f80713d469fdbf1666aff4730_big_uint255, + 0x61283ccdf122134fa2421001b12210000000affffffffffe8_big_uint255, + 0x6f8014ca51c232ed6480b1981a3dd3d72cfe0a9c2986ba7d8dc20181d20cf8db_big_uint255, + 0x151cdb46d4f99b9102fc2c91a0645c689d89f312c7239269a1362ba1abd896cb_big_uint255, + 0x35926b84873e2d16fc9273ec962a65b7d27133d4c3a8957fc8e27f9fcd265a6_big_uint255 }}; BOOST_CHECK_EQUAL(c_res, a); @@ -612,27 +612,27 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_a) { polynomial_dfs a = { 4, { - 0x27_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_cppui_modular253, - 0xc250799be244269f448420036244200000016000000000003_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_cppui_modular253, + 0x27_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_big_uint255, + 0xc250799be244269f448420036244200000016000000000003_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_big_uint255, }}; // 9, 3, 11, 14, 7, 1, 5 polynomial_dfs b = { 6, { - 0x32_cppui_modular253, - 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_cppui_modular253, - 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_cppui_modular253, - 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_cppui_modular253, - 0xe_cppui_modular253, - 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_cppui_modular253, - 0x5853200109c1e3029381e00189c1e0000000a000000000000_cppui_modular253, - 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_cppui_modular253, + 0x32_big_uint255, + 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_big_uint255, + 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_big_uint255, + 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_big_uint255, + 0xe_big_uint255, + 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_big_uint255, + 0x5853200109c1e3029381e00189c1e0000000a000000000000_big_uint255, + 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_big_uint255, }}; a -= b; @@ -640,14 +640,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_subtraction_eq_less_a) { polynomial_dfs c_res = { 6, { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_cppui_modular253, - 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_cppui_modular253, - 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_cppui_modular253, - 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000003_cppui_modular253, - 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_big_uint255, + 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_big_uint255, + 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_big_uint255, + 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000003_big_uint255, + 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_big_uint255, }}; BOOST_CHECK_EQUAL(c_res, a); @@ -660,40 +660,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_without_resize) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint255, }}; polynomial_dfs b = { 2, { - 0x17_cppui_modular253, - 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_cppui_modular253, - 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, - 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_cppui_modular253, - 0x11_cppui_modular253, - 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253, - 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_cppui_modular253, + 0x17_big_uint255, + 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_big_uint255, + 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, + 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_big_uint255, + 0x11_big_uint255, + 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255, + 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_big_uint255, }}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 5, - {0x2f7_cppui_modular253, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_cppui_modular253, - 0x13522f003a2269a89044690056226900000023000000000048_cppui_modular253, - 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_cppui_modular253, - 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_cppui_modular253, - 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_cppui_modular253}}; + {0x2f7_big_uint255, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_big_uint255, + 0x13522f003a2269a89044690056226900000023000000000048_big_uint255, + 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_big_uint255, + 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_big_uint255, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_big_uint255, + 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_big_uint255}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -703,44 +703,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_resize_a) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, }}; polynomial_dfs b = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint255, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint255, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint255, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint255, + 0xd_big_uint255, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint255, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint255, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint255, }}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint255, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint255, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint255, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint255, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint255, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint255, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint255, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint255, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint255, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint255, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint255, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint255, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint255, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint255, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint255}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -750,44 +750,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_resize_b) { polynomial_dfs a = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint255, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint255, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint255, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint255, + 0xd_big_uint255, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint255, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint255, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint255, }}; polynomial_dfs b = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, }}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint255, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint255, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint255, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint255, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint255, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint255, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint255, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint255, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint255, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint255, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint255, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint255, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint255, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint255, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint255}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -796,38 +796,38 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_resize_both) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}}; polynomial_dfs c = a * b; polynomial_dfs c_res = { 9, - {0x4f1_cppui_modular253, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_cppui_modular253, - 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_cppui_modular253, - 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_cppui_modular253, - 0xc250799be244269f44842003624420000001600000000003b_cppui_modular253, - 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_cppui_modular253, - 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_cppui_modular253, - 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_cppui_modular253, - 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_cppui_modular253, - 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_cppui_modular253, - 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_cppui_modular253, - 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_cppui_modular253, - 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_cppui_modular253, - 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_cppui_modular253}}; + {0x4f1_big_uint255, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_big_uint255, + 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_big_uint255, + 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_big_uint255, + 0xc250799be244269f44842003624420000001600000000003b_big_uint255, + 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_big_uint255, + 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_big_uint255, + 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_big_uint255, + 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_big_uint255, + 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_big_uint255, + 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_big_uint255, + 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_big_uint255, + 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_big_uint255, + 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_big_uint255}}; BOOST_CHECK_EQUAL(c_res, c); } @@ -840,40 +840,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_without_resize) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint255, }}; polynomial_dfs b = { 2, { - 0x17_cppui_modular253, - 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_cppui_modular253, - 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, - 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_cppui_modular253, - 0x11_cppui_modular253, - 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253, - 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_cppui_modular253, + 0x17_big_uint255, + 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_big_uint255, + 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, + 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_big_uint255, + 0x11_big_uint255, + 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255, + 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_big_uint255, }}; a *= b; polynomial_dfs c_res = { 5, - {0x2f7_cppui_modular253, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_cppui_modular253, - 0x13522f003a2269a89044690056226900000023000000000048_cppui_modular253, - 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_cppui_modular253, - 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_cppui_modular253, - 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_cppui_modular253}}; + {0x2f7_big_uint255, 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_big_uint255, + 0x13522f003a2269a89044690056226900000023000000000048_big_uint255, + 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_big_uint255, + 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_big_uint255, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_big_uint255, + 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_big_uint255}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -882,44 +882,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_resize_a) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, }}; polynomial_dfs b = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint255, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint255, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint255, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint255, + 0xd_big_uint255, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint255, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint255, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint255, }}; a *= b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint255, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint255, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint255, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint255, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint255, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint255, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint255, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint255, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint255, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint255, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint255, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint255, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint255, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint255, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint255}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -929,44 +929,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_resize_b) { polynomial_dfs a = { 5, { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint255, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint255, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint255, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint255, + 0xd_big_uint255, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint255, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint255, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint255, }}; polynomial_dfs b = { 3, { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, }}; a *= b; polynomial_dfs c_res = { 8, - {0x60f_cppui_modular253, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}}; + {0x60f_big_uint255, 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint255, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint255, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint255, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint255, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint255, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint255, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint255, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint255, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint255, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint255, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint255, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint255, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint255, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint255}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -975,38 +975,38 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_multiplication_eq_resize_both) { polynomial_dfs a = { 7, - {0x37_cppui_modular253, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}}; + {0x37_big_uint255, 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}}; polynomial_dfs b = { 2, - {0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}}; + {0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}}; a *= b; polynomial_dfs c_res = { 9, - {0x4f1_cppui_modular253, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_cppui_modular253, - 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_cppui_modular253, - 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_cppui_modular253, - 0xc250799be244269f44842003624420000001600000000003b_cppui_modular253, - 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_cppui_modular253, - 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_cppui_modular253, - 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_cppui_modular253, - 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_cppui_modular253, - 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_cppui_modular253, - 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_cppui_modular253, - 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_cppui_modular253, - 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_cppui_modular253, - 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_cppui_modular253}}; + {0x4f1_big_uint255, 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_big_uint255, + 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_big_uint255, + 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_big_uint255, + 0xc250799be244269f44842003624420000001600000000003b_big_uint255, + 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_big_uint255, + 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_big_uint255, + 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_big_uint255, + 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_big_uint255, + 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_big_uint255, + 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_big_uint255, + 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_big_uint255, + 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_big_uint255, + 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_big_uint255}}; BOOST_CHECK_EQUAL(c_res, a); } @@ -1020,25 +1020,25 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_division) { // {5, 0, 0, 13, 0, 1}; polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint255, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint255}}; //{13, 0, 1}; polynomial_dfs b = { 2, { - 0xe_cppui_modular253, - 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, - 0xe_cppui_modular253, - 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, + 0xe_big_uint255, + 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint255, + 0xc_big_uint255, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint255, + 0xe_big_uint255, + 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint255, + 0xc_big_uint255, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint255, }}; polynomial_dfs Q = a / b; @@ -1046,17 +1046,17 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_division) { polynomial_dfs Q_ans = { 3, - {0x1_cppui_modular253, 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_cppui_modular253, - 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_cppui_modular253, - 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000001000000000000_cppui_modular253, - 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_cppui_modular253}}; // {0, 0, 0, 1}; + {0x1_big_uint255, 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_big_uint255, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_big_uint255, + 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_big_uint255, + 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_big_uint255, + 0x8d51ccce760304d0ec030002760300000001000000000000_big_uint255, + 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_big_uint255}}; // {0, 0, 0, 1}; polynomial_dfs R_ans = {0, - {0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, - 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, - 0x5_cppui_modular253}}; //{5}; + {0x5_big_uint255, 0x5_big_uint255, 0x5_big_uint255, 0x5_big_uint255, + 0x5_big_uint255, 0x5_big_uint255, 0x5_big_uint255, + 0x5_big_uint255}}; //{5}; BOOST_CHECK_EQUAL(Q_ans, Q); BOOST_CHECK_EQUAL(R_ans, R); @@ -1121,25 +1121,25 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_operations_with_constants_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_add_constant) { polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint255, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint255}}; - typename FieldType::value_type c = 0x10_cppui_modular253; + typename FieldType::value_type c = 0x10_big_uint255; polynomial_dfs c_res = { 5, - {0x23_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2f0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000016_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de914_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000008_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d3b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000015_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21717_cppui_modular253} + {0x23_big_uint255, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2f0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000016_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de914_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000008_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d3b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000015_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21717_big_uint255} }; polynomial_dfs c1 = a + c; @@ -1154,36 +1154,36 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_add_constant) { BOOST_AUTO_TEST_CASE(polynomial_dfs_sub_constant) { polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint255, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint255}}; - typename FieldType::value_type c = 0x10_cppui_modular253; + typename FieldType::value_type c = 0x10_big_uint255; polynomial_dfs c_res = { 5, - {0x3_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2d0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3fffefffffff6_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de8f4_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d1b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000bfffffffffff5_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb216f7_cppui_modular253}}; + {0x3_big_uint255, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2d0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3fffefffffff6_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de8f4_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d1b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000bfffffffffff5_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb216f7_big_uint255}}; polynomial_dfs c2_res = { 5, - {0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d31_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c00000000000b_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb2170d_cppui_modular253, - 0x19_cppui_modular253, - 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e6_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff0000000c_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de90a_cppui_modular253}}; + {0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d31_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c00000000000b_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb2170d_big_uint255, + 0x19_big_uint255, + 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e6_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff0000000c_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de90a_big_uint255}}; polynomial_dfs c1 = a - c; polynomial_dfs c2 = c - a; @@ -1198,26 +1198,26 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_sub_constant) { BOOST_AUTO_TEST_CASE(polynomial_dfs_mul_constant) { polynomial_dfs a = { 5, - {0x13_cppui_modular253, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}}; + {0x13_big_uint255, 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint255}}; - typename FieldType::value_type c = 0x123456789abcdef0_cppui_modular253; + typename FieldType::value_type c = 0x123456789abcdef0_big_uint255; polynomial_dfs c_res = { 5, - {0x159e26af37c048bd0_cppui_modular253, - 0x561eb8d15cf56ffae9f06589af84b8c28cc573357badfeb6369351fbc07369c3_cppui_modular253, - 0x6f4395a4399ecdf012d23e04abddbe468b2b136318957723e7c5b05905b05ab2_cppui_modular253, - 0x25025c1ee2b3c9846b9b3b1a4106e62e52434883b230fa78188b5373797c67d7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfe5c28f5c18f5c2991_cppui_modular253, - 0x1dceee81cca80d4d4949727e5a1d1f42c6f830cd84505d497f780eb94aed4b9e_cppui_modular253, - 0x4aa11aeeffeaf5820679a035dc419bec892909fe768e4dbce45b05c05b05aaf_cppui_modular253, - 0x4eeb4b3446e9b3c3c79e9cedc89af1d7017a5b7f4dcd61879d800d4191e44d8a_cppui_modular253 + {0x159e26af37c048bd0_big_uint255, + 0x561eb8d15cf56ffae9f06589af84b8c28cc573357badfeb6369351fbc07369c3_big_uint255, + 0x6f4395a4399ecdf012d23e04abddbe468b2b136318957723e7c5b05905b05ab2_big_uint255, + 0x25025c1ee2b3c9846b9b3b1a4106e62e52434883b230fa78188b5373797c67d7_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfe5c28f5c18f5c2991_big_uint255, + 0x1dceee81cca80d4d4949727e5a1d1f42c6f830cd84505d497f780eb94aed4b9e_big_uint255, + 0x4aa11aeeffeaf5820679a035dc419bec892909fe768e4dbce45b05c05b05aaf_big_uint255, + 0x4eeb4b3446e9b3c3c79e9cedc89af1d7017a5b7f4dcd61879d800d4191e44d8a_big_uint255 }}; polynomial_dfs c1 = a * c; @@ -1236,14 +1236,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_pow_eq_test) { polynomial_dfs a = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint255, }}; polynomial_dfs res = a; @@ -1262,17 +1262,17 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_evaluate_after_resize_test) { polynomial_dfs small_poly = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint255, }}; - typename FieldType::value_type point = 0x10_cppui_modular253; + typename FieldType::value_type point = 0x10_big_uint255; polynomial_dfs large_poly = small_poly; for (size_t new_size : {16, 32, 64, 128, 256, 512}) { large_poly.resize(new_size); @@ -1285,17 +1285,17 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_evaluate_after_resize_and_shift_test) { polynomial_dfs small_poly = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint255, }}; - typename FieldType::value_type point = 0x10_cppui_modular253; + typename FieldType::value_type point = 0x10_big_uint255; polynomial_dfs large_poly = small_poly; small_poly = polynomial_shift(small_poly, -1, 8); for (size_t new_size : {16, 32, 64, 128, 256, 512}) { @@ -1309,14 +1309,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_zero_one_test) { polynomial_dfs small_poly = { 3, { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint255, }}; polynomial_dfs zero = polynomial_dfs::zero(); diff --git a/parallel-crypto3/libs/parallel-math/test/polynomial_dfs_view.cpp b/parallel-crypto3/libs/parallel-math/test/polynomial_dfs_view.cpp index 32b0c0beb5..aa6404b662 100644 --- a/parallel-crypto3/libs/parallel-math/test/polynomial_dfs_view.cpp +++ b/parallel-crypto3/libs/parallel-math/test/polynomial_dfs_view.cpp @@ -52,14 +52,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_from_coefficients_less_degree) { a.from_coefficients(polynomial); std::vector c_res = { - 0x35_cppui_modular253, - 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}; + 0x35_big_uint255, + 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint255, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint255, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint255, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint255, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint255, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint255}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -73,14 +73,14 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_coefficients_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_coefficients_less_degree) { std::vector a_v = { - 0x35_cppui_modular253, - 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_cppui_modular253, - 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_cppui_modular253, - 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_cppui_modular253, - 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_cppui_modular253, - 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_cppui_modular253, - 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_cppui_modular253}; + 0x35_big_uint255, + 0x26D37C08AED60085FDE335498E7DFEE2AFB1463D06E338219CD0E5DDAF27D68F_big_uint255, + 0x73EDA753299D7D3FEB6ED7EF1F748FC77F90A3DE15D15BFEFFF0FFFEFFFFFFFD_big_uint255, + 0x4871BC0D4FC8E6B9695B3B2BDCA6D2CACD64A30E404507B3A523C00D0FF4F223_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFF0_big_uint255, + 0x4D1A2B4A7AC77CBEE56BD5E7B711BC3D1BFA5DB7350923DD63291A2150D82968_big_uint255, + 0x847CB0018EA2D483DD42D0024EA2D0000000EFFFFFFFFFFFC_big_uint255, + 0x2B7BEB45D9D4969219C969B2F10D22200E6B010383CB544B5AE23FF1F00B0DD4_big_uint255}; polynomial_dfs_view a = {7, a_v}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u}; @@ -95,13 +95,13 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_coefficients_less_degree) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_coefficients_same_degree) { std::vector a_v = { 0x37u, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}; polynomial_dfs_view a = {8, a_v}; std::vector c_res = {1u, 3u, 4u, 25u, 6u, 7u, 7u, 2u}; std::vector c = a.coefficients(); @@ -117,39 +117,39 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_addition_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_equal) { std::vector a_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint255, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}; polynomial_dfs_view a = {7, a_v}; std::vector b_v = { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint255, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint255, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint255, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint255, + 0x6_big_uint255, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint255, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint255, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint255, }; polynomial_dfs_view b = {7, b_v}; a += b; std::vector c_v = { - 0x71_cppui_modular253, - 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_cppui_modular253, - 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_cppui_modular253, - 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_cppui_modular253, - 0x13522f003a2269a89044690056226900000022fffffffffffc_cppui_modular253, - 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_cppui_modular253, + 0x71_big_uint255, + 0x68636b5b00b192231d91e1b254b83b1e84ee26a82bdf89850208da4c9875963c_big_uint255, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcfffefffffffd_big_uint255, + 0x585b6d9bc639a84d588e0b7a5dbc783088ed0270c1e5cb682e31b1e0caf89067_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff4_big_uint255, + 0xb8a3bf828ebeb286592c32c78fbb9cc56e17d699830d279fdfd25b2678a69bf_big_uint255, + 0x13522f003a2269a89044690056226900000022fffffffffffc_big_uint255, + 0x1b9239b76363d4f78ac0ffb6e7d342ef42bea1837a069096d1c84e1e35076f94_big_uint255, }; polynomial_dfs_view c_res = {7, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -161,32 +161,32 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_less_b) { std::vector a_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint255, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}; polynomial_dfs_view a = {7, a_v}; std::vector b_v = { - 0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}; + 0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}; polynomial_dfs_view b = {2, b_v}; a += b; std::vector c_v = { - 0x4e_cppui_modular253, - 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}; + 0x4e_big_uint255, + 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint255, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint255, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint255, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint255, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint255, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint255}; polynomial_dfs_view c_res = {7, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); for (std::size_t i = 0; i < c_res.size(); i++) { @@ -197,32 +197,32 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_less_b) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_addition_less_a) { std::vector a_v = { - 0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}; + 0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}; polynomial_dfs_view a = {2, a_v}; std::vector b_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint255, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}; polynomial_dfs_view b = {7, b_v}; a += b; std::vector c_v = { - 0x4e_cppui_modular253, - 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_cppui_modular253, - 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_cppui_modular253, - 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_cppui_modular253, - 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_cppui_modular253, - 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_cppui_modular253, - 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_cppui_modular253}; + 0x4e_big_uint255, + 0x2984a53ad76597710bc6e589547653b47dcce72f84e0617332e6e0761851f4a9_big_uint255, + 0x73eda753299d7d4078c0a4bd957794986b93a3e08bd45bfefff1fffefffffffb_big_uint255, + 0x195e04ac5e7749b26f0033b1486ae23bed8b1011de0d893be16ec12aecd863c2_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffff_big_uint255, + 0x4a6902185237e5dffc8fbf66155bd15f9620bcfadb4dfa8bcd291f88e7ae0b60_big_uint255, + 0x7ba79334a742a436ce82a0022742a0000000dfffffffffffa_big_uint255, + 0x5a8fa2a6cb26338cef1cd76f6106a8baa60293c9c1c0d2c31e813ed413279c47_big_uint255}; polynomial_dfs_view c_res = {7, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -240,26 +240,26 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_equal) { //{1, 3, 4, 25, 6, 7, 7, 2} std::vector a_v = { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint255, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint255, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint255, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint255, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint255, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint255, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint255, }; polynomial_dfs_view a = {7, a_v}; // {9, 3, 11, 14, 7, 1, 5, 8} std::vector b_v = { - 0x3a_cppui_modular253, - 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_cppui_modular253, - 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_cppui_modular253, - 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_cppui_modular253, - 0x6_cppui_modular253, - 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_cppui_modular253, - 0x9efc066844c3656b09836002c4c3600000012000000000000_cppui_modular253, - 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_cppui_modular253, + 0x3a_big_uint255, + 0x67f753af0b9db226952762685b47bb06f22600d84e5cf11425a7f17246806009_big_uint255, + 0x73eda753299d7d3e43797183bd6b8154bb87a3d6b3c85bfeffedffff00000001_big_uint255, + 0x4aad82754c8121ad40543e15922c725cee0fee48fc9d5b66d5fec3be9ec1d37_big_uint255, + 0x6_big_uint255, + 0xbf653a41dffcb283de80f4d367e56c971bba34839c56aeada640e8cb97f9ffc_big_uint255, + 0x9efc066844c3656b09836002c4c3600000012000000000000_big_uint255, + 0x6f42cf2bd4d56b26bf5efa79285ad71474b8a500e8108648929413c31613e2ce_big_uint255, }; polynomial_dfs_view b = {7, b_v}; @@ -267,14 +267,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_equal) { //-8, 0, -7, 11, -1, 6, 2, -6 std::vector c_v = { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_cppui_modular253, - 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000000fffffffffffc_cppui_modular253, - 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_cppui_modular253, - 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_cppui_modular253, - 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffffe_big_uint255, + 0xc626b501313ab1e267cf4e9a7ca9d15f45fc8fa8f24035bb6b8f7670b74d62b_big_uint255, + 0x8d51ccce760304d0ec030002760300000000fffffffffffc_big_uint255, + 0x4f05bd4d1ca98417b08383b7ab76e9e4eb2b04a7a2521ffb5371d968f72055f9_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe8_big_uint255, + 0x678b3c031689d2201cfc7c9a15a0e43ec727dadc24a458a349350897f48b29c8_big_uint255, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffefffefffffffd_big_uint255, + 0x24e7ea060cf3f93a7276bad4aa6144d100c89f87a9e23c03aca0269608dfa9fa_big_uint255, }; polynomial_dfs_view c_res = {7, c_v}; @@ -288,40 +288,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_equal) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_less_b) { // 1, 3, 4, 25, 6, 7, 7, 2 std::vector a_v = { - 0x37_cppui_modular253, - 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_cppui_modular253, - 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_cppui_modular253, - 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_cppui_modular253, - 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_cppui_modular253, - 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_cppui_modular253, - 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_cppui_modular253, + 0x37_big_uint255, + 0x6c17abf513dffc886a7f49f970801792c825cfdd829870dc60e8da51f53633_big_uint255, + 0x73eda753299d7d3ed0cb3e52336e8625a78aa3d929cb5bfeffeefffefffffffd_big_uint255, + 0x53b09574717196328488c7990499b10aba0c038c321bf5b1c0d1c5a4e10c7330_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffee_big_uint255, + 0x73818fa734899d485ae48be74c1f3b0838e37e245e69c38e23991724ae0ac9c4_big_uint255, + 0x9626e99b5d63351dfac330029d63300000010fffffffffffc_big_uint255, + 0x203d11deb82be718fe9bdd45c91a43e021c3a08591f4664d3f343a5a1ef38cc7_big_uint255, }; polynomial_dfs_view a = {7, a_v}; // 9, 3, 11, 14, 7 std::vector b_v = { - 0x2c_cppui_modular253, - 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_cppui_modular253, - 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_cppui_modular253, - 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_cppui_modular253, - 0xa_cppui_modular253, - 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_cppui_modular253, - 0x61283ccdf122134fa2421001b12210000000b000000000005_cppui_modular253, - 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_cppui_modular253, + 0x2c_big_uint255, + 0x4e10fd71a365a0a65335b02c5b209b200de95c55c9056ed99995e2b552bf20f1_big_uint255, + 0x73eda753299d7d4220b60b28f780a30b2f9ca3e7eddd5bfefff4ffff00000006_big_uint255, + 0x5ed0cc0c54a3e1c092ac452c3f70cd7c6266b11a0f0dc9955edad45d54276932_big_uint255, + 0xa_big_uint255, + 0x25dca9e18637dcae050bc199d2c3a6d98e1647e35b3aed2566801d49ad40df14_big_uint255, + 0x61283ccdf122134fa2421001b12210000000b000000000005_big_uint255, + 0x151cdb46d4f99b7b7b85f91da5eea094a914f2b2ccae9269a10f2ba1abd896d3_big_uint255, }; polynomial_dfs_view b = {4, b_v}; a -= b; //-8, 0, -7, 11, -1, 7, 7, 2 std::vector c_v = { - 0xb_cppui_modular253, - 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_cppui_modular253, - 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_cppui_modular253, - 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_cppui_modular253, - 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_cppui_modular253, - 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_cppui_modular253, - 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_cppui_modular253, + 0xb_big_uint255, + 0x2648c18d7b4bbc9e686ea725a7f1bcfcd89c6d7d147b859642cb0623ff361543_big_uint255, + 0x73eda753299d7d44e34f0b31458fbb1fcbaba3f43bec5bfefff9fffefffffff8_big_uint255, + 0x68cd70bb466b31ba25165a74cecabb93ab62f675230c881b61f6f1468ce509ff_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe4_big_uint255, + 0x4da4e5c5ae51c09a55d8ca4d795b942eaacd3641032ed668bd18f9db00c9eab0_big_uint255, + 0x34feaccd6c4121ce58812000ec41200000005fffffffffff7_big_uint255, + 0xb203697e3324b9d8315e428232ba34b78aeadd2c545d3e39e250eb8731af5f4_big_uint255, }; polynomial_dfs_view c_res = {7, c_v}; @@ -336,26 +336,26 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_less_a) { // 1, 3, 4, 25, 6 std::vector a_v = { - 0x27_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_cppui_modular253, - 0xc250799be244269f448420036244200000016000000000003_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_cppui_modular253, + 0x27_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e2_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff00000004_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d6262364_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff0_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d15_big_uint255, + 0xc250799be244269f448420036244200000016000000000003_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc93_big_uint255, }; polynomial_dfs_view a = {4, a_v}; // 9, 3, 11, 14, 7, 1, 5 std::vector b_v = { - 0x32_cppui_modular253, - 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_cppui_modular253, - 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_cppui_modular253, - 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_cppui_modular253, - 0xe_cppui_modular253, - 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_cppui_modular253, - 0x5853200109c1e3029381e00189c1e0000000a000000000000_cppui_modular253, - 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_cppui_modular253, + 0x32_big_uint255, + 0x19b9967b9f6b39bc04968a569c3a0628be4f3a86f3e2b7d92767e581bb4ae177_big_uint255, + 0x73eda753299d7d42ae07d7f76d83a7dc1b9fa3ea63e05bfefff5ffff00000001_big_uint255, + 0x4b9d19ddf7c2d17e9a88ea34c2f9262b700120efc86c79bcfea7d5dba58e1904_big_uint255, + 0xe_big_uint255, + 0x5a3410d78a324392ce78e75ef58c0ba7a5926999943fa425d8a41a7d44b51e8e_big_uint255, + 0x5853200109c1e3029381e00189c1e0000000a000000000000_big_uint255, + 0x28508d7531daabc2f8db5425be84780ed39882f5af6de242014c2a235a71e701_big_uint255, }; polynomial_dfs_view b = {6, b_v}; @@ -363,14 +363,14 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_subtraction_less_a) { a -= b; std::vector c_v = { - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_cppui_modular253, - 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_cppui_modular253, - 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_cppui_modular253, - 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000003_cppui_modular253, - 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_cppui_modular253, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff6_big_uint255, + 0x1fb4c04dae6b1f4a1106c51e2557fc93530c0c0ffea46d4e948eecc8180ab16b_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000004_big_uint255, + 0xf50da20b89009cfd9825c485fa5eeaa7ac0cf884e9760e247fcdfbe30980a60_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffe2_big_uint255, + 0x5438e7057b325dfbecebdfb00c3dc82e50a597e9294deeb06b6d1336e7f54e88_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000003_big_uint255, + 0x649ccd32710d737a8efeaef98207fc9e8908d4848972fb1cb8072040cf67f593_big_uint255, }; polynomial_dfs_view c_res = {6, c_v}; @@ -389,40 +389,40 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_multiplication_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_without_resize) { std::vector a_v = { - 0x21_cppui_modular253, - 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, - 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_cppui_modular253, + 0x21_big_uint255, + 0x396e56c94dd65906159d4f74c19202bc115b4696f2872527bbf6d249d35592e8_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x5aedf3feb052db4e740b467d229f14d5eac1f0781703da9f46a4b599d626236a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0x3a7f5089dbc72446882aef06f827fbd0a27a5d7fbd8f36d744112db52caa6d1b_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, + 0x18ffb354794aa1f554a02b1736ea9ca808e3b37738e2815fb9534a6529d9dc99_big_uint255, }; polynomial_dfs_view a = {3, a_v}; std::vector b_v = { - 0x17_cppui_modular253, - 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_cppui_modular253, - 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, - 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_cppui_modular253, - 0x11_cppui_modular253, - 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253, - 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_cppui_modular253, + 0x17_big_uint255, + 0x29188d8ee251b774835c663f5b05d39ceb04c15fa75dc9025685f79bc65cbe76_big_uint255, + 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, + 0x399b168b16a330c81db144204d730936873cb088abefef89209cfb850bcbf093_big_uint255, + 0x11_big_uint255, + 0x4ad519c4474bc5dfd4e50b86d2de6e5cb0fae2d97ce292fca990086339a3419d_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255, + 0x3a5290c812fa4c73f080fa2997ec64da843ef3442fcc6c75df4d0479f4340f80_big_uint255, }; polynomial_dfs_view b = {2, b_v}; a *= b; std::vector c_v = { - 0x2f7_cppui_modular253, - 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_cppui_modular253, - 0x13522f003a2269a89044690056226900000023000000000048_cppui_modular253, - 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_cppui_modular253, - 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_cppui_modular253, - 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_cppui_modular253, - 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_cppui_modular253}; + 0x2f7_big_uint255, + 0xc2586e4e154f9a00f944b66e8461739a25513b55c51ca863a0c1a243371d096_big_uint255, + 0x13522f003a2269a89044690056226900000023000000000048_big_uint255, + 0x25831fc923df5277d906a02b53722384e786b17159eb7cb5516c7a9ea3e135e7_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffe7a_big_uint255, + 0x67c8206e484883e5f76f26f4c2addc32f2b8916144fc9178c663e5dacc8e2e8f_big_uint255, + 0x73eda753299d7d34e10ad7cde7382f750f54a3acdd955bfeffdcffff00000049_big_uint255, + 0x4e6a878a05be2a9286699d8914dd99192ae6f17e04c2df49ae2385605c1ec93e_big_uint255}; polynomial_dfs_view c_res = {5, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -435,44 +435,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_without_resize) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_a) { std::vector a_v = { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, }; polynomial_dfs_view a = {3, a_v}; std::vector b_v = { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint255, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint255, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint255, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint255, + 0xd_big_uint255, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint255, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint255, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint255, }; polynomial_dfs_view b = {5, b_v}; a *= b; std::vector c_v = { - 0x60f_cppui_modular253, - 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}; + 0x60f_big_uint255, + 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint255, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint255, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint255, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint255, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint255, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint255, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint255, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint255, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint255, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint255, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint255, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint255, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint255, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint255}; polynomial_dfs_view c_res = {8, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -485,44 +485,44 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_a) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_b) { std::vector a_v = { - 0x2f_cppui_modular253, - 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_cppui_modular253, - 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_cppui_modular253, - 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_cppui_modular253, - 0xd_cppui_modular253, - 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_cppui_modular253, - 0x3dd3c99a53a1521b6741500113a1500000007000000000008_cppui_modular253, - 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_cppui_modular253, + 0x2f_big_uint255, + 0x32e8727c0b4c2f95f8ea8699ee05fa94dda79c66917bbd26f4d3eb49c6a4019f_big_uint255, + 0x73eda753299d7d4455fd3e62cf8cb64edfa8a3f1c5e95bfefff8ffff00000009_big_uint255, + 0x43a84116bc8a70b038611b99d2562cf13224f12ad78417e2ba18dcf1c80c49e0_big_uint255, + 0xd_big_uint255, + 0x410534d71e514dbe5f56eb2c3fde4764be5807d292c49ed80b4214b5395bfe60_big_uint255, + 0x3dd3c99a53a1521b6741500113a1500000007000000000008_big_uint255, + 0x3045663c6d130c8bd5d122b01309411fd956b2a20438441c45d1230d37f3b61f_big_uint255, }; polynomial_dfs_view a = {5, a_v}; std::vector b_v = { - 0x21_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_cppui_modular253, - 0xc250799be244269f448420036244200000015fffffffffffd_cppui_modular253, + 0x21_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9fffefffffffe_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffeffffffea_big_uint255, + 0xc250799be244269f448420036244200000015fffffffffffd_big_uint255, }; polynomial_dfs_view b = {3, b_v}; a *= b; std::vector c_v = { - 0x60f_cppui_modular253, - 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_cppui_modular253, - 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_cppui_modular253, - 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_cppui_modular253, - 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_cppui_modular253, - 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_cppui_modular253, - 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_cppui_modular253, - 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_cppui_modular253, - 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_cppui_modular253, - 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_cppui_modular253, - 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_cppui_modular253, - 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_cppui_modular253, - 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_cppui_modular253, - 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_cppui_modular253, - 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_cppui_modular253}; + 0x60f_big_uint255, + 0x6d13b656473f6fb30ca8b1bad81e6de32533efda233d7af0267de11113c42dfe_big_uint255, + 0x1ba37579e72ddd31448034c66d0c9c05d6d4440bc42f8c291614691a17caee93_big_uint255, + 0x1fb9403d5b7e99fd65aa34b9a80d8651511148e949d858b6cf3aa49b03f56360_big_uint255, + 0x73eda753299d7cf2a2b2d70695cded866deca2858c2d5bfeff64fffeffffff4f_big_uint255, + 0x270c8c72ef84d4f40592859d11b20417e6b44d040a8b017193798d7b8e32ca03_big_uint255, + 0x7b8d2c73340a34c0d54fc1c4bd76e36750a43c95233e2d8de3a2088a4328cb_big_uint255, + 0x6e359aacded395e1572c7d6650b9819ac85df73a6f4e6fe6f4797da6e6adf91_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffed6_big_uint255, + 0x1ca7c957ddc94dd855917093ee9b65b711219a0b02e57ac9e416dcb1258452c4_big_uint255, + 0x584a31d9426f9ed6c1659f7e3dbe52a8c61d5a63dd02cfd5e7a796e4e835109a_big_uint255, + 0x52cd53da62d32e3299594e036edf1ebc27b1a1c2c6d4ac71dec724e0c55944ec_big_uint255, + 0x559087010173d3ea7ee5d1017d73d10000009affffffffff4e_big_uint255, + 0x371342853ead697d558b0c6c7aa042f9022d77750f0ac0d26485b4c03884b499_big_uint255, + 0x73721a26b66974539fb88c09a3bb4a78a3390559c9a71dd174605df675bcd662_big_uint255, + 0x6e7160e3c6fbf795fb196134578308430a76778e089ecbd6e0229ea7c8467781_big_uint255}; polynomial_dfs_view c_res = {8, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -535,40 +535,40 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_b) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_multiplication_resize_both) { std::vector a_v = { - 0x37_cppui_modular253, - 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_cppui_modular253, - 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_cppui_modular253, - 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_cppui_modular253, - 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_cppui_modular253, - 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_cppui_modular253, - 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_cppui_modular253, - 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_cppui_modular253}; + 0x37_big_uint255, + 0x6C17ABF513DFFC886A7F49F970801792C825CFDD829870DC60E8DA51F53633_big_uint255, + 0x73EDA753299D7D3ED0CB3E52336E8625A78AA3D929CB5BFEFFEEFFFEFFFFFFFD_big_uint255, + 0x53B09574717196328488C7990499B10ABA0C038C321BF5B1C0D1C5A4E10C7330_big_uint255, + 0x73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFEFFFFFFEE_big_uint255, + 0x73818FA734899D485AE48BE74C1F3B0838E37E245E69C38E23991724AE0AC9C4_big_uint255, + 0x9626E99B5D63351DFAC330029D63300000010FFFFFFFFFFFC_big_uint255, + 0x203D11DEB82BE718FE9BDD45C91A43E021C3A08591F4664D3F343A5A1EF38CC7_big_uint255}; polynomial_dfs_view a = {7, a_v}; std::vector b_v = { - 0x17_cppui_modular253, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_cppui_modular253, 0x11_cppui_modular253, - 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_cppui_modular253}; + 0x17_big_uint255, 0x1a7f5666b62090e72c4090007620900000002fffffffffffe_big_uint255, 0x11_big_uint255, + 0x73eda753299d7d468b44719ca798c9928fb4a3fb9df55bfefffcfffeffffffff_big_uint255}; polynomial_dfs_view b = {2, b_v}; a *= b; std::vector c_v = { - 0x4f1_cppui_modular253, - 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_cppui_modular253, - 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_cppui_modular253, - 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_cppui_modular253, - 0xc250799be244269f44842003624420000001600000000003b_cppui_modular253, - 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_cppui_modular253, - 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_cppui_modular253, - 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_cppui_modular253, - 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_cppui_modular253, - 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_cppui_modular253, - 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_cppui_modular253, - 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_cppui_modular253, - 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_cppui_modular253, - 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_cppui_modular253, - 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_cppui_modular253}; + 0x4f1_big_uint255, + 0x18423f38a6347025203d1306ea24214fcbc2e3f5e167ba11285a7f2183727698_big_uint255, + 0x1d4820215af065c49347299eb6dd938076c46a3db4d4f73250a46c4f2e2edaeb_big_uint255, + 0x6142914f3b8f8c83dbae4715ed94fd03f84c4534f9cb1e4188a8db267f2f219b_big_uint255, + 0xc250799be244269f44842003624420000001600000000003b_big_uint255, + 0x4212e41081d18a85121f61c630783936244c4bde81b37f0f58d05901952e58ef_big_uint255, + 0x148cedc402ae498492c4d90bffb69418494de2e305b671656a88171cc5def860_big_uint255, + 0x5cdb267102977e382df877ad594da96bb37b7a71a5392773dfe1c33e2188afba_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffebe_big_uint255, + 0x5ba3e41ad92b63df524868386e6ed2bf7aed342f687f8158c8c87cd5b1343b8_big_uint255, + 0x56a58731cead171bd7e046caa88cbb178ac537f6a0f564ccae9f93afd1d12474_big_uint255, + 0x12bf0a92313848004fcce9b9a8167b86b9595983df5f4987568536a4601e5450_big_uint255, + 0x73eda753299d7d3c0e323e49e55f6e110b7ba3ccdbbc5bfeffe9ffff0000003c_big_uint255, + 0x13de45c85404cdde0cd67ace68479511641ba792a6772ac8f4fca00e8c4beb9a_big_uint255, + 0x5f60b98f26ef342b6887669ab422cd5a5ca3c2eea47bea999633e8e23a2106ff_big_uint255, + 0x16fe8c53e3dba6560be2697c242189564a3e2834817d28c13e3c2af4ff29d935_big_uint255}; polynomial_dfs_view c_res = {9, c_v}; BOOST_CHECK_EQUAL(c_res.size(), a.size()); @@ -584,35 +584,35 @@ BOOST_AUTO_TEST_SUITE(polynomial_dfs_view_division_test_suite) BOOST_AUTO_TEST_CASE(polynomial_dfs_view_division) { // {5, 0, 0, 13, 0, 1}; std::vector a_v = { - 0x13_cppui_modular253, - 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}; + 0x13_big_uint255, + 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint255}; polynomial_dfs_view a = {5, a_v}; //{13, 0, 1}; std::vector b_v = { - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, + 0xe_big_uint255, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint255, + 0xc_big_uint255, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint255, + 0xe_big_uint255, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint255, + 0xc_big_uint255, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint255, }; polynomial_dfs_view b = {2, b_v}; a /= b; std::vector q_v = { - 0x1_cppui_modular253, - 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_cppui_modular253, - 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_cppui_modular253, - 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_cppui_modular253, - 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_cppui_modular253, - 0x8d51ccce760304d0ec030002760300000001000000000000_cppui_modular253, - 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_cppui_modular253}; + 0x1_big_uint255, + 0x1333b22e5ce11044babc5affca86bf658e74903694b04fd86037fe81ae99502e_big_uint255, + 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff00000001_big_uint255, + 0x345766f603fa66e78c0625cd70d77ce2b38b21c28713b7007228fd3397743f7a_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000000_big_uint255, + 0x60b9f524ccbc6d03787d7d083f1b189fc54913cc6b4e0c269fc8017d5166afd3_big_uint255, + 0x8d51ccce760304d0ec030002760300000001000000000000_big_uint255, + 0x3f96405d25a31660a733b23a98ca5b22a032824078eaa4fe8dd702cb688bc087_big_uint255}; polynomial_dfs_view q_ans = {3, q_v}; // {0, 0, 0, 1}; BOOST_CHECK_EQUAL(q_ans.size(), a.size()); @@ -625,28 +625,28 @@ BOOST_AUTO_TEST_CASE(polynomial_dfs_view_division) { BOOST_AUTO_TEST_CASE(polynomial_dfs_view_modulus) { // {5, 0, 0, 13, 0, 1}; std::vector a_v = { - 0x13_cppui_modular253, - 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_cppui_modular253, - 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_cppui_modular253, - 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_cppui_modular253, - 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_cppui_modular253, - 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_cppui_modular253, - 0x69fd599ad882439cb1024001d88240000000c000000000005_cppui_modular253, - 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_cppui_modular253}; + 0x13_big_uint255, + 0x515afe1189d5ef4dbc50a127ce5e634034a28d0005e1fafd70aeef634654d2e0_big_uint255, + 0x73eda753299d7d4193643e5a817d9e3a4399a3e577da5bfefff3ffff00000006_big_uint255, + 0x519843b006c2b71461725846c0416002ece7f29b47582f326bdcdd22024de904_big_uint255, + 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfefffffffefffffff8_big_uint255, + 0x2292a9419fc78dfa76e936e03b4374c51f1b1702fa1c61018f51109bb9ab2d2b_big_uint255, + 0x69fd599ad882439cb1024001d88240000000c000000000005_big_uint255, + 0x225563a322dac633d1c77fc14960780266d5b167b8a62ccc942322dcfdb21707_big_uint255}; polynomial_dfs_view a = {5, a_v}; //{13, 0, 1}; std::vector b_v = { - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, - 0xe_cppui_modular253, 0x8d51ccce760304d0ec03000276030000000100000000000d_cppui_modular253, - 0xc_cppui_modular253, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_cppui_modular253, + 0xe_big_uint255, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint255, + 0xc_big_uint255, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint255, + 0xe_big_uint255, 0x8d51ccce760304d0ec03000276030000000100000000000d_big_uint255, + 0xc_big_uint255, 0x73eda753299d7d47a5e80b39939ed33467baa40089fb5bfefffeffff0000000e_big_uint255, }; polynomial_dfs_view b = {2, b_v}; a %= b; - std::vector r_v = {0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, - 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253, 0x5_cppui_modular253}; + std::vector r_v = {0x5_big_uint255, 0x5_big_uint255, 0x5_big_uint255, 0x5_big_uint255, + 0x5_big_uint255, 0x5_big_uint255, 0x5_big_uint255, 0x5_big_uint255}; polynomial_dfs_view r_ans = {0, r_v}; //{5}; BOOST_CHECK_EQUAL(r_ans.size(), a.size()); diff --git a/parallel-crypto3/libs/parallel-zk/CMakeLists.txt b/parallel-crypto3/libs/parallel-zk/CMakeLists.txt index e9f22b2953..8cc3f2a436 100644 --- a/parallel-crypto3/libs/parallel-zk/CMakeLists.txt +++ b/parallel-crypto3/libs/parallel-zk/CMakeLists.txt @@ -45,7 +45,6 @@ target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE ${CMAKE_WORKSPACE_NAME}::core crypto3::algebra - crypto3::block crypto3::hash crypto3::multiprecision # crypto3::marshalling-zk diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/aggregate.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/aggregate.hpp index f551be28eb..988ed84b0b 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/aggregate.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/aggregate.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP -#define CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP + +#ifdef CRYPTO3_ZK_SNARK_ALGORITHMS_AGGREGATE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/generate.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/generate.hpp index 2348671816..2710a9adc4 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/generate.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/generate.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_ALGORITHMS_GENERATE_HPP -#define CRYPTO3_ZK_SNARK_ALGORITHMS_GENERATE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_GENERATE_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_GENERATE_HPP + +#ifdef CRYPTO3_ZK_SNARK_ALGORITHMS_GENERATE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/prove.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/prove.hpp index 2212df49f1..2d4b3bbe24 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/prove.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/prove.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_ALGORITHMS_PROVE_HPP -#define CRYPTO3_ZK_SNARK_ALGORITHMS_PROVE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_PROVE_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_PROVE_HPP + +#ifdef CRYPTO3_ZK_SNARK_ALGORITHMS_PROVE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/verify.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/verify.hpp index 4ac9b4aa8e..882b1d8103 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/verify.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/algorithms/verify.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP -#define CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP + +#ifdef CRYPTO3_ZK_SNARK_ALGORITHMS_VERIFY_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/batched_commitment.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/batched_commitment.hpp index affd7c2cde..980f1717cc 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/batched_commitment.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/batched_commitment.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_STUB_PLACEHOLDER_COMMITMENT_SCHEME_HPP -#define CRYPTO3_ZK_STUB_PLACEHOLDER_COMMITMENT_SCHEME_HPP +#ifndef PARALLEL_CRYPTO3_ZK_STUB_PLACEHOLDER_COMMITMENT_SCHEME_HPP +#define PARALLEL_CRYPTO3_ZK_STUB_PLACEHOLDER_COMMITMENT_SCHEME_HPP + +#ifdef CRYPTO3_ZK_STUB_PLACEHOLDER_COMMITMENT_SCHEME_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp index 00d4590430..b636ac0ff8 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_compile_time_size.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_COMPILE_TIME_SIZE_HPP -#define CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_COMPILE_TIME_SIZE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_COMPILE_TIME_SIZE_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_COMPILE_TIME_SIZE_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_COMPILE_TIME_SIZE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -76,9 +80,9 @@ namespace nil { typedef typename containers::merkle_tree merkle_tree_type; typedef typename containers::merkle_proof merkle_proof_type; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = marshalling::option::big_endian; using field_element_type = - nil::crypto3::marshalling::types::field_element, + nil::crypto3::marshalling::types::field_element, typename FieldType::value_type>; using precommitment_type = merkle_tree_type; diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp index 33ec6827f8..2d47426b67 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_batched_fri_runtime_size.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_HPP -#define CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_BASIC_BATCHED_FRI_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -74,9 +78,9 @@ namespace nil { typedef typename containers::merkle_tree merkle_tree_type; typedef typename containers::merkle_proof merkle_proof_type; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; using field_element_type = - nil::crypto3::marshalling::types::field_element, + nil::crypto3::marshalling::types::field_element, typename FieldType::value_type>; using precommitment_type = merkle_tree_type; diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp index b132fa934e..96c6c3f5b1 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/basic_fri.hpp @@ -28,8 +28,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_COMMITMENTS_BASIC_FRI_HPP -#define CRYPTO3_ZK_COMMITMENTS_BASIC_FRI_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_BASIC_FRI_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_BASIC_FRI_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_BASIC_FRI_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -100,9 +104,9 @@ namespace nil { // For initial proof only, size of all values are similar typedef std::vector polynomials_values_type; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; using field_element_type = nil::crypto3::marshalling::types::field_element< - nil::marshalling::field_type, + nil::crypto3::marshalling::field_type, typename FieldType::value_type >; diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp index 19dc1db793..fc2b797c84 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_knowledge_commitment.hpp @@ -23,12 +23,16 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_ELEMENT_HPP -#define CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_ELEMENT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_ELEMENT_HPP +#define PARALLEL_CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_ELEMENT_HPP + +#ifdef CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_ELEMENT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include -#include +#include namespace nil { namespace crypto3 { @@ -187,20 +191,18 @@ namespace nil { template - element_kc operator*(const boost::multiprecision::number &lhs, + std::size_t Bits> + element_kc operator*(const nil::crypto3::multiprecision::big_uint &lhs, const element_kc &rhs) { return element_kc(lhs * rhs.g, lhs * rhs.h); } template + std::size_t Bits> element_kc operator*(const element_kc &lhs, - const boost::multiprecision::number &rhs) { + const nil::crypto3::multiprecision::big_uint &rhs) { return element_kc(rhs * lhs.g, rhs * lhs.h); } diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_proof_of_knowledge.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_proof_of_knowledge.hpp index 2a7e72dc13..2d9adb35d5 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_proof_of_knowledge.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/element_proof_of_knowledge.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_ELEMENT_HPP -#define CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_ELEMENT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_ELEMENT_HPP +#define PARALLEL_CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_ELEMENT_HPP + +#ifdef CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_ELEMENT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/eval_storage.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/eval_storage.hpp index ee1a312a2c..cf113321a9 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/eval_storage.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/eval_storage.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLACEHOLDER_EVAL_STORAGE_HPP -#define CRYPTO3_ZK_PLACEHOLDER_EVAL_STORAGE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLACEHOLDER_EVAL_STORAGE_HPP +#define PARALLEL_CRYPTO3_ZK_PLACEHOLDER_EVAL_STORAGE_HPP + +#ifdef CRYPTO3_ZK_PLACEHOLDER_EVAL_STORAGE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/fold_polynomial.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/fold_polynomial.hpp index 8e5a9e3319..0604e356bd 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/fold_polynomial.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/fold_polynomial.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_COMMITMENTS_DETAIL_FOLD_POLYNOMIAL_HPP -#define CRYPTO3_ZK_COMMITMENTS_DETAIL_FOLD_POLYNOMIAL_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_DETAIL_FOLD_POLYNOMIAL_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_DETAIL_FOLD_POLYNOMIAL_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_DETAIL_FOLD_POLYNOMIAL_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -85,7 +89,9 @@ namespace nil { typename FieldType::value_type acc = alpha; for (std::size_t i = 0; i <= f_folded.degree(); i++) { - f_folded[i] = two_inversed * ((1u + acc) * f[i] + (1u - acc) * f[domain->size() / 2 + i]); + f_folded[i] = two_inversed * ( + (typename FieldType::value_type(1u) + acc) * f[i] + + (typename FieldType::value_type(1u) - acc) * f[domain->size() / 2 + i]); acc *= omega_inversed; } diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/accumulator.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/accumulator.hpp deleted file mode 100644 index f4cd10ee4f..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/accumulator.hpp +++ /dev/null @@ -1,164 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_ACCUMULATOR_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_ACCUMULATOR_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - struct powers_of_tau_accumulator { - typedef CurveType curve_type; - using g1_type = typename CurveType::template g1_type<>; - using g2_type = typename CurveType::template g2_type<>; - using g1_value_type = typename g1_type::value_type; - using g2_value_type = typename g2_type::value_type; - using field_value_type = typename curve_type::scalar_field_type::value_type; - using private_key_type = powers_of_tau_private_key; - - // The maximum number of multiplication gates supported - static constexpr unsigned tau_powers_length = TauPowersLength; - - // More tau powers are needed in G1 because the Groth16 H query - // includes terms of the form tau^i * (tau^m - 1) = tau^(i+m) - tau^i - // where the largest i = m - 2, requiring the computation of tau^(2m - 2) - // and thus giving us a vector length of 2m - 1. - static constexpr unsigned tau_powers_g1_length = (tau_powers_length << 1) - 1; - - // tau^0, tau^1, tau^2, ..., tau^{tau_powers_g1_length - 1} - std::vector tau_powers_g1; - // tau^0, tau^1, tau^2, ..., tau^{tau_powers_length - 1} - std::vector tau_powers_g2; - // alpha * tau^0, alpha * tau^1, alpha * tau^2, ..., alpha * tau^{tau_powers_length - 1} - std::vector alpha_tau_powers_g1; - // beta * tau^0, beta * tau^1, beta * tau^2, ..., beta * tau^{tau_powers_length - 1} - std::vector beta_tau_powers_g1; - // beta - g2_value_type beta_g2; - - powers_of_tau_accumulator() : - tau_powers_g1(tau_powers_g1_length, g1_value_type::one()), - tau_powers_g2(tau_powers_length, g2_value_type::one()), - alpha_tau_powers_g1(tau_powers_length, g1_value_type::one()), - beta_tau_powers_g1(tau_powers_length, g1_value_type::one()), - beta_g2(g2_value_type::one()) { - } - - powers_of_tau_accumulator(const std::vector &tau_powers_g1, - const std::vector &tau_powers_g2, - const std::vector &alpha_tau_powers_g1, - const std::vector &beta_tau_powers_g1, - g2_value_type beta_g2) : - tau_powers_g1(tau_powers_g1), - tau_powers_g2(tau_powers_g2), alpha_tau_powers_g1(alpha_tau_powers_g1), - beta_tau_powers_g1(beta_tau_powers_g1), beta_g2(beta_g2) { - BOOST_ASSERT(tau_powers_g1.size() == tau_powers_g1_length); - BOOST_ASSERT(tau_powers_g2.size() == tau_powers_length); - BOOST_ASSERT(alpha_tau_powers_g1.size() == tau_powers_length); - BOOST_ASSERT(beta_tau_powers_g1.size() == tau_powers_length); - } - - void transform(const private_key_type &key) { - std::vector taupowers; - - // Construct exponents - // This could be parallelized - auto acc = field_value_type::one(); - for (std::size_t i = 0; i < tau_powers_g1_length; ++i) { - // taupowers[i] = tau^i - taupowers.emplace_back(acc); - acc *= key.tau; - } - - // naive exp, could be parallelized - naive_batch_exp( - tau_powers_g1.begin(), tau_powers_g1.end(), taupowers.begin(), taupowers.end()); - - naive_batch_exp( - tau_powers_g2.begin(), tau_powers_g2.end(), taupowers.begin(), taupowers.end()); - - naive_batch_exp_with_coeff(alpha_tau_powers_g1.begin(), - alpha_tau_powers_g1.end(), - taupowers.begin(), - taupowers.end(), - key.alpha); - - naive_batch_exp_with_coeff(beta_tau_powers_g1.begin(), - beta_tau_powers_g1.end(), - taupowers.begin(), - taupowers.end(), - key.beta); - - beta_g2 = beta_g2 * key.beta; - } - - private: - template - void naive_batch_exp(const PointIterator &bases_begin, - const PointIterator &bases_end, - const ScalarIterator &pow_begin, - const ScalarIterator &pow_end) { - BOOST_ASSERT(std::distance(bases_begin, bases_end) <= std::distance(pow_begin, pow_end)); - - auto base_iter = bases_begin; - auto pow_iter = pow_begin; - while (base_iter < bases_end) { - *base_iter = *pow_iter * *base_iter; - ++base_iter; - ++pow_iter; - } - } - - template - void naive_batch_exp_with_coeff(const PointIterator &bases_begin, - const PointIterator &bases_end, - const ScalarIterator &pow_begin, - const ScalarIterator &pow_end, - const field_value_type &coeff) { - BOOST_ASSERT(std::distance(bases_begin, bases_end) <= std::distance(pow_begin, pow_end)); - - auto base_iter = bases_begin; - auto pow_iter = pow_begin; - while (base_iter < bases_end) { - *base_iter = (coeff * *pow_iter) * *base_iter; - ++base_iter; - ++pow_iter; - } - } - }; - - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_ACCUMULATOR_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/private_key.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/private_key.hpp deleted file mode 100644 index 241dd49e9b..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/private_key.hpp +++ /dev/null @@ -1,49 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_PRIVATE_KEY_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_PRIVATE_KEY_HPP - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - // Contains the secrets τ, α and β that the participant of the ceremony must destroy. - struct powers_of_tau_private_key { - typedef CurveType curve_type; - using field_value_type = typename CurveType::scalar_field_type::value_type; - - field_value_type tau; - field_value_type alpha; - field_value_type beta; - }; - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_PRIVATE_KEY_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/public_key.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/public_key.hpp deleted file mode 100644 index e8b32e66df..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/public_key.hpp +++ /dev/null @@ -1,55 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_PUBLIC_KEY_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_PUBLIC_KEY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - struct powers_of_tau_public_key { - typedef CurveType curve_type; - - typedef commitments::detail::element_pok pok_type; - - pok_type tau_pok; - pok_type alpha_pok; - pok_type beta_pok; - - powers_of_tau_public_key(pok_type tau_pok, pok_type alpha_pok, pok_type beta_pok) : - tau_pok(tau_pok), alpha_pok(alpha_pok), beta_pok(beta_pok) { - } - }; - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_PUBLIC_KEY_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/result.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/result.hpp deleted file mode 100644 index a3ab19e737..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/powers_of_tau/result.hpp +++ /dev/null @@ -1,127 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_RESULT_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_RESULT_HPP - -#include - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - namespace detail { - template - struct powers_of_tau_result { - typedef CurveType curve_type; - using g1_type = typename CurveType::template g1_type<>; - using g2_type = typename CurveType::template g2_type<>; - using g1_value_type = typename g1_type::value_type; - using g2_value_type = typename g2_type::value_type; - using scalar_field_type = typename curve_type::scalar_field_type; - using scalar_field_value_type = typename scalar_field_type::value_type; - - g1_value_type alpha_g1; - g1_value_type beta_g1; - g2_value_type beta_g2; - std::vector coeffs_g1; - std::vector coeffs_g2; - std::vector alpha_coeffs_g1; - std::vector beta_coeffs_g1; - std::vector h; - - powers_of_tau_result(const g1_value_type &alpha_g1, - const g1_value_type &beta_g1, - const g2_value_type &beta_g2, - const std::vector &coeffs_g1, - const std::vector &coeffs_g2, - const std::vector &alpha_coeffs_g1, - const std::vector &beta_coeffs_g1, - const std::vector &h) : - alpha_g1(alpha_g1), - beta_g1(beta_g1), beta_g2(beta_g2), coeffs_g1(coeffs_g1), coeffs_g2(coeffs_g2), - alpha_coeffs_g1(alpha_coeffs_g1), beta_coeffs_g1(beta_coeffs_g1), h(h) { - } - - template - static powers_of_tau_result - from_accumulator(const powers_of_tau_accumulator &acc, - std::size_t m) { - - auto alpha_g1 = acc.alpha_tau_powers_g1[0]; - auto beta_g1 = acc.beta_tau_powers_g1[0]; - auto beta_g2 = acc.beta_g2; - - auto domain_g1 = math::make_evaluation_domain(m); - auto domain_g2 = math::make_evaluation_domain(m); - - BOOST_ASSERT(domain_g1->m <= TauPowersLength); - - std::vector coeffs_g1 = domain_g1->evaluate_all_lagrange_polynomials( - acc.tau_powers_g1.begin(), acc.tau_powers_g1.end()); - - std::vector coeffs_g2 = domain_g2->evaluate_all_lagrange_polynomials( - acc.tau_powers_g2.begin(), acc.tau_powers_g2.end()); - - std::vector alpha_coeffs_g1 = domain_g1->evaluate_all_lagrange_polynomials( - acc.alpha_tau_powers_g1.begin(), acc.alpha_tau_powers_g1.end()); - - std::vector beta_coeffs_g1 = domain_g1->evaluate_all_lagrange_polynomials( - acc.beta_tau_powers_g1.begin(), acc.beta_tau_powers_g1.end()); - - std::vector h(m - 1, g1_value_type::zero()); - - math::polynomial Z = domain_g1->get_vanishing_polynomial(); - - // H[i] = t**i * Z(t) - for (std::size_t i = 0; i < m - 1; ++i) { - for (std::size_t j = 0; j < Z.size(); ++j) { - if (!Z[j].is_zero()) { - h[i] = h[i] + Z[j] * acc.tau_powers_g1[i + j]; - } - } - } - - return powers_of_tau_result(std::move(alpha_g1), - std::move(beta_g1), - std::move(beta_g2), - std::move(coeffs_g1), - std::move(coeffs_g2), - std::move(alpha_coeffs_g1), - std::move(beta_coeffs_g1), - std::move(h)); - } - }; - } // namespace detail - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_RESULT_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/proof_of_work.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/proof_of_work.hpp index 57a038c4ad..643699eff8 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/proof_of_work.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/proof_of_work.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_PROOF_OF_WORK_HPP -#define CRYPTO3_PROOF_OF_WORK_HPP +#ifndef PARALLEL_CRYPTO3_PROOF_OF_WORK_HPP +#define PARALLEL_CRYPTO3_PROOF_OF_WORK_HPP + +#ifdef CRYPTO3_PROOF_OF_WORK_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -174,7 +178,7 @@ namespace nil { return pow_seed + (std::size_t)pow_value_offset; } - static inline bool verify(transcript_type &transcript, value_type proof_of_work, std::size_t GrindingBits=16) { + static inline bool verify(transcript_type &transcript, value_type proof_of_work, std::size_t GrindingBits = 16) { transcript(proof_of_work); integral_type mask = (GrindingBits > 0 ? diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/vector_pairs.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/vector_pairs.hpp index df44eb13d2..c9241dee9f 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/vector_pairs.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/detail/polynomial/vector_pairs.hpp @@ -1,5 +1,9 @@ -#ifndef CRYPTO3_ZK_VECTOR_PAIRS_HPP -#define CRYPTO3_ZK_VECTOR_PAIRS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_VECTOR_PAIRS_HPP +#define PARALLEL_CRYPTO3_ZK_VECTOR_PAIRS_HPP + +#ifdef CRYPTO3_ZK_VECTOR_PAIRS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/parameters/offset.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/parameters/offset.hpp index ba66682c22..4193cf3763 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/parameters/offset.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/parameters/offset.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_PUBKEY_ACCUMULATORS_PARAMETERS_KEY_HPP -#define CRYPTO3_PUBKEY_ACCUMULATORS_PARAMETERS_KEY_HPP +#ifndef PARALLEL_CRYPTO3_PUBKEY_ACCUMULATORS_PARAMETERS_KEY_HPP +#define PARALLEL_CRYPTO3_PUBKEY_ACCUMULATORS_PARAMETERS_KEY_HPP + +#ifdef CRYPTO3_PUBKEY_ACCUMULATORS_PARAMETERS_KEY_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/sparse.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/sparse.hpp index bc2ac11025..e7f2a62fbb 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/sparse.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/accumulators/sparse.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ACCUMULATORS_ZK_SPARSE_HPP -#define CRYPTO3_ACCUMULATORS_ZK_SPARSE_HPP +#ifndef PARALLEL_CRYPTO3_ACCUMULATORS_ZK_SPARSE_HPP +#define PARALLEL_CRYPTO3_ACCUMULATORS_ZK_SPARSE_HPP + +#ifdef CRYPTO3_ACCUMULATORS_ZK_SPARSE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/fri.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/fri.hpp index 5aa5462ed7..e91b0011c3 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/fri.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/fri.hpp @@ -27,8 +27,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_FRI_COMMITMENT_SCHEME_HPP -#define CRYPTO3_ZK_FRI_COMMITMENT_SCHEME_HPP +#ifndef PARALLEL_CRYPTO3_ZK_FRI_COMMITMENT_SCHEME_HPP +#define PARALLEL_CRYPTO3_ZK_FRI_COMMITMENT_SCHEME_HPP + +#ifdef CRYPTO3_ZK_FRI_COMMITMENT_SCHEME_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kimchi_pedersen.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kimchi_pedersen.hpp deleted file mode 100644 index e4556086f0..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kimchi_pedersen.hpp +++ /dev/null @@ -1,763 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_KIMCHI_PEDERSEN_COMMITMENT_SCHEME_HPP -#define CRYPTO3_ZK_KIMCHI_PEDERSEN_COMMITMENT_SCHEME_HPP - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - - template - struct kimchi_pedersen { - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - typedef typename CurveType::template g1_type group_type; - - typedef algebra::policies::multiexp_method_BDLO12 multiexp_method; - - typedef zk::transcript::DefaultFqSponge sponge_type; - typedef snark::group_map group_map_type; - typedef snark::kimchi_functions functions; - // using multiexp = algebra::multiexp_with_mixed_addition; - - struct params_type { - // vector of n distinct curve points of unknown discrete logarithm - std::vector g; - // distinct curve point of unknown discrete logarithm for blinding the commitment - typename group_type::value_type h; - // coefficients for the curve endomorphism - typename scalar_field_type::value_type endo_r; - typename base_field_type::value_type endo_q; - std::unordered_map > lagrange_bases; - - - // define parameters of protocol - params_type(std::vector &g, typename group_type::value_type &h, - typename scalar_field_type::value_type &endo_r, - typename base_field_type::value_type &endo_q, - std::unordered_map > &lagrange_bases) - : - g(g), h(h), endo_r(endo_r), endo_q(endo_q), lagrange_bases(lagrange_bases) {} - - params_type(std::size_t depth) : h(algebra::random_element()), - endo_r(algebra::random_element()), - endo_q(algebra::random_element()) { - for (int i = 0; i < depth; ++i) { - g.push_back(algebra::random_element()); - } - } - - params_type() = default; - - void add_lagrange_basis(math::basic_radix2_domain &domain) { - std::size_t n = domain.size(); - BOOST_ASSERT_MSG(n <= g.size(), - "add lagrange basis: Domain size {} larger than SRS size {}"); - - if (lagrange_bases.contains(n)) { - return; - } - - // std::vector lg(g.begin(), g.begin() + n); - lagrange_bases[n] = std::vector(g.begin(), g.begin() + n); - - domain.inverse_fft(lagrange_bases[n]); - } - }; - - template - struct poly_comm { - typedef poly_comm poly_comm_type; - std::vector unshifted; - value_type shifted; - - poly_comm() = default; - - poly_comm(std::vector &unshifted, value_type &shifted) : - unshifted(unshifted), shifted(shifted) {} - - static poly_comm multi_scalar_mul(std::vector> &commits, - std::vector &elm) { - - if (commits.empty()) { - return poly_comm(); - } - std::vector points; - for (auto &commit: commits) { - points.push_back(commit.shifted); - } - value_type shifted = algebra::multiexp_with_mixed_addition( - points.begin(), points.end(), elm.begin(), elm.end(), 1); - - std::vector unshifted; - std::size_t n = commits.front().unshifted.size(); - for (auto &commit: commits) { - if (n > commit.unshifted.size()) { - n = commit.unshifted.size(); - } - } - // *std::max_element(commits.begin(), commits.end(), [](auto &first, auto &second){ - // return first.unshifted.size() < second.unshifted.size(); - // }); - - for (int i = 0; i < n; ++i) { - std::vector points_for_unshifted; - std::vector scalars_for_unshifted; - for (int j = 0; j < commits.size(); ++j) { - if (i < commits[j].unshifted.size()) { - points_for_unshifted.push_back(commits[j].unshifted[i]); - scalars_for_unshifted.push_back(elm[j]); - } - } - - unshifted.push_back(algebra::multiexp_with_mixed_addition( - points_for_unshifted.begin(), points_for_unshifted.end(), - scalars_for_unshifted.begin(), scalars_for_unshifted.end(), 1)); - } - - return poly_comm(unshifted, shifted); - } - - poly_comm_type chunk_commitment(typename scalar_field_type::value_type &zeta_n) { - value_type res; - for (auto iter = unshifted.rbegin(); iter < unshifted.rend(); ++iter) { - res = res * zeta_n; - res = res + (*iter); - } - - std::vector unshifted_temp = {res}; - return poly_comm_type( - unshifted_temp, - shifted - ); - } - - poly_comm_type operator-(poly_comm_type other) { - std::vector unshifted_temp; - - std::size_t n1 = this->unshifted.size(); - std::size_t n2 = other.unshifted.size(); - std::size_t min_size = std::min(n1, n2); - // std::size_t max_size = std::max(n1, n2); - - int i = 0; - for (; i < min_size; ++i) { - unshifted_temp.push_back(this->unshifted[i] - other.unshifted[i]); - } - for (; i < n1; ++i) { - unshifted_temp.push_back(this->unshifted[i]); - } - for (; i < n2; ++i) { - unshifted_temp.push_back(other.unshifted[i]); - } - - value_type shifted_temp; - if (this->shifted == value_type::zero()) { - shifted_temp = other.shifted; - } else if (other.shifted == value_type::zero()) { - shifted_temp = this->shifted; - } else { - shifted_temp = this->shifted - other.shifted; - } - - return poly_comm_type(unshifted_temp, shifted_temp); - } - - poly_comm_type operator+(poly_comm_type other) { - std::vector unshifted_temp; - - std::size_t n1 = this->unshifted.size(); - std::size_t n2 = other.unshifted.size(); - std::size_t min_size = std::min(n1, n2); - // std::size_t max_size = std::max(n1, n2); - - int i = 0; - for (; i < min_size; ++i) { - unshifted_temp.push_back(this->unshifted[i] + other.unshifted[i]); - } - for (; i < n1; ++i) { - unshifted_temp.push_back(this->unshifted[i]); - } - for (; i < n2; ++i) { - unshifted_temp.push_back(other.unshifted[i]); - } - - value_type shifted_temp; - if (!this->shifted) { - shifted_temp = other.shifted; - } else if (!other.shifted) { - shifted_temp = this->shifted; - } else { - shifted_temp = this->shifted + other.shifted; - } - - return poly_comm_type(unshifted_temp, shifted_temp); - } - - poly_comm_type scale(typename scalar_field_type::value_type c) { - std::vector unshifted_temp; - - for (auto &a: unshifted) { - unshifted_temp.push_back(a * c); - } - - value_type shifted_temp = shifted * c; - return poly_comm_type(unshifted_temp, shifted_temp); - } - }; - - typedef poly_comm commitment_type; - typedef poly_comm blinding_type; - typedef std::tuple blinded_commitment_type; - - struct polynomial_type_single { - // polynomial itself - math::polynomial coeffs; - // optional degree bound - poly degree must not exceed it - std::size_t bound = -1; - // chunked commitment - blinding_type commit; - - polynomial_type_single(math::polynomial &coeffs, - int bound, - blinding_type &commit) : coeffs(coeffs), bound(bound), commit(commit) {} - }; - - typedef std::vector polynomial_type; - - struct proof_type { - std::vector> lr; - - typename group_type::value_type delta; - - typename scalar_field_type::value_type z1; - typename scalar_field_type::value_type z2; - - typename group_type::value_type sg; - - std::tuple, std::vector > - challenges(typename scalar_field_type::value_type &endo_r, sponge_type &sponge) { - std::vector chal, chal_invs; - for (auto &[l, r]: lr) { - sponge.absorb_g(l); - sponge.absorb_g(r); - chal.push_back(sponge.squeeze_challenge(endo_r)); - chal_invs.push_back(chal.back().inversed()); - } - - return std::make_tuple(chal, chal_invs); - } - - }; - - struct evaluation_type { - // polycommitment - commitment_type commit; - // evals of polynomial at a set of points - std::vector> evaluations; - // optional degree bound - int bound = -1; - - evaluation_type(commitment_type commit, - std::vector> &evaluations, - int bound) : - commit(commit), evaluations(evaluations), bound(bound) {} - }; - - struct batchproof_type { - sponge_type sponge; - std::vector evaluation; - std::vector evaluation_points; - // scaling factor for eval points powers - typename scalar_field_type::value_type xi; - // scaling factor for polynomials - typename scalar_field_type::value_type r; - // batched proof - proof_type opening; - - batchproof_type(sponge_type sponge, - std::vector evaluation, - std::vector evaluation_points, - typename scalar_field_type::value_type xi, - typename scalar_field_type::value_type r, - proof_type opening - ) : sponge(sponge), evaluation(evaluation), evaluation_points(evaluation_points), - xi(xi), r(r), opening(opening) {} - - batchproof_type() = default; - }; - - static params_type setup(const int d) { - // define parameters of protocol - return params_type(d); - } - - static blinded_commitment_type - commitment(const params_type ¶ms, - const math::polynomial &poly, int bound) { - commitment_type res; - blinding_type blind_res; - - auto left = poly.begin(); - auto g_len = params.g.size(); - - // non-hiding part - std::size_t len = poly.size(); - while (len > g_len) { - res.unshifted.push_back(algebra::multiexp_with_mixed_addition( - params.g.begin(), params.g.end(), left, left + g_len, 1)); - left += g_len; - len -= g_len; - } - if (len > 0) { - res.unshifted.push_back(algebra::multiexp_with_mixed_addition( - params.g.begin(), params.g.begin() + len, left, left + len, 1)); - } - - if (bound >= 0) { - auto start = bound - bound % g_len; - if (!poly.is_zero() && start < poly.size()) { - res.shifted = algebra::multiexp_with_mixed_addition( - params.g.end() - bound % g_len, params.g.end(), poly.begin() + start, - poly.end(), - 1); - } - } - - // masking part - typename scalar_field_type::value_type w; - - for (auto &i: res.unshifted) { - w = algebra::random_element(); - i = i + w * params.h; - blind_res.unshifted.push_back(w); - } - - w = algebra::random_element(); - - if (res.shifted != group_type::value_type::zero()) { - res.shifted = res.shifted + w * params.h; - blind_res.shifted = w; - } - - return blinded_commitment_type(res, blind_res); - } - - static proof_type proof_eval(const params_type ¶ms, group_map_type &group_map, - const polynomial_type &plms, - const std::vector &elm, - const typename scalar_field_type::value_type &polyscale, - const typename scalar_field_type::value_type &evalscale, - sponge_type &sponge) { - proof_type res; - std::vector g = params.g; - std::vector< - std::tuple> - blinders; - - // making vector of size g = 2^k - std::size_t power_of_two = 1; - for (; power_of_two < params.g.size(); power_of_two <<= 1); - - g.resize(power_of_two, group_type::value_type::zero()); - - // computing a and blinding factor - math::polynomial a( - params.g.size(), scalar_field_type::value_type::zero()); - typename scalar_field_type::value_type blinding_factor = scalar_field_type::value_type::zero(); - typename scalar_field_type::value_type scale = scalar_field_type::value_type::one(); - - for (auto &polynom: plms) { - auto offset = polynom.coeffs.begin(); - int j = 0; - - if (polynom.bound >= 0) { - while (j < polynom.commit.unshifted.size()) { - auto end_iter = - (offset + params.g.size() > polynom.coeffs.end() ? polynom.coeffs.end() : - offset + params.g.size()); - auto segment = std::vector(offset, - end_iter); - // add unshifted to a - for (int i = 0; i < segment.size(); ++i) { - a[i] += segment[i] * scale; - } - blinding_factor += polynom.commit.unshifted[j] * scale; - j += 1; - scale *= polyscale; - offset += params.g.size(); - if (offset - polynom.coeffs.begin() > polynom.bound) { - // add shifted to a - for (int i = 0; i < segment.size(); ++i) { - a[i + params.g.size() - segment.size()] += segment[i] * scale; - } - - blinding_factor += polynom.commit.shifted * scale; - scale *= polyscale; - } - } - } else { - while (j < polynom.commit.unshifted.size()) { - auto end_iter = - (offset + params.g.size() > polynom.coeffs.end() ? polynom.coeffs.end() : - offset + params.g.size()); - auto segment = std::vector(offset, - end_iter); - // add unshifted to a - for (int i = 0; i < segment.size(); ++i) { - a[i] += segment[i] * scale; - } - - blinding_factor += polynom.commit.unshifted[j] * scale; - j += 1; - scale *= polyscale; - offset += params.g.size(); - } - } - } - a.resize(power_of_two, scalar_field_type::value_type::zero()); - - // computing b - std::vector b( - power_of_two, scalar_field_type::value_type::zero()); - scale = scalar_field_type::value_type::one(); - for (auto e: elm) { - auto spare = scalar_field_type::value_type::one(); - for (int i = 0; i < power_of_two; ++i) { - b[i] += scale * spare; - spare *= e; - } - scale *= evalscale; - } - - typename scalar_field_type::value_type inner_product_in_vec = algebra::inner_product(a.begin(), - a.end(), - b.begin(), - b.end()); - sponge.absorb_fr(functions::shift_scalar(inner_product_in_vec)); - typename group_type::value_type u = group_map.to_group(sponge.challenge_fq()); - - std::vector chals; - std::vector chal_invs; - - std::vector g_low, g_high; - std::vector a_low, a_high, b_low, b_high; - - while (power_of_two > 1) { - power_of_two >>= 1; - g_low.assign(g.begin(), g.begin() + power_of_two); - g_high.assign(g.begin() + power_of_two, g.end()); - a_low.assign(a.begin(), a.begin() + power_of_two); - a_high.assign(a.begin() + power_of_two, a.end()); - b_low.assign(b.begin(), b.begin() + power_of_two); - b_high.assign(b.begin() + power_of_two, b.end()); - - typename scalar_field_type::value_type rand_l = algebra::random_element(); - typename scalar_field_type::value_type rand_r = algebra::random_element(); - - typename group_type::value_type l = algebra::multiexp_with_mixed_addition( - g_low.begin(), g_low.end(), a_high.begin(), a_high.end(), 1) + - rand_l * params.h + - algebra::inner_product(a_high.begin(), a_high.end(), - b_low.begin(), b_low.end()) * u; - typename group_type::value_type r = algebra::multiexp_with_mixed_addition( - g_high.begin(), g_high.end(), a_low.begin(), a_low.end(), 1) + - rand_r * params.h + - algebra::inner_product(a_low.begin(), a_low.end(), - b_high.begin(), b_high.end()) * - u; - - res.lr.emplace_back(l, r); - blinders.emplace_back(rand_l, rand_r); - - sponge.absorb_g(l); - sponge.absorb_g(r); - typename scalar_field_type::value_type u_scalar = sponge.squeeze_challenge( - params.endo_r); // u_pre to field using endo_r - typename scalar_field_type::value_type u_scalar_inv = u_scalar.inversed(); - chals.push_back(u_scalar); - chal_invs.push_back(u_scalar_inv); - - auto compress_function_u_inv = [&u_scalar_inv](auto &first, auto &second) { - return first * u_scalar_inv + second; - }; - - auto compress_function_u = [&u_scalar](auto &first, auto &second) { - return first * u_scalar + second; - }; - - a.resize(a_high.size()); - std::transform(a_high.begin(), a_high.end(), a_low.begin(), a.begin(), - compress_function_u_inv); - b.resize(b_high.size()); - std::transform(b_high.begin(), b_high.end(), b_low.begin(), b.begin(), compress_function_u); - g.resize(g_high.size()); - std::transform(g_high.begin(), g_high.end(), g_low.begin(), g.begin(), compress_function_u); - } - typename scalar_field_type::value_type a0 = a[0]; - typename scalar_field_type::value_type b0 = b[0]; - typename group_type::value_type g0 = g[0]; - - auto r_prime = blinding_factor; - for (int i = 0; i < blinders.size(); ++i) { - const auto &[l, r] = blinders[i]; - r_prime += l * chal_invs[i] + r * chals[i]; - } - typename scalar_field_type::value_type d = algebra::random_element(); - typename scalar_field_type::value_type r_delta = algebra::random_element(); - - typename group_type::value_type delta = (g0 + u * b0) * d + params.h * r_delta; - sponge.absorb_g(delta); - typename scalar_field_type::value_type c = sponge.squeeze_challenge( - params.endo_r); // to field using endo_r - - res.delta = (g0 + u * b0) * d + params.h * r_delta; - res.z1 = a0 * c + d; - res.z2 = c * r_prime + r_delta; - res.sg = g0; - - return res; - } - - static typename scalar_field_type::value_type combined_inner_product( - const std::vector &evaluation_points, - typename scalar_field_type::value_type xi, typename scalar_field_type::value_type r, - const std::vector> &polys, int g_size) { - typename scalar_field_type::value_type res = scalar_field_type::value_type::zero(); - typename scalar_field_type::value_type xi_i = scalar_field_type::value_type::one(); - - for (const auto &[evals_tr, bound]: polys) { - - std::vector> evals; - if (!evals_tr.evaluations.empty()) { - for (int i = 0; i < evals_tr.evaluations[0].size(); ++i) { - std::vector ev; - for (int j = 0; j < evals_tr.evaluations.size(); ++j) { - ev.push_back(evals_tr.evaluations[j][i]); - } - evals.push_back(ev); - } - } - - for (auto &eval: evals) { - math::polynomial polynom(eval); - typename scalar_field_type::value_type term = polynom.evaluate(r); - res += xi_i * term; - xi_i *= xi; - } - if (bound != -1) { - std::vector last_evals( - evaluation_points.size(), scalar_field_type::value_type::zero()); - if (bound <= evals.size() * g_size) { - last_evals = evals[evals.size() - 1]; - } - - std::vector shifted_evals_vec; - - for (int i = 0; i < last_evals.size(); ++i) { - shifted_evals_vec.push_back(evaluation_points[i].pow(g_size - bound % g_size) * - last_evals[i]); - } - - math::polynomial shifted_evals( - shifted_evals_vec); - res += xi_i * shifted_evals.evaluate(r); - xi_i *= xi; - } - } - - return res; - } - - static typename scalar_field_type::value_type - b_poly(const std::vector &chals, - typename scalar_field_type::value_type x) { - auto k = chals.size(); - std::vector pow_twos = {x}; - - for (int i = 1; i < k; ++i) { - pow_twos.push_back(pow_twos.back().squared()); - } - - typename scalar_field_type::value_type res = scalar_field_type::value_type::one(); - for (int i = 0; i < k; ++i) { - res *= scalar_field_type::value_type::one() + chals[i] * pow_twos[k - 1 - i]; - } - - return res; - } - - static std::vector - b_poly_coefficents(const std::vector &chals) { - auto rounds = chals.size(); - auto s_len = 1 << rounds; - std::vector s( - s_len, scalar_field_type::value_type::one()); - int k = 0; - int pow = 1; - for (int i = 1; i < s_len; ++i) { - (i == pow) ? (k += 1) : (k += 0); - (i == pow) ? (pow <<= 1) : (pow <<= 0); - s[i] = s[i - (pow >> 1)] * chals[rounds - 1 - (k - 1)]; - } - return s; - } - - static bool verify_eval(params_type ¶ms, group_map_type &group_map, - std::vector &batches) { - - std::size_t power_of_two = 1; - for (; power_of_two < params.g.size(); power_of_two <<= 1); - - std::vector points = {params.h}; - points.insert(points.end(), params.g.begin(), params.g.end()); - points.resize(power_of_two + 1, group_type::value_type::zero()); - - std::vector scalars(power_of_two + 1, - scalar_field_type::value_type::zero()); - - typename scalar_field_type::value_type rand_base = algebra::random_element(); - typename scalar_field_type::value_type sg_rand_base = algebra::random_element(); - typename scalar_field_type::value_type rand_base_i = scalar_field_type::value_type::one(); - typename scalar_field_type::value_type sg_rand_base_i = scalar_field_type::value_type::one(); - - for (auto &batch: batches) { - std::vector> es; - for (auto eval: batch.evaluation) { - int bnd = -1; - if (!eval.commit.shifted.is_zero()) { - bnd = eval.bound; - } - es.emplace_back(eval, bnd); - } - - typename scalar_field_type::value_type combined_inner_product0 = - combined_inner_product(batch.evaluation_points, batch.xi, batch.r, es, - params.g.size()); - - batch.sponge.absorb_fr(functions::shift_scalar(combined_inner_product0)); - typename base_field_type::value_type t = batch.sponge.challenge_fq(); - typename group_type::value_type u = group_map.to_group(t); - const auto &[chals, chal_invs] = batch.opening.challenges(params.endo_r, batch.sponge); - batch.sponge.absorb_g(batch.opening.delta); - - typename scalar_field_type::value_type c = batch.sponge.squeeze_challenge( - params.endo_r); // to field using endo_r - - typename scalar_field_type::value_type scale = scalar_field_type::value_type::one(); - typename scalar_field_type::value_type b0 = scalar_field_type::value_type::zero(); - - for (auto e: batch.evaluation_points) { - typename scalar_field_type::value_type term = b_poly(chals, e); - b0 += scale * term; - scale *= batch.r; - } - - std::vector s = b_poly_coefficents(chals); - - auto neg_rand_base_i = -rand_base_i; - - points.push_back(batch.opening.sg); - scalars.push_back(neg_rand_base_i * batch.opening.z1 - sg_rand_base_i); - - std::transform(s.begin(), s.end(), s.begin(), [&sg_rand_base_i](auto &iter_s) { - return iter_s * sg_rand_base_i; - }); - - for (int i = 0; i < s.size(); ++i) { - scalars[i + 1] += s[i]; - } - - scalars[0] -= rand_base_i * batch.opening.z2; - scalars.push_back(neg_rand_base_i * batch.opening.z1 * b0); - points.push_back(u); - - auto rand_base_i_c_i = c * rand_base_i; - for (int i = 0; i < batch.opening.lr.size(); ++i) { - const auto [l, r] = batch.opening.lr[i]; - points.push_back(l); - scalars.push_back(rand_base_i_c_i * chal_invs[i]); - - points.push_back(r); - scalars.push_back(rand_base_i_c_i * chals[i]); - } - - auto xi_i = scalar_field_type::value_type::one(); - for (auto eval: batch.evaluation) { - for (auto comm: eval.commit.unshifted) { - scalars.push_back(rand_base_i_c_i * xi_i); - points.push_back(comm); - - xi_i *= batch.xi; - } - - if (eval.bound >= 0) { - if (!eval.commit.shifted.is_zero()) { - scalars.push_back(rand_base_i_c_i * xi_i); - points.push_back(eval.commit.shifted); - - xi_i *= batch.xi; - } - } - } - - scalars.push_back(rand_base_i_c_i * combined_inner_product0); - points.push_back(u); - scalars.push_back(rand_base_i); - points.push_back(batch.opening.delta); - - rand_base_i *= rand_base; - sg_rand_base_i *= sg_rand_base; - } - - return (algebra::multiexp_with_mixed_addition( - points.begin(), points.end(), scalars.begin(), scalars.end(), 1) == - group_type::value_type::zero()); - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_KIMCHI_PEDERSEN_COMMITMENT_SCHEME_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment.hpp index 103da9b388..ed27113dbb 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_HPP -#define CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_HPP +#define PARALLEL_CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_HPP + +#ifdef CRYPTO3_ZK_KNOWLEDGE_COMMITMENT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp index 50e0df3cbd..640106782c 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/knowledge_commitment_multiexp.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_KC_MULTIEXP_HPP -#define CRYPTO3_ZK_KC_MULTIEXP_HPP +#ifndef PARALLEL_CRYPTO3_ZK_KC_MULTIEXP_HPP +#define PARALLEL_CRYPTO3_ZK_KC_MULTIEXP_HPP + +#ifdef CRYPTO3_ZK_KC_MULTIEXP_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif /* Split out from multiexp to prevent cyclical @@ -43,11 +47,10 @@ namespace nil { namespace crypto3 { namespace zk { namespace commitments { - template + template typename knowledge_commitment::value_type opt_window_wnaf_exp(const typename knowledge_commitment::value_type &base, - const boost::multiprecision::number &scalar, + const nil::crypto3::multiprecision::big_uint &scalar, const std::size_t scalar_bits) { return typename knowledge_commitment::value_type( opt_window_wnaf_exp(base.g, scalar, scalar_bits), diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp index db8a66b6dc..63db1f16ed 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg.hpp @@ -26,8 +26,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_COMMITMENTS_KZG_HPP -#define CRYPTO3_ZK_COMMITMENTS_KZG_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_KZG_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_KZG_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_KZG_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -658,7 +662,7 @@ namespace nil { using transcript_hash_type = typename CommitmentSchemeType::transcript_hash_type; using polynomial_type = typename CommitmentSchemeType::polynomial_type; using proof_type = typename CommitmentSchemeType::proof_type; - using endianness = nil::marshalling::option::big_endian; + using endianness = nil::crypto3::marshalling::option::big_endian; private: params_type _params; std::map _commitments; @@ -752,9 +756,9 @@ namespace nil { _params, this->_polys[index][i]); this->_ind_commitments[index].push_back(single_commitment); - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector single_commitment_bytes = - nil::marshalling::pack(single_commitment, status); + nil::crypto3::marshalling::pack(single_commitment, status); THROW_IF_ERROR_STATUS(status, "kzg::commit"); result.insert(result.end(), single_commitment_bytes.begin(), single_commitment_bytes.end()); } @@ -839,9 +843,9 @@ namespace nil { for (std::size_t j = 0; j < blob_size; j++) { byteblob[j] = this->_commitments.at(k)[i * blob_size + j]; } - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; typename curve_type::template g1_type<>::value_type - i_th_commitment = nil::marshalling::pack(byteblob, status); + i_th_commitment = nil::crypto3::marshalling::pack(byteblob, status); THROW_IF_ERROR_STATUS(status, "kzg::verify_eval"); auto U_commit = nil::crypto3::zk::algorithms::commit_one (_params, this->get_U(k, i)); diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_ipp2.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_ipp2.hpp index 5fd47c5dd3..d578213a9a 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_ipp2.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_ipp2.hpp @@ -51,8 +51,12 @@ // verifier of the Groth16 verification protocol since we pack two vectors in // one commitment. -#ifndef CRYPTO3_ZK_COMMITMENTS_KZG_IPP2_HPP -#define CRYPTO3_ZK_COMMITMENTS_KZG_IPP2_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_KZG_IPP2_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_KZG_IPP2_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_KZG_IPP2_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp index cfedee65ae..6e4ad2b3b0 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/kzg_v2.hpp @@ -26,8 +26,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_COMMITMENTS_KZG_V2_HPP -#define CRYPTO3_ZK_COMMITMENTS_KZG_V2_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_KZG_V2_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_KZG_V2_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_KZG_V2_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -105,9 +109,9 @@ namespace nil { } }; - using endianness = nil::marshalling::option::big_endian; + using endianness = marshalling::option::big_endian; using field_element_type = nil::crypto3::marshalling::types::field_element< - nil::marshalling::field_type, + marshalling::field_type, commitment_type >; private: @@ -204,9 +208,9 @@ namespace nil { }); std::vector result; for (const auto& single_commitment : this->_ind_commitments[index]) { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector single_commitment_bytes = - nil::marshalling::pack(single_commitment, status); + marshalling::pack(single_commitment, status); THROW_IF_ERROR_STATUS(status, "kzg_v2::commit"); result.insert(result.end(), single_commitment_bytes.begin(), single_commitment_bytes.end()); } @@ -328,7 +332,7 @@ namespace nil { auto F = CommitmentSchemeType::single_commitment_type::zero(); auto rsum = CommitmentSchemeType::scalar_value_type::zero(); - nil::marshalling::status_type status; + marshalling::status_type status; for (const auto &it: this->_commitments) { auto k = it.first; @@ -340,7 +344,7 @@ namespace nil { byteblob[j] = this->_commitments[k][i * blob_size + j]; } typename curve_type::template g1_type<>::value_type - cm_i = nil::marshalling::pack(byteblob, status); + cm_i = marshalling::pack(byteblob, status); THROW_IF_ERROR_STATUS(status, "kzg_v2::verify_eval"); auto Z_T_S_i = set_difference_polynom(_merged_points, this->_points.at(k)[i]).evaluate( theta_2); diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp index 02c6a2f6c5..d3499d2f20 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/lpc.hpp @@ -27,8 +27,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_LIST_POLYNOMIAL_COMMITMENT_SCHEME_HPP -#define CRYPTO3_ZK_LIST_POLYNOMIAL_COMMITMENT_SCHEME_HPP +#ifndef PARALLEL_CRYPTO3_ZK_LIST_POLYNOMIAL_COMMITMENT_SCHEME_HPP +#define PARALLEL_CRYPTO3_ZK_LIST_POLYNOMIAL_COMMITMENT_SCHEME_HPP + +#ifdef CRYPTO3_ZK_LIST_POLYNOMIAL_COMMITMENT_SCHEME_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -112,6 +116,7 @@ namespace nil { { } + lpc_commitment_scheme(const typename fri_type::params_type &fri_params) : _fri_params(fri_params), _etha(0u) { } @@ -167,6 +172,7 @@ namespace nil { BOOST_ASSERT(this->_points.size() == this->_polys.size()); BOOST_ASSERT(this->_points.size() == this->_z.get_batches_num()); + // For each batch we have a merkle tree. for (auto const& it: this->_trees) { transcript(it.second.root()); diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/pedersen.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/pedersen.hpp deleted file mode 100644 index 33d0029f95..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/pedersen.hpp +++ /dev/null @@ -1,193 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PEDERSEN_COMMITMENT_SCHEME_HPP -#define CRYPTO3_ZK_PEDERSEN_COMMITMENT_SCHEME_HPP - -#include - -#include - -#include - -using namespace nil::crypto3; - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - - template - class pedersen { - public: - typedef typename CurveType::scalar_field_type field_type; - typedef typename CurveType::template g1_type group_type; - typedef typename field_type::value_type evaluation_type; - typedef typename group_type::value_type commitment_type; - - struct params_type { - // setup as an open key (non trusted, so uniform for both sides) - int n; // n - number of parties - int k; // k <= n - number of parties needed to open the secret message - commitment_type g; - commitment_type h; - }; - - struct private_key { - evaluation_type s; // power of g - evaluation_type t; // power of h - - private_key() : s(0), t(0) { - } - - private_key(evaluation_type a, evaluation_type b) : s(a), t(b) { - } - }; - - struct proof_type { - commitment_type E_0; // initial commitment - std::vector E; // commitments open for everyone - std::vector pk; // private keys for each party - }; - - static params_type key_generator(int n, int k, commitment_type g = commitment_type::one(), - commitment_type h = commitment_type::one()) { - // evaluates setup for current protocol - if (g == commitment_type::one()) { - g = algebra::random_element(); - } - if (h == commitment_type::one()) { - h = algebra::random_element(); - while (g == h) { - h = algebra::random_element(); - } - } - return params_type(n, k, g, h); - } - - static commitment_type commitment(const params_type ¶ms, const private_key &pk) { - // pedersen commitment - return params.g * pk.s + params.h * pk.t; - } - - static std::vector poly_eval(const params_type ¶ms, - const std::vector &coeffs) { - // computes F(i) for i in range 1..n for polynom F of degree k - proof.E - std::vector p_i; - evaluation_type spare; - evaluation_type sum; - for (int i = 1; i <= params.n; ++i) { - spare = 1; - sum = coeffs[0]; - for (int j = 1; j < params.k; ++j) { - spare *= i; - sum += spare * coeffs[j]; - } - p_i.push_back(sum); - } - return p_i; - } - - static proof_type proof_eval(const params_type ¶ms, const evaluation_type &w) { - // evaluates proof according to pedersen commitment '81 - proof_type prf; - - evaluation_type t = algebra::random_element(); - prf.E_0 = commitment(params, private_key(w, t)); - - std::vector f_coeffs; - f_coeffs.push_back(w); - std::vector g_coeffs; - g_coeffs.push_back(t); - evaluation_type spare; - for (int i = 1; i < params.k; ++i) { - spare = algebra::random_element(); - f_coeffs.push_back(spare); - spare = algebra::random_element(); - g_coeffs.push_back(spare); - } - - std::vector s_i = - poly_eval(params, f_coeffs); // pair (s_i[j], t_i[j]) is given exclusively - std::vector t_i = poly_eval(params, g_coeffs); // to party number j - for (int i = 0; i < params.n; ++i) { - prf.pk.push_back(private_key(s_i[i], t_i[i])); - } - for (int i = 1; i < params.k; ++i) { - prf.E.push_back(commitment(params, private_key(f_coeffs[i], g_coeffs[i]))); - } - - return prf; - } - - static bool verify_eval(const params_type ¶ms, const proof_type &prf) { - // vefifies that everyone is sure one knows the secret message - bool answer = true; - - evaluation_type power; - commitment_type E; - commitment_type sum; - - for (int i = 1; i <= params.n; ++i) { - E = commitment(params, prf.pk[i - 1]); - sum = prf.E_0; - power = 1; - for (int j = 1; j < params.k; ++j) { - power *= i; - sum = sum + prf.E[j - 1] * power; - } - answer *= (E == sum); - } - return answer; - } - - static evaluation_type message_eval(const params_type ¶ms, const proof_type &prf, - const std::vector &idx) { - // for a given number of people learns if they can open message - // and if so, opens it - if ((idx.size() < params.k) || (!verify_eval(params, prf))) { - return 0; - } - - evaluation_type sum = 0; - evaluation_type mult = 1; - for (int j = 0; j < params.k; ++j) { - mult = 1; - for (int l = 0; l < params.k; ++l) { - if (l != j) { - mult *= evaluation_type(idx[l]) * evaluation_type(idx[l] - idx[j]).inversed(); - } - } - sum += mult * prf.pk[idx[j] - 1].s; - } - return sum; - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PEDERSEN_COMMITMENT_SCHEME_HPP \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/powers_of_tau.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/powers_of_tau.hpp deleted file mode 100644 index 4d0dc9defb..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/powers_of_tau.hpp +++ /dev/null @@ -1,187 +0,0 @@ -#ifndef CRYPTO3_ZK_POWERS_OF_TAU_HPP -#define CRYPTO3_ZK_POWERS_OF_TAU_HPP - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - template - class powers_of_tau { - typedef CurveType curve_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename scalar_field_type::value_type scalar_field_value_type; - typedef typename CurveType::template g1_type<> g1_type; - typedef typename g1_type::value_type g1_value_type; - typedef typename CurveType::template g2_type<> g2_type; - typedef typename g2_type::value_type g2_value_type; - - public: - typedef detail::powers_of_tau_private_key private_key_type; - typedef detail::powers_of_tau_public_key public_key_type; - typedef detail::powers_of_tau_accumulator accumulator_type; - typedef detail::powers_of_tau_result result_type; - typedef proof_of_knowledge proof_of_knowledge_scheme_type; - - enum parameter_personalization { - tau_personalization, alpha_personalization, beta_personalization - }; - - // The result of this function is considered toxic wast - // and should thus be destroyed - template - static private_key_type generate_private_key(RNG &&rng = boost::random_device()) { - typename scalar_field_type::value_type tau = algebra::random_element(rng); - typename scalar_field_type::value_type alpha = algebra::random_element(rng); - typename scalar_field_type::value_type beta = algebra::random_element(rng); - - return private_key_type{std::move(tau), std::move(alpha), std::move(beta)}; - } - - static auto rng_from_beacon(const std::vector &beacon) { - std::size_t n = 42; - std::vector cur_hash = beacon; - for (std::size_t i = 0; i < std::size_t(1 << n); ++i) { - std::vector hash = nil::crypto3::hash>(cur_hash); - cur_hash = hash; - } - // random::chacha gen; - boost::random::mt19937 gen; - // gen.seed(cur_hash); - gen.seed(cur_hash[0]); - - return gen; - } - - template - static public_key_type proof_eval(const private_key_type &private_key, - const accumulator_type &before, - RNG &&rng = boost::random_device()) { - std::vector transcript = compute_transcript(before); - auto tau_pok = proof_of_knowledge_scheme_type::proof_eval( - private_key.tau, transcript, tau_personalization, rng); - auto alpha_pok = proof_of_knowledge_scheme_type::proof_eval( - private_key.alpha, transcript, alpha_personalization, rng); - auto beta_pok = proof_of_knowledge_scheme_type::proof_eval( - private_key.beta, transcript, beta_personalization, rng); - - return public_key_type{std::move(tau_pok), std::move(alpha_pok), std::move(beta_pok)}; - } - - static bool verify_eval(const public_key_type &public_key, - const accumulator_type &before, - const accumulator_type &after) { - std::vector transcript = compute_transcript(before); - - auto tau_g2_s = proof_of_knowledge_scheme_type::compute_g2_s( - public_key.tau_pok.g1_s, public_key.tau_pok.g1_s_x, transcript, tau_personalization); - auto alpha_g2_s = proof_of_knowledge_scheme_type::compute_g2_s( - public_key.alpha_pok.g1_s, public_key.alpha_pok.g1_s_x, transcript, - alpha_personalization); - auto beta_g2_s = proof_of_knowledge_scheme_type::compute_g2_s( - public_key.beta_pok.g1_s, public_key.beta_pok.g1_s_x, transcript, beta_personalization); - - // Verify the proofs of knowledge of tau, alpha and beta - if (!proof_of_knowledge_scheme_type::verify_eval(public_key.tau_pok, tau_g2_s)) { - return false; - } - if (!proof_of_knowledge_scheme_type::verify_eval(public_key.alpha_pok, alpha_g2_s)) { - return false; - } - if (!proof_of_knowledge_scheme_type::verify_eval(public_key.beta_pok, beta_g2_s)) { - return false; - } - - // Check the correctness of the generators fot tau powers - if (after.tau_powers_g1[0] != g1_value_type::one()) { - return false; - } - if (after.tau_powers_g2[0] != g2_value_type::one()) { - return false; - } - - // Did the participant multiply the previous tau by the new one? - if (!is_same_ratio(std::make_pair(before.tau_powers_g1[1], after.tau_powers_g1[1]), - std::make_pair(tau_g2_s, public_key.tau_pok.g2_s_x))) { - return false; - } - - // Did the participant multiply the previous alpha by the new one? - if (!is_same_ratio(std::make_pair(before.alpha_tau_powers_g1[0], after.alpha_tau_powers_g1[0]), - std::make_pair(alpha_g2_s, public_key.alpha_pok.g2_s_x))) { - return false; - } - - // Did the participant multiply the previous beta by the new one? - if (!is_same_ratio(std::make_pair(before.beta_tau_powers_g1[0], after.beta_tau_powers_g1[0]), - std::make_pair(beta_g2_s, public_key.beta_pok.g2_s_x))) { - return false; - } - - if (!is_same_ratio(std::make_pair(before.beta_tau_powers_g1[0], after.beta_tau_powers_g1[0]), - std::make_pair(before.beta_g2, after.beta_g2))) { - return false; - } - - // Are the powers of tau correct? - if (!is_same_ratio(detail::power_pairs(after.tau_powers_g1), - std::make_pair(after.tau_powers_g2[0], after.tau_powers_g2[1]))) { - return false; - } - if (!is_same_ratio(std::make_pair(after.tau_powers_g1[0], after.tau_powers_g1[1]), - commitments::detail::power_pairs(after.tau_powers_g2))) { - return false; - } - if (!is_same_ratio(detail::power_pairs(after.alpha_tau_powers_g1), - std::make_pair(after.tau_powers_g2[0], after.tau_powers_g2[1]))) { - return false; - } - if (!is_same_ratio(detail::power_pairs(after.beta_tau_powers_g1), - std::make_pair(after.tau_powers_g2[0], after.tau_powers_g2[1]))) { - return false; - } - - return true; - } - - static bool is_same_ratio(const std::pair &g1_pair, - const std::pair &g2_pair) { - - return algebra::pair_reduced(g1_pair.first, g2_pair.second) == - algebra::pair_reduced(g1_pair.second, g2_pair.first); - } - - static std::vector compute_transcript(const accumulator_type &acc) { - auto acc_blob = serialize_accumulator(acc); - return nil::crypto3::hash>(acc_blob); - } - - static std::vector serialize_accumulator(const accumulator_type &acc) { - using endianness = nil::marshalling::option::little_endian; - auto filled_val = - nil::crypto3::marshalling::types::fill_powers_of_tau_accumulator(acc); - std::vector blob(filled_val.length()); - auto it = std::begin(blob); - nil::marshalling::status_type status = filled_val.write(it, blob.size()); - THROW_IF_ERROR_STATUS(status, "powers_of_tau::serialize_accumulator"); - return blob; - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_POWERS_OF_TAU_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/proof_of_knowledge.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/proof_of_knowledge.hpp deleted file mode 100644 index 1a812d0d8a..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/polynomial/proof_of_knowledge.hpp +++ /dev/null @@ -1,123 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Noam Y <@NoamDev> -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_HPP -#define CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_HPP - -#include - -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace commitments { - template - struct proof_of_knowledge { - typedef CurveType curve_type; - using scalar_field_type = typename curve_type::scalar_field_type; - using scalar_field_value_type = typename scalar_field_type::value_type; - using g1_type = typename CurveType::template g1_type<>; - using g2_type = typename CurveType::template g2_type<>; - using g1_value_type = typename g1_type::value_type; - using g2_value_type = typename g2_type::value_type; - typedef detail::element_pok proof_type; - - template - static proof_type proof_eval(const scalar_field_value_type &x, - const std::vector &transcript, - std::uint8_t personalization, - RNG &&rng = boost::random_device()) { - const g1_value_type g1_s = algebra::random_element(rng); - const g1_value_type g1_s_x = x * g1_s; - const g2_value_type g2_s = compute_g2_s(g1_s, g1_s_x, transcript, personalization); - const g2_value_type g2_s_x = x * g2_s; - - return proof_type(g1_s, g1_s_x, g2_s_x); - } - - static bool verify_eval(const proof_type &proof, - const std::vector &transcript, - std::uint8_t personalization) { - const g2_value_type g2_s = compute_g2_s(proof.g1_s, proof.g1_s_x, transcript, personalization); - return verify_eval(proof, g2_s); - } - - static bool verify_eval(const proof_type &proof, const g2_value_type &g2_s) { - return algebra::pair_reduced(proof.g1_s, proof.g2_s_x) == - algebra::pair_reduced(proof.g1_s_x, g2_s); - } - - static g2_value_type compute_g2_s(const g1_value_type &g1_s, - const g1_value_type &g1_s_x, - const std::vector &transcript, - std::uint8_t personalization) { - std::vector personalization_transcript_g1s_g1sx; - - personalization_transcript_g1s_g1sx.emplace_back(personalization); - - std::copy(std::cbegin(transcript), - std::cend(transcript), - std::back_inserter(personalization_transcript_g1s_g1sx)); - - auto g1_s_blob = serialize_g1_uncompressed(g1_s); - std::copy(std::cbegin(g1_s_blob), std::cend(g1_s_blob), std::back_inserter(g1_s_blob)); - - auto g1_s_x_blob = serialize_g1_uncompressed(g1_s_x); - std::copy(std::cbegin(g1_s_x_blob), std::cend(g1_s_x_blob), std::back_inserter(g1_s_x_blob)); - - std::vector hash = - nil::crypto3::hash>(personalization_transcript_g1s_g1sx); - - // this is unsecure as it's only using the first byte, - // it should be chacha which is currently broken - boost::random::mt19937 gen; - // random::chacha gen; - gen.seed(hash[0]); - // gen.seed(hash.begin(), hash.end()); - return algebra::random_element(gen); - } - - static std::vector serialize_g1_uncompressed(const g1_value_type &g) { - using endianness = nil::marshalling::option::little_endian; - auto filled_val = - nil::crypto3::marshalling::types::fill_fast_curve_element(g); - std::vector blob(filled_val.length()); - auto it = std::begin(blob); - nil::marshalling::status_type status = filled_val.write(it, blob.size()); - THROW_IF_ERROR_STATUS(status, "proof_of_knowledge::serialize_g1_uncompressed"); - return blob; - } - }; - } // namespace commitments - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PROOF_OF_KNOWLEDGE_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/type_traits.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/type_traits.hpp index d98f98db7e..0214aae747 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/type_traits.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/commitments/type_traits.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_COMMITMENTS_TYPE_TRAITS_HPP -#define CRYPTO3_ZK_COMMITMENTS_TYPE_TRAITS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_COMMITMENTS_TYPE_TRAITS_HPP +#define PARALLEL_CRYPTO3_ZK_COMMITMENTS_TYPE_TRAITS_HPP + +#ifdef CRYPTO3_ZK_COMMITMENTS_TYPE_TRAITS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/detail/field_element_consumer.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/detail/field_element_consumer.hpp index 1a4ab8ba77..3f44fc2bd4 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/detail/field_element_consumer.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/detail/field_element_consumer.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_DETAIL_FIELD_ELEMENT_CONSUMER_HPP -#define CRYPTO3_ZK_DETAIL_FIELD_ELEMENT_CONSUMER_HPP +#ifndef PARALLEL_CRYPTO3_ZK_DETAIL_FIELD_ELEMENT_CONSUMER_HPP +#define PARALLEL_CRYPTO3_ZK_DETAIL_FIELD_ELEMENT_CONSUMER_HPP + +#ifdef CRYPTO3_ZK_DETAIL_FIELD_ELEMENT_CONSUMER_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression.hpp index 6033bbad6e..3ed0fed1b9 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression.hpp @@ -26,8 +26,12 @@ // - an expression - stores any mathematical expression with -+* operatos and 'pow' in a form of a tree. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_MATH_EXPRESSION_HPP -#define CRYPTO3_ZK_MATH_EXPRESSION_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_EXPRESSION_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_EXPRESSION_HPP + +#ifdef CRYPTO3_ZK_MATH_EXPRESSION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -105,15 +109,26 @@ namespace nil { update_hash(); } - // Every number type will be accepted here, - // if it can be converted to 'assignment_type'. - // This will include integral types and number> - template - expression(const NumberType &coeff) + // Constructor for integral types. + template + expression(const NumericType& coeff, + typename std::enable_if::value, NumericType>::type* = nullptr) : expr(term((assignment_type)coeff)) { update_hash(); } + // Constructor for big_uint. + template + expression(const nil::crypto3::multiprecision::big_uint& coeff) + : expr(term((assignment_type)coeff)) { + update_hash(); + } + + expression(const assignment_type &coeff) + : expr(term(coeff)) { + update_hash(); + } + expression(const expression& other) = default; expression(expression&& other) = default; expression& operator=(const expression& other) = default; @@ -198,7 +213,7 @@ namespace nil { // Every number type will be accepted here, // if it can be converted to 'assignment_type'. - // This will include integral types and number> + // This will include integral types and big_uint template term(const NumberType &field_val) : coeff(field_val) { update_hash(); diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_evaluator.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_evaluator.hpp index 7ade107786..1ffcfd76b1 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_evaluator.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_evaluator.hpp @@ -21,8 +21,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -#ifndef CRYPTO3_ZK_MATH_EXPRESSION_EVALUATOR_HPP -#define CRYPTO3_ZK_MATH_EXPRESSION_EVALUATOR_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_EXPRESSION_EVALUATOR_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_EXPRESSION_EVALUATOR_HPP + +#ifdef CRYPTO3_ZK_MATH_EXPRESSION_EVALUATOR_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_visitors.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_visitors.hpp index 1582a95266..6c81ee12b7 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_visitors.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/expression_visitors.hpp @@ -21,8 +21,12 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -#ifndef CRYPTO3_ZK_MATH_EXPRESSION_VISITORS_HPP -#define CRYPTO3_ZK_MATH_EXPRESSION_VISITORS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_EXPRESSION_VISITORS_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_EXPRESSION_VISITORS_HPP + +#ifdef CRYPTO3_ZK_MATH_EXPRESSION_VISITORS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -152,6 +156,8 @@ namespace nil { return left - right; case ArithmeticOperator::MULT: return left * right; + default: + throw std::invalid_argument("ArithmeticOperator not found"); } } }; diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/integer_permutation.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/integer_permutation.hpp index 077f0becd9..5627e13811 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/integer_permutation.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/integer_permutation.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_MATH_INTEGER_PERMUTATION_HPP -#define CRYPTO3_ZK_MATH_INTEGER_PERMUTATION_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_INTEGER_PERMUTATION_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_INTEGER_PERMUTATION_HPP + +#ifdef CRYPTO3_ZK_MATH_INTEGER_PERMUTATION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_combination.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_combination.hpp index e52d05275d..75e9d83884 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_combination.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_combination.hpp @@ -28,8 +28,12 @@ // - a linear combination (i.e., sum_i a_i * x_i). //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_MATH_LINEAR_COMBINATION_HPP -#define CRYPTO3_ZK_MATH_LINEAR_COMBINATION_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_LINEAR_COMBINATION_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_LINEAR_COMBINATION_HPP + +#ifdef CRYPTO3_ZK_MATH_LINEAR_COMBINATION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_variable.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_variable.hpp index 3879366ff7..461250b923 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_variable.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/linear_variable.hpp @@ -26,8 +26,12 @@ // - a linear_variable (i.e., x_i) //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_MATH_LINEAR_VARIABLE_HPP -#define CRYPTO3_ZK_MATH_LINEAR_VARIABLE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_LINEAR_VARIABLE_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_LINEAR_VARIABLE_HPP + +#ifdef CRYPTO3_ZK_MATH_LINEAR_VARIABLE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/non_linear_combination.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/non_linear_combination.hpp index 6f6ef375f3..1ce012cb67 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/non_linear_combination.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/non_linear_combination.hpp @@ -28,8 +28,12 @@ // - a linear combination (i.e., sum_i a_i * x_i). //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_MATH_NON_LINEAR_COMBINATION_HPP -#define CRYPTO3_ZK_MATH_NON_LINEAR_COMBINATION_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_NON_LINEAR_COMBINATION_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_NON_LINEAR_COMBINATION_HPP + +#ifdef CRYPTO3_ZK_MATH_NON_LINEAR_COMBINATION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/permutation.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/permutation.hpp index 48b0d1938d..a869f192b7 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/permutation.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/math/permutation.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_MATH_PLONK_PERMUTATION_HPP -#define CRYPTO3_ZK_MATH_PLONK_PERMUTATION_HPP +#ifndef PARALLEL_CRYPTO3_ZK_MATH_PLONK_PERMUTATION_HPP +#define PARALLEL_CRYPTO3_ZK_MATH_PLONK_PERMUTATION_HPP + +#ifdef CRYPTO3_ZK_MATH_PLONK_PERMUTATION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { @@ -67,4 +71,4 @@ namespace nil { } // namespace crypto3 } // namespace nil -#endif // CRYPTO3_ZK_MATH_PLONK_PERMUTATION_HPP \ No newline at end of file +#endif // CRYPTO3_ZK_MATH_PLONK_PERMUTATION_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/proof.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/proof.hpp index 36dd38000a..440f3530cd 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/proof.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/proof.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PROOF_HPP -#define CRYPTO3_ZK_PROOF_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PROOF_HPP +#define PARALLEL_CRYPTO3_ZK_PROOF_HPP + +#ifdef CRYPTO3_ZK_PROOF_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/qap.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/qap.hpp index d8bfc63661..29b3d483b4 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/qap.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/qap.hpp @@ -35,8 +35,12 @@ // //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_QAP_HPP -#define CRYPTO3_ZK_QAP_HPP +#ifndef PARALLEL_CRYPTO3_ZK_QAP_HPP +#define PARALLEL_CRYPTO3_ZK_QAP_HPP + +#ifdef CRYPTO3_ZK_QAP_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/sap.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/sap.hpp index 753345889a..6fd5f9c417 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/sap.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/sap.hpp @@ -36,8 +36,12 @@ // //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SAP_HPP -#define CRYPTO3_ZK_SAP_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SAP_HPP +#define PARALLEL_CRYPTO3_ZK_SAP_HPP + +#ifdef CRYPTO3_ZK_SAP_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/ssp.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/ssp.hpp index 6505d7e3ae..40c6bac05f 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/ssp.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/arithmetic_programs/ssp.hpp @@ -35,8 +35,12 @@ // //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SSP_HPP -#define CRYPTO3_ZK_SSP_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SSP_HPP +#define PARALLEL_CRYPTO3_ZK_SSP_HPP + +#ifdef CRYPTO3_ZK_SSP_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/bacs.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/bacs.hpp index af95bbd811..39f7dbfb0b 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/bacs.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/bacs.hpp @@ -32,8 +32,12 @@ // Above, BACS stands for "Bilinear Arithmetic Circuit Satisfiability". //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_BACS_HPP -#define CRYPTO3_ZK_BACS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_BACS_HPP +#define PARALLEL_CRYPTO3_ZK_BACS_HPP + +#ifdef CRYPTO3_ZK_BACS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/tbcs.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/tbcs.hpp index c252e704c3..1049aa334f 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/tbcs.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/circuit_satisfaction_problems/tbcs.hpp @@ -30,8 +30,12 @@ // Above, TBCS stands for "Two-input Boolean Circuit Satisfiability". //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_TBCS_HPP -#define CRYPTO3_ZK_TBCS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_TBCS_HPP +#define PARALLEL_CRYPTO3_ZK_TBCS_HPP + +#ifdef CRYPTO3_ZK_TBCS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/constraint_satisfaction_problems/uscs.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/constraint_satisfaction_problems/uscs.hpp index 0617627ee7..109bb9cd3e 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/constraint_satisfaction_problems/uscs.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/constraint_satisfaction_problems/uscs.hpp @@ -30,8 +30,12 @@ // Above, USCS stands for "Unitary-Square Constraint System". //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_USCS_HPP -#define CRYPTO3_ZK_USCS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_USCS_HPP +#define PARALLEL_CRYPTO3_ZK_USCS_HPP + +#ifdef CRYPTO3_ZK_USCS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp index 88ef290983..af7b8effad 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp @@ -24,15 +24,22 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include +#include #include #include +#include #include #include +#include namespace nil { namespace blueprint { @@ -102,7 +109,8 @@ namespace nil { } } - ColumnType get_variable_value(const VariableType& var, std::shared_ptr> domain) const { + ColumnType get_variable_value(const VariableType& var, + std::shared_ptr> domain) const { if (var.rotation == 0) { return get_variable_value_without_rotation(var); } @@ -120,10 +128,6 @@ namespace nil { return _witnesses; } - witnesses_container_type move_witnesses() { - return std::move(_witnesses); - } - const ColumnType& operator[](std::uint32_t index) const { if (index < _witnesses.size()) return _witnesses[index]; @@ -204,10 +208,6 @@ namespace nil { return _public_inputs; } - public_input_container_type move_public_inputs() { - return std::move(_public_inputs); - } - std::uint32_t constants_amount() const { return _constants.size(); } @@ -229,10 +229,6 @@ namespace nil { return _constants; } - constant_container_type move_constants() { - return std::move(_constants); - } - constexpr std::uint32_t selectors_amount() const { return _selectors.size(); } @@ -254,11 +250,6 @@ namespace nil { return _selectors; } - selector_container_type move_selectors() { - - return std::move(_selectors); - } - void fill_constant(std::uint32_t index, const ColumnType& column) { BOOST_ASSERT(index < constants_amount()); BOOST_ASSERT(_constants[index].size() == 0); @@ -323,24 +314,35 @@ namespace nil { protected: // These are normally created by the assigner, or read from a file. - private_table_type _private_table; - public_table_type _public_table; + std::shared_ptr _private_table; + std::shared_ptr _public_table; public: virtual ~plonk_table() = default; - plonk_table(private_table_type private_table = {}, - public_table_type public_table = {}) - : _private_table(std::move(private_table)) - , _public_table(std::move(public_table)) { + plonk_table(): + _private_table(std::make_shared>()), + _public_table(std::make_shared>()) { + } + + plonk_table(std::shared_ptr private_table, + std::shared_ptr public_table) + : _private_table(private_table) + , _public_table(public_table) { } plonk_table(std::size_t witnesses_amount, std::size_t public_inputs_amount, std::size_t constants_amount, std::size_t selectors_amount) - : _private_table(witnesses_amount) - , _public_table(public_inputs_amount, constants_amount, selectors_amount) { + : _private_table(std::make_shared(witnesses_amount)) + , _public_table(std::make_shared(public_inputs_amount, constants_amount, selectors_amount)) { + } + + crypto3::zk::snark::plonk_table_description get_description() const { + return crypto3::zk::snark::plonk_table_description( + witnesses_amount(), public_inputs_amount(), constants_amount(), selectors_amount(), + rows_amount(), std::pow(2, std::ceil(std::log2(rows_amount())))); } template @@ -370,56 +372,55 @@ namespace nil { } const ColumnType& witness(std::uint32_t index) const { - return _private_table.witness(index); + return _private_table->witness(index); } typename field_type::value_type &witness( std::uint32_t witness_index, std::uint32_t row_index) { if (witness_column_size(witness_index) <= row_index) - this->_private_table._witnesses[witness_index].resize(row_index + 1); + this->_private_table->_witnesses[witness_index].resize(row_index + 1); - return this->_private_table._witnesses[witness_index][row_index]; + return this->_private_table->_witnesses[witness_index][row_index]; } const ColumnType& public_input(std::uint32_t index) const { - return _public_table.public_input(index); + return _public_table->public_input(index); } typename field_type::value_type &public_input( std::uint32_t public_input_index, std::uint32_t row_index) { if (public_input_column_size(public_input_index) <= row_index) - this->_public_table._public_inputs[public_input_index].resize(row_index + 1); + this->_public_table->_public_inputs[public_input_index].resize(row_index + 1); - return this->_public_table._public_inputs[public_input_index][row_index]; + return this->_public_table->_public_inputs[public_input_index][row_index]; } - const ColumnType& constant(std::uint32_t index) const { - return _public_table.constant(index); + return _public_table->constant(index); } typename field_type::value_type &constant( std::uint32_t constant_index, std::uint32_t row_index) { if (constant_column_size(constant_index) <= row_index) - this->_public_table._constants[constant_index].resize(row_index + 1); + this->_public_table->_constants[constant_index].resize(row_index + 1); - return this->_public_table._constants[constant_index][row_index]; + return this->_public_table->_constants[constant_index][row_index]; } const ColumnType& selector(std::uint32_t index) const { - return _public_table.selector(index); + return _public_table->selector(index); } typename field_type::value_type &selector( std::uint32_t selector_index, std::uint32_t row_index) { if (selector_column_size(selector_index) <= row_index) - this->_public_table._selectors[selector_index].resize(row_index + 1); + this->_public_table->_selectors[selector_index].resize(row_index + 1); - return this->_public_table._selectors[selector_index][row_index]; + return this->_public_table->_selectors[selector_index][row_index]; } void enable_selector(const std::size_t selector_index, const std::size_t row_index) { @@ -428,104 +429,104 @@ namespace nil { } virtual void fill_constant(std::uint32_t index, const ColumnType& column) { - _public_table.fill_constant(index, column); + _public_table->fill_constant(index, column); } virtual void fill_selector(std::uint32_t index, const ColumnType& column) { - _public_table.fill_selector(index, column); + _public_table->fill_selector(index, column); } const witnesses_container_type& witnesses() const { - return _private_table.witnesses(); + return _private_table->witnesses(); } const public_input_container_type& public_inputs() const { - return _public_table.public_inputs(); + return _public_table->public_inputs(); } const constant_container_type& constants() const { - return _public_table.constants(); + return _public_table->constants(); } const selector_container_type& selectors() const { - return _public_table.selectors(); + return _public_table->selectors(); } virtual void resize_witnesses(std::uint32_t new_size) { - _private_table.resize_witnesses(new_size); + _private_table->resize_witnesses(new_size); } virtual void resize_public_inputs(std::uint32_t new_size) { - _public_table.resize_public_inputs(new_size); + _public_table->resize_public_inputs(new_size); } virtual void resize_constants(std::uint32_t new_size) { - _public_table.resize_constants(new_size); + _public_table->resize_constants(new_size); } virtual void resize_selectors(std::uint32_t new_size) { - _public_table.resize_selectors(new_size); + _public_table->resize_selectors(new_size); } const ColumnType& operator[](std::uint32_t index) const { - if (index < _private_table.size()) - return _private_table[index]; - index -= _private_table.size(); - if (index < _public_table.size()) - return _public_table[index]; + if (index < _private_table->size()) + return (*_private_table)[index]; + index -= _private_table->size(); + if (index < _public_table->size()) + return (*_public_table)[index]; throw std::out_of_range("Private table index out of range."); } - const private_table_type& private_table() const { + std::shared_ptr private_table() const { return _private_table; } - private_table_type move_private_table() { - return std::move(_private_table); + std::shared_ptr public_table() const { + return _public_table; } - const public_table_type& public_table() const { - return _public_table; + std::shared_ptr move_private_table() { + return std::move(_private_table); } - public_table_type move_public_table() { + std::shared_ptr move_public_table() { return std::move(_public_table); } std::uint32_t size() const { - return _private_table.size() + _public_table.size(); + return _private_table->size() + _public_table->size(); } std::uint32_t witnesses_amount() const { - return _private_table.witnesses_amount(); + return _private_table->witnesses_amount(); } std::uint32_t witness_column_size(std::uint32_t index) const { - return _private_table.witness_column_size(index); + return _private_table->witness_column_size(index); } std::uint32_t public_inputs_amount() const { - return _public_table.public_inputs_amount(); + return _public_table->public_inputs_amount(); } std::uint32_t public_input_column_size(std::uint32_t index) const { - return _public_table.public_input_column_size(index); + return _public_table->public_input_column_size(index); } std::uint32_t constants_amount() const { - return _public_table.constants_amount(); + return _public_table->constants_amount(); } std::uint32_t constant_column_size(std::uint32_t index) const { - return _public_table.constant_column_size(index); + return _public_table->constant_column_size(index); } std::uint32_t selectors_amount() const { - return _public_table.selectors_amount(); + return _public_table->selectors_amount(); } std::uint32_t selector_column_size(std::uint32_t index) const { - return _public_table.selector_column_size(index); + return _public_table->selector_column_size(index); } std::uint32_t rows_amount() const { @@ -555,7 +556,7 @@ namespace nil { } bool operator==(plonk_table const &other) const { - return _private_table == other._private_table && _public_table == other._public_table; + return *_private_table == *other._private_table && *_public_table == *other._public_table; } friend std::uint32_t basic_padding( diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp index 63df5e2e11..3f3e7217ad 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_CONSTRAINT_HPP -#define CRYPTO3_ZK_PLONK_CONSTRAINT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_CONSTRAINT_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_CONSTRAINT_HPP + +#ifdef CRYPTO3_ZK_PLONK_CONSTRAINT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -83,6 +87,23 @@ namespace nil { } } + // Constructor for integral types. + template + plonk_constraint(const NumericType& coeff, + typename std::enable_if::value, NumericType>::type* = nullptr) + : math::expression(coeff) { + } + + // Constructor for big_uint. + template + plonk_constraint(const nil::crypto3::multiprecision::big_uint &coeff) + : math::expression(coeff) { + } + + plonk_constraint(const typename VariableType::assignment_type &coeff) + : math::expression(coeff) { + } + typename VariableType::assignment_type evaluate(std::size_t row_index, const plonk_assignment_table &assignments) const { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint_system.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint_system.hpp index a05a927fdf..e040a9d51b 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint_system.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/constraint_system.hpp @@ -32,8 +32,12 @@ // //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_CONSTRAINT_SYSTEM_HPP -#define CRYPTO3_ZK_PLONK_CONSTRAINT_SYSTEM_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_CONSTRAINT_SYSTEM_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_CONSTRAINT_SYSTEM_HPP + +#ifdef CRYPTO3_ZK_PLONK_CONSTRAINT_SYSTEM_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -50,7 +54,6 @@ namespace nil { namespace crypto3 { namespace zk { namespace snark { - /************************* PLONK constraint system ****************************/ constexpr static std::size_t const PLONK_SPECIAL_SELECTOR_ALL_USABLE_ROWS_SELECTED = std::numeric_limits::max(); constexpr static std::size_t const PLONK_SPECIAL_SELECTOR_ALL_NON_FIRST_USABLE_ROWS_SELECTED = std::numeric_limits::max() - 1; // Useful for lookup tables diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/copy_constraint.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/copy_constraint.hpp index 907d034f48..a9a7929ad6 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/copy_constraint.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/copy_constraint.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_COPY_CONSTRAINT_HPP -#define CRYPTO3_ZK_PLONK_COPY_CONSTRAINT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_COPY_CONSTRAINT_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_COPY_CONSTRAINT_HPP + +#ifdef CRYPTO3_ZK_PLONK_COPY_CONSTRAINT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp index de9d06dd4f..4b486bf470 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/detail/column_polynomial.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_TABLE_DETAIL_COLUMN_POLYNOMIAL_HPP -#define CRYPTO3_ZK_PLONK_TABLE_DETAIL_COLUMN_POLYNOMIAL_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_TABLE_DETAIL_COLUMN_POLYNOMIAL_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_TABLE_DETAIL_COLUMN_POLYNOMIAL_HPP + +#ifdef CRYPTO3_ZK_PLONK_TABLE_DETAIL_COLUMN_POLYNOMIAL_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -91,7 +95,7 @@ namespace nil { template math::polynomial_dfs - column_polynomial_dfs(plonk_column column_assignment, + column_polynomial_dfs(const plonk_column& column_assignment, std::shared_ptr> domain) { std::size_t d = std::distance(column_assignment.begin(), column_assignment.end()) - 1; @@ -106,7 +110,7 @@ namespace nil { template std::vector> - column_range_polynomial_dfs(std::vector> column_range_assignment, + column_range_polynomial_dfs(const std::vector>& column_range_assignment, std::shared_ptr> domain) { std::size_t columns_amount = column_range_assignment.size(); @@ -114,7 +118,7 @@ namespace nil { for (std::size_t column_index = 0; column_index < columns_amount; column_index++) { columns[column_index] = - column_polynomial_dfs(std::move(column_range_assignment[column_index]), domain); + column_polynomial_dfs(column_range_assignment[column_index], domain); } return columns; diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/export.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/export.hpp new file mode 100644 index 0000000000..ab6b02916e --- /dev/null +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/export.hpp @@ -0,0 +1,131 @@ +//---------------------------------------------------------------------------// +// Copyright (c) 2024 Daniil Kogtev +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +//---------------------------------------------------------------------------// + + +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_EXPORT_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_EXPORT_HPP + +#include +#include + +#include + +namespace nil { + namespace crypto3 { + namespace zk { + namespace snark { + + using ranges = std::vector>; + + template + void export_table(const plonk_assignment_table& table, + const plonk_table_description& desc, + std::ostream &out, + const ranges& witnesses, + const ranges& public_inputs, + const ranges& constants, + const ranges& selectors, + const ranges& rows, + bool wide_export = false) { // wide_export is for e.g. potentiall fuzzer: does fixed width elements + + + std::ios_base::fmtflags os_flags(out.flags()); + out << std::dec; + + out << "witnesses_size: " << table.witnesses_amount() << " " + << "public_inputs_size: " << table.public_inputs_amount() << " " + << "constants_size: " << table.constants_amount() << " " + << "selectors_size: " << table.selectors_amount() << " " + << "usable_rows_amount: " << desc.usable_rows_amount << "\n"; + + out << std::hex << std::setfill('0'); + std::uint32_t width = wide_export ? (FieldType::modulus_bits + 4 - 1) / 4 : 0; + + for (auto [lower_row, upper_row] : rows) { + for (std::uint32_t i = lower_row; i <= upper_row; i++) { + + for (auto [lower_witness, upper_witness] : witnesses) { + for (std::uint32_t j = lower_witness; j <= upper_witness; j++) { + out << std::setw(width) + << (i < table.witness_column_size(j) ? + table.witness(j)[i] : + 0) + .data + << " "; + } + } + out << "| "; + + for (auto [lower_public_input, upper_public_input] : public_inputs) { + for (std::uint32_t j = lower_public_input; j <= upper_public_input; j++) { + out << std::setw(width) + << (i < table.public_input_column_size(j) ? + table.public_input(j)[i] : + 0) + .data + << " "; + } + } + out << "| "; + + for (auto [lower_constant, upper_constant] : constants) { + for (std::uint32_t j = lower_constant; j <= upper_constant; j++) { + out << std::setw(width) + << (i < table.constant_column_size(j) ? + table.constant(j)[i] : + 0) + .data + << " "; + } + } + out << "| "; + + for (auto [lower_selector, upper_selector] : selectors) { + // Selectors only need a single bit, so we do not renew the size here + for (std::uint32_t j = lower_selector; j <= upper_selector; j++) { + out << (i < table.selector_column_size(j) ? + table.selector(j)[i] : + 0) + .data + << " "; + } + } + out << "\n"; + } + } + + out.flush(); + out.flags(os_flags); + } + + } // namespace snark + + } // namespace zk + + } // namespace crypto3 + +} // namespace nil + + +#endif // PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_EXPORT_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/gate.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/gate.hpp index b05e8182b4..f88914a2fa 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/gate.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/gate.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_GATE_HPP -#define CRYPTO3_ZK_PLONK_GATE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_GATE_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_GATE_HPP + +#ifdef CRYPTO3_ZK_PLONK_GATE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp index 12584aaf30..9d019e089c 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_constraint.hpp @@ -25,9 +25,14 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_LOOKUP_CONSTRAINT_HPP -#define CRYPTO3_ZK_PLONK_LOOKUP_CONSTRAINT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_LOOKUP_CONSTRAINT_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_LOOKUP_CONSTRAINT_HPP +#ifdef CRYPTO3_ZK_PLONK_LOOKUP_CONSTRAINT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif + +#include #include #include @@ -36,6 +41,61 @@ namespace nil { namespace zk { namespace snark { + template + class lookup_input_constraints : public std::vector> { + public: + using constraint_type = crypto3::zk::snark::plonk_constraint; + using base_type = std::vector; + using expression_type = typename constraint_type::base_type; + + // Using the base class's constructors + using std::vector::vector; // Inherit constructors + + // Constructor to initialize from std::vector + lookup_input_constraints(const base_type& other) + : base_type(other) {} + + // Multiply each element with an expression. + lookup_input_constraints& operator*=(const expression_type& other) { + for (auto& element : *this) { + element *= other; + } + return *this; + } + + lookup_input_constraints operator*(const expression_type& other) { + lookup_input_constraints result = *this; + result *= other; + return result; + } + + // Allow multiplication with any container of the same type. + template + lookup_input_constraints& operator*=(const typename std::enable_if_t< + nil::crypto3::detail::is_range::value && std::is_same::value, + Container>& other) { + if (this->size() < other.size()) + this->resize(other.size()); + + auto it1 = this->begin(); + auto it2 = other.begin(); + for (; it2 != other.end(); ++it1, ++it2) { + *it1 *= *it2; + } + return *this; + } + + template + lookup_input_constraints& operator*(const typename std::enable_if_t< + nil::crypto3::detail::is_range::value && std::is_same::value, + Container>& other) { + lookup_input_constraints result = *this; + result *= other; + return result; + } + }; + + template> class plonk_lookup_constraint { public: @@ -45,9 +105,9 @@ namespace nil { using constraint_type = plonk_constraint; std::size_t table_id; - std::vector lookup_input; + lookup_input_constraints lookup_input; - bool operator== (const plonk_lookup_constraint &other) const { + bool operator==(const plonk_lookup_constraint &other) const { return table_id == other.table_id && lookup_input == other.lookup_input; } }; diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_gate.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_gate.hpp index 9e55afce7a..ba8ea78b63 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_gate.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_gate.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_LOOKUP_GATE_HPP -#define CRYPTO3_ZK_PLONK_LOOKUP_GATE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_LOOKUP_GATE_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_LOOKUP_GATE_HPP + +#ifdef CRYPTO3_ZK_PLONK_LOOKUP_GATE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table.hpp index 077bc37d4b..14ed47b411 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_LOOKUP_TABLE_HPP -#define CRYPTO3_ZK_PLONK_LOOKUP_TABLE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_LOOKUP_TABLE_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_LOOKUP_TABLE_HPP + +#ifdef CRYPTO3_ZK_PLONK_LOOKUP_TABLE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table_definition.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table_definition.hpp index 757007d45b..9a17ed13be 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table_definition.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/lookup_table_definition.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_DETAIL_LOOKUP_TABLE_DEFINITION_HPP -#define CRYPTO3_ZK_PLONK_DETAIL_LOOKUP_TABLE_DEFINITION_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_DETAIL_LOOKUP_TABLE_DEFINITION_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_DETAIL_LOOKUP_TABLE_DEFINITION_HPP + +#ifdef CRYPTO3_ZK_PLONK_DETAIL_LOOKUP_TABLE_DEFINITION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -76,7 +80,7 @@ namespace nil { plonk_lookup_table lookup_table; std::string name; - dynamic_table_definition(std::string _name): name(_name), defined(false) {} + dynamic_table_definition(std::string _name): defined(false), name(_name) {} void define(const plonk_lookup_table &table){ BOOST_ASSERT(!defined); diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp index fdda9cfe4a..f474b8a10b 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/padding.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PADDING_HPP -#define CRYPTO3_ZK_PLONK_PADDING_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PADDING_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PADDING_HPP + +#ifdef CRYPTO3_ZK_PLONK_PADDING_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -49,30 +53,30 @@ namespace nil { padded_rows_amount = 8; for (std::uint32_t w_index = 0; w_index < - table._private_table.witnesses_amount(); w_index++) { + table._private_table->witnesses_amount(); w_index++) { - table._private_table._witnesses[w_index].resize(padded_rows_amount, + table._private_table->_witnesses[w_index].resize(padded_rows_amount, FieldType::value_type::zero()); } for (std::uint32_t pi_index = 0; pi_index < - table._public_table.public_inputs_amount(); pi_index++) { + table._public_table->public_inputs_amount(); pi_index++) { - table._public_table._public_inputs[pi_index].resize(padded_rows_amount, + table._public_table->_public_inputs[pi_index].resize(padded_rows_amount, FieldType::value_type::zero()); } for (std::uint32_t c_index = 0; c_index < - table._public_table.constants_amount(); c_index++) { + table._public_table->constants_amount(); c_index++) { - table._public_table._constants[c_index].resize(padded_rows_amount, + table._public_table->_constants[c_index].resize(padded_rows_amount, FieldType::value_type::zero()); } for (std::uint32_t s_index = 0; s_index < - table._public_table.selectors_amount(); s_index++) { + table._public_table->selectors_amount(); s_index++) { - table._public_table._selectors[s_index].resize(padded_rows_amount, + table._public_table->_selectors[s_index].resize(padded_rows_amount, FieldType::value_type::zero()); } @@ -97,30 +101,29 @@ namespace nil { //std::cout << "usable_rows_amount = " << usable_rows_amount << std::endl; //std::cout << "padded_rows_amount = " << padded_rows_amount << std::endl; - for (std::uint32_t w_index = 0; w_index < table._private_table.witnesses_amount(); w_index++) { - table._private_table._witnesses[w_index].resize(usable_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t w_index = 0; w_index < table._private_table->witnesses_amount(); w_index++) { + table._private_table->_witnesses[w_index].resize(usable_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t pi_index = 0; pi_index < table._public_table.public_inputs_amount(); pi_index++) { - table._public_table._public_inputs[pi_index].resize(padded_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t pi_index = 0; pi_index < table._public_table->public_inputs_amount(); pi_index++) { + table._public_table->_public_inputs[pi_index].resize(padded_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t c_index = 0; c_index < table._public_table.constants_amount(); c_index++) { - table._public_table._constants[c_index].resize(padded_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t c_index = 0; c_index < table._public_table->constants_amount(); c_index++) { + table._public_table->_constants[c_index].resize(padded_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t s_index = 0; s_index < table._public_table.selectors_amount(); s_index++) { - table._public_table._selectors[s_index].resize(padded_rows_amount, FieldType::value_type::zero()); + for (std::uint32_t s_index = 0; s_index < table._public_table->selectors_amount(); s_index++) { + table._public_table->_selectors[s_index].resize(padded_rows_amount, FieldType::value_type::zero()); } - for (std::uint32_t w_index = 0; w_index < table._private_table.witnesses_amount(); w_index++) { - table._private_table._witnesses[w_index].resize(padded_rows_amount); + for (std::uint32_t w_index = 0; w_index < table._private_table->witnesses_amount(); w_index++) { + table._private_table->_witnesses[w_index].resize(padded_rows_amount); for(std::size_t i = usable_rows_amount; i < padded_rows_amount; i++) { - table._private_table._witnesses[w_index][i] = alg_rnd(); + table._private_table->_witnesses[w_index][i] = alg_rnd(); } } - return padded_rows_amount; } } // namespace snark diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/params.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/params.hpp index 1115f89b52..dcd1297f2c 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/params.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/params.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_ARITHMETIZATION_PARAMS_HPP -#define CRYPTO3_ZK_PLONK_ARITHMETIZATION_PARAMS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_ARITHMETIZATION_PARAMS_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_ARITHMETIZATION_PARAMS_HPP + +#ifdef CRYPTO3_ZK_PLONK_ARITHMETIZATION_PARAMS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { @@ -53,4 +57,4 @@ namespace nil { } // namespace crypto3 } // namespace nil -#endif // CRYPTO3_ZK_PLONK_ARITHMETIZATION_PARAMS_HPP \ No newline at end of file +#endif // CRYPTO3_ZK_PLONK_ARITHMETIZATION_PARAMS_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/table_description.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/table_description.hpp index bda775459a..676a30273d 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/table_description.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/table_description.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_DESCRIPTION_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_DESCRIPTION_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_DESCRIPTION_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_DESCRIPTION_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_TABLE_DESCRIPTION_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/variable.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/variable.hpp index e8b0f46951..7ccf62a5e2 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/variable.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/arithmetization/plonk/variable.hpp @@ -28,8 +28,12 @@ // - a linear combination (i.e., sum_i a_i * x_i). //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_VARIABLE_HPP -#define CRYPTO3_ZK_PLONK_VARIABLE_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_VARIABLE_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_VARIABLE_HPP + +#ifdef CRYPTO3_ZK_PLONK_VARIABLE_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/keypair.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/keypair.hpp index ae9d84e455..6b32977a6d 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/keypair.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/keypair.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_KEYPAIR_HPP -#define CRYPTO3_ZK_SNARK_KEYPAIR_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_KEYPAIR_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_KEYPAIR_HPP + +#ifdef CRYPTO3_ZK_SNARK_KEYPAIR_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proof.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proof.hpp index 4d88b96856..1ab440960f 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proof.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proof.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_PROOF_HPP -#define CRYPTO3_ZK_SNARK_PROOF_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_PROOF_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_PROOF_HPP + +#ifdef CRYPTO3_ZK_SNARK_PROOF_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -51,4 +55,4 @@ namespace nil { } // namespace crypto3 } // namespace nil -#endif \ No newline at end of file +#endif diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proving_key.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proving_key.hpp index 510fc07466..b6028d4268 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proving_key.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/proving_key.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_PROVING_KEY_HPP -#define CRYPTO3_ZK_SNARK_PROVING_KEY_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_PROVING_KEY_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_PROVING_KEY_HPP + +#ifdef CRYPTO3_ZK_SNARK_PROVING_KEY_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif namespace nil { namespace crypto3 { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/as_waksman.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/as_waksman.hpp index 6c5b5f889d..90b76147cd 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/as_waksman.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/as_waksman.hpp @@ -51,8 +51,12 @@ // Parallel Processing Letters 2002 //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_AS_WAKSMAN_ROUTING_ALGORITHM_HPP -#define CRYPTO3_ZK_AS_WAKSMAN_ROUTING_ALGORITHM_HPP +#ifndef PARALLEL_CRYPTO3_ZK_AS_WAKSMAN_ROUTING_ALGORITHM_HPP +#define PARALLEL_CRYPTO3_ZK_AS_WAKSMAN_ROUTING_ALGORITHM_HPP + +#ifdef CRYPTO3_ZK_AS_WAKSMAN_ROUTING_ALGORITHM_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/benes.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/benes.hpp index e08a71cb70..f68c05e10b 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/benes.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/routing/benes.hpp @@ -38,8 +38,12 @@ // Academic Press 1965 //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_BENES_ROUTING_ALGORITHM_HPP -#define CRYPTO3_ZK_BENES_ROUTING_ALGORITHM_HPP +#ifndef PARALLEL_CRYPTO3_ZK_BENES_ROUTING_ALGORITHM_HPP +#define PARALLEL_CRYPTO3_ZK_BENES_ROUTING_ALGORITHM_HPP + +#ifdef CRYPTO3_ZK_BENES_ROUTING_ALGORITHM_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/set_commitment.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/set_commitment.hpp index 36a51d4374..adedb05af5 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/set_commitment.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/set_commitment.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_SET_COMMITMENT_HPP -#define CRYPTO3_ZK_SNARK_SET_COMMITMENT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_SET_COMMITMENT_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_SET_COMMITMENT_HPP + +#ifdef CRYPTO3_ZK_SNARK_SET_COMMITMENT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/params.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/params.hpp deleted file mode 100644 index 4975900bf5..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/params.hpp +++ /dev/null @@ -1,98 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2018-2021 Mikhail Komarov -// Copyright (c) 2020-2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_PARAMS_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_PARAMS_HPP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template> - struct standard_settings { - constexpr static const std::size_t num_challenge_bytes = 32; - constexpr static const transcript::HashType hash_type = transcript::HashType::Keccak256; - constexpr static const std::size_t program_width = 3; - constexpr static const std::size_t num_shifted_wire_evaluations = 1; - constexpr static const std::uint64_t wire_shift_settings = 0b0100; - constexpr static const bool uses_quotient_mid = false; - constexpr static const std::uint32_t permutation_shift = 30; - constexpr static const std::uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = true; - constexpr static const std::size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - - template - struct unrolled_standard_settings { - constexpr static const size_t num_challenge_bytes = 16; - constexpr static const transcript::HashType hash_type = transcript::HashType::PedersenBlake2s; - constexpr static const size_t program_width = 3; - constexpr static const size_t num_shifted_wire_evaluations = 1; - constexpr static const uint64_t wire_shift_settings = 0b0100; - constexpr static const bool uses_quotient_mid = false; - constexpr static const uint32_t permutation_shift = 30; - constexpr static const uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = false; - constexpr static const size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - - template> - struct turbo_settings { - constexpr static const size_t num_challenge_bytes = 32; - constexpr static const transcript::HashType hash_type = transcript::HashType::Keccak256; - constexpr static const size_t program_width = 4; - constexpr static const size_t num_shifted_wire_evaluations = 4; - constexpr static const uint64_t wire_shift_settings = 0b1111; - constexpr static const bool uses_quotient_mid = false; - constexpr static const uint32_t permutation_shift = 30; - constexpr static const uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = true; - constexpr static const size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - - template - class unrolled_turbo_settings { - public: - constexpr static const size_t num_challenge_bytes = 16; - constexpr static const transcript::HashType hash_type = transcript::HashType::PedersenBlake2s; - constexpr static const size_t program_width = 4; - constexpr static const size_t num_shifted_wire_evaluations = 4; - constexpr static const uint64_t wire_shift_settings = 0b1111; - constexpr static const bool uses_quotient_mid = false; - constexpr static const uint32_t permutation_shift = 30; - constexpr static const uint32_t permutation_mask = 0xC0000000; - constexpr static const bool use_linearisation = false; - constexpr static const size_t num_roots_cut_out_of_vanishing_polynomial = 4; - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_PARAMS_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proof.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proof.hpp deleted file mode 100644 index da18011a35..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proof.hpp +++ /dev/null @@ -1,48 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_PROOF_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_PROOF_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - class plonk_proof; - - template - struct plonk_proof> { - std::vector data; - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_PROOF_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/prover.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/prover.hpp deleted file mode 100644 index 08c543c14e..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/prover.hpp +++ /dev/null @@ -1,394 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_PROVER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_PROVER_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - class plonk_prover; - - template - class plonk_prover> { - using commitment_scheme_type = batched_kate_commitment_scheme<...>; - using constraint_system_type = plonk_constraint_system; - - size_t n; - - std::vector sigma_1_mapping; - std::vector sigma_2_mapping; - std::vector sigma_3_mapping; - - std::vector> random_widgets; - std::vector>> - transition_widgets; - transcript::StandardTranscript transcript; - - std::shared_ptr> key; - std::shared_ptr witness; - std::unique_ptr commitment; - - work_queue queue; - bool uses_quotient_mid; - - plonk_proof proof; - - public: - plonk_prover(std::shared_ptr> input_key, - std::shared_ptr - input_witness, - const transcript::Manifest &input_manifest) : - n(input_key == nullptr ? 0 : input_key->n), - transcript(input_manifest, hash_type, num_challenge_bytes), key(input_key), - witness(input_witness), queue(key.get(), witness.get(), &transcript) { - if (input_witness && witness->wires.count("z") == 0) { - witness->wires.insert({"z", math::polynomial(n, n)}); - } - } - - plonk_prover &operator=(plonk_prover &&other) { - n = other.n; - - random_widgets.resize(0); - transition_widgets.resize(0); - for (size_t i = 0; i < other.random_widgets.size(); ++i) { - random_widgets.emplace_back(std::move(other.random_widgets[i])); - } - for (size_t i = 0; i < other.transition_widgets.size(); ++i) { - transition_widgets.emplace_back(std::move(other.transition_widgets[i])); - } - transcript = other.transcript; - key = std::move(other.key); - witness = std::move(other.witness); - commitment = std::move(other.commitment); - - queue = work_queue(key.get(), witness.get(), &transcript); - return *this; - } - - plonk_prover(plonk_prover &&other) : - n(other.n), transcript(other.transcript), key(std::move(other.key)), - witness(std::move(other.witness)), commitment(std::move(other.commitment)), - queue(key.get(), witness.get(), &transcript) { - for (size_t i = 0; i < other.random_widgets.size(); ++i) { - random_widgets.emplace_back(std::move(other.random_widgets[i])); - } - for (size_t i = 0; i < other.transition_widgets.size(); ++i) { - transition_widgets.emplace_back(std::move(other.transition_widgets[i])); - } - } - - void compute_wire_pre_commitments() { - for (size_t i = 0; i < settings::program_width; ++i) { - std::string wire_tag = "w_" + std::to_string(i + 1); - std::string commit_tag = "W_" + std::to_string(i + 1); - typename TCurve::scalar_field_type::value_type *coefficients = - witness->wires.at(wire_tag).get_coefficients(); - commitment->commit(coefficients, commit_tag, - typename TCurve::scalar_field_type::value_type::zero(), queue); - } - - // add public inputs - const math::polynomial &public_wires_source = key->wire_ffts.at("w_2_fft"); - std::vector public_wires; - for (size_t i = 0; i < key->num_public_inputs; ++i) { - public_wires.push_back(public_wires_source[i]); - } - transcript.add_element("public_inputs", ::to_buffer(public_wires)); - } - - void compute_quotient_pre_commitment() { - // In this method, we compute the commitments to polynomials t_{low}(X), t_{mid}(X) and - // t_{high}(X). Recall, the quotient polynomial t(X) = t_{low}(X) + t_{mid}(X).X^n + - // t_{high}(X).X^{2n} - // - // The reason we split t(X) into three degree-n polynomials is because: - // (i) We want the opening proof polynomials bounded by degree n as the opening algorithm of - // the - // polynomial commitment scheme results in O(n) prover computation. - // (ii) The size of the srs restricts us to compute commitments to polynomials of degree n - // (and disallows for degree 2n and 3n for large n). - // - // The degree of t(X) is determined by the term: - // ((a(X) + βX + γ) (b(X) + βk_1X + γ) (c(X) + βk_2X + γ)z(X)) / Z*_H(X). - // - // Let k = num_roots_cut_out_of_vanishing_polynomial, we have - // deg(t) = (n - 1) * (program_width + 1) - (n - k) - // = n * program_width - program_width - 1 + k - // - // Since we must cut atleast 4 roots from the vanishing polynomial - // (refer to - // ./src/aztec/plonk/proof_system/widgets/random_widgets/permutation_widget_impl.hpp/L247), k = - // 4 => deg(t) = n * program_width - program_width + 3 - // - // For standard plonk, program_width = 3 and thus, deg(t) = 3n. This implies that there would be - // (3n + 1) coefficients of t(X). Now, splitting them into t_{low}(X), t_{mid}(X) and - // t_{high}(X), t_{high} will have (n+1) coefficients while t_{low} and t_{mid} will have n - // coefficients. This means that to commit t_{high}, we need a multi-scalar multiplication of - // size (n+1). Thus, we first compute the commitments to t_{low}(X), t_{mid}(X) using n - // multi-scalar multiplications each and separately compute commitment to t_{high} which is of - // size (n + 1). Note that this must be done only when program_width = 3. - // - // - // NOTE: If in future there is a need to cut off more zeros off the vanishing polynomial, the - // degree of the quotient polynomial t(X) will increase, so the degrees of t_{high}, t_{mid}, - // t_{low} could also increase according to the type of the composer type we are using. - // Currently, for TurboPLONK and Ultra- PLONK, the degree of t(X) is (4n - 1) and hence each - // t_{low}, t_{mid}, t_{high}, t_{higher} each is of degree (n - 1) (and thus contains n - // coefficients). Therefore, we are on the brink! If we need to cut out more zeros off the - // vanishing polynomial, sizes of coefficients of individual t_{i} would change and so we will - // have to ensure the correct size of multi-scalar multiplication in computing the commitments - // to these polynomials. - // - for (size_t i = 0; i < program_width - 1; ++i) { - const size_t offset = n * i; - typename TCurve::scalar_field_type::value_type *coefficients = - &key->quotient_large.get_coefficients()[offset]; - std::string quotient_tag = "T_" + std::to_string(i + 1); - commitment->commit(coefficients, quotient_tag, - typename TCurve::scalar_field_type::value_type::zero(), queue); - } - - typename TCurve::scalar_field_type::value_type *coefficients = - &key->quotient_large.get_coefficients()[(program_width - 1) * n]; - std::string quotient_tag = "T_" + std::to_string(program_width); - typename TCurve::scalar_field_type::value_type program_flag = - program_width == 3 ? typename TCurve::scalar_field_type::value_type::one() : - typename TCurve::scalar_field_type::value_type::zero(); - commitment->commit(coefficients, quotient_tag, program_flag, queue); - } - - void execute_preamble_round() { - queue.flush_queue(); - transcript.add_element("circuit_size", - {static_cast(n >> 24), static_cast(n >> 16), - static_cast(n >> 8), static_cast(n)}); - transcript.add_element("public_input_size", - {static_cast(key->num_public_inputs >> 24), - static_cast(key->num_public_inputs >> 16), - static_cast(key->num_public_inputs >> 8), - static_cast(key->num_public_inputs)}); - transcript.apply_fiat_shamir("init"); - - for (size_t i = 0; i < settings::program_width; ++i) { - // fetch witness wire w_i - std::string wire_tag = "w_" + std::to_string(i + 1); - math::polynomial &wire = witness->wires.at(wire_tag); - - /* - Adding zero knowledge to the witness polynomials. - */ - // To ensure that PLONK is honest-verifier zero-knowledge, we need to ensure that the - // witness polynomials and the permutation polynomial look uniformly random to an adversary. - // To make the witness polynomials a(X), b(X) and c(X) uniformly random, we need to add 2 - // random blinding factors into each of them. i.e. a'(X) = a(X) + (r_1X + r_2) where r_1 and - // r_2 are uniformly random scalar field elements. A natural question is: Why do we need 2 - // random scalars in witness polynomials? The reason is: our witness polynomials are - // evaluated at only 1 point (\scripted{z}), so adding a random degree-1 polynomial - // suffices. - // - // NOTE: In TurboPlonk and UltraPlonk, the witness polynomials are evaluated at 2 points and - // thus we need to add 3 random scalars in them. - // - // We start adding random scalars in `wire` polynomials from index (n - k) upto (n - k + 2). - // For simplicity, we add 3 random scalars even for standard plonk (recall, just 2 of them - // are required) since an additional random scalar would not affect things. - // - // NOTE: If in future there is a need to cut off more zeros off the vanishing polynomial, - // this method will not change. This must be changed only if the number of evaluations of - // witness polynomials change. - // - const size_t w_randomness = 3; - ASSERT(w_randomness < settings::num_roots_cut_out_of_vanishing_polynomial); - for (size_t k = 0; k < w_randomness; ++k) { - wire.at(n - settings::num_roots_cut_out_of_vanishing_polynomial + k) = - algebra::random_element(typename TCurve::scalar_field_type); - } - - math::polynomial &wire_fft = key->wire_ffts.at(wire_tag + "_fft"); - math::polynomial_arithmetic::copy_polynomial(&wire[0], &wire_fft[0], n, n); - queue.add_to_queue({ - work_queue::WorkType::IFFT, - nullptr, - wire_tag, - typename TCurve::scalar_field_type::value_type::zero(), - 0, - }); - } - } - - void execute_first_round() { - queue.flush_queue(); - compute_wire_pre_commitments(); - for (auto &widget : random_widgets) { - widget->compute_round_commitments(transcript, 1, queue); - } - } - - void execute_second_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("eta"); - for (auto &widget : random_widgets) { - widget->compute_round_commitments(transcript, 2, queue); - } - } - - void execute_third_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("beta"); - for (auto &widget : random_widgets) { - widget->compute_round_commitments(transcript, 3, queue); - } - - for (size_t i = 0; i < settings::program_width; ++i) { - std::string wire_tag = "w_" + std::to_string(i + 1); - queue.add_to_queue({ - work_queue::WorkType::FFT, - nullptr, - wire_tag, - typename TCurve::scalar_field_type::value_type::zero(), - 0, - }); - } - } - - void execute_fourth_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("alpha"); - - typename TCurve::scalar_field_type::value_type alpha_base = - typename TCurve::scalar_field_type::value_type::serialize_from_buffer( - transcript.get_challenge("alpha").begin()); - - for (auto &widget : random_widgets) { - alpha_base = widget->compute_quotient_contribution(alpha_base, transcript); - } - for (auto &widget : transition_widgets) { - alpha_base = widget->compute_quotient_contribution(alpha_base, transcript); - } - typename TCurve::scalar_field_type::value_type *q_mid = &key->quotient_mid[0]; - typename TCurve::scalar_field_type::value_type *q_large = &key->quotient_large[0]; - - if constexpr (settings::uses_quotient_mid) { - math::polynomial_arithmetic::divide_by_pseudo_vanishing_polynomial( - key->quotient_mid.get_coefficients(), key->small_domain, key->mid_domain); - } - math::polynomial_arithmetic::divide_by_pseudo_vanishing_polynomial( - key->quotient_large.get_coefficients(), key->small_domain, key->large_domain); - if (settings::uses_quotient_mid) { - key->quotient_mid.coset_ifft(key->mid_domain); - } - key->quotient_large.coset_ifft(key->large_domain); - if (settings::uses_quotient_mid) { - ITERATE_OVER_DOMAIN_START(key->mid_domain); - q_large[i] += q_mid[i]; - ITERATE_OVER_DOMAIN_END; - } - compute_quotient_pre_commitment(); - } - - void execute_fifth_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("z"); // end of 4th round - compute_linearisation_coefficients(); - } - - void execute_sixth_round() { - queue.flush_queue(); - transcript.apply_fiat_shamir("nu"); - - commitment->batch_open(transcript, queue, key, witness); - } - - typename TCurve::scalar_field_type::value_type compute_linearisation_coefficients() { - - typename TCurve::scalar_field_type::value_type zeta = crypto3::marshalling::algebra < - typename TCurve::scalar_field_type >> - (transcript.get_challenge("z").begin()); - - math::polynomial &r = key->linear_poly; - - commitment->add_opening_evaluations_to_transcript(transcript, key, witness, false); - typename TCurve::scalar_field_type::value_type t_eval = - key->quotient_large.evaluate(zeta, 4 * n); - - if constexpr (use_linearisation) { - typename TCurve::scalar_field_type::value_type alpha_base = - typename TCurve::scalar_field_type::value_type::serialize_from_buffer( - transcript.get_challenge("alpha").begin()); - - for (auto &widget : random_widgets) { - alpha_base = widget->compute_linear_contribution(alpha_base, transcript, r); - } - for (auto &widget : transition_widgets) { - alpha_base = widget->compute_linear_contribution(alpha_base, transcript, &r[0]); - } - typename TCurve::scalar_field_type::value_type linear_eval = r.evaluate(zeta, n); - transcript.add_element("r", linear_eval.to_buffer()); - } - transcript.add_element("t", t_eval.to_buffer()); - return t_eval; - } - - plonk_proof &export_proof() { - proof.proof_data = transcript.export_transcript(); - return proof; - } - - plonk_proof &construct_proof() { - execute_preamble_round(); - queue.process_queue(); - execute_first_round(); - queue.process_queue(); - execute_second_round(); - queue.process_queue(); - execute_third_round(); - queue.process_queue(); - execute_fourth_round(); - queue.process_queue(); - execute_fifth_round(); - execute_sixth_round(); - queue.process_queue(); - return export_proof(); - } - - void reset() { - transcript::Manifest manifest = transcript.get_manifest(); - transcript = transcript::StandardTranscript(manifest, settings::hash_type, - settings::num_challenge_bytes); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_PROVER_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proving_key.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proving_key.hpp deleted file mode 100644 index c6d07e51ba..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/proving_key.hpp +++ /dev/null @@ -1,298 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_PLONK_BATCHED_KATE_PROVING_KEY_HPP -#define CRYPTO3_PLONK_BATCHED_KATE_PROVING_KEY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - struct plonk_proving_key_data; - - template - struct plonk_proving_key_data> { - std::uint32_t n; - std::uint32_t num_public_inputs; - bool contains_recursive_proof; - std::vector recursive_proof_public_input_indices; - std::map constraint_selectors; - std::map constraint_selector_ffts; - std::map permutation_selectors; - std::map permutation_selectors_lagrange_base; - std::map permutation_selector_ffts; - }; - - inline bool operator==(plonk_proving_key_data const &lhs, plonk_proving_key_data const &rhs) { - return lhs.n == rhs.n && lhs.num_public_inputs == rhs.num_public_inputs && - lhs.constraint_selectors == rhs.constraint_selectors && - lhs.constraint_selector_ffts == rhs.constraint_selector_ffts && - lhs.permutation_selectors == rhs.permutation_selectors && - lhs.permutation_selectors_lagrange_base == rhs.permutation_selectors_lagrange_base && - lhs.permutation_selector_ffts == rhs.permutation_selector_ffts && - lhs.contains_recursive_proof == rhs.contains_recursive_proof && - lhs.recursive_proof_public_input_indices == rhs.recursive_proof_public_input_indices; - } - - template - class plonk_proving_key; - - template - class plonk_proving_key> { - constexpr static const std::size_t scalar_bytes = TCurve::scalar_field_type::value_bits / BYTE_BITS; - - std::size_t n; - std::size_t num_public_inputs; - - std::map constraint_selectors; - std::map constraint_selectors_lagrange_base; - std::map constraint_selector_ffts; - - std::map permutation_selectors; - std::map permutation_selectors_lagrange_base; - std::map permutation_selector_ffts; - - std::map wire_ffts; - - math::evaluation_domain small_domain; - math::evaluation_domain mid_domain; - math::evaluation_domain large_domain; - - std::shared_ptr reference_string; - - math::polynomial lagrange_1; - math::polynomial opening_poly; - math::polynomial shifted_opening_poly; - math::polynomial linear_poly; - - math::polynomial quotient_mid; - math::polynomial quotient_large; - - algebra::scalar_multiplication::pippenger_runtime_state pippenger_runtime_state; - - std::vector polynomial_manifest; - - bool contains_recursive_proof = false; - std::vector recursive_proof_public_input_indices; - static constexpr std::size_t min_thread_block = 4UL; - - public: - enum LookupType { - NONE, - ABSOLUTE_LOOKUP, - RELATIVE_LOOKUP, - }; - - plonk_proving_key(const std::size_t num_gates, - const std::size_t num_inputs, - std::shared_ptr const &crs) : - n(num_gates), - num_public_inputs(num_inputs), small_domain(n, n), - mid_domain(2 * n, n > min_thread_block ? n : 2 * n), - large_domain(4 * n, n > min_thread_block ? n : 4 * n), reference_string(crs), - pippenger_runtime_state(n + 1) { - init(); - } - - plonk_proving_key(plonk_proving_key_data &&data, - std::shared_ptr const &crs) : - n(data.n), - num_public_inputs(data.num_public_inputs), - constraint_selectors(std::move(data.constraint_selectors)), - constraint_selector_ffts(std::move(data.constraint_selector_ffts)), - permutation_selectors(std::move(data.permutation_selectors)), - permutation_selectors_lagrange_base(std::move(data.permutation_selectors_lagrange_base)), - permutation_selector_ffts(std::move(data.permutation_selector_ffts)), small_domain(n, n), - mid_domain(2 * n, n > min_thread_block ? n : 2 * n), - large_domain(4 * n, n > min_thread_block ? n : 4 * n), reference_string(crs), - pippenger_runtime_state(n + 1), contains_recursive_proof(data.contains_recursive_proof), - recursive_proof_public_input_indices(std::move(data.recursive_proof_public_input_indices)) { - init(); - // TODO: Currently only supporting TurboComposer in serialization! - std::copy(turbo_polynomial_manifest, - turbo_polynomial_manifest + 20, - std::back_inserter(polynomial_manifest)); - } - - void init() { - if (n != 0) { - small_domain.compute_lookup_table(); - mid_domain.compute_lookup_table(); - large_domain.compute_lookup_table(); - } - - reset(); - - lagrange_1 = math::polynomial(4 * n, 4 * n + 8); - math::polynomial_arithmetic::compute_lagrange_polynomial_fft( - lagrange_1.get_coefficients(), small_domain, large_domain); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[0]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[1]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[2]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[3]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[4]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[5]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[6]); - lagrange_1.add_lagrange_base_coefficient(lagrange_1[7]); - - // The opening polynomial W_{\script{z}}(X) in round 5 of prover's algorithm has degree n. - // However, as explained in - // (./src/aztec/plonk/proof_system/prover/prover.cpp/ProverBase::compute_quotient_pre_commitment), - // for standard plonk (program_width = 3) and number of roots cut out of the vanishing - // polynomial is 4, the degree of the quotient polynomial t(X) is 3n. Thus, the number of - // coefficients in t_{high} is (n + 1). But our prover algorithm assumes that each of t_{low}, - // t_{mid}, t_{high} is of degree (n - 1) (i.e. n coefficients in each). Note that: - // deg(W_{\script{z}}) = max{ deg(t_{low}), deg(t_{mid}), deg(t_{high}), deg(a), deg(b), ... } - // => deg(W_{\script{z}}) = n + 1 when program_width is 3! - // Therefore, when program_width is 3, we need to allow the degree of the opening polynomial to - // be (n + 1) and NOT n. - // - opening_poly = math::polynomial(n, n); - shifted_opening_poly = math::polynomial(n, n); - linear_poly = math::polynomial(n, n); - - quotient_mid = math::polynomial(2 * n, 2 * n); - quotient_large = math::polynomial(4 * n, 4 * n); - - memset((void *)&opening_poly[0], 0x00, scalar_bytes * n); - memset((void *)&shifted_opening_poly[0], 0x00, scalar_bytes * n); - memset((void *)&linear_poly[0], 0x00, scalar_bytes * n); - memset((void *)"ient_mid[0], 0x00, scalar_bytes * 2 * n); - memset((void *)"ient_large[0], 0x00, scalar_bytes * 4 * n); - } - - void reset() { - wire_ffts.clear(); - - opening_poly = math::polynomial(n, n); - - math::polynomial w_1_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial w_2_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial w_3_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial w_4_fft = math::polynomial(4 * n + 4, 4 * n + 4); - math::polynomial z_fft = math::polynomial(4 * n + 4, 4 * n + 4); - - memset((void *)&w_1_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&w_2_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&w_3_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&w_4_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - memset((void *)&z_fft[0], 0x00, sizeof(scalar_bytes) * (4 * n + 4)); - - wire_ffts.insert({"w_1_fft", std::move(w_1_fft)}); - wire_ffts.insert({"w_2_fft", std::move(w_2_fft)}); - wire_ffts.insert({"w_3_fft", std::move(w_3_fft)}); - wire_ffts.insert({"w_4_fft", std::move(w_4_fft)}); - wire_ffts.insert({"z_fft", std::move(z_fft)}); - } - - plonk_proving_key &operator=(const plonk_proving_key &other) { - n = other.n; - num_public_inputs = other.num_public_inputs; - constraint_selectors = std::move(other.constraint_selectors); - constraint_selectors_lagrange_base = std::move(other.constraint_selectors_lagrange_base); - constraint_selector_ffts = std::move(other.constraint_selector_ffts); - permutation_selectors = std::move(other.permutation_selectors); - permutation_selectors_lagrange_base = std::move(other.permutation_selectors_lagrange_base); - permutation_selector_ffts = std::move(other.permutation_selector_ffts); - wire_ffts = std::move(other.wire_ffts); - small_domain = std::move(other.small_domain); - mid_domain = std::move(other.mid_domain); - large_domain = std::move(other.large_domain); - reference_string = std::move(other.reference_string); - lagrange_1 = std::move(other.lagrange_1); - opening_poly = std::move(other.opening_poly); - shifted_opening_poly = std::move(other.shifted_opening_poly); - linear_poly = std::move(other.linear_poly); - pippenger_runtime_state = std::move(other.pippenger_runtime_state); - polynomial_manifest = std::move(other.polynomial_manifest); - contains_recursive_proof = other.contains_recursive_proof; - recursive_proof_public_input_indices = std::move(other.recursive_proof_public_input_indices); - - return *this; - } - - plonk_proving_key(const plonk_proving_key &other) : - n(other.n), num_public_inputs(other.num_public_inputs), - constraint_selectors(other.constraint_selectors), - constraint_selectors_lagrange_base(other.constraint_selectors_lagrange_base), - constraint_selector_ffts(other.constraint_selector_ffts), - permutation_selectors(other.permutation_selectors), - permutation_selectors_lagrange_base(other.permutation_selectors_lagrange_base), - permutation_selector_ffts(other.permutation_selector_ffts), wire_ffts(other.wire_ffts), - small_domain(other.small_domain), mid_domain(other.mid_domain), - large_domain(other.large_domain), reference_string(other.reference_string), - lagrange_1(other.lagrange_1), opening_poly(other.opening_poly), - shifted_opening_poly(other.shifted_opening_poly), linear_poly(other.linear_poly), - quotient_mid(other.quotient_mid), quotient_large(other.quotient_large), - pippenger_runtime_state(n + 1), polynomial_manifest(other.polynomial_manifest), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(other.recursive_proof_public_input_indices) { - } - - plonk_proving_key(plonk_proving_key &&other) : - n(other.n), num_public_inputs(other.num_public_inputs), - constraint_selectors(other.constraint_selectors), - constraint_selectors_lagrange_base(other.constraint_selectors_lagrange_base), - constraint_selector_ffts(other.constraint_selector_ffts), - permutation_selectors(other.permutation_selectors), - permutation_selectors_lagrange_base(other.permutation_selectors_lagrange_base), - permutation_selector_ffts(other.permutation_selector_ffts), wire_ffts(other.wire_ffts), - small_domain(std::move(other.small_domain)), mid_domain(std::move(other.mid_domain)), - large_domain(std::move(other.large_domain)), - reference_string(std::move(other.reference_string)), lagrange_1(std::move(other.lagrange_1)), - opening_poly(std::move(other.opening_poly)), - shifted_opening_poly(std::move(other.shifted_opening_poly)), - linear_poly(std::move(other.linear_poly)), - pippenger_runtime_state(std::move(other.pippenger_runtime_state)), - polynomial_manifest(std::move(other.polynomial_manifest)), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(std::move(other.recursive_proof_public_input_indices)) { - } - - std::size_t size_in_bits() const { - ? ? ? ; - } - - bool operator==(const plonk_proving_key &other) const { - return this->n == other.n && this->num_public_inputs == other.num_public_inputs && - this->constraint_selectors == other.constraint_selectors && - this->constraint_selector_ffts == other.constraint_selector_ffts && - this->permutation_selectors == other.permutation_selectors && - this->permutation_selectors_lagrange_base == other.permutation_selectors_lagrange_base && - this->permutation_selector_ffts == other.permutation_selector_ffts && - this->contains_recursive_proof == other.contains_recursive_proof && - this->recursive_proof_public_input_indices == other.recursive_proof_public_input_indices; - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_PLONK_BATCHED_KATE_PROVING_KEY_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verification_key.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verification_key.hpp deleted file mode 100644 index 7062da58eb..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verification_key.hpp +++ /dev/null @@ -1,153 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_PLONK_BATCHED_KATE_VERIFICATION_KEY_HPP -#define CRYPTO3_PLONK_BATCHED_KATE_VERIFICATION_KEY_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - struct plonk_verification_key_data; - - template - struct plonk_verification_key_data> { - std::uint32_t n; - std::uint32_t num_public_inputs; - std::map::value_type> constraint_selectors; - std::map::value_type> permutation_selectors; - bool contains_recursive_proof = false; - std::vector recursive_proof_public_input_indices; - }; - - inline bool operator==(plonk_verification_key_data const &lhs, plonk_verification_key_data const &rhs) { - return lhs.n == rhs.n && lhs.num_public_inputs == rhs.num_public_inputs && - lhs.constraint_selectors == rhs.constraint_selectors && - lhs.permutation_selectors == rhs.permutation_selectors; - } - - template - class plonk_verification_key; - - template - class plonk_verification_key> { - using commitment_scheme_type = batched_kate_commitment_scheme<...>; - - constexpr static const std::size_t scalar_bytes = TCurve::scalar_field_type::value_bits / BYTE_BITS; - - std::size_t n; - std::size_t num_public_inputs; - - math::evaluation_domain domain; - - std::shared_ptr reference_string; - - std::map::value_type> constraint_selectors; - - std::map::value_type> permutation_selectors; - - std::vector polynomial_manifest; - - // this is a member variable because stdlib::field has no `pow` method, we - // have to compute this differently for the normal and recursive settings respectively - typename TCurve::scalar_field_type::value_type z_pow_n; - - bool contains_recursive_proof = false; - std::vector recursive_proof_public_input_indices; - std::size_t program_width = 3; - - public: - plonk_verification_key(const std::size_t num_gates, - const std::size_t num_inputs, - std::shared_ptr const &crs) : - n(num_gates), - num_public_inputs(num_inputs), domain(n), reference_string(crs) { - } - - plonk_verification_key(plonk_verification_key_data &&data, - std::shared_ptr const &crs) : - n(data.n), - num_public_inputs(data.num_public_inputs), domain(n), reference_string(crs), - constraint_selectors(std::move(data.constraint_selectors)), - permutation_selectors(std::move(data.permutation_selectors)), - contains_recursive_proof(data.contains_recursive_proof), - recursive_proof_public_input_indices(std::move(data.recursive_proof_public_input_indices)) { - // TODO: Currently only supporting TurboComposer in serialization! - std::copy(turbo_polynomial_manifest, - turbo_polynomial_manifest + 20, - std::back_inserter(polynomial_manifest)); - } - - plonk_verification_key &operator=(plonk_verification_key &&other) { - n = other.n; - num_public_inputs = other.num_public_inputs; - reference_string = std::move(other.reference_string); - constraint_selectors = std::move(other.constraint_selectors); - permutation_selectors = std::move(other.permutation_selectors); - polynomial_manifest = std::move(other.polynomial_manifest); - domain = std::move(other.domain); - contains_recursive_proof = (other.contains_recursive_proof); - recursive_proof_public_input_indices = std::move(other.recursive_proof_public_input_indices); - return *this; - } - - plonk_verification_key(const plonk_verification_key &other) : - n(other.n), num_public_inputs(other.num_public_inputs), domain(other.domain), - reference_string(other.reference_string), constraint_selectors(other.constraint_selectors), - permutation_selectors(other.permutation_selectors), - polynomial_manifest(other.polynomial_manifest), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(other.recursive_proof_public_input_indices) { - } - - plonk_verification_key(plonk_verification_key &&other) : - n(other.n), num_public_inputs(other.num_public_inputs), domain(other.domain), - reference_string(other.reference_string), constraint_selectors(other.constraint_selectors), - permutation_selectors(other.permutation_selectors), - polynomial_manifest(other.polynomial_manifest), - contains_recursive_proof(other.contains_recursive_proof), - recursive_proof_public_input_indices(other.recursive_proof_public_input_indices) { - } - - std::size_t size_in_bits() const { - ? ? ? ; - } - - bool operator==(const plonk_verification_key &other) const { - return this->n == rhs.n && this->num_public_inputs == rhs.num_public_inputs && - this->constraint_selectors == rhs.constraint_selectors && - this->permutation_selectors == rhs.permutation_selectors; - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_PLONK_BATCHED_KATE_VERIFICATION_KEY_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verifier.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verifier.hpp deleted file mode 100644 index e37ec784ec..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/kate/verifier.hpp +++ /dev/null @@ -1,292 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_KATE_VERIFIER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_KATE_VERIFIER_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template - class plonk_verifier; - - template - class plonk_verifier> { - using commitment_scheme_type = batched_kate_commitment_scheme<...>; - using constraint_system_type = plonk_constraint_system; - - transcript::Manifest manifest; - - std::shared_ptr> key; - std::map::value_type> kate_g1_elements; - std::map kate_fr_elements; - std::unique_ptr commitment; - - public: - plonk_verifier(std::shared_ptr> verifier_key, - const transcript::Manifest &input_manifest) : - manifest(input_manifest), - key(verifier_key) { - } - - plonk_verifier &operator=(plonk_verifier &&other) { - key = other.key; - manifest = other.manifest; - commitment = (std::move(other.commitment)); - kate_g1_elements.clear(); - kate_fr_elements.clear(); - return *this; - } - - plonk_verifier(plonk_verifier &&other) : - manifest(other.manifest), key(other.key), commitment(std::move(other.commitment)) { - } - - bool validate_commitments() { - // TODO - return true; - } - - bool validate_scalars() { - // TODO - return true; - } - - bool process(const plonk_proof &proof) { - // This function verifies a PLONK proof for given program settings. - // A PLONK proof for standard PLONK with linearisation as on page 31 in the paper is of the - // form: - // - // π_SNARK = { [a]_1,[b]_1,[c]_1,[z]_1,[t_{low}]_1,[t_{mid}]_1,[t_{high}]_1,[W_z]_1,[W_zω]_1 - // \in G, - // a_eval, b_eval, c_eval, sigma1_eval, sigma2_eval, r_eval, z_eval_omega \in F } - // - // Proof π_SNARK must be first added in the transcrip with other program settings. - // - key->program_width = program_settings::program_width; - transcript::StandardTranscript transcript = - transcript::StandardTranscript(proof.proof_data, - manifest, - program_settings::hash_type, - program_settings::num_challenge_bytes); - - // Compute challenges using Fiat-Shamir heuristic from transcript - transcript.add_element( - "circuit_size", - {static_cast(key->n >> 24), static_cast(key->n >> 16), - static_cast(key->n >> 8), static_cast(key->n)}); - transcript.add_element("public_input_size", - {static_cast(key->num_public_inputs >> 24), - static_cast(key->num_public_inputs >> 16), - static_cast(key->num_public_inputs >> 8), - static_cast(key->num_public_inputs)}); - transcript.apply_fiat_shamir("init"); - transcript.apply_fiat_shamir("eta"); - transcript.apply_fiat_shamir("beta"); - transcript.apply_fiat_shamir("alpha"); - transcript.apply_fiat_shamir("z"); - - const typename TCurve::scalar_field_type::value_type alpha = - crypto3::marshalling::algebra( - transcript.get_challenge("alpha").begin()); - const typename TCurve::scalar_field_type::value_type zeta = - crypto3::marshalling::algebra( - transcript.get_challenge("z").begin()); - - // Compute the evaluations of the lagrange polynomials L_1(X) and L_{n - k}(X) at X = zeta. - // Here k = num_roots_cut_out_of_the_vanishing_polynomial and n is the size of the evaluation - // domain. - const auto lagrange_evals = - math::polynomial_arithmetic::get_lagrange_evaluations(zeta, key->domain); - - // Step 8: Compute quotient polynomial evaluation at zeta - // r_eval − ((a_eval + β.sigma1_eval + γ)(b_eval + β.sigma2_eval + γ)(c_eval + γ) - // z_eval_omega)α − L_1(zeta).α^{3} + (z_eval_omega - ∆_{PI}).L_{n-k}(zeta)α^{2} - // t_eval = - // -------------------------------------------------------------------------------------------------------------------------------------------------------------- - // Z_H*(zeta) - // where Z_H*(X) is the modified vanishing polynomial. - // The `compute_quotient_evaluation_contribution` function computes the numerator of t_eval - // according to the program settings for standard/turbo/ultra PLONK. - // - key->z_pow_n = zeta; - for (size_t i = 0; i < key->domain.log2_size; ++i) { - key->z_pow_n *= key->z_pow_n; - } - typename TCurve::scalar_field_type::value_type t_eval = - typename TCurve::scalar_field_type::value_type::zero(); - program_settings::compute_quotient_evaluation_contribution( - key.get(), alpha, transcript, t_eval); - t_eval *= lagrange_evals.vanishing_poly.invert(); - transcript.add_element("t", t_eval.to_buffer()); - - transcript.apply_fiat_shamir("nu"); - transcript.apply_fiat_shamir("separator"); - const typename TCurve::scalar_field_type::value_type separator_challenge = - crypto3::marshalling::algebra( - transcript.get_challenge("separator").begin()); - - // In the following function, we do the following computation. - // Step 10: Compute batch opening commitment [F]_1 - // [F] := [t_{low}]_1 + \zeta^{n}.[tmid]1 + \zeta^{2n}.[t_{high}]_1 - // + [D]_1 + \nu_{a}.[a]_1 + \nu_{b}.[b]_1 + \nu_{c}.[c]_1 - // + \nu_{\sigma1}.[s_{\sigma_1}]1 + \nu_{\sigma2}.[s_{\sigma_2}]1 - // - // We do not compute [D]_1 term in this method as the information required to compute [D]_1 - // in inadequate as far as this KateCommitmentScheme class is concerned. - // - // Step 11: Compute batch evaluation commitment [E]_1 - // [E]_1 := (t_eval + \nu_{r}.r_eval + \nu_{a}.a_eval + \nu_{b}.b_eval - // \nu_{c}.c_eval + \nu_{\sigma1}.sigma1_eval + \nu_{\sigma2}.sigma2_eval + - // nu_z_omega.separator.z_eval_omega) . [1]_1 - // - // Note that we do not actually compute the scalar multiplications but just accumulate the - // scalars and the group elements in different vectors. - // - commitment->batch_verify(transcript, kate_g1_elements, kate_fr_elements, key); - - // Step 9: Compute partial opening batch commitment [D]_1: - // [D]_1 = (a_eval.b_eval.[qM]_1 + a_eval.[qL]_1 + b_eval.[qR]_1 + c_eval.[qO]_1 + - // [qC]_1) * nu_{linear} * α - // >> selector polynomials - // + [(a_eval + β.z + γ)(b_eval + β.k_1.z + γ)(c_eval + β.k_2.z + γ).α + - // L_1(z).α^{3}].nu_{linear}.[z]_1 >> grand product perm polynomial - // - (a_eval + β.sigma1_eval + γ)(b_eval + β.sigma2_eval + - // γ)α.β.nu_{linear}.z_omega_eval.[sigma3]_1 >> last perm polynomial - // - // Again, we dont actually compute the MSMs and just accumulate scalars and group elements and - // postpone MSM to last step. - // - append_scalar_multiplication_inputs(key.get(), alpha, transcript, kate_fr_elements); - - // Fetch the group elements [W_z]_1,[W_zω]_1 from the transcript - typename TCurve::g1_type::value_type PI_Z = - crypto3::marshalling::algebra::value_type>( - &transcript.get_element("PI_Z")[0]); - typename TCurve::g1_type::value_type PI_Z_OMEGA = - crypto3::marshalling::algebra::value_type>( - &transcript.get_element("PI_Z_OMEGA")[0]); - - // Accumulate pairs of scalars and group elements which would be used in the final pairing - // check. - kate_g1_elements.insert({"PI_Z_OMEGA", PI_Z_OMEGA}); - kate_fr_elements.insert({"PI_Z_OMEGA", zeta * key->domain.root * separator_challenge}); - - kate_g1_elements.insert({"PI_Z", PI_Z}); - kate_fr_elements.insert({"PI_Z", zeta}); - - validate_commitments(); - validate_scalars(); - - std::vector scalars; - std::vector::value_type> elements; - - for (const auto &[key, value] : kate_g1_elements) { - if (value.on_curve()) { - scalars.emplace_back(kate_fr_elements.at(key)); - elements.emplace_back(value); - } - } - - size_t num_elements = elements.size(); - elements.resize(num_elements * 2); - algebra::scalar_multiplication::generate_pippenger_point_table( - &elements[0], &elements[0], num_elements); - scalar_multiplication::pippenger_runtime_state state(num_elements); - - typename TCurve::g1_type<>::value_type P[2]; - - P[0] = - alegbra::scalar_multiplication::pippenger(&scalars[0], &elements[0], num_elements, state); - P[1] = -(typename TCurve::g1_type<>::value_type(PI_Z_OMEGA) * separator_challenge + PI_Z); - - if (key->contains_recursive_proof) { - assert(key->recursive_proof_public_input_indices.size() == 16); - const auto &inputs = transcript.get_field_element_vector("public_inputs"); - const auto recover_fq_from_public_inputs = - [&inputs](const size_t idx0, const size_t idx1, const size_t idx2, const size_t idx3) { - const uint256_t l0 = inputs[idx0]; - const uint256_t l1 = inputs[idx1]; - const uint256_t l2 = inputs[idx2]; - const uint256_t l3 = inputs[idx3]; - - const uint256_t limb = l0 + (l1 << NUM_LIMB_BITS_IN_FIELD_SIMULATION) + - (l2 << (NUM_LIMB_BITS_IN_FIELD_SIMULATION * 2)) + - (l3 << (NUM_LIMB_BITS_IN_FIELD_SIMULATION * 3)); - return typename TCurve::base_field_type::value_type(limb); - }; - - const auto recursion_separator_challenge = - transcript.get_challenge_field_element("separator").sqr(); - - const typename TCurve::base_field_type::value_type x0 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[0], - key->recursive_proof_public_input_indices[1], - key->recursive_proof_public_input_indices[2], - key->recursive_proof_public_input_indices[3]); - const typename TCurve::base_field_type::value_type y0 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[4], - key->recursive_proof_public_input_indices[5], - key->recursive_proof_public_input_indices[6], - key->recursive_proof_public_input_indices[7]); - const typename TCurve::base_field_type::value_type x1 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[8], - key->recursive_proof_public_input_indices[9], - key->recursive_proof_public_input_indices[10], - key->recursive_proof_public_input_indices[11]); - const typename TCurve::base_field_type::value_type y1 = - recover_fq_from_public_inputs(key->recursive_proof_public_input_indices[12], - key->recursive_proof_public_input_indices[13], - key->recursive_proof_public_input_indices[14], - key->recursive_proof_public_input_indices[15]); - P[0] += typename TCurve::g1_type<>::value_type(x0, y0, 1) * recursion_separator_challenge; - P[1] += typename TCurve::g1_type<>::value_type(x1, y1, 1) * recursion_separator_challenge; - } - - typename TCurve::g1_type<>::value_type::batch_normalize(P, 2); - - typename TCurve::g1_type::value_type P_affine[2] { - {P[0].x, P[0].y}, - {P[1].x, P[1].y}, - }; - - // The final pairing check of step 12. - typename TCurve::gt_type::value_type result = - algebra::pairing::reduced_ate_pairing_batch_precomputed( - P_affine, key->reference_string->get_precomputed_g2_lines(), 2); - - return (result == typename TCurve::gt_type::value_type::one()); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_KATE_VERIFIER_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/alphas.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/alphas.hpp deleted file mode 100644 index 148668c6a6..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/alphas.hpp +++ /dev/null @@ -1,93 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ALPHAS_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ALPHAS_HPP - -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - enum argument_type; - - template - struct Alphas { - /// The next power of alpha to use - /// the end result will be [1, alpha^{next_power - 1}] - int next_power; - /// The mapping between constraint types and powers of alpha - // std::map> mapping; - /// The powers of alpha: 1, alpha, alpha^2, etc. - /// If set to [Some], you can't register new constraints. - std::vector alphas; - std::unordered_map> mapping; - - Alphas() : next_power(0) {} - // Create alphas from 0 to next_power - 1 - - void register_(argument_type arg, int power){ - if(mapping.find(arg) == mapping.end()){ - mapping[arg] = std::make_pair(next_power, power); - } - - next_power += power; - } - - void instantiate(typename FieldType::value_type alpha) { - typename FieldType::value_type last_power = FieldType::value_type::one(); - alphas.clear(); - alphas.reserve(next_power); - alphas.push_back(last_power); - for (size_t i = 1; i < next_power; ++i) { - alphas.push_back(alphas.back() * alpha); - // last_power *= alpha; - // alphas[i + 1] = last_power; - } - } - - // Return num alphas - std::vector get_alphas(argument_type arg, std::size_t num) { - if(mapping.find(arg) == mapping.end()){ - assert(false); - } - std::pair range = mapping[arg]; - BOOST_ASSERT_MSG(num <= range.second, "Not enough alphas to return"); - - return std::vector(alphas.begin() + range.first, alphas.begin() + range.first + num); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -}; // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ALPHAS_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constants.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constants.hpp deleted file mode 100644 index d9f0f08099..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constants.hpp +++ /dev/null @@ -1,51 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_CONSTANTS_HPP -#define CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_CONSTANTS_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - struct kimchi_constant { - constexpr static const std::size_t CHALLENGE_LENGTH_IN_LIMBS = 2; - constexpr static const std::size_t PERMUTES = 7; - constexpr static const std::size_t CONSTRAINTS = 3; - constexpr static const std::size_t COLUMNS = 15; - constexpr static const std::size_t SPONGE_CAPACITY = 1; - constexpr static const std::size_t SPONGE_RATE = 2; - constexpr static const std::size_t ZK_ROWS = 3; - }; - } // namespace components - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_CONSTANTS_HPP \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constraints.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constraints.hpp deleted file mode 100644 index 54024379d1..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/constraints.hpp +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_CONSTRAINTS_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_CONSTRAINTS_HPP - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct ConstraintSystem{ - typedef typename FieldType::value_type value_type; - // typedef proof_evaluation_type proof_evaluation_type; - - constexpr static const std::size_t CONSTRAINTS = 3; - constexpr static const std::size_t ZK_ROWS = 3; - constexpr static const std::size_t GENERIC_REGISTERS = 3; - - static value_type perm_scalars(std::vector>& e, value_type beta, - value_type& gamma, std::vector& alphas, - value_type& zkp_zeta){ - value_type res = e[1].z * beta * alphas.front() * zkp_zeta; - for(int i = 0; i < std::min(e[0].w.size(), e[0].s.size()); ++i){ - res *= (gamma + (beta * e[0].s[i]) + e[0].w[i]); - } - - return -res; - } - - static void generic_gate(std::vector& res, const value_type& alpha_pow, - const std::size_t register_offset, const value_type& generic_zeta, - const std::array& w_zeta){ - value_type alpha_generic = alpha_pow * generic_zeta; - - // addition - res.push_back(alpha_generic * w_zeta[register_offset]); - res.push_back(alpha_generic * w_zeta[register_offset + 1]); - res.push_back(alpha_generic * w_zeta[register_offset + 2]); - - // multiplication - res.push_back(alpha_generic * w_zeta[register_offset] * w_zeta[register_offset + 1]); - - // constant - res.push_back(alpha_generic); - } - static std::vector gnrc_scalars(const std::vector& alphas, - const std::array& w_zeta, - const value_type& generic_zeta){ - std::vector res; - - generic_gate(res, alphas[0], 0, generic_zeta, w_zeta); - generic_gate(res, alphas[1], GENERIC_REGISTERS, generic_zeta, w_zeta); - - return res; - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - - -#endif \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail.hpp deleted file mode 100644 index c32684508b..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail.hpp +++ /dev/null @@ -1,175 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_DETAIL_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_DETAIL_HPP - -#include -#include -#include -#include -#include -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - /// The collection of constants required to evaluate an `Expr`. - template - struct Constants { - /// The challenge alpha from the PLONK IOP. - typename FieldType::value_type alpha; - /// The challenge beta from the PLONK IOP. - typename FieldType::value_type beta; - /// The challenge gamma from the PLONK IOP. - typename FieldType::value_type gamma; - /// The challenge joint_combiner which is used to combine - /// joint lookup tables. - typename FieldType::value_type joint_combiner; - /// The endomorphism coefficient - typename FieldType::value_type endo_coefficient; - /// The MDS matrix - typename hashes::detail::poseidon_constants>::mds_matrix_type mds; - }; - - enum gate_type { - /// Zero gate - Zero = 0, - /// Generic arithmetic gate - Generic = 1, - /// Poseidon permutation gate - Poseidon = 2, - /// Complete EC addition in Affine form - CompleteAdd = 3, - /// EC variable base scalar multiplication - VarBaseMul = 4, - /// EC variable base scalar multiplication with group endomorphim optimization - EndoMul = 5, - /// Gate for computing the scalar corresponding to an endoscaling - EndoMulScalar = 6, - /// ChaCha - ChaCha0 = 7, - ChaCha1 = 8, - ChaCha2 = 9, - ChaChaFinal = 10, - /// Lookup - Lookup = 11, - /// Cairo - CairoClaim = 12, - CairoInstruction = 13, - CairoFlags = 14, - CairoTransition = 15, - // Range check (16-24) - RangeCheck0 = 16, - RangeCheck1 = 17, - }; - - enum argument_type { - /// Gates in the PLONK constraint system. - /// As gates are mutually exclusive (a single gate is set per row), - /// we can reuse the same powers of alpha across gates. - GateType, - /// The permutation argument - Permutation, - /// The lookup argument - LookupArgument - }; - - template - struct evaluation_domain { - std::size_t log_size_of_group; - FieldType group_gen; - }; - - template - struct arithmetic_sponge_params { - std::vector> round_constants; - typename hashes::detail::poseidon_constants>::mds_matrix_type mds; - }; - - struct Column; - - template - struct Linearization { - ContainerType constant_term; - std::vector> index_term; - }; - - template - struct lookup_verifier_index { - typedef typename commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - - enum lookups_used { - Single, Joint - } lookup_used; - std::vector lookup_table; - std::vector lookup_selectors; - - commitment_type table_ids; - - std::size_t max_joint_size; - - commitment_type runtime_tables_selector; - bool runtime_tables_selector_is_used; - - static commitment_type combine_table(std::vector &columns, - typename scalar_field_type::value_type column_combiner, - typename scalar_field_type::value_type table_id_combiner, - commitment_type &table_id_vector, - commitment_type &runtime_vector) { - typename scalar_field_type::value_type j = scalar_field_type::value_type::one(); - std::vector scalars; - std::vector commitments; - - for (auto &comm: columns) { - scalars.push_back(j); - commitments.push_back(comm); - j *= column_combiner; - } - - if (table_id_vector.unshifted.size() != 0) { - scalars.push_back(table_id_combiner); - commitments.push_back(table_id_vector); - } - - if (runtime_vector.unshifted.size() != 0) { - scalars.push_back(column_combiner); - commitments.push_back(runtime_vector); - } - - return commitment_scheme::commitment_type::multi_scalar_mul(commitments, scalars); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_DETAIL_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/kimchi_functions.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/kimchi_functions.hpp deleted file mode 100644 index 68b97fc43c..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/kimchi_functions.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef CRYPTO3_ZK_KIMCHI_FUNCTIONS -#define CRYPTO3_ZK_KIMCHI_FUNCTIONS - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct kimchi_functions { - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - - static typename scalar_field_type::value_type - shift_scalar(const typename scalar_field_type::value_type &x) { - typename scalar_field_type::value_type two = typename scalar_field_type::value_type(2); - typename scalar_field_type::value_type two_pow = two.pow(scalar_field_type::modulus_bits); - if (scalar_field_type::modulus < base_field_type::modulus) { - return (x - (two_pow + scalar_field_type::value_type::one())) / two; - } else { - return x - two_pow; - } - } - }; - } - } - } -} - -#endif \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/mapping.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/mapping.hpp deleted file mode 100644 index 6613e53615..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/detail/mapping.hpp +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef CRYPTO3_ZK_SNARK_PICKLES_TO_GROUP_MAP -#define CRYPTO3_ZK_SNARK_PICKLES_TO_GROUP_MAP - -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct group_map { - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - typedef typename CurveType::template g1_type group_type; - typedef typename base_field_type::value_type value_type; - constexpr static const typename base_field_type::integral_type a = CurveType::template g1_type<>::params_type::a; - constexpr static const typename base_field_type::integral_type b = CurveType::template g1_type<>::params_type::b; - - value_type u; - value_type fu; - value_type sqrt_neg_three_u_squared_minus_u_over_2; - value_type sqrt_neg_three_u_squared; - value_type inv_three_u_squared; - - static value_type curve_eqn(value_type x) { - value_type res = x; - res *= x; - res += a; - res *= x; - res += b; - return res; - } - - group_map() { - u = value_type(1); - while (true) { - fu = curve_eqn(u); - if (!fu.is_zero()) { - break; - } else { - ++u; - } - } - - value_type three_u_squared = value_type(3) * u.squared(); - inv_three_u_squared = three_u_squared.inversed(); - sqrt_neg_three_u_squared = (-three_u_squared).sqrt(); - sqrt_neg_three_u_squared_minus_u_over_2 = - (sqrt_neg_three_u_squared - u) * (value_type(2)).inversed(); - } - - std::array potential_xs_helper(value_type &t2, value_type &alpha) { - value_type x1 = sqrt_neg_three_u_squared_minus_u_over_2 - - t2.squared() * alpha * sqrt_neg_three_u_squared; - value_type x2 = -u - x1; - value_type t2_plus_fu = t2 + fu; - value_type x3 = u - t2_plus_fu.squared() * alpha * t2_plus_fu * inv_three_u_squared; - return std::array({x1, x2, x3}); - } - - std::array potential_xs(value_type &t) { - value_type t2 = t.squared(); - value_type alpha = ((t2 + fu) * t2).inversed(); - - return potential_xs_helper(t2, alpha); - } - - typename group_type::value_type get_xy(value_type &t) { - std::array xvec = potential_xs(t); - for (auto &x: xvec) { - value_type y = curve_eqn(x).sqrt(); - if (y.squared() == x.pow(3) + a * x + b) { - return typename group_type::value_type(x, y); - } - } - return typename group_type::value_type(); - } - - typename group_type::value_type to_group(value_type t) { - return get_xy(t); - } - }; - - template - struct ScalarChallenge { - typename FieldType::value_type to_field(const typename FieldType::value_type &endo_coeff) { - uint64_t length_in_bits = (64 * kimchi_constant::CHALLENGE_LENGTH_IN_LIMBS); - typename FieldType::integral_type rep = typename FieldType::integral_type(_val.data); - - typename FieldType::value_type a = 2; - typename FieldType::value_type b = 2; - - typename FieldType::value_type one = FieldType::value_type::one(); - typename FieldType::value_type neg_one = -one; - - for (int32_t i = length_in_bits / 2 - 1; i >= 0; --i) { - a = a.doubled(); - b = b.doubled(); - - bool r_2i = boost::multiprecision::bit_test(rep, 2 * i); - typename FieldType::value_type s; - if (r_2i) { - s = one; - } else { - s = neg_one; - } - if (boost::multiprecision::bit_test(rep, 2 * i + 1) == 0) { - b += s; - } else { - a += s; - } - } - - return a * endo_coeff + b; - } - - typename FieldType::value_type value() { - return _val; - } - - ScalarChallenge(typename FieldType::value_type _val) : _val(_val) {} - - ScalarChallenge() = default; - - typename FieldType::value_type _val; - }; - } - } - } -} - - -#endif \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/expr.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/expr.hpp deleted file mode 100644 index 6a62452cf6..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/expr.hpp +++ /dev/null @@ -1,240 +0,0 @@ -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_EXPR_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_EXPR_HPP - -#include -#include -#include - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - typename FieldType::value_type unnormalized_lagrange_basis(math::basic_radix2_domain domain, int i, - typename FieldType::value_type pt){ - typename FieldType::value_type omega_i = i < 0 ? domain.omega.pow(-i).inversed() : domain.omega.pow(i); - - return domain.compute_vanishing_polynomial(pt) / (pt - omega_i); - } - - struct LookupPattern { - enum lookup_pattern_type{ - ChaCha, - ChaChaFinal, - LookupGate, - RangeCheckGate, - }; - }; - - enum column_type { - Witness, - Z, - LookupSorted, - LookupAggreg, - LookupTable, - LookupKindIndex, - LookupRuntimeSelector, - LookupRuntimeTable, - Index, - Coefficient - }; - - struct Column{ - - Column(gate_type gate) : column(column_type::Index), index_value(gate) {} - - Column(column_type column, std::size_t value) : column(column), witness_value(value), - lookup_sorted_value(value), coefficient_value(value) {} - - Column() = default; - - column_type column; - std::size_t witness_value; - std::size_t lookup_sorted_value; - LookupPattern::lookup_pattern_type lookup_kind_index_value; - gate_type index_value; - std::size_t coefficient_value; - }; - - enum CurrOrNext{ - Curr = 0, - Next = 1, - }; - - struct Variable{ - Column col; - CurrOrNext row; - - Variable(Column col, CurrOrNext row = CurrOrNext::Curr) : col(col), row(row) {} - - Variable() = default; - }; - - template - typename FieldType::value_type variable_evaluate(Variable& var, std::vector> &evals){ - proof_evaluation_type temp_eval = evals[var.row]; - - if(var.col.column == column_type::Witness){ - return temp_eval.w[var.col.witness_value]; - } - else if(var.col.column == column_type::Z){ - return temp_eval.z; - } - else if(var.col.column == column_type::LookupSorted){ - return temp_eval.lookup.sorted[var.col.lookup_sorted_value]; - } - else if(var.col.column == column_type::LookupAggreg){ - return temp_eval.lookup.aggreg; - } - else if(var.col.column == column_type::LookupTable){ - return temp_eval.lookup.table; - } - else if(var.col.column == column_type::LookupRuntimeTable){ - return temp_eval.lookup.runtime; - } - else if(var.col.column == column_type::Index && var.col.index_value == gate_type::Poseidon){ - return temp_eval.poseidon_selector; - } - else if(var.col.column == column_type::Index && var.col.index_value == gate_type::Generic){ - return temp_eval.generic_selector; - } - - return typename FieldType::value_type(); - } - - enum token_type{ - Alpha, - Beta, - Gamma, - JointCombiner, - EndoCoefficient, - Mds, - Literal, - Cell, - Dup, - Pow, - Add, - Mul, - Sub, - VanishesOnLast4Rows, - UnnormalizedLagrangeBasis, - Store, - Load - }; - - template - struct PolishToken { - // typedef typename CurveType::scalar_field_type scalar_field_type; - // typedef proof_evaluation_type - - token_type token; - std::pair mds_value; - typename FieldType::value_type literal_value; - Variable cell_value; - std::size_t pow_value; - int unnormalized_lagrange_basis_value; - std::size_t load_value; - - PolishToken(token_type token) : token(token) {} - - PolishToken(std::pair mds_value) : token(token_type::Mds), mds_value(mds_value) {} - - PolishToken(typename FieldType::value_type literal_value) : token(token_type::Literal), literal_value(literal_value) {} - - PolishToken(Variable cell_value) : token(token_type::Cell), cell_value(cell_value) {} - - PolishToken(token_type token, std::size_t value) : token(token), pow_value(value), load_value(value) {} - - PolishToken(int unnormalized_lagrange_basis_value) : token(token), - unnormalized_lagrange_basis_value(unnormalized_lagrange_basis_value) {} - - static typename FieldType::value_type evaluate(std::vector>& toks, - math::basic_radix2_domain& domain, - typename FieldType::value_type pt, - std::vector>& evals, - Constants& c){ - std::vector stack, cache; - for(auto &t : toks){ - if(t.token == token_type::Alpha){ - stack.push_back(c.alpha); - } - else if(t.token == token_type::Beta){ - stack.push_back(c.beta); - } - else if(t.token == token_type::Gamma){ - stack.push_back(c.gamma); - } - else if(t.token == token_type::JointCombiner){ - stack.push_back(c.joint_combiner); - } - else if(t.token == token_type::EndoCoefficient){ - stack.push_back(c.endo_coefficient); - } - else if(t.token == token_type::Mds){ - stack.push_back(c.mds[t.mds_value.first][t.mds_value.second]); - } - else if(t.token == token_type::VanishesOnLast4Rows){ - stack.push_back(eval_vanishes_on_last_4_rows(domain, pt)); - } - else if(t.token == token_type::UnnormalizedLagrangeBasis){ - stack.push_back(unnormalized_lagrange_basis(domain, t.unnormalized_lagrange_basis_value, pt)); - } - else if(t.token == token_type::Literal){ - stack.push_back(t.literal_value); - } - else if(t.token == token_type::Dup){ - stack.push_back(stack.back()); - } - else if(t.token == token_type::Cell){ - stack.push_back(variable_evaluate(t.cell_value, evals)); - } - else if(t.token == token_type::Pow){ - stack.back() = stack.back().pow(t.pow_value); - } - else if(t.token == token_type::Add){ - assert(stack.size() > 1); - typename FieldType::value_type y = stack.back(); - stack.pop_back(); - typename FieldType::value_type x = stack.back(); - stack.pop_back(); - - stack.push_back(x + y); - } - else if(t.token == token_type::Mul){ - assert(stack.size() > 1); - typename FieldType::value_type y = stack.back(); - stack.pop_back(); - typename FieldType::value_type x = stack.back(); - stack.pop_back(); - - stack.push_back(x * y); - } - else if(t.token == token_type::Sub){ - assert(stack.size() > 1); - typename FieldType::value_type y = stack.back(); - stack.pop_back(); - typename FieldType::value_type x = stack.back(); - stack.pop_back(); - - stack.push_back(x - y); - } - else if(t.token == token_type::Store){ - cache.push_back(stack.back()); - } - else if(t.token == token_type::Load){ - stack.push_back(cache[t.load_value]); - } - } - - assert(stack.size() == 1); - return stack.front(); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_EXPR_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/oracles.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/oracles.hpp deleted file mode 100644 index d848ce4070..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/oracles.hpp +++ /dev/null @@ -1,472 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ORACLES_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ORACLES_HPP - -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct RandomOracles { - std::tuple, typename FieldType::value_type> joint_combiner; - typename FieldType::value_type beta; - typename FieldType::value_type gamma; - ScalarChallenge alpha_chal; - typename FieldType::value_type alpha; - typename FieldType::value_type zeta; - typename FieldType::value_type v; - typename FieldType::value_type u; - ScalarChallenge zeta_chal; - ScalarChallenge v_chal; - ScalarChallenge u_chal; - }; - - template - struct OraclesResult { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - /// A sponge that acts on the base field of a curve - EFqSponge fq_sponge; - /// the last evaluation of the Fq-Sponge in this protocol - typename scalar_field_type::value_type digest; - /// the challenges produced in the protocol - RandomOracles oracles; - /// the computed powers of alpha - Alphas all_alphas; - /// public polynomial evaluations - std::vector> p_eval; - /// zeta^n and (zeta * omega)^n - std::array powers_of_eval_points_for_chunks; - /// ? - std::vector>>> polys; - /// pre-computed zeta^n - typename scalar_field_type::value_type zeta1; - /// The evaluation f(zeta) - t(zeta) * Z_H(zeta) - typename scalar_field_type::value_type ft_eval0; - typename scalar_field_type::value_type combined_inner_product; - }; - - template> - std::vector>> - prev_chal_evals( - proof_type proof, - VerifierIndexType index, - std::vector evaluation_points, - std::array powers_of_eval_points_for_chunks) { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename CurveType::scalar_field_type scalar_field_type; // Fr - typedef typename CurveType::base_field_type base_field_type; // Fq - - std::vector>> prev_chal_evals; - - for (auto &[chals, comm]: proof.prev_challenges) { - std::size_t b_len = 1 << chals.size(); - std::vector b; - prev_chal_evals.push_back(std::vector>()); - - for (int i = 0; i < evaluation_points.size(); ++i) { - // prev_chal_evals.back().push_back(std::vector()); - typename scalar_field_type::value_type full = commitment_scheme::b_poly(chals, - evaluation_points[i]); - if (index.max_poly_size == b_len) { - std::vector vec_full = {full}; - prev_chal_evals.back().emplace_back(vec_full); - } else { - typename scalar_field_type::value_type betaacc = scalar_field_type::value_type::one(); - typename scalar_field_type::value_type diff; - - for (std::size_t j = index.max_poly_size; j < b_len; ++j) { - typename scalar_field_type::value_type b_j; - if (b.empty()) { - b = commitment_scheme::b_poly_coefficents(chals); - } - b_j = b[j]; - - diff += betaacc * b[j]; - betaacc *= evaluation_points[i]; - } - std::vector tmp_vec = { - full - (diff * powers_of_eval_points_for_chunks[i]), diff, - }; - - prev_chal_evals.back().emplace_back(tmp_vec); - } - } - } - - return prev_chal_evals; - } - - /// This function runs the random oracle argument - template> - OraclesResult oracles(proof_type proof, - VerifierIndexType index, - typename commitments::kimchi_pedersen::commitment_type p_comm) { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - typedef typename commitment_scheme::evaluation_type evaluation_type; - typedef typename CurveType::scalar_field_type scalar_field_type; // Fr - typedef typename CurveType::base_field_type base_field_type; // Fq - //~ - //~ #### Fiat-Shamir argument - //~ - //~ We run the following algorithm: - //~ - size_t n = index.domain.size(); - - //~typename CurveType::scalar_field_type; 1. Setup the Fq-Sponge. - EFqSponge fq_sponge; - - //~ 2. Absorb the commitment of the public input polynomial with the Fq-Sponge. - fq_sponge.absorb_g(p_comm.unshifted); - - //~ 3. Absorb the commitments to the registers / witness columns with the Fq-Sponge. - for (auto &commit: proof.commitments.w_comm) { - fq_sponge.absorb_g(commit.unshifted); - } - - std::tuple, - typename CurveType::scalar_field_type::value_type> - joint_combiner; - if (index.lookup_index_is_used) { - BOOST_ASSERT_MSG(proof.commitments.lookup_is_used, "lookup should be in proof commitments"); - - if (index.lookup_index.runtime_tables_selector_is_used) { - BOOST_ASSERT_MSG(proof.commitments.lookup.runtime_is_used, - "lookup runtime should be in proof commitments"); - fq_sponge.absorb_g(proof.commitments.lookup.runtime.unshifted); - } - - ScalarChallenge s; - - if (index.lookup_index.lookup_used == lookup_verifier_index::lookups_used::Single) { - s = ScalarChallenge( - CurveType::scalar_field_type::value_type::zero()); - } else if (index.lookup_index.lookup_used == - lookup_verifier_index::lookups_used::Joint) { - s = ScalarChallenge(fq_sponge.challenge()); - } - - joint_combiner = std::make_tuple(s, s.to_field(index.srs.endo_r)); - - for (auto &commit: proof.commitments.lookup.sorted) { - fq_sponge.absorb_g(commit.unshifted); - } - } - //~ 4. TODO: lookup (joint combiner challenge) - - //~ 5. TODO: lookup (absorb) - - // for (size_t i = 0; i < proof.commitments.lookup.size(); ++i) { - // proof.commitments.lookup[i] = fq_sponge.absorb_g(proof.commitments.lookup[i].unshifted); - // } - - //~ 6. Sample $\beta$ with the Fq-Sponge. - typename scalar_field_type::value_type beta = fq_sponge.challenge(); - - //~ 7. Sample $\gamma$ with the Fq-Sponge. - typename scalar_field_type::value_type gamma = fq_sponge.challenge(); - - //~ 8. TODO: lookup - // for (size_t i = 0; i < proof.commitments.lookup.size(); ++i) { - // proof.commitments.lookup[i] = fq_sponge.absorb_g(proof.commitments.lookup[i].aggreg.unshifted); - // } - - if (proof.commitments.lookup_is_used) { - fq_sponge.absorb_g(proof.commitments.lookup.aggreg.unshifted); - } - - - //~ 9. Absorb the commitment to the permutation trace with the Fq-Sponge. - fq_sponge.absorb_g(proof.commitments.z_comm.unshifted); - - //~ 10. Sample $\alpha'$ with the Fq-Sponge. - ScalarChallenge alpha_chal = ScalarChallenge( - fq_sponge.challenge()); - - //~ 11. Derive $\alpha$ from $\alpha'$ using the endomorphism (TODO: details). - typename scalar_field_type::value_type alpha = alpha_chal.to_field(index.srs.endo_r); - //~ 12. Enforce that the length of the $t$ commitment is of size `PERMUTS`. - BOOST_ASSERT_MSG(proof.commitments.t_comm.unshifted.size() == kimchi_constant::PERMUTES, - "IncorrectCommitmentLength(t)"); - - //~ 13. Absorb the commitment to the quotient polynomial $t$ into the argument. - fq_sponge.absorb_g(proof.commitments.t_comm.unshifted); - - //~ 14. Sample $\zeta'$ with the Fq-Sponge. - ScalarChallenge zeta_chal = ScalarChallenge( - fq_sponge.challenge()); - - //~ 15. Derive $\zeta$ from $\zeta'$ using the endomorphism (TODO: specify). - typename scalar_field_type::value_type zeta = zeta_chal.to_field(index.srs.endo_r); - - //~ 16. Setup the Fr-Sponge. - EFqSponge fq_sponge_cloned = fq_sponge; - typename scalar_field_type::value_type digest = fq_sponge_cloned.digest(); - EFrSponge fr_sponge = EFrSponge(); - - //~ 17. Squeeze the Fq-sponge and absorb the result with the Fr-Sponge. - fr_sponge.absorb(digest); - - // prepare some often used values - typename scalar_field_type::value_type zeta1 = zeta.pow(n); - typename scalar_field_type::value_type zetaw = zeta * index.domain.omega; - - // retrieve ranges for the powers of alphas - - std::vector w; - w.reserve(proof.public_input.size()); - if (proof.public_input.size() > 0) { - w.push_back(scalar_field_type::value_type::one()); - } - - Alphas all_alphas = index.powers_of_alpha; - - all_alphas.instantiate(alpha); - - for (int i = 0; i < proof.public_input.size(); ++i) { - w.push_back(w.back() * index.domain.omega); - } - - // compute Lagrange base evaluation denominators - std::vector zeta_minus_x; - for (auto &i: w) { - zeta_minus_x.push_back(zeta - i); - } - - for (size_t i = 0; i < proof.public_input.size(); ++i) { - zeta_minus_x.push_back(zetaw - w[i]); - } - - // Given a vector of field elements {v_i}, compute the vector {coeff * v_i^(-1)}, where coeff = - // F::one() - // ark_ff::fields::batch_inversion::>(&mut zeta_minus_x); - // zeta_minus_x = zeta_minus_x.inverse() * Fr::one(); - - std::transform(zeta_minus_x.begin(), zeta_minus_x.end(), zeta_minus_x.begin(), [](auto &element) { - return element.inversed(); - }); - //~ 18. Evaluate the negated public polynomial (if present) at $\zeta$ and $\zeta\omega$. - //~ NOTE: this works only in the case when the poly segment size is not smaller than that of the - // domain. - std::vector> p_eval; - if (!proof.public_input.empty()) { - typename scalar_field_type::value_type tmp; - std::size_t iter_size = std::min({proof.public_input.size(), zeta_minus_x.size(), w.size()}); - - for (int i = 0; i < iter_size; ++i) { - tmp -= proof.public_input[i] * zeta_minus_x[i] * w[i]; - } - - typename scalar_field_type::value_type size_inv = typename scalar_field_type::value_type( - index.domain.size()).inversed(); - - p_eval[0].push_back(tmp * (zeta1 - scalar_field_type::value_type::one()) * size_inv); - p_eval[1].push_back(tmp * (zetaw.pow(n) - scalar_field_type::value_type::one()) * size_inv); - } else { - p_eval.resize(2); - } - - //~ 19. Absorb all the polynomial evaluations in $\zeta$ and $\zeta\omega$: - //~ - the public polynomial - //~ - z - //~ - generic selector - //~ - poseidon selector - //~ - the 15 register/witness - //~ - 6 sigmas evaluations (the last one is not evaluated) - for (size_t i = 0; i < p_eval.size(); ++i) { - fr_sponge.absorb_evaluations(p_eval[i], proof.evals[i]); - } - - //~ 20. Absorb the unique evaluation of ft: $ft(\zeta\omega)$. - fr_sponge.absorb(proof.ft_eval1); - - //~ 21. Sample $v'$ with the Fr-Sponge. - ScalarChallenge v_chal = fr_sponge.challenge(); - - //~ 22. Derive $v$ from $v'$ using the endomorphism (TODO: specify). - typename scalar_field_type::value_type v = v_chal.to_field(index.srs.endo_r); - - //~ 23. Sample $u'$ with the Fr-Sponge. - ScalarChallenge u_chal = fr_sponge.challenge(); - - //~ 24. Derive $u$ from $u'$ using the endomorphism (TODO: specify). - typename scalar_field_type::value_type u = u_chal.to_field(index.srs.endo_r); - - //~ 25. Create a list of all polynomials that have an evaluation proof. - std::vector evaluation_points = {zeta, zetaw}; - std::array powers_of_eval_points_for_chunks = { - zeta.pow(index.max_poly_size), - zetaw.pow(index.max_poly_size) - }; - - // let polys : Vec<(PolyComm, _)> = - // self.prev_challenges.iter() - // .zip(self.prev_chal_evals(index, &evaluation_points, - // &powers_of_eval_points_for_chunks)) - // .map(| (c, e) | (c.1.clone(), e)) - // .collect(); - - std::vector>>> polys; - std::vector>> prev_chal_evals_vec = prev_chal_evals( - proof, index, evaluation_points, powers_of_eval_points_for_chunks - ); - - for (int i = 0; i < proof.prev_challenges.size(); ++i) { - polys.emplace_back(std::get<1>(proof.prev_challenges[i]), prev_chal_evals_vec[i]); - } - - - std::vector> evals = { - proof.evals[0].combine(powers_of_eval_points_for_chunks[0]), - proof.evals[1].combine(powers_of_eval_points_for_chunks[1]) - }; - - //~ 26. Compute the evaluation of $ft(\zeta)$. - typename scalar_field_type::value_type zkp = index.zkpm.evaluate(zeta); - typename scalar_field_type::value_type zeta1m1 = zeta1 - scalar_field_type::value_type::one(); - - std::vector alpha_powers = all_alphas.get_alphas( - argument_type::Permutation, kimchi_constant::CONSTRAINTS); - typename scalar_field_type::value_type alpha0 = alpha_powers[0]; - typename scalar_field_type::value_type alpha1 = alpha_powers[1]; - typename scalar_field_type::value_type alpha2 = alpha_powers[2]; - - typename scalar_field_type::value_type ft_eval0 = - (evals[0].w[kimchi_constant::PERMUTES - 1] + gamma) * evals[1].z * alpha0 * zkp; - for (size_t i = 0; i < evals[0].s.size(); ++i) { - ft_eval0 *= (beta * evals[0].s[i]) + evals[0].w[i] + gamma; - } - - if (!p_eval.empty() && !p_eval[0].empty()) { - ft_eval0 -= p_eval[0][0]; - } else { // ?????????????? - ft_eval0 -= scalar_field_type::value_type::zero(); - } - - typename scalar_field_type::value_type tmp = alpha0 * zkp * evals[0].z; - for (size_t i = 0; i < std::min(evals[0].w.size(), index.shift.size()); ++i) { - tmp *= gamma + (beta * zeta * index.shift[i]) + evals[0].w[i]; - } - - ft_eval0 -= tmp; - - typename scalar_field_type::value_type numerator = ((zeta1m1 * alpha1 * (zeta - index.w)) + - (zeta1m1 * alpha2 * (zeta - - scalar_field_type::value_type::one()))) * - (scalar_field_type::value_type::one() - - evals[0].z); - - typename scalar_field_type::value_type denominator = - (zeta - index.w) * (zeta - scalar_field_type::value_type::one()); - denominator = denominator.inversed(); - - ft_eval0 += numerator * denominator; - - Constants cs{alpha, beta, gamma, std::get<1>(joint_combiner), index.endo, - index.fr_sponge_params.mds_matrix}; - - ft_eval0 -= - PolishToken::evaluate(index.linearization.constant_term, index.domain, - zeta, evals, cs); - - - std::vector> es; - - for (auto &poly: polys) { - evaluation_type eval(commitment_type(), std::get<1>(poly), -1); - es.emplace_back(eval, -1); - } - - es.emplace_back(evaluation_type(commitment_type(), p_eval, -1), -1); - std::vector> ft_eval = {{ft_eval0}, - {proof.ft_eval1}}; - es.emplace_back(evaluation_type(commitment_type(), ft_eval, -1), -1); - - std::vector> z; - std::vector> generic_selector; - std::vector> poseidon_selector; - for (auto &eval: proof.evals) { - z.push_back(eval.z); - generic_selector.push_back(eval.generic_selector); - poseidon_selector.push_back(eval.poseidon_selector); - } - es.emplace_back(evaluation_type(commitment_type(), z, -1), -1); - es.emplace_back(evaluation_type(commitment_type(), generic_selector, -1), -1); - es.emplace_back(evaluation_type(commitment_type(), poseidon_selector, -1), -1); - - for (int i = 0; i < proof.evals[0].w.size(); ++i) { - std::vector> w_copy = {proof.evals[0].w[i], - proof.evals[1].w[i]}; - es.emplace_back(evaluation_type(commitment_type(), w_copy, -1), -1); - } - - for (int i = 0; i < proof.evals[0].s.size(); ++i) { - std::vector> s_copy = {proof.evals[0].s[i], - proof.evals[1].s[i]}; - es.emplace_back(evaluation_type(commitment_type(), s_copy, -1), -1); - } - - - typename scalar_field_type::value_type combined_inner_product0 = commitment_scheme::combined_inner_product( - evaluation_points, - v, - u, - es, - index.srs.g.size() - ); - - RandomOracles oracles = { - joint_combiner, beta, gamma, alpha_chal, alpha, zeta, v, u, zeta_chal, v_chal, u_chal - }; - - return OraclesResult{fq_sponge, digest, oracles, - all_alphas, p_eval, powers_of_eval_points_for_chunks, - polys, zeta1, ft_eval0, combined_inner_product0}; - } - } // namespace snark - } // namespace zk - } // namespace crypto3 -}; // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_ORACLES_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/permutation.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/permutation.hpp deleted file mode 100644 index ba7450441b..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/permutation.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_PERMUTATION_HPP -#define CRYPTO3_ZK_BLUEPRINT_PLONK_PICKLES_PERMUTATION_HPP - -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - typename FieldType::value_type eval_vanishes_on_last_4_rows(math::basic_radix2_domain& domain, - typename FieldType::value_type& x){ - typename FieldType::value_type w4 = domain.get_domain_element(domain.size() - (kimchi_constant::ZK_ROWS + 1)); - typename FieldType::value_type w3 = domain.omega * w4; - typename FieldType::value_type w2 = domain.omega * w3; - typename FieldType::value_type w1 = domain.omega * w2; - - return (x - w1) * (x - w2) * (x - w3) * (x - w4); - } - } // namespace components - } // namespace zk - } // namespace crypto3 -} - -#endif diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/proof.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/proof.hpp deleted file mode 100644 index 47a0be6680..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/proof.hpp +++ /dev/null @@ -1,194 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PICKLES_PROOF_HPP -#define CRYPTO3_ZK_PICKLES_PROOF_HPP - -#include -#include -#include - -#include -#include - - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct lookup_evaluation_type { - std::vector sorted; - value_type aggreg; - value_type table; - value_type runtime; - bool runtime_is_used; - - lookup_evaluation_type(std::vector& sorted, value_type& aggreg, - value_type& table, value_type& runtime) : sorted(sorted), - aggreg(aggreg), table(table), runtime(runtime) {}; - - lookup_evaluation_type() = default; - }; - - template - struct base_proof_evaluation_type { - constexpr static const std::size_t Permuts = kimchi_constant::PERMUTES; - constexpr static const std::size_t WiresAmount = kimchi_constant::COLUMNS; - - std::array w; - value_type z; - std::array s; - lookup_evaluation_type lookup; - bool lookup_is_used; - value_type generic_selector; - value_type poseidon_selector; - - base_proof_evaluation_type(std::array& w, - value_type& z, std::array& s, - lookup_evaluation_type &lookup, - value_type& generic_selector, value_type& poseidon_selector) : - w(w), z(z), s(s), lookup(lookup), generic_selector(generic_selector), - poseidon_selector(poseidon_selector) {} - - base_proof_evaluation_type() = default; - }; - - template - struct proof_evaluation_type : base_proof_evaluation_type { - using base_proof_evaluation_type::base_proof_evaluation_type; - }; - - template - struct proof_evaluation_type> : base_proof_evaluation_type>{ - using base_proof_evaluation_type>::base_proof_evaluation_type; - - proof_evaluation_type combine(value_type& pt){ - std::array s_combined; - for(int i = 0; i < s_combined.size(); ++i){ - math::polynomial temp_polynomial(this->s[i].begin(), this->s[i].end()); - s_combined[i] = temp_polynomial.evaluate(pt); - } - - std::array w_combined; - for(int i = 0; i < w_combined.size(); ++i){ - math::polynomial temp_polynomial(this->w[i].begin(), this->w[i].end()); - w_combined[i] = temp_polynomial.evaluate(pt); - } - - math::polynomial temp_polynomial_z(this->z.begin(), this->z.end()); - value_type z_combined = temp_polynomial_z.evaluate(pt); - - math::polynomial temp_polynomial_gs(this->generic_selector.begin(), this->generic_selector.end()); - value_type generic_selector_combined = temp_polynomial_gs.evaluate(pt); - - math::polynomial temp_polynomial_ps(this->poseidon_selector.begin(), this->poseidon_selector.end()); - value_type poseidon_selector_combined = temp_polynomial_ps.evaluate(pt); - - lookup_evaluation_type lookup_combined; - if(this->lookup_is_used){ - lookup_combined = lookup_evaluation_type(); - - math::polynomial temp_polynomial_table(this->lookup.table.begin(), this->lookup.table.end()); - lookup_combined.table = temp_polynomial_table.evaluate(pt); - - math::polynomial temp_polynomial_aggreg(this->lookup.aggreg.begin(), this->lookup.aggreg.end()); - lookup_combined.aggreg = temp_polynomial_aggreg.evaluate(pt); - - for(int i = 0; i < this->lookup.sorted.size(); ++i){ - math::polynomial temp_polynomial_sorted(this->lookup.sorted[i].begin(), this->lookup.sorted[i].end()); - lookup_combined.sorted[i] = temp_polynomial_sorted.evaluate(pt); - } - - if(this->lookup.runtime_is_used){ - math::polynomial temp_polynomial_runtime(this->lookup.runtime.begin(), - this->lookup.runtime.end()); - lookup_combined.runtime = temp_polynomial_runtime.evaluate(pt); - } - } - - return proof_evaluation_type(w_combined, z_combined, s_combined, lookup_combined, - generic_selector_combined, poseidon_selector_combined); - } - }; - - template - struct lookup_commitment_type { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - - std::vector sorted; - commitment_type aggreg; - commitment_type runtime; - bool runtime_is_used; - }; - - template - struct proof_commitment_type { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - - // constexpr static const std::size_t Permuts = kimchi_constant::PERMUTES; - constexpr static const std::size_t WiresAmount = kimchi_constant::COLUMNS; - - std::array w_comm; - commitment_type z_comm; - commitment_type t_comm; - lookup_commitment_type lookup; - bool lookup_is_used; - }; - - template - class proof_type { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitments::kimchi_pedersen::commitment_type commitment_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef typename CurveType::base_field_type base_field_type; - - public: - // Commitments: - - proof_commitment_type commitments; - typename commitments::kimchi_pedersen::proof_type proof; - std::array>, 2> evals; - - // ft_eval1 - typename scalar_field_type::value_type ft_eval1; - // public - std::vector public_input; - // Previous challenges - std::vector< - std::pair< - std::vector, - commitment_type - > - > prev_challenges; - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_PROOF_HPP \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier.hpp deleted file mode 100644 index f95c77cdd0..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier.hpp +++ /dev/null @@ -1,399 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - template> - struct verifier { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - typedef typename commitment_scheme::evaluation_type evaluation_type; - typedef typename commitment_scheme::scalar_field_type scalar_field_type; // Fr; - typedef typename commitment_scheme::base_field_type base_field_type; // Fq; - typedef typename commitment_scheme::group_type group_type; // Fq; - typedef typename commitment_scheme::batchproof_type batchproof_type; - typedef typename std::vector>> proofs_type; - - typedef typename commitment_scheme::sponge_type EFqSponge; - typedef transcript::DefaultFrSponge EFrSponge; - - constexpr static const std::size_t COLUMNS = kimchi_constant::COLUMNS; - constexpr static const std::size_t PERMUTES = kimchi_constant::PERMUTES; - - static batchproof_type to_batch(VerifierIndexType index, proof_type proof) { - //~ - //~ #### Partial verification - //~ - //~ For every proof we want to verify, we defer the proof opening to the very end. - //~ This allows us to potentially batch verify a number of partially verified proofs. - //~ Essentially, this steps verifies that $f(\zeta) = t(\zeta) * Z_H(\zeta)$. - //~ - - //~ 1. Commit to the negated public input polynomial. - BOOST_ASSERT_MSG( - index.srs.lagrange_bases.find(index.domain.size()) != index.srs.lagrange_bases.end(), - "pre-computed committed lagrange bases not found"); - std::vector lgr_comm = index.srs.lagrange_bases[index.domain.size()]; // calculate lgr_comm - BOOST_ASSERT(lgr_comm.size() == 512); // ?? - std::vector com; - - for (size_t i = 0; i < proof.public_input.size(); ++i) { - std::vector unshifted = {lgr_comm[i]}; - typename group_type::value_type shifted; - com.push_back(commitment_type(unshifted, shifted)); - } - // std::vector *com_ref = &com; - std::vector elm; - for (auto &i: proof.public_input) { - elm.push_back(-i); - } - - commitment_type p_comm = commitment_type::multi_scalar_mul(com, elm); - - //~ 2. Run the [Fiat-Shamir argument](#fiat-shamir-argument). - OraclesResult oracles_res = oracles( - proof, index, p_comm); - // fq_sponge, - // oracles, - // all_alphas, - // p_eval, - // powers_of_eval_points_for_chunks, - // polys, - // zeta1 : zeta_to_domain_size, - // ft_eval0, - // ..> = proof.oracles::(index, &p_comm); - - //~ 3. Combine the chunked polynomials' evaluations - //~ (TODO: most likely only the quotient polynomial is chunked) - //~ with the right powers of $\zeta^n$ and $(\zeta * \omega)^n$. - - // Calculate polynoms in pointers powers_of_eval_points_for_chunks[0] and - // powers_of_eval_points_for_chunks[1] - std::vector> evals = { - proof.evals[0].combine(oracles_res.powers_of_eval_points_for_chunks[0]), - proof.evals[1].combine(oracles_res.powers_of_eval_points_for_chunks[1]) - }; - - //~ 4. Compute the commitment to the linearized polynomial $f$. - // permutation - typename scalar_field_type::value_type zkp = index.zkpm.evaluate(oracles_res.oracles.zeta); - - std::vector alphas = oracles_res.all_alphas.get_alphas( - argument_type::Permutation, kimchi_constant::CONSTRAINTS); - - std::vector commitments = {index.sigma_comm[PERMUTES - 1]}; - std::vector scalars = { - ConstraintSystem::perm_scalars(evals, oracles_res.oracles.beta, - oracles_res.oracles.gamma, alphas, - zkp)}; - - // generic - - std::vector generic_scalars = - ConstraintSystem::gnrc_scalars(alphas, evals[0].w, - evals[0].generic_selector); - - std::vector generic_com( - index.coefficients_comm.begin(), - index.coefficients_comm.begin() + generic_scalars.size()); - - BOOST_ASSERT(generic_scalars.size() == generic_com.size()); - - scalars.insert(scalars.end(), generic_scalars.begin(), generic_scalars.end()); - commitments.insert(commitments.end(), generic_com.begin(), generic_com.end()); - - - // other gates are implemented using the expression framework - { - // TODO: Reuse constants from oracles function - Constants constants = { - oracles_res.oracles.alpha, - oracles_res.oracles.beta, - oracles_res.oracles.gamma, - std::get<1>(oracles_res.oracles.joint_combiner), - index.endo, - index.fr_sponge_params.mds_matrix - }; - - for (auto i: index.linearization.index_term) { - auto col = std::get<0>(i); - auto tokens = std::get<1>(i); - - auto scalar = - PolishToken::evaluate(tokens, index.domain, - oracles_res.oracles.zeta, evals, - constants); - auto l = proof.commitments.lookup; - if (col.column == column_type::Witness) { - scalars.push_back(scalar); - commitments.push_back(proof.commitments.w_comm[col.witness_value]); - } else if (col.column == column_type::Coefficient) { - scalars.push_back(scalar); - commitments.push_back(index.coefficients_comm[col.coefficient_value]); - } else if (col.column == column_type::Z) { - scalars.push_back(scalar); - commitments.push_back(proof.commitments.z_comm); - } else if (col.column == column_type::LookupSorted) { - scalars.push_back(scalar); - commitments.push_back(l.sorted[col.lookup_sorted_value]); - } else if (col.column == column_type::LookupAggreg) { - scalars.push_back(scalar); - commitments.push_back(l.aggreg); - } else if (col.column == column_type::LookupKindIndex) { - if (index.lookup_index_is_used) { - // assert("Attempted to use, but no lookup index was given"); - } else { - scalars.push_back(scalar); - commitments.push_back( - index.lookup_index.lookup_selectors[col.lookup_kind_index_value]); - } - } else if (col.column == column_type::LookupTable) { - if (index.lookup_index_is_used) { - // assert("Attempted to use, but no lookup index was given"); - } else { - typename scalar_field_type::value_type j = scalar_field_type::value_type::one(); - scalars.push_back(scalar); - commitments.push_back(index.lookup_index.lookup_table[0]); - for (size_t k = 1; k < index.lookup_index.lookup_table.size(); ++k) { - j *= constants.joint_combiner; - scalars.push_back(scalar * j); - commitments.push_back(index.lookup_index.lookup_table[k]); - } - } - } else if (col.column == column_type::Index) { - commitment_type c; - if (col.index_value == gate_type::Zero || col.index_value == gate_type::Generic || - col.index_value == gate_type::Lookup) { - std::cout << "Selector for {:?} not defined\n"; - } else if (col.index_value == gate_type::CompleteAdd) { - c = index.complete_add_comm; - } else if (col.index_value == gate_type::VarBaseMul) { - c = index.mul_comm; - } else if (col.index_value == gate_type::EndoMul) { - c = index.emul_comm; - } else if (col.index_value == gate_type::EndoMulScalar) { - c = index.endomul_scalar_comm; - } else if (col.index_value == gate_type::Poseidon) { - c = index.psm_comm; - } else if (col.index_value == gate_type::ChaCha0) { - c = index.chacha_comm[0]; - } else if (col.index_value == gate_type::ChaCha1) { - c = index.chacha_comm[1]; - } else if (col.index_value == gate_type::ChaCha2) { - c = index.chacha_comm[2]; - } else if (col.index_value == gate_type::ChaChaFinal) { - c = index.chacha_comm[3]; - } else if (col.index_value == gate_type::RangeCheck0) { - c = index.range_check_comm[0]; - } else if (col.index_value == gate_type::RangeCheck1) { - c = index.range_check_comm[1]; - } - - scalars.push_back(scalar); - commitments.push_back(c); - } - } - } - - // MSM - commitment_type f_comm = commitment_type::multi_scalar_mul(commitments, scalars); - - //~ 5. Compute the (chuncked) commitment of $ft$ - //~ (see [Maller's optimization](../crypto/plonk/maller_15.html)). - typename scalar_field_type::value_type zeta_to_srs_len = oracles_res.oracles.zeta.pow( - index.max_poly_size); - commitment_type chunked_f_comm = f_comm.chunk_commitment(zeta_to_srs_len); - commitment_type chunked_t_comm = proof.commitments.t_comm.chunk_commitment(zeta_to_srs_len); - commitment_type ft_comm = chunked_f_comm - chunked_t_comm.scale( - oracles_res.zeta1 - scalar_field_type::value_type::one()); - - //~ 6. List the polynomial commitments, and their associated evaluations, - //~ that are associated to the aggregated evaluation proof in the proof: - std::vector evaluations; - - //~ - recursion - for (auto i: oracles_res.polys) { - evaluations.emplace_back(std::get<0>(i), std::get<1>(i), -1); - } - - //~ - public input commitment - evaluations.emplace_back(p_comm, oracles_res.p_eval, -1); - - //~ - ft commitment (chunks of it) - std::vector> ft_comm_evals = {{oracles_res.ft_eval0}, - {proof.ft_eval1}}; - evaluations.emplace_back(ft_comm, ft_comm_evals, -1); - - //~ - permutation commitment - std::vector> tmp_evals; - for (auto &i: proof.evals) { - tmp_evals.push_back(i.z); - } - evaluations.emplace_back(proof.commitments.z_comm, tmp_evals, -1); - - //~ - index commitments that use the coefficients - tmp_evals.clear(); - for (auto i: proof.evals) { - tmp_evals.push_back(i.generic_selector); - } - evaluations.emplace_back(index.generic_comm, tmp_evals, -1); - - tmp_evals.clear(); - for (auto i: proof.evals) { - tmp_evals.push_back(i.poseidon_selector); - } - evaluations.emplace_back(index.psm_comm, tmp_evals, -1); - - //~ - witness commitments - for (size_t i = 0; i < COLUMNS; ++i) { - std::vector> witness_comm_evals = { - proof.evals[0].w[i], proof.evals[1].w[i]}; - evaluations.emplace_back(proof.commitments.w_comm[i], witness_comm_evals, -1); - } - - //~ - sigma commitments - for (size_t i = 0; i < PERMUTES - 1; ++i) { - std::vector> sigma_comm_evals = { - proof.evals[0].s[i], proof.evals[1].s[i]}; - evaluations.emplace_back(index.sigma_comm[i], sigma_comm_evals, -1); - } - - if (index.lookup_index_is_used) { - std::size_t lookup_len = std::min({ - proof.commitments.lookup.sorted.size(), - proof.evals[0].lookup.sorted.size(), - proof.evals[1].lookup.sorted.size(), - }); - - for (int i = 0; i < lookup_len; ++i) { - std::vector> lookup_sorted_comm_evals = { - proof.evals[0].lookup.sorted[i], proof.evals[1].lookup.sorted[i]}; - evaluations.emplace_back( - proof.commitments.lookup.sorted[i], - lookup_sorted_comm_evals, - -1 - ); - } - - std::vector> lookup_aggreg_comm_evals = { - proof.evals[0].lookup.aggreg, proof.evals[1].lookup.aggreg}; - evaluations.emplace_back( - proof.commitments.lookup.aggreg, - lookup_aggreg_comm_evals, - -1 - ); - - commitment_type table_comm = lookup_verifier_index::combine_table( - index.lookup_index.lookup_table, - std::get<1>(oracles_res.oracles.joint_combiner), - std::get<1>(oracles_res.oracles.joint_combiner).pow( - index.lookup_index.max_joint_size), - index.lookup_index.table_ids, - proof.commitments.lookup.runtime - ); - - std::vector> lookup_table_comm_evals = { - proof.evals[0].lookup.table, proof.evals[1].lookup.table}; - evaluations.emplace_back( - table_comm, - lookup_table_comm_evals, - -1 - ); - - if (index.lookup_index.runtime_tables_selector_is_used) { - std::vector> lookup_runtime_comm_evals = { - proof.evals[0].lookup.runtime, proof.evals[1].lookup.runtime}; - evaluations.emplace_back( - index.lookup_index.runtime_tables_selector, - lookup_runtime_comm_evals, - -1 - ); - } - } - - // prepare for the opening proof verification - std::vector evaluation_points = { - oracles_res.oracles.zeta, - oracles_res.oracles.zeta * index.domain.omega}; - return batchproof_type({ - oracles_res.fq_sponge, - evaluations, - evaluation_points, - oracles_res.oracles.v, - oracles_res.oracles.u, - proof.proof - }); - } - - static bool batch_verify(group_map &g_map, - proofs_type &proofs) { - std::vector batch; - - typename commitment_scheme::params_type &srs = std::get<0>(proofs.front()).srs; - for (auto &[index, proof]: proofs) { - batch.push_back(to_batch(index, proof)); - } - - return commitment_scheme::verify_eval(srs, g_map, batch); - } - - static bool verify(group_map &g_map, - VerifierIndexType &index, - proof_type &proof) { - proofs_type proofs; - proofs.emplace_back(index, proof); - - return batch_verify(g_map, proofs); - } - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -} // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_HPP \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier_index.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier_index.hpp deleted file mode 100644 index e4cbca1f83..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/pickles/verifier_index.hpp +++ /dev/null @@ -1,108 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#ifndef CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_INDEXER_HPP -#define CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_INDEXER_HPP - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - - // arithmetic_sponge_params fr_sponge_params; - // arithmetic_sponge_params fq_sponge_params; - // hashes::detail::poseidon_constants_kimchi fr_sponge_params; - // hashes::detail::poseidon_constants_kimchi fq_sponge_params; - template>, - typename PoseidonKimchiBaseConstants = hashes::detail::poseidon_constants>, - std::size_t WiresAmount = kimchi_constant::COLUMNS, - std::size_t Permuts = kimchi_constant::PERMUTES - > - struct verifier_index { - typedef commitments::kimchi_pedersen commitment_scheme; - typedef typename commitment_scheme::commitment_type commitment_type; - using curve_type = CurveType; - using scalar_field_type = typename CurveType::scalar_field_type; - using base_field_type = typename CurveType::base_field_type; - - math::basic_radix2_domain domain; - size_t max_poly_size; - size_t max_quot_size; - typename commitment_scheme::params_type srs; - - std::array sigma_comm; - std::array coefficients_comm; - commitment_type generic_comm; - - commitment_type psm_comm; - - commitment_type complete_add_comm; - commitment_type mul_comm; - commitment_type emul_comm; - commitment_type endomul_scalar_comm; - - std::array chacha_comm; - bool chacha_comm_is_used; - std::vector range_check_comm; - - std::array shift; - // Polynomial in coefficients form - math::polynomial zkpm; - typename scalar_field_type::value_type w; - typename scalar_field_type::value_type endo; - - lookup_verifier_index lookup_index; - bool lookup_index_is_used; - Linearization>> linearization; - // linearization; // TODO: - // Linearization>>> - Alphas powers_of_alpha; - PoseidonKimchiScalarConstants fr_sponge_params; - PoseidonKimchiBaseConstants fq_sponge_params; - - verifier_index() : domain(2) {} - }; - } // namespace snark - } // namespace zk - } // namespace crypto3 -}; // namespace nil - -#endif // CRYPTO3_ZK_PLONK_BATCHED_PICKLES_VERIFIER_INDEXER_HPP diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/placeholder_policy.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/placeholder_policy.hpp index a3a0e2ceae..92caa94f25 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/placeholder_policy.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/placeholder_policy.hpp @@ -27,8 +27,12 @@ // //---------------------------------------------------------------------------// -#ifndef CRYPTO3_PLONK_PLACEHOLDER_TYPES_POLICY_HPP -#define CRYPTO3_PLONK_PLACEHOLDER_TYPES_POLICY_HPP +#ifndef PARALLEL_CRYPTO3_PLONK_PLACEHOLDER_TYPES_POLICY_HPP +#define PARALLEL_CRYPTO3_PLONK_PLACEHOLDER_TYPES_POLICY_HPP + +#ifdef CRYPTO3_PLONK_PLACEHOLDER_TYPES_POLICY_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/profiling.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/profiling.hpp index be62e2e20f..73dad46e4c 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/profiling.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/profiling.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_PROFILING_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_PROFILING_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PROFILING_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PROFILING_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_PROFILING_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp index 98cc6d9414..84b99270d9 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/detail/transcript_initialization_context.hpp @@ -25,8 +25,12 @@ // //---------------------------------------------------------------------------// -#ifndef CRYPTO3_PLONK_PLACEHOLDER_TRANSCRIPT_INITIALIZATION_CONTEXT_HPP -#define CRYPTO3_PLONK_PLACEHOLDER_TRANSCRIPT_INITIALIZATION_CONTEXT_HPP +#ifndef PARALLEL_CRYPTO3_PLONK_PLACEHOLDER_TRANSCRIPT_INITIALIZATION_CONTEXT_HPP +#define PARALLEL_CRYPTO3_PLONK_PLACEHOLDER_TRANSCRIPT_INITIALIZATION_CONTEXT_HPP + +#ifdef CRYPTO3_PLONK_PLACEHOLDER_TRANSCRIPT_INITIALIZATION_CONTEXT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -117,13 +121,13 @@ namespace nil { ); // Marshall the initialization context and push it to the transcript. - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; auto filled_context = nil::crypto3::marshalling::types::fill_transcript_initialization_context< Endianness, nil::crypto3::zk::snark::detail::transcript_initialization_context>(context); std::vector cv(filled_context.length(), 0x00); auto write_iter = cv.begin(); - nil::marshalling::status_type status = filled_context.write(write_iter, cv.size()); + nil::crypto3::marshalling::status_type status = filled_context.write(write_iter, cv.size()); THROW_IF_ERROR_STATUS(status, "transcript_initialization_context::compute_constraint_system_with_params_hash"); // Append constraint_system to the buffer "cv". diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp index 0caeb35316..566a76c976 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/gates_argument.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_GATES_ARGUMENT_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_GATES_ARGUMENT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_GATES_ARGUMENT_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_GATES_ARGUMENT_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_GATES_ARGUMENT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -80,7 +84,7 @@ namespace nil { static inline void build_variable_value_map( const math::expression& expr, - const plonk_polynomial_dfs_table &assignments, + const plonk_polynomial_dfs_table& assignments, std::shared_ptr> domain, std::size_t extended_domain_size, std::unordered_map& variable_values_out, @@ -135,8 +139,7 @@ namespace nil { static inline std::array prove_eval( const typename policy_type::constraint_system_type &constraint_system, - const plonk_polynomial_dfs_table - &column_polynomials, + const plonk_polynomial_dfs_table &column_polynomials, std::shared_ptr> original_domain, std::uint32_t max_gates_degree, const polynomial_dfs_type &mask_polynomial, diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp index 4f019027bf..e1be0369d5 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/lookup_argument.hpp @@ -28,8 +28,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_LOOKUP_ARGUMENT_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_LOOKUP_ARGUMENT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_LOOKUP_ARGUMENT_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_LOOKUP_ARGUMENT_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_LOOKUP_ARGUMENT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -138,8 +142,7 @@ namespace nil { &constraint_system, const typename placeholder_public_preprocessor::preprocessed_data_type &preprocessed_data, - const plonk_polynomial_dfs_table - &plonk_columns, + const plonk_polynomial_dfs_table& plonk_columns, commitment_scheme_type &commitment_scheme, transcript_type &transcript) : constraint_system(constraint_system) @@ -164,7 +167,8 @@ namespace nil { 0, basic_domain->m, FieldType::value_type::one()); polynomial_dfs_type zero_polynomial( 0, basic_domain->m, FieldType::value_type::zero()); - polynomial_dfs_type mask_assignment = one_polynomial - preprocessed_data.q_last - preprocessed_data.q_blind; + polynomial_dfs_type mask_assignment = + one_polynomial - preprocessed_data.q_last - preprocessed_data.q_blind; polynomial_dfs_type lagrange0 = preprocessed_data.common_data.lagrange_0; std::unique_ptr> lookup_value_ptr = @@ -175,6 +179,7 @@ namespace nil { prepare_lookup_input(mask_assignment, lagrange0); auto& lookup_input = *lookup_input_ptr; + // 3. Lookup_input and lookup_value are ready // Now sort them! // Reduce value and input: @@ -675,7 +680,6 @@ namespace nil { ); std::size_t i1 = 0; std::size_t j1 = 0; - auto append_to_sorted = [usable_rows_amount, &sorted, &i1, &j1] ( const typename FieldType::value_type& value) { sorted[i1][j1] = value; @@ -704,7 +708,7 @@ namespace nil { const plonk_constraint_system &constraint_system; const typename placeholder_public_preprocessor::preprocessed_data_type& preprocessed_data; - const plonk_polynomial_dfs_table &plonk_columns; + const plonk_polynomial_dfs_table& plonk_columns; commitment_scheme_type& commitment_scheme; transcript_type& transcript; std::shared_ptr> basic_domain; @@ -770,8 +774,8 @@ namespace nil { const auto &table = lookup_tables[t_id]; auto key = std::tuple(table.tag_index, 0, plonk_variable::column_type::selector); auto shifted_key = std::tuple(table.tag_index, 1, plonk_variable::column_type::selector); - auto selector_value = evaluations[key]; - auto shifted_selector_value = evaluations[shifted_key]; + typename FieldType::value_type selector_value = evaluations[key]; + typename FieldType::value_type shifted_selector_value = evaluations[shifted_key]; for( std::size_t o_id = 0; o_id < table.lookup_options.size(); o_id++){ typename FieldType::value_type v = selector_value * (t_id + 1); typename FieldType::value_type shifted_v = shifted_selector_value * (t_id + 1); @@ -795,7 +799,7 @@ namespace nil { for( std::size_t g_id = 0; g_id < lookup_gates.size(); g_id++ ){ const auto &gate = lookup_gates[g_id]; auto key = std::tuple(gate.tag_index, 0, plonk_variable::column_type::selector); - auto selector_value = evaluations[key]; + typename FieldType::value_type selector_value = evaluations[key]; for( std::size_t c_id = 0; c_id < gate.constraints.size(); c_id++){ const auto &constraint = gate.constraints[c_id]; typename FieldType::value_type l = selector_value * constraint.table_id; diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/params.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/params.hpp index c2476cc537..efda8be2cd 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/params.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/params.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_PARAMS_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_PARAMS_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PARAMS_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PARAMS_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_PARAMS_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp index ad75babf55..96ff2cec7f 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/permutation_argument.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_PERMUTATION_ARGUMENT_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_PERMUTATION_ARGUMENT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PERMUTATION_ARGUMENT_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PERMUTATION_ARGUMENT_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_PERMUTATION_ARGUMENT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -43,6 +47,7 @@ #include #include #include +#include #include @@ -76,7 +81,7 @@ namespace nil { const typename placeholder_public_preprocessor::preprocessed_data_type preprocessed_data, const plonk_table_description &table_description, - const plonk_polynomial_dfs_table &column_polynomials, + const plonk_polynomial_dfs_table& column_polynomials, typename ParamsType::commitment_scheme_type& commitment_scheme, transcript_type& transcript ) { diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp index f9fd0e8df7..8780e59bfe 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/preprocessor.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_PREPROCESSOR_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_PREPROCESSOR_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PREPROCESSOR_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PREPROCESSOR_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_PREPROCESSOR_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -76,6 +80,7 @@ namespace nil { using commitment_type = typename commitment_scheme_type::commitment_type; using transcript_type = typename commitment_scheme_type::transcript_type; using transcript_hash_type = typename commitment_scheme_type::transcript_hash_type; + using public_assignment_type = typename policy_type::variable_assignment_type::public_table_type; public: static std::size_t permutation_partitions_num( @@ -264,7 +269,7 @@ namespace nil { }; bool operator==(const preprocessed_data_type &rhs) const { - return public_polynomial_table == rhs.public_polynomial_table && + return shared_ptr_equal(public_polynomial_table, rhs.public_polynomial_table) && permutation_polynomials == rhs.permutation_polynomials && identity_polynomials == rhs.identity_polynomials && q_last == rhs.q_last && @@ -276,7 +281,7 @@ namespace nil { return !(rhs == *this); } - plonk_public_polynomial_dfs_table_type public_polynomial_table; + std::shared_ptr public_polynomial_table; // S_sigma std::vector permutation_polynomials; @@ -287,6 +292,19 @@ namespace nil { polynomial_dfs_type q_blind; common_data_type common_data; + + private: + template + static bool shared_ptr_equal(const std::shared_ptr &lhs, const std::shared_ptr &rhs) { + bool both_null = (lhs == nullptr && rhs == nullptr); + if (both_null) { + return true; + } + if (lhs == nullptr || rhs == nullptr) { + return false; + } + return *lhs == *rhs; + } }; private: @@ -384,6 +402,18 @@ namespace nil { } }; + static inline std::shared_ptr> convert_public_table( + std::shared_ptr public_assignment, + std::shared_ptr> basic_domain + ) { + return std::make_shared>( + detail::column_range_polynomial_dfs(public_assignment->public_inputs(), basic_domain), + detail::column_range_polynomial_dfs(public_assignment->constants(), basic_domain), + detail::column_range_polynomial_dfs(public_assignment->selectors(), basic_domain) + ); + } + + public: static inline std::vector> columns_rotations( @@ -535,7 +565,7 @@ namespace nil { // TODO: columns_with_copy_constraints -- It should be extracted from constraint_system static inline preprocessed_data_type process( const plonk_constraint_system &constraint_system, - typename policy_type::variable_assignment_type::public_table_type public_assignment, + std::shared_ptr public_assignment, const plonk_table_description &table_description, typename ParamsType::commitment_scheme_type &commitment_scheme, @@ -580,15 +610,7 @@ namespace nil { q_last_q_blind[0] = lagrange_polynomial(basic_domain, usable_rows); q_last_q_blind[1] = selector_blind(usable_rows, basic_domain); - plonk_public_polynomial_dfs_table - public_polynomial_table = - plonk_public_polynomial_dfs_table( - detail::column_range_polynomial_dfs(public_assignment.move_public_inputs(), - basic_domain), - detail::column_range_polynomial_dfs(public_assignment.move_constants(), - basic_domain), - detail::column_range_polynomial_dfs(public_assignment.move_selectors(), - basic_domain)); + auto public_polynomial_table = convert_public_table(std::move(public_assignment), basic_domain); // prepare commitments for short verifier //typename preprocessed_data_type::public_precommitments_type public_precommitments = @@ -600,7 +622,7 @@ namespace nil { std::size_t lookup_parts_num = constraint_system.lookup_parts(max_quotient_poly_chunks).size(); typename preprocessed_data_type::public_commitments_type public_commitments = commitments( - public_polynomial_table, id_perm_polys, + *public_polynomial_table, id_perm_polys, sigma_perm_polys, q_last_q_blind, commitment_scheme ); @@ -658,12 +680,14 @@ namespace nil { struct preprocessed_data_type { std::shared_ptr> basic_domain; - plonk_private_polynomial_dfs_table private_polynomial_table; + std::shared_ptr> private_polynomial_table; }; + using private_assignment_type = typename policy_type::variable_assignment_type::private_table_type; + static inline preprocessed_data_type process( const plonk_constraint_system &constraint_system, - typename policy_type::variable_assignment_type::private_table_type private_assignment, + std::shared_ptr private_assignment, const plonk_table_description &table_description ) { std::size_t N_rows = table_description.rows_amount; @@ -671,10 +695,13 @@ namespace nil { std::shared_ptr> basic_domain = math::make_evaluation_domain(N_rows); - plonk_private_polynomial_dfs_table - private_polynomial_table(detail::column_range_polynomial_dfs( - private_assignment.move_witnesses(), basic_domain)); - return preprocessed_data_type({basic_domain, std::move(private_polynomial_table)}); + auto private_polynomial_table = std::make_shared>( + detail::column_range_polynomial_dfs( + private_assignment->witnesses(), + basic_domain + ) + ); + return preprocessed_data_type({basic_domain, private_polynomial_table}); } }; } // namespace snark diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/proof.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/proof.hpp index 96ad8f1fa3..184b5dbc6c 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/proof.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/proof.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_PROOF_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_PROOF_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PROOF_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PROOF_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_PROOF_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp index 0b4aa654c6..601ad22643 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/prover.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_PROVER_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_PROVER_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PROVER_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_PROVER_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_PROVER_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -98,33 +102,33 @@ namespace nil { typename private_preprocessor_type::preprocessed_data_type preprocessed_private_data, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - const commitment_scheme_type& commitment_scheme, + commitment_scheme_type commitment_scheme, bool skip_commitment_scheme_eval_proofs = false ) { auto prover = placeholder_prover( preprocessed_public_data, std::move(preprocessed_private_data), table_description, - constraint_system, commitment_scheme, skip_commitment_scheme_eval_proofs); + constraint_system, std::move(commitment_scheme), skip_commitment_scheme_eval_proofs); return prover.process(); } placeholder_prover( const typename public_preprocessor_type::preprocessed_data_type &preprocessed_public_data, - typename private_preprocessor_type::preprocessed_data_type preprocessed_private_data, + const typename private_preprocessor_type::preprocessed_data_type &preprocessed_private_data, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - const commitment_scheme_type &commitment_scheme, + commitment_scheme_type commitment_scheme, bool skip_commitment_scheme_eval_proofs = false ) : preprocessed_public_data(preprocessed_public_data) , table_description(table_description) , constraint_system(constraint_system) - , _polynomial_table(new plonk_polynomial_dfs_table( - std::move(preprocessed_private_data.private_polynomial_table), - preprocessed_public_data.public_polynomial_table)) - + , _polynomial_table(std::make_unique>( + preprocessed_private_data.private_polynomial_table, + preprocessed_public_data.public_polynomial_table + )) , transcript(std::vector({})) , _is_lookup_enabled(constraint_system.lookup_gates().size() > 0) - , _commitment_scheme(commitment_scheme) + , _commitment_scheme(std::move(commitment_scheme)) , _skip_commitment_scheme_eval_proofs(skip_commitment_scheme_eval_proofs) { // Initialize transcript. @@ -194,12 +198,12 @@ namespace nil { transcript )[0]; + _polynomial_table.reset(); // We don't need it anymore, release memory + /////TEST #ifdef ZK_PLACEHOLDER_DEBUG_ENABLED placeholder_debug_output(); #endif - // _polynomial_table not needed, clean its memory - _polynomial_table.reset(nullptr); // 7. Aggregate quotient polynomial { @@ -213,6 +217,7 @@ namespace nil { // 8. Run evaluation proofs _proof.eval_proof.challenge = transcript.template challenge(); generate_evaluation_points(); + if (!_skip_commitment_scheme_eval_proofs) { _proof.eval_proof.eval_proof = _commitment_scheme.proof_eval(transcript); } else { @@ -230,6 +235,10 @@ namespace nil { return _commitment_scheme; } + commitment_scheme_type move_commitment_scheme() { + return std::move(_commitment_scheme); + } + private: std::vector quotient_polynomial_split_dfs() { PROFILE_SCOPE("quotient_polynomial_split_dfs"); @@ -325,7 +334,7 @@ namespace nil { _commitment_scheme, transcript ); -; + lookup_argument_result = lookup_argument_prover.prove_eval(); _proof.commitments[LOOKUP_BATCH] = lookup_argument_result.lookup_commitment; } @@ -353,7 +362,7 @@ namespace nil { for (std::size_t j = 0; j < gates[i].constraints.size(); j++) { polynomial_dfs_type constraint_result = gates[i].constraints[j].evaluate( - *_polynomial_table, preprocessed_public_data.common_data.basic_domain) * + _polynomial_table, preprocessed_public_data.common_data.basic_domain) * _polynomial_table.selector(gates[i].selector_index); // for (std::size_t k = 0; k < table_description.rows_amount; k++) { if (constraint_result.evaluate( @@ -421,7 +430,7 @@ namespace nil { _commitment_scheme.append_eval_point(FIXED_VALUES_BATCH, start_index - 1, _proof.eval_proof.challenge * _omega); for (std::size_t ind = 0; - ind < constant_columns + preprocessed_public_data.public_polynomial_table.selectors().size(); + ind < constant_columns + preprocessed_public_data.public_polynomial_table->selectors().size(); ind++, i++ ) { const std::set& fixed_values_rotation = diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp index fe192dbbec..c8b20dcd32 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/systems/plonk/placeholder/verifier.hpp @@ -25,8 +25,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_PLONK_PLACEHOLDER_VERIFIER_HPP -#define CRYPTO3_ZK_PLONK_PLACEHOLDER_VERIFIER_HPP +#ifndef PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_VERIFIER_HPP +#define PARALLEL_CRYPTO3_ZK_PLONK_PLACEHOLDER_VERIFIER_HPP + +#ifdef CRYPTO3_ZK_PLONK_PLACEHOLDER_VERIFIER_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include @@ -150,7 +154,7 @@ namespace nil { const placeholder_proof &proof, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - commitment_scheme_type commitment_scheme, + commitment_scheme_type& commitment_scheme, const std::vector> &public_input ){ // TODO: process rotations for public input. @@ -172,7 +176,7 @@ namespace nil { if (constraint_system.public_input_sizes_num() != 0) max_size = std::min(max_size, constraint_system.public_input_size(i)); auto omega_pow = FieldType::value_type::one(); - for( std::size_t j = 0; j < public_input[i].size(); ++j ){ + for( std::size_t j = 0; j < max_size; ++j ){ value += (public_input[i][j] * omega_pow) * (challenge - omega_pow).inversed(); omega_pow = omega_pow * omega; } @@ -191,7 +195,7 @@ namespace nil { const placeholder_proof &proof, const plonk_table_description &table_description, const plonk_constraint_system &constraint_system, - commitment_scheme_type commitment_scheme + commitment_scheme_type& commitment_scheme ) { // We cannot add eval points unless everything is committed, so when verifying assume it's committed. diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/verification_key.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/verification_key.hpp index e67a33799e..06bcf9822b 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/verification_key.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/snark/verification_key.hpp @@ -22,8 +22,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_SNARK_VERIFICATION_KEY_HPP -#define CRYPTO3_ZK_SNARK_VERIFICATION_KEY_HPP +#ifndef PARALLEL_CRYPTO3_ZK_SNARK_VERIFICATION_KEY_HPP +#define PARALLEL_CRYPTO3_ZK_SNARK_VERIFICATION_KEY_HPP + +#ifdef CRYPTO3_ZK_SNARK_VERIFICATION_KEY_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp index b6c9ba00d3..f4a9d7dade 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/fiat_shamir.hpp @@ -24,8 +24,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_TRANSCRIPT_FIAT_SHAMIR_HEURISTIC_HPP -#define CRYPTO3_ZK_TRANSCRIPT_FIAT_SHAMIR_HEURISTIC_HPP +#ifndef PARALLEL_CRYPTO3_ZK_TRANSCRIPT_FIAT_SHAMIR_HEURISTIC_HPP +#define PARALLEL_CRYPTO3_ZK_TRANSCRIPT_FIAT_SHAMIR_HEURISTIC_HPP + +#ifdef CRYPTO3_ZK_TRANSCRIPT_FIAT_SHAMIR_HEURISTIC_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include #include @@ -91,9 +95,9 @@ namespace nil { ); acc(data); } else { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; typename hash_type::construction::type::block_type byte_data = - nil::marshalling::pack(data, status); + nil::crypto3::marshalling::pack(data, status); THROW_IF_ERROR_STATUS(status, "fiat_shamir_heuristic_accumulative::operator()"); acc(byte_data); } @@ -136,7 +140,7 @@ namespace nil { struct fiat_shamir_heuristic_sequential { typedef Hash hash_type; - typedef typename boost::multiprecision::cpp_int_modular_backend modular_backend_of_hash_size; + typedef nil::crypto3::multiprecision::big_uint big_uint_of_hash_size; fiat_shamir_heuristic_sequential() : state(hash({0})) { } @@ -173,9 +177,9 @@ namespace nil { algebra::is_field_element::value > operator()(element const& data) { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector byte_data = - nil::marshalling::pack(data, status); + nil::crypto3::marshalling::pack(data, status); THROW_IF_ERROR_STATUS(status, "fiat_shamir_heuristic_sequential::operator()"); auto acc_convertible = hash(state); state = accumulators::extract::hash( @@ -199,9 +203,9 @@ namespace nil { std::size_t count = std::min(data.size(), state.size()); std::copy(state.begin(), state.begin() + count, data.begin() + data.size() - count); - nil::marshalling::status_type status; - boost::multiprecision::number raw_result = - nil::marshalling::pack(state, status); + nil::crypto3::marshalling::status_type status; + big_uint_of_hash_size raw_result = + nil::crypto3::marshalling::pack(state, status); THROW_IF_ERROR_STATUS(status, "fiat_shamir_heuristic_sequential::challenge"); return raw_result; } @@ -209,8 +213,8 @@ namespace nil { template Integral int_challenge() { state = hash(state); - nil::marshalling::status_type status; - boost::multiprecision::number raw_result = nil::marshalling::pack(state, status); + nil::crypto3::marshalling::status_type status; + big_uint_of_hash_size raw_result = nil::crypto3::marshalling::pack(state, status); // If we remove the next line, raw_result is a much larger number, conversion to 'Integral' will overflow // and in debug mode an assert will fire. In release mode nothing will change. raw_result &= ~Integral(0); @@ -329,7 +333,7 @@ namespace nil { Integral result = 0u; Integral factor = 1u; size_t bytes_to_fill = sizeof(Integral); - // TODO(martun): consider using export_bits here, or nil::marshalling::pack, instead of this. + // TODO(martun): consider using export_bits here, or nil::crypto3::marshalling::pack, instead of this. while (intermediate_result > 0u && bytes_to_fill != 0u) { auto last_byte = intermediate_result % 0x100u; Integral last_byte_integral = static_cast(last_byte); diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/kimchi_transcript.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/kimchi_transcript.hpp deleted file mode 100644 index a953d35d9f..0000000000 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/kimchi_transcript.hpp +++ /dev/null @@ -1,321 +0,0 @@ -#ifndef CRYPTO3_ZK_SPONGE_HPP -#define CRYPTO3_ZK_SPONGE_HPP - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include -#include -#include - -#include -// #include - -namespace nil { - namespace crypto3 { - namespace zk { - namespace snark { - template - struct proof_evaluation_type; - } - namespace transcript { - constexpr static const int CHALLENGE_LENGTH_IN_LIMBS = 2; - constexpr static const int HIGH_ENTROPY_LIMBS = 2; - - template - integral_type pack(std::vector limbs_lsb) { - nil::marshalling::status_type status; - std::size_t byte_size = - boost::multiprecision::backends::max_precision::value / - CHAR_BIT; - std::size_t size = byte_size / sizeof(uint64_t) + (byte_size % sizeof(uint64_t) ? 1 : 0); - limbs_lsb.resize(size); - std::reverse(limbs_lsb.begin(), limbs_lsb.end()); - - integral_type res = nil::marshalling::pack(limbs_lsb, status); - THROW_IF_ERROR_STATUS(status, "std::vector to integral_type"); - - return res; - } - - template - std::vector unpack(value_type &value) { - nil::marshalling::status_type status; - integral_type scalar_value = integral_type(value.data); - std::vector limbs_lsb = - nil::marshalling::pack(scalar_value, status); - THROW_IF_ERROR_STATUS(status, "integral_type to std::vector"); - - std::reverse(limbs_lsb.begin(), limbs_lsb.end()); - limbs_lsb.resize(CHALLENGE_LENGTH_IN_LIMBS); - - return limbs_lsb; - } - - template - struct BaseSponge { - typedef typename CurveType::template g1_type group_type; - typedef typename CurveType::base_field_type base_field_type; - typedef typename CurveType::scalar_field_type scalar_field_type; - typedef nil::crypto3::hashes::detail::mina_poseidon_policy policy_type; - - constexpr static const int CHALLENGE_LENGTH_IN_LIMBS = 2; - constexpr static const int HIGH_ENTROPY_LIMBS = 2; - - typedef snark::ScalarChallenge scalar_challenge_type; - - typedef std::uint64_t limb_type; - - typename nil::crypto3::hashes::detail::poseidon_sponge_construction_custom sponge; - std::vector last_squeezed; - - }; - - template - struct DefaultFrSponge : public BaseSponge { - typedef typename BaseSponge::group_type group_type; - typedef typename BaseSponge::scalar_field_type scalar_field_type; - // typedef typename BaseSponge::scalar_field_type scalar_field_type; - typedef typename BaseSponge::limb_type limb_type; - // typedef typename BaseSponge::scalar_challenge_type scalar_challenge_type; - - typedef nil::crypto3::hashes::detail::mina_poseidon_policy policy_type; - typename nil::crypto3::hashes::detail::poseidon_sponge_construction_custom sponge; - typedef snark::ScalarChallenge scalar_challenge_type; - - constexpr static const int CHALLENGE_LENGTH_IN_LIMBS = BaseSponge::CHALLENGE_LENGTH_IN_LIMBS; - constexpr static const int HIGH_ENTROPY_LIMBS = BaseSponge::HIGH_ENTROPY_LIMBS; - - typename scalar_field_type::value_type squeeze(std::size_t num_limbs) { - if (this->last_squeezed.size() >= num_limbs) { - std::vector limbs(this->last_squeezed.begin(), - this->last_squeezed.begin() + num_limbs); - std::vector remaining(this->last_squeezed.begin() + num_limbs, - this->last_squeezed.end()); - this->last_squeezed = remaining; - - return typename scalar_field_type::value_type( - pack(limbs)); - } else { - auto sq = this->sponge.squeeze(); - std::vector x = unpack( - sq); - - for (int i = 0; i < HIGH_ENTROPY_LIMBS; ++i) { - this->last_squeezed.push_back(x[i]); - } - - return squeeze(num_limbs); - } - } - - void absorb(typename scalar_field_type::value_type x) { - this->last_squeezed.clear(); - this->sponge.absorb(x); - } - - scalar_challenge_type challenge() { - return scalar_challenge_type(squeeze(CHALLENGE_LENGTH_IN_LIMBS)); - } - - void absorb_evaluations(std::vector &p, - snark::proof_evaluation_type> &e) { - this->last_squeezed.clear(); - for (const typename scalar_field_type::value_type &v: p) { - this->sponge.absorb(v); - } - - std::vector> points = { - e.z, - e.generic_selector, - e.poseidon_selector - }; - for (const auto &v: e.z) { - this->sponge.absorb(v); - } - - for (const auto &v: e.generic_selector) { - this->sponge.absorb(v); - } - - for (const auto &v: e.poseidon_selector) { - this->sponge.absorb(v); - } - - for (auto &w_iter: e.w) { - for (const auto &v: w_iter) { - this->sponge.absorb(v); - } - } - - for (auto &s_iter: e.s) { - for (const auto &v: s_iter) { - this->sponge.absorb(v); - } - } - - if (e.lookup_is_used) { - for (auto &s: e.lookup.sorted) { - for (const auto &v: s) { - this->sponge.absorb(v); - } - } - - for (const auto &v: e.lookup.aggreg) { - this->sponge.absorb(v); - } - for (const auto &v: e.lookup.table) { - this->sponge.absorb(v); - } - - if (e.lookup.runtime_is_used) { - for (const auto &v : e.lookup.runtime) { - this->sponge.absorb(v); - } - } - } - } - }; - - template - struct DefaultFqSponge : public BaseSponge { - typedef typename BaseSponge::group_type group_type; - typedef typename BaseSponge::base_field_type base_field_type; - typedef typename BaseSponge::scalar_field_type scalar_field_type; - typedef typename BaseSponge::limb_type limb_type; - typedef typename BaseSponge::scalar_challenge_type scalar_challenge_type; - - constexpr static const int CHALLENGE_LENGTH_IN_LIMBS = BaseSponge::CHALLENGE_LENGTH_IN_LIMBS; - constexpr static const int HIGH_ENTROPY_LIMBS = BaseSponge::HIGH_ENTROPY_LIMBS; - - std::vector squeeze_limbs(std::size_t num_limbs) { - if (this->last_squeezed.size() >= num_limbs) { - std::vector limbs(this->last_squeezed.begin(), - this->last_squeezed.begin() + num_limbs); - std::vector remaining(this->last_squeezed.begin() + num_limbs, - this->last_squeezed.end()); - this->last_squeezed = remaining; - return limbs; - } else { - auto sq = this->sponge.squeeze(); - std::vector x = unpack< - typename base_field_type::value_type, - typename base_field_type::integral_type>(sq); - - for (int i = 0; i < HIGH_ENTROPY_LIMBS; ++i) { - this->last_squeezed.push_back(x[i]); - } - - return squeeze_limbs(num_limbs); - } - } - - typename base_field_type::value_type squeeze_field() { - this->last_squeezed.clear(); - return this->sponge.squeeze(); - } - - typename scalar_field_type::value_type squeeze(std::size_t num_limbs) { - auto limbs = this->squeeze_limbs(num_limbs); - auto first_value = pack(limbs); - typename scalar_field_type::value_type res = typename scalar_field_type::value_type( - pack(limbs)); - return res; - } - - void absorb_g(std::vector &gs) { - this->last_squeezed.clear(); - for (auto &g: gs) { - absorb_g(g); - } - } - - void absorb_g(typename group_type::value_type g) { - if (!this->last_squeezed.empty()) - this->last_squeezed.clear(); - - this->sponge.absorb(g.X); - this->sponge.absorb(g.Y); - } - - void absorb_fr(typename scalar_field_type::value_type f) { - if (this->last_squeezed.empty()) - this->last_squeezed.clear(); - - if (scalar_field_type::modulus < base_field_type::modulus) { - typename base_field_type::value_type casted_to_base_value = typename base_field_type::value_type( - typename base_field_type::integral_type(f.data)); - this->sponge.absorb(casted_to_base_value); - } else { - nil::marshalling::status_type status; - typename scalar_field_type::integral_type scalar_f(f.data); - std::vector bits = - nil::marshalling::pack(scalar_f, status); - THROW_IF_ERROR_STATUS(status, "FqSponge::absorb_fr"); - std::vector shifted_bits(bits.size(), false); - - std::copy(bits.begin(), bits.end() - 1, shifted_bits.begin() + 1); - - typename base_field_type::integral_type low_bit = - bits.back() ? - typename base_field_type::integral_type(1) : - typename base_field_type::integral_type(0); - - typename base_field_type::integral_type high_bits = - nil::marshalling::pack(shifted_bits, status); - THROW_IF_ERROR_STATUS(status, "FqSponge::absorb_fr"); - - typename base_field_type::value_type high_bits_field = - typename base_field_type::value_type(high_bits); - typename base_field_type::value_type low_bit_field = - typename base_field_type::value_type(low_bit); - - this->sponge.absorb(high_bits_field); - this->sponge.absorb(low_bit_field); - } - } - - void absorb_fr(const std::vector &fs) { - this->last_squeezed.clear(); - - for (auto f: fs) { - absorb_fr(f); - } - } - - typename scalar_field_type::value_type challenge() { - return this->squeeze(CHALLENGE_LENGTH_IN_LIMBS); - } - - typename base_field_type::value_type challenge_fq() { - return this->squeeze_field(); - } - - scalar_challenge_type squeeze_prechallenge() { - return scalar_challenge_type(challenge()); - } - - typename scalar_field_type::value_type - squeeze_challenge(typename scalar_field_type::value_type endo_r) { - return squeeze_prechallenge().to_field(endo_r); - } - - typename scalar_field_type::value_type digest() { - return typename scalar_field_type::value_type( - typename scalar_field_type::integral_type(this->squeeze_field().data)); - } - }; - } - } - } -} - -#endif diff --git a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/transcript.hpp b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/transcript.hpp index 03654db4af..3d9da87548 100644 --- a/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/transcript.hpp +++ b/parallel-crypto3/libs/parallel-zk/include/nil/crypto3/zk/transcript/transcript.hpp @@ -23,8 +23,12 @@ // SOFTWARE. //---------------------------------------------------------------------------// -#ifndef CRYPTO3_ZK_TRANSCRIPT_HPP -#define CRYPTO3_ZK_TRANSCRIPT_HPP +#ifndef PARALLEL_CRYPTO3_ZK_TRANSCRIPT_HPP +#define PARALLEL_CRYPTO3_ZK_TRANSCRIPT_HPP + +#ifdef CRYPTO3_ZK_TRANSCRIPT_HPP +#error "You're mixing parallel and non-parallel crypto3 versions" +#endif #include diff --git a/parallel-crypto3/libs/parallel-zk/test/CMakeLists.txt b/parallel-crypto3/libs/parallel-zk/test/CMakeLists.txt index 158be5e776..e77dc23406 100644 --- a/parallel-crypto3/libs/parallel-zk/test/CMakeLists.txt +++ b/parallel-crypto3/libs/parallel-zk/test/CMakeLists.txt @@ -19,6 +19,8 @@ cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} Boost::unit_test_framework Boost::log ) +set_target_properties(_cm_internal_tests-actor-zk-test PROPERTIES CXX_STANDARD 20) +target_precompile_headers(_cm_internal_tests-actor-zk-test REUSE_FROM crypto3_precompiled_headers) if(PROFILING_ENABLED) add_definitions(-DPROFILING_ENABLED) @@ -37,7 +39,7 @@ macro(define_zk_test test) ${Boost_INCLUDE_DIRS}) - set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${full_test_name} PROPERTIES CXX_STANDARD 20) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(${full_test_name} PRIVATE "-fconstexpr-steps=2147483647") @@ -45,6 +47,7 @@ macro(define_zk_test test) target_compile_options(${full_test_name} PRIVATE "-fconstexpr-ops-limit=4294967295") endif() + target_precompile_headers(${full_test_name} REUSE_FROM crypto3_precompiled_headers) endmacro() set(TESTS_NAMES @@ -52,24 +55,12 @@ set(TESTS_NAMES "commitment/fri" "commitment/kzg" "commitment/fold_polynomial" - "commitment/pedersen" - "commitment/proof_of_knowledge" -# "commitment/powers_of_tau" -# "commitment/type_traits" -# "commitment/kimchi_pedersen" "commitment/proof_of_work" "math/expression" # "routing_algorithms/test_routing_algorithms" - -# "systems/plonk/pickles/pickles" -# "systems/plonk/pickles/kimchi" -# "systems/plonk/pickles/oracles" -# "systems/plonk/pickles/to_field" -# "systems/plonk/pickles/to_group" - "systems/plonk/placeholder/placeholder_circuits" "systems/plonk/placeholder/placeholder_goldilocks" "systems/plonk/placeholder/placeholder_lookup_argument" @@ -82,9 +73,6 @@ set(TESTS_NAMES "transcript/transcript" -# TODO: either delete this code with the test, or fix it later. -# "transcript/kimchi_transcript" - "systems/plonk/plonk_constraint") foreach(TEST_NAME ${TESTS_NAMES}) diff --git a/parallel-crypto3/libs/parallel-zk/test/commitment/kimchi_pedersen.cpp b/parallel-crypto3/libs/parallel-zk/test/commitment/kimchi_pedersen.cpp deleted file mode 100644 index 6c757c188f..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/commitment/kimchi_pedersen.cpp +++ /dev/null @@ -1,252 +0,0 @@ -#define BOOST_TEST_MODULE kimchi_commitment_test - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::zk; -using curve_type = algebra::curves::vesta; -using group_type = curve_type::template g1_type; -using scalar_field_type = curve_type::scalar_field_type; -using base_field_type = curve_type::base_field_type; -using scalar_value_type = scalar_field_type::value_type; -using kimchi_pedersen = commitments::kimchi_pedersen; -using sponge_type = kimchi_pedersen::sponge_type; -using params_type = kimchi_pedersen::params_type; -using batchproof_type = kimchi_pedersen::batchproof_type; -using commitment_type = kimchi_pedersen::commitment_type; -using blinding_type = kimchi_pedersen::blinding_type; -using proof_type = kimchi_pedersen::proof_type; -using polynomial_type = kimchi_pedersen::polynomial_type; -using polynomial_type_single = kimchi_pedersen::polynomial_type_single; -using evaluation_type = kimchi_pedersen::evaluation_type; -using blinded_commitment_type = kimchi_pedersen::blinded_commitment_type; - -struct Commitment { - /// the commitment itself, potentially in chunks - commitment_type chunked_commitment; - - /// an optional degree bound - std::size_t bound; -}; - -/// An evaluated commitment (given a number of evaluation points) -struct evaluated_commitment { - /// the commitment - Commitment commit; - - /// the chunked evaluations given in the same order as the evaluation points - std::vector> chunked_evals; -}; - -struct CommitmentAndSecrets { - /// the commitment evaluated at some points - evaluated_commitment eval_commit; - - /// the polynomial - math::polynomial poly; - - /// the blinding part - blinding_type chunked_blinding; -}; - -struct aggregated_evaluation_proof { - /// a number of evaluation points - std::vector eval_points; - - /// a number of commitments evaluated at these evaluation points - std::vector eval_commitments; - - /// the random value used to separate polynomials - scalar_value_type polymask; - - /// the random value used to separate evaluations - scalar_value_type evalmask; - - /// an Fq-sponge - sponge_type fq_sponge; - - /// the actual evaluation proof - proof_type proof; - - batchproof_type verify_type() { - std::vector coms; - - for (auto &eval_com: eval_commitments) { - assert(eval_points.size() == eval_com.chunked_evals.size()); - coms.push_back( - evaluation_type( - {eval_com.commit.chunked_commitment, eval_com.chunked_evals, (int) eval_com.commit.bound})); - } - - return batchproof_type({fq_sponge, coms, eval_points, polymask, evalmask, proof}); - } -}; - -struct chunked_polynomial { - std::vector> chunked_polynomials; - unsigned int chunk_size; - - chunked_polynomial(math::polynomial &big_polynomial, unsigned int chunk_size) : - chunk_size(chunk_size) { - unsigned int number_of_chunks = - big_polynomial.size() / chunk_size + (big_polynomial.size() % chunk_size ? 1 : 0); - - for (unsigned int i = 0; i < number_of_chunks; ++i) { - auto iter_chunk_begin = big_polynomial.begin() + i * chunk_size; - auto iter_chunk_end = - big_polynomial.begin() + (i == number_of_chunks - 1 ? big_polynomial.size() : (i + 1) * chunk_size); - chunked_polynomials.emplace_back(iter_chunk_begin, iter_chunk_end); - } - } - - std::vector evaluate_chunks(scalar_value_type &point) { - std::vector result; - - for (auto &a: chunked_polynomials) { - result.push_back(a.evaluate(point)); - } - - return result; - } -}; - -BOOST_AUTO_TEST_SUITE(kimchi_commitment_test_suite) - - BOOST_AUTO_TEST_CASE(kimchi_commitment_test_opening_proof) { - snark::group_map g_map; - sponge_type fq_sponge; - params_type params = kimchi_pedersen::setup(20); - - std::vector coeffs; - for (int i = 0; i < 10; ++i) { - coeffs.emplace_back(i); - } - - math::polynomial poly1(coeffs); - math::polynomial poly2(coeffs.begin(), coeffs.begin() + 5); - - blinded_commitment_type commitment = kimchi_pedersen::commitment(params, poly1, -1); - blinded_commitment_type bounded_commitment = kimchi_pedersen::commitment(params, poly2, poly2.degree() + 1); - - scalar_value_type u = algebra::random_element(); - scalar_value_type v = algebra::random_element(); - - polynomial_type polys{{poly1, -1, std::get<1>(commitment)}, - {poly2, static_cast(poly2.degree() + 1), std::get<1>(bounded_commitment)}}; - - std::vector elm{algebra::random_element(), - algebra::random_element()}; - - proof_type proof = kimchi_pedersen::proof_eval(params, g_map, polys, elm, v, u, fq_sponge); - - chunked_polynomial poly1_chunked(poly1, params.g.size()); - chunked_polynomial poly2_chunked(poly2, params.g.size()); - - std::vector> poly1_chunked_evals = {poly1_chunked.evaluate_chunks(elm[0]), - poly1_chunked.evaluate_chunks(elm[1])}; - std::vector> poly2_chunked_evals = {poly2_chunked.evaluate_chunks(elm[0]), - poly2_chunked.evaluate_chunks(elm[1])}; - - std::vector evals; - evals.emplace_back(std::get<0>(commitment), poly1_chunked_evals, -1); - evals.emplace_back(std::get<0>(bounded_commitment), poly2_chunked_evals, poly2.degree() + 1); - sponge_type new_fq_sponge; - std::vector batch; - batch.emplace_back(new_fq_sponge, evals, elm, v, u, proof); - - BOOST_CHECK(kimchi_pedersen::verify_eval(params, g_map, batch)); - } - - BOOST_AUTO_TEST_CASE(kimchi_commitment_test_case) { - - snark::group_map g_map; - sponge_type fq_sponge; - params_type params = kimchi_pedersen::setup(1 << 7); - - std::vector proofs; - - std::size_t count_eval_proofs = 1; - for (std::size_t i = 0; i < count_eval_proofs; ++i) { - std::vector eval_points(7); - - // Random_element is called with the default parameter, yet we need to wrap it in a lamda. - std::generate(eval_points.begin(), eval_points.end(), - []() { return algebra::random_element(); }); - - std::vector commitments; - - for (unsigned int i = 0; i < 3; ++i) { - unsigned int len = std::rand() % 500; - std::vector polynom_coeffs(len); - - // Random_element is called with the default parameter, yet we need to wrap it in a lamda. - std::generate(polynom_coeffs.begin(), polynom_coeffs.end(), - []() { return algebra::random_element(); }); - unsigned int bound = polynom_coeffs.size(); - - math::polynomial poly(polynom_coeffs.begin(), polynom_coeffs.end()); - - blinded_commitment_type blinded_commitment = kimchi_pedersen::commitment(params, poly, bound); - - std::vector> chunked_evals; - - chunked_polynomial chunked_poly(poly, params.g.size()); - - for (auto &point: eval_points) { - chunked_evals.emplace_back(chunked_poly.evaluate_chunks(point)); - } - - Commitment commit{std::get<0>(blinded_commitment), bound}; - evaluated_commitment eval_commit{commit, chunked_evals}; - commitments.emplace_back(CommitmentAndSecrets({eval_commit, poly, std::get<1>(blinded_commitment)})); - } - - polynomial_type polynomials; - - for (auto &c: commitments) { - polynomials.emplace_back(c.poly, c.eval_commit.commit.bound, c.chunked_blinding); - } - - scalar_value_type polymask = algebra::random_element(); - scalar_value_type evalmask = algebra::random_element(); - - proof_type proof = - kimchi_pedersen::proof_eval(params, g_map, polynomials, eval_points, polymask, evalmask, fq_sponge); - - std::vector eval_commitments; - for (auto &c: commitments) { - eval_commitments.emplace_back(c.eval_commit); - } - - sponge_type new_fq_sponge; - proofs.emplace_back( - aggregated_evaluation_proof( - {eval_points, eval_commitments, polymask, evalmask, new_fq_sponge, proof})); - } - - std::vector batch; - for (auto &proof: proofs) { - batch.emplace_back(proof.verify_type()); - } - - BOOST_CHECK(kimchi_pedersen::verify_eval(params, g_map, batch)); - } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/parallel-crypto3/libs/parallel-zk/test/commitment/kzg.cpp b/parallel-crypto3/libs/parallel-zk/test/commitment/kzg.cpp index c9a1fe78d7..b0db0959fc 100644 --- a/parallel-crypto3/libs/parallel-zk/test/commitment/kzg.cpp +++ b/parallel-crypto3/libs/parallel-zk/test/commitment/kzg.cpp @@ -219,23 +219,23 @@ BOOST_AUTO_TEST_CASE(kzg_test_mnt6_accumulated) { std::size_t n = 8; scalar_value_type z = 2u; const polynomial f = { - 0x0ed6fb07f52c1f1ef7952250702368474f20fd7af906ba3a5842cdb7946c69b603852bf1069_cppui_modular298, - 0x14db9efba58de09f8ccb1d73fefce45393856e6a7509006561fe67ea354ec69d791b44c1476_cppui_modular298, - 0x0e9fa83a6f8891bc7e6aa1afae85e11dd80cdef32dfcef7cedc12792cf74141c899c8fb1f98_cppui_modular298, - 0x101cc0b43782ca40ae5bf96aabf461e1a623ab9284acac3bb6d55bff4429356dad714ee0bd0_cppui_modular298, - 0x1310586a4d1ed251d1e4c95711fb9346a2b233649f5ce32fe1cf3aea423d131787187a13799_cppui_modular298, - 0x0d9ed064a24e83ac6134de7cca08bdc3e31ffd4db0a004b63039f76821ec2cc53b7e6a74735_cppui_modular298, - 0x2839e48822f55b4e487b817ddf06a6e32e0dcc0c2ced1e738d38fec15bd4717d7680dda90ec_cppui_modular298, + 0x0ed6fb07f52c1f1ef7952250702368474f20fd7af906ba3a5842cdb7946c69b603852bf1069_big_uint298, + 0x14db9efba58de09f8ccb1d73fefce45393856e6a7509006561fe67ea354ec69d791b44c1476_big_uint298, + 0x0e9fa83a6f8891bc7e6aa1afae85e11dd80cdef32dfcef7cedc12792cf74141c899c8fb1f98_big_uint298, + 0x101cc0b43782ca40ae5bf96aabf461e1a623ab9284acac3bb6d55bff4429356dad714ee0bd0_big_uint298, + 0x1310586a4d1ed251d1e4c95711fb9346a2b233649f5ce32fe1cf3aea423d131787187a13799_big_uint298, + 0x0d9ed064a24e83ac6134de7cca08bdc3e31ffd4db0a004b63039f76821ec2cc53b7e6a74735_big_uint298, + 0x2839e48822f55b4e487b817ddf06a6e32e0dcc0c2ced1e738d38fec15bd4717d7680dda90ec_big_uint298, }; auto f_eval = f.evaluate(alpha); auto params = typename kzg_type::params_type(n, alpha); auto commit = zk::algorithms::commit(params, f); - nil::marshalling::status_type status; - using endianness = nil::marshalling::option::big_endian; + nil::crypto3::marshalling::status_type status; + using endianness = nil::crypto3::marshalling::option::big_endian; std::vector single_commitment_bytes = - nil::marshalling::pack(commit, status); + nil::crypto3::marshalling::pack(commit, status); dump_vector(single_commitment_bytes, "commitment"); BOOST_CHECK(curve_type::template g1_type<>::value_type::one() == params.commitment_key[0]); @@ -394,83 +394,83 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { //~-~-~-~ commiting to batch: 0~-~-~-~ {8, { 0x1u, - 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_cppui_modular298, - 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_cppui_modular298, - 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_cppui_modular298, - 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_cppui_modular298, - 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_cppui_modular298, - 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_cppui_modular298, + 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_big_uint298, + 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_big_uint298, + 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_big_uint298, + 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_big_uint298, + 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_big_uint298, + 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_big_uint298, }}, {8, { 0x11u, - 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_cppui_modular298, - 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_cppui_modular298, - 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_cppui_modular298, - 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_cppui_modular298, - 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_cppui_modular298, - 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_cppui_modular298, + 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_big_uint298, + 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_big_uint298, + 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_big_uint298, + 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_big_uint298, + 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_big_uint298, + 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_big_uint298, }}, {8, { 0x121u, - 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_cppui_modular298, - 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_cppui_modular298, - 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_cppui_modular298, - 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_cppui_modular298, - 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_cppui_modular298, - 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_cppui_modular298, + 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_big_uint298, + 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_big_uint298, + 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_big_uint298, + 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_big_uint298, + 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_big_uint298, + 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_big_uint298, }}, {8, { 0x1331u, - 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_cppui_modular298, - 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_cppui_modular298, - 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_cppui_modular298, - 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_cppui_modular298, - 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_cppui_modular298, - 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_cppui_modular298, + 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_big_uint298, + 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_big_uint298, + 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_big_uint298, + 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_big_uint298, + 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_big_uint298, + 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_big_uint298, }}, {8, { 0x1u, - 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_cppui_modular298, - 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_cppui_modular298, - 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_cppui_modular298, - 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_cppui_modular298, - 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_cppui_modular298, - 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_cppui_modular298, + 0x29ab55a4b34e699f13959ce2c174be01985b7a0c88268d41489977b2219cd8a8a4e33032230_big_uint298, + 0x00f73779fe09916dfdcc2fd1f968d534beb17daf7518cd9fae5c1f7bdcf94dd5d7def6980c4_big_uint298, + 0x0078fe16f00d3d46d50e74ed550e57c9dda4ca5bc69da7a1820913abb7f1f371dd044f1a9c9_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a71660000_big_uint298, + 0x1224262893ebbcc33644de228777f0eafdda5726867d8d5ced4b9a4ebf8fb824c0c3e62ddd1_big_uint298, + 0x3ad84453493094f44c0e4b334f83d9b7d7845383998b4cfe8788f285043342f78dc81fc7f3d_big_uint298, + 0x3b567db6572ce91b74cc0617f3de5722b89106d7480672fcb3dbfe55293a9d5b88a2c745638_big_uint298, }}, {8, { 0x11u, - 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_cppui_modular298, - 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_cppui_modular298, - 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_cppui_modular298, - 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_cppui_modular298, - 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_cppui_modular298, - 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_cppui_modular298, + 0x32765e1dd8b55d57208c21d4b69519f0a9c31da369823c8981592cca8e802a5f94e83d34525_big_uint298, + 0x106aaf19dea2a84dda8f2cf18ff62880a9c958a6c6a5a79a941e1739ac8e2b3355ce6018d04_big_uint298, + 0x0808df85f0e111b425f5c3c2a5f3d467b7f17018307821b9a29a4e6737112a8fad4940c4659_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fff0_big_uint298, + 0x09591daf6e84c90b294e5930925794fbec72b38fa521de14b48be53652ac666dd0bed92badc_big_uint298, + 0x2b64ccb368977e146f4b4e13b8f6866bec6c788c47fe7303a1c6fac7349e659a0fd8b6472fd_big_uint298, + 0x33c69c47565914ae23e4b742a2f8da84de44611ade2bf8e4934ac399aa1b663db85dd59b9a8_big_uint298, }}, {8, { 0x121u, - 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_cppui_modular298, - 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_cppui_modular298, - 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_cppui_modular298, - 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_cppui_modular298, - 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_cppui_modular298, - 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_cppui_modular298, + 0x14837ac17edd19691f5b84d622f5280b0f03870f34ac907aa464fd672612e51d5448d739767_big_uint298, + 0x27d7b182abe493a25c180ff56ba5f4d8ed879e46f66fb6cafe6b42d0f0be9b331c180825d40_big_uint298, + 0x10f7e04a707de031f19d09e27357bd0a0a9ccf351ab20817607510d8e5cab1efb68f204abe7_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165fee0_big_uint298, + 0x274c010bc85d0cf92a7ef62f25f786e187324a23d9f78a2391801499bb19abb0115e3f2689a_big_uint298, + 0x13f7ca4a9b5592bfedc26b0fdd46ba13a8ae32ec183463d33779cf2ff06df59a498f0e3a2c1_big_uint298, + 0x2ad79b82d6bc4630583d7122d594f1e28b9901fdf3f21286d5700127fb61deddaf17f61541a_big_uint298, }}, {8, { 0x1331u, - 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_cppui_modular298, - 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_cppui_modular298, - 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_cppui_modular298, - 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_cppui_modular298, - 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_cppui_modular298, - 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_cppui_modular298, - 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_cppui_modular298, + 0x31adbbd7088bf00fa3cf6b1de5a83e1d102ee2033641130ddd3b79d5216262ef9c92daf0dd2_big_uint298, + 0x136877db5aae278ef135c61203d9be3d51b18584bc5dfeae9447a9d64fbe15917f6a9463135_big_uint298, + 0x3137f5bc5b7349c7e403bbf48520d1f85b927dba8b421f149031d663bdc38db588e4cb76a53_big_uint298, + 0x3bcf7bcd473a266249da7b0548ecaeec9635d1330ea41a9e35e51200e12c90cd65a7165ecd0_big_uint298, + 0x0a21bff63eae3652a60b0fe7634470cf8606ef2fd863079058a9982bbfca2dddc9143b6f22f_big_uint298, + 0x286703f1ec8bfed358a4b4f34512f0af44844bae52461befa19d682a916e7b3be63c81fcecc_big_uint298, + 0x0a978610ebc6dc9a65d6bf10c3cbdcf43aa353788361fb89a5b33b9d23690317dcc24ae95ae_big_uint298, }}, {8, {0x0u, 0x0u, 0x0u, 0x0u, 0x0u, 0x1u, 0x0u, 0x0u,}}, {8, {0x0u, 0x0u, 0x0u, 0x0u, 0x0u, 0x0u, 0x1u, 0x1u,}}, @@ -480,9 +480,9 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { 0x1u, 0x0u, 0x0u, - 0x1f8915cc2533543f2bc6164e6238fc23a81c0f463c4646f1d40c1d7dfd0ae08ab78492cbef1_cppui_modular298, - 0x39bef1b52e65b396fbac77780f097c34e4287e259355a4ea31e0dcfacd0677a359e136b2fdd_cppui_modular298, - 0x173564dab75ba19b463030c03996325d30e7829fc226518b459919e6d64278946b02141888b_cppui_modular298, + 0x1f8915cc2533543f2bc6164e6238fc23a81c0f463c4646f1d40c1d7dfd0ae08ab78492cbef1_big_uint298, + 0x39bef1b52e65b396fbac77780f097c34e4287e259355a4ea31e0dcfacd0677a359e136b2fdd_big_uint298, + 0x173564dab75ba19b463030c03996325d30e7829fc226518b459919e6d64278946b02141888b_big_uint298, }}, {8, { 0x0u, @@ -490,43 +490,43 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { 0x0u, 0x1u, 0x1u, - 0x0722a67f49f9ecfe9f0874df295dcd87a484fabc9ed6fa56696cb563b4ded702bbe2984c787_cppui_modular298, - 0x3b1bf86dcd7b7526048b0705c8287a3b97ca771ba445718a3614352160278d229349a1b7d08_cppui_modular298, - 0x1e127023ee88eeab382e9d07a328168599c3a9e3c0fe99eadb31575515db872426d7356b1bb_cppui_modular298, + 0x0722a67f49f9ecfe9f0874df295dcd87a484fabc9ed6fa56696cb563b4ded702bbe2984c787_big_uint298, + 0x3b1bf86dcd7b7526048b0705c8287a3b97ca771ba445718a3614352160278d229349a1b7d08_big_uint298, + 0x1e127023ee88eeab382e9d07a328168599c3a9e3c0fe99eadb31575515db872426d7356b1bb_big_uint298, }}, //~-~-~-~ commiting to batch: 1~-~-~-~ {8, { - 0x39ef702ef59ff1816e4f51f2ae7fe2d78108c006d5f3039cd1a474ba8c48c16a62518f86863_cppui_modular298, - 0x17dadc1965bae6d9426ef1a2e6d3640ac4cd96089c55c7dc3800924668fcc450cbaa7de9f4c_cppui_modular298, - 0x1202bd2e4122c826d8ba7cd66346c0df0326468fd6e7989c8eebe3dedfcbd9b0ecdc1fb41c2_cppui_modular298, - 0x3b718dda0c9262c55640bd1e364df577ec246e46cb05109733008263282cc1a8959b4bf6fa7_cppui_modular298, - 0x27b08d175547d973e48f341c081c3851eee512d6e73200bfa47b1e049e1d268409ad2ce21c9_cppui_modular298, - 0x1872fd6e208095436bfcb92388e0d1c8509c3f8e89235d0430c61add0ab203ac30370518ce6_cppui_modular298, - 0x304c1332568ebbe7347b598eef6cb41f198a574c4ff7cd151337211efea753ec6fc7d61330b_cppui_modular298, - 0x1b41e76a1c5a4daa01029a0ec27b5f0b06ca7b480b600b8b573ae00feaab4ad9f1146a99459_cppui_modular298, + 0x39ef702ef59ff1816e4f51f2ae7fe2d78108c006d5f3039cd1a474ba8c48c16a62518f86863_big_uint298, + 0x17dadc1965bae6d9426ef1a2e6d3640ac4cd96089c55c7dc3800924668fcc450cbaa7de9f4c_big_uint298, + 0x1202bd2e4122c826d8ba7cd66346c0df0326468fd6e7989c8eebe3dedfcbd9b0ecdc1fb41c2_big_uint298, + 0x3b718dda0c9262c55640bd1e364df577ec246e46cb05109733008263282cc1a8959b4bf6fa7_big_uint298, + 0x27b08d175547d973e48f341c081c3851eee512d6e73200bfa47b1e049e1d268409ad2ce21c9_big_uint298, + 0x1872fd6e208095436bfcb92388e0d1c8509c3f8e89235d0430c61add0ab203ac30370518ce6_big_uint298, + 0x304c1332568ebbe7347b598eef6cb41f198a574c4ff7cd151337211efea753ec6fc7d61330b_big_uint298, + 0x1b41e76a1c5a4daa01029a0ec27b5f0b06ca7b480b600b8b573ae00feaab4ad9f1146a99459_big_uint298, }}, {8, { - 0x11cccdf2e5ccc50aa597c4194181c1fe652f508e4aafb2a0137f878c4b3b9d09511285954a1_cppui_modular298, - 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_cppui_modular298, - 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_cppui_modular298, - 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_cppui_modular298, - 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_cppui_modular298, - 0x011394bbd52cee496c395d41b68e0732c88572384d492e195f8f5b1c7a1c61f6ed67f94c950_cppui_modular298, - 0x194e4123c5669a48341b2f6b127f0a8b109818666a3d2229f23414de9c5d23d2d63c05309be_cppui_modular298, - 0x30641ec0f843aeb8202263821cac300d11b237ce42e2876763c8c16513494b993aaf5941f61_cppui_modular298, + 0x11cccdf2e5ccc50aa597c4194181c1fe652f508e4aafb2a0137f878c4b3b9d09511285954a1_big_uint298, + 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_big_uint298, + 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_big_uint298, + 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_big_uint298, + 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_big_uint298, + 0x011394bbd52cee496c395d41b68e0732c88572384d492e195f8f5b1c7a1c61f6ed67f94c950_big_uint298, + 0x194e4123c5669a48341b2f6b127f0a8b109818666a3d2229f23414de9c5d23d2d63c05309be_big_uint298, + 0x30641ec0f843aeb8202263821cac300d11b237ce42e2876763c8c16513494b993aaf5941f61_big_uint298, }}, {8, { - 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_cppui_modular298, - 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_cppui_modular298, - 0x0c3d778f1a6196ab1c2ba05597c7b275b23cb23faf7b128228ae23ad2aac20cc2bb1cc68ae9_cppui_modular298, - 0x1d871330c3db0fc34493247dc5f22570c08e3c4d3019e89ccadb340ddf48317d9dda6bf5cd9_cppui_modular298, - 0x114ac4e3bcbc6bf412878efb87080a493920fdbdb54535e797af6c6f15cacfa5a93c46626f0_cppui_modular298, - 0x0cfede4389503774cda3e57a7034cc1c54ad074f86f551b54a44118a30afd0fc06ad7393ee6_cppui_modular298, - 0x3b079297527c765d71f9db51a85f47c081d4047080ad9352f6a325410e1e8490ddc59988939_cppui_modular298, - 0x299eacd3439bb98b27f8cbaafb3983162a895d3de16cb29360ad4b12f5f114dee4f5a065b97_cppui_modular298, + 0x1e2f5a14babe0e0d4adcace1969a3c78807ea6da4ae1cca797a6bf88c3101397d8d2452a9dc_big_uint298, + 0x360a362e2078f4e68d4b9e847d6da083454c3ce2e7379483cfa751cf2c0cd7e8a47cc314928_big_uint298, + 0x0c3d778f1a6196ab1c2ba05597c7b275b23cb23faf7b128228ae23ad2aac20cc2bb1cc68ae9_big_uint298, + 0x1d871330c3db0fc34493247dc5f22570c08e3c4d3019e89ccadb340ddf48317d9dda6bf5cd9_big_uint298, + 0x114ac4e3bcbc6bf412878efb87080a493920fdbdb54535e797af6c6f15cacfa5a93c46626f0_big_uint298, + 0x0cfede4389503774cda3e57a7034cc1c54ad074f86f551b54a44118a30afd0fc06ad7393ee6_big_uint298, + 0x3b079297527c765d71f9db51a85f47c081d4047080ad9352f6a325410e1e8490ddc59988939_big_uint298, + 0x299eacd3439bb98b27f8cbaafb3983162a895d3de16cb29360ad4b12f5f114dee4f5a065b97_big_uint298, }}, {8, { - 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_cppui_modular298, + 0x126a1e24bba3895afe1e9d30005f807b7df2082352cd5c31f79e7e1faee22ae9ef6d091bb5c_big_uint298, 0x0u, 0x1u, 0x0u, 0x0u, 0x0u, 0x0u, 0x0u, }}, @@ -535,24 +535,24 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { //~-~-~-~ commiting to batch: 3~-~-~-~ {8, { - 0x2783a8a7c5cf7e94e4d1fdc4aa6eb807ea4eddbf81ea87939f040dc851e9212b9dca604ac9a_cppui_modular298, - 0x13230785fb96c79b65251354a51866632384c4dc7ceff4e48dc2fac8f09db1ce7367e20608b_cppui_modular298, - 0x2ccbbf5a905e4515c62fede907c2625d90bfda58027217f7e58155b67d5851fb4cf46f04364_cppui_modular298, - 0x17adaf6b5019e118bc7ac6213b0dc84cf1a9cada9cc620471384b7a191db27251337ec3d3b7_cppui_modular298, - 0x05b19c26a34901d91528679eeac2c7f311aa3f5f0fa669855b10522373949671df3f1e23c38_cppui_modular298, - 0x37421ad4e9cf2ccadc50246390593aa253e4ca3ba5767e931130a2f905a49443e0e02fc0ce8_cppui_modular298, - 0x2a2814a40ce271f86b0369793c4c79d31686212ad02a382f6288ef94cabe1e2cff80ce74bd5_cppui_modular298, - 0x383fcb086d115688ba77b1449bd46480f3bd7cbb070242833338005e60dcaa9ba238c801961_cppui_modular298, + 0x2783a8a7c5cf7e94e4d1fdc4aa6eb807ea4eddbf81ea87939f040dc851e9212b9dca604ac9a_big_uint298, + 0x13230785fb96c79b65251354a51866632384c4dc7ceff4e48dc2fac8f09db1ce7367e20608b_big_uint298, + 0x2ccbbf5a905e4515c62fede907c2625d90bfda58027217f7e58155b67d5851fb4cf46f04364_big_uint298, + 0x17adaf6b5019e118bc7ac6213b0dc84cf1a9cada9cc620471384b7a191db27251337ec3d3b7_big_uint298, + 0x05b19c26a34901d91528679eeac2c7f311aa3f5f0fa669855b10522373949671df3f1e23c38_big_uint298, + 0x37421ad4e9cf2ccadc50246390593aa253e4ca3ba5767e931130a2f905a49443e0e02fc0ce8_big_uint298, + 0x2a2814a40ce271f86b0369793c4c79d31686212ad02a382f6288ef94cabe1e2cff80ce74bd5_big_uint298, + 0x383fcb086d115688ba77b1449bd46480f3bd7cbb070242833338005e60dcaa9ba238c801961_big_uint298, }}, {8, { - 0x0710f09328ac0442d2d93a61f4eda9b265a27ea0570484e3a1cf1aaa249974ea1a99377a11c_cppui_modular298, - 0x2bb0eec490c8ac0bbe164c6ee7072a8989e33a7006d8f222b1476b15c2ef0386b49b7d6bc28_cppui_modular298, - 0x3552ef5f48bc3702e4e9f8fc7b236de25d1a78e256d8417ff106bbc75b7cbfc36c8977b2896_cppui_modular298, - 0x3871e84395a7af9c0fdd19321af6b742815a982bb5f59bcf7be6793caa98f4a919032d2969d_cppui_modular298, - 0x153bd600c1074537112d1df7afd22932c713cc84c08d3c197cbdd9d84b675ab9c62e78d36a0_cppui_modular298, - 0x12d86d35994854ef3606ae63e5114209bec8dbb0d3ebb1bb9a786fd27ced58870d3779d3d7a_cppui_modular298, - 0x2e0895904268862017c64e0a495813bf84b1d2137a53102097557bd90c2aac21c0802fc1787_cppui_modular298, - 0x0742ee092a59ae6b7169ac51e7339c52adc1dc74471e0d207a3d29dd37d60ea9bc9438e5c15_cppui_modular298, + 0x0710f09328ac0442d2d93a61f4eda9b265a27ea0570484e3a1cf1aaa249974ea1a99377a11c_big_uint298, + 0x2bb0eec490c8ac0bbe164c6ee7072a8989e33a7006d8f222b1476b15c2ef0386b49b7d6bc28_big_uint298, + 0x3552ef5f48bc3702e4e9f8fc7b236de25d1a78e256d8417ff106bbc75b7cbfc36c8977b2896_big_uint298, + 0x3871e84395a7af9c0fdd19321af6b742815a982bb5f59bcf7be6793caa98f4a919032d2969d_big_uint298, + 0x153bd600c1074537112d1df7afd22932c713cc84c08d3c197cbdd9d84b675ab9c62e78d36a0_big_uint298, + 0x12d86d35994854ef3606ae63e5114209bec8dbb0d3ebb1bb9a786fd27ced58870d3779d3d7a_big_uint298, + 0x2e0895904268862017c64e0a495813bf84b1d2137a53102097557bd90c2aac21c0802fc1787_big_uint298, + 0x0742ee092a59ae6b7169ac51e7339c52adc1dc74471e0d207a3d29dd37d60ea9bc9438e5c15_big_uint298, }}, math::polynomial_dfs::zero(), math::polynomial_dfs::zero(), @@ -569,48 +569,48 @@ BOOST_AUTO_TEST_CASE(batched_kzg_placeholder_repr) { // auto params = typename kzg_type::params_type(8, 8, alpha); auto params = create_kzg_params(3 /*degree_log*/); auto commits = zk::algorithms::commit(params, polys); - using endianness = nil::marshalling::option::big_endian; + using endianness = nil::crypto3::marshalling::option::big_endian; for (auto &c: commits) { - nil::marshalling::status_type status; + nil::crypto3::marshalling::status_type status; std::vector single_commitment_bytes = - nil::marshalling::pack(c, status); + nil::crypto3::marshalling::pack(c, status); dump_vector(single_commitment_bytes, "commitment"); } std::vector> S = { - /* points_k_i:0,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,6: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,7: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,8: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298,}, - /* points_k_i:0,9: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298,}, - /* points_k_i:0,10:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:0,11:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:1,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:2,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298,}, - /* points_k_i:3,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, - /* points_k_i:3,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298,}, + /* points_k_i:0,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,6: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,7: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,8: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298,}, + /* points_k_i:0,9: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298,}, + /* points_k_i:0,10:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:0,11:*/ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:1,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:2,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298,}, + /* points_k_i:3,0: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,1: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,2: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,3: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,4: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, + /* points_k_i:3,5: */ {0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298,}, }; std::vector T = zk::algorithms::merge_eval_points(S); { std::vector T_check = { - 0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_cppui_modular298, - 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_cppui_modular298, + 0x3a3eeb9eda157d043c7a56f0bb263b4d1bc21dc74cfb1b5e9a80f65a461c3916_big_uint298, + 0x3afff0e9becdc8be161a77a403b466aa7d696ebe365418763ba1157a5aa27fd000e04d44b99_big_uint298, }; std::sort(T.begin(), T.end()); BOOST_CHECK(T == T_check); diff --git a/parallel-crypto3/libs/parallel-zk/test/commitment/pedersen.cpp b/parallel-crypto3/libs/parallel-zk/test/commitment/pedersen.cpp deleted file mode 100644 index c7de3d9a8b..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/commitment/pedersen.cpp +++ /dev/null @@ -1,165 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2021 Nikita Kaskov -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE pedersen_test - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(pedersen_test_suite) - -BOOST_AUTO_TEST_CASE(pedersen_basic_test) { - - // setup - using curve_type = algebra::curves::bls12<381>; - using curve_group_type = curve_type::template g1_type<>; - using field_type = typename curve_type::scalar_field_type; - - constexpr static const int n = 50; - constexpr static const int k = 26; - curve_group_type::value_type g = algebra::random_element(); - curve_group_type::value_type h = algebra::random_element(); - while (g == h) { - h = algebra::random_element(); - } - - typedef typename zk::commitments::pedersen pedersen_type; - - typedef typename pedersen_type::proof_type proof_type; - typedef typename pedersen_type::params_type params_type; - - params_type params; - - params.n = n; - params.k = k; - params.g = g; - params.h = h; - - BOOST_CHECK(g != h); - BOOST_CHECK(n >= k); - BOOST_CHECK(k > 0); - - // commit - constexpr static const field_type::value_type w = field_type::value_type(37684); - - // eval - proof_type proof = pedersen_type::proof_eval(params, w); - - // verify - BOOST_CHECK(pedersen_type::verify_eval(params, proof)); - - std::vector idx; - std::vector idx_base; - for (int i = 1; i <= n; ++i) { - idx_base.push_back(i); - } - std::random_device rd; - std::mt19937 gen(rd()); - std::shuffle(idx_base.begin(), idx_base.end(), gen); - for (int i = 0; i < k; ++i) { - idx.push_back(idx_base[i]); - } - - BOOST_CHECK(idx.size() >= k); - field_type::value_type secret = pedersen_type::message_eval(params, proof, idx); - BOOST_CHECK(w == secret); -} - -BOOST_AUTO_TEST_CASE(pedersen_short_test) { - - // setup - using curve_type = algebra::curves::bls12<381>; - using curve_group_type = curve_type::template g1_type<>; - using field_type = typename curve_type::scalar_field_type; - - constexpr static const int n = 2; - constexpr static const int k = 1; - static curve_group_type::value_type g = algebra::random_element(); - static curve_group_type::value_type h = algebra::random_element(); - while (g == h) { - h = algebra::random_element(); - } - - typedef typename zk::commitments::pedersen pedersen_type; - - typedef typename pedersen_type::proof_type proof_type; - typedef typename pedersen_type::params_type params_type; - - params_type params; - - params.n = n; - params.k = k; - params.g = g; - params.h = h; - - BOOST_CHECK(g != h); - BOOST_CHECK(n >= k); - BOOST_CHECK(k > 0); - - // commit - constexpr static const field_type::value_type w = field_type::value_type(3); - - // eval - proof_type proof = pedersen_type::proof_eval(params, w); - - // verify - BOOST_CHECK(pedersen_type::verify_eval(params, proof)); - - std::vector idx; - std::vector idx_base; - for (int i = 1; i <= n; ++i) { - idx_base.push_back(i); - } - std::random_device rd; - std::mt19937 gen(rd()); - std::shuffle(idx_base.begin(), idx_base.end(), gen); - for (int i = 0; i < k; ++i) { - idx.push_back(idx_base[i]); - } - - BOOST_CHECK(idx.size() >= k); - field_type::value_type secret = pedersen_type::message_eval(params, proof, idx); - BOOST_CHECK(w == secret); -} - -BOOST_AUTO_TEST_SUITE_END() diff --git a/parallel-crypto3/libs/parallel-zk/test/commitment/powers_of_tau.cpp b/parallel-crypto3/libs/parallel-zk/test/commitment/powers_of_tau.cpp deleted file mode 100644 index ec820748da..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/commitment/powers_of_tau.cpp +++ /dev/null @@ -1,189 +0,0 @@ -#define BOOST_TEST_MODULE powers_of_tau_test - -#include - -#include -#include -#include -#include -#include - -#include - -using namespace nil::crypto3::algebra; -using namespace nil::crypto3::zk::commitments; - -BOOST_AUTO_TEST_SUITE(powers_of_tau_test_suite) - - BOOST_AUTO_TEST_CASE(powers_of_tau_result_basic_test) { - using curve_type = curves::bls12<381>; - using g1_value_type = curve_type::g1_type<>::value_type; - using g2_value_type = curve_type::g2_type<>::value_type; - using scalar_field_type = curve_type::scalar_field_type; - - constexpr const unsigned tau_powers = 1 << 5; - - using scheme_type = powers_of_tau; - - auto acc1 = scheme_type::accumulator_type(); - auto acc2 = acc1; - auto sk = scheme_type::generate_private_key(); - auto pk = scheme_type::proof_eval(sk, acc1); - acc2.transform(sk); - - BOOST_CHECK(scheme_type::verify_eval(pk, acc1, acc2)); - auto result = scheme_type::result_type::from_accumulator(acc2, tau_powers); - - auto g1_generator = g1_value_type::one(); - auto g2_generator = g2_value_type::one(); - - BOOST_CHECK(result.alpha_g1 == g1_generator * sk.alpha); - BOOST_CHECK(result.beta_g1 == g1_generator * sk.beta); - BOOST_CHECK(result.beta_g2 == g2_generator * sk.beta); - - BOOST_CHECK_EQUAL(result.coeffs_g1.size(), tau_powers); - BOOST_CHECK_EQUAL(result.coeffs_g2.size(), tau_powers); - BOOST_CHECK_EQUAL(result.alpha_coeffs_g1.size(), tau_powers); - BOOST_CHECK_EQUAL(result.beta_coeffs_g1.size(), tau_powers); - - auto domain = nil::crypto3::math::make_evaluation_domain(tau_powers); - auto u = domain->evaluate_all_lagrange_polynomials(sk.tau); - - for (std::size_t i = 0; i < domain->m; ++i) { - BOOST_CHECK_MESSAGE(result.coeffs_g1[i] == g1_generator * u[i], std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result.coeffs_g2[i] == g2_generator * u[i], std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result.alpha_coeffs_g1[i] == g1_generator * (sk.alpha * u[i]), - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result.beta_coeffs_g1[i] == g1_generator * (sk.beta * u[i]), - std::string("i=") + std::to_string(i)); - } - - BOOST_CHECK_EQUAL(result.h.size(), domain->m - 1); - auto Zt = domain->compute_vanishing_polynomial(sk.tau); - for (std::size_t i = 0; i < domain->m - 1; ++i) { - BOOST_CHECK_MESSAGE(result.h[i] == g1_generator * (sk.tau.pow(i) * Zt), - std::string("i=") + std::to_string(i)); - } - - auto result_16 = scheme_type::result_type::from_accumulator(acc2, 16); - auto domain_16 = nil::crypto3::math::make_evaluation_domain(16); - auto u_16 = domain_16->evaluate_all_lagrange_polynomials(sk.tau); - - BOOST_CHECK_EQUAL(u_16.size(), 16); - - BOOST_CHECK(result_16.alpha_g1 == g1_generator * sk.alpha); - BOOST_CHECK(result_16.beta_g1 == g1_generator * sk.beta); - BOOST_CHECK(result_16.beta_g2 == g2_generator * sk.beta); - - BOOST_CHECK_EQUAL(result_16.coeffs_g1.size(), 16); - BOOST_CHECK_EQUAL(result_16.coeffs_g2.size(), 16); - BOOST_CHECK_EQUAL(result_16.alpha_coeffs_g1.size(), 16); - BOOST_CHECK_EQUAL(result_16.beta_coeffs_g1.size(), 16); - - for (std::size_t i = 0; i < domain_16->m; ++i) { - BOOST_CHECK_MESSAGE(result_16.coeffs_g1[i] == g1_generator * u_16[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_16.coeffs_g2[i] == g2_generator * u_16[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_16.alpha_coeffs_g1[i] == g1_generator * (sk.alpha * u_16[i]), - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_16.beta_coeffs_g1[i] == g1_generator * (sk.beta * u_16[i]), - std::string("i=") + std::to_string(i)); - } - - BOOST_CHECK_EQUAL(result_16.h.size(), domain_16->m - 1); - auto Zt_16 = domain_16->compute_vanishing_polynomial(sk.tau); - for (std::size_t i = 0; i < domain_16->m - 1; ++i) { - BOOST_CHECK_MESSAGE(result_16.h[i] == g1_generator * (sk.tau.pow(i) * Zt_16), - std::string("i=") + std::to_string(i)); - } - - auto result_24 = scheme_type::result_type::from_accumulator(acc2, 24); - auto domain_24 = nil::crypto3::math::make_evaluation_domain(24); - auto u_24 = domain_24->evaluate_all_lagrange_polynomials(sk.tau); - - BOOST_CHECK_EQUAL(u_24.size(), 24); - - BOOST_CHECK(result_24.alpha_g1 == g1_generator * sk.alpha); - BOOST_CHECK(result_24.beta_g1 == g1_generator * sk.beta); - BOOST_CHECK(result_24.beta_g2 == g2_generator * sk.beta); - - BOOST_CHECK_EQUAL(result_24.coeffs_g1.size(), 24); - BOOST_CHECK_EQUAL(result_24.coeffs_g2.size(), 24); - BOOST_CHECK_EQUAL(result_24.alpha_coeffs_g1.size(), 24); - BOOST_CHECK_EQUAL(result_24.beta_coeffs_g1.size(), 24); - - for (std::size_t i = 0; i < domain_24->m; ++i) { - BOOST_CHECK_MESSAGE(result_24.coeffs_g1[i] == g1_generator * u_24[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_24.coeffs_g2[i] == g2_generator * u_24[i], - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_24.alpha_coeffs_g1[i] == g1_generator * (sk.alpha * u_24[i]), - std::string("i=") + std::to_string(i)); - BOOST_CHECK_MESSAGE(result_24.beta_coeffs_g1[i] == g1_generator * (sk.beta * u_24[i]), - std::string("i=") + std::to_string(i)); - } - - BOOST_CHECK_EQUAL(result_24.h.size(), domain_24->m - 1); - auto Zt_24 = domain_24->compute_vanishing_polynomial(sk.tau); - for (std::size_t i = 0; i < domain_24->m - 1; ++i) { - BOOST_CHECK_MESSAGE(result_24.h[i] == g1_generator * (sk.tau.pow(i) * Zt_24), - std::string("i=") + std::to_string(i)); - } - } - - BOOST_AUTO_TEST_CASE(powers_of_tau_basic_test) { - using curve_type = curves::bls12<381>; - using scheme_type = powers_of_tau; - auto acc1 = scheme_type::accumulator_type(); - auto acc2 = acc1; - auto sk = scheme_type::generate_private_key(); - auto pubkey = scheme_type::proof_eval(sk, acc2); - acc2.transform(sk); - - BOOST_CHECK(acc1.tau_powers_g1[0] == acc2.tau_powers_g1[0]); - BOOST_CHECK(scheme_type::verify_eval(pubkey, acc1, acc2)); - auto acc3 = acc2; - std::vector beacon{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; - auto rng = scheme_type::rng_from_beacon(beacon); - auto beacon_sk = scheme_type::generate_private_key(rng); - auto beacon_pubkey = scheme_type::proof_eval(beacon_sk, acc2, rng); - acc3.transform(beacon_sk); - BOOST_CHECK(scheme_type::verify_eval(beacon_pubkey, acc2, acc3)); - - // Check reproducibility - auto rng_reproduced = scheme_type::rng_from_beacon(beacon); - auto beacon_sk_reproduced = scheme_type::generate_private_key(rng_reproduced); - BOOST_CHECK(beacon_sk.tau == beacon_sk_reproduced.tau); - BOOST_CHECK(beacon_sk.alpha == beacon_sk_reproduced.alpha); - BOOST_CHECK(beacon_sk.beta == beacon_sk_reproduced.beta); - auto beacon_pubkey_reproduced = scheme_type::proof_eval(beacon_sk_reproduced, acc2, rng_reproduced); - BOOST_CHECK(scheme_type::verify_eval(beacon_pubkey_reproduced, acc2, acc3)); - - auto result = scheme_type::result_type::from_accumulator(acc3, 32); - } - - BOOST_AUTO_TEST_CASE(keypair_generation_basic_test) { - using curve_type = curves::bls12<381>; - using scheme_type = powers_of_tau; - auto sk = scheme_type::generate_private_key(); - auto acc = scheme_type::accumulator_type(); - - std::vector transcript = scheme_type::compute_transcript(acc); - - auto pubkey = scheme_type::proof_eval(sk, acc); - auto tau_gs2 = scheme_type::proof_of_knowledge_scheme_type::compute_g2_s(pubkey.tau_pok.g1_s, - pubkey.tau_pok.g1_s_x, - transcript, 0); - BOOST_CHECK(scheme_type::proof_of_knowledge_scheme_type::verify_eval(pubkey.tau_pok, tau_gs2)); - auto alpha_gs2 = scheme_type::proof_of_knowledge_scheme_type::compute_g2_s(pubkey.alpha_pok.g1_s, - pubkey.alpha_pok.g1_s_x, transcript, - 1); - BOOST_CHECK(scheme_type::proof_of_knowledge_scheme_type::verify_eval(pubkey.alpha_pok, alpha_gs2)); - auto beta_gs2 = scheme_type::proof_of_knowledge_scheme_type::compute_g2_s(pubkey.beta_pok.g1_s, - pubkey.beta_pok.g1_s_x, transcript, - 2); - BOOST_CHECK(scheme_type::proof_of_knowledge_scheme_type::verify_eval(pubkey.beta_pok, beta_gs2)); - } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/parallel-crypto3/libs/parallel-zk/test/commitment/type_traits.cpp b/parallel-crypto3/libs/parallel-zk/test/commitment/type_traits.cpp index f4f855d28f..7f39e91ecb 100644 --- a/parallel-crypto3/libs/parallel-zk/test/commitment/type_traits.cpp +++ b/parallel-crypto3/libs/parallel-zk/test/commitment/type_traits.cpp @@ -36,8 +36,6 @@ // #include #include #include -#include -#include #include using namespace nil::crypto3; @@ -65,8 +63,6 @@ BOOST_AUTO_TEST_SUITE(commitments_type_traits_test_suite) zk::is_commitment>>::value); - static_assert(zk::is_commitment>::value); - static_assert(zk::is_commitment>::value); } BOOST_AUTO_TEST_SUITE_END() diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/data/kimchi.json b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/data/kimchi.json deleted file mode 100644 index ba7ad2e1fe..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/data/kimchi.json +++ /dev/null @@ -1,1881 +0,0 @@ -{ - "data": { - "blockchainVerificationKey": { - "commitments": { - "sigma_comm": [ - [ - "0x192D396B597D0294BCD4A28BC7C01C551D6F35A37AB6507365CA9EE3B9D2DE37", - "0x03466F8DBED862098978D2A7BFE38761ADC9F5E45459ED7DC69CA76F812969ED" - ], - [ - "0x1B001FA76ECEF8FA39AAE95147509CBBBC4BF37A76C2DF852D05F3ED63C1E639", - "0x2F5C9AC5660E9130C60EAE6F313A9D140A46B171ABCCD0173842F4EA99F7B744" - ], - [ - "0x0563EDBFA3FCBFF99D0547883D39EE6F645FC620205FD3A6E1A105D416C96E9F", - "0x2BF2A103A2044212566389F99D42B0A9EF5FA09A2F3836265640107D6326FB83" - ], - [ - "0x074BC5F304082A841FE1AB311290D46FC562752DE748A57C72DC2589D970BF64", - "0x3393266B3A21C30599F5DF0F56106A10E99847815363C199565638EBE39E04E8" - ], - [ - "0x16F6ACFAF11F29504FC09422BAE854011DC0286689138683F15390367E3CDB62", - "0x349A43F9A316BE61142DA21A3462CC7FF1D6FA1758ED1DDDF85878575D015E23" - ], - [ - "0x056A3D042E5A6249E32E4D1A8D9395131ED22DE948C182D655B20CC90EFE2C5E", - "0x2C2BCFC38FF10364E4B442E4A93C083C01AD14F97835C44934E1AFD3042DF43B" - ], - [ - "0x3DB218B4DAB44E39AA4E8C3E125224FFD9ADB1B40107819636B66C2578C8041B", - "0x3E04C0B76A12356684100069E5CB53209DB0A7FAE0560B8BBBEA2C96B39AF3C6" - ] - ], - "coefficients_comm": [ - [ - "0x0BF4FEF9BED514A9CC69739721844710010296928E13F3E36E733494B137687C", - "0x3113D4DB76F32B33F62FA37EB5847BA099E909E4146D8606C43BD1AF589B551B" - ], - [ - "0x0BCD2C5799A6A6DF3927F02ED4FD3C161EE04159D28570144AF5736B5A5F3308", - "0x1CBE7C3DC041BF2942D9381301B8713A69733AA5B58DC72E886FD25EF32AC1E3" - ], - [ - "0x3B819D2FD4579B3D39A7FFA3A1619A1845880A49C73AFA710FB6A751FA23CA56", - "0x0344A4E56293A1493B97D04B2DEB7F9C8DAA5587AAE9701EA67BB00821DC12EB" - ], - [ - "0x3BB107D50D9FA05F420A25D6AD69ED0FA131DDBB221DF4B14E4721D0A06A87D6", - "0x366545BAE8BBB59EAFB69D4C26DE9345A6219D3126AB2552DEE07501F1333816" - ], - [ - "0x302B342E65A7E7E20EE4085ACFCCBC50357E079DF7A12EC59E8ACB6862E6198F", - "0x1C744DADA8B87F0463C92690791EA016DB55BE811AE4CB735B06DF283FDCA7DA" - ], - [ - "0x178A9AEF2B516D1C6421C43BA3BCF27741BD48BEB13AB9D1F6D46EF13815D691", - "0x388811D263E7B0B224CCAC339C765BCC8A305957539EC2DF709CAD4D14FBBF1F" - ], - [ - "0x08D33491A720B05D123071C0FE00E1D827665093455D2718B7242E4C86E3625F", - "0x17446D639850C5ACF04F4FE62B937D252A69AB1321E4BE6B5DD9AF3B4B93A246" - ], - [ - "0x2C7D3C18E43153ADBFD2751567F4366942F2B0298EC23A85F9F1CE0994A6C6D5", - "0x09DA492ABC988EF131403131558812D9F065DB89E80006A8FCA9E33B063346BA" - ], - [ - "0x0CAB35062F352127989AB66DB97BA39C096AE9C92B8995F06696ACBE6E0548FD", - "0x1633046553AA7A6CB8EE3738ACCF70E6C81AFF48B425E9C7CC217DF60CFC506A" - ], - [ - "0x0089DDFFA3E80E672A1F84466C7D46D80807D3DFA84A1836D69865C67CEB3117", - "0x0D5F2A96AF00ECB32215750F09AA365DD0ACFFE4BD49DFB8406474B89F944859" - ], - [ - "0x1F2E852084EBEEB9042ED1331C7B39575E513C82CC58EA803F6415679CBD70DF", - "0x15588896C19676339E83AC4FEDE0E0104BC65E7F9DB8B65E5E0DEE4FB8848245" - ], - [ - "0x2D5B8F9298F15A53B0FC0C69425AF54EE6B75D73DB74E91784FB6CD1D8974E24", - "0x1D6D10238DBA4CF7053E2AE62D5022730F779A210484BAED7F056B5CC74D0A73" - ], - [ - "0x22380AAFEAD59242707E68A07F2BD791D5017A8D366789F343E60202EE662DAC", - "0x10D9849FC21A047173D04A68A7D2AF5FDF38D0AD965168404EDCA52D9B0ADDF1" - ], - [ - "0x363C95880E88C0B3174B4BD5A4155B2D1EAA3568E359C2F7DB154C51A51699EF", - "0x3C797B4D603F9ABD55DB3A89A6C09EF3DEBE0418D547BA3CB086DEFAF36F4F6A" - ], - [ - "0x287F83295AC051430F8B98131287CA01B649BB2158AA9127B581B973CDAF843B", - "0x0E8B652728EB5243D4423B0D67B0348CE14CCACB7DBA26246C88AFF04E0E4AC7" - ] - ], - "generic_comm": [ - "0x3379D79A1B7AAAD8C51F2B280CFB5CF67DCAADFF10D6D6629261600457CD1081", - "0x1E376E183CC3ACC3321E21783862EF11BC5335FD637FF03E64DF3745BD7F414B" - ], - "psm_comm": [ - "0x154655473AE423EFEFE8365967CD828DCC6BF805C39D38A4D0D82408A8C4FBEB", - "0x24FA5631B10331B67D724E02D19C5683DCAC554520CDA95E3CF3BA80613BE81C" - ], - "complete_add_comm": [ - "0x376A63D3910722000DE7495A36D9CA2711CC671EC4EDFE53A3A9911D36DCFE86", - "0x250628BF15B68D132074980A763A58AC81A14804FFEA2E5EE361AAFCD85BC2DF" - ], - "mul_comm": [ - "0x03EDDD7D101300A9E77AE979361BB76F3C9D61EEDEAC8E31CD41D433EFD5B7B3", - "0x156C9CD9EA83B63523986BA087F2960A5B4CAC7EF87DB24EA0D24878ADCB0C02" - ], - "emul_comm": [ - "0x3471E13925ED115DA3E47C72E5098505286D48F607C47090A05C195DC2E7F551", - "0x20F4E20F803A30EF6A712F314D569746BDB6902A48F56C3059273768E013E786" - ], - "endomul_scalar_comm": [ - "0x3A6022EA6DD5F3FE7FB67F757E881B8A7714F503FF3AEF67ACE99BA4AC28A56C", - "0x12064360D585953756A05A0D9F96007DA9316540A8E4162AF5AF3FFDBCE816A4" - ] - }, - "step_domains": [ - { - "h": [ - "Pow_2_roots_of_unity", - 16 - ], - "x": [ - "Pow_2_roots_of_unity", - 7 - ] - } - ], - "index": { - "domain": { - "log_size_of_group": 15, - "group_gen": "0x130D1D6482B9C33536E280AE674431F85F4A103EF6AF12C7AC4CDF0AD3EDB265" - }, - "max_poly_size": 32768, - "max_quot_size": 163835, - "srs": null, - "evals": { - "sigma_comm": [ - { - "unshifted": [ - [ - "Finite", - [ - "0x192D396B597D0294BCD4A28BC7C01C551D6F35A37AB6507365CA9EE3B9D2DE37", - "0x03466F8DBED862098978D2A7BFE38761ADC9F5E45459ED7DC69CA76F812969ED" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x1B001FA76ECEF8FA39AAE95147509CBBBC4BF37A76C2DF852D05F3ED63C1E639", - "0x2F5C9AC5660E9130C60EAE6F313A9D140A46B171ABCCD0173842F4EA99F7B744" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x0563EDBFA3FCBFF99D0547883D39EE6F645FC620205FD3A6E1A105D416C96E9F", - "0x2BF2A103A2044212566389F99D42B0A9EF5FA09A2F3836265640107D6326FB83" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x074BC5F304082A841FE1AB311290D46FC562752DE748A57C72DC2589D970BF64", - "0x3393266B3A21C30599F5DF0F56106A10E99847815363C199565638EBE39E04E8" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x16F6ACFAF11F29504FC09422BAE854011DC0286689138683F15390367E3CDB62", - "0x349A43F9A316BE61142DA21A3462CC7FF1D6FA1758ED1DDDF85878575D015E23" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x056A3D042E5A6249E32E4D1A8D9395131ED22DE948C182D655B20CC90EFE2C5E", - "0x2C2BCFC38FF10364E4B442E4A93C083C01AD14F97835C44934E1AFD3042DF43B" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x3DB218B4DAB44E39AA4E8C3E125224FFD9ADB1B40107819636B66C2578C8041B", - "0x3E04C0B76A12356684100069E5CB53209DB0A7FAE0560B8BBBEA2C96B39AF3C6" - ] - ] - ], - "shifted": null - } - ], - "coefficients_comm": [ - { - "unshifted": [ - [ - "Finite", - [ - "0x0BF4FEF9BED514A9CC69739721844710010296928E13F3E36E733494B137687C", - "0x3113D4DB76F32B33F62FA37EB5847BA099E909E4146D8606C43BD1AF589B551B" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x0BCD2C5799A6A6DF3927F02ED4FD3C161EE04159D28570144AF5736B5A5F3308", - "0x1CBE7C3DC041BF2942D9381301B8713A69733AA5B58DC72E886FD25EF32AC1E3" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x3B819D2FD4579B3D39A7FFA3A1619A1845880A49C73AFA710FB6A751FA23CA56", - "0x0344A4E56293A1493B97D04B2DEB7F9C8DAA5587AAE9701EA67BB00821DC12EB" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x3BB107D50D9FA05F420A25D6AD69ED0FA131DDBB221DF4B14E4721D0A06A87D6", - "0x366545BAE8BBB59EAFB69D4C26DE9345A6219D3126AB2552DEE07501F1333816" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x302B342E65A7E7E20EE4085ACFCCBC50357E079DF7A12EC59E8ACB6862E6198F", - "0x1C744DADA8B87F0463C92690791EA016DB55BE811AE4CB735B06DF283FDCA7DA" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x178A9AEF2B516D1C6421C43BA3BCF27741BD48BEB13AB9D1F6D46EF13815D691", - "0x388811D263E7B0B224CCAC339C765BCC8A305957539EC2DF709CAD4D14FBBF1F" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x08D33491A720B05D123071C0FE00E1D827665093455D2718B7242E4C86E3625F", - "0x17446D639850C5ACF04F4FE62B937D252A69AB1321E4BE6B5DD9AF3B4B93A246" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x2C7D3C18E43153ADBFD2751567F4366942F2B0298EC23A85F9F1CE0994A6C6D5", - "0x09DA492ABC988EF131403131558812D9F065DB89E80006A8FCA9E33B063346BA" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x0CAB35062F352127989AB66DB97BA39C096AE9C92B8995F06696ACBE6E0548FD", - "0x1633046553AA7A6CB8EE3738ACCF70E6C81AFF48B425E9C7CC217DF60CFC506A" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x0089DDFFA3E80E672A1F84466C7D46D80807D3DFA84A1836D69865C67CEB3117", - "0x0D5F2A96AF00ECB32215750F09AA365DD0ACFFE4BD49DFB8406474B89F944859" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x1F2E852084EBEEB9042ED1331C7B39575E513C82CC58EA803F6415679CBD70DF", - "0x15588896C19676339E83AC4FEDE0E0104BC65E7F9DB8B65E5E0DEE4FB8848245" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x2D5B8F9298F15A53B0FC0C69425AF54EE6B75D73DB74E91784FB6CD1D8974E24", - "0x1D6D10238DBA4CF7053E2AE62D5022730F779A210484BAED7F056B5CC74D0A73" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x22380AAFEAD59242707E68A07F2BD791D5017A8D366789F343E60202EE662DAC", - "0x10D9849FC21A047173D04A68A7D2AF5FDF38D0AD965168404EDCA52D9B0ADDF1" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x363C95880E88C0B3174B4BD5A4155B2D1EAA3568E359C2F7DB154C51A51699EF", - "0x3C797B4D603F9ABD55DB3A89A6C09EF3DEBE0418D547BA3CB086DEFAF36F4F6A" - ] - ] - ], - "shifted": null - }, - { - "unshifted": [ - [ - "Finite", - [ - "0x287F83295AC051430F8B98131287CA01B649BB2158AA9127B581B973CDAF843B", - "0x0E8B652728EB5243D4423B0D67B0348CE14CCACB7DBA26246C88AFF04E0E4AC7" - ] - ] - ], - "shifted": null - } - ], - "generic_comm": { - "unshifted": [ - [ - "Finite", - [ - "0x3379D79A1B7AAAD8C51F2B280CFB5CF67DCAADFF10D6D6629261600457CD1081", - "0x1E376E183CC3ACC3321E21783862EF11BC5335FD637FF03E64DF3745BD7F414B" - ] - ] - ], - "shifted": null - }, - "psm_comm": { - "unshifted": [ - [ - "Finite", - [ - "0x154655473AE423EFEFE8365967CD828DCC6BF805C39D38A4D0D82408A8C4FBEB", - "0x24FA5631B10331B67D724E02D19C5683DCAC554520CDA95E3CF3BA80613BE81C" - ] - ] - ], - "shifted": null - }, - "complete_add_comm": { - "unshifted": [ - [ - "Finite", - [ - "0x376A63D3910722000DE7495A36D9CA2711CC671EC4EDFE53A3A9911D36DCFE86", - "0x250628BF15B68D132074980A763A58AC81A14804FFEA2E5EE361AAFCD85BC2DF" - ] - ] - ], - "shifted": null - }, - "mul_comm": { - "unshifted": [ - [ - "Finite", - [ - "0x03EDDD7D101300A9E77AE979361BB76F3C9D61EEDEAC8E31CD41D433EFD5B7B3", - "0x156C9CD9EA83B63523986BA087F2960A5B4CAC7EF87DB24EA0D24878ADCB0C02" - ] - ] - ], - "shifted": null - }, - "emul_comm": { - "unshifted": [ - [ - "Finite", - [ - "0x3471E13925ED115DA3E47C72E5098505286D48F607C47090A05C195DC2E7F551", - "0x20F4E20F803A30EF6A712F314D569746BDB6902A48F56C3059273768E013E786" - ] - ] - ], - "shifted": null - }, - "endomul_scalar_comm": { - "unshifted": [ - [ - "Finite", - [ - "0x3A6022EA6DD5F3FE7FB67F757E881B8A7714F503FF3AEF67ACE99BA4AC28A56C", - "0x12064360D585953756A05A0D9F96007DA9316540A8E4162AF5AF3FFDBCE816A4" - ] - ] - ], - "shifted": null - }, - "chacha_comm": null - }, - "shifts": [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00B9CDC8FD0BD4B27E2A74AF7AEBD5734D52D75BDF85EBF1CAD03413E914A2E3", - "0x007CF68160D84012626E0046A932AD12E68B3394D6E2A001A537FFB40D3527C6", - "0x0077D45AECB939AE97A3952B48189964AA209609F19BE4A4B89F339A33440F6D", - "0x0077C7E54505D4771F6AF1FED2195500481EF1F3C0397B0AC819E678BD2309B4", - "0x00B3AF68ECC6AE7A4727F0708EDF4736BE1C99281FA380846E42264C62407484", - "0x00381CA4536FC0ED935D50A74A87136F1A0675B618898DBCE67E564AB20174A1" - ], - "lookup_index": null - }, - "data": { - "constraints": 32768 - } - }, - "bestChain": [ - { - "protocolStateProof": { - "json": { - "statement": { - "proof_state": { - "deferred_values": { - "plonk": { - "alpha": { - "inner": [ - "9192024484525083167", - "-4963136190301137182" - ] - }, - "beta": [ - "-7929665414381040507", - "1719237271978815084" - ], - "gamma": [ - "1001205686121988240", - "-7284155415683934844" - ], - "zeta": { - "inner": [ - "2817071553570389696", - "-191527847712366068" - ] - } - }, - "combined_inner_product": [ - "Shifted_value", - "0x012019FB56ADC3966890458D12F76F573E9785049C223F02E2564655CEF7099D" - ], - "b": [ - "Shifted_value", - "0x3FF128DA838F538242B43EB90646FA1063C070FEDAE027144D6FF1B279DB0BAD" - ], - "xi": { - "inner": [ - "122010634534187989", - "8605016107782220044" - ] - }, - "bulletproof_challenges": [ - { - "prechallenge": { - "inner": [ - "-5948286762976073031", - "3913620533516803836" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6451156200849374208", - "-7149474906925249401" - ] - } - }, - { - "prechallenge": { - "inner": [ - "2545802753099625135", - "-3046285123411643010" - ] - } - }, - { - "prechallenge": { - "inner": [ - "1476045778313053942", - "7088211501506636392" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-5780902958823199474", - "684672559108579835" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-479599555522051695", - "6277689784759994790" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-6174909374622547011", - "-2876420228592515736" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-5612139484668830099", - "-141685165274757211" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-9057284384873862529", - "-218923106050670804" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4381571242292214582", - "-7982158890774157783" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-2589693721356185105", - "47703702537737607" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6933529253212730047", - "-453811945482877525" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-7749055720453093542", - "-3329383869546507530" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4722006655881085948", - "-2216518060947545516" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4147613965780683501", - "1618424163113385480" - ] - } - }, - { - "prechallenge": { - "inner": [ - "5242665654050011345", - "1974270862881305038" - ] - } - } - ], - "which_branch": "\u0000" - }, - "sponge_digest_before_evaluations": [ - "0", - "0", - "0", - "0" - ], - "me_only": { - "sg": [ - "0x0FD332BC7DFD613056419FDB0559B4534048252D441179C1E79BF01549549962", - "0x160504505EA5EB041D033936E7B1A6553A163C7CE2E6B1C74FA2C1F78552D7AC" - ], - "old_bulletproof_challenges": [ - [ - { - "prechallenge": { - "inner": [ - "3711726721677311855", - "8761545649494038627" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-2505642933990422633", - "-2487422680924118585" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4113786261177851957", - "566815174034496733" - ] - } - }, - { - "prechallenge": { - "inner": [ - "5993263758714673683", - "-6259514542256722053" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-2117686120277866613", - "-550460597093069586" - ] - } - }, - { - "prechallenge": { - "inner": [ - "2143052809542605959", - "5556201566125368992" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-7172698754141626607", - "-6773867482688065048" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6641554769559773261", - "6524714810323564443" - ] - } - }, - { - "prechallenge": { - "inner": [ - "2504198601910020936", - "-6446749539458519571" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-8068243033437084562", - "-4483743298391994862" - ] - } - }, - { - "prechallenge": { - "inner": [ - "4919588161765452745", - "-7115468514000056859" - ] - } - }, - { - "prechallenge": { - "inner": [ - "4798728907681213006", - "-7518434295045703748" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-7365006775264907657", - "-1160122940338191724" - ] - } - }, - { - "prechallenge": { - "inner": [ - "5439700123898059092", - "-7701257753186809792" - ] - } - }, - { - "prechallenge": { - "inner": [ - "3229587527204030387", - "6616313680930013725" - ] - } - } - ], - [ - { - "prechallenge": { - "inner": [ - "3711726721677311855", - "8761545649494038627" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-2505642933990422633", - "-2487422680924118585" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4113786261177851957", - "566815174034496733" - ] - } - }, - { - "prechallenge": { - "inner": [ - "5993263758714673683", - "-6259514542256722053" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-2117686120277866613", - "-550460597093069586" - ] - } - }, - { - "prechallenge": { - "inner": [ - "2143052809542605959", - "5556201566125368992" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-7172698754141626607", - "-6773867482688065048" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6641554769559773261", - "6524714810323564443" - ] - } - }, - { - "prechallenge": { - "inner": [ - "2504198601910020936", - "-6446749539458519571" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-8068243033437084562", - "-4483743298391994862" - ] - } - }, - { - "prechallenge": { - "inner": [ - "4919588161765452745", - "-7115468514000056859" - ] - } - }, - { - "prechallenge": { - "inner": [ - "4798728907681213006", - "-7518434295045703748" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-7365006775264907657", - "-1160122940338191724" - ] - } - }, - { - "prechallenge": { - "inner": [ - "5439700123898059092", - "-7701257753186809792" - ] - } - }, - { - "prechallenge": { - "inner": [ - "3229587527204030387", - "6616313680930013725" - ] - } - } - ] - ] - } - }, - "pass_through": { - "app_state": null, - "sg": [ - [ - "0x11D3DFDE4864C29DA55CF0CE4B70A13C9DBD91F5FDFFFD4F5FA55446E836B548", - "0x05F507224D848AD7DE1417E57A1B0E42B8ABF3C319EF5559CDC721DD442C1A6B" - ], - [ - "0x11D3DFDE4864C29DA55CF0CE4B70A13C9DBD91F5FDFFFD4F5FA55446E836B548", - "0x05F507224D848AD7DE1417E57A1B0E42B8ABF3C319EF5559CDC721DD442C1A6B" - ] - ], - "old_bulletproof_challenges": [ - [ - { - "prechallenge": { - "inner": [ - "-5948286762976073031", - "3913620533516803836" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6451156200849374208", - "-7149474906925249401" - ] - } - }, - { - "prechallenge": { - "inner": [ - "2545802753099625135", - "-3046285123411643010" - ] - } - }, - { - "prechallenge": { - "inner": [ - "1476045778313053942", - "7088211501506636392" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-5780902958823199474", - "684672559108579835" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-479599555522051695", - "6277689784759994790" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-6174909374622547011", - "-2876420228592515736" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-5612139484668830099", - "-141685165274757211" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-9057284384873862529", - "-218923106050670804" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4381571242292214582", - "-7982158890774157783" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-2589693721356185105", - "47703702537737607" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6933529253212730047", - "-453811945482877525" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-7749055720453093542", - "-3329383869546507530" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4722006655881085948", - "-2216518060947545516" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4147613965780683501", - "1618424163113385480" - ] - } - }, - { - "prechallenge": { - "inner": [ - "5242665654050011345", - "1974270862881305038" - ] - } - } - ], - [ - { - "prechallenge": { - "inner": [ - "-5948286762976073031", - "3913620533516803836" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6451156200849374208", - "-7149474906925249401" - ] - } - }, - { - "prechallenge": { - "inner": [ - "2545802753099625135", - "-3046285123411643010" - ] - } - }, - { - "prechallenge": { - "inner": [ - "1476045778313053942", - "7088211501506636392" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-5780902958823199474", - "684672559108579835" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-479599555522051695", - "6277689784759994790" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-6174909374622547011", - "-2876420228592515736" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-5612139484668830099", - "-141685165274757211" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-9057284384873862529", - "-218923106050670804" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4381571242292214582", - "-7982158890774157783" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-2589693721356185105", - "47703702537737607" - ] - } - }, - { - "prechallenge": { - "inner": [ - "6933529253212730047", - "-453811945482877525" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-7749055720453093542", - "-3329383869546507530" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4722006655881085948", - "-2216518060947545516" - ] - } - }, - { - "prechallenge": { - "inner": [ - "-4147613965780683501", - "1618424163113385480" - ] - } - }, - { - "prechallenge": { - "inner": [ - "5242665654050011345", - "1974270862881305038" - ] - } - } - ] - ] - } - }, - "prev_evals": { - "evals": [ - { - "public_input": "0x1F82684292CD15A3A1A6A5C6BBF3AA0772D5346515D8998ADBF2A7C02C62D195", - "evals": { - "w": [ - [ - "0x1AE946E9652F86A45E6840D63E0B995A0724605F2040CB1D0C301CBE81B7D252" - ], - [ - "0x0CD8CB170CBB785D2F66D0AE98D961D5105ADF3190D895EE16BEFE35008E8936" - ], - [ - "0x32BEB240E7C2B746196FB120FCDF8A5C5143AEF1DEAA0F97F24677812E9A2371" - ], - [ - "0x23E478DF7BCFAE0BB0BB487FE1FE11EA5F2A617888943B56416749D77FBA1221" - ], - [ - "0x0F28B3E2FF59B7A7A52554F766BBF5FF68C2FF71255DB6CBACABEE012924DCEE" - ], - [ - "0x3B68606E47D3B84D1FD28F4A5A86F936D3FF11C632D433CF96730394F83C0D7B" - ], - [ - "0x2322CA9F7751471A72947030C7727A4CD60AA24C2E4E2E96D9F3F2FCBE30CB5D" - ], - [ - "0x052AFE047742FC8079224622BCC1767750F81CE7C650223D04FE6A903BB06EC4" - ], - [ - "0x26F06DBE3A039FB1EDDDF00B5B8BF8FF90C686E0EB3507E2FA02A6FD6F2BCC0A" - ], - [ - "0x0B82905319B91D48E29E24B9A923EFA04CEC37EFDB6CE44888DFEF1752C98C37" - ], - [ - "0x03E7E52A4B867D990788E004B3C67EB804059B2D86A1395FCE63DA36C1E05CE1" - ], - [ - "0x30991D454A49356F278D88A2BE7820FACF1B088CE3325B106B71F1D33721560D" - ], - [ - "0x18995AAC5AF0DFEE5A552B82770E40C584BBB15E1A51A21B657ACD9B48DAC1BB" - ], - [ - "0x0B13281FAC74C2BC5CC7E66BD5B209E409EFD1340CF17F014759697B4ABDCD57" - ], - [ - "0x0261C9F9EB042DFAF2FC4C8C9863000C368C633F70027398F4F3BC9BD2467CE6" - ] - ], - "z": [ - "0x115F813869FF2B51084A06E4CCBE095DD91C848DB957D17385245E6F98E35136" - ], - "s": [ - [ - "0x0B7EB461F4BC1A00BE19CD1F51D66A46B5C040D2317543BBCB891B45EDD11791" - ], - [ - "0x2CBFF74B317CDE693076CC3A5EA2CEA007203F8FC7EC460D40CBC7EC0F67C36C" - ], - [ - "0x1E2D32FBEFEDE1CE076FA89BA14236D5F46DC1B2131BA0EAC78FFFF195C963A5" - ], - [ - "0x161578273523ADA1AEBAB2A474B615BFF7BE795C2A941B41E137CBACA4729F8B" - ], - [ - "0x3B5E9004287D960968140892C1027EEB17C30A2C966EC843F7A4FECED3513D79" - ], - [ - "0x39BB9F72396E72799BBB6C1A6DEE5761CD37F51832A39043B7460AC9B9A2A6F9" - ] - ], - "generic_selector": [ - "0x38B989F92A1F7E009CA56A1597B31828350E2C964254BA30BBAFDCB469460C00" - ], - "poseidon_selector": [ - "0x0E6AE0AFB0B05CFE26288F06EA6F426DC58961B68DDB7588A7FCE9EA11B75F40" - ] - } - }, - { - "public_input": "0x152425E25AFEC57A4DBAD7AE2444E9D16B3EDF74E8DA2E876F795B59EF19500E", - "evals": { - "w": [ - [ - "0x1BB919D083FC7ED8A0AD82071FD9A92244B909F8BE6CBB6F229B28F14A92CECE" - ], - [ - "0x24A9176FAF87ACA4E566E19771E26664692CD42B6E83574D707EF3CED8E94E4A" - ], - [ - "0x1EEC66F21939BDD7BC37751A571034F15EE82F58767CEE1513ED3502ED577EDE" - ], - [ - "0x142903E2240E253D316250789F3B15CA58589FD5C7D948E518517E25FBC0A87E" - ], - [ - "0x157A2009A603EDE84B88FBB1C677D024DE9A4085F23CFD95F8B9C8DB5BC8539D" - ], - [ - "0x2DFBAAE148271182AAA88ADA6B93D0B3366B529267DB903F521C09D35ADE8499" - ], - [ - "0x054F28D07572197398A001712614E38BB4A4327681827D062493565C55443DD2" - ], - [ - "0x139D0EA8B34EBDE74456B054C35B6421E95243328044408FE635CF4AE2F81E8D" - ], - [ - "0x13F0E33463A99ABAEF32F4638F95551AC1F739CED5546B656975FEAFCFAFB1AD" - ], - [ - "0x25D5543A0F970A2A7772C038508526954722D453101C5CBF2BF09CCBBAED190D" - ], - [ - "0x3920CC66AFD47D61EF740AD8B6B0FE6D44A97FA60B06CD9BA8506FC35270AC89" - ], - [ - "0x3921794ECFEB27344BC016E62D62567511E458CDE4E2CD96E685DCE655105DAC" - ], - [ - "0x303F960F1F2ED5EA73E09CB1FB9C01A5D6A035A3BAA9A3CC2E4B915BC654E0A2" - ], - [ - "0x0850090781FDDBB9D1086E84A32569658273F9294D776822AF833316F3BF64DE" - ], - [ - "0x0C795264F41F16B3FC1A533DBE9825CB30ED51B57A3B8EE3933AAF6720C9791A" - ] - ], - "z": [ - "0x1DC4EFC02B871ACA8DCEBE6E302BA3BCB051DED4B385C8CE994AABD0871D18C3" - ], - "s": [ - [ - "0x3A28963FEE8042F58EF1B39687D6A868584F45C582A8971A340BB96471C28828" - ], - [ - "0x339238D9CCBE0F0D12DD1AAE2822D39984BAC2561294FCCB3D3952C7FCF5E6CF" - ], - [ - "0x2588792FB9151AA7BAB0ADF932F807367648088B96E2686FD2216300DAFCE617" - ], - [ - "0x0A303248E6F614B1D7E928261AAEA893165831B72D16EF756529779D904EDBFF" - ], - [ - "0x3CBFB2958CDE3E126DCE167DC9A5900C96BE34F8EF4D5F4BD2EC3C32DC8A1240" - ], - [ - "0x2CD86EFEE81C14F65AB53249B644370B2E3178B0487942DEF6D34C0CDCFCF592" - ] - ], - "generic_selector": [ - "0x195BCF5B5A4941AE13C9C0B4283CFAEB580D88440F78377EAB3F84ECBCE1B14C" - ], - "poseidon_selector": [ - "0x37905486AE7C97CA4F73A9FF9D3F9FDE7F11C021B9152796BB0653A1FE4DC8C0" - ] - } - } - ], - "ft_eval1": "0x3C80CC451CD8939669FA5414260F5D3D1A770E412F38FD3A8DD1EAFF59F26CAD" - }, - "proof": { - "messages": { - "w_comm": [ - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ] - ], - "z_comm": [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - "t_comm": [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ] - }, - "openings": { - "proof": { - "lr": [ - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ], - [ - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - ] - ], - "z_1": "0x0DCBFA69751F87AFE1A3281F2EB46B31506E989C8DA3F6CE2916C26CFC965325", - "z_2": "0x000DFC50DD40ED23A8B0E7F4A6F225856ADDBC994C5560DCDBAA3FD575EBCF46", - "delta": [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ], - "sg": [ - "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x1B74B5A30A12937C53DFA9F06378EE548F655BD4333D477119CF7A23CAED2ABB" - ] - }, - "evals": [ - { - "w": [ - [ - "0x186B82E600FE44C4EB089335CCDF36C1A7BC0600643FA8A5D6A887006677D73B" - ], - [ - "0x29DDC5C9F215B8C18FAEB558DD63F298CDCA1872D9F802CB405AC3C4BB6B1773" - ], - [ - "0x064C69B93B48BC30234839A5621DAF940776959F9581B36F12619B3AECAA613C" - ], - [ - "0x1E7A312BA9FFB127637A8E63BCAB8E6563FA5FAD8B3B6253DEC5AAF1503194B5" - ], - [ - "0x02467B0C17F1027D6099E8BB8788245B06E9658A14E0C4C5F1EBFF71BCB073B2" - ], - [ - "0x2784700DF37C92519B7F53DB9409D8B6FB71FA6DD6E7177581C6B96CA3B949E5" - ], - [ - "0x2C2253B3E09227E4FB3C521B12BCA26C145662BF197D56B82F7A3DAABFDE3375" - ], - [ - "0x32DE48A34CA7BA4B0C73107744E08BA186112231F10415318A0DBE71B69FFA57" - ], - [ - "0x354CD42B8315850EE7A9C924566F90E4097C0122FD412DDDA5967E3087F0D1F4" - ], - [ - "0x1689C7DC0881D8C5F78A20314DBB799C2452FC4094084E6EBE1C009057EF8501" - ], - [ - "0x15B0FC3AFF7ADFFD3388CC86193583FB5488CB60F93550607013E8A2C73F3EDC" - ], - [ - "0x044194259118AC88830FBF331A3ECA9BD771E37B95ED92C018CDE39150AF4953" - ], - [ - "0x2A5A98C7FA59BCC21C00B6CAC434E44655DC0446890DA53B48C14F380BBF22E7" - ], - [ - "0x365116240142D141A5E7216BB9097193999FF1CD0D4CCAB5F2155F56A7844A7A" - ], - [ - "0x0CD63AB7E233082D6BA631EAA7F5638533DBE86AA8C2D5FE00548EC4563F09E8" - ] - ], - "z": [ - "0x1DCCF404F71A40938DE503B1EFFEBF42487D7CB6DB3801A5C31E97D43E6361A6" - ], - "s": [ - [ - "0x0B0891AE1A3B504A1837C6B710CFC33E18F15E9480CB1D66AAFB21F1713E81F6" - ], - [ - "0x2054985C2540C51D96010FF8D6923AB5F69FB83BF06D509D9111BBF0F09BBE52" - ], - [ - "0x1576395D0042A58D4D6AEC1A84AF666598BB5C4BA605126EB1EF29D24FB2587E" - ], - [ - "0x39E54DE7796BAC7D93C7D114E4E160437BD734CF3812F49527E9CC0B26F89A97" - ], - [ - "0x1676956FBE19C4F3EC162EDC27E9F858A7A6FE11806F4B1B6809E180168D72F3" - ], - [ - "0x3979D8644983CF94779916AF372B73F0D21586777F183F727B206A9D35FF6478" - ] - ], - "generic_selector": [ - "0x268AAA4520266766ACF3F2FD19A818F374E80254183DD52189B9163C3E75A627" - ], - "poseidon_selector": [ - "0x0628FE6ED0746BDA11C9CB189354716CD0D56A828B5069F051F193FEA67C4E66" - ] - }, - { - "w": [ - [ - "0x030F1A455FDC020CCE2461097B3A300D3DCA5C751816C6C9D17C7FB088877AB7" - ], - [ - "0x1E2E0CDE4A06CEE7C32059369E1E9A2D52C67E772388032047B8001D73681E2E" - ], - [ - "0x37D9BA0369AC741292A1CDED36A2643D3389B0B49E914CA4D3490A4AE5626DD9" - ], - [ - "0x280FE934EF475A73E7666CD787B92D33FD6D98CC6794E8538C2D24FA8DA7E3CC" - ], - [ - "0x2EAE317C4461F960E11ACEB9E4695A0CCD23435C5EB86B249AAA73842C697DC3" - ], - [ - "0x260EB6A1D890B71B8AB169A035A0C25A2A5B6A18DF7E1517E3BD427871382DD8" - ], - [ - "0x0F1701A9E805C278941BCB76A4F68A4C79A2ACFAEBAF18C457A584F270E29469" - ], - [ - "0x151EE97CA8D2A2C9A9E9542BC82C0D06182529C02EBEBA884FC81397E5157171" - ], - [ - "0x1F2231AE6F776DB9C935F68684DED904CD2F47F26049A30FE3CE3F2C9B3CD95D" - ], - [ - "0x24E7AB95462CA37FB5FA7921793EB98C8AC5E22AB94970B9E04BD6D6A0944FA8" - ], - [ - "0x178201A8AA99117176923B35C91922B2EBB8EE7E5AE8AC8EAA413B12A56A7C2C" - ], - [ - "0x3D5F054122358E51073C6E1A533D9376455C3F29F99EE242C4EA9FDAEBA2EB16" - ], - [ - "0x051661120101B86DEC19AA71223F176E6CFBA0AD760E429C36B85324E1B2F5DC" - ], - [ - "0x3C1616AA99A19CC93C89AF72312484043041FCB8E03D3CE598C5206F982D3635" - ], - [ - "0x2E155DA010B2B9F1779CB60A8B93997A80549EE8F02C5E8BEAB45F386A1E95F0" - ] - ], - "z": [ - "0x09ABCCF136D6470878DB839AADA02654172C9116537F3F8BFB28C6809DFABE37" - ], - "s": [ - [ - "0x1CFBBD55500252629A5429FE4456218520062A0A6C048431C276602BCC360DE0" - ], - [ - "0x1C492DEB5F754E486A77A2AD2272097FDD410C93AD06C61953917AC00E23DF6B" - ], - [ - "0x2436BADFC8B07A229721D9DB5DA6CA70B6767E9D689896B6F3BADDF4EA2B80EE" - ], - [ - "0x10D3408AFC5B4214DDEA3CDE7BD279500283FF0D92890D60D5AA1E883A8DC9B5" - ], - [ - "0x1AAD752BA76A6DC82FDE0C61D1E774B16BC54D430701EF6FD7192501281644C0" - ], - [ - "0x0AB264ABCF5D6768FA0A4862922B3E319AFB4179CE3FE8E5F219A7E1AFC871CD" - ] - ], - "generic_selector": [ - "0x089AF17A033C472FED3CD53EDFC8A15BBD6906E43C314B68F60604243D0980E5" - ], - "poseidon_selector": [ - "0x39A0A70ADE8B5AB4CEFE48DD5B2F8FBB1945F52BD823A366DFBDE7C3D994CC9A" - ] - } - ], - "ft_eval1": "0x17756EE6A9147D2C49E5FAE89CAE52D5E82407757858264DC32BB5114206A196" - } - } - } - }, - "protocolState": { - "previousStateHash": "3NKkUDRGeRXLJgguF4k8pkgffQjrKkLavcuLho8UwWQ6YZMvffrZ", - "consensusState": { - "blockHeight": "1", - "blockchainLength": "1", - "epoch": "0", - "epochCount": "0", - "hasAncestorInSameCheckpointWindow": true, - "lastVrfOutput": "EiRs6yfFTsNwSeLjg6JyRWXo7vSezyWc3MXwLPRueb272tho6PXBB", - "minWindowDensity": "77", - "nextEpochData": { - "epochLength": "2", - "ledger": { - "hash": "jxYxn25DLi58412b2o44PXRDLzwLK3JLx36kcpu71DxAYZqwa28", - "totalCurrency": "10016100000000000" - }, - "lockCheckpoint": "3NKkUDRGeRXLJgguF4k8pkgffQjrKkLavcuLho8UwWQ6YZMvffrZ", - "seed": "2vc1zQHJx2xN72vaR4YDH31KwFSr5WHSEH2dzcfcq8jxBPcGiJJA", - "startCheckpoint": "3NK2tkzqqK5spR2sZ7tujjqPksL45M3UUrcA4WhCkeiPtnugyE2x" - }, - "slot": "0", - "slotSinceGenesis": "0", - "totalCurrency": "10016100000000000", - "stakingEpochData": { - "epochLength": "1", - "ledger": { - "hash": "jxYxn25DLi58412b2o44PXRDLzwLK3JLx36kcpu71DxAYZqwa28", - "totalCurrency": "10016100000000000" - }, - "lockCheckpoint": "3NK2tkzqqK5spR2sZ7tujjqPksL45M3UUrcA4WhCkeiPtnugyE2x", - "seed": "2va9BGv9JrLTtrzZttiEMDYw1Zj6a6EHzXjmP9evHDTG3oEquURA", - "startCheckpoint": "3NK2tkzqqK5spR2sZ7tujjqPksL45M3UUrcA4WhCkeiPtnugyE2x" - } - }, - "blockchainState": { - "date": "1600251300000", - "snarkedLedgerHash": "jxYxn25DLi58412b2o44PXRDLzwLK3JLx36kcpu71DxAYZqwa28", - "stagedLedgerHash": "jxYxn25DLi58412b2o44PXRDLzwLK3JLx36kcpu71DxAYZqwa28", - "stagedLedgerProofEmitted": false, - "utcDate": "1600251300000" - } - } - } - ] - } -} \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/data/kimchi_const.json b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/data/kimchi_const.json deleted file mode 100644 index f81ac49e3e..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/data/kimchi_const.json +++ /dev/null @@ -1,608 +0,0 @@ -{ - "verify_index": { - "domain": { - "log_size_of_group": 15, - "group_gen": "0x130D1D6482B9C33536E280AE674431F85F4A103EF6AF12C7AC4CDF0AD3EDB265" - }, - "zkpm": [ - "0x2C46205451F6C3BBEA4BABACBEE609ECF1039A903C42BFF639EDC5BA33356332", - "0x1764D9CB4C64EBA9A150920807637D458919CB6948821F4D15EB1994EADF9CE3", - "0x0140117C8BBC4CE4644A58F7007148577782213065BB9699BF5C391FBE1B3E6D", - "0x0000000000000000000000000000000000000000000000000000000000000001" - ], - "w": "0x1B1A85952300603BBF8DD3068424B64608658ACBB72CA7D2BB9694ADFA504418", - "endo": "0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547", - "fr_sponge_params": { - "round_constants": [ - [ - "0x212F41BCC627C1C75530FFAEFE8A2DAB6F184251A7E022F2D7224F9B885CD4E9", - "0x38802BE08741DDCA7F74DF5C7E41597448BDC759224AF0F70DBAC75839AAB548", - "0x2433C8AF8EDCCA1F6503DB31B38012E10BDB0BD302C2B34F6EC8AA7DBC354604" - ], - [ - "0x169A605FDDD5C1794DE0D49E1CBCC73D89752A3B85E5F70C391B4ACDBD74DE16", - "0x00D2FE01F52A3D6CF057665FAAB5D64E4112851514957886647338998795F8A8", - "0x2765BA91DD72EBC4441F279E90C741ED08F027ABDB8B4DAD4E4F130494A7DC4A" - ], - [ - "0x0CC0E2371B2A34270C189526E42B4279E0DB3B8884A5E43A69BF6ADC389DD715", - "0x18E83028BF36F4CBE0BC4BB94D608E146E3F1B2FB0B84422E7FA9EBF5E5AB5AD", - "0x39CDC5086462E2C5FCF2C80FBFACCFAA4F01EF6FB99F9FA275D81961DE7DB580" - ], - [ - "0x3DD8CB60B7E7FFE9907793B609E958B54EA05C2EBCC6E912B63D35F4EEDE2BDB", - "0x1AF29BE63EA872A529620541C08EA3C851CAF0FE97701A4E4AF3CEB32DBD2FCA", - "0x0B660EFA8382C08619E3DB544B315893591E2679BC442A05EB6237578E844825" - ], - [ - "0x2F6431E6A9EFA904B6B295C13B4B8469D2E042C933B9C668479E7DC5B7966765", - "0x28795DC3FB79088C0E817503993D3ED01AE0C7F29D6EDB94145859422D6549FF", - "0x03692BADE72DEF0E4C81B28F2D6E0817197A15EFAB1546E7FDB2F2A75560A565" - ], - [ - "0x1A5E42A2281E60EE354DD49E218083013518EC95A82C2BBB78261F0CE12B9CA6", - "0x36511417788A37C3CAEE3AC46C9F7EED81D90C52E77963F0FA29764992673335", - "0x3C27A566D94B7D687537B99EC4B0529A011D5A007AAA2553FF981E12B5AB2174" - ], - [ - "0x2412938B377579DBBB84ACDF40AAB804800302DE15A61452D7A144D486EF7427", - "0x0A09C069876BC1DACF870CAA4EDC35EDF5B86C36D0184C7003A466D596B50141", - "0x3375EFD35228A3A0137A4D087448B13AB8CEBB4F6CE06E4FE61F893FE4644411" - ], - [ - "0x2550EE3FB78CAF9526E9537AF72C816DCB94B073FF362583EC9BD6D140FD702B", - "0x27DAC831D1F7822D7683190E98A8424EAC19697A0D9BDD204B6EFD9CCF09F8F9", - "0x04EF204B4DEBF9D48C36AA7EDE7930AB122C3C1E13BA74672D4225282E866CB9" - ], - [ - "0x109C640A2065A21A0D363FDF5FC09AB413CE9E601CB0EF7E187E74E4B435B82A", - "0x321AE16C5CB83DEC0E54E7CCA326F0159824646AACB71EED1C43704CA154A75B", - "0x2B72F0100B5D544D3AD954BA21355824F50F968C38882E94F5E7B0509E39D104" - ], - [ - "0x29F1EADB1CDD088B4806E82625AE5B759922F1DDA8A9441A329E1A415741B0CF", - "0x154C2E1192279489B77F67D62E142B37A319F866AC92001DB7A684298C629472", - "0x1FE6963EC0C1F82765F2954123A0EE9CDB3C8B6C7EB255645226235E1977ECF8" - ], - [ - "0x2B5C693993D2D4D1650703D7651995EC5955B127B188BD00658857FEA3EFCC56", - "0x0D71AE3F5EA2098B3B6A3FD17B8A071688AC0F5656B1232BAFA39159C5DE7896", - "0x2C49A1D56FF06DE67DB04A176B09B0685A059A92DA0BEA2F999AF600CE765033" - ], - [ - "0x317B2BD7538A611251BDAC7C818721939168BA507448754A5D3937166302F69E", - "0x35FC75F17B1FEC2EF16C2DBE046FC9149C653F6A481934EC5F439EFE5D98A388", - "0x1867AA6B8639BC09E9EDCB17D801BD121BDD9E451F38B5EA83A6CBEC09429717" - ], - [ - "0x02B37E76E49B2F272697902D40DD6C59B241FB038D8D3B4EBA89864996040769", - "0x36EAF55B629D4903D1AE33BB8EB4F96DDCB562069AD165840310EDCF327FE854", - "0x275A433C455F73BA6783EB87A174BE06864637247B8307F825EC6DC62E9EBF40" - ], - [ - "0x0AA0CF04C3756ECA69F3518E3B128B7BC412395D72088F98DA95CB4C768F30E0", - "0x3E9D920A634EBCA6628524F6EE6F43CCDC3C7155B31CC05704287EF01060D631", - "0x2538762E07FC8AD6E7D3014EF7C5A60501C9C74DDEDB0C58F6F7871DD7FBCD00" - ], - [ - "0x2B83C6BF53C5007FEFB483ACC7081D33F71EBC5F7EB4E6AFD66F1F5CD73F7A3D", - "0x12322090123F9F63B12B540936F701643BFCA37CE3FF7992C477BE55F2C3541D", - "0x32E86CED32D6713F0CDCBBE7D7C53AF6FF4297F793268F92E2C4DC42E230FF87" - ], - [ - "0x3958391DBFC37A451D3BAFAC2F18FF76AF43924DD041A185A07A8812602CE562", - "0x11A3A3175B3C88A577E56523367CD3CF26BE4CEAA5D160C0658530CA03040F72", - "0x26E9F8C0273893DFB8A14AEA230BE8D05D21C1229609EF728CF282C4212333BB" - ], - [ - "0x129D8BF5683CC590D87F6FD1216148253D98C00901827FAC17A81633111C07B1", - "0x1A11F516A8670F3403AA3D43BCBD2CA70216E7995A46EA9647D931806039D6A6", - "0x13FFE1963AF76315A84B3038D9F28DDB70D3E4F5900D342EF400C4813EA854A9" - ], - [ - "0x0FA0C8066D6B0E1099140AEC5101D5ECB62E894807A230FBF41E89EAD5A316F3", - "0x311559BB4CBD95FC13C98D3B3FB3FE1169F5CB23205228EF3D739227B3E1FBEF", - "0x05694726EDC78165F50E879364D523657A6246622E57DC090909E8E3264195AF" - ], - [ - "0x274FC52D65F05C8E0ABA62B5AA3468F527956FE4826988D71CE0E383D3A827C2", - "0x30A98D7597FE9D2F3159D0941D38650FA9C2552155F24B677DA1AFCC87D92B2B", - "0x2C382FAEF3908BB19171C568F5179969483597EA5898A540E54AC8E1829E561E" - ], - [ - "0x0BE06B151AC025AA9C1481AD19C800843E441EDA4B84EBF6CB3A1700F2EE25C9", - "0x1C77BC54D9A98456C24E0F6D1EA184F6BEBA2638F12F21ED7889503F42DE544B", - "0x2856DB610A842287FEC5B16C41C2CFE0AF587A0F4C2A3BDDBCA31D6D3B283558" - ], - [ - "0x045A9528AB246B5DB1106396B64940B3D5F3F0EC8688ED689E64F3F3FC39A9F3", - "0x24250FC3268A8E4074D58C1B5409F5541330501C6F3CD1887DE9523452D2CA85", - "0x0DD93102F7588D4CF21E4CE3F3A0A29E030D7A3903E973D45FCABD5482C40CD4" - ], - [ - "0x079584079919CB4369239E93401D3DBDA42646BD537BCAD0F54C52D0D24E22B4", - "0x245AEAAAF8CB48D6A0B6785D21AB391724F07001AF3B744080A7C42876527615", - "0x1397EDE0BB29DE98401DDDC79EE666A4BA34761C6878DE7A4909C984B9943D17" - ], - [ - "0x361697F9732F42D301EAC41D9DF1E985DE3E82AB471561528242A8B8D7051633", - "0x08B6B0B716521051765F290DA092A0FE619D65B28CCA3EA5BB0ACFFE1C00E564", - "0x008B6E3846E6AD5C3ADC6725284C69E34ADD1D73AC56852C52A4D1B7278AA8FA" - ], - [ - "0x00E4CAE0D38765B587786F5E28F10D77C3A4192B0350A216E1DA66320737A727", - "0x019920EB49D805E7FCA32056CC0193D17BA46ADD43BBDCB5005DB96966A647A6", - "0x060E062C96BDF43208780632F1A866B6FBFC3A2821F64010FB82D376D9D7848A" - ], - [ - "0x3A2DE3FF4580DB6ADF10497F97B2B8A2F39D4A3C99A453A79994E15EA25850A9", - "0x1969C76E480D9DFBE3E51D7D088EDCE1E29594038C7C10D62E3CF07DFE11E399", - "0x01497E4ED6E3079CFFF17DD64520D39B8E71903D98E965FDBB363096272C98DB" - ], - [ - "0x1335EFA976BA057BE417ECC383A4D385AFA24CD316DB28F195A6E94983B6FE1C", - "0x02968C794F9FDF13077330943C09C11094FFB7C42EEEA7B888B74D8BD42458C3", - "0x22C9E0C3BD1FF4C926A22748231BCF4B9C43DAA06FA55800A99B1C6349F4E68B" - ], - [ - "0x34839BD6705A679DD010A6F36EEA4A66B921C309295C897D979F0B4D3FE8B9D9", - "0x18999517F676471D3CCF0E64C8060E5BB186BD40AECBAADAF35D5C148D0DFA64", - "0x3D8DE65293045A3A186FEBDB22B632367D50D0CC6A8F1B2003D68B7A359A7C22" - ], - [ - "0x0C9DCF99217C419E01FFBE315B27EE18B14B8EF0D55D158BF12FE7CC6A1E0456", - "0x3DA7D3BF1EC367FD185514C3B16120BDF24F021A5997C5A8F70FB5D132142AD9", - "0x227A5CB0B2BC62CAF10C07E9A272961CBE81C3E343C6ABB911FFD9DEA48EC8DC" - ], - [ - "0x2233B40FFEAD67DBFC9675F5C1CFF43A9D7F8EB7080E187F80DD735FE1125E80", - "0x3FF38446DF40EBCCE9136FDAFC01D9AC9A01C2AD1E6B5EFE8F30E0ADEEACF72C", - "0x2B78C0D109098434F9470B3D5F4449B93590734148B800133FD08162C8AD91EC" - ], - [ - "0x2BBBB642F02FB825A7D91DC1FA2687D6D87F5EB0AD2871E722452BCA13C9BAB6", - "0x2E112F7FE8CBE1B6E15A1BD6A6A22C1F721291F54EDF723356CFCFF943CC7570", - "0x16ABD11C46F8F05E53771AE4FEB5567305C7EE7061BB4F5D9A08155AEB597C17" - ], - [ - "0x19FF30F0421DB32D7723C8A2179031E122A199C6918768932559CB0E4256A51F", - "0x10BA2BA680F31507AD05001EBE6A2A910408927D76F6C64F27ABDB8DEF172FDF", - "0x2ADFF62DC1A1E53CBBD917AB358F9B0D789C8F2ACF1D73E8BDAE03CB2E159737" - ], - [ - "0x1C4B639BDD16F068C16E00817D2126F929CD7FAF21AE6658F79399484DD4EF51", - "0x0B3D0963AF4A6765D456B224F02006B3429BAF09D3AD6C29128F3B8A5B2C0A24", - "0x3662321A1ACE5A92C3D8A3A0CE4516A6A40FFE300579EE7898D32B090CA6D54C" - ], - [ - "0x01F6CC0BFF3CBC23CE6D2E58B6D15928A178F24159C3118A11D764461FDC0DB7", - "0x04464D2B0491A6D4CF8AF251EA59F80515A71C96448A3BC155C2DDFCED5EFDE3", - "0x13D181C4B9431D1F934F2002A855DA67091CFB48231144D9B65C6E6AF7E5BA5F" - ], - [ - "0x2C5068A0667E573D2663AFA251EF02D7A8491E6F1B601A73BB7F548B3E5BE6EB", - "0x1DF43A3774A4B1038A3153E9C3FFE57732F0A736506E1BED6F550122DF111552", - "0x0D67F27D5C88DEB44A484263030C869EE62B8C6D12C2075249DA4E721D735370" - ], - [ - "0x1C2EE21ADA464B3034E79C854D833B7059F0C0A5E93FD42B1AE009DFC730897E", - "0x3BF0A6ED127D8185C52B91690BD1C01B59E22658D9E81C8E2F3A31D16E6ADE20", - "0x2D14E26D3F9956943CC0D72E6B03B4ECBD52D244B510C12975BECD5E6E8DBE9E" - ], - [ - "0x235AC5519EF3662FA974E29B2D9CA483FA8204132D7311C8D50E27B45ECC8CEC", - "0x149B125F74260CB313C83E0057F7AA54BBB2012F5314D851306EC1A907A3E2FD", - "0x28C75D7378CEFDA82D5A49CA5961BE34E574F62D3A46A1F77CAEBAE821737571" - ], - [ - "0x16802BDD6127777998EF447993815CD73FE35C3C2F94E840EC7AC0D48503CBD0", - "0x1E8B3A2934733DB7C1D4D6518FC2CCBD04CCF6360FE387B1199C37A58750CBB0", - "0x3AD0D866D117069ADE3FB82D1BC01FC879625E77ED76ED0405426CBC3B7010C1" - ], - [ - "0x25F48F9F5879E500490C43BF65924697635EE80E82224768D6FB888F20563B99", - "0x2CB3DD7E5C510289A8F7312CBA80DAC51BA8EAFA4D3752A6BB4D42CC63BBDA88", - "0x22135B6D348540B4107DB7B7B2E36C678C79156DA1F88F941BFCC2C9A874E503" - ], - [ - "0x26273290512AC3248D6582BA32FED801F68CBDE456493FDBE0180086C38694AF", - "0x028EB51465F4923E12EE5EAAD4132B19701CBB709095BD19EA8B96300060790B", - "0x030B1CBC7809A62E7A2CAF0158D109ACA8DD2D67C4234B265552718D72ADC440" - ], - [ - "0x299FFDBA3C04E7D813A1CBBC42C0503DB31A8FE27B361ACD99C565F9A7454263", - "0x37B28B42F16C7D96562E3FE642AF3BC07C5D93BC04EEE9583FE27098E2C3F04A", - "0x35BF4CFC128744076AAAC50BC351B9F3E02D9C0AE50A869E54A5504DE282032B" - ], - [ - "0x354CFF98121D7484E3292F0114B7F6D2ECC9F62EB3A94E8F61A3067A7A466C2A", - "0x348628FB95F7213BD6AB91F6A237A1AAC10751CA8785F0806FA4EB942AC1B8AA", - "0x0FDB22CE81AED5FB4604A9B2DE2DD97DF99B3D523405B3BAF8433112B6DF4EE1" - ], - [ - "0x0823B362B22FDED62E11C45A6C4C4EAB1DB4D59A71EBE0CA5BB2D7C6B0698AFE", - "0x28D8620C8ADE40A32100A1E855B2B04B903E5B790B294E573EC1341AB2ACA12A", - "0x23CB5292C4F7F85B2451A070BE1AD48EE8AE8E11C11744C13E058487631F556F" - ], - [ - "0x34FB17092AF22E57FBF56A3666BB74F9E77BB9B33787D91AE6CDA705C0E253FA", - "0x130F19A90368C2F9EB1AF730859B31F9BAE26FCEA813094E355C4AB0C151BC5A", - "0x184E2762FFB6963D7853697CF69A3A29AE71D2F6AD9F52E7EA774244C3F48ED1" - ], - [ - "0x19411BA2C97C6EE036C89ED03709D6C07161DED8FECD8AD8344BE8BE015E56C3", - "0x085ACEB8468F6F4E22201468E9EF2E26F589D67054E94F368138F748684E0B3A", - "0x1B19308A2333224066D1FE6976463DB25AFB80CAAB16581A9860DDC2F278EF5A" - ], - [ - "0x2CB3D9FF53B293105F9E83FBFAD883CB62D20433D613726D6761D4C2D4F5124C", - "0x3AD8380B3010BDE1B05FE6EFAED7A9D8F14C8382592CE1C0318BC22E1D5738EE", - "0x0F9146442B66B61473462439E4F6C422E41A8A761F41F04B6081C0541F89D4CB" - ], - [ - "0x2C3F0D84401EC1A37F3CC22AB0CD0DCD5C163FA01C378AD9C19BD14634D500B9", - "0x189D7B702B0766DBF15D873B7A29E65391770FD40A13EE7BB8174600A4ECFCCC", - "0x2D1009CE7A64C6C369580594F7129F76C0E5B7236687EF79333CA79BA30BD767" - ], - [ - "0x1FDF2EF8727E3816749F2202808767F1E427EAE72576FD857CD1C8704A939224", - "0x1333FED401556CD0B5A84B969A69892751A5C37C0B3C0B87F6B27E3E1BEAFFAD", - "0x3B497620E0ADF1A597E4B5F39CAA3B0F9DC63383C68CCE807FDC3EE4F7257845" - ], - [ - "0x0AC09971D98EA5EE01BD11992845C1571949AA3C32BB9072D1FEC543CA77F207", - "0x02D7B54B11122B1DBA3FC6EE07F4AF39F98D8B8410254BB785BD613CE7D57063", - "0x05D35FC3443262DE57002472EF5BD8D74CC20977DCCF6DA996B457FE4820B177" - ], - [ - "0x09D6CDF753348972892CB6B226EBA63F5F0FA56E02B52BF1E6A1E6B0BF56C39A", - "0x0C3D5E5747F41867C3D129D61F3E2D2EE50253AC0FE22673D971E91C989D7474", - "0x24C679EF24B061DECDEE8CFC27846F4A3F5CEA239EF8C0D7D167F5FB9C5BEEED" - ], - [ - "0x1F3A8367C8AA851789F5EB6243C1B2C3EB233C07600FB897AD85899BC3DB81FD", - "0x3DB8F2E90CCDD8C8ADCCC72BBBBC7A45C1737FF03D1AB3936D36BCA7FCEC3E0E", - "0x07617093F8E503084640F747A52C8046511486052600A48E717B51AF8AAA8E01" - ], - [ - "0x196EB50D611213583141081A3C5C8385AD55E3AF10F07ECC7B7EA2D90C18DDFF", - "0x0913F6DB8FB4666CDA8925E203FCA7B47C3511D0A77F4548CC60E0CFD84379CD", - "0x1D9D7555BA95FD2C4ABA101D58382099EEBF53528158A77FDC9424E57FE5D233" - ], - [ - "0x37A94C909C28A463C926E1A6742D9F28E53C2BD3BB82086C223A1F075F09C126", - "0x271575F3199DE25BAAFF6A3F5E4FCA37CF8127255D41AD5FF686EDF138FAE20D", - "0x1F4AE85148DC4D36492FAD4FFF845FAF949DAD529240515E0E56D4164299C073" - ], - [ - "0x3F1783D329385861819F1FCDE6FE82775409527A4303BDDC88D7BC19B11F7D81", - "0x3723089287B22D50F2028DB3E72EF3F5EFF61AED031A068FA0FC55787106D0E5", - "0x3AF0EB723BCBDF62C115EB42E5C688217501D8BDD86B94FA4B2FA444AB4D0EB0" - ], - [ - "0x21421C939A61C9C109520AC3E754FA7CAF79F26388CC899DBA360AB89C61E415", - "0x0658C8BE312E3365C6FE2D415B79AAAFBEAF8A96E41E11CDE1574F78D928BE85", - "0x097DCEF6C06D9BDB12F33DB44B4DF01418CE430D1AAF175A7C93AFCE4237274C" - ], - [ - "0x2E2ED0C7599FBAF7C247914B9ED7BC21DE548E1C3824E40E828680253FF92F89", - "0x2170102B79C7FF15EFF44BF1C0BDB9776C10C3A79992F7B74AA809D0C384C711", - "0x098E5471C82ACC69883E182AE49DDD5BADD3357FDED8EA40BEB3EF5C6A1A5A3C" - ] - ], - "mds": [ - [ - "0x09676DA44236AEECE5BEB6083A5119126E29DAC6A3C7CDD12325ECD774ED5EF5", - "0x3AAAB5076493084B34D7BCABFD238085D5B60B1769712B4C0D158DC717E2341F", - "0x15CD8C594785DAB79314978726295CCFD5FA286DE1EEE5BB2DB4797D83BBE920" - ], - [ - "0x309FC724FCED8FEA6EE3BB5668A0C9D24E514BD4657B872032D91577CAD91DD4", - "0x37DD7F40C9E278A6192E0F01CBE529AA54BBE6A6DE98BB833924FAB19A332E56", - "0x1920C1DB7E3894897268FDBAB4425D889E03AF8B6798305B90375EECBB700545" - ], - [ - "0x030FC1B2D695FFB71B03C308F53C2809BA5F1AB180BF05C4D3313A8F123A9839", - "0x33F6C27D988F8ED4B6C871DE94E5901A07F4AA2B8FF664E16030E8F639F0053D", - "0x3971BE44CA4BBD365DC94477718966EEA5A7C6EFDBD7F41ECE58B7EE05C5C11D" - ] - ] - }, - "fq_sponge_params": { - "round_constants": [ - [ - "0x1E8CB21EC9A74048314FA3BE23B25E4586597E8D746968EA0F40755D6676FC81", - "0x13E37DFB7562BE45C2E8B1381308E0416E057D3AE804BE983BCE67804D9DA470", - "0x289A63AD6D22C10A4CD44776F7EA2B975292AEDFB3A04D41E1D78553FD2B362E" - ], - [ - "0x044D83E8294D1482961C2E97A7D065C5C55F653A96C22321392F3E77BE7B37E2", - "0x1CAFA7E4A1CC01839D0877844B67E490651ADE85E496E4881C8FD3AD52F03B0A", - "0x3DC16F00005FBEBBFB78ED3C5669A324FA912D4D20876EC9CECB1D3F14859C96" - ], - [ - "0x3C6A1735B0995356E6D801D5ECFC28607216E4CA0BAFE814D216C0AB434FFF59", - "0x0CC1CCC2B81978835BD39DF962137D3B3F5C52E8254C160C7DF88EE16EF5A563", - "0x05791065BA5194EC7614BEA72542C2AD9F8EE3BC1E95149E6FE68DB46EE6FF59" - ], - [ - "0x30CEA518ECF2A260194FD647BA12945B9014A791A2A93D119ECABA56B72AFABE", - "0x1155EEC1EF3DB9356A865F68234EBB87B258DAFDBFA29162698C736A30D9C71B", - "0x268C438B4ACBB44F9F06BD3F37420516EA754D564ECC883C3B781AE3D68E4ABB" - ], - [ - "0x1C9F9F5CA98C4F622FD33BE36790C7B7898A0392E87E0876A1648222C0D554FC", - "0x215549DCF294AE8F702DB884D98FC04E44EB797E10EF21A735273D54C8B6BD6F", - "0x31BE19DA419D99D876DFC5204B949F14C20DCD3E6B47C9B54D4D3BBDFDB10992" - ], - [ - "0x0D908EEAC1C256423DCC4EF3ED7699E6F8046A038470F0AD6E2183946782A82A", - "0x135E703043654CC7543E301C60B3E129D1B76F99EBCDF8F717BD5B3397097C5F", - "0x1B26C65B53DF9775B2CF1AC919B42CC4E431395731398C74AECCE9E5BB923A69" - ], - [ - "0x17D14E36DF6A7E5323D9EA26F82A085A8525D64B65FD9B2F83794EF6FCD4FDBC", - "0x0DB5E0B4B7037B2C60D28404285270F264F7E4A92637B8BE438491DB72F9628B", - "0x2EE985E2160BBC9B9A070580F7556D9C82FF005DCB74C58C46BDF045BC6C56A5" - ], - [ - "0x273E595E819EF9A5DC0F6DC9342242655568FC0A1B1FD987C0707793148B0AA4", - "0x0402467EF3CF9DBD370B7B958E16FBF4F5E0C5A5F3A9A61E4831D789F160C015", - "0x145BF8346C93AEAC0C2EB559F29D223965B3AE78E7AF77EF66A37D2FF619D49F" - ], - [ - "0x2F3A80BF8F3EEA99F462E360F65D2EB73B0B8B4CD852078F866349143649B120", - "0x1A659594B18DDE6E9FD5D440FFA60558C71A318CDA8DC68346F29408B392CFCE", - "0x09D69E8EAAC4EDC229DCF7575C1D837F1C71C2C1CA74F6A9AAE1854D86D32F4F" - ], - [ - "0x0AEF3C3FB39B33A1C38566E7745EF4347A26251C5D83654DF0312CA3B0771B51", - "0x0F89BF188964E272A59A522D25C88A11CFFD0232D6DBF7295224B5B9794D2703", - "0x1F56B1CD8E25D405B56B3A0C15A30B83CE2AEDBBFDA75DA4710AAC65C39B6E3B" - ], - [ - "0x28E48DC53D04B763AE81C0238A730B0BBE9055AC9E3CF2278F47795538A58993", - "0x13AECE9BEE21D2B921264599A4E523C53E85DDE8F99AB4461569E5424AA6731C", - "0x3247B965F9E811111A5058D0C83A1915ADD55CF2BC26EC41EE9E85727758C882" - ], - [ - "0x0A07DF581430C23334F1295E254B7A522422A94B317971E0324A505BEB9D5DF8", - "0x204F9E8DBA35C00BF4821A5C45371ACF47B1D609AF6279D01EB6E73D19F994E7", - "0x2DD1062E141459C339EBAD761203B4FEAEE6C2E754EEC8B02253E5C93A2D4810" - ], - [ - "0x044769500B22D111D4D35F58B0CFF0BAA03547F7A1ACA0BB48E841C2645652AF", - "0x2421309184C47E79523CAAA1E3B9A3958C19D7021687E5DD42FAC8EC2C3CA9CA", - "0x264CA9C5C4BEEF65942322E764061450624A13CC9205A4CE02435EAB99CB2DF5" - ], - [ - "0x04A30DB4F7D68EB7F4A4654D08022CFFD6229BED00DB16F989FEEAE10CC76DA0", - "0x34A5212286DAF6AD73D8E36D36EF9824E68D13D5A9A939BB66184FAA41C7DB4B", - "0x16E3D06EEB59AC12534984247E9FEB9B3011B614D6252E89FC2A8DDB631EE4C0" - ], - [ - "0x105D40E2448FC67C2EADC6884FB8CE1E79AFC08855AA781E1A7F66BC941D5A41", - "0x375D0555F4CB002F70E0B825F8F1E0B6CD5692FEB5033293680808D2ABDAC5E1", - "0x27BC3A0B95850622A569C97B99D576E8957C0D88CC86402AB77BFF4E691ECAF7" - ], - [ - "0x259E2B84C02C74BFBA87E92DF71CCC35A4055A238D4604E859CCAE8E1B265A45", - "0x29DE4EE1C185018E74386B0D34BBC5B7B246703F84113817893DD8840182EF09", - "0x05B975D01AC74E3C0EC16197AF520FEBFEA9366B8A34C88BC341E84222B9F32C" - ], - [ - "0x3855FB4F2440753E231709FFE2C29652A722B15470326AEFDDB78D368561C7E8", - "0x34B8052553AE34C369EDB8813CEDFAB4610EDF532F03DC2C00F3B77F085E8EEE", - "0x3B636C92F62067CAC7A9CF97D589C6FA3FD5942D79FD03BBB8C54162A44410D7" - ], - [ - "0x237FF33D42D740DA689541C8CEB2769AA6ACCD305DEE77BC507028424CC83B33", - "0x18635AFB1E0A021AB2CA5331AA226F29466FA7795235EBD05E8DF18CD5895ADB", - "0x372ABEDB0FFF6A2007475683A457ADBAF9D6A87B1BDE922CA5751DDE9BB91290" - ], - [ - "0x1824F3E167A6412C36917AB41D8E0058B5F3950BA7BF76EC43AE5333DB57E536", - "0x25E169BF422728BD312ED1447AFBD4CA1061F927B5DED4048566D4B330DCB7B7", - "0x2E0ACD9EF1975176B24BE5AD1A208AFEAEBDA82DC5592F043B02579FB840E5C2" - ], - [ - "0xC37B9DF22F1FA8CE88E7A7FB2B0BB10096EF446B0D5929FF866E2A2363EA8E7", - "0x2CF0690E590ECB5E75BC8DC715E7AEC37D2C39C606EE27E722DF39003F664495", - "0x2397423F3B98DEFC971E139046AEB064C17564ADA43932F36CBC1963AD387853" - ], - [ - "0x21B87BA8BE9DCD01ED04C67582AA1744734D8AD4B69362B7421A7DE17D41126A", - "0x001B8EFE7E795E7733EADBBA37E20016894BC342E95722BCAA27DF8EB3916E6A", - "0x35597265E9AF065B58A78256D3CB5707353D5E51622D42994C305AB3CB6121CA" - ], - [ - "0x1C0535B4CD1C06DCEF6E69D736A205AB91A790058FCE9470E27AD1ECDFFCFB57", - "0x06FBECBC8C65F53663AE8DE23BB6AB38AC5D3D156605C07BC445730D87DAA935", - "0x32A8E7710DEA483F87B0B6303C2B59410CD57C5789141363F8BA8D3952142DFD" - ], - [ - "0x391ABB1060679E356016F6BC0D4F2D13EB3A0126EE629469C9595F6611D8056E", - "0x2B62E1A242BE3BECB8A856D5DCB016B7B69AA08A4200773517BC54ED58F542BA", - "0x3797A138405C001A8B7C639EA19409D5AFAFB2B15D339B3C180B09C25F110AF8" - ], - [ - "0x2622F1C684A325D684D6BB835F2E630208B2DAB15EB4D019D182FB0C881E919B", - "0x3A7FF935D063F24BB8ADAD53DEDFF94E89A152994D54DA9402ACD6A528C65A0A", - "0x187F0D949B98DA36FC28CFA102DD27DF8B6F79FBF74A4DAB993604FAFB8A6C54" - ], - [ - "0x1EA6DFE1C4BEEEBF4C2D4889BD1D7ADDF2C7E360EC6D47B29F8D57F4A1F05EEA", - "0x3B98894356D604F8AC8CCB5E95649AB70E489AA35AE2A99FB8BF4CD0C7A087CA", - "0x0A5C95E78F7885D26EBE5F6F1BD0861B025A321FD6846521EBECDC329C3C39AA" - ], - [ - "0x1AC6C365F76199F1CB2C3BA74D6D7C5372A762A8D5DCF089EE65A7B33378BF7B", - "0x2C805727113DE33FF5928282C257E8FB08F56A51D8E2E4382C6C4ED19DDD2487", - "0x379D0DDAED469E992D4488921F882073203D85E781020F1BF2E68287976F23F6" - ], - [ - "0x3E590BECC84D8F438F5D8322137D8939E8B073D879F32BDB22994DDEC2FB45AB", - "0x2CC02B3E2AE8B29629AAC637199A865B4CA1F038EF0D2DABB1C7A3DD86EE2582", - "0x0584FC056669C70D9C5981DD045D799933D6D7A4FBDF0B7B8DDF0B0B0C148EE7" - ], - [ - "0x33228840425032094655692410DA8AA3E83FAB078310BAE1F6CABB2EFF3DCBE8", - "0x15F3BD450884EAD3A5A43BB5BC22921A5023B451B969D8E178241A93AF8AAA60", - "0x086D47C638CF3C06A77E18A6A45D622756EB65948C53FE36E4744FBD63B6BD20" - ], - [ - "0x1FF38DB1FE1FCEEDBD4BAF4BE53C4214294A26CD107B87E61D75C98E90F9BD7D", - "0x0682A9FDC0DD0B51F603EA31F678AE3E0FC00E88D3D8D5C1DFE9D197C6CE743D", - "0x1989118EA9D98E4B10D77E6E38A4F1A4EE820A836CB840DE7DA5A70A849C86DB" - ], - [ - "0x32F0A21DEA54F454B26DC2E795E65FF74391CD034392C042F78C065ACFF0FE30", - "0x043401F8A340BDF0E15171533E974EB4CA4F335AA26913EFB045A291ACE0A35C", - "0x13928F06221F1A1FBF97685BB592888CD58D45F668FAFCBA432D26197F5A576B" - ], - [ - "0x21D860234EEF236895D17180DB2901E56081108CB3FC03720248060B82D2B79A", - "0x0547E7392AF888D60704B373A6731C0F58568352C5988A334F219ACE3C0A8FD5", - "0x0ADAD0F094C06E3EB9C08DD259F9C5CD9796EA1D2A2C78AC1AD7D5E53D00C8BA" - ], - [ - "0x0BC1E7A4BC6C6491FBFEE2296E7EC520ECEFA908DA3DAF3D17B7739C71A16C31", - "0x35077A9C2F05C078FADE850AE169310121B27986DA99B820AC952F465CC990AD", - "0x1E06C6ABA19445D5E703FB958201D0C6B899FA5F893FFDEF7F22CD70C1795021" - ], - [ - "0x1AE964D90A116648440AE3476E4DFF9BECCC85665597F2A00033260B45F3880C", - "0x0F8BBCB84E92756DA57BBFC8B853BEA3A7AC8664E06B95223B0D513ECF1EFBAE", - "0x1C81920383DA843FCCC2EE37223C6B073D45E73EDE14BFE9B572BD1143E27AEA" - ], - [ - "0x2A0584BCD15CA18798C9CDA32C7A0338F53C57AA764C5E612A5617F0E6BB7796", - "0x32F93A0AD663E97066CD4C7EF27FA928A712316F92EF660D3BF8A7DFDA87513E", - "0x17F06A3E52175119324BE0A894E109D153D344CB691649A4F5A887A8BF4142AA" - ], - [ - "0x23798B8181BF33D47D8B2BD97AD4BDA26E177C04C01DE189F99F95E0AE8357C4", - "0x391D25252D92E0E5894D9C5796D359B1B40EA05DF1E1FF8CC5B69A0F80BC8FEF", - "0x2893F012BA710D827A30E65C79F5DC6DB04CDF6A8DAD2AB9CF68DB0AFBF0C747" - ], - [ - "0x31B87CC34BCFD1671387493468C599DF7F803173D74D8650E209F43E1C0ACA26", - "0x2178B092709DA93CB6FE8945A0A023446E77FE2888F56D086B2620CA43482989", - "0x0BD9CA9B9ED4CB99402215319C0C747D19DFD234B51C21052626C55285A14A35" - ], - [ - "0x12C4E4EA37694C3128675ED4ED5178A226A1149DBAFD844BA86D7DFE5683D017", - "0x11FFE766EEC336ADA1F3E48BBFB7068975EBF9C862DBA6A2B6814DE1B17F99CE", - "0x21ED8BCF6FE52F6E9AD232743EFD96558D5981BEB9993D3D9F63E388EA75325B" - ], - [ - "0x3935C6CC732AD96CC4BDE4FADE56C2D8440FB6E06A3CCEDDE957A92535032EC7", - "0x1A0D7707F3F4B56B305CB8573670C6A9624D201F1AD614F99E82D6BE083A324A", - "0x03A58F4136FB2F933CA4C8F3D8C70926DCEA19DF02C620A4B04CAC0DEA59268F" - ], - [ - "0x2F021D9044DA3FD1980E3FCAE079C2BE562B0460B2095CD7FE53BCAC675AE231", - "0x29507BB040F9DF65FBE853BE4808CB5ED6933E0BBC480009166626C2012110B6", - "0x332ABF8204A77F9F60524D7A6B715E4E44D7267C8E2C37ABB319389A838C67B8" - ], - [ - "0x3B606270F77C55DA603BA65F59A7D8AD820FFA6460CD57C4F296BCD5D59DB280", - "0x3A4EC529EF1396B61729FD7D71F9CA978EAAC0F0E46CB7AD74E3EE07A7E41504", - "0x1BEF91F54EF97C75C039C755A3FA075132F7F160EE98A398D7BFAC2C4E46E6BF" - ], - [ - "0x12A5402E3A010C9C724ED83158569BFDB2BF8172EE328167B0B331286848CF62", - "0x099BB40E3EF90873379DB86DAF6854397A3225E6D06E896982888397C9F680AD", - "0x22D4BC72570F851C70A49CD83553F8A540EB1FB151550679AEC983D8435C884F" - ], - [ - "0x00D29F904952A8B8801C42242CFBBE33D855A8DBDC5DE79878816C46DE2CB0D2", - "0x2A2D151D6758B09789AD9C3824A04A278DCE20D88D000E77067C91F72928BD24", - "0x2DE5FBFE052A9F217CF874171F4152F21CBD46B35094C0E45EA87568DD09B9DA" - ], - [ - "0x29E5B6C8B6391855FE801D9EDAB537BB954D253067DC525903C15D0977A9E18C", - "0x093FACB61E672BA7FF8FA29D592D032C3E747A7096A81FBFA0D5F06B63581E0C", - "0x0EB53B5EF89750E63BA41B37A80A6C4257F232666B56DA022B1C03F599D0A60C" - ], - [ - "0x32E4DC080D1C7615E50EF829586D2BF14C5E464F240CABF58E19B08CFABC0A2E", - "0x1DAB6E60705C3C69761D755993AB4847C328A6AF1CAD5933446E0D8DB3DF55E8", - "0x15AD227F42F6F952B61029E08CB2C4C532EC9A337C0E97B75ED156B020F8B844" - ], - [ - "0x3D4EE89F1687996490D7CD1D013FD01A3BD3E56ACC9C7D7CBD4579076C92FB05", - "0x03492668EBC8A2EDC31B87D57BD1B5F4E8387C64CB363BFECFC0B6B51BABF516", - "0x2B4324A6DD3FE6FD5927C5C63415FF16B937895164EC385D735347A31EF01658" - ], - [ - "0x1824A74D01DC0A2AB4894F563856590EA00690C4F91CF35A3DD21503D7E68913", - "0x1554C2B1CB91570743A61CDD9B9CAA80FDBE1999B9AA887DFD8D17901BCEEDE2", - "0x2351B3443D12A2EB2BD750DC768746C6659BDA984CC20C85717780161B40F127" - ], - [ - "0x12E2B47DB7D0C28A6B759B23FD4A98502A6F9EF5CBAAA454B8CD9C8E29EA63E9", - "0x3AF5DE3BE492B9B523826727118126381723665DC275025076A525FC1F4EC55F", - "0x3BC89BF27070B5543AF914816E83EADFF41C99395C1A69464EE4AE92F3D39CCA" - ], - [ - "0x2D0DD51EB9039833E28F3CEFB3C2835EFEA54FC44EA50069077A41E48D9A08F2", - "0x0F9B2BAA461E4517E746407FB9294ABFE812EDC187924A8FEFA3C018C574557D", - "0x13480C27AF2F3D566F425801409CB1A622556479D710C57AC05E91E35C3C157B" - ], - [ - "0x39507C78A3F4B3920F436BB3AD4F2212F4B439F6664B8C9960C2E62A4F23E4F2", - "0x146EAA18B99426EC181D9200D05133FFAFE438461A381100712445A4BCBE8DAD", - "0x3A209B2A72F7FD10761E193EFCC27459CC0FACA295DDB6C111A837715E6FA246" - ], - [ - "0x1EC8F808EDEE6ECB6D9E61757D209080C06DFB45C2931C0C0362340F6577F5BF", - "0x38EF39FE211ACB79AEF324DA4A879081C550106468C5B5C3908207913B15CCB0", - "0x263B21551B02324D080E7CC529191E4D3DFC96BFF43EAD5E9E714CE8CE4BCD53" - ], - [ - "0x0376B63EB3C6B87270B7BDAD69C38222BB92A56BE6321C936DC41512838A1F01", - "0x07E2405013E27AB331FF4A6DDA69F9B664FF6C5ED431ACC4397963D33D711D79", - "0x1D70DA9E06331C7A4F46CF28DCE4751D99CF7C1946FC7EB388078A65CD96E796" - ], - [ - "0x11DCD3F3BD7470BA5866EB6E2A7053E2E84F190082450A8E85460DB620D178E6", - "0x39FE15526C8B6F4C0E94B3FE43A0239C2E9B9C08C72AB36B58F113F0158D5E65", - "0x28326332E4FE4030549D02BE3F2DE5953955FDBDCADDC07350F8BEEC98393AD9" - ], - [ - "0x23DEE0888E3083C838A1121C9A52F02146BF285B919A41E541518EC0F6637538", - "0x13A51253E619940AFD9C60057CCD38BA6ABE6E587D79D555118BCCCF791D3B13", - "0x103740816CFF7D7B3E81F40F399760C017494784CCE480228260438A6373658E" - ], - [ - "0x2AAF94E60D2827F0F12EF8E49D7F17DDDA63FEBD8B78234AA676290010F0A8E9", - "0x067352D72A94532910FA9BF276AD41FE7F358F4049109C773A1E73BEB2751D81", - "0x2775D253154D448D2F559257B6C5FCB48314F206251289D3793BAE8388FF8471" - ], - [ - "0x0D01B466E5690F324A2A8D4E0084F68F3162135225D26FEEED53CD72C0F72DBB", - "0x29C5B6588B3707ED9AFDEEBE526568C048A2FEC01A67F70FC8A114B8B3B61252", - "0x2AC9DBB76E9B6ABD272DBD6604E59E5E5CC64E72D3DC400B9101715E56202CD4" - ] - ], - "mds": [ - [ - "0x07405428899C89D59533BA4B8BD8E0B26545FD51AC9AC1B215C6E7117C528CE8", - "0x16B44E3F5218106F73FE22953626D0FF0981A77CFC1C2BBE38577D03E4E25792", - "0x1B92EAE33B55CBF1BFBDB1CEE512B4E3079E7BA3127EB0831514AA35D31197EB" - ], - [ - "0x09198930A83ED2A6A537B7E5292C836FA995B4DDF120D7DF88A35EA85025E7A4", - "0x1455337B6D02B2275F1F80726DEA2846205AB90B577BD72AB85450717E872DE4", - "0x177D284F4A3636527C3D1D2119E0D75531790A18609CB4C06CB4DCEFC469BDF8" - ], - [ - "0x05AEAD2F744320DFF818101024410FF89FA1DE958067E6E1ECF2934981B1469D", - "0x1EC7CA25EF51B5AFCB0678588EC537BFB36471F15BD736CCD5DA3339E286594E", - "0x20CB4C2CF091A1304538D56D1D905F6DD45B4DDA06E70C333F612EF3CBBB7D37" - ] - ] - } - } -} \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/kimchi.cpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/kimchi.cpp deleted file mode 100644 index 0f2bc627d3..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/kimchi.cpp +++ /dev/null @@ -1,305 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE pickles_struct_test - -#include - -#include -#include -#include - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::zk::snark; - -BOOST_AUTO_TEST_SUITE(kimchi_proof_struct_test_suite) - - using curve_type = nil::crypto3::algebra::curves::vesta; - using vesta_verifier_index_type = zk::snark::verifier_index< - curve_type, - nil::crypto3::zk::snark::arithmetic_sponge_params, - nil::crypto3::zk::snark::arithmetic_sponge_params, - nil::crypto3::zk::snark::kimchi_constant::COLUMNS, - nil::crypto3::zk::snark::kimchi_constant::PERMUTES - >; - - template - boost::multiprecision::uint256_modular_t get_cppui_modular256(Iterator it) { - BOOST_ASSERT(it->second.template get_value() != ""); - return boost::multiprecision::uint256_modular_t(it->second.template get_value()); - } - -// make_proof function name is similar to crypto3/marshalling naming style - - zk::snark::proof_type make_proof(boost::property_tree::ptree root) { - typename zk::snark::proof_type proof; - size_t i = 0; - std::string base_path = "protocolStateProof.json.proof."; - - auto best_chain = *root.get_child("data.bestChain").begin(); - i = 0; - for (auto &row: best_chain.second.get_child(base_path + "messages.w_comm")) { - auto it = row.second.get_child("").begin()->second.get_child("").begin(); - proof.commitments.w_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - ++i; - } - auto it = best_chain.second.get_child(base_path + "messages.z_comm").begin()->second.get_child("").begin(); - proof.commitments.z_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - - it = best_chain.second.get_child(base_path + "messages.t_comm").begin()->second.get_child("").begin(); - proof.commitments.t_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - // proof.commitments.lookup; // TODO: where it is? - - i = 0; - for (auto &row: best_chain.second.get_child(base_path + "openings.proof.lr")) { - auto it0 = row.second.begin()->second.get_child("").begin(); - auto it1 = row.second.begin(); - it1++; - it1 = it1->second.begin(); - proof.proof.lr.push_back({{get_cppui_modular256(it0++), get_cppui_modular256(it0)}, - {get_cppui_modular256(it1++), get_cppui_modular256(it1)}}); - ++i; - } - it = best_chain.second.get_child(base_path + "openings.proof.delta").begin(); - proof.proof.delta = {get_cppui_modular256(it++), get_cppui_modular256(it)}; - it = best_chain.second.get_child(base_path + "openings.proof.sg").begin(); - proof.proof.sg = {get_cppui_modular256(it++), get_cppui_modular256(it)}; - - proof.proof.z1 = boost::multiprecision::uint256_modular_t( - best_chain.second.get(base_path + "openings.proof.z_1")); - proof.proof.z2 = boost::multiprecision::uint256_modular_t( - best_chain.second.get(base_path + "openings.proof.z_2")); - - std::size_t ev_i = 0; - for (auto &evals_it: best_chain.second.get_child(base_path + "openings.evals")) { - - i = 0; - for (auto &row: evals_it.second.get_child("w")) { - for (auto &cell: row.second) { - proof.evals[ev_i].w[i].emplace_back(get_cppui_modular256(&cell)); - } - i++; - } - - //proof.evals[ev_i].z.size();= get_cppui_modular256(evals_it.second.get_child("z").begin()); - for (auto z_it: evals_it.second.get_child("z")) { - proof.evals[ev_i].z.emplace_back(get_cppui_modular256(&z_it)); - } - - i = 0; - for (auto &row: evals_it.second.get_child("s")) { - for (auto &cell: row.second) { - proof.evals[ev_i].s[i].emplace_back(get_cppui_modular256(&cell)); - } - i++; - } - -// proof.evals[ev_i].generic_selector = get_cppui_modular256(evals_it.second.get_child("generic_selector").begin()); - for (auto s_it: evals_it.second.get_child("generic_selector")) { - proof.evals[ev_i].generic_selector.emplace_back(get_cppui_modular256(&s_it)); - } - -// proof.evals[ev_i].poseidon_selector = get_cppui_modular256(evals_it.second.get_child("poseidon_selector").begin()); - for (auto p_it: evals_it.second.get_child("poseidon_selector")) { - proof.evals[ev_i].poseidon_selector.emplace_back(get_cppui_modular256(&p_it)); - } - ev_i++; - } - - proof.ft_eval1 = boost::multiprecision::uint256_modular_t( - best_chain.second.get(base_path + "openings.ft_eval1")); - // // public - // std::vector public_p; // TODO: where it is? - // - // // Previous challenges - // std::vector< - // std::tuple, commitment_scheme>> - // prev_challenges; // TODO: where it is? - return proof; - } - - vesta_verifier_index_type - make_verify_index(boost::property_tree::ptree root, boost::property_tree::ptree const_root) { - using curve_type = typename nil::crypto3::algebra::curves::vesta; - - vesta_verifier_index_type ver_index; - size_t i = 0; - - // TODO Is it right? Is it a good way to set domain generator? - // We need to assert, need to check that the input is indeed the root of unity - - auto d_gen = boost::multiprecision::uint256_modular_t( - const_root.get("verify_index.domain.group_gen")); - auto d_size = const_root.get("verify_index.domain.log_size_of_group"); - // std::cout << d_gen << " " << d_size << std::endl; - ver_index.domain = nil::crypto3::math::basic_radix2_domain(d_size + 1); - // std::cout << ver_index.domain.omega.data << std::endl; - ver_index.domain.omega = d_gen; - - - ver_index.max_poly_size = root.get("data.blockchainVerificationKey.index.max_poly_size"); - ver_index.max_quot_size = root.get("data.blockchainVerificationKey.index.max_quot_size"); - // ver_index.srs = root.get("data.blockchainVerificationKey.index.srs"); // TODO: null - i = 0; - for (auto &row: root.get_child("data.blockchainVerificationKey.commitments.sigma_comm")) { - auto it = row.second.begin(); - ver_index.sigma_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - ++i; - } - - i = 0; - for (auto &row: root.get_child("data.blockchainVerificationKey.commitments.coefficients_comm")) { - auto it = row.second.begin(); - ver_index.coefficients_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - ++i; - } - auto it = root.get_child("data.blockchainVerificationKey.commitments.generic_comm").begin(); - ver_index.generic_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - - it = root.get_child("data.blockchainVerificationKey.commitments.psm_comm").begin(); - ver_index.psm_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - it = root.get_child("data.blockchainVerificationKey.commitments.complete_add_comm").begin(); - ver_index.complete_add_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - it = root.get_child("data.blockchainVerificationKey.commitments.mul_comm").begin(); - ver_index.mul_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - it = root.get_child("data.blockchainVerificationKey.commitments.emul_comm").begin(); - ver_index.emul_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - it = root.get_child("data.blockchainVerificationKey.commitments.endomul_scalar_comm").begin(); - ver_index.endomul_scalar_comm.unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - - // TODO: null in example - // i = 0; - // for (auto &row : root.get_child("data.blockchainVerificationKey.commitments.chacha_comm")) { - // auto it = row.second.begin(); - // ver_index.chacha_comm[i].unshifted.emplace_back(get_cppui_modular256(it++), get_cppui_modular256(it)); - // ++i; - // } - //i = 0; - // No member shifts - //for (auto &row : root.get_child("data.blockchainVerificationKey.index.shifts")) { - // ver_index.shifts[i] = boost::multiprecision::cpp_int(row.second.get_value()); - // ++i; - //} - - // Polynomial in coefficients form - // Const - ver_index.zkpm = {0x2C46205451F6C3BBEA4BABACBEE609ECF1039A903C42BFF639EDC5BA33356332_cppui_modular256, - 0x1764D9CB4C64EBA9A150920807637D458919CB6948821F4D15EB1994EADF9CE3_cppui_modular256, - 0x0140117C8BBC4CE4644A58F7007148577782213065BB9699BF5C391FBE1B3E6D_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256}; - ver_index.w = boost::multiprecision::uint256_modular_t(const_root.get("verify_index.w")); - ver_index.endo = boost::multiprecision::uint256_modular_t(const_root.get("verify_index.endo")); - - //ver_index.lookup_index = root.get_child("data.blockchainVerificationKey.index.lookup_index"); // TODO: null - //ver_index.linearization; // TODO: where it is? - ver_index.powers_of_alpha.next_power = 24; - - i = 0; - ver_index.fr_sponge_params.round_constants.resize( - const_root.get_child("verify_index.fr_sponge_params.round_constants").size()); - for (auto &row: const_root.get_child("verify_index.fr_sponge_params.round_constants")) { - size_t j = 0; - for (auto cell: row.second) { - ver_index.fr_sponge_params.round_constants[i].emplace_back(get_cppui_modular256(&cell)); - j++; - } - i++; - } - - i = 0; - for (auto &row: const_root.get_child("verify_index.fr_sponge_params.mds")) { - size_t j = 0; - for (auto cell: row.second) { - ver_index.fr_sponge_params.mds[i][j] = get_cppui_modular256(&cell); - j++; - } - i++; - } - - i = 0; - ver_index.fq_sponge_params.round_constants.resize( - const_root.get_child("verify_index.fq_sponge_params.round_constants").size()); - for (auto &row: const_root.get_child("verify_index.fq_sponge_params.round_constants")) { - size_t j = 0; - for (auto cell: row.second) { - ver_index.fq_sponge_params.round_constants[i].emplace_back(get_cppui_modular256(&cell)); - j++; - } - i++; - } - - i = 0; - for (auto &row: const_root.get_child("verify_index.fq_sponge_params.mds")) { - size_t j = 0; - for (auto cell: row.second) { - ver_index.fr_sponge_params.mds[i][j] = get_cppui_modular256(&cell); - j++; - } - i++; - } - - // TODO: Add assertions about right size of - // fr_sponge_params.mds, - // fr_sponge_params.round_constants, - - return ver_index; - } - - BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { - boost::property_tree::ptree root; - boost::property_tree::ptree const_root; - // Load the json file in this ptree - std::string test_data = TEST_DATA; - boost::property_tree::read_json(test_data + ".json", root); - boost::property_tree::read_json(test_data + "_const.json", const_root); - - zk::snark::proof_type proof = make_proof(root); - vesta_verifier_index_type ver_index = make_verify_index(root, const_root); - - //group_map g_map; - //BOOST_CHECK(true); - // TODO :: verifier should work correctly - //verifier::verify(g_map, ver_index, proof); - } - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/pickles.cpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/pickles.cpp deleted file mode 100644 index 391c0bbe53..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/pickles.cpp +++ /dev/null @@ -1,1940 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2021 Mikhail Komarov -// Copyright (c) 2022 Aleksei Moskvin -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE pickles_struct_test - -#include - -#include -#include -#include - -#include - -#include -#include - -#include - -#include -#include -#include -#include -#include - -#include - - -using namespace nil::crypto3; -using namespace nil::crypto3::zk::snark; -using curve_type = algebra::curves::vesta; -using group_type = curve_type::template g1_type; -using scalar_field_type = curve_type::scalar_field_type; -using base_field_type = curve_type::base_field_type; - -constexpr static const std::size_t PERMUTES = kimchi_constant::PERMUTES; -constexpr static const std::size_t CONSTRAINTS = kimchi_constant::CONSTRAINTS; -constexpr static const std::size_t COLUMNS = kimchi_constant::COLUMNS; - -BOOST_AUTO_TEST_SUITE(pickles_proof_struct_test_suite) - -BOOST_AUTO_TEST_CASE(pickles_proof_struct_test_suite) { - zk::snark::proof_type proof; - zk::snark::verifier_index index; - std::vector> w_comm_unshifted = {{ - {0x37D59F0CA7295B0B8C8A658A848933E8EE65F1524C1D2FAD1A2BBEBA01F34DB5_cppui_modular256, 0x38BE9AFC02BE5C46B256233C81A668AF9F96B8482E6DCC09C96A70DDDF442FEE_cppui_modular256}, - {0x2091BF5506C80B75CA58F2A7DB834C2EB165472D0B2A81BE8021BF9A9CCA5AA2_cppui_modular256, 0x39F8E74CCED923CC68A42FE5BADD44A606F0F534A52DB0931DECF6AC8DC11A39_cppui_modular256}, - {0x15D23E10A563E84D239600A75B11523D4522B2C251FD75B0BC517D62676EC397_cppui_modular256, 0x14978858398AF358CE60C21B331E58E7617A5FB7D3F3D25B0079945905FA152C_cppui_modular256}, - {0x3C2AE60A1169863541F6435E895B2BFED6BE488027489194B9060F246F228781_cppui_modular256, 0x0C593145B42D87F2F6BFA525E53F6F70BF70ABBDDAF7DC2328A7C4E62429DC2D_cppui_modular256}, - {0x1D66359053B1B305F65D69FEA147CF182C4D8E1130EA6F3D0224952AEB9A88CD_cppui_modular256, 0x28759D87B74BF16443700034A42A7E7AC307FE949992B59BD3C57A3A6B2F8EC2_cppui_modular256}, - {0x297F2B9076E473E9BF3A385F1BCE10480E65CA640B08587E059AF017AB8D4172_cppui_modular256, 0x12EB28BE66434FF49E5F897066CE07F492C21983DE7961575B894DE46DF0E341_cppui_modular256}, - {0x3D40963F63F238DCA50026C01F6A7A265165624E956FBC16578D8ED303A68EC0_cppui_modular256, 0x3E269040E3E7BDEF490CEE6B0CAA3425367E777A8E18E9B5641E6BB1931EE690_cppui_modular256}, - {0x238BD7EBC99EAB0458C81D7D2F3601F3F8F2DCE5D8C9ECFA84D9156B268920B9_cppui_modular256, 0x3E76531982AB5721C2A843667FEA035E5CF0CC46E09764E8CA0E490F5F71C616_cppui_modular256}, - {0x31A91EC4F6FBA9193F10385AFAAC0631A9E062426BED82DEE9F70464DAFEDB27_cppui_modular256, 0x364F995D1C7B1ACC8FEE6612FFA89B4499F3AC6B7A52898B99F2648F15116000_cppui_modular256}, - {0x3EBF8308C09A54C9F828658CE46562DAC696F0C455F5ADFA6437DAA49328AAC6_cppui_modular256, 0x177B5E81A8C2BCA234C1BE2D06A43463B41D58D8C8A1426B58FE8EF2CBD19E84_cppui_modular256}, - {0x02F7E5219B5F53DF4FE489F9827D79DCBBCBC43BC0F11403B6F9F9AB0F2D5287_cppui_modular256, 0x0F1326405C0DDE95C8DB9D90A8983CE7F549ACEE1791AEDD15794FA7FEDF56BB_cppui_modular256}, - {0x310126DE51CA0F4E88A15B5192F2E10645B3D3FFEF137609805B1D112ACEAD93_cppui_modular256, 0x2AA8D27909092417B8513EBF43E3B2F80D6212C845BFCD79C5E76343D1047581_cppui_modular256}, - {0x36FB4AF93A11A17EB064DE001D7BE84D6F957539B66243A31773CE1254672FD5_cppui_modular256, 0x3D750F7FD0EBF2A251C123870D94305A357A2AF90232FF3DD613B28B6C95B152_cppui_modular256}, - {0x14D1F0BEB1F9E03A7C0D2D137318E9EC825F445FD62E533C758C120597159648_cppui_modular256, 0x1829116C05DB93863741AFEF107AD3DD16CDEBAB91D0800E059D51696F4FB1F0_cppui_modular256}, - {0x1AFA3C262588E880CD82B938F1DC48E209A170562F480B9FFCA27B4CFFF9C5BD_cppui_modular256, 0x1EF02FAAC420520FAEEC93CE20A41639AE47B495035EB70A7E09953B9EB05E3C_cppui_modular256}, - }}; - - std::vector w_comm_shifted(COLUMNS); - - // w_comm - for (size_t i = 0; i < w_comm_unshifted.size(); ++i) { - proof.commitments.w_comm[i].unshifted.assign(w_comm_unshifted[i].begin(), w_comm_unshifted[i].end()); - proof.commitments.w_comm[i].shifted = w_comm_shifted[i]; - } -// // z_comm - proof.commitments.z_comm.unshifted.emplace_back( - 0x02D12945583E0CE5C20142E1DB4B19A8E644BCEE07F25516941DB26A38E1EA5D_cppui_modular256, - 0x36F230B302E081E88BAEB5B3FD213D99CAD1CD7E8B2A2483B05FBA2D414155DD_cppui_modular256); - - // t_comm - proof.commitments.t_comm.unshifted.assign({ - {0x110D9EF8090D154F6EFF13AC56AABA47F74566FFE37ACD28620A2B20E4F6F103_cppui_modular256, - 0x26E410DBC25C6D70806230921A18EFCF8CB5118B86D107DF470B52CD3F886768_cppui_modular256}, - {0x01EE59DAF6AB1C13AF0D05909EFD17A1C032956371384A0AD9555E42A6E52AAF_cppui_modular256, - 0x2ABDF22ED010D9A34FCC62D43B3B06432976EAF2855A1AD2292F189E45E0A0F9_cppui_modular256}, - {0x3FA91D5BC8AC02F5E88CE34492E06354C8FB35E2FB635EC0D6E7DF97DB2FDAB2_cppui_modular256, - 0x30F90A99F0EA41BFA466310309F220FF4C3442878FBC6A0EDDCC1D1C1B5B9AEC_cppui_modular256}, - {0x37962BA26AB78DA50CD54712604EF151EB45AF2A3903D77129495E7ECD6CFF65_cppui_modular256, - 0x1BD455ED670C7C422A6A2B179411D014EC970B2AFB3491AEEC09DF613B47DB1D_cppui_modular256}, - {0x1EB582AA419C591322EA6295EE6E028CAB38DAF13F611EFFA7C605369253E561_cppui_modular256, - 0x0BEF30013E760029F68C81BCA30D73BC09F7F9BB8F632F2CB438783834D854A1_cppui_modular256}, - {0x2CEF8331B908170318C146626953800A8B0B3DDFA060B6BE9C1303903004A10D_cppui_modular256, - 0x1C381FC7E8A986E28DE8E254FE335019EF0B016E9EE74118FB1D38FBD6C611FF_cppui_modular256}, - {0x0A8C3CE07FC7DABF928F064376C201AF936AC5501AC32E08B87BC6C3D02B4703_cppui_modular256, - 0x14740C6D1C4984E1049CC26F7F1C8AD4605C3BB32C704214CBD9F845E8E24635_cppui_modular256}, - }); - - proof.proof.lr.assign({ - {{0x0097DDEE3FC1597E4CA77260AC311372574CD19B0E48466745DDA9A5927F9525_cppui_modular256, 0x114F2A66D1AAE2C1A0ADA357F7F454DD4BD6722A0C747C84712CD498EEC814D1_cppui_modular256}, - {0x30C7AE3DC6B1BA3E35385FEBCEFE39DA16D4ACF77780B098387B1450D4773D2E_cppui_modular256, 0x1F3CCD56C3D0523F675FA85361878ECC6A69C5D833408DB32E16F78C6733BA10_cppui_modular256}}, - {{0x17F3C28356AB5AF3FC69DF809114E10081FD01DAFE81F26A2538223033258FA2_cppui_modular256, 0x2361848DC301E6534FEECE2CCF9FF176BA15C57C5011EBCC05C8B663EB4D2D8F_cppui_modular256}, - {0x2F05F9AC607AB4E99E2B2A25D1B81A677FC58AE964B6C58F8DF7348F0798D28C_cppui_modular256, 0x3DFD1D28554A0787E24FCD989A3C0B8D957DB7094FE7CA54F849DCC7DDE42D0C_cppui_modular256}}, - {{0x2DC7573E0F46A4EA37CBECCAD3DE5C2E2150956C85111805C57EDA0F6B62F064_cppui_modular256, 0x33CA15AA795016559B5E00380D4931E35809D9A1F574063B7BEB6AC195CB9F8B_cppui_modular256}, - {0x24689817A7690449627E6FE240CBAFB2BEA71D2FC6825BD7EE4B29B5339AA457_cppui_modular256, 0x29308F028040D033813FBDF844C0512F4472440CE72C44B241B03D776AF8178C_cppui_modular256}}, - {{0x3C289CD39608326A27B949CA9332C4B7F3A9F82668E2A8DFC187952A6ECA4734_cppui_modular256, 0x2AB833558061F365CA621F5E570953AD5BBFBF45809B245C8D66D0CD00C9C8D6_cppui_modular256}, - {0x22A6D04A1964B9B54F5183648117CD67FCAF9AB2B0D926565D725B87108F586B_cppui_modular256, 0x36016051DA2BA6FE1D8BE3A614959AE431B3DC9F543D4CC3E6526A843FD3F668_cppui_modular256}}, - {{0x3C4DE244A5E4B969BBB3BA8A41FC1076FBF8FCD1174AB350AB9F414B2B5F02B7_cppui_modular256, 0x273F19EDC54275DF166E3A80D3F8BBCE48C67F49154C45D576F5838E59049401_cppui_modular256}, - {0x1A6C28E8E8679AE8998192577C2FA9B5ABC67FFE84ADB63D4F655960ADCA06C3_cppui_modular256, 0x16A0AD9FE756A1285C0F151EAB8E8C90A84862E3C3B552BF11BD473FDF42AEA5_cppui_modular256}}, - {{0x25DB17042CD86EFBF52B129CF874E093D0F6930D6D9B91A1874954B8E2F89DAC_cppui_modular256, 0x1790B39E7FF4D2C2D40ACF986D32EAC3D0C8CA6024555867BE258A9F581D68A4_cppui_modular256}, - {0x213853D57B0E3FD0D663149C5DE7A1CDC9B4796F946D33BCFC5731A1FE262D76_cppui_modular256, 0x0D6156942605E3AD61EAE4D43D60434B1351B2F1817C9E322F7A0BD78EA0E7FD_cppui_modular256}}, - }); - - proof.proof.delta = {0x1841D56E15736C31F97ADAE3DCA7B0C7EFDDB800C6AD958C8C317206C00DC72D_cppui_modular256, - 0x371285C1D5F12E0C32C4913C64678ABC8947C5D61BE6C7D0AB102CBF4E955893_cppui_modular256}; - proof.proof.z1 = 0x0F55A25FD477DB4D5486AD5B7FDECD3BA87AEABD8FD8EB81158D68CE342AD400_cppui_modular256; - proof.proof.z2 = 0x35E29FC28BED57075811257A7182C30C0273CB460AF5212E14B5D47C6B820E9E_cppui_modular256; - proof.proof.sg = {0x22202A4EE86A05EAD5695178EC52EE4B27B162B4A41AA26D2181BC8BE7620F2F_cppui_modular256, - 0x195B0A20E4C1CD6840DF5B0937CB00CA9C10AEB7B2A05C8721D5571ECBECAA7D_cppui_modular256}; - - proof.evals[0].w[0] = {0x218C1B364EAB7D60FB30A1D1865BB51B9EC1BBD61308CAAE14244A054B122E93_cppui_modular256}; - proof.evals[0].w[1] = {0x3E72A7C4AB5A497B6B4C19E2F4BDBFDA667526DFF7310B59053536560A5B69B1_cppui_modular256}; - proof.evals[0].w[2] = {0x2E678A3459123FBCAB752483B33EE996CDE93AA456A77AA68EE2B392E85A8AD3_cppui_modular256}; - proof.evals[0].w[3] = {0x15051A7601CC5949B5CE177941BA55869E860C39C9DE872387958B8907979BCE_cppui_modular256}; - proof.evals[0].w[4] = {0x0485A39322005BF5C7A01501646A1CAED8BF7BDF3EBBF563D7E38DD59EED4C1F_cppui_modular256}; - proof.evals[0].w[5] = {0x0AC812E8C385BF25F1CB39E9F5081567AA21329558BE4DD1A9108344C23184BD_cppui_modular256}; - proof.evals[0].w[6] = {0x3FF83F99525275EFE8A9BA42F177E083ADDF4618AC5981BB99510FEE28384A24_cppui_modular256}; - proof.evals[0].w[7] = {0x14736CB71FEDE1E1F004BC88D20A9897F5DE9E48C06B22536450EA9CBE66BDF3_cppui_modular256}; - proof.evals[0].w[8] = {0x3E0A7FD54262D5A95C13E98950C29412D2D70C410F294958A2D3876C1C59B6BE_cppui_modular256}; - proof.evals[0].w[9] = {0x298284D82997B6D9814B8643C976B43601DE36E710C2A67CFDB83AADA8532744_cppui_modular256}; - proof.evals[0].w[10] = {0x0D478CF727DADD5E084A9077F49EEFFE9337E7FF43B079617BBAE51A67ABE0C6_cppui_modular256}; - proof.evals[0].w[11] = {0x3E25792FCB0C4C612C3BC6C772B7E8D74EB844F841D25C766406DD497D594EDF_cppui_modular256}; - proof.evals[0].w[12] = {0x33F1A21853B94B69C3838A5BB737F6795F927047521344F98A9C42EC62131941_cppui_modular256}; - proof.evals[0].w[13] = {0x29BDCB00DC664A725ACB4DEFFBB8041B706C9B9662542D7CB131A88F46CCE3A3_cppui_modular256}; - proof.evals[0].w[14] = {0x1F89F3E96513497AF2131184403811BD8146C6E5729515FFD7C70E322B86AE05_cppui_modular256}; - proof.evals[0].z = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - // proof.evals[0].poseidon_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - // proof.evals[0].generic_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - proof.evals[0].s[0] = {0x0284596D78C52B3B5BA71D1A9A173ABF9E63F9B848C39206169C36B878AF6DDA_cppui_modular256}; - proof.evals[0].s[1] = {0x0614A2627FBCD1D7356FB7BFB33DD7D7C81F761E421B12251672D250A0C2F5A5_cppui_modular256}; - proof.evals[0].s[2] = {0x06170D49F379823E790EE625247E2DCFD100B5B5ACF8A900D86405D09C480A72_cppui_modular256}; - proof.evals[0].s[3] = {0x2E1F15C0649E24B7F3AB4DA6E881866F2E74C11656850F1DDD9EA945B3BFA6A9_cppui_modular256}; - proof.evals[0].s[4] = {0x3725E0A20A90564DACEEBD1B8E4037D9A563AD0105BB87932846E5194F5853FF_cppui_modular256}; - proof.evals[0].s[5] = {0x315BC904B7DBD7D45780562C242882BF93CE41138876DA231D9D0AFB8036CF11_cppui_modular256}; - - proof.evals[1].w[0] = {0x0CE4579CFE87F1D15160DDE1078E01AC2795B12A93D40263C613A3341EF2C27D_cppui_modular256}; - proof.evals[1].w[1] = {0x3728E63BF46BAA60AC6078292280E1FD7F4FB0F85BBD642CB62F4600737A6CAC_cppui_modular256}; - proof.evals[1].w[2] = {0x3C89AC7E8C016AF82E276185E310D5D36E0F3A14202A981C4F51D014569E458E_cppui_modular256}; - proof.evals[1].w[3] = {0x3099E164DFF4B7506A32E0D10119A74A0EE794BB1F4C488EBE192C37BC4E4E5C_cppui_modular256}; - proof.evals[1].w[4] = {0x1A8C403E7B17F751B6C9573DD36C1BFCE6FA6B0C1A51D5759184D63DFF2CB28A_cppui_modular256}; - proof.evals[1].w[5] = {0x092E41B804AA2C03F28EE41EBA2F370C6FD6C1ADBEA08D1C19C50DDF3D7E7154_cppui_modular256}; - proof.evals[1].w[6] = {0x208E4B0B4277B90CE839D21A96E3C68ECA076C6EC3992A7F0D2277E6CC4A9C55_cppui_modular256}; - proof.evals[1].w[7] = {0x3BF1050F00050486620C9ABC34863D8628AAC362EC76BA4234618EC7956EC9F2_cppui_modular256}; - proof.evals[1].w[8] = {0x04E39785D3438752F23993771796047837282E33171C5A62EF1E7B5141855829_cppui_modular256}; - proof.evals[1].w[9] = {0x1B5BA02A80313D49A8D2BFCE1E951A3C795EB2A01A65C193D92B46D61B26ACCF_cppui_modular256}; - proof.evals[1].w[10] = {0x327242E90C704A0EB53538A6F1311E6B8E1DBC86812246DA7597B3AC1A4FF8CD_cppui_modular256}; - proof.evals[1].w[11] = {0x109B911705D2385C5AD5B80ED76D78835971175398C34D2E962C49FB1F3F3FCE_cppui_modular256}; - proof.evals[1].w[12] = {0x39F57515F459363F447611DFF8F54D4A1AF705D7E477086F2154258DCCE6C991_cppui_modular256}; - proof.evals[1].w[13] = {0x234F5914E2E034222E166BB11A7D2210BA365B6026DDCA94134ED0337A8E5353_cppui_modular256}; - proof.evals[1].w[14] = {0x0CA93D13D167320517B6C5823C04F6D75975B0E869448CB905497AD92835DD15_cppui_modular256}; - proof.evals[1].z = {0x359872A0067A0765E595D6AFEB42B023EAC3EBC9735945F780A635A9CC256703_cppui_modular256}; - // proof.evals[1].poseidon_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - // proof.evals[1].generic_selector = {0x1FE86B9FC1DF5F4888F0FA8A83E8B724ABB34455BD297CF03D5DAE3EFC7BD428_cppui_modular256}; - proof.evals[1].s[0] = {0x353E417DD92E1B8C4C2BB40358A4FF43CED6AFDF2218C49867D2C45D1DB174AF_cppui_modular256}; - proof.evals[1].s[1] = {0x109165335DD3FABD6AF198D5E7CC45B4E11356D1A4027B8BC01344356F7ADABB_cppui_modular256}; - proof.evals[1].s[2] = {0x177C41BBAE20A957704CBCD4777244F4BC252BEA68362D9F0B00A22267247C3A_cppui_modular256}; - proof.evals[1].s[3] = {0x34D9D201F2E42D5E3D86CD5C70DF153E472CD9401CE1E1FB9EC742EFF8BEDE2C_cppui_modular256}; - proof.evals[1].s[4] = {0x00C022C8689A0F23EFA00918CCA8ECCB106CB89037E7B034840DCD614E4DECF7_cppui_modular256}; - proof.evals[1].s[5] = {0x0E9A479740A633919DF200A1F25FF75982AFF0749111C1E87EBB69DC2B1A5BC7_cppui_modular256}; - - - proof.ft_eval1 = 0x01AEC83A8925441906ED7C843289815B1F2098EBE21BA2EC9C9BDE738323A79C_cppui_modular256; - - index.domain = math::basic_radix2_domain(64); - index.domain.omega = 0x1868CA50534A180D97FF23A878E088B0B9569C85B0A15D666C23DED157FCEEBA_cppui_modular256; - // std::cout << "index domain size " << index.domain.size() << '\n'; - index.max_poly_size = 64; - index.max_quot_size = 448; - - index.srs.g.assign({ - {0x121C4426885FD5A9701385AAF8D43E52E7660F1FC5AFC5F6468CC55312FC60F8_cppui_modular256, 0x21B439C01247EA3518C5DDEB324E4CB108AF617780DDF766D96D3FD8AB028B70_cppui_modular256}, - {0x26C9349FF7FB4AB230A6F6AEF045F451FBBE9B37C43C3274E2AA4B82D131FD26_cppui_modular256, 0x1996274D67EC0464C51F79CCFA1F511C2AABB666ABE67733EE8185B71B27A504_cppui_modular256}, - {0x26985F27306586711466C5B2C28754AA62FE33516D75CEF1F7751F1A169713FD_cppui_modular256, 0x2E8930092FE6A18B331CE0E6E27B413AA18E76394F18A2835DA9FAE10AA3229D_cppui_modular256}, - {0x014B2DB7B753A74D454061FCB3AC537E1B4BA512F9ED258C996A59D9DACD13E5_cppui_modular256, 0x06F392D371494FC39174C4B70C692B96F3B7C42DA288F6B7AABF463334A952D0_cppui_modular256}, - {0x12CA0E2DBF286021CB76B7C12B6C9AD7FDF1D05F722F6EF14BD43E53E7B92120_cppui_modular256, 0x216A80B79D3995D1F39CE19855C475052D1148ACBDD379FE98961BFBD0A3E428_cppui_modular256}, - {0x1D257C1F4EC9872C9E06549BC910F7B7196F2E7CB120AEC3FDCEB049C7A0C9A5_cppui_modular256, 0x191CBEC20ED5EA342B6B395E92996215F7D93C675DA56A13D548EFB58524D336_cppui_modular256}, - {0x06236026ED7DC19C44540FBAF0C1C3498F82880A34422547FFF519FFF744BB48_cppui_modular256, 0x3A02C5410DABDE160BD09232A14F00B1EF6CD4D6285C90A8D41FA00BFF922F0A_cppui_modular256}, - {0x079333FDE60D3F670068B5A1D486EDDD87DDF91D1E1FC000F387991B4ED848B4_cppui_modular256, 0x3F7FC1A39FD74BDEDC129195080D298CFC2C2CF714BAD9F9334F0DAFB035C200_cppui_modular256}, - {0x069B398C2968553B7987FF840CF0B71359D10F249F08C40898550A63F196D856_cppui_modular256, 0x1B68BB879D6EC4EFAA2207E212B59BAD0D8E5E2493F99BE3F2F24764046CD277_cppui_modular256}, - {0x2CBD65973AE0BE0B9E652CEC35EFE509E1FA8DD8349DC1E644DB494DC2B4FD75_cppui_modular256, 0x1E27B8178E720407694F4EA1413B0CB87AF4058CB308BBD68FF42D5078DE243E_cppui_modular256}, - {0x0F29A22EF6949DE85427F72CCD04E3F8F56837BB56DA17D8FA5DE9025E6B9ED5_cppui_modular256, 0x26A2CD91BD2771E20DECAACDC6CA96E7759668F3D0B7E8810866D27737627A59_cppui_modular256}, - {0x300EE47C831AB28067BFE9364A819C894FA02155C5FC3E94E83A0EAD3110E9E5_cppui_modular256, 0x2D4FD253E12958FD548AC51E62F3158EB3EE8CB10F148F0A44D2C6E562D632CA_cppui_modular256}, - {0x2A9EA5BCE9D10ED951E11E4DE64DED939D1FC6B5DE07DFF33D49861B7DE2EE71_cppui_modular256, 0x0708F926C80F2A68C3F59C8C25D26F29FF90842A7C1BEDE0B1801D7DF258077B_cppui_modular256}, - {0x2DEA83FC8EA7A9727A5F2184EDCBF6A17083C10DACE4F45DADB330CE1624DC8B_cppui_modular256, 0x02DE1252440BF67F0B7A40DE4B7D9157993CE1D0DC47F8D4B3BCF126FBE00E2B_cppui_modular256}, - {0x341DE1D9B175235F492C6DAD8580443D11B12DF39EE95D497935BFF99D4E775F_cppui_modular256, 0x01177651EA542F5402CA5B075C5A2082F5F4EE1D3B054FC97CF7D30758D89841_cppui_modular256}, - {0x37D2BB9884B41B3125444D81C59E8EDA167284FB5D637C9D54B21753830F14A0_cppui_modular256, 0x0D5708EB79051B4704EDB309CDFCA38030CD8B656A5C9051B5C1AFA6B1C30D46_cppui_modular256}, - {0x026A67515EF102D65C7694144B457240C4E3270A0240640A5EAF9B3E7489C54E_cppui_modular256, 0x1B78FD66A3E4A168D0CEC1846F03B1624342491857F9204743A44DE2E90A42E2_cppui_modular256}, - {0x2E2489CBFD8534059574AACD43C137788C54D86B1292CF4B17850EE95F913198_cppui_modular256, 0x10D13EAD8E28E1493325B7DBB89025DA06A8867EE60BCADD1D794A847D871A46_cppui_modular256}, - {0x3FB39F7B1DBD63694D40FC6C105FBD8242908DB2CF82B5F0FACE46A7792CC0A0_cppui_modular256, 0x01DF2D8291BAA5ECFF544683F16F36D8C83078DFD24B5C8C93DFEDA524704750_cppui_modular256}, - {0x39DA705C7CD47D34F9B2E2A7F57200F656A229398E7A0F89A5534D72C8BAA2C7_cppui_modular256, 0x1C5E177C851121F1A90AC844245B7D7D5512C822ABF4AF37213AF5B2EBCED4F0_cppui_modular256}, - {0x0A35295A58443F71E676CE42BA6FC44D4EF1DEB8E9E9C7D537CE4CD453576521_cppui_modular256, 0x3600DA2E2E5D3674E13613871FA8B9A5D96F905DD69114FBF3F69F61D0C57263_cppui_modular256}, - {0x2879FDC5D79EC2FD73D8776DD5ED76F8BC6DA10D4501AA892D11CC02152E33C5_cppui_modular256, 0x06FC48C9C7CF8B4CD94812DC8EE2ABBC4A0775D52E01097E6877F2A1A7547786_cppui_modular256}, - {0x0A3499DB18871CBF14818C2D5152742B4457FDF30DF5936172EDE2FE9A537701_cppui_modular256, 0x0548D846722829A12B1C9C39411DE0AC8C5C2F97C1953432DF60251E0DAE91B2_cppui_modular256}, - {0x25A8F59C1D7C23576952D07640231EEBDE39D9F89BB85110966096D36043DB0A_cppui_modular256, 0x0F6EB10365B419FA5179D3278BC7F834D27AD930AE11674FFC5F00549556DBB8_cppui_modular256}, - {0x1F4A67F9C220741648FBACFAC1934B09C3E903EFBE12DECFA6820656D3778DAA_cppui_modular256, 0x3685316B926A7C4351AB8AB802174B11BF8EBD5999989F0343555D9575CFA3CC_cppui_modular256}, - {0x1ECC9BE71F9ACF900FA6CDCC452550C7991BFC25258CEFACBCF51D541DF2D819_cppui_modular256, 0x0FBDFA76ACB83F9C4DF9337FEC47F38672D31E9EB5406034812E5C21C6494BDD_cppui_modular256}, - {0x2E79A282F86F8FC1B2DB59443975544DD7C92883322C82C2C283DC51A0E34825_cppui_modular256, 0x0118E6A449918C38AA0D290373F1D605DC21B6B5F228C41BFF596C635AF7761E_cppui_modular256}, - {0x3FCD47170790B2A3E85CEAEE44940DACA0E11DD132960092FB2E1613B364849B_cppui_modular256, 0x2859254A7ABFB288138B64009A85178250FD120351634CCD41D9ECE993D9F6A3_cppui_modular256}, - {0x1A29CFD3AF8F7C0F19861362DAC9FD8034F82C2C1750A425B446461B5BC63E4B_cppui_modular256, 0x15E12C10AE7FFF431F6FAAB8EE607386AA85EB7AFB806E264B8952D51404E17D_cppui_modular256}, - {0x2EECD04E0E37FAF9C51C61249470F118C5C5EA8E6DDB4B645F99C47D3BA07F68_cppui_modular256, 0x33E6418DD36692F7EE870BB3577115F87D62E9D257374950A17A3B0154B8B35D_cppui_modular256}, - {0x3BADB4DCEADF739775588552805A959B7D216BFD86847BA54D662B777B2B1FCF_cppui_modular256, 0x0CB8DEE5BE3197C76685F25D4596C766A2DA3542BD89FD9633D7590EA2B68FD0_cppui_modular256}, - {0x3FC5DE9E2422625B53D18E55C069CBCEC9C2D2C4F8DAB5B1BC11D3702F3F5E22_cppui_modular256, 0x0EE46C6ABF41C33D66B60AA4E508CE43DFE02535EF19E158AB66B49D12BD171F_cppui_modular256}, - {0x0172960667016B5FFF7A489C3BC65F38A63FB833A16AC7AF4882A193A1B9E0DE_cppui_modular256, 0x241362235399643C11C8DA0E103B5F17975EB78BF493F02DC9749905CE1E7BA7_cppui_modular256}, - {0x060A1110F23BFB345A81751266E1394C0CF7939CB382AD2387FC0F43B83E330C_cppui_modular256, 0x0403BDFA41BAD631ADE30CFE0EF41ABE17E3F4F02BE4F4394D680BD287D4152E_cppui_modular256}, - {0x0C0411B3AC12207D214F1749F3EB08746DEF500AFD2288417A03CB8C64ADCFDC_cppui_modular256, 0x05A41050D3CC198441E920E2B1D07E9B50E082B65911F4305533BE021269AC45_cppui_modular256}, - {0x136245F44B95D1AC824C6C7F385F8260F6D5C4970FE7AE3C170A37AE6622EB28_cppui_modular256, 0x197FC03FCD4758E4B7D3B28CAF5A94911DB2993EFC37F29DAF39853F58AFC559_cppui_modular256}, - {0x3C542327CCAAFA02BCE394AD125622601ADB4DDF55FF9608F31E352B57BAA272_cppui_modular256, 0x201A3AF528EDABBA05CC0B972DA2EDC9C645596ED0C89306516C93C3724C17E1_cppui_modular256}, - {0x0CBA8DE360D3EF1E92303DAEC903351A356881500BF66686F7990B0BFC9CC4D9_cppui_modular256, 0x33DADFB27017F21BAC0F56BD9AD5A7BE0A5A19A714C4DC982FB480D5186EBBD2_cppui_modular256}, - {0x3BD1FDD3FA99286EC812DBE11FD2B988AE6132BDF17A85C80ED2FD3751A6841E_cppui_modular256, 0x105AFCE44F11C190275BB98AEBFB482BCC0021812EAEA404961584C07660FE1F_cppui_modular256}, - {0x07CFF56D62EEBE6F42B55715F8982558E9F252ACBD39D30362D103EF3C98223E_cppui_modular256, 0x084950454C739DF8CC80BCF70D8B95A0ADF5843244DD1CE5D6A083E993F25E18_cppui_modular256}, - {0x1FBB25E4665F8BAB853FA6F5D416757573D546EF597E5F0479293CF2C2A94A6A_cppui_modular256, 0x197C835ECE76501982D3FC07CF8668B416738EABA5A2B7D47B670A9EF6F1F9CC_cppui_modular256}, - {0x0F9348EE41AD355E13B8EA3E11E9C3310A9BE6202C1A5AD59F644F959A51C2C7_cppui_modular256, 0x0A951D45F026168B6BBE24F6DC2C06E1E835877590215529CCA99ECCB4B22782_cppui_modular256}, - {0x146E17ACFCBFCAEA52213C07111BE2749CEF66F8659DC5C06DD0B03231A92BC3_cppui_modular256, 0x3C43FA8A983391EDFBE6756FE64AA67919BBB049323BF191962A0825B909D86D_cppui_modular256}, - {0x3A1ED0BBD35E9AFBAA00826D113E54F9823AE6344728F4A42BBC9EFFD7074832_cppui_modular256, 0x3C20D27B56210D0FE45A7AC692FE929E0768305A1790DA1E8CB5BBAE24B906BE_cppui_modular256}, - {0x171063605C748AFDF525BE0BBE745017A1105871B955BFD210F56E7AA76852E6_cppui_modular256, 0x07687195D7A46F80CE26DADA430C7824F537641F6C654033A418358383427EB6_cppui_modular256}, - {0x363E263819EEB4997CD47FA7FBC35B47FF78D551BD6ABAB919C8996A63A188BC_cppui_modular256, 0x2334D5A3A1685AA651A300835BE4D863AF5512DAE6A7971465937627C9DDD35A_cppui_modular256}, - {0x19C69BC40754819BE0BE01E22A097FB3911E061F8B1818A55B0FF2BA6952A2B5_cppui_modular256, 0x3B6BCF2566E3A1C894C6AEB801B740F767A51B5F7E931002F5AE385A601129C0_cppui_modular256}, - {0x3471FB5C070BD548AD32FEF8CB1F3F9F0E22CD7380FC7E9739D80304EFE69331_cppui_modular256, 0x3B1B5D6A11C58B24B1E6E69628C50C8894FEDCF4EA42190BB1188803D45F9D44_cppui_modular256}, - {0x177D76562D402928EA6EE3838C20AD6426841D2167307EEC3058C85481DBFFAB_cppui_modular256, 0x3E38C317E2E2B5035DC2E80653768DFC5CA8088DD8C7F2EA04861CF3CDFB6E62_cppui_modular256}, - {0x28BCEA14F64CFD5162DE1066DD22B68A20D49A1BC6FC16E71449573E1B9DC8B0_cppui_modular256, 0x21884B615876855022D0B96B1FDE642B96A11D08D90A23BC96A78BE5D1386AF9_cppui_modular256}, - {0x01EBE18E65A82CD77E7F442D534D2DA483BB6723E0B5D4B874A67E318532B0E1_cppui_modular256, 0x14E7278F16C6153C09706C2CC1D608FA47253B5F2AE0900574FEAFBE1378E26D_cppui_modular256}, - {0x366A1904B0AF71A6AFD2AA761C79B98985F39F6097CA440F5CE65563FE0B1E06_cppui_modular256, 0x2A00227D98A2C2E75EB8FA537141585C13181744CA41680F12B9703B5187AADD_cppui_modular256}, - {0x21DF93F25B9A4383F9004C8252C2D0AE2BAE44E7A6D2611D737D85FDF0F5FEAB_cppui_modular256, 0x05D8D88A4A1A9F22FD14BF7D5EC1C10ABE794B84C3871028A3DF69AF48F19193_cppui_modular256}, - {0x3A25707AA4604A4E0DB2E250BF60008BC5E3F33C77B8DF183F7AEE9294504B91_cppui_modular256, 0x2870F2ED277AA0CFBD81A4EAF3E8737589B15ECB81B0FA063656D5C445795646_cppui_modular256}, - {0x2653831E973B7D7C77C45F31C2A7209B2F6C353C731EB9128B692E5447EF42F2_cppui_modular256, 0x3C9017F46FD225938BD8F7DEE085C42C069905C4F9AD7612EFB2997C95E5238E_cppui_modular256}, - {0x08A413C57382ACF055DB927E2ED34CCB8259C7290FF8400EACFD6BF16308BC6F_cppui_modular256, 0x398990AF4D3FEC325BE1E6A3D0A8AB183D494112B9B0FD8A7AA92E2FD7741794_cppui_modular256}, - {0x02E242BDEA7226C5ADAFCC278015F469301BF4C9A4F8687FF9CDE09EF3D8BC38_cppui_modular256, 0x279D5FA5CD209F89675257B185659B89F548EBEE2865A0DAE1D12929DDD36DA8_cppui_modular256}, - {0x3C58D4342E718537E4231F3502A39F3724A03C07E5B3D68AC291E645BD4EA9C3_cppui_modular256, 0x314E911944450CE2050DD050EA72550D64F0A7FD9F1C47CD31EB1E4D19DAA8F2_cppui_modular256}, - {0x3DCE5FCF09DE55C8BC95BBDB2EF08BCD558361AE86455746DCBA6FD142513627_cppui_modular256, 0x1D461F17B4A16512A3908E117011D151E8A15354AEEF357652A7B541C9FA220F_cppui_modular256}, - {0x1371BAD9CCDDA06E18DCD9C23551DC89CCEB8D323395D8B3D83B3D0950B4A20D_cppui_modular256, 0x3CE57B893A3BD3666EAD668622B901F6E25A1B3D359642251438CEC04BB38570_cppui_modular256}, - {0x2102942CA851EF0ED89CE016C172D6EBFB72C7110A04D50B27EC230143914714_cppui_modular256, 0x02E9DBF7C11BC61F61ABE7648195F851543040551808C81E6DFE424D2D701F40_cppui_modular256}, - {0x33F626F2BDDF65045480FDF7CD921CA42254B8F4FBEEDC68D751D7DFF48AAF9A_cppui_modular256, 0x3640D5780FE1EFC6391F777B6ED6B09B7EBFAAA9B2CC0B6AF6E3BF7B572EBB79_cppui_modular256}, - {0x221F9081BAED33F9B610EBBA00D87F33A0E2F209C333E31BE17BE83B87AC838A_cppui_modular256, 0x01098EEAE4534F394020A9F2E3A9408BF2B88151D23CB87D9A7D0F306D694658_cppui_modular256}, - {0x018E6B0BEBB52C9F275C971F2FF0FCE922435A309DC9A15FD4CEC218D3700B59_cppui_modular256, 0x3B61D8723EFE39A06E9ACC7D0A2C67DCAC479479934F5593E7E9542E64B3FDA6_cppui_modular256}, - }); - - std::unordered_map > lb; - lb[64] = { - {0x3C89BC840A9BFA941E3795587975566DE58A27D3D437C50C38F2617E22A39C83_cppui_modular256, 0x037A0EEEB2D1297911993DC43C13A6784351957A116C1A66D0748242690CF999_cppui_modular256}, - {0x311B73AC73D24F10E03F64D457B8FCC469CA69A718031DE58D754745447381E3_cppui_modular256, 0x3D5F15A562AFE60D10EEDCC494E91029156D901A5366814B5019FAD10767E308_cppui_modular256}, - {0x17FAAA160C38DE2C4F890E8E9F9D0CC55CF655400AD1F6D9BE86718DEA48A634_cppui_modular256, 0x2FF9EA226552FB4B51796F638C35D335A41F80B1AD2D7D665BD92907C5CBCEDD_cppui_modular256}, - {0x24FEBDFCBDC67B69F1899A665D6D1D2C210B63452B3F85D8D1B139D766DEDD8B_cppui_modular256, 0x09CFE9337A2A9095F46A0B43D2E6C28A055BBDCDB1314F71131022880D3C16F0_cppui_modular256}, - {0x0136DAD72EBCE55FA8F3763293D74D6360CACFE6C1E2E49B1932B45F0C45FB52_cppui_modular256, 0x2F149D6CF6936BB6F04E15CC317B7D847AD3C6364743077F8DD813378E4D8958_cppui_modular256}, - {0x0804A76DA2C0326D97EAEBC790CF96FFAD0511F8AAD2322448B2E61D3DB1832C_cppui_modular256, 0x0C7ABD82BA04EDE7FFFF200360F13E79A64F51DE5B2B48D88829F9BE7FDC0B7D_cppui_modular256}, - {0x38A6EFBB2BB65133E17DBE78A32DD92D2CC7203F9F170F5557EB7B8D8D4A0286_cppui_modular256, 0x145532FAA79ED6F2ABA0C8BA0A0FBCCC34A4960E44B6B522BC1D8988DAD201E6_cppui_modular256}, - {0x04D4CFA5D074EAD706F31AF4988023B9B785F1140A19D01D8A69817ECFBC0771_cppui_modular256, 0x0E74A9CE01A11DF980FA7BDD75981EE0583E31796AE55DFD222609FAA8C02731_cppui_modular256}, - {0x1F48A4346711E5FAA4487B424AA17AE53E6D4104414F9ED47E47FE663E3017C0_cppui_modular256, 0x0F934EA50068A5F16B15BCF2F95FA7B708640149AACA3AA9B3557AE7C111E4EE_cppui_modular256}, - {0x1ACDF9E08E6D7FDB7F359034A7055D54B5FDB5F04546B9886FA43A56CE224F13_cppui_modular256, 0x0511C6980AFE051256A6F0CEAF1D391F4634C307AC432CAD6694899E88700A6F_cppui_modular256}, - {0x263AAA4441BB60272EEF0774918FB22DA9BB2D40893ED3C95397266DD2646F46_cppui_modular256, 0x14AFC51B9C097EBC59187FA9B5C5E0E3D370A33D4D95D8B00D0AD1D4EF16C644_cppui_modular256}, - {0x00FB91CCBD9B18645BDC0B54096458F20A286CFDC7271E79C1102E3AF6D20A4D_cppui_modular256, 0x02EB26A22949C21D5015E9CD09A4723EB3EC0D5F03D86D80648F96D2AC8AE68F_cppui_modular256}, - {0x2DF6658AB48DA915166CB36E301D39FCDC4C22FF3BC729858F4D832E2437713F_cppui_modular256, 0x371210957FE84FA3861700AD6565AF2B5255E1615E13C035595A884DB4D17F1D_cppui_modular256}, - {0x222C42D9F0E4B95745B4942D329E9F175E98045286D7043FA927087B977D471D_cppui_modular256, 0x2918339EBEA41F2BA9AAF690CB4DBC23A6B73441A4394B9F4A4D6909F38ACA0C_cppui_modular256}, - {0x3624A396CB168A1203C991119ECBBC6198722121298DC4B3ED0C5815BC5CF25A_cppui_modular256, 0x3FD7696D730E57FFD17411388C1394F00B0ED51BED3949D6E8104DF6E7051034_cppui_modular256}, - {0x15FDB7C4200AFE05277EE9BAEFA8A35DBD6B2064DFFD19BBADF0451C87737CB4_cppui_modular256, 0x1679DF1E82C8D7B213CA50AE4FB4C01B451C35FB9773D1AFCA88F4036E7DE6B5_cppui_modular256}, - {0x168C859A6F15D8FCF7F04CD64CCB765E40D5133230772A96D5794F345339056F_cppui_modular256, 0x12DBDEDA81DC4F3BFF48DED7ED60871EBDCE3F645230430F854532FDC7669EF5_cppui_modular256}, - {0x29BCFC91A2A6AD3A0967E2B413A426C8B55105479AB3D7E5A6E1F6E14112042D_cppui_modular256, 0x0B838A8D03F7A7E4CAF0FAA27CF26298380D8877C22AB47D226EC6C94ED1D41E_cppui_modular256}, - {0x107059654B51B4DE00EA74A04AEB2F1D262BB0ADBC1F74886098152FC1D42C21_cppui_modular256, 0x2007CF92469A2E935A5B6849146B974AE49F5A226FD0FF348C9BBA3E49D03F77_cppui_modular256}, - {0x320E00A7C54FDD11AFDC1CFFCE893A578B89EC7929A369735387503CBD7BAD56_cppui_modular256, 0x18516D9F2EEF18B9CD474EAB18E58F08C8FF7A647514D212E617343CFA8E4BFD_cppui_modular256}, - {0x3352BB1A90CF8A7250183BA1AE95644B390C8429F2D3CB0A1F9A0B8FA69C12D8_cppui_modular256, 0x0906450E7D4AC8394CC2723FDA6A84D9BD2DD83F65F19D93D85C3B14970AFAF1_cppui_modular256}, - {0x2080B1B270D63DF226EE44C5E03036656B437F88E972061E3D26A190A3427FCB_cppui_modular256, 0x34D9BA01F40B2E521EA0A7493ED7B7AD7F419634BDE91809BB747981F4BA4691_cppui_modular256}, - {0x1B72B4BD6713F958EAEB8F91A1DB37D245B0B31E43C98282DE58DA424D0E7CDC_cppui_modular256, 0x3B36009A35DED46973B3E2BF4BB64EE3406916D927F8A00E452FAE381D3C2AD6_cppui_modular256}, - {0x3AD4D7F604FC1261F3AA227E61ABFD3DB766B9CADF07660471289264682633BD_cppui_modular256, 0x2C87A76A484DF472917476A5ABCC8FE7324123F4365B176391A5F65A3D4EE47F_cppui_modular256}, - {0x3E0A9D8A6BD0DF3C64D8964829CA93FB70B400344BB0AB6E117874F4DDE6DF6A_cppui_modular256, 0x311DED62A49E2E452C9B96350E45B2C52AA2951F09321652B255703AFD213FE6_cppui_modular256}, - {0x3E4C3344680BDE8FCD5E7934067D0642C178BAD402F2CD554DC15C7E29D9982B_cppui_modular256, 0x2A92BBC7B9DC4A592BDEBC06510476FDAB5B5AC2BF28984A27C4ADA37CE39D97_cppui_modular256}, - {0x0F429110528C4DCBA1E59682B9467A30C6F366F0BE8FC2FC597DE75A4447FDAC_cppui_modular256, 0x0813847967DB68D88DA632E74A3E1D2C7C09E775719F48D802D6A2546B122DFE_cppui_modular256}, - {0x3AB2F27A8040747A3D0A74B9F45AF533DAD6D79103D5B7EF02D4A0EB09C9B91B_cppui_modular256, 0x11EE126988D11C7232E60D920B51B7CC2391AD5324AF32AEC1EAC8C485FABEBC_cppui_modular256}, - {0x20CBDB07812379E2074B969E43A22699FA6B2803FC00087BBDA531E5C6D14B39_cppui_modular256, 0x15A465EDDC45B8EB428E9B23B14D3084F99096AF3E5988E1098A5957F9937BB4_cppui_modular256}, - {0x23CF677347411249DB6BC8853AB2B562229E7B773C4E18AFEFB57A5123B5EDC5_cppui_modular256, 0x03A2CF573B4EB51DEB58A057A611B8A641FA3C4B78B039BC1D25522F1F4E152B_cppui_modular256}, - {0x0A844BAB65A39230B31A1F8339D275C932BDC044F3E45C20118F2CB0A3585F49_cppui_modular256, 0x154E9EA6E40A8F5243BACC1D5613300F2D709AE0E8958FD3CC47143BD5C532B5_cppui_modular256}, - {0x0D072415CB893496134E551EE4C4582262FB1B8E37AFD1BF6C7CD57E33115B7F_cppui_modular256, 0x3804E5B57477FB43239378D6C220EF0930C6732CCC242ABC6A9368C0664AAD7A_cppui_modular256}, - {0x1E7B4D1881A5BB64CAA8FB1E2815A8CDC8AFEF00649BDECE17596554C636AA9C_cppui_modular256, 0x177CC53E9B41D37E5058B9AE33D82413F32F535DA37444B212CB4B3BC221F9AF_cppui_modular256}, - {0x3F43332116BD7C42986271B0C98066D0A5F5A2B5FC9DB32F3F8E272BF7EB9FF2_cppui_modular256, 0x0C827C6BDB35BCE4F8DD289056AA2F1B95F9A7BFBA3116B20CFE98E894682092_cppui_modular256}, - {0x28CA8B3695515D80A55CB135B42DC68B11204EDEC6E1E57B90763D8B764D4E4A_cppui_modular256, 0x2366E50F7EBBE57A68E0320B0CF43615A1A038F56885FAF4D4F08390518A31F1_cppui_modular256}, - {0x28BA918C4AFDAA3E87F07B1DBA299F849C323C66463B81E7D29381532DA03DCC_cppui_modular256, 0x21C5E945F8877E52CDAF2B7D37AAD1F895F1F23C853FB5F36B7E822611284F82_cppui_modular256}, - {0x3FCFA209B59D36F244DFDBB45C667CD518B58D21DD042B76785F4FBA80F4B7EA_cppui_modular256, 0x1DAA63C559BF92982E773F16524722CFEF8384A1CB7DB8FD500847EAFA2386E0_cppui_modular256}, - {0x1C52D056521BC5AAB401F489B5A099BC4E2FF9112E8E89F79ABFA83F6141B1E7_cppui_modular256, 0x3975139F4FF73871BA2D1B228135C1ED6F807FD4729BFD25773DCD0CA0567AEC_cppui_modular256}, - {0x39CA6B9121820798E4F8C9E56FAA19F6C6186E91FB58B9219A57CF946EB4404C_cppui_modular256, 0x00F36DE792588AE497FC844588103E3EF3AEC5378443D5CF4D8A31924B15F409_cppui_modular256}, - {0x366276BAC098B06CCB3BF10CDD74AE208A6F72DD295A439481F3FF0F19EA4472_cppui_modular256, 0x05682488CC82C1C4B963B0F4B696574B216D10E3DEF1970E7DD6EF1D4D9DC95E_cppui_modular256}, - {0x3E6E698789A213627EEF178DCCE852BBDCDE95F2FEF6F99ADB54BA91A4DBD633_cppui_modular256, 0x3D1BCC88A6C0F515C42AD2FF96B4485580D8900B53CBD1E9D9B6C874012DA1CA_cppui_modular256}, - {0x06FDA94AC505426D3D5C8B82B96A1512E44F4A84849178753BE8346EB068E4C9_cppui_modular256, 0x1EB1DB4AA54111F8105904ACE22576022989821736A3273ADAA71E561717B410_cppui_modular256}, - {0x340DCBE21EA8A8F1D9DF1F07E51B3CB97D8284F28ACCE8497E445C259F213BB4_cppui_modular256, 0x2DA0ABCF3573491D505CC5F619523BD2453FD67287A6109EAEDF00E5A2906740_cppui_modular256}, - {0x1AF462A6713530F9C71A555363B5199F839B8B39154663C67264F3B5DC6F9691_cppui_modular256, 0x209E3B30E10ABE2F47D0D28E56BC22E4F7FD746D9BFEF7CD5093880D4A32BDD8_cppui_modular256}, - {0x0A5A714A06E8CEF3695DC12B7BB2CE62682EF127A922E1941595EEA4521DAA9B_cppui_modular256, 0x083549F026A2C593AD6A21B5B18546AD77B8999C8EC48FBB90F4A7A5CBF4BBE6_cppui_modular256}, - {0x319D8AAF8C24EB1067A600FEDD5E89DF9141395BF1C51E0145ACD251A375C616_cppui_modular256, 0x1231B2BCE3B7E245A93682F5C776B387F0AAB9637E984C8C9023E27F60DCBD85_cppui_modular256}, - {0x2839EA83958EB5C4018A2618FA89A78C99E905A49A119A4DECD2FC80319C3E5F_cppui_modular256, 0x1D74130ED38B699544BA43687070012EE571009FEB480B15346104AE1A5E910A_cppui_modular256}, - {0x24914C51064F1BEEF7A723A34A26709AA02BC4CE8D44FB4ED3F31356838A095F_cppui_modular256, 0x152137EC9B4777B8C6F913E3268E2261B44C41B8DA89A7BCF1BCB24711CA45F1_cppui_modular256}, - {0x2E1B58CC9A736C19547D35B15B88E4A5C6852B93B9FA079A564B25F63608B97C_cppui_modular256, 0x267DBE881E33F759E3CA043DC58991CDE682DDF3D52A2C9C6C743369CF34D52C_cppui_modular256}, - {0x1997469E9AFCE26367CBFAEAB96C25BC79B36EFDA34885B2E9EEBD16EF5F7E1D_cppui_modular256, 0x1538A3F7C25841AC797CF7E25EEEFCA7F41C071CC306728F174A4ED211FE6ACD_cppui_modular256}, - {0x32BE50F7D0C1E119F925FFECB9D6EDF01F2051628EA6B8D473A1E3813E39A6CD_cppui_modular256, 0x2819810C3D069979C7BDD4DF764E7E5EB21CDC68C4C6D856D7FFC35EE5A35615_cppui_modular256}, - {0x2C29D5A8980BDACE5708A7D42C4EE5900C14638D63B5E4A56D2A525384ECEB0D_cppui_modular256, 0x14097A6815520C3EC8B0D61CF6E1ACBFC37B3FBB9CC588F04DFD4F8F3DB0C8B3_cppui_modular256}, - {0x02DE03DB892A85BD073B31F33E4F7DA209AF0F66A7185A23C537C453A152292F_cppui_modular256, 0x3A31D9BB9A44A12E2685C23AB864490D0A7943187BDD31F87FE9E6E787448E0E_cppui_modular256}, - {0x37E39B187FF0747D2CCAD7092AA9CB24A6AE2DB7CF17BFD23D3DA657FCCA695D_cppui_modular256, 0x2CE80F107CCB457C9E78CE10B4BA5BE5623DA20C1ED45BB00E6780C6A767CC83_cppui_modular256}, - {0x3B593FA9CB5848054B88DF7A09E84F97F999545DD30524BA158D1C77144A7D14_cppui_modular256, 0x0F0A7E093F5DA7C75DFC238BC36125F02ED97BD79C425B1A77B740467D379509_cppui_modular256}, - {0x056338F486ACBC5048CB96BE50676D31DBA01F962FBF177A9E9F3112671AD51D_cppui_modular256, 0x0C8EC6604982DF2AF84709DCD16FD7EF89CCE63EED31868106E0FE53478F5EE3_cppui_modular256}, - {0x123E53A4A256FD4711C68003B0F17D90708976723116BF1972B10643BACCFB06_cppui_modular256, 0x23F176C9D80799DB9F7396E649517B942747AB57F79E2CCBCC9A46BD954BAACE_cppui_modular256}, - {0x3237CF192BD09509F090E30147FDE7877BC2214DA7CD4524E6D46F4AA24422F8_cppui_modular256, 0x0489D219C52A9912C4DDF4713F8E2B5D7D1470AFAF7DD1D31206C0549DDFCB3B_cppui_modular256}, - {0x19029EB9DEC80B3A35F875F806C621E19938211623B0CA7325F092A091A8ED4A_cppui_modular256, 0x38EC6FA4220CBFB39BA2ABB78861FD1B293D1147833BF7C19430E8CEE4DDB688_cppui_modular256}, - {0x2B3C070B9B85E1723CEB55DE10A309F0E948F1A8507134DD7188024F8DE12BA9_cppui_modular256, 0x3F2992F73FECA28A841A4F51662BF667B2B8CE49DEE75C7B51AEE082FB050FCF_cppui_modular256}, - {0x227D4B9A0C21B7CDA0D85E91AFFD9D8E38B51CBD0BC877B92A7EC1B315B3B24D_cppui_modular256, 0x39E7154095B659B654F69BE25AD02188536ADDD0F30C4235C22282847E809B8C_cppui_modular256}, - {0x20C8053B87A050C01008750EFC18489AA56C138743769A4AD7553D29F2531AE7_cppui_modular256, 0x2F46839877B7DB1EC2689916B93533D60F4F6E6C583A2CBB43879695E059B4FE_cppui_modular256}, - {0x21533DF31582C49F0534D6B39711EF3FCE360E85354949F4E717F337F3EA3024_cppui_modular256, 0x064F8D082581EBAE41A3BCB4BB388941EA3B679E2DF0E6D6F5F4D9E21A508E8A_cppui_modular256}, - {0x318F8D6E431858DE00CAD3B9EDDFA82B9AA5332DDFE90DD511D13405BEBC45D5_cppui_modular256, 0x1CD48075F42F46FA8E87CF3D326CE480DB2BBDFE144FBC75AD0A2409E6C91406_cppui_modular256}, - }; - - index.srs.lagrange_bases = lb; - - index.srs.h = {0x092060386301C999AAB4F263757836369CA27975E28BC7A8E5B2CE5B26262201_cppui_modular256, - 0x314FC4D83AE66A509F9D41BE6165F2606A209A9B5805EE85CE20249C5EBCBE26_cppui_modular256}; - - index.srs.endo_q = 0x06819A58283E528E511DB4D81CF70F5A0FED467D47C033AF2AA9D2E050AA0E4F_cppui_modular256; - index.srs.endo_r = 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular256; - - std::vector> sigma_commitments_unshifted = { - {{0x26C9349FF7FB4AB230A6F6AEF045F451FBBE9B37C43C3274E2AA4B82D131FD26_cppui_modular256, 0x1996274D67EC0464C51F79CCFA1F511C2AABB666ABE67733EE8185B71B27A504_cppui_modular256}}, - {{0x35AF80504B4DBF58CE3535F3E159BD407695088EFBF1EF56D4597A7F1CBEF531_cppui_modular256, 0x2D36B9BCB23702DF2F4A2C9E60ABBB81C2BE261D227AF025DDDE4FFF354727CB_cppui_modular256}}, - {{0x1CFDC82F8279850B957D0BDE2A188AD5060D80A97EF8B4E56CD17CFE1067CBD9_cppui_modular256, 0x2863D1D7D5EFC2155B2BCCB849B6EA6738E2705A4DC63115045B797E2CFA6511_cppui_modular256}}, - {{0x262ABA0787800EF4CBD18688A534659AB77861C373006A4E0E42BC06D85F9E79_cppui_modular256, 0x150A55D182F3B621B10774BD11C8B8198048DEE7C535DDD08992B41928E45DC3_cppui_modular256}}, - {{0x0C51759D046C2382B5800C5CAA9D9DF74636E1FE0671DF237CD2AC771D56436D_cppui_modular256, 0x39AE43E4BE7084DB9EFDCA61204B29929A2C242605FEFE95F41F0D5DD286DA38_cppui_modular256}}, - {{0x18819B168F851F614CF0DD2F4C30030C1267688C1723BF68293324770AB41DE3_cppui_modular256, 0x1E03B384B597E7A9F17F1B7E36A0B1179291AD17F30C8871379318BADEC65C8C_cppui_modular256}}, - {{0x12D8B90170966FA0956A13A852F52EA682F50A66738527AD24827CAC02A7EDF0_cppui_modular256, 0x3566FB28328CAA573331BECEAE6CED6440F32CD9191FA3DFC7A97BBC681DFF30_cppui_modular256}}, - }; - - for(int i = 0; i < index.sigma_comm.size(); ++i){ - index.sigma_comm[i].unshifted = sigma_commitments_unshifted[i]; - } - - index.complete_add_comm.unshifted = { - {0x0A4A178180BC6805CE9A4EBD32096780850C51CCC28D177FD967545D2B258B7F_cppui_modular256, - 0x0FEE8D807491B9385C499C3FC4048B076FFA334C5D14E19FFCF4A3AA26391F91_cppui_modular256} - }; - - index.shift = { - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256, - 0x00B9CDC8FD0BD4B27E2A74AF7AEBD5734D52D75BDF85EBF1CAD03413E914A2E3_cppui_modular256, - 0x0033BFCF8112720332825BD83D44D92CADC0C30466E8102C419C30FA2665695A_cppui_modular256, - 0x0087F4BB29954E16960F2DE3A1FA5AC7B62146DB348C7C9F0E8BF10B2C8E8411_cppui_modular256, - 0x00EC71373B9F6CF15ED1949647365DB60B2E26C3A8ABBA5BB06BF23E9DBE5893_cppui_modular256, - 0x00F39197CC4C55084C68D31F64F1A172406B585CB86445F00C248C721C496D10_cppui_modular256, - 0x00B8DD039799DBEE12D2E6A4299A83E067353C0143C5DFD203190C239159EEA3_cppui_modular256, - }; - - index.zkpm = { - 0x09A34F1BBA67AF009244016BF35AC10B2E69F4D0CCD1D4DC3224A0EB1B74A8B0_cppui_modular256, - 0x0C8A48BFC715E34B967F6C3AC31D85365479365291235AEFB8FD6316EE248595_cppui_modular256, - 0x3F325BBF0B081782F305686C3A74163236DBB334B393D9B7AF4B577B6CE6EDBB_cppui_modular256, - 0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256, - }; - - index.w = 0x3DFB4B65F2CDFB71DF8EAFB896CAE55375F24670939CE3BD5EBCB1BB6D3421E9_cppui_modular256; - index.endo = 0x2D33357CB532458ED3552A23A8554E5005270D29D19FC7D27B7FD22F0201B547_cppui_modular256; - - index.linearization.constant_term = { - PolishToken(Variable(Column(gate_type::Poseidon))), // - PolishToken(Variable(Column(column_type::Witness, 6))), // - PolishToken(std::make_pair(0, 0)), // - PolishToken(Variable(Column(column_type::Witness, 0))), // - PolishToken(token_type::Pow, 7), // - PolishToken(token_type::Store), // - PolishToken(token_type::Mul), // - PolishToken(std::make_pair(0, 1)), - PolishToken(Variable(Column(column_type::Witness, 1))), // - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(0, 2)), - PolishToken(Variable(Column(column_type::Witness, 2))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 7))), - PolishToken(std::make_pair(1, 0)), - PolishToken(token_type::Load, 0), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(1, 1)), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(1, 2)), - PolishToken(token_type::Load, 2), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 2), - PolishToken(Variable(Column(column_type::Witness, 8))), - PolishToken(std::make_pair(2, 0)), - PolishToken(token_type::Load, 0), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(2, 1)), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(2, 2)), - PolishToken(token_type::Load, 2), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 3), - PolishToken(Variable(Column(column_type::Witness, 9))), - PolishToken(std::make_pair(0, 0)), - PolishToken(Variable(Column(column_type::Witness, 6))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(0, 1)), - PolishToken(Variable(Column(column_type::Witness, 7))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(0, 2)), - PolishToken(Variable(Column(column_type::Witness, 8))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 4), - PolishToken(Variable(Column(column_type::Witness, 10))), - PolishToken(std::make_pair(1, 0)), - PolishToken(token_type::Load, 3), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(1, 1)), - PolishToken(token_type::Load, 4), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(1, 2)), - PolishToken(token_type::Load, 5), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 5), - PolishToken(Variable(Column(column_type::Witness, 11))), - PolishToken(std::make_pair(2, 0)), - PolishToken(token_type::Load, 3), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(2, 1)), - PolishToken(token_type::Load, 4), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(2, 2)), - PolishToken(token_type::Load, 5), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 6), - PolishToken(Variable(Column(column_type::Witness, 12))), - PolishToken(std::make_pair(0, 0)), - PolishToken(Variable(Column(column_type::Witness, 9))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(0, 1)), - PolishToken(Variable(Column(column_type::Witness, 10))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(0, 2)), - PolishToken(Variable(Column(column_type::Witness, 11))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 7), - PolishToken(Variable(Column(column_type::Witness, 13))), - PolishToken(std::make_pair(1, 0)), - PolishToken(token_type::Load, 6), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(1, 1)), - PolishToken(token_type::Load, 7), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(1, 2)), - PolishToken(token_type::Load, 8), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 8), - PolishToken(Variable(Column(column_type::Witness, 14))), - PolishToken(std::make_pair(2, 0)), - PolishToken(token_type::Load, 6), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(2, 1)), - PolishToken(token_type::Load, 7), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(2, 2)), - PolishToken(token_type::Load, 8), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 9), - PolishToken(Variable(Column(column_type::Witness, 3))), - PolishToken(std::make_pair(0, 0)), - PolishToken(Variable(Column(column_type::Witness, 12))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(0, 1)), - PolishToken(Variable(Column(column_type::Witness, 13))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(0, 2)), - PolishToken(Variable(Column(column_type::Witness, 14))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 10), - PolishToken(Variable(Column(column_type::Witness, 4))), - PolishToken(std::make_pair(1, 0)), - PolishToken(token_type::Load, 9), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(1, 1)), - PolishToken(token_type::Load, 10), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(1, 2)), - PolishToken(token_type::Load, 11), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 11), - PolishToken(Variable(Column(column_type::Witness, 5))), - PolishToken(std::make_pair(2, 0)), - PolishToken(token_type::Load, 9), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(2, 1)), - PolishToken(token_type::Load, 10), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(2, 2)), - PolishToken(token_type::Load, 11), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 12), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Next)), - PolishToken(std::make_pair(0, 0)), - PolishToken(Variable(Column(column_type::Witness, 3))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(0, 1)), - PolishToken(Variable(Column(column_type::Witness, 4))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(0, 2)), - PolishToken(Variable(Column(column_type::Witness, 5))), - PolishToken(token_type::Pow, 7), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 13), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Next)), - PolishToken(std::make_pair(1, 0)), - PolishToken(token_type::Load, 12), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(1, 1)), - PolishToken(token_type::Load, 13), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(1, 2)), - PolishToken(token_type::Load, 14), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 14), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), - PolishToken(std::make_pair(2, 0)), - PolishToken(token_type::Load, 12), - PolishToken(token_type::Mul), - PolishToken(std::make_pair(2, 1)), - PolishToken(token_type::Load, 13), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(std::make_pair(2, 2)), - PolishToken(token_type::Load, 14), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Mul) - }; - - index.linearization.index_term = { - std::make_tuple(Column(column_type::Coefficient, 3), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 3), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 6), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 6), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 1), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 5), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 5), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 4), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 4), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(gate_type::EndoMulScalar), std::vector>({ - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x1555555555555555555555555555555560C232FEADC45309330F104F00000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x2000000000000000000000000000000011234C7E04A67C8DCC9698767FFFFFFE_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB061197F56E229849987882780000002_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 2), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 0), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 2), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 3), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 4), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 5), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 6), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 7), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000003_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 3), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 4), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 5), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 6), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 7), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 8), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 9), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x000000000000000000000000000000000000000000000000000000000000000B_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ECFFFFFFFB_cppui_modular256), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - })), - std::make_tuple(Column(column_type::Coefficient, 1), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(gate_type::EndoMul), std::vector>({ - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 2), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 3), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 4), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::EndoCoefficient), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 5), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 0), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 2), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 6), - PolishToken(token_type::Load, 3), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 2), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Load, 0), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 7), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::EndoCoefficient), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 8), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 4), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Store), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 6), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 9), - PolishToken(token_type::Load, 7), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 6), - PolishToken(token_type::Dup), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 5), - PolishToken(token_type::Load, 4), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - })), - std::make_tuple(Column(column_type::Coefficient, 7), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 7), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 1), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 2), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 2), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 8), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 8), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(gate_type::CompleteAdd), std::vector>({ - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Load, 0), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 2), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 0), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 3), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 4), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 5), - PolishToken(token_type::Load, 2), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 6), - PolishToken(token_type::Load, 2), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - })), - std::make_tuple(Column(column_type::Coefficient, 0), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 1), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(gate_type::VarBaseMul), std::vector>({ - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Curr)), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Dup), - PolishToken(token_type::Add), - PolishToken(token_type::Add), - PolishToken(token_type::Sub), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 2), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Next)), - PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 3), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(token_type::Load, 2), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 0), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 4), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 2), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 2), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 5), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 6), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 3), CurrOrNext::Next)), - PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 7), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(token_type::Load, 5), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 4), - PolishToken(token_type::Load, 4), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 3), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 8), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 8), CurrOrNext::Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 4), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 7), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 5), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 9), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 4), CurrOrNext::Next)), - PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(token_type::Load, 8), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 7), - PolishToken(token_type::Load, 7), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 6), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 7), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 9), CurrOrNext::Curr)), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 8), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 5), CurrOrNext::Next)), - PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Next)), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 10), CurrOrNext:: Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 9), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 12), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Next)), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 6), CurrOrNext::Next)), - PolishToken(token_type::Add), - PolishToken(0x0000000000000000000000000000000000000000000000000000000000000001_cppui_modular256), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Curr)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Next)), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(token_type::Sub), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(Variable(Column(column_type::Witness, 11), CurrOrNext:: Next)), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Store), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Curr)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Add), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 2), - PolishToken(Variable(Column(column_type::Witness, 1), CurrOrNext::Next)), - PolishToken(Variable(Column(column_type::Witness, 14), CurrOrNext:: Curr)), - PolishToken(token_type::Add), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(Variable(Column(column_type::Witness, 13), CurrOrNext:: Curr)), - PolishToken(Variable(Column(column_type::Witness, 0), CurrOrNext::Next)), - PolishToken(token_type::Sub), - PolishToken(token_type::Load, 1), - PolishToken(token_type::Mul), - PolishToken(token_type::Sub), - PolishToken(token_type::Mul), - PolishToken(token_type::Add), - })), - std::make_tuple(Column(column_type::Coefficient, 1), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 1), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 1), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - std::make_tuple(Column(column_type::Coefficient, 9), std::vector>({ - PolishToken(Variable(Column(gate_type::Poseidon))), - PolishToken(token_type::Alpha), - PolishToken(token_type::Pow, 9), - PolishToken(0x40000000000000000000000000000000224698FC094CF91B992D30ED00000000_cppui_modular256), - PolishToken(token_type::Mul), - PolishToken(token_type::Mul), - })), - }; - index.powers_of_alpha.register_(argument_type::GateType, 21); - index.powers_of_alpha.register_(argument_type::Permutation, 3); - - group_map g_map; - BOOST_CHECK(verifier::verify(g_map, index, proof)); -} -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/to_field.cpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/to_field.cpp deleted file mode 100644 index 7ce23a565a..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/to_field.cpp +++ /dev/null @@ -1,65 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Ilia Shirobokov -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE pickles_test - -#include - -#include -#include -#include - -#include -#include -#include - -#include - -using namespace nil::crypto3; -using namespace nil::crypto3::zk::snark; - -BOOST_AUTO_TEST_SUITE(pickles_kimchi_to_field_test_suite) - -template -typename field_type::value_type to_field(typename field_type::value_type endo, - typename field_type::value_type input) { - ScalarChallenge scalar_challenge {input}; - return scalar_challenge.to_field(endo); -} - -BOOST_AUTO_TEST_CASE(pickles_kimchi_to_field_vesta_test) { - using curve_type = algebra::curves::vesta; - using field_type = curve_type::scalar_field_type; - - typename field_type::value_type endo_r = 0x12CCCA834ACDBA712CAAD5DC57AAB1B01D1F8BD237AD31491DAD5EBDFDFE4AB9_cppui_modular256; - std::vector inputs = {0, 0x00000000000000000000000000000000347936BC4A445B92516BE8A8EAB7D2B9_cppui_modular256}; - std::vector expected_results = {0x1955ABB8AF556360261C069D1C8AEB8444BD73BE7B3163ADBE2E2610A9922C78_cppui_modular256, - 0x01FD131CD87BB2DDCF0D446F7E0EEBCDCE145EE5CA5C7851FC5D22AC186BDDBB_cppui_modular256}; - for (std::size_t i = 0; i < inputs.size(); i++) { - typename field_type::value_type res = to_field(endo_r, inputs[i]); - BOOST_CHECK(res == expected_results[i]); - } -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/to_group.cpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/to_group.cpp deleted file mode 100644 index d4a659958d..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/pickles/to_group.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#define BOOST_TEST_MODULE pickles_test - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -using namespace nil::crypto3; - -BOOST_AUTO_TEST_SUITE(pickles_kimchi_to_group_test_suite) - -BOOST_AUTO_TEST_CASE(pickles_kimchi_to_field_test_case_1){ - using curve_type = algebra::curves::vesta; - using field_type = curve_type::base_field_type; - - zk::snark::group_map map; - - field_type::value_type value = field_type::value_type(0x2060BAF54AE1E0CE2BA2AA4B7629A41FE5768E1BAB024882BAC729FF5747F100_cppui_modular256); - auto result = map.to_group(value); - BOOST_CHECK(result.X == field_type::value_type(0x344483C5EC8A0B6619CD78B13B20A32E68064ACC43DA911EF5FDD8DF8EB15CA9_cppui_modular256)); - BOOST_CHECK(result.Y == field_type::value_type(0x184C418DCCDD4751FF8F2FA1ADC1E617F8BAC4FDA7C177B42F3863A957B7EAA8_cppui_modular256)); - -} - -BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/circuits.hpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/circuits.hpp index 4732679f87..c2e8d4440d 100644 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/circuits.hpp +++ b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/circuits.hpp @@ -177,8 +177,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -316,8 +316,8 @@ namespace nil { public_input_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -414,8 +414,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -521,8 +521,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); @@ -618,8 +618,8 @@ namespace nil { selectors_assignment[0][1] = 1u; test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -714,8 +714,8 @@ namespace nil { test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding>(test_circuit.table, alg_rnd); @@ -820,8 +820,8 @@ namespace nil { constant_assignment[i] = table[witness_columns + selector_columns + i]; } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -972,8 +972,8 @@ namespace nil { std::vector> public_input_assignment(public_columns); test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selectors_assignment)); test_circuit.table_rows = zk_padding(test_circuit.table, alg_rnd); @@ -1129,8 +1129,8 @@ namespace nil { } test_circuit.table = plonk_assignment_table( - plonk_private_assignment_table(private_assignment), - plonk_public_assignment_table( + std::make_shared>(private_assignment), + std::make_shared>( public_input_assignment, constant_assignment, selector_assignment diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp index 7f029351a1..ae55ad6184 100644 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp +++ b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_lookup_argument.cpp @@ -43,7 +43,6 @@ #include #include -#include #include #include diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp index ea5133e9c6..247978fbfb 100644 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp +++ b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_permutation_argument.cpp @@ -130,12 +130,12 @@ BOOST_AUTO_TEST_SUITE(permutation_argument) typename placeholder_public_preprocessor::preprocessed_data_type lpc_preprocessed_public_data = placeholder_public_preprocessor::process( - constraint_system, assignments.move_public_table(), desc, lpc_scheme + constraint_system, assignments.public_table(), desc, lpc_scheme ); typename placeholder_private_preprocessor::preprocessed_data_type lpc_preprocessed_private_data = placeholder_private_preprocessor::process( - constraint_system, assignments.move_private_table(), desc + constraint_system, assignments.private_table(), desc ); auto polynomial_table = @@ -237,12 +237,12 @@ BOOST_AUTO_TEST_SUITE(permutation_argument) typename placeholder_public_preprocessor::preprocessed_data_type preprocessed_public_data = placeholder_public_preprocessor::process( - constraint_system, assignments.move_public_table(), desc, lpc_scheme + constraint_system, assignments.public_table(), desc, lpc_scheme ); typename placeholder_private_preprocessor::preprocessed_data_type preprocessed_private_data = placeholder_private_preprocessor::process( - constraint_system, assignments.move_private_table(), desc + constraint_system, assignments.private_table(), desc ); auto polynomial_table = diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp index b6ffe491f7..b35f66fa92 100644 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp +++ b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/placeholder/placeholder_test_runner.hpp @@ -94,11 +94,11 @@ struct placeholder_test_runner { typename placeholder_public_preprocessor::preprocessed_data_type lpc_preprocessed_public_data = placeholder_public_preprocessor::process( - constraint_system, assignments.move_public_table(), desc, lpc_scheme, max_quotient_poly_chunks); + constraint_system, assignments.public_table(), desc, lpc_scheme, max_quotient_poly_chunks); typename placeholder_private_preprocessor::preprocessed_data_type lpc_preprocessed_private_data = placeholder_private_preprocessor::process( - constraint_system, assignments.move_private_table(), desc); + constraint_system, assignments.private_table(), desc); auto lpc_proof = placeholder_prover::process( lpc_preprocessed_public_data, std::move(lpc_preprocessed_private_data), desc, constraint_system, diff --git a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/plonk_constraint.cpp b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/plonk_constraint.cpp index 32d2f4d44b..c9a964ca23 100644 --- a/parallel-crypto3/libs/parallel-zk/test/systems/plonk/plonk_constraint.cpp +++ b/parallel-crypto3/libs/parallel-zk/test/systems/plonk/plonk_constraint.cpp @@ -79,9 +79,11 @@ BOOST_AUTO_TEST_CASE(plonk_constraint_basic_test) { std::cout << witness_columns[1][0].data << std::endl; std::cout << witness_columns[2][0].data << std::endl; - zk::snark::plonk_private_assignment_table private_assignment(witness_columns); + auto private_assignment = std::make_shared>(witness_columns); - zk::snark::plonk_assignment_table assignment(private_assignment); + zk::snark::plonk_assignment_table assignment(private_assignment, + std::make_shared>() + ); BOOST_CHECK((witness_columns[0][0] + witness_columns[1][0] - witness_columns[2][0]) == constraint.evaluate(0, assignment)); diff --git a/parallel-crypto3/libs/parallel-zk/test/transcript/kimchi_transcript.cpp b/parallel-crypto3/libs/parallel-zk/test/transcript/kimchi_transcript.cpp deleted file mode 100644 index 8295b5444f..0000000000 --- a/parallel-crypto3/libs/parallel-zk/test/transcript/kimchi_transcript.cpp +++ /dev/null @@ -1,485 +0,0 @@ -//---------------------------------------------------------------------------// -// Copyright (c) 2022 Polina Chernyshova -// -// MIT License -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -//---------------------------------------------------------------------------// - -#define BOOST_TEST_MODULE zk_sponge_test - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include - -using namespace nil::crypto3; -using curve_type = algebra::curves::vesta; -using group_type = typename curve_type::template g1_type; -using scalar_field_type = typename curve_type::scalar_field_type; -using value_type = typename scalar_field_type::value_type; -using base_field_type = typename curve_type::base_field_type; - -using fq_sponge_type = zk::transcript::DefaultFqSponge; -using fr_sponge_type = zk::transcript::DefaultFrSponge; - -BOOST_AUTO_TEST_SUITE(zk_sponge_test_suite) - - BOOST_AUTO_TEST_CASE(zk_sponge_test_0) { - fq_sponge_type spng; - group_type::value_type g[15]; - - g[0] = group_type::value_type( - 0x1CF10D1482EB88632AEFED15C16082007B38DDC528626195CF6B040E2C7D5914_cppui_modular256, - 0x15A406A92FA16DB6E24D125C8EC5365D76DD8BB188106C0063BA9EC51E0FB8E7_cppui_modular256); - g[1] = group_type::value_type( - 0x3B38AC47170B2DB158AE7C02E939B2877139040D240171F6A6BB01183902566E_cppui_modular256, - 0x05AAC7FD92471BBFF23D5E4F9AD0B64783467A4809940FEBB7BD6C91A9E9E1C0_cppui_modular256); - g[2] = group_type::value_type( - 0x281BD2B891CF0795B1439B3AB149ED2A535B8E08C4430112D7D4BF53F3789BEF_cppui_modular256, - 0x10B2FA452CAC5D11CC8040D5DD504222A2621FC378EFD7D08A01BAB3A3DE28DF_cppui_modular256); - g[3] = group_type::value_type( - 0x0158FEA0E6586A75F36FB621E9C9FC7A38970812F0F1753D3BB716655E3B9D79_cppui_modular256, - 0x2A9688F370DCC43130D38AB7AD2B3FF2A925791F587B55AD138B1F067E874C59_cppui_modular256); - g[4] = group_type::value_type( - 0x0CA7898337AB528838EAD23D7CBCD4861F1E5E2E5D3B1BD3B733A832C7931547_cppui_modular256, - 0x351C82EC1D20E977ABFC632BBA2330AF61270A00BC2D32B6F2E1DA93AA0D51F1_cppui_modular256); - g[5] = group_type::value_type( - 0x00DCE7DC20642A850002731F9B3820327CF5856B1D8C3B0EE6BD7BC03BC85FFD_cppui_modular256, - 0x3B1BCBA06B0D33F08123EDD6DF725CC1F8CD2213EA867FF4020C2D18619BB2DB_cppui_modular256); - g[6] = group_type::value_type( - 0x0F7C2FF92D8F0776629F87BBF25702CEAA45B1893617F7C9AC10AACB080B6E10_cppui_modular256, - 0x16E7207D6596C7FAFF46FB335E14DC57E08E150AB7F692607F3B8DCC9E6CDA93_cppui_modular256); - g[7] = group_type::value_type( - 0x2CD748E8C8806196ABE34DF032864491CADCF205AF70CB9152507BD16B912BEC_cppui_modular256, - 0x2219EC3C1873373A6717E7BFA24827AD89BF949B0F240D7B9D8981C2006E400F_cppui_modular256); - g[8] = group_type::value_type( - 0x027E878BD478FC5DE36CA783CB60297C5F75CB638C71615A04714C52E9B15E8E_cppui_modular256, - 0x2CCE580022C7D44E72BA8E7E608C3733A3F3EDC0304566097C07D6CCA172A1B4_cppui_modular256); - g[9] = group_type::value_type( - 0x0DC7C8FE3A9007F09283D29C5BE99AACEB9DA6996CD691BBAC5D075BDD6DA223_cppui_modular256, - 0x1FA4B95451090B8A36D503BFDBF086D4462745626B4BA4490AF42A7A6B5FD449_cppui_modular256); - g[10] = group_type::value_type( - 0x20254A64C61A3C1882EC3E9FCA0ABAE814B0EB0477C3396E562C1006054347F3_cppui_modular256, - 0x23CDCBDE9DCBD33AD86BF48181B1616FC76D24A18711A3953D184E772D936418_cppui_modular256); - g[11] = group_type::value_type( - 0x00DB22BCFC9A1D1A10A53716A7E7D4022DBF101B8767B68E78837CB8263BE097_cppui_modular256, - 0x3E283D2F0D90CAC87B3FCD95E7A8933FB2B2B43EF07FA577CA566527481AB6C9_cppui_modular256); - g[12] = group_type::value_type( - 0x0D24814B6FE1C8C42FC05834B95212E473B76C8B9588D1272BFAE8FA0E2B9384_cppui_modular256, - 0x11C75275709440AC01B74C4E64E2606F7826294F868F6B0265008E758C148369_cppui_modular256); - g[13] = group_type::value_type( - 0x007997CB753B919B586243FCAF6E5886676F180C2220BAC055AE9739CA4A1B4B_cppui_modular256, - 0x166859AE2ECE3520D33C2D146F6DBCFC819779C288E9D81C3F7369DF5642EF31_cppui_modular256); - g[14] = group_type::value_type( - 0x04E774B3DE1A78D6C9408D7B10D9E4614FC8AE4DFE4BFE6762278EE72BB9E25D_cppui_modular256, - 0x178AC19F836752BAF356D9E9C3C35470F27A52C16B7572EEF2C61A43B4D0499B_cppui_modular256); - - for (int i = 0; i < 15; ++i) { - std::vector input({g[i]}); - spng.absorb_g(input); - } - - auto check1 = spng.challenge(); - scalar_field_type::value_type chal1 = 0x0000000000000000000000000000000006906F18EE1C02C944C3186D54A8D03E_cppui_modular256; - BOOST_CHECK(check1 == chal1); - } - - BOOST_AUTO_TEST_CASE(zk_sponge_test_1) { - fq_sponge_type spng; - - group_type::value_type g[15]; - g[0] = group_type::value_type( - 0x0A0C2BD5D6D122644F29A3AD675F1EB7BA01AE9D9EBC323086E3BDED095987D4_cppui_modular256, - 0x273211F773739D39B20CCD4D5EB77479115769B4742F2FB03A4F3ED1A1EC22D4_cppui_modular256); - g[1] = group_type::value_type( - 0x220593B5A19D0A67847BBF80DB81F49D6CF8F9591B9E8C9A2F32670DDA1D8AC6_cppui_modular256, - 0x07211D7F83661CB78042848839E2DBD04B101F157A7DA31B30A3DB8886E9B7B0_cppui_modular256); - g[2] = group_type::value_type( - 0x02D77AF331102A224026E24CA18EE6B7B0D5D7709527D066F1FE5FABE4CE85D1_cppui_modular256, - 0x0845660D92C66C0462CF57ADA39E558E0AD9ECC2359F0332901B1D2FE98A10D6_cppui_modular256); - g[3] = group_type::value_type( - 0x0639954FFC6E0B2CCD1929139BE3105E15252BC2FA0A36024455525E659B7D88_cppui_modular256, - 0x15A3400CC3658E630DDBAA76288D06ADFC22DA21C84575D444D633F8DA6DC932_cppui_modular256); - g[4] = group_type::value_type( - 0x2CB8A1CA2F4340039B7912FED931EF963E442CE9920FB0A3126E25BD83E598B6_cppui_modular256, - 0x37651EF464571CEF0E7F6DC731365AFDEF8216C6D253DD2BA93A2AFB676C04E2_cppui_modular256); - g[5] = group_type::value_type( - 0x3A427D5DBECF18AB05809180B1F80E7509BCD963FBA6217E2E9A3292513F2049_cppui_modular256, - 0x1E66FA970D768A59A53D6349E03A4C8D7A93316D08572A133CDE18C2FE64AA03_cppui_modular256); - g[6] = group_type::value_type( - 0x31525F1FEC6FB330DAB5CEFEC348E7221108CF82F543DA0A8E512F3A390AE5E1_cppui_modular256, - 0x1CFCABDD222DBFD199A208CFCF97FA22627E03B878AE4FD1284AF1CCDFE48384_cppui_modular256); - g[7] = group_type::value_type( - 0x20BCF66A9DBB51680B5976759A9B9BABC07153E95978C3571B85DAE260326428_cppui_modular256, - 0x0FC9D105713B9FD6CC8587E84D1521BBF3737834FE5384AD76D98051619F7813_cppui_modular256); - g[8] = group_type::value_type( - 0x31975A5C9BD269C5B7B115205B63A9F82C9E5FAFB789FC0E3A1D9F6D1698FCFF_cppui_modular256, - 0x2B3B885F8AB568D02E0DE2BCADDBD2D9B6EDE04AA3DEC5ABB8B53913F6EE0E35_cppui_modular256); - g[9] = group_type::value_type( - 0x380C43392B70A7370D69266BFFC5D21825D80F34EB6DD165BF300618E0871AE7_cppui_modular256, - 0x267301AFABFE44E37DD209B0C38D662582F7CF13EE036BD77576767A70D07B88_cppui_modular256); - g[10] = group_type::value_type( - 0x1458C0D03E1240A352ACDF0B8858993ACF8F4D4EC4091E695C69A1F5CE30D939_cppui_modular256, - 0x1EDB145A8D6C3EDF28A85B0B7CCD77792C06AD3B787394BD0D98B3B453CE634A_cppui_modular256); - g[11] = group_type::value_type( - 0x20E6522DB98F94CD90E75B74AE0F038C245BD8FACDF94652B4220B139F9A8E36_cppui_modular256, - 0x133B8A97B147D68805619B1579DD49A6B898F713DC63EBCDBD311C1B99F4CED9_cppui_modular256); - g[12] = group_type::value_type( - 0x00203F56944A4BA0454C150B4922711F88B429B8304DE1D7AFA3AF26BBAB84A5_cppui_modular256, - 0x1371005325482F9B36105AD5C548CB5B16B94B55876F22AE1B396744C76AA548_cppui_modular256); - g[13] = group_type::value_type( - 0x27E71C246DEB9222E939D9994A010A063231BA76DAE041FB38C0DEF3E5A8E92D_cppui_modular256, - 0x17A6FF821B3E498999B1500CE2C3CDFB1B44691B990585B0522B6548BDDAAA83_cppui_modular256); - g[14] = group_type::value_type( - 0x0E86C27EF127EFDF0374B82A92D675AF7A0A02EC8A8D0EF2F9BA888427E6CFAB_cppui_modular256, - 0x2A14FA11389648694F68426BDA965E8380C1B155B277467B0C96C5EC73CE17EB_cppui_modular256); - - for (int i = 0; i < 15; ++i) { - std::vector input({g[i]}); - spng.absorb_g(input); - } - - typename scalar_field_type::value_type chal1( - 0x000000000000000000000000000000006586A4AF99E47C9EA8C7AD23A9E42247_cppui_modular256); - BOOST_CHECK(spng.challenge() == chal1); - } - - BOOST_AUTO_TEST_CASE(zk_sponge_test_2) { - fq_sponge_type spng; - - group_type::value_type g[23]; - g[0] = group_type::value_type( - 0x27CCCDE41398B04DD09FAEEFB7B78767B51BB2AFC6587838D0F5A43C43A4A218_cppui_modular256, - 0x1728B31CFD99AD2D3DA948387D407DC6F61CD630758344996E05C21B89B4FF7E_cppui_modular256); - g[1] = group_type::value_type( - 0x2AEF45CFCF1C7A3AB0437D11B00089226C1EAD9F65D17B02EBFBEEDD6ED8FFFB_cppui_modular256, - 0x354C1269DA294634A5E6E3C6D85F5068044BE97B9A41E47CFFD096AA3991D61F_cppui_modular256); - g[2] = group_type::value_type( - 0x01B21F2FBE8FADFD3CF5ADA9332F17B86DE9AF278982CC4E1E5CEDBC6ADFB5C5_cppui_modular256, - 0x11FFAFCFDE4766A966DCB1083C422E8A863BB1871EA5657E79149504BDF4C3F7_cppui_modular256); - g[3] = group_type::value_type( - 0x10B268CA02F1CCC0A9179B4DC8678E0E5E63B04D8149E8A85515B81529AD04F5_cppui_modular256, - 0x1DD587777C89876DFAF9135F7F58D4A1B37DE6F6B610043C231E23BEAAA84CF6_cppui_modular256); - g[4] = group_type::value_type( - 0x13C0DC5466D51C6852266A549093DA4F59C1B06B278ABEBB85519F07D75972ED_cppui_modular256, - 0x109EA2EA135BC41544A6892C17E0F4202C6E8EA4E75E0202436104F1D2DD0AEC_cppui_modular256); - g[5] = group_type::value_type( - 0x30F72723AC67E979D3956C3CDFE0662D0A515C3EA6D257F24BD292DB5E0450F4_cppui_modular256, - 0x1E021A1B6BF8A365E8251A51B430C39F3F1B9E08E3A13B5DCC641094EEA10A0E_cppui_modular256); - g[6] = group_type::value_type( - 0x04F8423216ED528B6ACB493F9E122F8E88BB173037489185ADED577FB35DD4C8_cppui_modular256, - 0x0568CBE5D3AF7A1DC593E160088A1438B8570A87E1A40AFF548F19AB88246186_cppui_modular256); - g[7] = group_type::value_type( - 0x3C276D9F50711A0FADC6C9215B7FE55772D8854ED88055B61D624D50A46BF2D1_cppui_modular256, - 0x064EC8440A5C9EE94D2E495DD697031A0FFAB03AD8AF8653B083B024EC2E0947_cppui_modular256); - g[8] = group_type::value_type( - 0x37F0A0BFF99A231FBEB6FA8BF1BAC5D27D681D96A3BFE439526E8E36DC3F456B_cppui_modular256, - 0x05438AD52E7ED1CADD62053822F42888E4F4027A009541D26BBB8A3277747690_cppui_modular256); - g[9] = group_type::value_type( - 0x21EF274FA84AD809DDE6858504CB06764F23349E9AD698AB06C7C88AB9938F10_cppui_modular256, - 0x22BB862C8B9C96A349540FF9127984EDEB425FA7727A86A33F0521A36F385567_cppui_modular256); - g[10] = group_type::value_type( - 0x339487A2AE045A6CE9B13B548CAF8C9580B1216EC279026A9EA12E5685745822_cppui_modular256, - 0x019050F98DE9302849A3C7F024544DD6D73FC5A174D0A1D3D7FED3E8612C0BDF_cppui_modular256); - g[11] = group_type::value_type( - 0x11FD07718FACABBFA2B0FDB6D559EECE04406643C11AE03228A6A55C0199B78F_cppui_modular256, - 0x1B3F5E6BDB2CFC18947322EB26A6A89E1CE0B3BCB79EE30245FCA702CE174390_cppui_modular256); - g[12] = group_type::value_type( - 0x3393E80C17EB7DF85CA4FAD7F6043A084773ACD3B5ED712030E4B2000FF5086F_cppui_modular256, - 0x033B8C65937B8EE3B1DC600E4BA1FD9EBD851D29590C16379BEEFB93A6F6226E_cppui_modular256); - g[13] = group_type::value_type( - 0x15E069E1CFD96C634513360C4BED63D8D22D32947BC156649D447BFA415D9D25_cppui_modular256, - 0x3F183AD1D896978D1AB0568AF4AA91CF413A2E011352B7692E17E5C0157619EF_cppui_modular256); - g[14] = group_type::value_type( - 0x1D42ED837696F2A777E7C1FF0436D46E96878B624ECDE039732E37AFCD409C88_cppui_modular256, - 0x1DD9078FBA2CE4F2ECE3D8374E805A0494D5F6FF85B7B1A0F255F91C79F08929_cppui_modular256); - g[15] = group_type::value_type( - 0x0A4020BF547A53FAF4DA99584BBAC1FD5D878D264A99BDF19710748597362B9B_cppui_modular256, - 0x179AFDC1C16BD21205B6B9E487799A032BE077512F18F1DD3215250F0C67FC64_cppui_modular256); - g[16] = group_type::value_type( - 0x363AA1A805E5BAFF2DB4BDD817E60CCC546DE456367677C5ECD48CAC2675E21F_cppui_modular256, - 0x1638CDF842DB7274F494B0DC06D9CD0B2565666F7C9E4330A21412F216227FEC_cppui_modular256); - g[17] = group_type::value_type( - 0x39A5B4737045A5192E159C13092B428E3AED966EE0A4DDA365F54AA14D17674E_cppui_modular256, - 0x052FBAB263CAC3E2B7C701B154F8F621A9BE5390D5795A3D7622C57536A30ACB_cppui_modular256); - g[18] = group_type::value_type( - 0x3A90A56D28DC7E01F9384207FAE64E783C7A628048F155C8D14ECB1CD53C93A8_cppui_modular256, - 0x17A22DB9090348E8C363B687BF96EC25CCA79BA366F28F176097BF5474D8C32C_cppui_modular256); - g[19] = group_type::value_type( - 0x02790E33CB485684C1D1CB250DBA08DE299C27F4CD340AC03720983FBF9441BE_cppui_modular256, - 0x30022C5A33C30487C1B375625E5317A351C2E5498C27B39FB0DF2DE8E95036FA_cppui_modular256); - g[20] = group_type::value_type( - 0x1E98D2E550D673BF3B2CEEC098C5319494441382C9427F71557B82187A1F6E72_cppui_modular256, - 0x0D336D94B3CE0D0C30073BDE4C3044F458A598B6B50A1FD1944D29C9F681EB60_cppui_modular256); - g[21] = group_type::value_type( - 0x0E826DABA538B6DFDFBC0133093600E5FB812F513D0FCC04106CB4BD3F32FAD3_cppui_modular256, - 0x282038D2B42F1EEF395753E663C6C62523F3C22857CFD6BCFF83B1B0F130B320_cppui_modular256); - g[22] = group_type::value_type( - 0x0557F05F4FE835D81BF63FFA8E35B5C014E2A4828AC3E5AEE216F11F4662D8F3_cppui_modular256, - 0x22083FE3C84501B1C06B8BF9EDC10783523E080B10B41106555D3994B42DE333_cppui_modular256); - - for (int i = 0; i < 15; ++i) { - std::vector input({g[i]}); - spng.absorb_g(input); - } - - typename scalar_field_type::value_type chal1( - 0x000000000000000000000000000000005D6E02ED382BBF4A9FF5C2C13A1F0E3D_cppui_modular256); - BOOST_CHECK(spng.challenge() == chal1); - typename scalar_field_type::value_type chal2( - 0x0000000000000000000000000000000058C638E4FE632BB34E9D712D10953688_cppui_modular256); - BOOST_CHECK(spng.challenge() == chal2); - - std::vector input({g[15]}); - spng.absorb_g(input); - - typename scalar_field_type::value_type chal3( - 0x0000000000000000000000000000000072D58D72518968134276BCBD15848A54_cppui_modular256); - BOOST_CHECK(spng.challenge() == chal3); - - for (int i = 16; i < 23; ++i) { - std::vector input({g[i]}); - spng.absorb_g(input); - } - typename scalar_field_type::value_type chal4( - 0x00000000000000000000000000000000126C2E2D31FBDDB543E4FE174987EDBC_cppui_modular256); - BOOST_CHECK(spng.challenge() == chal4); - } - - BOOST_AUTO_TEST_CASE(zk_sponge_test_for_absorb_fr) { - fq_sponge_type spng; - // fq_sponge_type2 spng2; - scalar_field_type::value_type g[30] = { - 0x1CF10D1482EB88632AEFED15C16082007B38DDC528626195CF6B040E2C7D5914_cppui_modular256, - 0x15A406A92FA16DB6E24D125C8EC5365D76DD8BB188106C0063BA9EC51E0FB8E7_cppui_modular256, - 0x3B38AC47170B2DB158AE7C02E939B2877139040D240171F6A6BB01183902566E_cppui_modular256, - 0x05AAC7FD92471BBFF23D5E4F9AD0B64783467A4809940FEBB7BD6C91A9E9E1C0_cppui_modular256, - 0x281BD2B891CF0795B1439B3AB149ED2A535B8E08C4430112D7D4BF53F3789BEF_cppui_modular256, - 0x10B2FA452CAC5D11CC8040D5DD504222A2621FC378EFD7D08A01BAB3A3DE28DF_cppui_modular256, - 0x0158FEA0E6586A75F36FB621E9C9FC7A38970812F0F1753D3BB716655E3B9D79_cppui_modular256, - 0x2A9688F370DCC43130D38AB7AD2B3FF2A925791F587B55AD138B1F067E874C59_cppui_modular256, - 0x0CA7898337AB528838EAD23D7CBCD4861F1E5E2E5D3B1BD3B733A832C7931547_cppui_modular256, - 0x351C82EC1D20E977ABFC632BBA2330AF61270A00BC2D32B6F2E1DA93AA0D51F1_cppui_modular256, - 0x00DCE7DC20642A850002731F9B3820327CF5856B1D8C3B0EE6BD7BC03BC85FFD_cppui_modular256, - 0x3B1BCBA06B0D33F08123EDD6DF725CC1F8CD2213EA867FF4020C2D18619BB2DB_cppui_modular256, - 0x0F7C2FF92D8F0776629F87BBF25702CEAA45B1893617F7C9AC10AACB080B6E10_cppui_modular256, - 0x16E7207D6596C7FAFF46FB335E14DC57E08E150AB7F692607F3B8DCC9E6CDA93_cppui_modular256, - 0x2CD748E8C8806196ABE34DF032864491CADCF205AF70CB9152507BD16B912BEC_cppui_modular256, - 0x2219EC3C1873373A6717E7BFA24827AD89BF949B0F240D7B9D8981C2006E400F_cppui_modular256, - 0x027E878BD478FC5DE36CA783CB60297C5F75CB638C71615A04714C52E9B15E8E_cppui_modular256, - 0x2CCE580022C7D44E72BA8E7E608C3733A3F3EDC0304566097C07D6CCA172A1B4_cppui_modular256, - 0x0DC7C8FE3A9007F09283D29C5BE99AACEB9DA6996CD691BBAC5D075BDD6DA223_cppui_modular256, - 0x1FA4B95451090B8A36D503BFDBF086D4462745626B4BA4490AF42A7A6B5FD449_cppui_modular256, - 0x20254A64C61A3C1882EC3E9FCA0ABAE814B0EB0477C3396E562C1006054347F3_cppui_modular256, - 0x23CDCBDE9DCBD33AD86BF48181B1616FC76D24A18711A3953D184E772D936418_cppui_modular256, - 0x00DB22BCFC9A1D1A10A53716A7E7D4022DBF101B8767B68E78837CB8263BE097_cppui_modular256, - 0x3E283D2F0D90CAC87B3FCD95E7A8933FB2B2B43EF07FA577CA566527481AB6C9_cppui_modular256, - 0x0D24814B6FE1C8C42FC05834B95212E473B76C8B9588D1272BFAE8FA0E2B9384_cppui_modular256, - 0x11C75275709440AC01B74C4E64E2606F7826294F868F6B0265008E758C148369_cppui_modular256, - 0x007997CB753B919B586243FCAF6E5886676F180C2220BAC055AE9739CA4A1B4B_cppui_modular256, - 0x166859AE2ECE3520D33C2D146F6DBCFC819779C288E9D81C3F7369DF5642EF31_cppui_modular256, - 0x04E774B3DE1A78D6C9408D7B10D9E4614FC8AE4DFE4BFE6762278EE72BB9E25D_cppui_modular256, - 0x178AC19F836752BAF356D9E9C3C35470F27A52C16B7572EEF2C61A43B4D0499B_cppui_modular256}; - - for (int i = 0; i < 30; ++i) { - std::vector input({g[i]}); - spng.absorb_fr(input); - } - - auto check1 = spng.challenge(); - scalar_field_type::value_type chal1 = 0x0000000000000000000000000000000006906F18EE1C02C944C3186D54A8D03E_cppui_modular256; - BOOST_CHECK(check1 == chal1); - } - - BOOST_AUTO_TEST_CASE(zk_sponge_test_for_absorb_fr_2) { - using namespace nil::crypto3; - using curve_type = algebra::curves::pallas; - using group_type = typename curve_type::template g1_type<>; - using scalar_field_type = typename curve_type::scalar_field_type; - using base_field_type = typename curve_type::base_field_type; - - using fq_sponge_type = zk::transcript::DefaultFqSponge; - - std::vector input_values = { - 0x3AA52C0B2BC507CEC6CEEDBFD2C02B9C74CFA1043847011BA789D6F871201A52_cppui_modular256}; - fq_sponge_type spng; - spng.absorb_fr(input_values); - base_field_type::value_type real_value = spng.challenge_fq(); - - algebra::fields::detail::element_fp> real_inputs( - 0x1D52960595E283E7636776DFE96015CE3A67D0821C23808DD3C4EB7C38900D29_cppui_modular256); - fq_sponge_type spng_real; - spng_real.sponge.absorb(real_inputs); - base_field_type::value_type expected_value = spng_real.challenge_fq(); - - BOOST_CHECK(real_value == expected_value); - } - - BOOST_AUTO_TEST_CASE(zk_sponge_test_real_case) { - fq_sponge_type spng; - spng.absorb_fr(value_type(0x1B76B0452DBEE0301162D6D04350DDC0361222FEF7467C285DB383D51E043D83_cppui_modular256)); - BOOST_CHECK( - spng.challenge_fq() == - base_field_type::value_type( - 0x23A5199486C064AC4CB9D8BBD59B20EB2A2B1A3CA77DFA6E9DAB7C387D270E23_cppui_modular256)); - - spng.absorb_g(group_type::value_type( - 0x1757CFBC6F79F5DA18CAD5BFE889D8BB11A04BEFD2F5F4ECA71CDF1541FD6A10_cppui_modular256, - 0x3440D97DA37051ACEA71310B6A9519E8989E86DE57D324745616A3BA065F2272_cppui_modular256)); - spng.absorb_g(group_type::value_type( - 0x2D47BB4464D0A3788F10C5D70FC35BF750246155649C6B6690F657D372CCE6FF_cppui_modular256, - 0x1A86D626C558F0BC02FA5F89A591DD8392DA153EB457611BA1B3A40AE3E68BD8_cppui_modular256)); - BOOST_CHECK(spng.challenge() == - value_type(0x000000000000000000000000000000005A694EDCBC5D63D83F6E14016563BD69_cppui_modular256)); - - spng.absorb_g(group_type::value_type( - 0x3FCEA348F31BE8357433DBC714AAB303EE1477D6BCFFEC816D45199D004EA0EB_cppui_modular256, - 0x37851472B67A5A35A8F54A001659CB995C7C501CEFF4BE5448D7250508A14FBC_cppui_modular256)); - spng.absorb_g(group_type::value_type( - 0x32ACB0BD9286BDE74B949BEFA7224706890479EF2B3AE5BD11B977910D1B7478_cppui_modular256, - 0x2FB122CE2BFC57B5FF1D2CDB673D3328B6770C065E8253E90980A283AF8EBB15_cppui_modular256)); - BOOST_CHECK(spng.challenge() == - value_type(0x0000000000000000000000000000000063597BF8593B53D1BEA983CAE5AA0140_cppui_modular256)); - - spng.absorb_g(group_type::value_type( - 0x1012AEEE4AB904D4A3B47AACDD04BD8D119B3A8015F76DF7F24AD13B7C06BB90_cppui_modular256, - 0x03428FD045BAA622B9F7EEB54E8321D96EE1CC04CEFB26F1AEB3D6D40A4DED20_cppui_modular256)); - spng.absorb_g(group_type::value_type( - 0x184F8EA7DFF1970F52E5A75BC74D8F0FAF76BEB2C56A42D44CB96CCCA895870A_cppui_modular256, - 0x110904EE3F6325E6D3D591FC6D1EAE61D43ACDB54357A7F76AD4FD6DFA59FCB8_cppui_modular256)); - BOOST_CHECK(spng.challenge() == - value_type(0x0000000000000000000000000000000027ABB6B27E12348F52A181F17FE29F41_cppui_modular256)); - - spng.absorb_g(group_type::value_type( - 0x22F5F9CD40DE3BA2268208BAC69D839A0EFF28C445FFC36C21EA64FCC62A7FC5_cppui_modular256, - 0x35FF2C0CAB2901382134A1862322C212A143237419EE758AE4CB6B02FF1BA141_cppui_modular256)); - spng.absorb_g(group_type::value_type( - 0x1E0518490D0DD242420C8786B744E444FF09E2ECB44217B3FC2323BF739BE8A0_cppui_modular256, - 0x00A9F106114217ECA4313604AA123351DEC9EE0B6C42624270CA9390D34DD0F1_cppui_modular256)); - BOOST_CHECK(spng.challenge() == - value_type(0x000000000000000000000000000000000B79378485D93E3A44F4E3EAEF25D3DA_cppui_modular256)); - - spng.absorb_g(group_type::value_type( - 0x14309CF280C4C82C856B17A808A2E5A583DA7EEB1C385F3B4EB12039EA76AE83_cppui_modular256, - 0x241285C939BD25A6CA34D6F347596BD110FE55AF173A0EBBFB659630A4C96B99_cppui_modular256)); - spng.absorb_g(group_type::value_type( - 0x09DA297567A8850406E640FF07BC76CCB9A4FA5C11F328EF03708414CBC1F4B9_cppui_modular256, - 0x3BE674505BBBD0F9ED806218258E029084BAECD51ABE6F9264E80C1899307ED6_cppui_modular256)); - BOOST_CHECK(spng.challenge() == - value_type(0x000000000000000000000000000000003CBCF6C44411CE451A33BAB179026502_cppui_modular256)); - - spng.absorb_g(group_type::value_type( - 0x1DA94235A1E998434A93578409C4EB18BD82A01EC5A25E5D7C7C7C5E001F18FB_cppui_modular256, - 0x04A566923D712C1CEBF2DBE553DD185F8FDACF604E50948925264D3A49C037EA_cppui_modular256)); - BOOST_CHECK(spng.challenge() == - value_type(0x0000000000000000000000000000000072FF5A26FAF972660330A5D0CC5C4700_cppui_modular256)); - } - - BOOST_AUTO_TEST_CASE(zk_fr_sponge_test_real_case) { - // using value_type = base_field_type::value_type; - fr_sponge_type spng; - spng.absorb(value_type(0x0ACB65E0765F80498D643313EAAEBFBC7899766A4A337EAF61261344E8C2C551_cppui_modular256)); - - spng.absorb(value_type(0x1480D3E4FD095CEC3688F88B105EE6F2365DCFAAA28CCB6B87DAB7E71E58010B_cppui_modular256)); - spng.absorb(value_type(0x0C2F522FB163AE4A8D2890C57ABF95E55EF7DDD27A928EFAD0D3FA447D40BC29_cppui_modular256)); - spng.absorb(value_type(0x3F0169364239FF2352BFFEF6D2A206A6DC8FAA526C51EB51FC7610F6E73DFAE5_cppui_modular256)); - spng.absorb(value_type(0x2BCBED001BA14933A1766C68E09BF19C133AB20B87A9D0DB68321A99C4C7A157_cppui_modular256)); - spng.absorb(value_type(0x1430DC77EBF0048A4E26DDB817DD34D3F253AA9894C7D442B8BC06C7683D0188_cppui_modular256)); - spng.absorb(value_type(0x3B79EBE49FAEF6F123C168CF484296A84186EF1FB9FFFA528B0AAC0761F535AD_cppui_modular256)); - spng.absorb(value_type(0x16C6D43CFFB252215D05E1A05DBA2EEAADB3FAAF88B8AABDBD4E8860B9623530_cppui_modular256)); - spng.absorb(value_type(0x1C0801C94EA28AAD68CEA9C9524106D39DC1A3491435A23D35EEBE56DB3AB116_cppui_modular256)); - spng.absorb(value_type(0x21545E083F1282D939751D5E0D4EF173C7528C9E38349FE5E02BAB4686B542D4_cppui_modular256)); - spng.absorb(value_type(0x2E8F53F919EBB22022424A175A051F6FBDB2B57E06E1AC8A8201FBDD02CEE2FD_cppui_modular256)); - spng.absorb(value_type(0x1B5A53763A06BFAF8BAAF566FE885CD31355B2AC4F0F04B13F05610DE1EBAB5E_cppui_modular256)); - spng.absorb(value_type(0x212CC53B694BA1B3ED2D6C514B97325D62BF301F18E76B7DF94F04B7875C7E64_cppui_modular256)); - spng.absorb(value_type(0x22C1E6932B0336B13262867483DEE4C6B8E798C24F4245051254A64C61EAC604_cppui_modular256)); - spng.absorb(value_type(0x356428F289E597185A60ED494351FF93B5802480DC375E4B2C6ECAB816B69524_cppui_modular256)); - spng.absorb(value_type(0x08066B51E8C7F77F825F541E02C51A608FD217435FDF7E75AD5BBE36CB826443_cppui_modular256)); - spng.absorb(value_type(0x1AA8ADB147AA57E6AA5DBAF2C238352D8C6AA301ECD497BBC775E2A2804E3363_cppui_modular256)); - spng.absorb(value_type(0x03D8C35D2E1466E8514E20A8E658F4E2B1116AB123F7BF53F9A1C7376F788EB1_cppui_modular256)); - spng.absorb(value_type(0x05EDDC1E6C268DF398F068F06C51794D6F672E27FB800DFF6C5C35E5C3D84207_cppui_modular256)); - spng.absorb(value_type(0x1B03A1DBEA987367FDEF97CC27F7441C4845E93AD1583167DA4A1A9CCFFB1E71_cppui_modular256)); - spng.absorb(value_type(0x11347E33DF1631D59D66F6149D99DD22FD23B185D7D89CFE0909877C494D7916_cppui_modular256)); - spng.absorb(value_type(0x0E1372B72364C37883171F80BC89F2AC7043464C8C30E1D2B5D94105035A6C6E_cppui_modular256)); - spng.absorb(value_type(0x336A5683971A09A68D33D77B41947F8CAFFE3923190B51D443E515761A32889B_cppui_modular256)); - - // BOOST_CHECK(spng.challenge().value() == - // value_type(0x0000000000000000000000000000000000F9B1BCD2BB1DE25807BE9313410D43_cppui_modular256)); - - spng.absorb(value_type(0x1635A182C3B5623D5E7CF31D244F389FB478B0612B27937A39D48B473DB68931_cppui_modular256)); - spng.absorb(value_type(0x144FF7F30B8C75C60E63614EA792F9A41E41C2DBE40F816A602160960C071F56_cppui_modular256)); - spng.absorb(value_type(0x114768369E43EA7A13DE72AC855AE7D31DC52B34EB45BB96EA1BDFF54FEC4AB8_cppui_modular256)); - spng.absorb(value_type(0x006259A5F4A9A82296077396D476F9E59392BDDA93E63B9A582EF9BBA452A7A2_cppui_modular256)); - spng.absorb(value_type(0x3F9EBB3D514729A24B0C87FB434FC043F48195FA45E510BA5817F0ED05DED76B_cppui_modular256)); - spng.absorb(value_type(0x06F0CA9962E207949F85C22ADCBE8F27E632D14B843F2C65E264752B6100049E_cppui_modular256)); - spng.absorb(value_type(0x3885B6A574C4B6B89867EE499534E0F4937C7D71BA724A857F5E7F797059E879_cppui_modular256)); - spng.absorb(value_type(0x0554E97666ABA1659D7D107E3F709F546625481B1A5684BE24EFE9B3CBBC300F_cppui_modular256)); - spng.absorb(value_type(0x06C748D2C049B08C50633EBF7F7A0C68A03677CE382BF6697B7D285F30215616_cppui_modular256)); - spng.absorb(value_type(0x0B252004A6768951624E56F1D98B1DDB006B2284FE1C08B258D95B92BF40266F_cppui_modular256)); - spng.absorb(value_type(0x029236F173E5278B30CB9DAD8C87CEDE865AD1293B9BBF991F1743E8D1FD6638_cppui_modular256)); - spng.absorb(value_type(0x28C63DB702FFC629457818259603A154886B11D1D1FB7065037F51212E5BE2D3_cppui_modular256)); - spng.absorb(value_type(0x0219DC4D947F1109C90CD6C0112559A5D04528C2B264062A98DC5E7BBF85F269_cppui_modular256)); - spng.absorb(value_type(0x246CB73F3BB0A9AC5FA65DED8A1617E0CB8231146F0DF67467ED5E85242DF2B6_cppui_modular256)); - spng.absorb(value_type(0x06BF9230E2E2424EF63FE51B0306D61BA478A06A226AEDA29DD12DA188D5F302_cppui_modular256)); - spng.absorb(value_type(0x29126D228A13DAF18CD96C487BF794569FB5A8BBDF14DDEC6CE22DAAED7DF34F_cppui_modular256)); - spng.absorb(value_type(0x069DE7D0EBB1985B05DAB9E13348C12530D374BAD474C76C4AB9FAC8EB557332_cppui_modular256)); - spng.absorb(value_type(0x177B2B5F39976BE667F5D6768480F1555F52395613AF100529C99844DA28DCC9_cppui_modular256)); - spng.absorb(value_type(0x2941C2A82AC0067D3DD6A2C47EDD675D5B7BA071414A8324BA4CFAA1816B163F_cppui_modular256)); - spng.absorb(value_type(0x05EA2B93EF3D2CD3E8DDDA175F2446A8390E35219DFBA39111C8CDBFA3038FCE_cppui_modular256)); - spng.absorb(value_type(0x15C6FB1ACD775DF5E860906CDDF37C4E6B82CDC1A67F02F129DEAE98A11620D6_cppui_modular256)); - spng.absorb(value_type(0x338D629CA1F64B37674CA7B5AF91015CA50A5D335E7076E25D9F4C230C99395D_cppui_modular256)); - - // BOOST_CHECK(spng.challenge().value() == - // value_type(0x00000000000000000000000000000000578543A9BA83C66925F5301C187FBF94_cppui_modular256)); - - spng.absorb(value_type(0x16FE1AE7F56997161DB512632BE7BFA337F47F422E0D01AF06DE298DD8C429D5_cppui_modular256)); - - auto squeezed_val1 = spng.challenge().value(); - // std::cout << std::hex << squeezed_val1.data << '\n'; - BOOST_CHECK(squeezed_val1 == - value_type(0x0000000000000000000000000000000070BB1327D20E6ADBCA0F584AEC2D4D0C_cppui_modular256)); - - squeezed_val1 = spng.challenge().value(); - // std::cout << std::hex << squeezed_val1.data << '\n'; - BOOST_CHECK(squeezed_val1 == - value_type(0x0000000000000000000000000000000062BE7EB9CB6245B29DF02D68B4B51EC5_cppui_modular256)); - } - -BOOST_AUTO_TEST_SUITE_END() diff --git a/parallel-crypto3/libs/parallel-zk/test/transcript/transcript.cpp b/parallel-crypto3/libs/parallel-zk/test/transcript/transcript.cpp index e8c4e2ff3a..e9e49d829e 100644 --- a/parallel-crypto3/libs/parallel-zk/test/transcript/transcript.cpp +++ b/parallel-crypto3/libs/parallel-zk/test/transcript/transcript.cpp @@ -62,12 +62,12 @@ BOOST_AUTO_TEST_CASE(zk_transcript_manual_test) { auto ch2 = tr.challenge(); auto ch_n = tr.challenges(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0xe858ba005424eabd6d97de7e930779def59a85c1a9ff7e8a5d001cdb07f6e4_cppui_modular254).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0xf61f38f58a55b3bbee0480fc5ec3cf8df81603579f4f7134f764bfd3ca5938b_cppui_modular254).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0xe858ba005424eabd6d97de7e930779def59a85c1a9ff7e8a5d001cdb07f6e4_big_uint254).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0xf61f38f58a55b3bbee0480fc5ec3cf8df81603579f4f7134f764bfd3ca5938b_big_uint254).data); - BOOST_CHECK_EQUAL(ch_n[0].data, field_type::value_type(0x4f6b97a9bc99d6996fab5e03d1cd0b418a9b3c97ed64cca070e15777e7cc99a_cppui_modular254).data); - BOOST_CHECK_EQUAL(ch_n[1].data, field_type::value_type(0x2414ddf7ecff246500beb2c01b0c5912a400bc3cdca6d7f24bd2bd4987b21e04_cppui_modular254).data); - BOOST_CHECK_EQUAL(ch_n[2].data, field_type::value_type(0x10bfe2f4a414eec551dda5fd9899e9b46e327648b4fa564ed0517b6a99396aec_cppui_modular254).data); + BOOST_CHECK_EQUAL(ch_n[0].data, field_type::value_type(0x4f6b97a9bc99d6996fab5e03d1cd0b418a9b3c97ed64cca070e15777e7cc99a_big_uint254).data); + BOOST_CHECK_EQUAL(ch_n[1].data, field_type::value_type(0x2414ddf7ecff246500beb2c01b0c5912a400bc3cdca6d7f24bd2bd4987b21e04_big_uint254).data); + BOOST_CHECK_EQUAL(ch_n[2].data, field_type::value_type(0x10bfe2f4a414eec551dda5fd9899e9b46e327648b4fa564ed0517b6a99396aec_big_uint254).data); } BOOST_AUTO_TEST_SUITE_END() @@ -89,8 +89,8 @@ BOOST_AUTO_TEST_CASE(zk_poseidon_transcript_init_test) { auto ch2 = tr.challenge(); int ch_int = tr.int_challenge(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x27B1BE8A820DE1A5E91A441F59F29D42D9DB9FC7778A0852819F331D5CD60B43_cppui_modular255).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x12096E03B2ADEC9B317042D36F048C06AF123EED4A3FC040579E66DCE46C0AEE_cppui_modular255).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x27B1BE8A820DE1A5E91A441F59F29D42D9DB9FC7778A0852819F331D5CD60B43_big_uint255).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x12096E03B2ADEC9B317042D36F048C06AF123EED4A3FC040579E66DCE46C0AEE_big_uint255).data); BOOST_CHECK_EQUAL(ch_int, 0x6296); init_blob = {}; @@ -99,8 +99,8 @@ BOOST_AUTO_TEST_CASE(zk_poseidon_transcript_init_test) { ch2 = tr.challenge(); ch_int = tr.int_challenge(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947FA1063436F4E5434029CCAEC64075C9FC80034C0923054A2B1D30BD2_cppui_modular255).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1B961886411EE8722DD6B576CBA5876EB30999B5237FE0E14255E6D006CFF63C_cppui_modular255).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947FA1063436F4E5434029CCAEC64075C9FC80034C0923054A2B1D30BD2_big_uint255).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1B961886411EE8722DD6B576CBA5876EB30999B5237FE0E14255E6D006CFF63C_big_uint255).data); BOOST_CHECK_EQUAL(ch_int, 0xC92); } @@ -114,8 +114,8 @@ BOOST_AUTO_TEST_CASE(zk_poseidon_transcript_no_init_test) { auto ch2 = tr.challenge(); int ch_int = tr.int_challenge(); - BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947fa1063436f4e5434029ccaec64075c9fc80034c0923054a2b1d30bd2_cppui_modular255).data); - BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1b961886411ee8722dd6b576cba5876eb30999b5237fe0e14255e6d006cff63c_cppui_modular255).data); + BOOST_CHECK_EQUAL(ch1.data, field_type::value_type(0x35626947fa1063436f4e5434029ccaec64075c9fc80034c0923054a2b1d30bd2_big_uint255).data); + BOOST_CHECK_EQUAL(ch2.data, field_type::value_type(0x1b961886411ee8722dd6b576cba5876eb30999b5237fe0e14255e6d006cff63c_big_uint255).data); BOOST_CHECK_EQUAL(ch_int, 0xc92); } @@ -140,20 +140,20 @@ void test_transcript(typename curve_type::base_field_type::value_type const& exp BOOST_AUTO_TEST_CASE(mnt4_keccak) { test_transcript> - (0xb985b0419fda7e26db3867b38cbb55465717e8d3ff208768cac6949bd68c2b7_cppui_modular298); + (0xb985b0419fda7e26db3867b38cbb55465717e8d3ff208768cac6949bd68c2b7_big_uint298); } BOOST_AUTO_TEST_CASE(mnt6_keccak) { test_transcript> - (0x56d23a0a6f75fe3a7670906b341b29cdde80696fc418771e3c84910217546ef1_cppui_modular298); + (0x56d23a0a6f75fe3a7670906b341b29cdde80696fc418771e3c84910217546ef1_big_uint298); } BOOST_AUTO_TEST_CASE(bls12_keccak) { test_transcript> - (0x7cc24317960f68f067e0a1cfe610fe3db024d52b064ff2115ea0f594602f0784_cppui_modular381); + (0x7cc24317960f68f067e0a1cfe610fe3db024d52b064ff2115ea0f594602f0784_big_uint381); /* TODO: no marshalling for bls12-377 curve test_transcript> - (0x0_cppui_modular377); + (0x0_big_uint377); */ } @@ -163,7 +163,7 @@ BOOST_AUTO_TEST_CASE(pallas_poseidon) { using hash_type = hashes::poseidon>; test_transcript - (0xb4a4cca5ad2d998a81ce64953c1fe0b16e27e4d298808165644421eebd2bc3a_cppui_modular256); + (0xb4a4cca5ad2d998a81ce64953c1fe0b16e27e4d298808165644421eebd2bc3a_big_uint256); } BOOST_AUTO_TEST_SUITE_END() diff --git a/parallel-crypto3/libs/parallelization-utils/CMakeLists.txt b/parallel-crypto3/libs/parallelization-utils/CMakeLists.txt index 96354625e5..64a15124e4 100644 --- a/parallel-crypto3/libs/parallelization-utils/CMakeLists.txt +++ b/parallel-crypto3/libs/parallelization-utils/CMakeLists.txt @@ -57,7 +57,7 @@ target_include_directories(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTER $<$:${Boost_INCLUDE_DIRS}>) target_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} INTERFACE - ${Boost_LIBRARIES}) + Boost::container) add_tests(test) diff --git a/parallel-crypto3/libs/parallelization-utils/test/CMakeLists.txt b/parallel-crypto3/libs/parallelization-utils/test/CMakeLists.txt index b31893e81a..4656ac9944 100644 --- a/parallel-crypto3/libs/parallelization-utils/test/CMakeLists.txt +++ b/parallel-crypto3/libs/parallelization-utils/test/CMakeLists.txt @@ -13,7 +13,9 @@ if(NOT Boost_UNIT_TEST_FRAMEWORK_FOUND) endif() cm_test_link_libraries(${CMAKE_WORKSPACE_NAME}_${CURRENT_PROJECT_NAME} - ${Boost_LIBRARIES}) + Boost::container + Boost::unit_test_framework +) macro(define_actor_core_test name) set(test_name "actor_core_${name}_test") @@ -36,7 +38,7 @@ macro(define_actor_core_test name) ${Boost_INCLUDE_DIRS}) - set_target_properties(${test_name} PROPERTIES CXX_STANDARD 17) + set_target_properties(${test_name} PROPERTIES CXX_STANDARD 20) get_target_property(target_type Boost::unit_test_framework TYPE) if(target_type STREQUAL "SHARED_LIB") diff --git a/parallel-crypto3/libs/parallelization-utils/test/thread_pool.cpp b/parallel-crypto3/libs/parallelization-utils/test/thread_pool.cpp index d6501c661f..c422356b48 100644 --- a/parallel-crypto3/libs/parallelization-utils/test/thread_pool.cpp +++ b/parallel-crypto3/libs/parallelization-utils/test/thread_pool.cpp @@ -39,6 +39,8 @@ BOOST_AUTO_TEST_SUITE(thread_pool_test_suite) BOOST_AUTO_TEST_CASE(vector_multiplication_test) { + boost::unit_test::unit_test_log_t::instance().set_threshold_level( boost::unit_test::log_messages ); + //boost::unit_test::framework::instance().set_report_level(boost::unit_test::log_silent); size_t size = 131072; std::vector v(size); @@ -55,7 +57,7 @@ BOOST_AUTO_TEST_CASE(vector_multiplication_test) { }, nil::crypto3::ThreadPool::PoolLevel::HIGH)); for (std::size_t i = 0; i < size; ++i) { - BOOST_CHECK(v[i] == i * i); + BOOST_CHECK_EQUAL(v[i], i * i); } } diff --git a/parse_tests.py b/parse_tests.py new file mode 100644 index 0000000000..20339e810d --- /dev/null +++ b/parse_tests.py @@ -0,0 +1,42 @@ +import logging, json +from junitparser import JUnitXml +import glob, os +from opentelemetry import trace + +undefined_behavior_sanitizer=os.environ['UndefinedBehaviorSanitizer'] +address_sanitizer=os.environ['AddressSanitizer'] +leak_sanitizer=os.environ['LeakSanitizer'] + +aggregated_test_results = JUnitXml(); +for file in glob.glob("result/test-logs/*.xml"): + try: + aggregated_test_results.append(JUnitXml.fromfile(file)) + except Exception as ex: + print("Error processing {}".format(file)) + print(ex) + +succeeded = aggregated_test_results.tests - \ + aggregated_test_results.failures - \ + aggregated_test_results.errors - \ + aggregated_test_results.skipped + +result = { + "tests" : aggregated_test_results.tests, + "failures" : aggregated_test_results.failures, + "errors" : aggregated_test_results.errors, + "skipped" : aggregated_test_results.skipped, + "succeeded" : succeeded, + "execution_time" : aggregated_test_results.time, + "undefined_behavior_sanitizer" : int(undefined_behavior_sanitizer), + "address_sanitizer" : int(address_sanitizer), + "leak_sanitizer" : int(leak_sanitizer), +} + +print("Resulting JSON: {}".format(json.dumps(result))) + +tracer = trace.get_tracer_provider().get_tracer(__name__) +with tracer.start_as_current_span("nightly_span"): + current_span = trace.get_current_span() + current_span.add_event("Nightly build finished") + logging.getLogger().error(json.dumps(result)) + diff --git a/proof-producer.nix b/proof-producer.nix index a2f5456f79..fc359d885d 100644 --- a/proof-producer.nix +++ b/proof-producer.nix @@ -6,11 +6,18 @@ boost, gdb, lldb, + mold, + protobuf, cmake_modules, enableDebugging, gtest, enableDebug ? false, runTests ? false, + sanitize? false, + crypto3_tests? false, + parallel_crypto3_tets? false, + crypto3_bechmarks? false, + parallel_crypto3_bechmarks? false, }: let inherit (lib) optional; @@ -20,7 +27,7 @@ in stdenv.mkDerivation { src = lib.sourceByRegex ./. ["^proof-producer(/.*)?$" "^crypto3(/.*)?$" "^parallel-crypto3(/.*)?$" "CMakeLists.txt"]; hardeningDisable = [ "fortify" ]; - nativeBuildInputs = [ cmake ninja pkg-config ] ++ + nativeBuildInputs = [ cmake ninja pkg-config protobuf ] ++ (lib.optional (!stdenv.isDarwin) gdb) ++ (lib.optional (stdenv.isDarwin) lldb); @@ -32,20 +39,28 @@ in stdenv.mkDerivation { cmakeFlags = [ "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}" - (if enableDebug then "-DCMAKE_BUILD_TYPE=Debug" else "-DCMAKE_BUILD_TYPE=Release") (if runTests then "-DENABLE_TESTS=ON" else "-DENABLE_TESTS=OFF") + (if sanitize then "-DSANITIZE=ON" else "-DSANITIZE=OFF") "-DPROOF_PRODUCER_ENABLE=TRUE" + (if crypto3_tests then "-DBUILD_CRYPTO3_TESTS=TRUE" else "-DBUILD_CRYPTO3_TESTS=False") + (if parallel_crypto3_tets then "-DBUILD_PARALLEL_CRYPTO3_TESTS=TRUE" else "") + (if parallel_crypto3_bechmarks then "-DENABLE_BENCHMARKS=ON" else "-DENABLE_BENCHMARKS=OFF") + (if crypto3_bechmarks then "-DBUILD_CRYPTO3_BENCH_TESTS=ON" else "-DBUILD_CRYPTO3_BENCH_TESTS=OFF") "-G Ninja" ]; - doCheck = runTests; + cmakeBuildType = if enableDebug then "Debug" else "Release"; + doCheck = runTests; checkPhase = '' # JUNIT file without explicit file name is generated after the name of the master test suite inside `CMAKE_CURRENT_SOURCE_DIR` export BOOST_TEST_LOGGER=JUNIT:HRF - cd proof-producer && ctest --verbose --output-on-failure -R && cd .. + cd proof-producer + ctest --verbose --output-on-failure -R + cd .. mkdir -p ${placeholder "out"}/test-logs find .. -type f -name '*_test.xml' -exec cp {} ${placeholder "out"}/test-logs \; + find .. -type f -name '*_benchmark.xml' -exec cp {} ${placeholder "out"}/test-logs \; ''; shellHook = '' diff --git a/proof-producer/CMakeLists.txt b/proof-producer/CMakeLists.txt index 8586f476f8..c4671d636e 100644 --- a/proof-producer/CMakeLists.txt +++ b/proof-producer/CMakeLists.txt @@ -9,8 +9,9 @@ #---------------------------------------------------------------------------# cmake_minimum_required(VERSION 3.22 FATAL_ERROR) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") -if(DEFINED CMAKE_BUILD_TYPE AND ${CMAKE_BUILD_TYPE} STREQUAL "Debug") +if(DEFINED CMAKE_BUILD_TYPE AND CMAKE_BUILD_TYPE STREQUAL "Debug") set(ZK_PLACEHOLDER_DEBUG_ENABLED TRUE) endif() @@ -73,10 +74,10 @@ endif() set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) +add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/libs/output_artifacts") add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/libs/preset") add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/libs/assigner") add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/bin/proof-producer") -add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/libs/output_artifacts") if (ENABLE_TESTS) enable_testing() diff --git a/proof-producer/bin/proof-producer/CMakeLists.txt b/proof-producer/bin/proof-producer/CMakeLists.txt index f83ff74a01..fccd812e5a 100644 --- a/proof-producer/bin/proof-producer/CMakeLists.txt +++ b/proof-producer/bin/proof-producer/CMakeLists.txt @@ -27,6 +27,14 @@ if(ZK_PLACEHOLDER_DEBUG) add_definitions(-DZK_PLACEHOLDER_DEBUG_ENABLED) endif() +set(PROOF_PRODUCER_INCLUDES ${CURRENT_PROJECT_NAME}_include) +add_library(${PROOF_PRODUCER_INCLUDES} INTERFACE) +target_include_directories(${PROOF_PRODUCER_INCLUDES} INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/src +) +add_library(${CURRENT_PROJECT_NAME}::include ALIAS ${PROOF_PRODUCER_INCLUDES}) + # Function to setup common properties for a target function(setup_proof_generator_target) set(options "") @@ -45,6 +53,7 @@ function(setup_proof_generator_target) Boost::log Boost::thread proof_generatorPreset + ${PROOF_PRODUCER_INCLUDES} ) # Make sure to add these dependencies before the others, since for multi-threaded version dependency on # actor-zk must come first. @@ -60,17 +69,11 @@ function(setup_proof_generator_target) proof_generatorAssigner proof_generatorOutputArtifacts) - target_include_directories(${ARG_TARGET_NAME} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/src - ) - set_target_properties(${ARG_TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX EXPORT_NAME ${ARG_TARGET_NAME} CXX_STANDARD 23 CXX_STANDARD_REQUIRED TRUE) - if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(${ARG_TARGET_NAME} PRIVATE "-fconstexpr-steps=2147483647") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") @@ -81,11 +84,13 @@ endfunction() set(SINGLE_THREADED_TARGET "${CURRENT_PROJECT_NAME}-single-threaded") setup_proof_generator_target(TARGET_NAME ${SINGLE_THREADED_TARGET} ADDITIONAL_DEPENDENCIES crypto3::all) +target_precompile_headers(${SINGLE_THREADED_TARGET} REUSE_FROM proof_generatorOutputArtifacts) + set(MULTI_THREADED_TARGET "${CURRENT_PROJECT_NAME}-multi-threaded") setup_proof_generator_target(TARGET_NAME ${MULTI_THREADED_TARGET} ADDITIONAL_DEPENDENCIES parallel-crypto3::all crypto3::common) +target_precompile_headers(${MULTI_THREADED_TARGET} REUSE_FROM proof_generatorOutputArtifacts) # Install - install(TARGETS ${SINGLE_THREADED_TARGET} RUNTIME DESTINATION bin) install(TARGETS ${MULTI_THREADED_TARGET} RUNTIME DESTINATION bin) diff --git a/proof-producer/bin/proof-producer/include/nil/proof-generator/file_operations.hpp b/proof-producer/bin/proof-producer/include/nil/proof-generator/file_operations.hpp index 43e496c0cd..feea0767b6 100644 --- a/proof-producer/bin/proof-producer/include/nil/proof-generator/file_operations.hpp +++ b/proof-producer/bin/proof-producer/include/nil/proof-generator/file_operations.hpp @@ -18,6 +18,7 @@ #define PROOF_GENERATOR_FILE_OPERATIONS_HPP #include +#include #include #include #include diff --git a/proof-producer/bin/proof-producer/include/nil/proof-generator/prover.hpp b/proof-producer/bin/proof-producer/include/nil/proof-generator/prover.hpp index a6246f395a..79a3e2f53b 100644 --- a/proof-producer/bin/proof-producer/include/nil/proof-generator/prover.hpp +++ b/proof-producer/bin/proof-producer/include/nil/proof-generator/prover.hpp @@ -26,6 +26,7 @@ #include #include #include +#include #include @@ -66,7 +67,8 @@ #include #include -#include +#include + namespace nil { namespace proof_generator { namespace detail { @@ -83,7 +85,7 @@ namespace nil { MarshallingType marshalled_data; auto read_iter = v->begin(); auto status = marshalled_data.read(read_iter, v->size()); - if (status != nil::marshalling::status_type::success) { + if (status != nil::crypto3::marshalling::status_type::success) { BOOST_LOG_TRIVIAL(error) << "When reading a Marshalled structure from file " << path << ", decoding step failed."; return std::nullopt; @@ -100,8 +102,8 @@ namespace nil { std::vector v; v.resize(data_for_marshalling.length(), 0x00); auto write_iter = v.begin(); - nil::marshalling::status_type status = data_for_marshalling.write(write_iter, v.size()); - if (status != nil::marshalling::status_type::success) { + nil::crypto3::marshalling::status_type status = data_for_marshalling.write(write_iter, v.size()); + if (status != nil::crypto3::marshalling::status_type::success) { BOOST_LOG_TRIVIAL(error) << "Marshalled structure encoding failed"; return false; } @@ -118,10 +120,11 @@ namespace nil { VERIFY = 5, GENERATE_AGGREGATED_CHALLENGE = 6, GENERATE_PARTIAL_PROOF = 7, - COMPUTE_COMBINED_Q = 8, - GENERATE_AGGREGATED_FRI_PROOF = 9, - GENERATE_CONSISTENCY_CHECKS_PROOF = 10, - MERGE_PROOFS = 11 + FAST_GENERATE_PARTIAL_PROOF = 8, + COMPUTE_COMBINED_Q = 9, + GENERATE_AGGREGATED_FRI_PROOF = 10, + GENERATE_CONSISTENCY_CHECKS_PROOF = 11, + MERGE_PROOFS = 12 }; ProverStage prover_stage_from_string(const std::string& stage) { @@ -134,6 +137,7 @@ namespace nil { {"verify", ProverStage::VERIFY}, {"generate-aggregated-challenge", ProverStage::GENERATE_AGGREGATED_CHALLENGE}, {"generate-partial-proof", ProverStage::GENERATE_PARTIAL_PROOF}, + {"fast-generate-partial-proof", ProverStage::FAST_GENERATE_PARTIAL_PROOF}, {"compute-combined-Q", ProverStage::COMPUTE_COMBINED_Q}, {"merge-proofs", ProverStage::MERGE_PROOFS}, {"aggregated-FRI", ProverStage::GENERATE_AGGREGATED_FRI_PROOF}, @@ -165,14 +169,14 @@ namespace nil { using CommonData = typename PublicPreprocessedData::common_data_type; using PrivatePreprocessedData = typename nil::crypto3::zk::snark:: placeholder_private_preprocessor::preprocessed_data_type; - using ConstraintSystem = nil::crypto3::zk::snark::plonk_constraint_system; + using ConstraintSystem = nil::blueprint::circuit>; using TableDescription = nil::crypto3::zk::snark::plonk_table_description; - using Endianness = nil::marshalling::option::big_endian; + using Endianness = nil::crypto3::marshalling::option::big_endian; using FriType = typename Lpc::fri_type; using FriParams = typename FriType::params_type; using Column = nil::crypto3::zk::snark::plonk_column; using AssignmentTable = nil::crypto3::zk::snark::plonk_assignment_table; - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using TableMarshalling = nil::crypto3::marshalling::types::plonk_assignment_table; @@ -246,21 +250,29 @@ namespace nil { BOOST_ASSERT(lpc_scheme_); BOOST_LOG_TRIVIAL(info) << "Generating proof..."; - Proof proof = nil::crypto3::zk::snark::placeholder_prover::process( + nil::crypto3::zk::snark::placeholder_prover prover( *public_preprocessed_data_, *private_preprocessed_data_, *table_description_, *constraint_system_, - *lpc_scheme_ + std::move(*lpc_scheme_) ); + auto proof = prover.process(); BOOST_LOG_TRIVIAL(info) << "Proof generated"; + create_lpc_scheme(); // reset to default scheme to do the verification + bool verify_ok{}; if (skip_verification) { BOOST_LOG_TRIVIAL(info) << "Skipping proof verification"; + verify_ok = true; } else { - if (!verify(proof)) { - return false; - } + verify_ok = verify(proof); + } + lpc_scheme_.emplace(std::move(prover.move_commitment_scheme())); // get back the commitment scheme used in prover + + if (!verify_ok) { + BOOST_LOG_TRIVIAL(error) << "Proof verification failed"; + return false; } BOOST_LOG_TRIVIAL(info) << "Writing proof to " << proof_file_; @@ -311,16 +323,21 @@ namespace nil { BOOST_ASSERT(lpc_scheme_); BOOST_LOG_TRIVIAL(info) << "Generating proof..."; + auto start = std::chrono::high_resolution_clock::now(); auto prover = nil::crypto3::zk::snark::placeholder_prover( *public_preprocessed_data_, *private_preprocessed_data_, *table_description_, *constraint_system_, - *lpc_scheme_, + std::move(*lpc_scheme_), true); Proof proof = prover.process(); + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "POOF GENERATE: " << duration.count() << "\n"; BOOST_LOG_TRIVIAL(info) << "Proof generated"; + lpc_scheme_.emplace(prover.move_commitment_scheme()); // get back the commitment scheme used in prover + BOOST_LOG_TRIVIAL(info) << "Writing proof to " << proof_file_; auto filled_placeholder_proof = nil::crypto3::marshalling::types::fill_placeholder_proof(proof, lpc_scheme_->get_fri_params()); @@ -358,19 +375,19 @@ namespace nil { BOOST_LOG_TRIVIAL(error) << "Failed to write challenge to file."; } - auto commitment_scheme = prover.get_commitment_scheme(); + lpc_scheme_.emplace(prover.move_commitment_scheme()); - commitment_scheme.state_commited(crypto3::zk::snark::FIXED_VALUES_BATCH); - commitment_scheme.state_commited(crypto3::zk::snark::VARIABLE_VALUES_BATCH); - commitment_scheme.state_commited(crypto3::zk::snark::PERMUTATION_BATCH); - commitment_scheme.state_commited(crypto3::zk::snark::QUOTIENT_BATCH); - commitment_scheme.state_commited(crypto3::zk::snark::LOOKUP_BATCH); - commitment_scheme.mark_batch_as_fixed(crypto3::zk::snark::FIXED_VALUES_BATCH); + lpc_scheme_->state_commited(crypto3::zk::snark::FIXED_VALUES_BATCH); + lpc_scheme_->state_commited(crypto3::zk::snark::VARIABLE_VALUES_BATCH); + lpc_scheme_->state_commited(crypto3::zk::snark::PERMUTATION_BATCH); + lpc_scheme_->state_commited(crypto3::zk::snark::QUOTIENT_BATCH); + lpc_scheme_->state_commited(crypto3::zk::snark::LOOKUP_BATCH); + lpc_scheme_->mark_batch_as_fixed(crypto3::zk::snark::FIXED_VALUES_BATCH); - commitment_scheme.set_fixed_polys_values(common_data_.has_value() ? common_data_->commitment_scheme_data : + lpc_scheme_->set_fixed_polys_values(common_data_.has_value() ? common_data_->commitment_scheme_data : public_preprocessed_data_->common_data.commitment_scheme_data); - std::size_t theta_power = commitment_scheme.compute_theta_power_for_combined_Q(); + std::size_t theta_power = lpc_scheme_->compute_theta_power_for_combined_Q(); auto output_file = open_file(theta_power_file->string(), std::ios_base::out); (*output_file) << theta_power << std::endl; @@ -383,7 +400,7 @@ namespace nil { create_lpc_scheme(); using ProofMarshalling = nil::crypto3::marshalling::types:: - placeholder_proof, Proof>; + placeholder_proof, Proof>; BOOST_LOG_TRIVIAL(info) << "Reading proof from file"; auto marshalled_proof = detail::decode_marshalling_from_file(proof_file_, true); @@ -438,10 +455,9 @@ namespace nil { BOOST_LOG_TRIVIAL(info) << "Writing all preprocessed public data to " << preprocessed_data_file; - using PreprocessedPublicDataType = typename PublicPreprocessedData::preprocessed_data_type; auto marshalled_preprocessed_public_data = - fill_placeholder_preprocessed_public_data( + fill_placeholder_preprocessed_public_data( *public_preprocessed_data_ ); bool res = detail::encode_marshalling_to_file( @@ -459,9 +475,8 @@ namespace nil { using namespace nil::crypto3::marshalling::types; - using PreprocessedPublicDataType = typename PublicPreprocessedData::preprocessed_data_type; using PublicPreprocessedDataMarshalling = - placeholder_preprocessed_public_data; + placeholder_preprocessed_public_data; auto marshalled_value = detail::decode_marshalling_from_file( preprocessed_data_file); @@ -469,7 +484,7 @@ namespace nil { return false; } public_preprocessed_data_.emplace( - make_placeholder_preprocessed_public_data(*marshalled_value) + make_placeholder_preprocessed_public_data(*marshalled_value) ); return true; } @@ -512,14 +527,13 @@ namespace nil { return false; } - lpc_scheme_.emplace(commitment_scheme.value()); + lpc_scheme_.emplace(std::move(commitment_scheme.value())); return true; } - bool verify(const Proof& proof) const { + bool verify(const Proof& proof) { BOOST_LOG_TRIVIAL(info) << "Verifying proof..."; - bool verification_result = - nil::crypto3::zk::snark::placeholder_verifier::process( + bool verification_result = nil::crypto3::zk::snark::placeholder_verifier::process( public_preprocessed_data_.has_value() ? public_preprocessed_data_->common_data : *common_data_, proof, *table_description_, @@ -539,15 +553,16 @@ namespace nil { bool read_circuit(const boost::filesystem::path& circuit_file_) { BOOST_LOG_TRIVIAL(info) << "Read circuit from " << circuit_file_; + using ZkConstraintSystem = nil::crypto3::zk::snark::plonk_constraint_system; using ConstraintMarshalling = - nil::crypto3::marshalling::types::plonk_constraint_system; + nil::crypto3::marshalling::types::plonk_constraint_system; auto marshalled_value = detail::decode_marshalling_from_file(circuit_file_); if (!marshalled_value) { return false; } constraint_system_.emplace( - nil::crypto3::marshalling::types::make_plonk_constraint_system( + nil::crypto3::marshalling::types::make_plonk_constraint_system( *marshalled_value ) ); @@ -570,7 +585,7 @@ namespace nil { return false; } - writer::write_binary_circuit(out, *constraint_system_, constraint_system_->public_input_sizes()); + writer::write_binary_circuit(out, *constraint_system_, constraint_system_->public_input_sizes()); return true; } @@ -589,7 +604,7 @@ namespace nil { if (!marshalled_table) { return false; } - + auto [table_description, assignment_table] = nil::crypto3::marshalling::types::make_assignment_table( *marshalled_table @@ -619,7 +634,7 @@ namespace nil { using writer = assignment_table_writer; BOOST_LOG_TRIVIAL(info) << "Writing binary assignment table to " << output_filename; - + if (!assignment_table_.has_value() || !table_description_.has_value()) { BOOST_LOG_TRIVIAL(error) << "No assignment table is currently loaded"; return false; @@ -662,8 +677,8 @@ namespace nil { const auto write = [&](std::ostream& out) -> bool { return assignment_table_writer::write_text_assignment( - out, - assignment_table_.value(), + out, + assignment_table_.value(), table_description_.value(), opts ); @@ -766,6 +781,7 @@ namespace nil { create_lpc_scheme(); BOOST_LOG_TRIVIAL(info) << "Preprocessing public data"; + auto start = std::chrono::high_resolution_clock::now(); public_preprocessed_data_.emplace( nil::crypto3::zk::snark::placeholder_public_preprocessor:: process( @@ -776,16 +792,21 @@ namespace nil { max_quotient_chunks_ ) ); + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "PREPROCESS: " << duration.count() << "\n"; return true; } bool preprocess_private_data() { BOOST_LOG_TRIVIAL(info) << "Preprocessing private data"; + auto start = std::chrono::high_resolution_clock::now(); private_preprocessed_data_.emplace( nil::crypto3::zk::snark::placeholder_private_preprocessor:: process(*constraint_system_, assignment_table_->move_private_table(), *table_description_) ); + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "PREPROCESS PRIVATE DATA: " << duration.count() << "\n"; // This is the last stage of preprocessor, and the assignment table is not used after this function call. assignment_table_.reset(); @@ -890,7 +911,7 @@ namespace nil { /* Marshalling types */ using partial_proof_marshalled_type = nil::crypto3::marshalling::types:: - placeholder_proof, Proof>; + placeholder_proof, Proof>; using initial_proof_marshalling_type = nil::crypto3::marshalling::types:: inital_eval_proof; @@ -974,7 +995,7 @@ namespace nil { bool save_proof_of_work( const typename FriType::grinding_type::output_type &proof_of_work, const boost::filesystem::path &output_file) { - using POW_marshalling_type = nil::marshalling::types::integral; + using POW_marshalling_type = nil::crypto3::marshalling::types::integral; BOOST_LOG_TRIVIAL(info) << "Writing proof of work to " << output_file; POW_marshalling_type marshalled_pow(proof_of_work); @@ -1099,16 +1120,28 @@ namespace nil { } bool setup_prover() { + auto start = std::chrono::high_resolution_clock::now(); const auto err = CircuitFactory::initialize_circuit(circuit_name_, constraint_system_, assignment_table_, table_description_); if (err) { BOOST_LOG_TRIVIAL(error) << "Can't initialize circuit " << circuit_name_ << ": " << err.value(); return false; } - + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "PRESET: " << duration.count() << "\n"; return true; } - bool fill_assignment_table(const boost::filesystem::path& trace_file_path) { + const ConstraintSystem& get_constraint_system() const { + BOOST_ASSERT(constraint_system_); + return constraint_system_.value(); + } + + const AssignmentTable& get_assignment_table() const { + BOOST_ASSERT(assignment_table_); + return assignment_table_.value(); + } + + bool fill_assignment_table(const boost::filesystem::path& trace_base_path) { if (!constraint_system_.has_value()) { BOOST_LOG_TRIVIAL(error) << "Circuit is not initialized"; return false; @@ -1117,9 +1150,9 @@ namespace nil { BOOST_LOG_TRIVIAL(error) << "Assignment table is not initialized"; return false; } - const auto err = fill_assignment_table_single_thread(*assignment_table_, *table_description_, circuit_name_, trace_file_path); + const auto err = fill_assignment_table_single_thread(*assignment_table_, *table_description_, circuit_name_, trace_base_path); if (err) { - BOOST_LOG_TRIVIAL(error) << "Can't fill assignment table rom trace " << trace_file_path << ": " << err.value(); + BOOST_LOG_TRIVIAL(error) << "Can't fill assignment table from trace " << trace_base_path << ": " << err.value(); return false; } return true; diff --git a/proof-producer/bin/proof-producer/src/arg_parser.cpp b/proof-producer/bin/proof-producer/src/arg_parser.cpp index 11eeb4b651..d25388b56f 100644 --- a/proof-producer/bin/proof-producer/src/arg_parser.cpp +++ b/proof-producer/bin/proof-producer/src/arg_parser.cpp @@ -81,7 +81,7 @@ namespace nil { ("preprocessed-data", make_defaulted_option(prover_options.preprocessed_public_data_path), "Preprocessed public data file") ("commitment-state-file", make_defaulted_option(prover_options.commitment_scheme_state_path), "Commitment state data file") ("updated-commitment-state-file", make_defaulted_option(prover_options.updated_commitment_scheme_state_path), "Updated commitment state data file") - ("trace", po::value(&prover_options.trace_file_path), "EVM trace input file") + ("trace", po::value(&prover_options.trace_base_path), "Base path for EVM trace files") ("circuit", po::value(&prover_options.circuit_file_path), "Circuit input file") ("circuit-name", po::value(&prover_options.circuit_name), "Target circuit name") ("assignment-table,t", po::value(&prover_options.assignment_table_file_path), "Assignment table input file") @@ -121,7 +121,7 @@ namespace nil { ("proof-of-work-file", make_defaulted_option(prover_options.proof_of_work_output_file), "File with proof of work."); register_output_artifacts_cli_args(prover_options.output_artifacts, config); - + // clang-format on po::options_description cmdline_options("nil; Proof Producer"); cmdline_options.add(generic).add(config); diff --git a/proof-producer/bin/proof-producer/src/arg_parser.hpp b/proof-producer/bin/proof-producer/src/arg_parser.hpp index 803b85cdb2..5982017e5d 100644 --- a/proof-producer/bin/proof-producer/src/arg_parser.hpp +++ b/proof-producer/bin/proof-producer/src/arg_parser.hpp @@ -44,7 +44,7 @@ namespace nil { boost::filesystem::path preprocessed_public_data_path = "preprocessed_data.dat"; boost::filesystem::path commitment_scheme_state_path = "commitment_scheme_state.dat"; boost::filesystem::path updated_commitment_scheme_state_path = "updated_commitment_scheme_state.dat"; - boost::filesystem::path trace_file_path; + boost::filesystem::path trace_base_path; boost::filesystem::path circuit_file_path; boost::filesystem::path assignment_table_file_path; boost::filesystem::path assignment_description_file_path; diff --git a/proof-producer/bin/proof-producer/src/main.cpp b/proof-producer/bin/proof-producer/src/main.cpp index 8238809de8..6a66e7f4c2 100644 --- a/proof-producer/bin/proof-producer/src/main.cpp +++ b/proof-producer/bin/proof-producer/src/main.cpp @@ -72,10 +72,13 @@ int run_prover(const nil::proof_generator::ProverOptions& prover_options) { } break; case nil::proof_generator::detail::ProverStage::ASSIGNMENT: - prover_result = prover.setup_prover() && prover.fill_assignment_table(prover_options.trace_file_path); + prover_result = prover.setup_prover() && prover.fill_assignment_table(prover_options.trace_base_path); if (!prover_options.assignment_table_file_path.empty() && prover_result) { prover_result = prover.save_binary_assignment_table_to_file(prover_options.assignment_table_file_path); } + if (!prover_options.assignment_description_file_path.empty() && prover_result) { + prover_result = prover.save_assignment_description(prover_options.assignment_description_file_path); + } break; case nil::proof_generator::detail::ProverStage::PREPROCESS: prover_result = @@ -87,6 +90,7 @@ int run_prover(const nil::proof_generator::ProverOptions& prover_options) { prover.save_preprocessed_common_data_to_file(prover_options.preprocessed_common_data_path) && prover.save_public_preprocessed_data_to_file(prover_options.preprocessed_public_data_path) && prover.save_commitment_state_to_file(prover_options.commitment_scheme_state_path)&& + prover.save_assignment_description(prover_options.assignment_description_file_path) && prover.print_evm_verifier(prover_options.evm_verifier_path); break; case nil::proof_generator::detail::ProverStage::PROVE: @@ -121,6 +125,20 @@ int run_prover(const nil::proof_generator::ProverOptions& prover_options) { prover_options.theta_power_file_path) && prover.save_commitment_state_to_file(prover_options.updated_commitment_scheme_state_path); break; + case nil::proof_generator::detail::ProverStage::FAST_GENERATE_PARTIAL_PROOF: + // Preset, fill assignment table, preprocess + prover_result = + prover.setup_prover() && + prover.fill_assignment_table(prover_options.trace_base_path) && + prover.preprocess_public_data() && + prover.save_preprocessed_common_data_to_file(prover_options.preprocessed_common_data_path) && + prover.preprocess_private_data() && + prover.generate_partial_proof_to_file( + prover_options.proof_file_path, + prover_options.challenge_file_path, + prover_options.theta_power_file_path) && + prover.save_commitment_state_to_file(prover_options.updated_commitment_scheme_state_path); + break; case nil::proof_generator::detail::ProverStage::VERIFY: prover_result = prover.read_circuit(prover_options.circuit_file_path) && diff --git a/proof-producer/libs/assigner/CMakeLists.txt b/proof-producer/libs/assigner/CMakeLists.txt index 278c816f17..980f603c85 100644 --- a/proof-producer/libs/assigner/CMakeLists.txt +++ b/proof-producer/libs/assigner/CMakeLists.txt @@ -1,9 +1,37 @@ -add_library(proof_generatorAssigner SHARED - src/trace_parser.cpp +find_package(Protobuf REQUIRED) +find_package(absl REQUIRED) + + +file(GLOB PROTO_FILES "proto/*.proto") + +foreach(PROTO_FILE ${PROTO_FILES}) + get_filename_component(PROTO_NAME_WE ${PROTO_FILE} NAME_WE) + get_filename_component(PROTO_DIR ${PROTO_FILE} DIRECTORY) + + set(OUTPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include/nil/proof-generator/assigner") + set(PROTO_HDR "${OUTPUT_DIR}/${PROTO_NAME_WE}.pb.h") + set(PROTO_SRC "${OUTPUT_DIR}/${PROTO_NAME_WE}.pb.cc") + + add_custom_command( + OUTPUT ${PROTO_HDR} ${PROTO_SRC} + COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} + ARGS --cpp_out=${OUTPUT_DIR} --proto_path ${PROTO_DIR} ${PROTO_FILE} + DEPENDS ${PROTO_FILE} + COMMENT "Generating ${PROTO_SRC} and ${PROTO_HDR} from ${PROTO_FILE}" + VERBATIM + ) + + list(APPEND GENERATED_SOURCES ${PROTO_SRC}) + list(APPEND GENERATED_HEADERS ${PROTO_HDR}) +endforeach() + +add_library(proof_generatorAssigner STATIC + ${PROTO_SRC} ) +set_target_properties(proof_generatorAssigner PROPERTIES CXX_STANDARD 20) target_include_directories(proof_generatorAssigner - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${PROTOBUF_INCLUDE_DIR} ) find_package(Boost REQUIRED COMPONENTS filesystem log) @@ -13,11 +41,28 @@ endif() target_link_libraries(proof_generatorAssigner PUBLIC + proof_generatorPreset crypto3::common + Boost::filesystem Boost::log + absl::strings + absl::log_internal_check_op + ${PROTOBUF_LIBRARY} ) +if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(proof_generatorAssigner PRIVATE "-fconstexpr-steps=2147483647") + + # without it abseil-cpp fails to link with clang19-compiled code, see https://github.com/llvm/llvm-project/issues/102443 + target_compile_options(proof_generatorAssigner PRIVATE "-fclang-abi-compat=17") +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(proof_generatorAssigner PRIVATE "-fconstexpr-ops-limit=4294967295") +endif () + install(TARGETS proof_generatorAssigner DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/proto + DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/assigner.hpp b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/assigner.hpp index e886954f57..0904d8d4af 100644 --- a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/assigner.hpp +++ b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/assigner.hpp @@ -1,7 +1,13 @@ #ifndef PROOF_GENERATOR_LIBS_ASSIGNER_ASSIGNER_HPP_ #define PROOF_GENERATOR_LIBS_ASSIGNER_ASSIGNER_HPP_ -#include +#include + +#include +#include +#include +#include + namespace nil { namespace proof_generator { @@ -9,12 +15,15 @@ namespace nil { template std::map( nil::crypto3::zk::snark::plonk_assignment_table& assignment_table, - const boost::filesystem::path& trace_file_path)>> circuit_selector = { - {"add", fill_add_assignment_table} + const boost::filesystem::path& trace_base_path)>> circuit_selector = { + {circuits::BYTECODE, fill_bytecode_assignment_table}, + {circuits::RW, fill_rw_assignment_table}, + {circuits::ZKEVM, fill_zkevm_assignment_table}, + {circuits::COPY, fill_copy_events_assignment_table} }; template - void set_paddnig(nil::crypto3::zk::snark::plonk_assignment_table& assignment_table) { + void set_padding(nil::crypto3::zk::snark::plonk_assignment_table& assignment_table) { std::uint32_t used_rows_amount = assignment_table.rows_amount(); std::uint32_t padded_rows_amount = std::pow(2, std::ceil(std::log2(used_rows_amount))); @@ -25,28 +34,24 @@ namespace nil { padded_rows_amount = 8; } - assignment_table.resize_witnesses(padded_rows_amount); for (std::uint32_t i = 0; i < assignment_table.witnesses_amount(); i++) { for (std::uint32_t j = assignment_table.witness_column_size(i); j < padded_rows_amount; j++) { assignment_table.witness(i, j) = 0; } } - assignment_table.resize_public_inputs(padded_rows_amount); for (std::uint32_t i = 0; i < assignment_table.public_inputs_amount(); i++) { for (std::uint32_t j = assignment_table.public_input_column_size(i); j < padded_rows_amount; j++) { assignment_table.public_input(i, j) = 0; } } - assignment_table.resize_constants(padded_rows_amount); for (std::uint32_t i = 0; i < assignment_table.constants_amount(); i++) { for (std::uint32_t j = assignment_table.constant_column_size(i); j < padded_rows_amount; j++) { assignment_table.constant(i, j) = 0; } } - assignment_table.resize_selectors(padded_rows_amount); for (std::uint32_t i = 0; i < assignment_table.selectors_amount(); i++) { for (std::uint32_t j = assignment_table.selector_column_size(i); j < padded_rows_amount; j++) { assignment_table.selector(i, j) = 0; @@ -58,18 +63,19 @@ namespace nil { std::optional fill_assignment_table_single_thread(nil::crypto3::zk::snark::plonk_assignment_table& assignment_table, nil::crypto3::zk::snark::plonk_table_description& desc, const std::string& circuit_name, - const boost::filesystem::path& trace_file_path) { + const boost::filesystem::path& trace_base_path) { auto find_it = circuit_selector.find(circuit_name); if (find_it == circuit_selector.end()) { return "Unknown circuit name " + circuit_name; } - const auto err = find_it->second(assignment_table, trace_file_path); + const auto err = find_it->second(assignment_table, trace_base_path); if (err) { return err; } desc.usable_rows_amount = assignment_table.rows_amount(); - set_paddnig(assignment_table); + set_padding(assignment_table); desc.rows_amount = assignment_table.rows_amount(); + BOOST_LOG_TRIVIAL(debug) << "total rows amount = " << desc.rows_amount << " for " << circuit_name << "\n"; return {}; } } // proof_generator diff --git a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/bytecode.hpp b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/bytecode.hpp new file mode 100644 index 0000000000..620bd0e8ef --- /dev/null +++ b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/bytecode.hpp @@ -0,0 +1,50 @@ +#ifndef PROOF_GENERATOR_LIBS_ASSIGNER_BYTECODE_HPP_ +#define PROOF_GENERATOR_LIBS_ASSIGNER_BYTECODE_HPP_ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace nil { + namespace proof_generator { + + /// @brief Fill assignment table + template + std::optional fill_bytecode_assignment_table(nil::crypto3::zk::snark::plonk_assignment_table& assignment_table, + const boost::filesystem::path& trace_base_path) { + BOOST_LOG_TRIVIAL(debug) << "fill bytecode table from " << trace_base_path << "\n"; + + using ComponentType = nil::blueprint::bbf::bytecode; + + typename nil::blueprint::bbf::context context_object(assignment_table, limits::max_rows); + + typename ComponentType::input_type input; + input.rlc_challenge = limits::RLC_CHALLENGE; + + const auto bytecode_trace_path = get_bytecode_trace_path(trace_base_path); + const auto contract_bytecodes = deserialize_bytecodes_from_file(bytecode_trace_path); + if (!contract_bytecodes) { + return "can't read bytecode trace from file: " + bytecode_trace_path.string(); + } + + for (const auto& bytecode_it : contract_bytecodes.value()) { + const auto raw_bytecode = string_to_bytes(bytecode_it.second); + input.bytecodes.new_buffer(raw_bytecode); + input.keccak_buffers.new_buffer(raw_bytecode); + } + + auto start = std::chrono::high_resolution_clock::now(); + ComponentType instance(context_object, input, limits::max_bytecode_size, limits::max_keccak_blocks); + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "FILL ASSIGNMENT TABLE: " << duration.count() << "\n"; + return {}; + } + } // proof_generator +} // nil + +#endif // PROOF_GENERATOR_LIBS_ASSIGNER_BYTECODE_HPP_ diff --git a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/copy.hpp b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/copy.hpp new file mode 100644 index 0000000000..2db30c4aa1 --- /dev/null +++ b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/copy.hpp @@ -0,0 +1,74 @@ +#ifndef PROOF_GENERATOR_LIBS_ASSIGNER_COPY_HPP_ +#define PROOF_GENERATOR_LIBS_ASSIGNER_COPY_HPP_ + +#include +#include + +#include +#include + +#include +#include +#include +#include + + +namespace nil { + namespace proof_generator { + + /// @brief Fill assignment table + template + std::optional fill_copy_events_assignment_table(nil::crypto3::zk::snark::plonk_assignment_table& assignment_table, + const boost::filesystem::path& trace_base_path) { + BOOST_LOG_TRIVIAL(debug) << "fill copy table from " << trace_base_path << "\n"; + + using ComponentType = nil::blueprint::bbf::copy; + + typename nil::blueprint::bbf::context context_object(assignment_table, limits::max_rows); + + typename ComponentType::input_type input; + input.rlc_challenge = limits::RLC_CHALLENGE; + + const auto copy_trace_path = get_copy_trace_path(trace_base_path); + auto copy_events = deserialize_copy_events_from_file(copy_trace_path); + if (!copy_events) { + return "can't read copy events from file: " + copy_trace_path.string(); + } + input.copy_events = std::move(copy_events.value()); + + const auto bytecode_trace_path = get_bytecode_trace_path(trace_base_path); + const auto contract_bytecodes = deserialize_bytecodes_from_file(bytecode_trace_path); + if (!contract_bytecodes) { + return "can't read bytecode trace from file: " + bytecode_trace_path.string(); + } + for (const auto& bytecode_it : contract_bytecodes.value()) { + const auto raw_bytecode = string_to_bytes(bytecode_it.second); + input.bytecodes.new_buffer(raw_bytecode); + input.keccak_buffers.new_buffer(raw_bytecode); + } + + const auto rw_trace_path = get_rw_trace_path(trace_base_path); + auto rw_operations = deserialize_rw_traces_from_file(rw_trace_path); + if (!rw_operations) { + return "can't read rw operations trace from file: " + rw_trace_path.string(); + } + input.rw_operations = std::move(rw_operations.value()); + + auto start = std::chrono::high_resolution_clock::now(); + ComponentType instance( + context_object, + input, + limits::max_copy, + limits::max_rw_size, + limits::max_keccak_blocks, + limits::max_bytecode_size + ); + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "FILL ASSIGNMENT TABLE: " << duration.count() << "\n"; + + return {}; + } + } // proof_generator +} // nil + +#endif // PROOF_GENERATOR_LIBS_ASSIGNER_COPY_HPP_ diff --git a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/rw.hpp b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/rw.hpp new file mode 100644 index 0000000000..05a7c4d395 --- /dev/null +++ b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/rw.hpp @@ -0,0 +1,42 @@ +#ifndef PROOF_GENERATOR_LIBS_ASSIGNER_RW_HPP_ +#define PROOF_GENERATOR_LIBS_ASSIGNER_RW_HPP_ + +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace nil { + namespace proof_generator { + + /// @brief Fill assignment table + template + std::optional fill_rw_assignment_table(nil::crypto3::zk::snark::plonk_assignment_table& assignment_table, + const boost::filesystem::path& trace_base_path) { + BOOST_LOG_TRIVIAL(debug) << "fill rw table from " << trace_base_path << "\n"; + + using ComponentType = nil::blueprint::bbf::rw; + + typename nil::blueprint::bbf::context context_object(assignment_table, limits::max_rows); + + const auto rw_trace_path = get_rw_trace_path(trace_base_path); + auto input = deserialize_rw_traces_from_file(rw_trace_path); + if (!input) { + return "can't read rw from file: " + rw_trace_path.string(); + } + + auto start = std::chrono::high_resolution_clock::now(); + ComponentType instance(context_object, input.value(), limits::max_rw_size, limits::max_mpt_size); + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "FILL ASSIGNMENT TABLE: " << duration.count() << "\n"; + return {}; + } + } // proof_generator +} // nil + +#endif // PROOF_GENERATOR_LIBS_ASSIGNER_RW_HPP_ diff --git a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/trace_parser.hpp b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/trace_parser.hpp index 4d79680a54..19b6c64855 100644 --- a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/trace_parser.hpp +++ b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/trace_parser.hpp @@ -1,36 +1,284 @@ #ifndef PROOF_GENERATOR_LIBS_ASSIGNER_TRACE_PARSER_HPP_ #define PROOF_GENERATOR_LIBS_ASSIGNER_TRACE_PARSER_HPP_ -#include +#include #include -#include - +#include +#include #include #include +#include + +#include +#include +#include +#include + +#include namespace nil { namespace proof_generator { - class trace_parser { - public: - /// @brief Initialize file read iterators - trace_parser(const boost::filesystem::path& trace_file_path): - m_op_code_it(trace_file_path), m_stack_op_it(trace_file_path), m_mem_op_it(trace_file_path) {} - /// @brief Read next stack operation - std::optional get_next_stack_op(); + + const char BYTECODE_EXTENSION[] = ".bc"; + const char RW_EXTENSION[] = ".rw"; + const char ZKEVM_EXTENSION[] = ".zkevm"; + const char COPY_EXTENSION[] = ".copy"; + + namespace { + + // Convert protobuf Uint256 to zkevm_word_type + [[nodiscard]] blueprint::zkevm_word_type proto_uint256_to_zkevm_word(const executionproofs::Uint256& pb_uint) { + blueprint::zkevm_word_integral_type result = 0; + for (size_t i = 0; i < pb_uint.word_parts_size() && i < 4; i++) { + result |= (static_cast(pb_uint.word_parts(i)) << (i * 64)); + } + return result; + } + + boost::filesystem::path extend_base_path(boost::filesystem::path base, + const char* extension) { + std::string current_extension = base.has_extension() ? base.extension().string() : ""; + auto new_extension = base.extension().string() + extension; + return base.replace_extension(new_extension); + } + + template + [[nodiscard]] std::optional read_pb_traces_from_file(const boost::filesystem::path& filename) { + std::ifstream file(filename.c_str(), std::ios::in | std::ios::binary); + if (!file.is_open()) { + return std::nullopt; + } + + ProtoTraces pb_traces; + if (!pb_traces.ParseFromIstream(&file)) { + return std::nullopt; + } + return pb_traces; + } + + [[nodiscard]] std::optional + > copy_operand_from_proto(const ::executionproofs::CopyParticipant& pb_participant) noexcept { + using ::executionproofs::CopyLocation; + using blueprint::bbf::copy_operand_type; + + static const std::unordered_map mapping_ = { + {CopyLocation::MEMORY, copy_operand_type::memory}, + {CopyLocation::BYTECODE, copy_operand_type::bytecode}, + {CopyLocation::LOG, copy_operand_type::log}, + {CopyLocation::KECCAK, copy_operand_type::keccak}, + {CopyLocation::RETURNDATA, copy_operand_type::returndata}, + {CopyLocation::CALLDATA, copy_operand_type::calldata} + // padding is not expected to be read from the trace file + }; + + const auto it = mapping_.find(pb_participant.location()); + if (it == mapping_.end()) { + BOOST_LOG_TRIVIAL(warning) << "Unknown copy operand type: " << static_cast(pb_participant.location()); + return std::nullopt; + } + + const auto _type = it->second; + blueprint::zkevm_word_type id{}; + switch (_type) { + case copy_operand_type::memory: + case copy_operand_type::calldata: + case copy_operand_type::returndata: + case copy_operand_type::log: + id = pb_participant.call_id(); + break; + case copy_operand_type::bytecode: + id = blueprint::zkevm_word_from_string(pb_participant.bytecode_hash()); + break; + case copy_operand_type::keccak: + id = blueprint::zkevm_word_from_string(pb_participant.keccak_hash()); + break; + default: + BOOST_LOG_TRIVIAL(warning) << "Unable to determine id for copy operand: " << static_cast(_type); + return std::nullopt; + } + + return std::make_pair(_type, id); + } + } // namespace + + boost::filesystem::path get_bytecode_trace_path(const boost::filesystem::path& trace_base_path) { + return extend_base_path(trace_base_path, BYTECODE_EXTENSION); + } + + boost::filesystem::path get_rw_trace_path(const boost::filesystem::path& trace_base_path) { + return extend_base_path(trace_base_path, RW_EXTENSION); + } + + boost::filesystem::path get_zkevm_trace_path(const boost::filesystem::path& trace_base_path) { + return extend_base_path(trace_base_path, ZKEVM_EXTENSION); + } + + boost::filesystem::path get_copy_trace_path(const boost::filesystem::path& trace_base_path) { + return extend_base_path(trace_base_path, COPY_EXTENSION); + } + + std::vector string_to_bytes(const std::string& str) { + std::vector res(str.size()); + for (std::size_t i = 0; i < str.size(); i++) { + res[i] = str[i]; + } + return res; + } + + [[nodiscard]] std::optional> deserialize_bytecodes_from_file(const boost::filesystem::path& bytecode_trace_path) { + const auto pb_traces = read_pb_traces_from_file(bytecode_trace_path); + if (!pb_traces) { + return std::nullopt; + } + + // Read executed op codes + std::unordered_map contract_bytecodes; + const auto& bytecodes = pb_traces->contract_bytecodes(); + for (const auto& bytecode : bytecodes) { + contract_bytecodes.emplace(bytecode.first, bytecode.second); + } + + return contract_bytecodes; + } + + [[nodiscard]] std::optional deserialize_rw_traces_from_file(const boost::filesystem::path& rw_traces_path) { + const auto pb_traces = read_pb_traces_from_file(rw_traces_path); + if (!pb_traces) { + return std::nullopt; + } + + blueprint::bbf::rw_operations_vector rw_traces; + rw_traces.reserve(pb_traces->stack_ops_size() + pb_traces->memory_ops_size() + pb_traces->storage_ops_size() + 1); // +1 slot for start op + + // Convert stack operations + for (const auto& pb_sop : pb_traces->stack_ops()) { + rw_traces.push_back(blueprint::bbf::stack_rw_operation( + static_cast(pb_sop.msg_id()), + static_cast(pb_sop.index()), + static_cast(pb_sop.rw_idx()), + !pb_sop.is_read(), + proto_uint256_to_zkevm_word(pb_sop.value())) + ); + } + + // Convert memory operations + for (const auto& pb_mop : pb_traces->memory_ops()) { + auto value = string_to_bytes(pb_mop.value()); + auto const op = blueprint::bbf::memory_rw_operation( + static_cast(pb_mop.msg_id()), + blueprint::zkevm_word_type(static_cast(pb_mop.index())), + static_cast(pb_mop.rw_idx()), + !pb_mop.is_read(), + blueprint::zkevm_word_from_bytes(value) + ); + rw_traces.push_back(std::move(op)); + } + + // Convert storage operations + for (const auto& pb_sop : pb_traces->storage_ops()) { + auto op = blueprint::bbf::storage_rw_operation( + static_cast(pb_sop.msg_id()), + blueprint::zkevm_word_from_string(static_cast(pb_sop.key())), + static_cast(pb_sop.rw_idx()), + !pb_sop.is_read(), + proto_uint256_to_zkevm_word(pb_sop.value()), + proto_uint256_to_zkevm_word(pb_sop.initial_value()), + blueprint::zkevm_word_from_string(pb_sop.address().address_bytes()) + ); + //TODO root and initial_root? + rw_traces.push_back(std::move(op)); + } + + std::sort(rw_traces.begin(), rw_traces.end(), std::less()); + + BOOST_LOG_TRIVIAL(debug) << "number RW operations " << rw_traces.size() << ":\n" + << "stack " << pb_traces->stack_ops_size() << "\n" + << "memory " << pb_traces->memory_ops_size() << "\n" + << "storage " << pb_traces->storage_ops_size() << "\n"; + + return rw_traces; + } + + [[nodiscard]] std::optional> deserialize_zkevm_state_traces_from_file(const boost::filesystem::path& zkevm_traces_path) { + const auto pb_traces = read_pb_traces_from_file(zkevm_traces_path); + if (!pb_traces) { + return std::nullopt; + } + + std::vector zkevm_states; + zkevm_states.reserve(pb_traces->zkevm_states_size()); + for (const auto& pb_state : pb_traces->zkevm_states()) { + std::vector stack; + stack.reserve(pb_state.stack_slice_size()); + for (const auto& pb_stack_val : pb_state.stack_slice()) { + stack.push_back(proto_uint256_to_zkevm_word(pb_stack_val)); + } + std::map memory; + for (const auto& pb_memory_val : pb_state.memory_slice()) { + memory.emplace(pb_memory_val.first, pb_memory_val.second); + } + std::map storage; + for (const auto& pb_storage_entry : pb_state.storage_slice()) { + storage.emplace(proto_uint256_to_zkevm_word(pb_storage_entry.key()), proto_uint256_to_zkevm_word(pb_storage_entry.value())); + } + zkevm_states.emplace_back(stack, memory, storage); + zkevm_states.back().call_id = static_cast(pb_state.call_id()); + zkevm_states.back().pc = static_cast(pb_state.pc()); + zkevm_states.back().gas = static_cast(pb_state.gas()); + zkevm_states.back().rw_counter = static_cast(pb_state.rw_idx()); + zkevm_states.back().bytecode_hash = blueprint::zkevm_word_from_string(static_cast(pb_state.bytecode_hash())); + zkevm_states.back().opcode = static_cast(pb_state.opcode()); + zkevm_states.back().additional_input = proto_uint256_to_zkevm_word(pb_state.additional_input()), + zkevm_states.back().stack_size = static_cast(pb_state.stack_size()); + zkevm_states.back().memory_size = static_cast(pb_state.memory_size()); + zkevm_states.back().tx_finish = static_cast(pb_state.tx_finish()); + zkevm_states.back().error_opcode = static_cast(pb_state.error_opcode()); + } + + return zkevm_states; + } + + [[nodiscard]] std::optional> deserialize_copy_events_from_file(const boost::filesystem::path& copy_traces_file) { + const auto pb_traces = read_pb_traces_from_file(copy_traces_file); + if (!pb_traces) { + return std::nullopt; + } + + namespace bbf = blueprint::bbf; + + std::vector copy_events; + copy_events.reserve(pb_traces->copy_events_size()); + for (const auto& pb_event: pb_traces->copy_events()) { + bbf::copy_event event; + event.initial_rw_counter = pb_event.rw_idx(); + + const auto source = copy_operand_from_proto(pb_event.from()); + if (!source) { + return std::nullopt; + } + event.source_type = source->first; + event.source_id = source->second; + event.src_address = pb_event.from().mem_address(); - /// @brief Read next stack operation - std::optional get_next_mem_op(); + const auto dest = copy_operand_from_proto(pb_event.to()); + if (!dest) { + return std::nullopt; + } + event.destination_type = dest->first; + event.destination_id = dest->second; + event.dst_address = pb_event.to().mem_address(); - /// @brief Read list of operations - std::optional get_op_codes(); - private: - std::ifstream m_op_code_it; - std::ifstream m_stack_op_it; - std::ifstream m_mem_op_it; - }; + event.bytes = std::move(string_to_bytes(pb_event.data())); + event.length = event.bytes.size(); - } // proof_generator -} // nil + copy_events.push_back(std::move(event)); + } + return copy_events; + } + } // namespace proof_generator +} // namespace nil #endif // PROOF_GENERATOR_LIBS_ASSIGNER_TRACE_PARSER_HPP_ diff --git a/proof-producer/libs/assigner/include/nil/proof-generator/assigner/zkevm.hpp b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/zkevm.hpp new file mode 100644 index 0000000000..f818614ed8 --- /dev/null +++ b/proof-producer/libs/assigner/include/nil/proof-generator/assigner/zkevm.hpp @@ -0,0 +1,81 @@ +#ifndef PROOF_GENERATOR_LIBS_ASSIGNER_ZKEVM_HPP_ +#define PROOF_GENERATOR_LIBS_ASSIGNER_ZKEVM_HPP_ + +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace nil { + namespace proof_generator { + + /// @brief Fill assignment table + template + std::optional fill_zkevm_assignment_table(nil::crypto3::zk::snark::plonk_assignment_table& assignment_table, + const boost::filesystem::path& trace_base_path) { + BOOST_LOG_TRIVIAL(debug) << "fill zkevm table from " << trace_base_path << "\n"; + + using ComponentType = nil::blueprint::bbf::zkevm; + + typename nil::blueprint::bbf::context context_object(assignment_table, limits::max_rows); + + typename ComponentType::input_type input; + + // bytecode + const auto bytecode_trace_path = get_bytecode_trace_path(trace_base_path); + const auto contract_bytecodes = deserialize_bytecodes_from_file(bytecode_trace_path); + if (!contract_bytecodes) { + return "can't read bytecode from file: " + bytecode_trace_path.string(); + } + for (const auto& bytecode_it : contract_bytecodes.value()) { + const auto raw_bytecode = string_to_bytes(bytecode_it.second); + input.bytecodes.new_buffer(raw_bytecode); + input.keccak_buffers.new_buffer(raw_bytecode); + } + + // rw + const auto rw_trace_path = get_rw_trace_path(trace_base_path); + auto rw_operations = deserialize_rw_traces_from_file(rw_trace_path); + if (!rw_operations) { + return "can't read rw from file: " + rw_trace_path.string(); + } + input.rw_operations = std::move(rw_operations.value()); + + // states + const auto zkevm_trace_path = get_zkevm_trace_path(trace_base_path); + const auto zkevm_states = deserialize_zkevm_state_traces_from_file(zkevm_trace_path); + if (!zkevm_states) { + return "can't read zkevm states from file: " + zkevm_trace_path.string(); + } + input.zkevm_states = zkevm_states.value(); + + const auto copy_trace_path = get_copy_trace_path(trace_base_path); + const auto copy_events = deserialize_copy_events_from_file(copy_trace_path); + if (!copy_events) { + return "can't read copy events from file: " + copy_trace_path.string(); + } + input.copy_events = copy_events.value(); + + auto start = std::chrono::high_resolution_clock::now(); + ComponentType instance( + context_object, + input, + limits::max_zkevm_rows, + limits::max_copy, + limits::max_rw_size, + limits::max_keccak_blocks, + limits::max_bytecode_size + ); + auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); + std::cout << "FILL ASSIGNMENT TABLE: " << duration.count() << "\n"; + return {}; + } + } // proof_generator +} // nil + +#endif // PROOF_GENERATOR_LIBS_ASSIGNER_ZKEVM_HPP_ diff --git a/proof-producer/libs/assigner/proto/trace.proto b/proof-producer/libs/assigner/proto/trace.proto new file mode 100644 index 0000000000..cf42668e68 --- /dev/null +++ b/proof-producer/libs/assigner/proto/trace.proto @@ -0,0 +1,145 @@ +syntax = "proto3"; + +package executionproofs; +option go_package = "/proto"; + +// Uint256 represents a 256-bit unsigned integer as a sequence of uint64 parts +message Uint256 { + repeated uint64 word_parts = 1; // 4 uint64 parts composing the 256-bit number +} + +// Address represents an Ethereum address +message Address { + bytes address_bytes = 1; // 20-byte address +} + +// StackOp represents a single stack operation () +message StackOp { + bool is_read = 1; + int32 index = 2; // Index in the stack + Uint256 value = 3; + uint64 pc = 4; + uint64 msg_id = 5; // Number of message within a block + uint64 rw_idx = 6; // shared between all ops counter +} + +// MemoryOp represents a single memory operation (byte) +message MemoryOp { + bool is_read = 1; + int32 index = 2; // Index in memory + bytes value = 3; // Single byte value + uint64 pc = 4; + uint64 msg_id = 5; // Number of message within a block + uint64 rw_idx = 6; // shared between all ops counter +} + +// StorageOp represents a single storage operation +message StorageOp { + bool is_read = 1; + // HEX of hash, bytes would be more space-efficient, but less readable + string key = 2; + Uint256 value = 3; // Single byte value + Uint256 initial_value = 4; // Value before storage operation + uint64 pc = 5; + uint64 msg_id = 6; // Number of message within a block + uint64 rw_idx = 7; // shared between all ops counter + Address address = 8; // Contract address +} + +// SlotChangeTrace represents a trace of storage slot change. Only initial and final value for each message +message SlotChangeTrace { + // HEX of hashes, bytes would be more space-efficient, but less readable + string key = 1; + string root_before = 2; + string root_after = 3; + Uint256 value_before = 4; + Uint256 value_after = 5; + bytes ssz_proof = 6; +} + +message AddressSlotsChanges { + repeated SlotChangeTrace slots_changes = 1; +} + +// MessageSlotChanges contains traces related to a single executed message +message MessageSlotChanges { + // HEX address to slots changes in address's storage + map storage_traces_by_address = 1; +} + +// StorageEntry is a key-value pair representing a single piece of storage data +message StorageEntry { + Uint256 key = 1; + Uint256 value = 2; +} + +message ZKEVMState { + string tx_hash = 1; + uint64 call_id = 2; + uint64 pc = 3; + uint64 gas = 4; + uint64 rw_idx = 5; + string bytecode_hash = 6; + uint64 opcode = 7; + Uint256 additional_input = 8; + uint64 stack_size = 9; + uint64 memory_size = 10; + bool tx_finish = 11; + uint64 error_opcode = 12; + repeated Uint256 stack_slice = 13; + map memory_slice = 14; + repeated StorageEntry storage_slice = 15; +} + +enum CopyLocation { + MEMORY = 0; + BYTECODE = 1; + CALLDATA = 2; + LOG = 3; + KECCAK = 4; + RETURNDATA = 5; +} + +message CopyParticipant { + CopyLocation location = 1; + oneof id { + uint64 call_id = 2; + string bytecode_hash = 3; + string keccak_hash = 4; + } + uint64 mem_address = 5; +} + +message CopyEvent { + CopyParticipant from = 1; + CopyParticipant to = 2; + uint64 rw_idx = 3; + bytes data = 4; +} + + +// Traces collected for bytecode circuit +message BytecodeTraces { + map contract_bytecodes = 1; +} + +// Traces collected for rw circuit +message RWTraces { + repeated StackOp stack_ops = 1; + repeated MemoryOp memory_ops = 2; + repeated StorageOp storage_ops = 3; +} + +// Traces collected for zkevm circuit +message ZKEVMTraces { + repeated ZKEVMState zkevm_states = 1; +} + +// Traces collected for bytecode circuit +message CopyTraces { + repeated CopyEvent copy_events = 1; +} + +message MessageTraces { + repeated MessageSlotChanges message_slot_changes = 1; +} diff --git a/proof-producer/libs/assigner/src/trace_parser.cpp b/proof-producer/libs/assigner/src/trace_parser.cpp deleted file mode 100644 index 8fd36ebd44..0000000000 --- a/proof-producer/libs/assigner/src/trace_parser.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include - -namespace nil { - namespace proof_generator { - - std::optional trace_parser::get_next_stack_op() { - return {}; - } - - std::optional trace_parser::get_next_mem_op() { - return {}; - } - - std::optional trace_parser::get_op_codes() { - return {}; - } - } // proof_generator -} // nil diff --git a/proof-producer/libs/output_artifacts/CMakeLists.txt b/proof-producer/libs/output_artifacts/CMakeLists.txt index 3dc79ad574..de99519bf6 100644 --- a/proof-producer/libs/output_artifacts/CMakeLists.txt +++ b/proof-producer/libs/output_artifacts/CMakeLists.txt @@ -1,5 +1,5 @@ add_library(proof_generatorOutputArtifacts - SHARED + STATIC src/output_artifacts.cpp ) @@ -15,6 +15,7 @@ endif() target_link_libraries(proof_generatorOutputArtifacts PUBLIC crypto3::common + Boost::program_options Boost::log ) diff --git a/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/assignment_table_writer.hpp b/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/assignment_table_writer.hpp index 7dbff9146a..aca74c66e2 100644 --- a/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/assignment_table_writer.hpp +++ b/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/assignment_table_writer.hpp @@ -35,7 +35,7 @@ namespace nil { template class assignment_table_writer { - public: + public: using Column = nil::crypto3::zk::snark::plonk_column; using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; @@ -43,23 +43,23 @@ namespace nil { using AssignmentTableDescription = nil::crypto3::zk::snark::plonk_table_description; // marshalling traits - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using BlueprintFieldValueType = typename BlueprintField::value_type; using MarshallingField = nil::crypto3::marshalling::types::field_element< TTypeBase, BlueprintFieldValueType >; - private: + private: /** - * @brief Write size_t serialized as nil::marshalling::types::integral into output stream. + * @brief Write size_t serialized as nil::crypto3::marshalling::types::integral into output stream. */ static void write_size_t(std::ostream& out, size_t input) { - auto integer_container = nil::marshalling::types::integral(input); + auto integer_container = nil::crypto3::marshalling::types::integral(input); std::array char_array{}; auto write_iter = char_array.begin(); auto const status = integer_container.write(write_iter, char_array.size()); - assert(status == nil::marshalling::status_type::success); + assert(status == nil::crypto3::marshalling::status_type::success); out.write(reinterpret_cast(char_array.data()), char_array.size()); } @@ -83,7 +83,7 @@ namespace nil { std::array char_array{}; auto write_iter = char_array.begin(); auto const status = field_container.write(write_iter, char_array.size()); - assert(status == nil::marshalling::status_type::success); + assert(status == nil::crypto3::marshalling::status_type::success); out.write(reinterpret_cast(char_array.data()), char_array.size()); } diff --git a/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/circuit_writer.hpp b/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/circuit_writer.hpp index de4bcb47a4..26e0ea2b8a 100644 --- a/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/circuit_writer.hpp +++ b/proof-producer/libs/output_artifacts/include/nil/proof-generator/output_artifacts/circuit_writer.hpp @@ -31,7 +31,7 @@ namespace nil { template class circuit_writer { public: - using TTypeBase = nil::marshalling::field_type; + using TTypeBase = nil::crypto3::marshalling::field_type; using Circuit = nil::crypto3::zk::snark::plonk_constraint_system; circuit_writer() = delete; @@ -69,7 +69,7 @@ namespace nil { std::vector cv(filled_val.length(), 0x00); auto iter = cv.begin(); auto const status = filled_val.write(iter, cv.size()); - assert(status == nil::marshalling::status_type::success); + assert(status == nil::crypto3::marshalling::status_type::success); out.write(reinterpret_cast(cv.data()), cv.size()); } }; diff --git a/proof-producer/libs/preset/include/nil/proof-generator/preset/bytecode.hpp b/proof-producer/libs/preset/include/nil/proof-generator/preset/bytecode.hpp index b786ba1bbf..71cf25add6 100644 --- a/proof-producer/libs/preset/include/nil/proof-generator/preset/bytecode.hpp +++ b/proof-producer/libs/preset/include/nil/proof-generator/preset/bytecode.hpp @@ -4,8 +4,12 @@ #include #include #include -#include -#include +#include +#include +#include +#include +#include +#include #include #include @@ -13,52 +17,48 @@ namespace nil { namespace proof_generator { template std::optional initialize_bytecode_circuit( - std::optional>& bytecode_circuit, + std::optional>>& bytecode_circuit, std::optional>& bytecode_table) { - using ArithmetizationType = - nil::crypto3::zk::snark::plonk_constraint_system; - - using ComponentType = nil::blueprint::components::zkevm_bytecode; + using ComponentType = nil::blueprint::bbf::bytecode; // initialize assignment table - bytecode_circuit.emplace(); - bytecode_table.emplace(65, // witness - 1, // public - 5, // constants - 30 // selectors - ); + const auto desc = ComponentType::get_table_description(limits::max_bytecode_size, limits::max_keccak_blocks); + bytecode_table.emplace(desc.witness_columns, desc.public_input_columns, desc.constant_columns, desc.selector_columns); BOOST_LOG_TRIVIAL(debug) << "bytecode table:\n" << "witnesses = " << bytecode_table->witnesses_amount() << " public inputs = " << bytecode_table->public_inputs_amount() << " constants = " << bytecode_table->constants_amount() << " selectors = " << bytecode_table->selectors_amount() << "\n"; - // Prepare witness container to make an instance of the component - /*typename ComponentType::manifest_type m = ComponentType::get_manifest(); - size_t witness_amount = *(m.witness_amount->begin()); - std::vector witnesses(witness_amount); + std::size_t start_row = 0; + std::vector witnesses(desc.witness_columns); std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... + std::vector public_inputs(desc.public_input_columns); + std::iota(public_inputs.begin(), public_inputs.end(), 0); // fill 0, 1, ... + std::vector constants(desc.constant_columns); + std::iota(constants.begin(), constants.end(), 0); // fill 0, 1, ... - constexpr size_t max_code_size = 24576; - ComponentType component_instance = ComponentType( - witnesses, std::array{0}, std::array{0}, max_code_size); + using L1WrapperType = nil::blueprint::components::plonk_l1_wrapper; + L1WrapperType wrapper(witnesses, public_inputs, constants); - auto lookup_tables = component_instance.component_lookup_tables(); - for (auto& [k, v] : lookup_tables) { - bytecode_circuit->reserve_table(k); - } + typename ComponentType::input_type input; - // TODO: pass a proper public input here - typename ComponentType::input_type input({}, {}, typename ComponentType::var()); + nil::blueprint::circuit> circuit; - nil::blueprint::components::generate_circuit(component_instance, *bytecode_circuit, - *bytecode_table, input, 0); + nil::blueprint::components::generate_circuit( + wrapper, circuit, *bytecode_table, input, start_row, limits::max_bytecode_size, limits::max_keccak_blocks); + + zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, *bytecode_table, + bytecode_table->rows_amount(), + 100000 + ); - nil::crypto3::zk::snark::pack_lookup_tables_horizontal( - bytecode_circuit->get_reserved_indices(), bytecode_circuit->get_reserved_tables(), - bytecode_circuit->get_reserved_dynamic_tables(), *bytecode_circuit, *bytecode_table, - bytecode_table->rows_amount(), 500000);*/ + bytecode_circuit.emplace(circuit); return {}; } diff --git a/proof-producer/libs/preset/include/nil/proof-generator/preset/copy.hpp b/proof-producer/libs/preset/include/nil/proof-generator/preset/copy.hpp new file mode 100644 index 0000000000..694b1c8a21 --- /dev/null +++ b/proof-producer/libs/preset/include/nil/proof-generator/preset/copy.hpp @@ -0,0 +1,101 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include +#include + + +namespace nil { + namespace proof_generator { + + template + std::optional initialize_copy_circuit( + std::optional>>& copy_circuit, + std::optional>& copy_table) { + + namespace snark = crypto3::zk::snark; + namespace bbf = nil::blueprint::bbf; + + using ComponentType = bbf::copy; + + + // TODO move to common? BEGIN + + // initialize assignment table + const auto desc = ComponentType::get_table_description( + limits::max_copy, limits::max_rw_size, limits::max_keccak_blocks, limits::max_bytecode_size + ); + copy_table.emplace(desc.witness_columns, desc.public_input_columns, desc.constant_columns, desc.selector_columns); + + + BOOST_LOG_TRIVIAL(debug) << "copy table:\n" + << "witnesses = " << copy_table->witnesses_amount() + << " public inputs = " << copy_table->public_inputs_amount() + << " constants = " << copy_table->constants_amount() + << " selectors = " << copy_table->selectors_amount() + << " rows_amount = " << copy_table->rows_amount() + << "\n"; + + std::size_t start_row = 0; + std::vector witnesses(desc.witness_columns); + std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... + std::vector public_inputs(desc.public_input_columns); + std::iota(public_inputs.begin(), public_inputs.end(), 0); // fill 0, 1, ... + std::vector constants(desc.constant_columns); + std::iota(constants.begin(), constants.end(), 0); // fill 0, 1, ... + + // TODO move to common? END + + using L1WrapperType = blueprint::components::plonk_l1_wrapper< + BlueprintFieldType, + bbf::copy, + std::size_t, std::size_t, std::size_t, std::size_t + >; + L1WrapperType wrapper(witnesses, public_inputs, constants); + + + nil::blueprint::circuit> circuit; + typename ComponentType::input_type input; + input.rlc_challenge = limits::RLC_CHALLENGE; + + blueprint::components::generate_circuit( + wrapper, + circuit, + *copy_table, + input, + start_row, + limits::max_copy, + limits::max_rw_size, + limits::max_keccak_blocks, + limits::max_bytecode_size + ); + + snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, *copy_table, + copy_table->rows_amount(), + 100000 + ); + + BOOST_LOG_TRIVIAL(debug) << "copy table preset end:\n" + << "witnesses = " << copy_table->witnesses_amount() + << " public inputs = " << copy_table->public_inputs_amount() + << " constants = " << copy_table->constants_amount() + << " selectors = " << copy_table->selectors_amount() + << " rows_amount = " << copy_table->rows_amount() + << "\n"; + + copy_circuit.emplace(circuit); + + return {}; + } + + } // namespace proof_generator +} // namespace nil diff --git a/proof-producer/libs/preset/include/nil/proof-generator/preset/limits.hpp b/proof-producer/libs/preset/include/nil/proof-generator/preset/limits.hpp new file mode 100644 index 0000000000..246a9ef4f8 --- /dev/null +++ b/proof-producer/libs/preset/include/nil/proof-generator/preset/limits.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include "nil/proof-generator/preset/preset.hpp" + +namespace nil { + namespace proof_generator { + namespace limits { + + const std::size_t max_copy = 30000; + const std::size_t max_rw_size = 60000; + const std::size_t max_keccak_blocks = 500; + const std::size_t max_bytecode_size = 20000; + const std::size_t max_rows = 500000; + const std::size_t max_mpt_size = 30; + const std::size_t max_zkevm_rows = 25000; + + const std::size_t RLC_CHALLENGE = 7; // should be the same between all components + + } // limits + } // proof_generator +} // nil diff --git a/proof-producer/libs/preset/include/nil/proof-generator/preset/preset.hpp b/proof-producer/libs/preset/include/nil/proof-generator/preset/preset.hpp index 9aa3f1947c..a44ff2344c 100644 --- a/proof-producer/libs/preset/include/nil/proof-generator/preset/preset.hpp +++ b/proof-producer/libs/preset/include/nil/proof-generator/preset/preset.hpp @@ -7,7 +7,9 @@ #include #include "nil/proof-generator/preset/bytecode.hpp" -#include "nil/proof-generator/preset/add.hpp" +#include "nil/proof-generator/preset/rw.hpp" +#include "nil/proof-generator/preset/zkevm.hpp" +#include "nil/proof-generator/preset/copy.hpp" #include #include @@ -15,14 +17,24 @@ namespace nil { namespace proof_generator { + namespace circuits { + using Name = std::string; + + const Name BYTECODE = "bytecode"; + const Name RW = "rw"; + const Name ZKEVM = "zkevm"; + const Name COPY = "copy"; + + } // namespace circuits + template class CircuitFactory { - static std::map( - std::optional>& circuit, + static const std::map( + std::optional>>& circuit, std::optional>& assignment_table)>> circuit_selector; public: static std::optional initialize_circuit(const std::string& circuit_name, - std::optional>& circuit, + std::optional>>& circuit, std::optional>& assignment_table, std::optional>& desc) { auto find_it = circuit_selector.find(circuit_name); @@ -42,11 +54,13 @@ namespace nil { }; template - std::map( - std::optional>& circuit, + const std::map( + std::optional>>& circuit, std::optional>& assignment_table)>> CircuitFactory::circuit_selector = { - {"add", initialize_add_circuit}, - {"bytecode", initialize_bytecode_circuit} + {circuits::BYTECODE, initialize_bytecode_circuit}, + {circuits::RW, initialize_rw_circuit}, + {circuits::ZKEVM, initialize_zkevm_circuit}, + {circuits::COPY, initialize_copy_circuit} }; } // proof_generator } // nil diff --git a/proof-producer/libs/preset/include/nil/proof-generator/preset/rw.hpp b/proof-producer/libs/preset/include/nil/proof-generator/preset/rw.hpp new file mode 100644 index 0000000000..0f2d9ddbbe --- /dev/null +++ b/proof-producer/libs/preset/include/nil/proof-generator/preset/rw.hpp @@ -0,0 +1,65 @@ +#ifndef PROOF_GENERATOR_LIBS_PRESET_RW_HPP_ +#define PROOF_GENERATOR_LIBS_PRESET_RW_HPP_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace nil { + namespace proof_generator { + template + std::optional initialize_rw_circuit( + std::optional>>& rw_circuit, + std::optional>& rw_table) { + + using ComponentType = nil::blueprint::bbf::rw; + + // initialize assignment table + const auto desc = ComponentType::get_table_description(limits::max_rw_size, limits::max_mpt_size); + rw_table.emplace(desc.witness_columns, desc.public_input_columns, desc.constant_columns, desc.selector_columns); + BOOST_LOG_TRIVIAL(debug) << "rw table:\n" + << "witnesses = " << rw_table->witnesses_amount() + << " public inputs = " << rw_table->public_inputs_amount() + << " constants = " << rw_table->constants_amount() + << " selectors = " << rw_table->selectors_amount() << "\n"; + + std::size_t start_row = 0; + std::vector witnesses(desc.witness_columns); + std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... + std::vector public_inputs(desc.public_input_columns); + std::iota(public_inputs.begin(), public_inputs.end(), 0); // fill 0, 1, ... + std::vector constants(desc.constant_columns); + std::iota(constants.begin(), constants.end(), 0); // fill 0, 1, ... + + using L1WrapperType = nil::blueprint::components::plonk_l1_wrapper; + L1WrapperType wrapper(witnesses, public_inputs, constants); + + typename ComponentType::input_type input; + + nil::blueprint::circuit> circuit; + + nil::blueprint::components::generate_circuit( + wrapper, circuit, *rw_table, input, start_row, limits::max_rw_size, limits::max_mpt_size); + + zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, *rw_table, + rw_table->rows_amount(), + 100000 + ); + + rw_circuit.emplace(circuit); + + return {}; + } + } // proof_generator +} // nil +#endif // PROOF_GENERATOR_LIBS_PRESET_RW_HPP_ diff --git a/proof-producer/libs/preset/include/nil/proof-generator/preset/zkevm.hpp b/proof-producer/libs/preset/include/nil/proof-generator/preset/zkevm.hpp new file mode 100644 index 0000000000..a11b134ac5 --- /dev/null +++ b/proof-producer/libs/preset/include/nil/proof-generator/preset/zkevm.hpp @@ -0,0 +1,71 @@ +#ifndef PROOF_GENERATOR_LIBS_PRESET_ZKEVM_HPP_ +#define PROOF_GENERATOR_LIBS_PRESET_ZKEVM_HPP_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace nil { + namespace proof_generator { + template + std::optional initialize_zkevm_circuit( + std::optional>>& zkevm_circuit, + std::optional>& zkevm_table) { + + using ComponentType = nil::blueprint::bbf::zkevm; + + // initialize assignment table + const auto desc = ComponentType::get_table_description(limits::max_zkevm_rows, limits::max_copy, limits::max_rw_size, + limits::max_keccak_blocks, limits::max_bytecode_size); + zkevm_table.emplace(desc.witness_columns, desc.public_input_columns, desc.constant_columns, desc.selector_columns); + BOOST_LOG_TRIVIAL(debug) << "zkevm table:\n" + << "witnesses = " << zkevm_table->witnesses_amount() + << " public inputs = " << zkevm_table->public_inputs_amount() + << " constants = " << zkevm_table->constants_amount() + << " selectors = " << zkevm_table->selectors_amount() << "\n"; + + std::size_t start_row = 0; + std::vector witnesses(desc.witness_columns); + std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... + std::vector public_inputs(desc.public_input_columns); + std::iota(public_inputs.begin(), public_inputs.end(), 0); // fill 0, 1, ... + std::vector constants(desc.constant_columns); + std::iota(constants.begin(), constants.end(), 0); // fill 0, 1, ... + + using L1WrapperType = nil::blueprint::components::plonk_l1_wrapper; + L1WrapperType wrapper(witnesses, public_inputs, constants); + + typename ComponentType::input_type input; + + nil::blueprint::circuit> circuit; + + nil::blueprint::components::generate_circuit( + wrapper, circuit, *zkevm_table, input, start_row, + limits::max_zkevm_rows, limits::max_copy, limits::max_rw_size, limits::max_keccak_blocks, limits::max_bytecode_size); + + zk::snark::pack_lookup_tables_horizontal( + circuit.get_reserved_indices(), + circuit.get_reserved_tables(), + circuit.get_reserved_dynamic_tables(), + circuit, *zkevm_table, + zkevm_table->rows_amount(), + 100000 + ); + + zkevm_circuit.emplace(circuit); + + return {}; + } + } // proof_generator +} // nil +#endif // PROOF_GENERATOR_LIBS_PRESET_ZKEVM_HPP_ diff --git a/proof-producer/tests/CMakeLists.txt b/proof-producer/tests/CMakeLists.txt index d8c0b86d07..081d206093 100644 --- a/proof-producer/tests/CMakeLists.txt +++ b/proof-producer/tests/CMakeLists.txt @@ -3,3 +3,4 @@ find_package(GTest REQUIRED) include(GoogleTest) add_subdirectory(libs) +add_subdirectory(bin) diff --git a/proof-producer/tests/bin/CMakeLists.txt b/proof-producer/tests/bin/CMakeLists.txt new file mode 100644 index 0000000000..83d3798bec --- /dev/null +++ b/proof-producer/tests/bin/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(proof-producer) diff --git a/proof-producer/tests/bin/proof-producer/CMakeLists.txt b/proof-producer/tests/bin/proof-producer/CMakeLists.txt new file mode 100644 index 0000000000..790dd60025 --- /dev/null +++ b/proof-producer/tests/bin/proof-producer/CMakeLists.txt @@ -0,0 +1,57 @@ +add_custom_target(tests_prover_single_thread) +add_custom_target(tests_prover_multi_thread) + +# Set properties for build target (single or multi thread) +function(set_properties target) + target_link_libraries(${target} PRIVATE + GTest::gtest GTest::gtest_main + proof-producer::include + proof_generatorAssigner + proof_generatorPreset + proof_generatorOutputArtifacts + ) + + set_target_properties(${target} PROPERTIES + LINKER_LANGUAGE CXX + EXPORT_NAME ${target} + CXX_STANDARD 23 + CXX_STANDARD_REQUIRED TRUE + ) + + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(${target} PRIVATE "-fconstexpr-steps=2147483647") + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(${target} PRIVATE "-fconstexpr-ops-limit=4294967295") + endif () + + target_compile_definitions(${target} PRIVATE TEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/resources/traces/") + + gtest_discover_tests(${target}) +endfunction() + +# Add test for Prover class +# .cpp file must have the name of target +function(add_prover_test target) + add_executable(${target}_single_thread ${target}.cpp) + add_executable(${target}_multi_thread ${target}.cpp) + + set_properties(${target}_single_thread) + set_properties(${target}_multi_thread) + target_link_libraries(${target}_single_thread PRIVATE + crypto3::all + + ) + target_link_libraries(${target}_multi_thread PRIVATE + parallel-crypto3::all + crypto3::common + ) + + add_dependencies(tests_prover_single_thread ${target}_single_thread) + add_dependencies(tests_prover_multi_thread ${target}_multi_thread) + + target_precompile_headers(${target}_single_thread REUSE_FROM ${target}_multi_thread) +endfunction() + +add_prover_test(test_zkevm_bbf_circuits) + +file(INSTALL "resources" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.bc b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.bc new file mode 100644 index 0000000000..5d2aed0c5d Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.bc differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.copy b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.copy new file mode 100644 index 0000000000..f0b16b7f24 Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.copy differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.msg b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.msg new file mode 100644 index 0000000000..a9390deab3 Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.msg differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.rw b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.rw new file mode 100644 index 0000000000..95211a293e Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.rw differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.zkevm b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.zkevm new file mode 100644 index 0000000000..def5df471f Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_multi_tx.pb.zkevm differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.bc b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.bc new file mode 100644 index 0000000000..5d2aed0c5d Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.bc differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.copy b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.copy new file mode 100644 index 0000000000..c971e6c4e0 Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.copy differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.msg b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.msg new file mode 100644 index 0000000000..59f144ee09 Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.msg differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.rw b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.rw new file mode 100644 index 0000000000..f1d380ff40 Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.rw differ diff --git a/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.zkevm b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.zkevm new file mode 100644 index 0000000000..fc6b5b7093 Binary files /dev/null and b/proof-producer/tests/bin/proof-producer/resources/traces/increment_simple.pb.zkevm differ diff --git a/proof-producer/tests/bin/proof-producer/test_zkevm_bbf_circuits.cpp b/proof-producer/tests/bin/proof-producer/test_zkevm_bbf_circuits.cpp new file mode 100644 index 0000000000..725df9b74d --- /dev/null +++ b/proof-producer/tests/bin/proof-producer/test_zkevm_bbf_circuits.cpp @@ -0,0 +1,78 @@ +#include + +#include + +#include +#include +#include + + +namespace { + + struct Input { + std::string trace_base_name; // base name of trace set collected from the cluster + std::string circuit_name; // circuit name + bool skip_check{false}; // skip satisfiability check while running the test + }; + +} // namespace + + +class ProverTests: public ::testing::TestWithParam { + + protected: + using CurveType = nil::crypto3::algebra::curves::pallas; + using HashType = nil::crypto3::hashes::keccak_1600<256>; + using ConstraintSystem = nil::proof_generator::Prover::ConstraintSystem; + using BlueprintFieldType = nil::proof_generator::Prover::BlueprintField; + + static constexpr std::size_t lambda = 9; + static constexpr std::size_t grind = 0; + static constexpr std::size_t expand_factor = 2; + static constexpr std::size_t max_quotient_chunks = 0; +}; + + +TEST_P(ProverTests, FillAssignmentAndCheck) { + const auto input = GetParam(); + const std::string trace_base_path = std::string(TEST_DATA_DIR) + input.trace_base_name; + nil::proof_generator::Prover prover( + lambda, + expand_factor, + max_quotient_chunks, + grind, + input.circuit_name + ); + + ASSERT_TRUE(prover.setup_prover()); + + ASSERT_TRUE(prover.fill_assignment_table(trace_base_path)); + + const auto& circuit = prover.get_constraint_system(); + const auto& assignment_table = prover.get_assignment_table(); + + if (input.skip_check) { + GTEST_SKIP() << "Skipping satisfiability_check for " << input.circuit_name << " circuit for trace " << input.trace_base_name; + } + + ASSERT_TRUE(nil::blueprint::is_satisfied(circuit, assignment_table)); +} + + +using namespace nil::proof_generator::circuits; + +// Single call of Counter contract increment function +const std::string SimpleIncrement = "increment_simple.pb"; +INSTANTIATE_TEST_SUITE_P(SimpleRw, ProverTests, ::testing::Values(Input{SimpleIncrement, RW})); +INSTANTIATE_TEST_SUITE_P(SimpleBytecode, ProverTests, ::testing::Values(Input{SimpleIncrement, BYTECODE})); +INSTANTIATE_TEST_SUITE_P(SimpleCopy, ProverTests, ::testing::Values(Input{SimpleIncrement, COPY})); +INSTANTIATE_TEST_SUITE_P(SimpleZkevm, ProverTests, ::testing::Values(Input{SimpleIncrement, ZKEVM})); + +// Multiple calls of Counter contract increment function (several transactions) +// !! note that due to https://github.com/NilFoundation/placeholder/issues/196 +// contracts for these traces were compiled with --no-cbor-metadata flag +const std::string MultiTxIncrement = "increment_multi_tx.pb"; +INSTANTIATE_TEST_SUITE_P(MultiTxRw, ProverTests, ::testing::Values(Input{MultiTxIncrement, RW})); +INSTANTIATE_TEST_SUITE_P(MultiTxBytecode, ProverTests, :: testing::Values(Input{MultiTxIncrement, BYTECODE})); +INSTANTIATE_TEST_SUITE_P(MultiTxCopy, ProverTests, ::testing::Values(Input{MultiTxIncrement, COPY})); +INSTANTIATE_TEST_SUITE_P(MultiTxZkevm, ProverTests, ::testing::Values(Input{MultiTxIncrement, ZKEVM})); diff --git a/proof-producer/tests/libs/output_artifacts/CMakeLists.txt b/proof-producer/tests/libs/output_artifacts/CMakeLists.txt index 8f716d73ea..47fbe7c8a1 100644 --- a/proof-producer/tests/libs/output_artifacts/CMakeLists.txt +++ b/proof-producer/tests/libs/output_artifacts/CMakeLists.txt @@ -1,12 +1,12 @@ -add_custom_target(tests_output_artifacts) +add_custom_target(tests_output_artifacts_single_thread) +add_custom_target(tests_output_artifacts_multi_thread) -# Add test for OutputArtifacts library -# .cpp file must have the name of target -function(add_output_artifacts_test target) - add_executable(${target} ${target}.cpp) - - target_link_libraries(${target} PRIVATE proof_generatorOutputArtifacts) - target_link_libraries(${target} PRIVATE GTest::gtest GTest::gtest_main) +# Set properties for build target (single or multi thread) +function(set_properties target) + target_link_libraries(${target} PRIVATE + GTest::gtest GTest::gtest_main + proof_generatorOutputArtifacts + ) set_target_properties(${target} PROPERTIES LINKER_LANGUAGE CXX @@ -14,9 +14,31 @@ function(add_output_artifacts_test target) CXX_STANDARD 23 CXX_STANDARD_REQUIRED TRUE ) - + target_compile_definitions(${target} PRIVATE TEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/resources/") gtest_discover_tests(${target}) - add_dependencies(tests_output_artifacts ${target}) +endfunction() + +# Add test for OutputArtifacts library +# .cpp file must have the name of target +function(add_output_artifacts_test target) + add_executable(${target}_single_thread ${target}.cpp) + add_executable(${target}_multi_thread ${target}.cpp) + + set_properties(${target}_single_thread) + set_properties(${target}_multi_thread) + target_link_libraries(${target}_single_thread PRIVATE + crypto3::all + ) + target_link_libraries(${target}_multi_thread PRIVATE + parallel-crypto3::all + crypto3::common + ) + + target_precompile_headers(${target}_single_thread REUSE_FROM proof_generatorOutputArtifacts) + target_precompile_headers(${target}_multi_thread REUSE_FROM proof_generatorOutputArtifacts) + + add_dependencies(tests_output_artifacts_single_thread ${target}_single_thread) + add_dependencies(tests_output_artifacts_multi_thread ${target}_multi_thread) endfunction() add_output_artifacts_test(test_range) diff --git a/proof-producer/tests/libs/output_artifacts/test_assignment_table_writer.cpp b/proof-producer/tests/libs/output_artifacts/test_assignment_table_writer.cpp index 3e35aee5dc..f349ed9b12 100644 --- a/proof-producer/tests/libs/output_artifacts/test_assignment_table_writer.cpp +++ b/proof-producer/tests/libs/output_artifacts/test_assignment_table_writer.cpp @@ -18,8 +18,8 @@ #include #include -using Endianness = nil::marshalling::option::big_endian; -using TTypeBase = nil::marshalling::field_type; +using Endianness = nil::crypto3::marshalling::option::big_endian; +using TTypeBase = nil::crypto3::marshalling::field_type; using BlueprintField = typename nil::crypto3::algebra::curves::pallas::base_field_type; @@ -39,6 +39,7 @@ class AssignmentTableWriterTest: public ::testing::Test { void SetUp() override { // open & stat file with table content + std::string test_table_file_path = std::string(TEST_DATA_DIR) + "assignment.tbl"; std::ifstream in(test_table_file_path, std::ios::binary | std::ios::in | std::ios::ate); ASSERT_TRUE(in.is_open()); const auto fsize = in.tellg(); @@ -54,7 +55,7 @@ class AssignmentTableWriterTest: public ::testing::Test { MarshalledTable marshalled_table; auto read_iter = table_bytes_.begin(); auto const status = marshalled_table.read(read_iter, table_bytes_.size()); - ASSERT_TRUE(status == nil::marshalling::status_type::success); + ASSERT_TRUE(status == nil::crypto3::marshalling::status_type::success); // unpack decoded data to table & description auto [desc, table] = nil::crypto3::marshalling::types::make_assignment_table(marshalled_table); @@ -117,8 +118,6 @@ class AssignmentTableWriterTest: public ::testing::Test { protected: - constexpr static auto test_table_file_path = "./resources/assignment.tbl"; - std::vector table_bytes_; AssignmentTable table_; AssignmentTableDescription desc_{0,0,0,0}; @@ -148,28 +147,28 @@ TEST_F(AssignmentTableWriterTest, WriteFullTextAssignment) for (auto col = 0; col < table_.witnesses_amount(); col++) { auto expected = table_.witness(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_separator(mem_stream); for (auto col = 0; col < table_.public_inputs_amount(); col++) { auto expected = table_.public_input(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_separator(mem_stream); for (auto col = 0; col < table_.constants_amount(); col++) { auto expected = table_.constant(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_separator(mem_stream); for (auto col = 0; col < table_.selectors_amount(); col++) { auto expected = table_.selector(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_rest_of_line(mem_stream); } @@ -192,7 +191,7 @@ TEST_F(AssignmentTableWriterTest, WritePartialColumns) for (auto col = 0; col <= WitnessColumnsToDump; col++) { auto expected = table_.witness(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_separator(mem_stream); // witnesses @@ -232,14 +231,14 @@ TEST_F(AssignmentTableWriterTest, TextWrite_Smoke) for (auto col = 0; col <= 2; col++) { auto expected = table_.witness(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_separator(mem_stream); // witnesses for (auto col = 0; col < table_.public_inputs_amount(); col++) { auto expected = table_.public_input(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_separator(mem_stream); // public inputs @@ -247,12 +246,12 @@ TEST_F(AssignmentTableWriterTest, TextWrite_Smoke) for (auto col = 1; col <= 3; col++) { auto expected = table_.constant(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } for (auto col = 5; col <= 7; col++) { auto expected = table_.constant(col)[row]; auto str = read_stringified_field(mem_stream); - ASSERT_EQ(expected.data.str(str.size(), std::ios_base::hex), str) << "row: " << row << " col: " << col; + ASSERT_EQ(expected.data.str(std::ios_base::hex), str) << "row: " << row << " col: " << col; } read_separator(mem_stream); // constants diff --git a/proof-producer/tests/libs/output_artifacts/test_circuit_writer.cpp b/proof-producer/tests/libs/output_artifacts/test_circuit_writer.cpp index 49622b6f10..6f3e2a4454 100644 --- a/proof-producer/tests/libs/output_artifacts/test_circuit_writer.cpp +++ b/proof-producer/tests/libs/output_artifacts/test_circuit_writer.cpp @@ -13,8 +13,8 @@ #include -using Endianness = nil::marshalling::option::big_endian; -using TTypeBase = nil::marshalling::field_type; +using Endianness = nil::crypto3::marshalling::option::big_endian; +using TTypeBase = nil::crypto3::marshalling::field_type; using BlueprintField = typename nil::crypto3::algebra::curves::pallas::base_field_type; @@ -26,7 +26,9 @@ class CircuitWriterTest: public ::testing::Test { void SetUp() override { // open & stat file with circuit content - std::ifstream in(test_table_file_path, std::ios::binary | std::ios::in | std::ios::ate); + std::string test_circuit_file_path(TEST_DATA_DIR); + test_circuit_file_path += "circuit.crct"; + std::ifstream in(test_circuit_file_path, std::ios::binary | std::ios::in | std::ios::ate); ASSERT_TRUE(in.is_open()); const auto fsize = in.tellg(); ASSERT_FALSE(fsize == 0); @@ -42,13 +44,12 @@ class CircuitWriterTest: public ::testing::Test { CircuitMarshalling marshalled_circuit; auto read_iter = circuit_bytes_.begin(); auto const status = marshalled_circuit.read(read_iter, circuit_bytes_.size()); - ASSERT_TRUE(status == nil::marshalling::status_type::success); + ASSERT_TRUE(status == nil::crypto3::marshalling::status_type::success); circuit_ = nil::crypto3::marshalling::types::make_plonk_constraint_system(marshalled_circuit); } protected: - constexpr static auto test_table_file_path = "./resources/circuit.crct"; std::vector circuit_bytes_; Circuit circuit_; diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000..795cdc65b8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,14 @@ +requests==2.32.2 +opentelemetry-distro[otlp]==0.45b0 +opentelemetry-instrumentation-requests==0.45b0 +opentelemetry-util-http==0.45b0 +opentelemetry-instrumentation==0.45b0 +opentelemetry-semantic-conventions==0.45b0 +opentelemetry-instrumentation==0.45b0 +opentelemetry-semantic-conventions==0.45b0 +opentelemetry-util-http==0.45b0 +opentelemetry-instrumentation==0.45b0 +opentelemetry-semantic-conventions==0.45b0 +opentelemetry-util-http==0.45b0 +opentelemetry-sdk +junitparser==3.2.0 diff --git a/zkevm-framework.nix b/zkevm-framework.nix deleted file mode 100644 index 868e0b0042..0000000000 --- a/zkevm-framework.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ lib, - stdenv, - ninja, - pkg-config, - cmake, - boost, - gdb, - lldb, - cmake_modules, - ethash, - intx, - sszpp, - valijson, - gtest, - enableDebugging, - enableDebug ? false, - runTests ? false, - }: -let - inherit (lib) optional; -in stdenv.mkDerivation rec { - name = "zkevm-framework"; - - src = lib.sourceByRegex ./. ["^zkevm-framework(/.*)?$" "^evm-assigner(/.*)?$" "^proof-producer(/.*)?$" "^crypto3(/.*)?$" "^parallel-crypto3(/.*)?$" "CMakeLists.txt"]; - hardeningDisable = [ "fortify" ]; - - nativeBuildInputs =[ cmake ninja pkg-config ] ++ - (lib.optional (!stdenv.isDarwin) gdb) ++ - (lib.optional (stdenv.isDarwin) lldb); - - # enableDebugging will keep debug symbols in boost - propagatedBuildInputs = [ (if enableDebug then (enableDebugging boost) else boost) ]; - - buildInputs = [cmake_modules intx ethash sszpp valijson gtest]; - - cmakeFlags = - [ - (if runTests then "-DENABLE_TESTS=TRUE" else "") - (if enableDebug then "-DCMAKE_BUILD_TYPE=Debug" else "-DCMAKE_BUILD_TYPE=Release") - "-DZKEVM_FRAMEWORK_ENABLE=TRUE" - "-G Ninja" - ]; - - doBuild = true; - doCheck = runTests; - - checkPhase = '' - cd zkevm-framework && ctest - cd .. && ninja executables_tests - ''; - - shellHook = '' - PS1="\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ " - echo "zkEVM-framework ${if enableDebug then "debug" else "release"} dev environment activated" - ''; -} diff --git a/zkevm-framework/.envrc b/zkevm-framework/.envrc deleted file mode 100644 index 3550a30f2d..0000000000 --- a/zkevm-framework/.envrc +++ /dev/null @@ -1 +0,0 @@ -use flake diff --git a/zkevm-framework/.markdownlint.yml b/zkevm-framework/.markdownlint.yml deleted file mode 100644 index 9eb506798c..0000000000 --- a/zkevm-framework/.markdownlint.yml +++ /dev/null @@ -1,6 +0,0 @@ -# Markdown files lint config for markdownlint-cli2 -# https://github.com/DavidAnson/markdownlint-cli2 - -default: true - -line-length: false diff --git a/zkevm-framework/.pre-commit-config.yaml b/zkevm-framework/.pre-commit-config.yaml deleted file mode 100644 index 50a7270122..0000000000 --- a/zkevm-framework/.pre-commit-config.yaml +++ /dev/null @@ -1,10 +0,0 @@ -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.2.0 - hooks: - - id: end-of-file-fixer - - repo: https://github.com/pocc/pre-commit-hooks - rev: v1.3.5 - hooks: - - id: clang-format - args: [--style=file] diff --git a/zkevm-framework/CMakeLists.txt b/zkevm-framework/CMakeLists.txt deleted file mode 100644 index a3f3ae96fe..0000000000 --- a/zkevm-framework/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.27) - -project(zkEVM-framework) - -# Add json helpers to module path -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/libs/json_helpers/cmake ${CMAKE_MODULE_PATH}) - -option(BUILD_DOCS "Build documentation" FALSE) -option(ENABLE_TESTS "Enable tests" FALSE) - -add_subdirectory(libs) -add_subdirectory(bin) - -if(BUILD_DOCS) - find_package(Doxygen REQUIRED) - doxygen_add_docs(docs COMMENT "Generating API documentation with Doxygen") -endif() - -if(ENABLE_TESTS) - enable_testing() - add_subdirectory(tests) -endif() diff --git a/zkevm-framework/CMakePresets.json b/zkevm-framework/CMakePresets.json deleted file mode 100644 index ee64c95ab2..0000000000 --- a/zkevm-framework/CMakePresets.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "version": 6, - "cmakeMinimumRequired": { - "major": 3, - "minor": 27, - "patch": 0 - }, - "configurePresets": [ - { - "name": "release", - "displayName": "Release", - "description": "Release build using Ninja generator", - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } - }, - { - "name": "debug", - "displayName": "Test", - "description": "Debug build using Ninja generator", - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/debug", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - } - }, - { - "name": "test", - "displayName": "Test", - "description": "Build for testing using Ninja generator", - "inherits": "release", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release", - "ENABLE_TESTS": "TRUE" - } - } - ], - "buildPresets": [ - { - "name": "release", - "displayName": "Release", - "description": "Release build of `all` target", - "configurePreset": "release", - "targets": "all" - }, - { - "name": "debug", - "displayName": "Debug", - "description": "Debug build of `all` target", - "configurePreset": "debug", - "targets": "all" - }, - { - "name": "test", - "displayName": "Test", - "description": "Release build of `tests/all` target", - "configurePreset": "test", - "targets": "tests/all" - } - ], - "testPresets": [ - { - "name": "default", - "configurePreset": "test", - "displayName": "Default", - "description": "Default run of all tests", - "output": { - "outputOnFailure": true - }, - "execution": { - "noTestsAction": "ignore" - } - } - ], - "workflowPresets": [ - { - "name": "release-build", - "displayName": "Release", - "description": "Release build of the project", - "steps": [ - { - "type": "configure", - "name": "release" - }, - { - "type": "build", - "name": "release" - } - ] - }, - { - "name": "debug-build", - "displayName": "Debug", - "description": "Debug build of the project", - "steps": [ - { - "type": "configure", - "name": "debug" - }, - { - "type": "build", - "name": "debug" - } - ] - }, - { - "name": "test", - "displayName": "Test", - "description": "Run project tests", - "steps": [ - { - "type": "configure", - "name": "test" - }, - { - "type": "build", - "name": "test" - }, - { - "type": "test", - "name": "default" - } - ] - } - ] -} diff --git a/zkevm-framework/LICENSE b/zkevm-framework/LICENSE deleted file mode 100644 index de2951a0f2..0000000000 --- a/zkevm-framework/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 =nil; Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/zkevm-framework/README.md b/zkevm-framework/README.md deleted file mode 100644 index 969b63e594..0000000000 --- a/zkevm-framework/README.md +++ /dev/null @@ -1,268 +0,0 @@ -# zkEVM-framework - -Framework for test verification of state of cluster based on EVM - -## Content - -* Block generator -* EVM assigner -* Proof producer - -### Libraries - -* `NilCore` - definitions of data structures used for fetching data from shards -* `zkEVMAssignerRunner` - provide interace for run EVM assigner and fill assignment tables -* `zkEVMRpc` - provide interface for send / process requests to RPC -* `zkEVMJsonHelpers` - provide interface for process json configuration files -* `zkEVMOutputArtifacts` - provide interface for manage difernt modes of printing assignment tables (binary, readable, paricular display) - -## Dependencies - -### Build dependencies - -* [CMake](https://cmake.org/) -* [GCC 13+](https://gcc.gnu.org/) (required by SSZ++) -* [Ninja](https://ninja-build.org/) (recommended) - -### SSZ++ - -* Hashtree [Repository](https://github.com/prysmaticlabs/hashtree) -* intx: GMP (intx dependency) [Homepage](https://gmplib.org/), intx [Repository](https://github.com/chfast/intx) -* SSZ++ [Repository](https://github.com/OffchainLabs/sszpp) - -### EVM-assigner - -* evmc [Repository](https://github.com/ethereum/evmc) -* =nil; crypto3 [Repository](https://github.com/NilFoundation/crypto3) -* =nil; zkllvm-blueprint [Repository](https://github.com/NilFoundation/zkllvm-blueprint) -* =nil; evm-assigner [Repository](https://github.com/NilFoundation/evm-assigner) -* Valijson [Repository](https://github.com/tristanpenman/valijson) - -## Clone - -Using SSH: - -```plain -git clone git@github.com:NilFoundation/zkEVM-framework.git -``` - -Or if you are using GitHub PAT to authenticate using HTTPS: - -```plain -git clone https://@github.com/NilFoundation/zkEVM-framework.git -``` - -## Nix environment - -Instead of installing all dependencies manually, -you can use [Nix](https://nixos.org/download#download-nix) environment with all installed deps. - -For using experimantal features `flake`, `nix-command` add follow line -to your Nix configuration file (`/etc/nix/nix.conf`): - -```plaintext -experimental-features = nix-command flakes -``` - -Because zkEVM-framework currently has EVM-assigner as a dependency which is private repository, -it is required to configure Nix with GitHub Personal Access Token (PAT). -In order to generate your PAT, go [here](https://github.com/settings/tokens). Your token -must have access to content of private repositories. - -Then add this to your Nix configuration file (`/etc/nix/nix.conf`): - -```plaintext -access-tokens = github.com= -``` - -If for some reason you don't want to use PAT, you can fallback to using SSH authentication -using `--override-input` option. Add this to your Nix command: - -```plaintext ---override-input nil-evm-assigner git+ssh://git@github.com/NilFoundation/evm-assigner.git -```` - -To activate development environment run: - -```bash -nix develop -``` - -If you want Nix to use your local version of dependency instead of cloning it from GitHub, -you can use `--override-input`. E.g. if you want to use your local evm-assigner, use this: - -```bash -nix develop --override-input nil-evm-assigner path:/path/to/evm-assigner -``` - -Same option applies to `nix build` and etc. - -## Build - -```plain -cmake --workflow --preset release-build -``` - -Or with Nix: - -```bash -nix build -``` - -## Assigner - -### Build && run - -```bash -nix run .#assigner -- -b block -t assignments -e pallas -``` - -## Test - -### Configure tests - -Configure with tests enabled: - -```bash -cmake -B ${BUILD_DIR:-build} -DENABLE_TESTS=TRUE ... -``` - -When configuring with enabled tests, you can specify, which tests to enable. By default all tests are enabled. - -```bash -# Data types tests won't be enabled -cmake -B ${BUILD_DIR:-build} -DENABLE_TESTS=TRUE -DENABLE_DATA_TYPES_TESTS=FALSE ... -``` - -### Build tests - -```bash -cmake --build ${BUILD_DIR:-build} -``` - -When using `Ninja` generator, you can build only tests using target `tests/all`: - -```bash -cmake --build ${BUILD_DIR:-build} -t tests/all -``` - -### Run tests - -```bash -ctest --test-dir ${BUILD_DIR:-build}/tests -``` - -When using Nix, you can configure, build and run tests with: - -```bash -nix flake check -``` - -## Build API documentation - -zkEVM-framework is using Doxygen to generate API documentaion. -To build it, firts enable building documentation at configuration: - -```bash -cmake -B ${BUILD_DIR:-build} -DBUILD_DOCS=TRUE ... -``` - -Then build documentation: - -```bash -cmake -B ${BUILD_DIR:-build} -t docs -``` - -To see HTML documentation, open `${BUILD_DIR}/html`. - -## Usage - -### Block call - -Account storage contains one account with deployed contract. -Incoming block has one transaction which call deployed contract -Config file with initial state of account storage could be passed with `-s` - -```bash -nix run .#assigner [-L] [--override-input nil-evm-assigner /path_to/evm-assigner] -- -b bin/assigner/example_data/call_block.ssz -t assignments -e pallas [-s bin/assigner/example_data/state.json] [--log-level debug] -``` - -### Block generation - -Test block could be generated from config file in JSON format - -WARNING: for use block_generator script need to clone and build `nil` [repository](https://github.com/NilFoundation/nil). Make sure if `nild` and `nil` in PATH. - -```bash -nix run .#block_gen [-L] -- -i bin/assigner/example_data/call_block.json -o call_block.ssz -``` - -### Nil CLI block generation - -Wrapper script for `nil` is available to deploy and call Solidity contracts. -It requires `nild` and `nil` binaries in `PATH` (already available inside Nix dev environment). - -Usage: - -For use not default wallet neet to create custom configuration file - -```bash -# Generate custom coniguration file -./bin/block_generator/block_generator.py --mode make-config --cli-config-name -``` - -And use `--cli-config-name ` in each follow commands - -```bash -# Generate block, get ShardId, BlockHash. Write block data and state of the correspond contract to the files -./bin/block_generator/block_generator.py --mode generate-block --block-config-name bin/block_generator/example_data/block_config.json [-o block.jsdon] [-s state.json] -``` - -Config file format: - -```json -{ - "contracts" : [ - { - "id": 1, - "path": "path/to/solidity/contract" - }, - ... - ], - - "transactions" : [ - { - "contractId" : 1, // index of the deployed contract - "methodName" : "methodToCall", // name of a method in the contract - "callArguments": [ // Optional arguments for the method - "0x123456" - ] - }, - ... - ] -} -``` - -To deploy and call contracts manually use [nil_cli](https://github.com/NilFoundation/nil/README.md) directly. - -### Human-readable assignments - -While generating assignment table, you can partially dump it into text form. -This is enabled by `--output-text` option, which specifies output filename or stdout. - -```bash -assigner --output-text out.txt -``` - -Using this option enables other options for tables, columns and rows selection: - -```bash -assigner --output-text - \ - --tables 0 \ - --rows 0- \ - --columns witness0-1,3 \ - --columns public_input-1 -``` - -This extracts all raws of w_0, w_1, w_3 and firts public input columns from table with index 0 and prints it to stdout. -The syntax for ranges specification is: `Range(,Range)*` where `Range = N|N-|-N|N-N` where `N` is a number. diff --git a/zkevm-framework/bin/CMakeLists.txt b/zkevm-framework/bin/CMakeLists.txt deleted file mode 100644 index 4a8f1ca2e8..0000000000 --- a/zkevm-framework/bin/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -find_package(Boost COMPONENTS REQUIRED filesystem json log log_setup program_options random thread system) - -add_subdirectory(assigner) diff --git a/zkevm-framework/bin/assigner/CMakeLists.txt b/zkevm-framework/bin/assigner/CMakeLists.txt deleted file mode 100644 index b3eb74a9a0..0000000000 --- a/zkevm-framework/bin/assigner/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -set(TARGET_NAME assigner) -set(SOURCES - src/main.cpp -) - -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED True) - -add_executable(${TARGET_NAME} ${SOURCES}) - -target_include_directories(${TARGET_NAME} - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/include -) - -target_link_libraries(${TARGET_NAME} - PRIVATE - zkEVMPreset - zkEVMAssignerRunner - zkEVMJsonHelpers - zkEVMOutputArtifacts - proof-producer-multi-threaded-lib - Boost::program_options - Boost::log - Boost::random -) - -install(TARGETS ${TARGET_NAME}) diff --git a/zkevm-framework/bin/assigner/example_data/call_block.json b/zkevm-framework/bin/assigner/example_data/call_block.json deleted file mode 100644 index 96191bbd0a..0000000000 --- a/zkevm-framework/bin/assigner/example_data/call_block.json +++ /dev/null @@ -1 +0,0 @@ -{"number": 6671, "hash": "0x2af64f981fca905a75df45e4615ce235f0459063aba42a5d02b6ca1d11cb09c4", "parentHash": "0x28a4e91edf97a19ac3ff4e171d4a01a809eebff8a68fcc123528923e52eefb09", "inMessagesRoot": "0x18862987fb6a4dc17d921c44e9500f2f3ac16c8902e746653cb8e7b4507b31bf", "receiptsRoot": "0x06e381b61091a9d794b3b5881f64cfb29a48bfc1fe5956beb10683d710d1799f", "shardId": 1, "messages": [{"flags": ["Internal"], "success": true, "data": "0xd09de08a", "blockHash": "0x2af64f981fca905a75df45e4615ce235f0459063aba42a5d02b6ca1d11cb09c4", "blockNumber": 6671, "from": "0x000157003b1608f88557302eafdc2d912ecf6482", "gasUsed": "21719", "feeCredit": "1000000", "hash": "0x05649a2ebf966da0a23c7de99f1ade8b67daf5cd76578b53b45b49c6ca8e3d5a", "seqno": "0x8", "to": "0x000121f6629fb5bd92c630f734ef5c03fa6fd286", "refundTo": "0x000157003b1608f88557302eafdc2d912ecf6482", "bounceTo": "0x000157003b1608f88557302eafdc2d912ecf6482", "index": "0x0", "value": "0", "signature": "0x"}], "childBlocks": [], "mainChainHash": "0x1ff328ba476f279646e19fcf2e201ef198cd5e783922f17d17cb2a2a757493c4", "dbTimestamp": 66720, "gasPrice": "10"} \ No newline at end of file diff --git a/zkevm-framework/bin/assigner/example_data/state.json b/zkevm-framework/bin/assigner/example_data/state.json deleted file mode 100644 index ce7b9869cd..0000000000 --- a/zkevm-framework/bin/assigner/example_data/state.json +++ /dev/null @@ -1 +0,0 @@ -{"accounts": [{"code": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063d09de08a1461002d575b5f80fd5b610035610037565b005b60015f8082825461004891906100bf565b925050819055507f93fe6d397c74fdf1402a8b72e47b68512f0510d7b98a4bc4cbdf6ac7108b3c595f5460405161007f9190610101565b60405180910390a1565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6100c982610089565b91506100d483610089565b92508282019050808211156100ec576100eb610092565b5b92915050565b6100fb81610089565b82525050565b5f6020820190506101145f8301846100f2565b9291505056fea2646970667358221220f66f14c6fb947bbc19f057fe6f8e54411bc97ba89eb654de0e10ab8b4262e8cc64736f6c63430008150033", "contract": "0x000121f6629fb5bd92c630f734ef5c03fa6fd286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004534eac1e72cf1895942c126c54f41b5666f9bcdb851d18f16cab0ce06753a00ef6b13a9101bbfb0c40b458178df78d3ad32af44b72c0855875a14c5620a6d003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "proof": "0x0000000020000000000000000000000000000121f6629fb5bd92c630f734ef5c03fa6fd286033f00000001080000001e000000080000000000000000000000000000000000000000011d6bb19af9d985e58a5ead1d3c30115e3f1079a6a01a93b3c6db376d0f9211e149010000020800000048010000400000006000000080000000a0000000a0000000a0000000c0000000e0000000e0000000e0000000e0000000e0000000e0000000000100002001000020010000284313a9909f64ca376c2ee23715a25820044ca25bd5eb50d2b6e30a4377d42e0751b78e3413bc19f5e13b86eb22cd3eea073145fcb552b9b9b6a2204265b20f206a591c61678ac19ecb59fd07ef6b67b47e9fbb8d4f2e4fe528d3ebe977e8971e5655cb8ce177b5dce2f7de4fb954f0453161055b2fa60417567f7679478c97093c5878f4308f6af905ea855b2425f3c60f8921d4106ed6c1e52ff108d16c2c04b6041866423b11cbd902acf31c251159831d5f268a91fa725259da1a9396e5222f6992da1f68df0393eab93aeb8a4dde84e2e70ed91123c6b0d55ce6f3c4b806f1ba85dc8490845ca9836c27123d137e1b8e05a4e1b82cb3748e2d7f587a9af7000000000800000030000000080000001d000000000000000000000000000000000121f6629fb5bd92c630f734ef5c03fa6fd286000121f6629fb5bd92c630f734ef5c03fa6fd286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004534eac1e72cf1895942c126c54f41b5666f9bcdb851d18f16cab0ce06753a00ef6b13a9101bbfb0c40b458178df78d3ad32af44b72c0855875a14c5620a6d003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "storage": [{"Key": "0x0000000000000000000000000000000000000000000000000000000000000000", "Val": "1"}]}]} \ No newline at end of file diff --git a/zkevm-framework/bin/assigner/include/checks.hpp b/zkevm-framework/bin/assigner/include/checks.hpp deleted file mode 100644 index 89364b39de..0000000000 --- a/zkevm-framework/bin/assigner/include/checks.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @file checks.hpp - * - * @brief This file defines functions and types for check assignment tables. - */ - -#ifndef ZKEMV_FRAMEWORK_LIBS_CHECKS_INCLUDE_CHECKS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_CHECKS_INCLUDE_CHECKS_HPP_ - -#include -#include -#include -#include - -template -using ArithmetizationType = nil::crypto3::zk::snark::plonk_constraint_system; - -template -bool check_connectedness( - const nil::blueprint::circuit>& bp, - const nil::blueprint::assignment>& assignment, - const std::vector< - nil::crypto3::zk::snark::plonk_variable>& - instance_input, - const std::vector< - nil::crypto3::zk::snark::plonk_variable>& - component_result, - size_t start_row, size_t component_rows_amount, - nil::blueprint::connectedness_check_type connectedness_check) { - if (assignment.rows_amount() - start_row != component_rows_amount) { - std::cerr << "ERROR: wrong rows ampunt: expected " << component_rows_amount << ", real " - << assignment.rows_amount() - start_row << "\n"; - return false; - } - const std::size_t rows_after_component_batching = - assignment.finalize_component_batches(bp, start_row + component_rows_amount); - const std::size_t rows_after_const_batching = - assignment.finalize_constant_batches(bp, 0, std::max(start_row, 1)); - const std::size_t rows_after_batching = - std::max(rows_after_component_batching, rows_after_const_batching); - for (auto variable : component_result) { - if (assignment.get_batch_variable_map().count(variable)) { - variable.get() = assignment.get_batch_variable_map().at(variable); - } - } - bool is_connected = nil::blueprint::check_connectedness( - assignment, bp, instance_input, component_result, start_row, - rows_after_batching - start_row, connectedness_check); - if (!is_connected) { - std::cerr << "ERROR: connectness violation\n"; - return false; - } - if (connectedness_check.t == nil::blueprint::connectedness_check_type::type::NONE) { - std::cerr << "WARNING: Connectedness check is disabled.\n"; - } - return true; -} - -template -bool is_satisfied( - const nil::blueprint::circuit>& bp, - const nil::blueprint::assignment>& assignment) { - if (!nil::blueprint::is_satisfied(bp, assignment)) { - std::cerr << "ERROR: is not satisfied\n"; - return false; - } - return true; -} - -#endif // ZKEMV_FRAMEWORK_LIBS_CHECKS_INCLUDE_CHECKS_HPP_ diff --git a/zkevm-framework/bin/assigner/src/main.cpp b/zkevm-framework/bin/assigner/src/main.cpp deleted file mode 100644 index 3cf710e401..0000000000 --- a/zkevm-framework/bin/assigner/src/main.cpp +++ /dev/null @@ -1,610 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#ifndef BOOST_FILESYSTEM_NO_DEPRECATED -#define BOOST_FILESYSTEM_NO_DEPRECATED -#endif -#ifndef BOOST_SYSTEM_NO_DEPRECATED -#define BOOST_SYSTEM_NO_DEPRECATED -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "checks.hpp" -#include "zkevm_framework/assigner_runner/runner.hpp" -#include "zkevm_framework/preset/preset.hpp" -#include "zkevm_framework/assigner_runner/write_assignments.hpp" -#include "zkevm_framework/assigner_runner/write_circuits.hpp" - -template -std::optional write_circuit(nil::evm_assigner::zkevm_circuit idx, - const std::unordered_map>& assignments, - const nil::blueprint::circuit circuit, - const std::string& concrete_circuit_file_name) { - const auto find_it = assignments.find(idx); - if (find_it == assignments.end()) { - return "Can't find assignment table"; - } - std::vector public_input_column_sizes; - const auto public_input_size = find_it->second.public_inputs_amount(); - for (std::uint32_t i = 0; i < public_input_size; i++) { - public_input_column_sizes.push_back(find_it->second.public_input_column_size(i)); - } - return write_binary_circuit(circuit, public_input_column_sizes, concrete_circuit_file_name); -} - -template -std::optional setup_prover(const std::optional& circuit_file_name, - const std::optional& assignment_table_file_name, - std::unordered_map>& assignments, - zkevm_circuits& circuits) { - auto start = std::chrono::high_resolution_clock::now(); - - using Endianness = nil::marshalling::option::big_endian; - - auto init_start = std::chrono::high_resolution_clock::now(); - auto err = initialize_circuits(circuits, assignments); - if (err) { - return "Preset step failed: " + err.value(); - } - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - init_start); - std::cout << "INITIALIZE: " << duration.count() << " ms\n"; - - if (circuit_file_name) { - auto write_circuits_start = std::chrono::high_resolution_clock::now(); - const auto& circuit_names = circuits.get_circuit_names(); - for (const auto& circuit_name : circuit_names) { - std::string concrete_circuit_file_name = circuit_file_name.value() + "." + std::to_string(circuits.get_index(circuit_name)); - if (circuit_name == "bytecode") { - err = write_circuit(circuits.get_index(circuit_name), - assignments, - circuits.m_bytecode_circuit, - concrete_circuit_file_name); - } else if (circuit_name == "sha256") { - err = write_circuit(circuits.get_index(circuit_name), - assignments, - circuits.m_sha256_circuit, - concrete_circuit_file_name); - } else if (circuit_name == "add") { - err = write_circuit(circuits.get_index(circuit_name), - assignments, - circuits.m_add_circuit, - concrete_circuit_file_name); - } - if (err) { - return "Write circuits failed: " + err.value(); - } - } - duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - write_circuits_start); - std::cout << "WRITE CIRCUITS: " << duration.count() << " ms\n"; - } - - if (assignment_table_file_name) { - auto write_assignments_start = std::chrono::high_resolution_clock::now(); - auto err = write_binary_assignments( - assignments, assignment_table_file_name.value()); - if (err) { - return "Write assignments failed: " + err.value(); - } - duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - write_assignments_start); - std::cout << "WRITE ASSIGNMENT TABLES: " << duration.count() << " ms\n"; - } - - duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "SETUP: " << duration.count() << " ms\n"; - - return {}; -} - -template -void set_paddnig(nil::blueprint::assignment& assignments) { - std::uint32_t used_rows_amount = assignments.rows_amount(); - - std::uint32_t padded_rows_amount = std::pow(2, std::ceil(std::log2(used_rows_amount))); - if (padded_rows_amount == used_rows_amount) { - padded_rows_amount *= 2; - } - if (padded_rows_amount < 8) { - padded_rows_amount = 8; - } - - for (std::uint32_t i = 0; i < assignments.witnesses_amount(); i++) { - for (std::uint32_t j = assignments.witness_column_size(i); j < padded_rows_amount; j++) { - assignments.witness(i, j) = 0; - } - } - for (std::uint32_t i = 0; i < assignments.public_inputs_amount(); i++) { - for (std::uint32_t j = assignments.public_input_column_size(i); j < padded_rows_amount; j++) { - assignments.public_input(i, j) = 0; - } - } - for (std::uint32_t i = 0; i < assignments.constants_amount(); i++) { - for (std::uint32_t j = assignments.constant_column_size(i); j < padded_rows_amount; j++) { - assignments.constant(i, j) = 0; - } - } - for (std::uint32_t i = 0; i < assignments.selectors_amount(); i++) { - for (std::uint32_t j = assignments.selector_column_size(i); j < padded_rows_amount; j++) { - assignments.selector(i, j) = 0; - } - } -} - -template -std::optional fill_sha256_table(nil::blueprint::assignment& sha256_table, - const std::vector& input) { - using component_type = - nil::blueprint::components::sha256>; - - // Prepare witness container to make an instance of the component - typename component_type::manifest_type m = component_type::get_manifest(); - size_t witness_amount = *(m.witness_amount->begin()); - std::vector witnesses(witness_amount); - std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... - - component_type component_instance = component_type( - witnesses, std::array{0}, std::array{0}); - - constexpr const std::int32_t block_size = 2; - constexpr const std::int32_t input_blocks_amount = 2; - - const auto& row_idx = sha256_table.public_input_column_size(0); - std::array input_block_vars = { - typename component_type::var(0, row_idx, false, component_type::var::column_type::public_input), - typename component_type::var(0, row_idx + 1, false, component_type::var::column_type::public_input), - typename component_type::var(0, row_idx + 2, false, component_type::var::column_type::public_input), - typename component_type::var(0, row_idx + 3, false, component_type::var::column_type::public_input) - }; - typename component_type::input_type component_input = {input_block_vars}; - //set input values - sha256_table.public_input(0, row_idx) = typename BlueprintFieldType::extended_integral_type(input[0].c_str()); - sha256_table.public_input(0, row_idx + 1) = typename BlueprintFieldType::extended_integral_type(input[1].c_str()); - sha256_table.public_input(0, row_idx + 2) = typename BlueprintFieldType::extended_integral_type(input[2].c_str()); - sha256_table.public_input(0, row_idx + 3) = typename BlueprintFieldType::extended_integral_type(input[3].c_str()); - - nil::blueprint::components::generate_assignments(component_instance, sha256_table, component_input, 0); - - return {}; -} - -template -std::optional fill_add_table(nil::blueprint::assignment& add_table, - const std::vector& input) { - using component_type = - nil::blueprint::components::addition, - BlueprintFieldType, nil::blueprint::basic_non_native_policy>; - - // Prepare witness container to make an instance of the component - typename component_type::manifest_type m = component_type::get_manifest(); - size_t witness_amount = *(m.witness_amount->begin()); - std::vector witnesses(witness_amount); - std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... - - component_type component_instance = component_type( - witnesses, std::array{0}, std::array{0}); - - const auto& row_idx = add_table.public_input_column_size(0); - auto v0 = typename component_type::var(0, row_idx, false, component_type::var::column_type::public_input); - auto v1 = typename component_type::var(0, row_idx + 1, false, component_type::var::column_type::public_input); - typename component_type::input_type component_input = {v0, v1}; - //set input values - add_table.public_input(0, row_idx) = typename BlueprintFieldType::extended_integral_type(input[0].c_str()); - add_table.public_input(0, row_idx + 1) = typename BlueprintFieldType::extended_integral_type(input[1].c_str()); - - nil::blueprint::components::generate_assignments(component_instance, add_table, component_input, 0); - - return {}; -} - -template -std::optional fill_assignment_tables(std::unordered_map>& assignments, - const std::optional& shardId, - const std::optional& blockHash, - const std::optional& block_file_name, - const std::optional& account_storage_file_name, - const std::vector& input, - const zkevm_circuits& circuits, - const std::optional& artifacts, - boost::log::trivial::severity_level log_level) { - using Endianness = nil::marshalling::option::big_endian; - - auto start = std::chrono::high_resolution_clock::now(); - - // generate assignments for sha256 - auto find_it = assignments.find(circuits.get_index("sha256")); - if (find_it != assignments.end()) { - auto& sha256_table = find_it->second; - return fill_sha256_table(sha256_table, input); - } - find_it = assignments.find(circuits.get_index("add")); - if (find_it != assignments.end()) { - auto& add_table = find_it->second; - return fill_add_table(add_table, input); - } - return "Can't find assignment table for sha256"; - - - // TODO enable after implement filling assignment tables from tracer - /*single_thread_runner runner(assignments, shardId, - circuit_names, log_level); - - auto err = runner.extract_block_with_messages(blockHash, block_file_name); - if (err) { - return "Extract input block failed: " + err.value(); - } - - err = runner.extract_accounts_with_storage(account_storage_file_name); - if (err) { - return "Extract account storage failed: " + err.value(); - } - - err = runner.run(assignment_table_file_name, artifacts); - if (err) { - return "Assigner run failed: " + err.value(); - }*/ - - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "FILL ASSIGNMENT TABLES: " << duration.count() << " ms\n"; - - return {}; -} - -template -int curve_dependent_main(const std::optional& shardId, - const std::optional& blockHash, - const std::optional& block_file_name, - const std::optional& account_storage_file_name, - const std::optional& assignment_table_file_name, - const std::optional& circuit_file_name, - const std::optional& artifacts, - const std::vector& target_circuits, - const std::vector& input, - const std::optional& path, - boost::log::trivial::severity_level log_level) { - using ArithmetizationType = - nil::crypto3::zk::snark::plonk_constraint_system; - - boost::log::core::get()->set_filter(boost::log::trivial::severity >= log_level); - - zkevm_circuits circuits; - // TODO just for check sha256, should be removed ater add regular zk EVM circuits - std::optional circuit_file_index; - if (target_circuits.size() == 1 && target_circuits[0].find("sha256") != std::string::npos) { - circuit_file_index = target_circuits[0].substr(7); - circuits.m_names = {"sha256"}; - } else if (target_circuits.size() == 1 && target_circuits[0].find("add") != std::string::npos) { - circuit_file_index = target_circuits[0].substr(4); - circuits.m_names = {"add"}; - }else { - circuits.m_names = target_circuits; - } - - std::unordered_map> - assignments; - - BOOST_LOG_TRIVIAL(debug) << "SetUp prover\n"; - auto err = setup_prover(circuit_file_name, assignment_table_file_name, assignments, circuits); - if (err) { - std::cerr << "Failed set up prover " << err.value() << std::endl; - return 1; - } - - BOOST_LOG_TRIVIAL(debug) << "Fill assignment tables\n"; - err = fill_assignment_tables( - assignments, shardId, blockHash, block_file_name, - account_storage_file_name, input, circuits, artifacts, log_level); - if (err) { - std::cerr << "Failed fill assignment tables " << err.value() << std::endl; - return 1; - } - - using CurveType = nil::crypto3::algebra::curves::pallas; - using HashType = nil::crypto3::hashes::keccak_1600<256>; - - auto prover = nil::proof_generator::Prover( - 9, //lambda - 2, //expand_factor - 0, //max_quotient_chunks - 69 //grind - ); - - // for each circuit - const auto& circuit_names = circuits.get_circuit_names(); - for(const auto& circuit_name : circuit_names) { - const auto circuit_index = circuits.get_index(circuit_name); - auto start = std::chrono::high_resolution_clock::now(); - if (circuit_name == "sha256") { - prover.set_circuit(circuits.m_sha256_circuit); - auto find_it = assignments.find(circuits.get_index("sha256")); - if (find_it == assignments.end()) { - std::cerr << "Can't find assignment table for sha256" << std::endl; - return 1; - } - auto& sha256_table = find_it->second; - std::size_t used_rows_amount = sha256_table.rows_amount(); - set_paddnig(sha256_table); - prover.set_assignment_table(sha256_table, used_rows_amount); - } else if (circuit_name == "add") { - prover.set_circuit(circuits.m_add_circuit); - auto find_it = assignments.find(circuits.get_index("add")); - if (find_it == assignments.end()) { - std::cerr << "Can't find assignment table for add" << std::endl; - return 1; - } - auto& add_table = find_it->second; - std::size_t used_rows_amount = add_table.rows_amount(); - set_paddnig(add_table); - prover.set_assignment_table(add_table, used_rows_amount); - } - auto duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - start); - std::cout << "SET PROOF PRODUCER INPUTS: " << duration.count() << " ms\n"; - - auto process_public_data_start = std::chrono::high_resolution_clock::now(); - if (!prover.preprocess_public_data()) { - std::cerr << "Failed preprocess public data" << std::endl; - return 1; - } - duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - process_public_data_start); - std::cout << "PROCESS PUBLIC DATA: " << duration.count() << " ms\n"; - - auto process_private_data_start = std::chrono::high_resolution_clock::now(); - if (!prover.preprocess_private_data()) { - std::cerr << "Failed preproces private data" << std::endl; - return 1; - } - duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - process_private_data_start); - std::cout << "PREPROCESS PRIVATE DATA: " << duration.count() << " ms\n"; - - std::string file_name_suffix = circuit_file_index.has_value() ? circuit_file_index.value() : std::to_string(circuit_index); - if (shardId) { - file_name_suffix += "." + std::to_string(shardId.value()); - } - if (blockHash) { - file_name_suffix += "." + blockHash.value(); - } - std::string file_root_path = path.has_value() ? path.value() : ""; - auto partial_proof_start = std::chrono::high_resolution_clock::now(); - if (!prover.generate_partial_proof_to_file(file_root_path + "proof." + file_name_suffix, - file_root_path + "challenge." + file_name_suffix, - file_root_path + "theta_power." + file_name_suffix)) { - std::cerr << "Failed generation partial proof" << std::endl; - return 1; - } - duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - partial_proof_start); - std::cout << "PARTIAL PROOF: " << duration.count() << " ms\n"; - - auto write_commitment_state_start = std::chrono::high_resolution_clock::now(); - if (!prover.save_commitment_state_to_file(file_root_path + "commitment_state." + file_name_suffix)) { - std::cerr << "Failed write commitment state" << std::endl; - return 1; - } - duration = std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - write_commitment_state_start); - std::cout << "WRITE COMMITMENT STATE: " << duration.count() << " ms\n"; - - if (!prover.save_assignment_description(file_root_path + "assignment_table_description." + file_name_suffix)) { - std::cerr << "Failed write assignment table description" << std::endl; - return 1; - } - } - - - - // Check if bytecode table is satisfied to the bytecode constraints - /*auto it = assignments.find(nil::evm_assigner::zkevm_circuit::BYTECODE); - if (it == assignments.end()) { - std::cerr << "Can;t find bytecode assignment table\n"; - return 1; - } - auto& bytecode_table = it->second; - if (!::is_satisfied(circuits.m_bytecode_circuit, bytecode_table)) { - std::cerr << "Bytecode table is not satisfied!" << std::endl; - return 0; // Do not produce failure for now - }*/ - return 0; -} - -int main(int argc, char* argv[]) { - boost::program_options::options_description options_desc("zkEVM assigner"); - - // clang-format off - options_desc.add_options()("help,h", "Display help message") - ("version,v", "Display version") - ("assignment-tables,t", boost::program_options::value(), "Assignment tables output files") - ("circuits,c", boost::program_options::value(), "Circuits output files") - ("output-text", boost::program_options::value(), "Output assignment table in readable format. " - "Filename or `-` for stdout. " - "Using this enables options --tables, --rows, --columns") - ("tables", boost::program_options::value(), "Assignment table indices to output. " - "Format is --tables N|N-|-N|N-M(,N|N-|-N|N-M)*. " - "If not specified, outputs all generated tables") - ("rows", boost::program_options::value(), "Range of rows of the table to output. " - "Format is --rows N|N-|-N|N-M(,N|N-|-N|N-M)*. " - "If not specified, outputs all rows") - ("columns", boost::program_options::value>(), "Range of columns of the table to output. " - "Format is --columns N|N-|-N|N-M(,N|N-|-N|N-M)*, where is public_input|witness|constant|selector." - "If not specified, outputs all columns. " - "May be provided multiple times with different column types") - ("shard-id", boost::program_options::value(), "ID of the shard where executed block") - ("block-hash", boost::program_options::value(), "Hash of the input block") - ("block-file,b", boost::program_options::value(), "Predefined input block with messages") - ("account-storage,s", boost::program_options::value(), "Account storage config file") - ("elliptic-curve-type,e", boost::program_options::value(), "Native elliptic curve type (pallas, vesta, ed25519, bls12381)") - ("target-circuits", boost::program_options::value>(), "Fill assignment table only for certain circuits. If not set - fill assignments for all") - ("input", boost::program_options::value>(), "sha256 input val00 val01, val10, val11") - ("path", boost::program_options::value(), "Path to the output folder") - ("log-level,l", boost::program_options::value(), "Log level (trace, debug, info, warning, error, fatal)"); - // clang-format on - - boost::program_options::variables_map vm; - try { - boost::program_options::store( - boost::program_options::command_line_parser(argc, argv).options(options_desc).run(), - vm); - boost::program_options::notify(vm); - } catch (const boost::program_options::unknown_option& e) { - std::cerr << "Invalid command line argument: " << e.what() << std::endl; - std::cout << options_desc << std::endl; - return 1; - } - - if (vm.count("help")) { - std::cout << options_desc << std::endl; - return 0; - } - - if (vm.count("version")) { -#ifdef ASSIGNER_VERSION -#define xstr(s) str(s) -#define str(s) #s - std::cout << xstr(ASSIGNER_VERSION) << std::endl; -#else - std::cout << "Version is not defined" << std::endl; -#endif - return 0; - } - - std::optional shardId = std::nullopt; - std::optional assignment_table_file_name = std::nullopt; - std::optional circuit_file_name = std::nullopt; - std::optional blockHash = std::nullopt; - std::optional block_file_name = std::nullopt; - std::optional account_storage_file_name = std::nullopt; - std::optional path = std::nullopt; - std::string elliptic_curve; - std::string log_level; - std::vector target_circuits; - std::vector input; - - if (vm.count("assignment-tables")) { - assignment_table_file_name = vm["assignment-tables"].as(); - } - - if (vm.count("circuits")) { - circuit_file_name = vm["circuits"].as(); - } - - if (vm.count("block-file")) { - block_file_name = vm["block-file"].as(); - } - - if (vm.count("shard-id")) { - shardId = vm["shard-id"].as(); - } - - if (vm.count("block-hash")) { - blockHash = vm["block-hash"].as(); - } - - if (vm.count("account-storage")) { - account_storage_file_name = vm["account-storage"].as(); - } - - std::optional artifacts = std::nullopt; - if (vm.count("output-text")) { - auto maybe_artifacts = OutputArtifacts::from_program_options(vm); - if (!maybe_artifacts.has_value()) { - std::cerr << maybe_artifacts.error() << std::endl; - std::cout << options_desc << std::endl; - return 1; - } - artifacts = maybe_artifacts.value(); - } - - if (vm.count("elliptic-curve-type")) { - elliptic_curve = vm["elliptic-curve-type"].as(); - } else { - elliptic_curve = "pallas"; - } - - if (vm.count("target-circuits")) { - target_circuits = vm["target-circuits"].as>(); - } - - if (vm.count("input")) { - input = vm["input"].as>(); - if (input.size() != 4) { - std::cerr << "wrong input, should has 4 values" << std::endl; - return 1; - } - } else { - std::cerr << "input is required" << std::endl; - return 1; - } - - if (vm.count("path")) { - path = vm["path"].as(); - } - - if (vm.count("log-level")) { - log_level = vm["log-level"].as(); - } else { - log_level = "info"; - } - // We use Boost log trivial severity levels, these are string representations of their names - std::map log_options{ - {"trace", boost::log::trivial::trace}, {"debug", boost::log::trivial::debug}, - {"info", boost::log::trivial::info}, {"warning", boost::log::trivial::warning}, - {"error", boost::log::trivial::error}, {"fatal", boost::log::trivial::fatal}}; - - if (log_options.find(log_level) == log_options.end()) { - std::cerr << "Invalid command line argument -l (log level): " << log_level << std::endl; - std::cout << options_desc << std::endl; - return 1; - } - - std::map curve_options{ - {"pallas", 0}, - {"vesta", 1}, - {"ed25519", 2}, - {"bls12381", 3}, - }; - - if (curve_options.find(elliptic_curve) == curve_options.end()) { - std::cerr << "Invalid command line argument -e (Native elliptic curve type): " - << elliptic_curve << std::endl; - std::cout << options_desc << std::endl; - return 1; - } - - switch (curve_options[elliptic_curve]) { - case 0: { - return curve_dependent_main< - typename nil::crypto3::algebra::curves::pallas::base_field_type>( - shardId, blockHash, block_file_name, account_storage_file_name, - assignment_table_file_name, circuit_file_name, artifacts, target_circuits, input, path, log_options[log_level]); - break; - } - case 1: { - std::cerr << "vesta curve based circuits are not supported yet\n"; - break; - } - case 2: { - std::cerr << "ed25519 curve based circuits are not supported yet\n"; - break; - } - case 3: { - std::cerr << "bls12 curve based circuits are not supported yet\n"; - break; - } - }; - - return 0; -} diff --git a/zkevm-framework/bin/block_generator/block_generator.py b/zkevm-framework/bin/block_generator/block_generator.py deleted file mode 100755 index 166f42fab2..0000000000 --- a/zkevm-framework/bin/block_generator/block_generator.py +++ /dev/null @@ -1,339 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -from contextlib import contextmanager -import hashlib -import json -import jsonschema -import requests -import logging -from pathlib import Path -import random -import re -import os -import subprocess -from time import sleep -from typing import Dict - -# Interface for launching nil cluster RPC server -class ClusterProcess: - def __init__(self): - logging.info("Launching nil cluster") - self.process = subprocess.Popen(["nild", "run"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - # TODO: Ensure that the server is up at the time of a first request - sleep(4) - def shutdown(self): - logging.info("Terminating nil cluster") - self.process.terminate() - - # Implementation of ContextManager interface (to use inside "with") - def __enter__(self): - return self - - def __exit__(self, *exit_args): - self.shutdown() - -# Interface for usage of nil_cli -class NilCLI: - def __init__(self, cli_config_name=None): - self.endpoint = "http://127.0.0.1:8529" - self.config_path = cli_config_name - - def run_cli(self, args: list[str], pattern=None) -> str: - full_arg_list = ["nil"] - if self.config_path is not None: - full_arg_list += ["-c", self.config_path] - full_arg_list += args - logging.info("Launching " + " ".join(full_arg_list)) - p = subprocess.run(full_arg_list, capture_output=True) - if p.returncode != 0: - raise RuntimeError(p.stderr) - output = p.stdout.decode() - # result of "config show" command printed to stderr - if not output: - output = p.stderr.decode() - logging.debug(output) - if pattern is None: - return output - a = re.search(pattern, output) - if a is None: - raise RuntimeError(p.stderr) - return a.group(1) - - def wallet_address(self) -> str: - wallet_pattern = "Wallet address: (0x[0-9a-fA-F]+)" - return self.run_cli(["wallet", "info"], pattern=wallet_pattern) - - def new_wallet(self) -> str: - wallet_pattern = "New wallet address: (0x[0-9a-fA-F]+)" - return self.run_cli(["wallet", "new"], pattern=wallet_pattern) - - def init_config(self, path: str): - self.config_path = path - self.run_cli(["config", "init"]) - self.run_cli(["config", "set", "rpc_endpoint", self.endpoint]) - - def keygen(self) -> str: - return self.run_cli(["keygen", "new"]) - - def deploy_contract(self, bytecode_file: str, abi_file: str) -> str: - contract_pattern = "Contract address: (0x[0-9a-f]+)" - deploy_args = ["wallet", "deploy", bytecode_file] - deploy_args += ["--abi", abi_file] - salt = random.getrandbits(64) - deploy_args += ["--salt", str(salt)] - contract_address = self.run_cli(deploy_args, pattern=contract_pattern) - return contract_address - - def call_contract(self, contract_address: str, method_name: str,arguments: list[str], - abi_file: str): - message_pattern = "Message hash: (0x[0-9a-f]+)" - call_args = ["wallet", "send-message", contract_address, method_name] + arguments - call_args += ["--abi", abi_file] - #call_args += ["--no-wait"] # force put transaction into the one block - return self.run_cli(call_args, pattern=message_pattern) - - def send_request(self, method: str, params): - body = {"id":1,"jsonrpc":"2.0","method":method,"params":params} - response = requests.post(self.endpoint, json = body) - if response.status_code != 200: - raise RuntimeError("Wrong response code: " + str(response.status_code)) - response_json = response.json() - logging.debug(response_json) - return response_json["result"] - -# Remove directory recursively -def rmtree(f: Path): - if f.is_file(): - f.unlink() - else: - for child in f.iterdir(): - rmtree(child) - f.rmdir() - -# Temporary directory scope -@contextmanager -def temp_directory(artifacts_dir: str): - d = Path(artifacts_dir) - try: - d.mkdir() - yield - finally: - rmtree(d) - -# Compile solidity contract -def solc_compile(source: Path, out_dir: Path) -> tuple[str, str]: - if out_dir.exists(): - # Only compilation into an empty directory is allowed, - # otherwise we are unable to determine output file name - raise RuntimeError("Directory must not exist") - out_dir.mkdir() - solc_args = ["solc", "-o", str(out_dir), "--bin", "--abi", str(source)] - logging.info("Launching " + " ".join(solc_args)) - p = subprocess.run(solc_args, capture_output=True) - if (p.returncode != 0): - raise RuntimeError("Compilation failed: " + p.stderr.decode()) - - # Ensure that we got only 2 expected files (.bin and .abi) - artifact_counter = 0 - for artifact in out_dir.iterdir(): - if artifact.suffix == ".abi": - abi_file = str(artifact) - elif artifact.suffix == ".bin": - bin_file = str(artifact) - else: - raise RuntimeError("Unexpected compiler artifact: " + str(artifact)) - artifact_counter += 1 - - if artifact_counter != 2: - raise RuntimeError("Insufficient compiler artifacts for " + str(source)) - return bin_file, abi_file - -ARTIFACT_DIR = "artifacts" - -# Compilation and deployment of solidity contract -class Contract: - def __init__(self, path: str): - self.src = Path(path) - self.deployed = False - - def compile(self): - # Make unique directory for contract compiler artifacts - src_hash = hashlib.md5(str(self.src.resolve()).encode()) - out_dir = Path(ARTIFACT_DIR) / src_hash.hexdigest() - self.bin, self.abi = solc_compile(self.src, out_dir) - - def deploy(self, cli: NilCLI): - assert not self.deployed - self.compile() - self.address = cli.deploy_contract(self.bin, self.abi) - self.deployed = True - -# Deploy contracts -def deploy_contracts(cli: NilCLI, contract_map: Dict[int, Contract]): - for _, contract in contract_map.items(): - if not contract.deployed: - contract.deploy(cli) - -# Send message to call deployed contract -def submit_transactions(cli: NilCLI, contract_map: Dict[int, Contract], transactions) -> tuple[str, Contract]: - last_message_hash = None - last_called_contract = None - for transaction in transactions: - contract_id = transaction["contractId"] - if contract_id not in contract_map: - raise ValueError(f"Contract id {contract_id} is not defined") - - contract = contract_map[contract_id] - if not contract.deployed: - raise ValueError(f"Contract id {contract_id} is not deployed") - call_args = transaction["callArguments"] if "callArguments" in transaction else [] - last_called_contract = contract - last_message_hash = cli.call_contract(contract.address, transaction["methodName"], call_args, contract.abi) - - - return last_message_hash, last_called_contract - -# extract block hash and shard id for submitted message -def get_block_hash(cli: NilCLI, message_hash: str, called_contract: str) -> tuple[int, str]: - if message_hash is None: - raise ValueError(f"Message hash is empty") - receipt_str = cli.run_cli(["receipt", message_hash]) - receipt_str = re.split("Receipt data: ", receipt_str)[1] - receipt_json = json.loads(receipt_str) - - # Recursively find receipt for a message that calls the contract execution - def find_execution_receipt(receipt_json, contract_address): - while True: - if receipt_json["contractAddress"] == contract_address: - return receipt_json - for output_receipt in receipt_json["outputReceipts"]: - res = find_execution_receipt(output_receipt, contract_address) - if res is not None: - return res - - return None - - target_receipt = find_execution_receipt(receipt_json, called_contract) - if target_receipt is None: - raise RuntimeError("Receipt for the last execution message is not found") - - return target_receipt["shardId"], target_receipt["blockHash"] - -# extract block by hash and shard id -def extract_block(cli: NilCLI, shard_id, block_hash: str): - block_json = cli.send_request("eth_getBlockByHash", [shard_id, block_hash, True]) - return block_json - -# extract state by block hash and address -def extract_state(cli: NilCLI, address: str, block_hash: str): - state_json = cli.send_request("debug_getContract", [address, block_hash]) - return state_json - -# Load json and validate it via schema -def validate_json(file_path: str, schema_path: str): - with open(schema_path) as s: - schema_json = json.load(s) - with open(file_path) as config: - config_json = json.load(config) - jsonschema.validate(instance=config_json, schema=schema_json) - return config_json - - -# Deploy the contract and generate transactions by calling it, write block which includes these transactions and correspondend state to the files -def generate_block(block_config: str, cli_config_name: str, output_block_file_name: str, output_state_file_name: str): - # Get schema file by relative path - module_path = Path(__file__).resolve() - schema_path = module_path.parent / "resources" / "block_schema.json" - config_json = validate_json(block_config, str(schema_path)) - - # Collect contract list - contracts = {} - for contract in config_json["contracts"]: - contract_id = contract["id"] - if contract_id in contracts: - raise ValueError(f"Duplicated contract id: {contract_id}") - contracts[contract_id] = Contract(contract["path"]) - - # Submit transactions - with ClusterProcess(): - cli = NilCLI(cli_config_name) - with temp_directory(ARTIFACT_DIR): - deploy_contracts(cli, contracts) - last_message_hash, last_called_contract = submit_transactions(cli, contracts, config_json["transactions"]) - (shard_id, block_hash) = get_block_hash(cli, last_message_hash, last_called_contract.address) - - get_block_by_hash(cli, shard_id, block_hash, output_block_file_name) - - get_state_by_block_hash(cli, str(last_called_contract.address), block_hash, output_state_file_name) - - - print("ShardId = " + str(shard_id)) - print("BlockHash = " + block_hash) - -# Write block to file -def get_block_by_hash(cli, shard_id, block_hash: str, block_file_name: str): - block_json = extract_block(cli, shard_id, block_hash) - # Write block to the file - if block_file_name is not None: - with open(block_file_name, 'w') as f: - json.dump(block_json, f) - -# Write state to file -def get_state_by_block_hash(cli: NilCLI, address: str, block_hash: str, state_file_name: str): - state_json = extract_state(cli, address, block_hash) - accounts = {} - accounts["accounts"] = [state_json] - # Write state to the file - if state_file_name is not None: - with open(state_file_name, 'w') as f: - json.dump(accounts, f) - -# Initialize CLI config with endpoint, private key and new wallet address (on main shard) -def make_config(path: str): - # remove if file already exists - if os.path.isfile(path): - os.remove(path) - - cli = NilCLI() - cli.init_config(path) - cli.keygen() - with ClusterProcess(): - cli.new_wallet() - -def parse_arguments(): - parser = argparse.ArgumentParser(prog="Nil block generator", - description="Tool for contract deployment and creating transactions to generate new blocks") - parser.add_argument("--mode", choices=["make-config", "generate-block"],required=True, help="mode") - parser.add_argument("--cli-config-name", help="NIL CLI extra config name describing additional wollets") - parser.add_argument("-b", "--block-config-name", help="Block config name describing transactions") - parser.add_argument("-o", "--block-output-name", help="Block output file name") - parser.add_argument("-s", "--state-output-name", help="State output file name") - parser.add_argument("--shard-id", help="Shard ID") - parser.add_argument("--block-hash", help="Block Hash") - parser.add_argument("-l", "--generated-legacy-configs", help="Legacy config output (to be removed)") - parser.add_argument("-v", "--verbose", help="Enable debug logs", action="store_true") - - args = parser.parse_args() - # Extra checks for 'make-conig' mode - if args.mode == "make-config": - if args.cli_config_name is None: - raise ValueError("--cli-config-name argument must be passed for 'make-config' mode") - # Extra checks for 'generate-blocks' mode - if args.mode == "generate-block": - if args.block_config_name is None: - raise ValueError("--block-config-name argument must be passed for 'generate-blocks' mode") - return args - -if __name__ == "__main__": - args = parse_arguments() - if args.verbose: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.INFO) - if args.mode == "make-config": - make_config(args.cli_config_name) - elif args.mode == "generate-block": - generate_block(args.block_config_name, args.cli_config_name, args.block_output_name, args.state_output_name) - else: - raise ValueError("Unknown mode") diff --git a/zkevm-framework/bin/block_generator/contracts/counter.sol b/zkevm-framework/bin/block_generator/contracts/counter.sol deleted file mode 100644 index 96f6b9d2c1..0000000000 --- a/zkevm-framework/bin/block_generator/contracts/counter.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract SimpleStorage { - uint256 private value; - - event ValueChanged(uint256 newValue); - - function increment() public { - value += 1; - emit ValueChanged(value); - } -} diff --git a/zkevm-framework/bin/block_generator/example_data/block_config.json b/zkevm-framework/bin/block_generator/example_data/block_config.json deleted file mode 100644 index 6879a664ae..0000000000 --- a/zkevm-framework/bin/block_generator/example_data/block_config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "contracts": [ - { - "id": 1, - "path": "bin/block_generator/contracts/counter.sol" - } - ], - "transactions": [ - { - "contractId": 1, - "methodName": "increment" - } - ] -} diff --git a/zkevm-framework/bin/block_generator/resources/block_schema.json b/zkevm-framework/bin/block_generator/resources/block_schema.json deleted file mode 100644 index 70a1c7fbdc..0000000000 --- a/zkevm-framework/bin/block_generator/resources/block_schema.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type" :"object", - "description": "Block generator config file", - "properties": { - "contracts": { - "type": "array", - "items": { - "type" :"object", - "properties": { - "id": { - "type": "integer", - "minimum": 0 - }, - "path": { - "type": "string" - } - }, - "required": ["id", "path"], - "additionalProperties": false - }, - "uniqueItems": true - }, - "transactions": { - "type": "array", - "items": { - "type" :"object", - "properties": { - "contractId": { - "type": "integer", - "minimum": 0 - }, - "methodName": { - "type": "string", - "pattern": "^[a-zA-Z0-9_]+$" - }, - "callArguments": { - "type": "array", - "items": { - "type": "string", - "pattern": "^0x[0-9a-z]+$" - }, - "uniqueItems": true - } - }, - "required": ["contractId", "methodName"], - "additionalProperties": false - }, - "uniqueItems": true - } - }, - "required": ["contracts", "transactions"], - "additionalProperties": false -} diff --git a/zkevm-framework/libs/CMakeLists.txt b/zkevm-framework/libs/CMakeLists.txt deleted file mode 100644 index 1f2f34b70a..0000000000 --- a/zkevm-framework/libs/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -add_subdirectory(preset) -add_subdirectory(assigner_runner) -add_subdirectory(rpc) -add_subdirectory(json_helpers) -add_subdirectory(nil_core) -add_subdirectory(output_artifacts) diff --git a/zkevm-framework/libs/assigner_runner/CMakeLists.txt b/zkevm-framework/libs/assigner_runner/CMakeLists.txt deleted file mode 100644 index a6c993ed30..0000000000 --- a/zkevm-framework/libs/assigner_runner/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -add_library(zkEVMAssignerRunner SHARED - src/runner.cpp - src/utils.cpp - src/state_parser.cpp - src/block_parser.cpp -) - -include(SchemaHelper) -generate_schema_include(state_schema_include resources/state_schema.json) -generate_schema_include(input_block_schema_include resources/block_schema.json) -add_dependencies(zkEVMAssignerRunner state_schema_include input_block_schema_include) - -target_include_directories(zkEVMAssignerRunner - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include - PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/include -) - -find_package(Boost COMPONENTS REQUIRED log) -target_link_libraries(zkEVMAssignerRunner - PUBLIC - evm-assigner - NilCore - zkEVMJsonHelpers - zkEVMOutputArtifacts - zkEVMRpc - crypto3::common - Boost::log -) - -install(TARGETS zkEVMAssignerRunner - DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/block_parser.hpp b/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/block_parser.hpp deleted file mode 100644 index 64bb248208..0000000000 --- a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/block_parser.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_BLOCK_PARSER_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_BLOCK_PARSER_HPP_ - -#include -#include -#include - -#include "zkevm_framework/core/types/block.hpp" -#include "zkevm_framework/core/types/message.hpp" - -/// @brief Fill block and input messages from input stream -std::optional load_block_with_messages(core::types::Block& block, - std::vector& messages, - std::istream& block_data); - -/// @brief Fill block and input messages from input stream which contains serialized block and -/// messages -std::optional load_raw_block_with_messages(core::types::Block& block, - std::vector& messages, - std::istream& block_data); - -#endif // ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_BLOCK_PARSER_HPP_ diff --git a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/ext_vm_host.hpp b/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/ext_vm_host.hpp deleted file mode 100644 index 9ee490a94d..0000000000 --- a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/ext_vm_host.hpp +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_EXT_VM_HOST_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_EXT_VM_HOST_HPP_ - -#include - -#include "zkevm_framework/assigner_runner/state_parser.hpp" -#include "zkevm_framework/assigner_runner/utils.hpp" -#include "zkevm_framework/rpc/data_extractor.hpp" - -template -class ExtVMHost : public VMHost { - public: - ExtVMHost(const data_extractor& extractor, const std::string& prevBlockHash) - : VMHost(), m_extractor(extractor), m_prevBlockHash(prevBlockHash){}; - - explicit ExtVMHost(const data_extractor& extractor, const std::string& prevBlockHash, - evmc_tx_context& _tx_context, - std::shared_ptr> _assigner, - const std::string& _target_circuit = "") noexcept - : VMHost(_tx_context, _assigner, _target_circuit), - m_extractor(extractor), - m_prevBlockHash(prevBlockHash) {} - - ExtVMHost(const data_extractor& extractor, const std::string& prevBlockHash, - evmc_tx_context& _tx_context, evmc::accounts& _accounts, - std::shared_ptr> _assigner, - const std::string& _target_circuit = "") noexcept - : VMHost(_tx_context, _accounts, _assigner, _target_circuit), - m_extractor(extractor), - m_prevBlockHash(prevBlockHash) {} - - protected: - evmc::accounts::iterator get_account(const evmc::address& addr) noexcept override { - const auto find_it = this->accounts.find(addr); - if (find_it != this->accounts.end()) { - return find_it; - } - BOOST_LOG_TRIVIAL(debug) << "Get account (" << to_str(addr) << ") via RPC"; - std::stringstream account_data; - auto err = - m_extractor.get_account_with_storage(to_str(addr), m_prevBlockHash, account_data); - if (err) { - BOOST_LOG_TRIVIAL(error) << "Failed getting account RPC request: " << err.value(); - return this->accounts.end(); - } - evmc::account new_account; - err = load_account_with_storage(new_account, account_data); - if (err) { - BOOST_LOG_TRIVIAL(error) << "Failed parsing account data: " << err.value(); - return this->accounts.end(); - } - const auto insert_res = this->accounts.insert({addr, new_account}); - if (!insert_res.second) { - BOOST_LOG_TRIVIAL(error) << "Failed add new account"; - return this->accounts.end(); - } - return insert_res.first; - } - - private: - const data_extractor& m_extractor; - const std::string m_prevBlockHash; -}; - -#endif // ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_EXT_VM_HOST_HPP_ diff --git a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/runner.hpp b/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/runner.hpp deleted file mode 100644 index 14f8855cfe..0000000000 --- a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/runner.hpp +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_RUNNER_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_RUNNER_HPP_ - -#include -#include -#include -#include -#include - -#include "output_artifacts.hpp" -#include "zkevm_framework/assigner_runner/ext_vm_host.hpp" -#include "zkevm_framework/assigner_runner/utils.hpp" -#include "zkevm_framework/core/types/block.hpp" -#include "zkevm_framework/rpc/data_extractor.hpp" - -template -class single_thread_runner { - public: - using ArithmetizationType = - nil::crypto3::zk::snark::plonk_constraint_system; - - /// @brief Initialize runner with empty input block and account storage - single_thread_runner( - std::unordered_map>& assignments, - uint64_t shard_id = 0, const std::vector& target_circuits = {}, - boost::log::trivial::severity_level log_level = boost::log::trivial::info) - : m_assignments(assignments), - m_target_circuits(target_circuits), - m_log_level(log_level), - m_extractor("127.0.0.1", 8529, shard_id) {} - - /// @brief Execute one block - std::optional run(const std::string& assignment_table_file_name, - const std::optional& artifacts); - - /// @brief Load account storage from file - std::optional extract_accounts_with_storage( - const std::string& account_storage_config_name); - - /// @brief Load input block with messages from RPC or file - std::optional extract_block_with_messages(const std::string& blockHash, - const std::string& block_file_name); - - private: - std::optional fill_assignments(); - - std::unordered_map>& m_assignments; - - std::vector m_target_circuits; - boost::log::trivial::severity_level m_log_level; - data_extractor m_extractor; - evmc::accounts m_account_storage; - core::types::Block m_current_block; - std::vector m_input_messages; -}; - -#endif // ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_RUNNER_HPP_ diff --git a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/state_parser.hpp b/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/state_parser.hpp deleted file mode 100644 index 1a59cd5dff..0000000000 --- a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/state_parser.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_STATE_PARSER_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_STATE_PARSER_HPP_ - -#include -#include -#include - -#include "vm_host.hpp" - -/// @brief Fill account storage by config from input stream -std::optional init_account_storage(evmc::accounts &account_storage, - std::istream &config); - -/// @brief Fill account storage by config from file -std::optional init_account_storage(evmc::accounts &account_storage, - const std::string &account_storage_config_name); - -/// @brief Fill account and storage from RPC response -std::optional load_account_with_storage(evmc::account &account, - std::istream &account_data); - -#endif // ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_STATE_PARSER_HPP_ diff --git a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/utils.hpp b/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/utils.hpp deleted file mode 100644 index 13e3334f70..0000000000 --- a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/utils.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_UTILS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_UTILS_HPP_ - -#include - -#include -#include - -#include "zkevm_framework/core/common.hpp" -#include "zkevm_framework/core/types/address.hpp" - -static evmc::uint256be to_uint256be(intx::uint256 v) { return intx::be::store(v); } - -evmc_call_kind evmc_msg_kind(const std::bitset<8>& type); -evmc_address to_evmc_address(const core::types::Address& v); - -std::string to_str(const evmc_address& v); -std::string to_str(const core::types::Address& v); -std::string to_str(const evmc_bytes32& v); -std::string to_str(const std::vector& code); -std::string to_str(const std::bitset<8>& type); -std::string to_str(evmc_status_code code); -std::string to_str(const core::Hash& v); - -#endif // ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_UTILS_HPP_ diff --git a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/write_assignments.hpp b/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/write_assignments.hpp deleted file mode 100644 index 73517a8e62..0000000000 --- a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/write_assignments.hpp +++ /dev/null @@ -1,297 +0,0 @@ -/** - * @file write_assignments.hpp - * - * @brief This file defines functions for writing assignment tables in binary mode. - */ - -#ifndef ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_WRITE_ASSIGNMENTS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_WRITE_ASSIGNMENTS_HPP_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "nil/blueprint/blueprint/plonk/assignment.hpp" -#include "nil/crypto3/marshalling/algebra/types/field_element.hpp" -#include "nil/crypto3/zk/snark/arithmetization/plonk/assignment.hpp" -#include "nil/marshalling/types/integral.hpp" -#include "output_artifacts.hpp" - -/** - * @brief Write size_t serialized as nil::marshalling::types::integral into output stream. - */ -template -void write_size_t(std::size_t input, std::ostream& out) { - using TTypeBase = nil::marshalling::field_type; - auto integer_container = nil::marshalling::types::integral(input); - std::array char_array{}; - auto write_iter = char_array.begin(); - assert(integer_container.write(write_iter, char_array.size()) == - nil::marshalling::status_type::success); - out.write(reinterpret_cast(char_array.data()), char_array.size()); -} - -/** - * @brief Write zero value serialized as nil::crypto3::marshalling::types::field_element into output - * stream. - */ -template -inline void write_zero_field(std::ostream& out) { - using TTypeBase = nil::marshalling::field_type; - using AssignmentTableType = nil::blueprint::assignment; - using field_element = nil::crypto3::marshalling::types::field_element< - TTypeBase, typename AssignmentTableType::field_type::value_type>; - std::array array{}; - out.write(reinterpret_cast(array.data()), array.size()); -} - -/** - * @brief Write field element into output stream. - */ -template -void write_field( - const typename nil::blueprint::assignment::field_type::value_type& input, - std::ostream& out) { - using TTypeBase = nil::marshalling::field_type; - using AssignmentTableType = nil::blueprint::assignment; - auto field_container = nil::crypto3::marshalling::types::field_element< - TTypeBase, typename AssignmentTableType::field_type::value_type>(input); - std::array char_array{}; - auto write_iter = char_array.begin(); - assert(field_container.write(write_iter, char_array.size()) == - nil::marshalling::status_type::success); - out.write(reinterpret_cast(char_array.data()), char_array.size()); -} - -/** - * @brief Write table column to output stream padding with zeroes up to fixed number of values. - */ -template -void write_vector_value(const std::size_t padded_rows_amount, const ColumnType& table_col, - std::ostream& out) { - for (std::size_t i = 0; i < padded_rows_amount; i++) { - if (i < table_col.size()) { - write_field(table_col[i], out); - } else { - write_zero_field(out); - } - } -} - -/** - * @brief Write assignment table serialized into binary to output stream. - */ -template -void write_binary_assignment(const nil::blueprint::assignment& table, - std::ostream& out) { - std::uint32_t public_input_size = table.public_inputs_amount(); - std::uint32_t witness_size = table.witnesses_amount(); - std::uint32_t constant_size = table.constants_amount(); - std::uint32_t selector_size = table.selectors_amount(); - - std::uint32_t max_public_inputs_size = 0; - std::uint32_t max_constant_size = 0; - std::uint32_t max_selector_size = 0; - - for (std::uint32_t i = 0; i < public_input_size; i++) { - max_public_inputs_size = - std::max(max_public_inputs_size, table.public_input_column_size(i)); - } - - std::uint32_t max_witness_size = 0; - for (std::uint32_t i = 0; i < witness_size; i++) { - max_witness_size = std::max(max_witness_size, table.witness_column_size(i)); - } - for (std::uint32_t i = 0; i < constant_size; i++) { - max_constant_size = std::max(max_constant_size, table.constant_column_size(i)); - } - for (std::uint32_t i = 0; i < selector_size; i++) { - max_selector_size = std::max(max_selector_size, table.selector_column_size(i)); - } - std::uint32_t usable_rows_amount = - std::max({max_witness_size, max_public_inputs_size, max_constant_size, max_selector_size}); - - std::uint32_t padded_rows_amount = std::pow(2, std::ceil(std::log2(usable_rows_amount))); - if (padded_rows_amount == usable_rows_amount) { - padded_rows_amount *= 2; - } - if (padded_rows_amount < 8) { - padded_rows_amount = 8; - } - - using column_type = typename nil::crypto3::zk::snark::plonk_column; - - write_size_t(witness_size, out); - write_size_t(public_input_size, out); - write_size_t(constant_size, out); - write_size_t(selector_size, out); - write_size_t(usable_rows_amount, out); - write_size_t(padded_rows_amount, out); - - write_size_t(witness_size * padded_rows_amount, out); - for (std::uint32_t i = 0; i < witness_size; i++) { - write_vector_value(padded_rows_amount, - table.witness(i), out); - } - - write_size_t(public_input_size * padded_rows_amount, out); - for (std::uint32_t i = 0; i < public_input_size; i++) { - write_vector_value( - padded_rows_amount, table.public_input(i), out); - } - - write_size_t(constant_size * padded_rows_amount, out); - for (std::uint32_t i = 0; i < constant_size; i++) { - write_vector_value(padded_rows_amount, - table.constant(i), out); - } - - write_size_t(selector_size * padded_rows_amount, out); - for (std::uint32_t i = 0; i < selector_size; i++) { - write_vector_value(padded_rows_amount, - table.selector(i), out); - } -} - -/** - * @brief Write assignment tables serialized into binary to output file. - */ -template -std::optional write_binary_assignments( - const std::unordered_map>& assignments, - const std::string& basefilename) { - for (const auto& assignment : assignments) { - std::string filename = basefilename + "." + std::to_string(assignment.first); - std::ofstream fout(filename, std::ios_base::binary | std::ios_base::out); - if (!fout.is_open()) { - return "Cannot open " + filename; - } - BOOST_LOG_TRIVIAL(debug) << "writing table " << assignment.first << " into file " - << filename; - write_binary_assignment( - assignment.second, fout); - fout.close(); - } - return {}; -} - -/** - * @brief Write assignments into output artifacts according to thier description. - */ -template -std::optional write_output_artifacts( - const std::unordered_map>& assignments, - const OutputArtifacts& artifacts) { - BOOST_LOG_TRIVIAL(debug) << "\n"; - BOOST_LOG_TRIVIAL(debug) << "writing output artifacts to " << artifacts.basename; - BOOST_LOG_TRIVIAL(debug) << "tables to print: " << artifacts.tables_to_string(); - BOOST_LOG_TRIVIAL(debug) << "rows to print: " << artifacts.rows.to_string(); - BOOST_LOG_TRIVIAL(debug) << "witness columns to print: " - << artifacts.witness_columns.to_string(); - BOOST_LOG_TRIVIAL(debug) << "public input columns to print: " - << artifacts.public_input_columns.to_string(); - BOOST_LOG_TRIVIAL(debug) << "constant columns to print: " - << artifacts.constant_columns.to_string(); - BOOST_LOG_TRIVIAL(debug) << "selector columns to print: " - << artifacts.selector_columns.to_string(); - BOOST_LOG_TRIVIAL(debug) << "\n"; - - if (assignments.empty()) { - return {}; - } - - std::ostringstream error; - - for (const auto& i : artifacts.tables) { - auto it = assignments.find(i); - if (it == assignments.end()) { - return "Can't find assignment table " + std::to_string(i); - } - auto assignment = it->second; - - Ranges::ConcreteRanges witnesses = {}; - if (!artifacts.witness_columns.empty()) { - auto maybe_witnesses = - artifacts.witness_columns.concrete_ranges((int)assignment.witnesses_amount() - 1); - if (!maybe_witnesses.has_value()) { - error << "Table " << i << ": Witnesses: " << maybe_witnesses.error(); - return error.str(); - } - witnesses = maybe_witnesses.value(); - } - - Ranges::ConcreteRanges public_inputs = {}; - if (!artifacts.public_input_columns.empty()) { - auto maybe_public_inputs = artifacts.public_input_columns.concrete_ranges( - (int)assignment.public_inputs_amount() - 1); - if (!maybe_public_inputs.has_value()) { - error << "Table " << i << ": Public inputs: " << maybe_public_inputs.error(); - return error.str(); - } - public_inputs = maybe_public_inputs.value(); - } - - Ranges::ConcreteRanges constants = {}; - if (!artifacts.constant_columns.empty()) { - auto maybe_constants = - artifacts.constant_columns.concrete_ranges((int)assignment.constants_amount() - 1); - if (!maybe_constants.has_value()) { - error << "Table " << i << ": Constants: " << maybe_constants.error(); - return error.str(); - } - constants = maybe_constants.value(); - } - - Ranges::ConcreteRanges selectors = {}; - if (!artifacts.selector_columns.empty()) { - auto maybe_selectors = - artifacts.selector_columns.concrete_ranges((int)assignment.selectors_amount() - 1); - if (!maybe_selectors.has_value()) { - error << "Table " << i << ": Selectors: " << maybe_selectors.error(); - return error.str(); - } - selectors = maybe_selectors.value(); - } - - Ranges::ConcreteRanges rows = {}; - if (!artifacts.rows.empty()) { - auto maybe_rows = artifacts.rows.concrete_ranges((int)assignment.max_size() - 1); - if (!maybe_rows.has_value()) { - error << "Table " << i << ": Rows: " << maybe_rows.error(); - return error.str(); - } - rows = maybe_rows.value(); - } - - if (artifacts.to_stdout()) { - BOOST_LOG_TRIVIAL(debug) << "writing table " << i << " to stdout"; - - assignment.export_table(std::cout, witnesses, public_inputs, constants, selectors, - rows); - } else { - std::string filename = artifacts.basename + "." + std::to_string(i); - BOOST_LOG_TRIVIAL(debug) << "writing table " << i << " into file " << filename; - - std::ofstream fout(filename, std::ios_base::binary | std::ios_base::out); - if (!fout.is_open()) { - error << "Cannot open " << filename; - return error.str(); - } - assignment.export_table(fout, witnesses, public_inputs, constants, selectors, rows); - fout.close(); - } - BOOST_LOG_TRIVIAL(debug) << "\n"; - } - - return {}; -} - -#endif // ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_WRITE_ASSIGNMENTS_HPP_ diff --git a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/write_circuits.hpp b/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/write_circuits.hpp deleted file mode 100644 index 23fe1ad063..0000000000 --- a/zkevm-framework/libs/assigner_runner/include/zkevm_framework/assigner_runner/write_circuits.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @file write_circuits.hpp - * - * @brief This file defines functions for writing circuits in binary mode. - */ - -#ifndef ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_WRITE_CIRCUITS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_WRITE_CIRCUITS_HPP_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "nil/blueprint/blueprint/plonk/assignment.hpp" -#include "nil/blueprint/blueprint/plonk/circuit.hpp" -#include "nil/crypto3/marshalling/algebra/types/field_element.hpp" -#include "nil/crypto3/marshalling/zk/types/plonk/constraint_system.hpp" -#include "nil/crypto3/zk/snark/arithmetization/plonk/constraint_system.hpp" -#include "nil/marshalling/types/integral.hpp" -#include "output_artifacts.hpp" - -/** - * @brief Write circuit serialized into binary to output file. - */ -template -std::optional write_binary_circuit(const nil::blueprint::circuit& circuit, - const std::vector public_input_column_sizes, - const std::string& filename) { - std::ofstream fout(filename, std::ios_base::binary | std::ios_base::out); - if (!fout.is_open()) { - return "Cannot open " + filename; - } - BOOST_LOG_TRIVIAL(debug) << "writing circuit into file " - << filename; - - using TTypeBase = nil::marshalling::field_type; - using ConstraintSystemType = nil::crypto3::zk::snark::plonk_constraint_system; - using value_marshalling_type = - nil::crypto3::marshalling::types::plonk_constraint_system; - - // fill public input sizes - nil::crypto3::marshalling::types::public_input_sizes_type public_input_sizes; - using public_input_size_type = typename nil::crypto3::marshalling::types::public_input_sizes_type::element_type; - const auto public_input_size = public_input_column_sizes.size(); - for (auto i : public_input_column_sizes) { - public_input_sizes.value().push_back(public_input_size_type(i)); - } - - auto filled_val = - value_marshalling_type(std::make_tuple( - nil::crypto3::marshalling::types::fill_plonk_gates(circuit.gates()), - nil::crypto3::marshalling::types::fill_plonk_copy_constraints(circuit.copy_constraints()), - nil::crypto3::marshalling::types::fill_plonk_lookup_gates(circuit.lookup_gates()), - nil::crypto3::marshalling::types::fill_plonk_lookup_tables(circuit.lookup_tables()), - public_input_sizes - )); - - std::vector cv; - cv.resize(filled_val.length(), 0x00); - auto cv_iter = cv.begin(); - nil::marshalling::status_type status = filled_val.write(cv_iter, cv.size()); - fout.write(reinterpret_cast(cv.data()), cv.size()); - - fout.close(); - return {}; -} - -#endif // ZKEMV_FRAMEWORK_LIBS_ASSIGNER_RUNNER_INCLUDE_ZKEVM_FRAMEWORK_ASSIGNER_RUNNER_WRITE_CIRCUITS_HPP_ diff --git a/zkevm-framework/libs/assigner_runner/resources/block_schema.json b/zkevm-framework/libs/assigner_runner/resources/block_schema.json deleted file mode 100644 index 4ddc40921a..0000000000 --- a/zkevm-framework/libs/assigner_runner/resources/block_schema.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type" :"object", - "description": "Block an input messages data", - "properties": { - "number": { - "type": "number" - }, - "parentHash": { - "type": "string", - "pattern": "^0x[0-9a-f]+$" - }, - "gasPrice": { - "type": "string", - "pattern": "^[0-9]+$" - }, - "messages": { - "type": "array", - "items": { - "type" :"object", - "properties": { - "flags": { - "type": "array", - "items": { - "enum": ["Internal", "Deploy", "Refund", "Bounce"] - } - }, - "from": { - "type": "string", - "pattern": "^0x[0-9a-fA-F]+$", - "minLength": 42, - "maxLength": 42 - }, - "to": { - "type": "string", - "pattern": "^0x[0-9a-fA-F]+$", - "minLength": 42, - "maxLength": 42 - }, - "feeCredit": { - "type": "string", - "pattern": "^[0-9]+$" - }, - "value": { - "type": "string" - }, - "data": { - "type": "string", - "pattern": "^0x[0-9a-fA-F]+$" - } - }, - "required": ["flags", "from", "to", "feeCredit", "value", "data"], - "additionalProperties": true - }, - "uniqueItems": true - } - }, - "required": ["number", "parentHash", "gasPrice", "messages"], - "additionalProperties": true -} diff --git a/zkevm-framework/libs/assigner_runner/resources/state_schema.json b/zkevm-framework/libs/assigner_runner/resources/state_schema.json deleted file mode 100644 index 4a242723da..0000000000 --- a/zkevm-framework/libs/assigner_runner/resources/state_schema.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type" :"object", - "description": "Account storage data", - "properties": { - "accounts": { - "type": "array", - "items": { - "type" :"object", - "properties": { - "code": { - "type": "string", - "pattern": "^0x[0-9a-f]+$" - }, - "contract": { - "type": "string", - "pattern": "^0x[0-9a-fA-F]+$" - }, - "proof": { - "type": "string", - "pattern": "^0x[0-9a-f]+$" - }, - "storage": { - "type" : "array", - "items": { - "type": "object", - "properties": { - "Key": { - "type": "string", - "pattern": "^0x[0-9a-fA-F]+$", - "minLength": 4, - "maxLength": 66 - }, - "Val": { - "type": "string", - "pattern": "^[0-9]+$" - } - }, - "required" : ["Key", "Val"], - "additionalProperties": false - } - } - }, - "required": ["code", "contract", "proof", "storage"], - "additionalProperties": false - }, - "uniqueItems": true - } - }, - "required": ["accounts"], - "additionalProperties": false -} diff --git a/zkevm-framework/libs/assigner_runner/src/block_parser.cpp b/zkevm-framework/libs/assigner_runner/src/block_parser.cpp deleted file mode 100644 index 634b6bd622..0000000000 --- a/zkevm-framework/libs/assigner_runner/src/block_parser.cpp +++ /dev/null @@ -1,141 +0,0 @@ -#include "zkevm_framework/assigner_runner/block_parser.hpp" - -#include -#include -#include -#include -#include -#include - -#include "block_schema.def" -#include "zkevm_framework/json_helpers/json_helpers.hpp" - -template -std::optional to_std_bytes(const boost::json::value &json_value, T &dst) noexcept { - std::vector bytes; - auto err = json_helpers::to_bytes(json_value, bytes); - if (err) { - return err; - } - for (std::size_t i = 0; i < bytes.size(); i++) { - dst[i] = std::byte{bytes[i]}; - } - return std::nullopt; -} - -static std::optional handle_message(const boost::json::object &val, - core::types::Message &message) { - const auto &json_flags = val.at("flags").as_array(); - for (const auto &flag : json_flags) { - const std::string flag_str = flag.as_string().c_str(); - if (flag_str == "Internal") { - message.m_flags.set(std::size_t(core::types::MessageKind::Internal)); - } else if (flag_str == "Deploy") { - message.m_flags.set(std::size_t(core::types::MessageKind::Deploy)); - } else if (flag_str == "Refund") { - message.m_flags.set(std::size_t(core::types::MessageKind::Refund)); - } else if (flag_str == "Bounce") { - message.m_flags.set(std::size_t(core::types::MessageKind::Bounce)); - } - } - auto err = to_std_bytes(val.at("from"), message.m_from); - if (err) { - return err; - } - err = to_std_bytes(val.at("to"), message.m_to); - if (err) { - return err; - } - message.m_feeCredit.m_value = std::stoull(val.at("feeCredit").as_string().c_str()); - std::string value_str = val.at("value").as_string().c_str(); - message.m_value.m_value = intx::from_string(value_str); - std::vector data_bytes; - err = json_helpers::to_std_bytes(val.at("data"), data_bytes); - if (err) { - return err; - } - message.m_data.data() = data_bytes; - return {}; -} - -static std::optional handle_block(const boost::json::object &val, - core::types::Block &block, - std::vector &messages) { - block.m_id = val.at("number").as_int64(); - to_std_bytes(val.at("parentHash"), block.m_prev_block); - block.m_gasPrice.m_value = std::stoull(val.at("gasPrice").as_string().c_str()); - - const auto &json_input_msgs = val.at("messages").as_array(); - for (const auto &msg : json_input_msgs) { - core::types::Message message; - const boost::json::object &msg_json = msg.as_object(); - if (auto parse_err = handle_message(msg_json, message)) { - return parse_err.value(); - } - messages.push_back(message); - } - return {}; -} - -std::optional load_block_with_messages(core::types::Block &block, - std::vector &messages, - std::istream &block_data) { - auto block_json = json_helpers::parse_json(block_data); - if (!block_json) { - return "Error while parsing block file: " + block_json.error(); - } - std::stringstream schema_stream; - schema_stream << block_schema; - auto schema_json = json_helpers::parse_json(schema_stream); - if (!schema_json) { - return "Error while parsing block schema: " + schema_json.error(); - } - auto validation_err = json_helpers::validate_json(schema_json.value(), block_json.value()); - if (validation_err) { - return "Block file validation failed: \n\t" + validation_err.value(); - } - - auto parse_block_err = handle_block(block_json.value().as_object(), block, messages); - if (parse_block_err) { - return "Parse block failed: \n\t" + parse_block_err.value(); - } - return {}; -} - -std::optional load_raw_block_with_messages(core::types::Block &block, - std::vector &messages, - std::istream &block_data) { - auto block_json = json_helpers::parse_json(block_data); - if (!block_json) { - return "Error while parsing block: " + block_json.error(); - } - if (!block_json.value().as_object().contains("result") || - !block_json.value().at("result").as_object().contains("content")) { - return "Block content not found in the JSON"; - } - std::vector block_bytes; - std::string block_data_str = block_json.value().at("result").at("content").as_string().c_str(); - auto deserialize_err = json_helpers::to_std_bytes(block_data_str, block_bytes); - if (deserialize_err) { - return "Extract block bytes failed: " + deserialize_err.value(); - } - block = ssz::deserialize(block_bytes); - - if (!block_json.value().as_object().contains("result") || - !block_json.value().at("result").as_object().contains("inMessages")) { - return "Input messages not found in the JSON"; - } - const auto &json_input_msgs = block_json.value().at("result").at("inMessages").as_array(); - for (const auto &msg : json_input_msgs) { - core::types::Message message; - std::string msg_str = msg.as_string().c_str(); - std::vector msg_bytes; - deserialize_err = json_helpers::to_std_bytes(msg_str, msg_bytes); - if (deserialize_err) { - return "Extract message bytes failed: " + deserialize_err.value(); - } - message = ssz::deserialize(msg_bytes); - messages.push_back(message); - } - return {}; -} diff --git a/zkevm-framework/libs/assigner_runner/src/runner.cpp b/zkevm-framework/libs/assigner_runner/src/runner.cpp deleted file mode 100644 index c2b6e2f65f..0000000000 --- a/zkevm-framework/libs/assigner_runner/src/runner.cpp +++ /dev/null @@ -1,255 +0,0 @@ -#include "zkevm_framework/assigner_runner/runner.hpp" - -#include -#include -#include -#include -#include -#include -#include - -#include "zkevm_framework/assigner_runner/block_parser.hpp" -#include "zkevm_framework/assigner_runner/state_parser.hpp" -#include "zkevm_framework/assigner_runner/utils.hpp" -#include "zkevm_framework/assigner_runner/write_assignments.hpp" - -template -std::optional single_thread_runner::run( - const std::string& assignment_table_file_name, - const std::optional& artifacts) { - fill_assignments(); - - BOOST_LOG_TRIVIAL(debug) << "print assignment tables " << m_assignments.size() << "\n"; - - using Endianness = nil::marshalling::option::big_endian; - - auto err = write_binary_assignments( - m_assignments, assignment_table_file_name); - if (err) { - return err; - } - - if (artifacts.has_value()) { - std::optional err = - write_output_artifacts( - m_assignments, artifacts.value()); - if (err) { - return err; - } - } - - return {}; -} - -template -std::optional single_thread_runner::extract_block_with_messages( - const std::string& blockHash, const std::string& block_file_name) { - if (!block_file_name.empty()) { - BOOST_LOG_TRIVIAL(debug) << "Try load input block from file " << block_file_name << "\n"; - std::ifstream block_data(block_file_name); - if (!block_data.is_open()) { - return "Could not open the input block file: '" + block_file_name + "'"; - } - const auto err = load_block_with_messages(m_current_block, m_input_messages, block_data); - if (err) { - return err; - } - } else { - BOOST_LOG_TRIVIAL(debug) << "Try get input block from RPC\n"; - std::stringstream block_data; - auto err = m_extractor.get_block_with_messages(blockHash, block_data); - if (err) { - return err; - } - err = load_raw_block_with_messages(m_current_block, m_input_messages, block_data); - if (err) { - return err; - } - } - return {}; -} - -template -std::optional single_thread_runner::extract_accounts_with_storage( - const std::string& account_storage_config_name) { - if (!account_storage_config_name.empty()) { - BOOST_LOG_TRIVIAL(debug) << "Try load account storage from file " - << account_storage_config_name << "\n"; - auto init_err = init_account_storage(m_account_storage, account_storage_config_name); - if (init_err) { - return init_err.value(); - } - } - return {}; -} - -template -std::optional single_thread_runner::fill_assignments() { - std::ostringstream error; - - // create assigner instance - auto assigner_ptr = - std::make_shared>(m_assignments); - - evmc_revision rev = {}; - - BOOST_LOG_TRIVIAL(debug) - << "Input Block:\n" - << " block number = " << m_current_block.m_id << "\n" - << " prev m_current_block = " << to_str(m_current_block.m_prev_block) << "\n" - << " smart contract root = " << to_str(m_current_block.m_smart_contracts_root) << "\n" - << " in message root = " << to_str(m_current_block.m_in_messages_root) << "\n" - << " out message root = " << to_str(m_current_block.m_out_messages_root) << "\n" - << " out message num = " << m_current_block.m_out_messages_num << "\n" - << " receipt root = " << to_str(m_current_block.m_receipts_root) << "\n" - << " child block root hash = " << to_str(m_current_block.m_child_blocks_root_hash) << "\n" - << " master chain hash = " << to_str(m_current_block.m_master_chain_hash) << "\n" - << " timestamp = " << m_current_block.m_timestamp << "\n" - << " gas price = " << m_current_block.m_gasPrice.m_value[0] << "\n" - << "\n"; - - if (m_log_level <= boost::log::trivial::debug) { - BOOST_LOG_TRIVIAL(debug) << "Account storage initialized with " << m_account_storage.size() - << " accounts: \n"; - for (const auto& [addr, acc] : m_account_storage) { - BOOST_LOG_TRIVIAL(debug) << "\tAddress: " << to_str(addr) << '\n' - << "\tBalance: " << to_str(acc.balance) << '\n'; - if (!acc.code.empty()) { - BOOST_LOG_TRIVIAL(debug) << "\tCode: " << to_str(acc.code); - } - if (!acc.storage.empty()) { - BOOST_LOG_TRIVIAL(debug) << "\tStorage:\n"; - for (const auto& [key, value] : acc.storage) { - BOOST_LOG_TRIVIAL(debug) - << "[ " << to_str(key) << " ] = " << to_str(value) << "\n"; - } - } - BOOST_LOG_TRIVIAL(debug) << std::endl; - } - } - - evmc_address zero_address{0}; - evmc::uint256be zero_value{0}; - // transaction and block data for execution - struct evmc_tx_context tx_context = { - // per transaction value - .tx_gas_price = {{0}}, /**< The transaction gas price. */ - - // per account block value - .tx_origin = zero_address, /**< The transaction origin account. */ - - .block_coinbase = zero_address, /**< The miner of the block. */ - .block_number = (int64_t)m_current_block.m_id, /**< The block number. */ - .block_timestamp = - (int64_t)m_current_block.m_timestamp, /**< The m_current_block timestamp. */ - .block_gas_limit = 0, /**< The m_current_block gas limit. */ - .block_prev_randao = zero_value, - .chain_id = zero_value, /**< The m_current_blockchain's ChainID. */ - .block_base_fee = - zero_value, /**< The m_current_block base fee per gas (EIP-1559, EIP-3198). */ - .blob_base_fee = zero_value, /**< The blob base fee (EIP-7516). */ - .blob_hashes = nullptr, /**< The array of blob hashes (EIP-4844). */ - .blob_hashes_count = 0, /**< The number of blob hashes (EIP-4844). */ - }; - - // default interface for access to the host - const struct evmc_host_interface* host_interface = &evmc::Host::get_interface(); - - // TODO support multi target circuits in evm-assigner - std::string target_circuit = m_target_circuits.size() > 0 ? m_target_circuits[0] : ""; - ExtVMHost host(m_extractor, to_str(m_current_block.m_prev_block), tx_context, m_account_storage, - assigner_ptr, target_circuit); - - struct evmc_host_context* ctx = host.to_context(); - - // run EVM per transactions - for (const auto& input_msg : m_input_messages) { - const evmc_address origin_addr = to_evmc_address(input_msg.m_from); - tx_context.tx_origin = origin_addr; - - BOOST_LOG_TRIVIAL(debug) << "process CALL message\n from " << to_str(input_msg.m_from) - << " to " << to_str(input_msg.m_to) << "\n"; - - if (!input_msg.m_flags.test(std::size_t(core::types::MessageKind::Internal)) && - input_msg.m_flags.test(std::size_t(core::types::MessageKind::Deploy))) { - BOOST_LOG_TRIVIAL(debug) << "skip transaction " << input_msg.m_seqno << "(" - << to_str(input_msg.m_flags) << "). Nothing to do\n"; - continue; - } - - // set tansaction related fields - // tx_context.tx_gas_price = - // intx::be::store(input_msg.m_gas_price.m_value); - auto msg_calldata = input_msg.m_data; - std::vector calldata(msg_calldata.size()); - size_t count = 0; - std::for_each(msg_calldata.begin(), msg_calldata.end(), - [&count, &calldata](const std::byte& v) { - calldata[count] = to_integer(v); - count++; - }); - if (count != calldata.size()) { - error << "Failed copy calldata: expected size = " << calldata.size() - << ", real = " << count; - return error.str(); - } - - // init messge associated with transaction - const evmc_uint256be value = to_uint256be(input_msg.m_value.m_value); - const evmc_address sender_addr = to_evmc_address(input_msg.m_from); - const evmc_address recipient_addr = to_evmc_address(input_msg.m_to); - const int64_t gas = - (input_msg.m_feeCredit.m_value / (m_current_block.m_gasPrice.m_value[0]))[0]; - const uint8_t input[] = ""; - struct evmc_message msg = {.kind = evmc_msg_kind(input_msg.m_flags), - .flags = uint32_t{0}, - .depth = 0, - .gas = gas, - .recipient = recipient_addr, - .sender = sender_addr, - .input_data = calldata.data(), - .input_size = calldata.size(), - .value = value, - .create2_salt = {0}, - .code_address = origin_addr}; - - std::vector contract_code; - contract_code.resize(host.get_code_size(recipient_addr)); - const auto copy_size = - host.copy_code(recipient_addr, 0, contract_code.data(), contract_code.size()); - if (copy_size != contract_code.size()) { - error << "Failed copy contract code: expected size = " << contract_code.size() - << ", real = " << copy_size; - return error.str(); - } - - BOOST_LOG_TRIVIAL(debug) << "evaluate transaction\n" - << " type = " << to_str(input_msg.m_flags) << "\n" - << " value = " << input_msg.m_value.m_value[0] << "\n" - << " gas price = " << m_current_block.m_gasPrice.m_value[0] - << "\n" - << " free credit = " << input_msg.m_feeCredit.m_value[0] << "\n" - << " gas = " << gas << "\n" - << " code size = " << contract_code.size() << "\n"; - - auto res = nil::evm_assigner::evaluate(host_interface, ctx, rev, &msg, contract_code.data(), - contract_code.size(), assigner_ptr, target_circuit); - - BOOST_LOG_TRIVIAL(debug) << "evaluate result = " << to_str(res.status_code) << "\n"; - if (res.status_code == EVMC_SUCCESS) { - BOOST_LOG_TRIVIAL(debug) << "create_address = " << to_str(res.create_address) << "\n" - << "gas_left = " << res.gas_left << "\n" - << "gas_refund = " << res.gas_refund << "\n" - << "output size = " << res.output_size << "\n"; - } - } - return {}; -} - -// Instantiate runner for required field types - -using pallas_base_field = typename nil::crypto3::algebra::curves::pallas::base_field_type; -template class single_thread_runner; - -using bls_base_field = typename nil::crypto3::algebra::fields::bls12_base_field<381>; -template class single_thread_runner; diff --git a/zkevm-framework/libs/assigner_runner/src/state_parser.cpp b/zkevm-framework/libs/assigner_runner/src/state_parser.cpp deleted file mode 100644 index 2041cb3155..0000000000 --- a/zkevm-framework/libs/assigner_runner/src/state_parser.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include "zkevm_framework/assigner_runner/state_parser.hpp" - -#include -#include -#include -#include -#include - -#include "state_schema.def" -#include "zkevm_framework/assigner_runner/utils.hpp" -#include "zkevm_framework/core/types/account.hpp" -#include "zkevm_framework/json_helpers/json_helpers.hpp" - -static std::optional handle_code(std::string &code_str, evmc::account &account) { - if (auto parse_err = json_helpers::to_bytes(code_str, account.code)) { - return "Parsing get code response is failed: " + parse_err.value(); - } - return {}; -} - -static std::optional handle_storage(const boost::json::array &storage_json, - evmc::account &account) { - auto &storage = account.storage; - for (const auto &item : storage_json) { - const boost::json::object &storage_elem = item.as_object(); - if (!storage_elem.contains("Key") || !storage_elem.contains("Val")) { - return "Invalid storage in the JSON"; - } - const auto key_str = storage_elem.at("Key").as_string().c_str(); - const auto val_str = storage_elem.at("Val").as_string().c_str(); - evmc::bytes32 key = to_uint256be(intx::from_string(key_str)); - evmc::bytes32 value = to_uint256be(intx::from_string(val_str)); - storage.emplace(key, value); - } - return {}; -} - -static std::optional handle_account(std::string &contract_str, evmc::account &account, - evmc::address &address) { - core::types::SmartContract contract; - std::vector contract_data; - auto parse_err = json_helpers::to_std_bytes(contract_str, contract_data); - if (parse_err) { - return "Parse contract failed: \n\t" + parse_err.value(); - } - contract = ssz::deserialize(contract_data); - account.balance = to_uint256be(contract.m_balance.m_value); - address = to_evmc_address(contract.m_address); - return {}; -} - -std::optional init_account_storage(evmc::accounts &account_storage, - std::istream &config) { - auto config_json = json_helpers::parse_json(config); - if (!config_json) { - return "Error while parsing state config file: " + config_json.error(); - } - std::stringstream schema_stream; - schema_stream << state_schema; - auto schema_json = json_helpers::parse_json(schema_stream); - if (!schema_json) { - std::cerr << "Wrong schema" << std::endl; - return "Error while parsing state schema: " + schema_json.error(); - } - auto validation_err = json_helpers::validate_json(schema_json.value(), config_json.value()); - if (validation_err) { - return "Config file validation failed: \n\t" + validation_err.value(); - } - const auto &account_array = config_json->as_object().at("accounts").as_array(); - for (const auto &item : account_array) { - const boost::json::object &account_json = item.as_object(); - evmc::account account; - evmc::address account_address; - std::string code_str = account_json.at("code").as_string().c_str(); - auto parse_err = handle_code(code_str, account); - if (parse_err) { - return "Parse code failed: \n\t" + parse_err.value(); - } - std::string contract_str = account_json.at("contract").as_string().c_str(); - parse_err = handle_account(contract_str, account, account_address); - if (parse_err) { - return "Parse account failed: \n\t" + parse_err.value(); - } - parse_err = handle_storage(account_json.at("storage").as_array(), account); - if (parse_err) { - return "Parse storage failed: \n\t" + parse_err.value(); - } - account_storage[account_address] = account; - } - return {}; -} - -std::optional init_account_storage(evmc::accounts &account_storage, - const std::string &account_storage_config_name) { - std::ifstream asc_stream(account_storage_config_name); - if (!asc_stream.is_open()) { - return "Could not open the account storage config: '" + account_storage_config_name + "'"; - } - return init_account_storage(account_storage, asc_stream); -} - -std::optional load_account_with_storage(evmc::account &account, - std::istream &account_data) { - auto account_json = json_helpers::parse_json(account_data); - if (!account_json) { - return "Error while parsing accounts data: " + account_json.error(); - } - if (!account_json.value().as_object().contains("result") || - !account_json.value().at("result").as_object().contains("code")) { - return "Account code is not found in the JSON"; - } - std::string code_str = account_json.value().at("result").at("code").as_string().c_str(); - auto parse_err = handle_code(code_str, account); - if (parse_err) { - return "Parse code failed: \n\t" + parse_err.value(); - } - - if (!account_json.value().as_object().contains("result") || - !account_json.value().at("result").as_object().contains("contract")) { - return "Contract data is not found in the JSON"; - } - std::string contract_str = account_json.value().at("result").at("contract").as_string().c_str(); - evmc::address address; - parse_err = handle_account(contract_str, account, address); - if (parse_err) { - return "Parse account failed: \n\t" + parse_err.value(); - } - - if (!account_json.value().as_object().contains("result") || - !account_json.value().at("result").as_object().contains("storage")) { - return "Storage is not found in the JSON"; - } - parse_err = handle_storage(account_json.value().at("result").at("storage").as_array(), account); - if (parse_err) { - return "Parse account failed: \n\t" + parse_err.value(); - } - return {}; -} diff --git a/zkevm-framework/libs/assigner_runner/src/utils.cpp b/zkevm-framework/libs/assigner_runner/src/utils.cpp deleted file mode 100644 index 0fc2cd7def..0000000000 --- a/zkevm-framework/libs/assigner_runner/src/utils.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include "zkevm_framework/assigner_runner/utils.hpp" - -#include - -#include -#include -#include -#include -#include - -#include "zkevm_framework/core/types/message.hpp" - -evmc_call_kind evmc_msg_kind(const std::bitset<8>& type) { - if (type.test(std::size_t(core::types::MessageKind::Deploy))) { - return EVMC_CREATE; - } else if (type.test(std::size_t(core::types::MessageKind::Internal))) { - return EVMC_CALL; - } else { - return EVMC_CALL; - } -} - -evmc_address to_evmc_address(const core::types::Address& v) { - evmc_address res; - for (std::size_t i = 0; i < core::types::ADDR_SIZE; i++) { - res.bytes[i] = std::to_integer(v[i]); - } - return res; -} - -template -static std::string byte_array_to_str(const T* data, size_t size) { - std::stringstream os; - os << std::hex << "0x"; - for (int i = 0; i < size; ++i) { - os << std::setw(2) << std::setfill('0') << (int)data[i]; - } - return os.str(); -} - -std::string to_str(const evmc_address& v) { return byte_array_to_str(v.bytes, sizeof(v.bytes)); } - -std::string to_str(const core::types::Address& v) { return byte_array_to_str(v.data(), v.size()); } - -std::string to_str(const evmc_bytes32& v) { return byte_array_to_str(v.bytes, sizeof(v.bytes)); } - -std::string to_str(const core::Hash& v) { return byte_array_to_str(v.data(), v.size()); } - -std::string to_str(const std::vector& code) { - return byte_array_to_str(code.data(), code.size()); -} - -std::string to_str(const std::bitset<8>& type) { - if (type.test(std::size_t(core::types::MessageKind::Deploy))) { - return "EVMC_CREATE"; - } else if (type.test(std::size_t(core::types::MessageKind::Internal))) { - return "EVMC_CALL"; - } else { - return "unknown message type"; - } -} - -std::string to_str(evmc_status_code code) { - switch (code) { - case EVMC_SUCCESS: - return "EVMC_SUCCESS"; - case EVMC_FAILURE: - return "EVMC_FAILURE"; - case EVMC_REVERT: - return "EVMC_REVERT"; - case EVMC_OUT_OF_GAS: - return "EVMC_OUT_OF_GAS"; - case EVMC_INVALID_INSTRUCTION: - return "EVMC_INVALID_INSTRUCTION"; - case EVMC_UNDEFINED_INSTRUCTION: - return "EVMC_UNDEFINED_INSTRUCTION"; - case EVMC_STACK_OVERFLOW: - return "EVMC_STACK_OVERFLOW"; - case EVMC_STACK_UNDERFLOW: - return "EVMC_STACK_UNDERFLOW"; - case EVMC_BAD_JUMP_DESTINATION: - return "EVMC_BAD_JUMP_DESTINATION"; - case EVMC_INVALID_MEMORY_ACCESS: - return "EVMC_INVALID_MEMORY_ACCESS"; - case EVMC_CALL_DEPTH_EXCEEDED: - return "EVMC_CALL_DEPTH_EXCEEDED"; - case EVMC_STATIC_MODE_VIOLATION: - return "EVMC_STATIC_MODE_VIOLATION"; - case EVMC_PRECOMPILE_FAILURE: - return "EVMC_PRECOMPILE_FAILURE"; - case EVMC_CONTRACT_VALIDATION_FAILURE: - return "EVMC_CONTRACT_VALIDATION_FAILURE"; - case EVMC_ARGUMENT_OUT_OF_RANGE: - return "EVMC_ARGUMENT_OUT_OF_RANGE"; - case EVMC_WASM_UNREACHABLE_INSTRUCTION: - return "EVMC_WASM_UNREACHABLE_INSTRUCTION"; - case EVMC_WASM_TRAP: - return "EVMC_WASM_TRAP"; - case EVMC_INSUFFICIENT_BALANCE: - return "EVMC_INSUFFICIENT_BALANCE"; - case EVMC_INTERNAL_ERROR: - return "EVMC_INTERNAL_ERROR"; - case EVMC_REJECTED: - return "EVMC_REJECTED"; - case EVMC_OUT_OF_MEMORY: - return "EVMC_OUT_OF_MEMORY"; - default: - return "none"; - }; -} diff --git a/zkevm-framework/libs/json_helpers/CMakeLists.txt b/zkevm-framework/libs/json_helpers/CMakeLists.txt deleted file mode 100644 index 45ac97e8a2..0000000000 --- a/zkevm-framework/libs/json_helpers/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -find_package(valijson REQUIRED) -find_package(Boost COMPONENTS REQUIRED json) - -add_library(zkEVMJsonHelpers SHARED json_helpers.cpp) -target_link_libraries(zkEVMJsonHelpers PUBLIC ${Boost_LIBRARIES} PRIVATE valijson) -target_include_directories(zkEVMJsonHelpers PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) -target_compile_features(zkEVMJsonHelpers PUBLIC cxx_std_23) -# It seems like exceptions is the only way to catch errors in valijson -target_compile_definitions(zkEVMJsonHelpers PRIVATE VALIJSON_USE_EXCEPTIONS) - -install(TARGETS zkEVMJsonHelpers - DESTINATION ${CMAKE_INSTALL_LIBDIR} -) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} -) diff --git a/zkevm-framework/libs/json_helpers/cmake/SchemaHelper.cmake b/zkevm-framework/libs/json_helpers/cmake/SchemaHelper.cmake deleted file mode 100644 index bc9440de2a..0000000000 --- a/zkevm-framework/libs/json_helpers/cmake/SchemaHelper.cmake +++ /dev/null @@ -1,26 +0,0 @@ -# Set variables depending on CMAKE_CURRENT_LIST_DIR outside functions, -# otherwise the value will be a path to a caller list -set(SCRIPT_PATH "${CMAKE_CURRENT_LIST_DIR}/SchemaScript.cmake") -set(TEMPLATE_PATH "${CMAKE_CURRENT_LIST_DIR}/../schema.def.in") - -function(generate_schema_include target_name schema_path) - if (NOT IS_ABSOLUTE ${schema_path}) - set(schema_path ${CMAKE_CURRENT_SOURCE_DIR}/${schema_path}) - endif() - get_filename_component(SCHEMA_NAME ${schema_path} NAME_WE) - set(DEF_FILE ${CMAKE_CURRENT_BINARY_DIR}/include/${SCHEMA_NAME}.def) - # Generate include guard name for schema include file - file(RELATIVE_PATH RP ${CMAKE_BINARY_DIR} ${DEF_FILE}) - string(TOUPPER ${RP} UPPER_PATH) - string(REGEX REPLACE "[/\.$]" "_" INCLUDE_GUARD_NAME ${UPPER_PATH}) - - # Add a target to regenerate schema header every time when the schema file is changed - add_custom_command( - OUTPUT ${DEF_FILE} - COMMAND ${CMAKE_COMMAND} -D INCLUDE_GUARD=${INCLUDE_GUARD_NAME} -D SCHEMA_PATH=${schema_path} - -D OUTPUT_PATH=${DEF_FILE} -P ${SCRIPT_PATH} - DEPENDS ${schema_path} - DEPENDS ${TEMPLATE_PATH} - ) - add_custom_target(${target_name} DEPENDS ${DEF_FILE}) -endfunction() diff --git a/zkevm-framework/libs/json_helpers/cmake/SchemaScript.cmake b/zkevm-framework/libs/json_helpers/cmake/SchemaScript.cmake deleted file mode 100644 index ec64393e8f..0000000000 --- a/zkevm-framework/libs/json_helpers/cmake/SchemaScript.cmake +++ /dev/null @@ -1,5 +0,0 @@ -message(TRACE "Generating schema include from ${SCHEMA_PATH}") -get_filename_component(SCHEMA_VARIABLE_NAME ${SCHEMA_PATH} NAME_WE) -file(READ ${SCHEMA_PATH} SCHEMA_CONTENT) -message(TRACE "INCLUDE_GUARD=${INCLUDE_GUARD}") -configure_file(${CMAKE_CURRENT_LIST_DIR}/../schema.def.in ${OUTPUT_PATH} @ONLY) diff --git a/zkevm-framework/libs/json_helpers/include/zkevm_framework/json_helpers/json_helpers.hpp b/zkevm-framework/libs/json_helpers/include/zkevm_framework/json_helpers/json_helpers.hpp deleted file mode 100644 index ab5d4159ef..0000000000 --- a/zkevm-framework/libs/json_helpers/include/zkevm_framework/json_helpers/json_helpers.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_JSON_HELPERS_INCLUDE_ZKEVM_FRAMEWORK_JSON_HELPERS_JSON_HELPERS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_JSON_HELPERS_INCLUDE_ZKEVM_FRAMEWORK_JSON_HELPERS_JSON_HELPERS_HPP_ - -#include -#include -#include -#include -#include -#include - -namespace json_helpers { - - /// @brief JSON Schema validator - /// @returns the first found error if exists - std::optional validate_json(const boost::json::value &schema_json, - const boost::json::value &target_json) noexcept; - - /// @brief Parse config file and transform it to Boost json representation - std::expected parse_json(std::istream &stream) noexcept; - - /// @brief Extract unsigned number from value - size_t get_number(const boost::json::value &json_value) noexcept; - - /// @brief Put string into the given vector bytes - std::optional to_bytes(std::string &hex_string, - std::vector &dst) noexcept; - - /// @brief Put value into the given vector bytes - std::optional to_bytes(const boost::json::value &json_value, - std::vector &dst) noexcept; - - /// @brief Put string into the given vector std::bytes - std::optional to_std_bytes(std::string &hex_string, - std::vector &dst) noexcept; - - /// @brief Put value into the given vector std::bytes - std::optional to_std_bytes(const boost::json::value &json_value, - std::vector &dst) noexcept; - -} // namespace json_helpers - -#endif // ZKEMV_FRAMEWORK_LIBS_JSON_HELPERS_INCLUDE_ZKEVM_FRAMEWORK_JSON_HELPERS_JSON_HELPERS_HPP_ diff --git a/zkevm-framework/libs/json_helpers/json_helpers.cpp b/zkevm-framework/libs/json_helpers/json_helpers.cpp deleted file mode 100644 index 9b44e04448..0000000000 --- a/zkevm-framework/libs/json_helpers/json_helpers.cpp +++ /dev/null @@ -1,121 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -namespace json_helpers { - - std::optional validate_json(const boost::json::value &schema_json, - const boost::json::value &target_json) noexcept { - valijson::Schema schema; - valijson::SchemaParser schemaParser; - - valijson::adapters::BoostJsonAdapter schemaAdapter(schema_json); - -#if VALIJSON_USE_EXCEPTIONS - try { -#endif - schemaParser.populateSchema(schemaAdapter, schema); -#if VALIJSON_USE_EXCEPTIONS - } catch (std::exception &error) { - return "Schema error: " + std::string(error.what()); - } -#endif - - valijson::Validator validator; - valijson::ValidationResults results; - valijson::adapters::BoostJsonAdapter targetAdapter(target_json); - - if (validator.validate(schema, targetAdapter, &results)) { - // Success - return {}; - } - valijson::ValidationResults::Error error; - results.popError(error); - std::ostringstream error_stream; - error_stream << error.description << " Location: "; - for (const auto &location : error.context) { - error_stream << location; - } - return error_stream.str(); - } - - std::expected parse_json(std::istream &stream) noexcept { - boost::json::stream_parser p; - boost::json::error_code ec; - while (!stream.eof()) { - char input_string[256]; - stream.read(input_string, sizeof(input_string) - 1); - input_string[stream.gcount()] = '\0'; - p.write(input_string, ec); - if (ec) { - return std::unexpected(ec.message()); - } - } - p.finish(ec); - if (ec) { - return std::unexpected(ec.message()); - } - return p.release(); - } - - size_t get_number(const boost::json::value &json_value) noexcept { - if (json_value.is_int64()) { - return json_value.as_int64(); - } - return json_value.as_uint64(); - } - - std::optional to_bytes(std::string &hex_string, - std::vector &dst) noexcept { - // Skip 0x prefix if exists - if (hex_string[0] == '0' && hex_string[1] == 'x') { - hex_string.erase(0, 2); - } - try { - boost::algorithm::unhex(hex_string, std::back_inserter(dst)); - } catch (...) { - return "Hex string to bytes failed"; - } - return std::nullopt; - } - - std::optional to_bytes(const boost::json::value &json_value, - std::vector &dst) noexcept { - std::string hex_string = json_value.as_string().c_str(); - auto err = to_bytes(hex_string, dst); - if (err) { - return err; - } - return std::nullopt; - } - - std::optional to_std_bytes(std::string &hex_string, - std::vector &dst) noexcept { - std::vector bytes; - auto err = to_bytes(hex_string, bytes); - if (err) { - return err; - } - for (const auto &byte : bytes) { - dst.push_back(std::byte{byte}); - } - return std::nullopt; - } - - std::optional to_std_bytes(const boost::json::value &json_value, - std::vector &dst) noexcept { - std::vector bytes; - auto err = to_bytes(json_value, bytes); - if (err) { - return err; - } - for (const auto &byte : bytes) { - dst.push_back(std::byte{byte}); - } - return std::nullopt; - } -} // namespace json_helpers diff --git a/zkevm-framework/libs/json_helpers/schema.def.in b/zkevm-framework/libs/json_helpers/schema.def.in deleted file mode 100644 index 328dea2acc..0000000000 --- a/zkevm-framework/libs/json_helpers/schema.def.in +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef @INCLUDE_GUARD@ -#define @INCLUDE_GUARD@ - -static const char @SCHEMA_VARIABLE_NAME@[] = -R"(@SCHEMA_CONTENT@)"; - -#endif diff --git a/zkevm-framework/libs/nil_core/CMakeLists.txt b/zkevm-framework/libs/nil_core/CMakeLists.txt deleted file mode 100644 index 3c4604190e..0000000000 --- a/zkevm-framework/libs/nil_core/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -set(LIBRARY_NAME NilCore) - -find_package(intx REQUIRED) -find_package(sszpp REQUIRED) - -# SSZ++ can be compiled only with GCC 13+ -if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - message(FATAL_ERROR "NilCore library can be built only with GCC 13+") -endif() - -if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0) - message(FATAL_ERROR "NilCore library can be built only with GCC 13+") -endif() - -add_library(${LIBRARY_NAME} SHARED) - -add_subdirectory(src) - -target_compile_features(${LIBRARY_NAME} PUBLIC cxx_std_23) - -target_include_directories(${LIBRARY_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) - -target_link_libraries(${LIBRARY_NAME} PUBLIC intx::intx sszpp::sszpp) - -install(TARGETS ${LIBRARY_NAME} - DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/common.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/common.hpp deleted file mode 100644 index 6b37cd2e5b..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/common.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_COMMON_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_COMMON_HPP_ - -#include -#include -#include - -#include "ssz++.hpp" - -namespace core { - constexpr std::size_t HASH_SIZE = 32; - - class Hash : public std::array {}; - - /** - * @brief Vector of bytes, serialisable with SSZ. - * @tparam N size limit of a vector (see SSZ specification) - */ - template - using Bytes = ssz::list; -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_COMMON_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/mpt.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/mpt.hpp deleted file mode 100644 index 6acc53e8f5..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/mpt.hpp +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_MPT_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_MPT_HPP_ - -#include -#include -#include -#include -#include - -#include "zkevm_framework/core/mpt/node.hpp" - -namespace std { - // To allow using vector of bytes as key in unordered_map - template<> - struct hash> { - size_t operator()(const vector& v) const { - return hash()( - string_view(reinterpret_cast(v.data()), v.size())); - } - }; -} // namespace std - -namespace core { - namespace mpt { - - namespace details { - class GetHandler; - class SetHandler; - class DeleteHandler; - struct DeleteResult; - } // namespace details - - class MerklePatriciaTrie { - public: - MerklePatriciaTrie(); - std::vector get(const std::vector& key) const; - void set(const std::vector& key, const std::vector& value); - void remove(const std::vector& key); - - protected: - Node GetFromStorage(const Reference& ref) const; - Reference PutToStorage(const Node& node); - std::optional> GetNode(const Reference& nodeRef, - Path& path) const; - Reference SetNode(const Reference& nodeRef, Path& path, - const std::vector& value); - details::DeleteResult DeleteNode(const Reference& nodeRef, const Path& path); - - private: - static Path PathFromKey(const std::vector& key); - static constexpr size_t kMaxRawKeyLen = 32; - - Reference root_; - std::unordered_map> - nodes_; // Better design is to use other external class for storage - - friend class details::GetHandler; - friend class details::SetHandler; - friend class details::DeleteHandler; - }; - - } // namespace mpt -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_MPT_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/node.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/node.hpp deleted file mode 100644 index 85c519ec49..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/node.hpp +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_NODE_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_NODE_HPP_ - -#include -#include -#include - -#include "zkevm_framework/core/mpt/path.hpp" - -namespace core { - namespace mpt { - - constexpr size_t kBranchesNum = 16; - - using Bytes = std::vector; - using Reference = Bytes; - - enum class NodeTypeFlag : std::uint8_t { - kLeafNode = 0, - kExtensionNode = 1, - kBranchNode = 2 - }; - - class Serializable { - public: - virtual ~Serializable() = default; - virtual Bytes Encode() const = 0; - }; - - class NodeBase : public ssz::ssz_variable_size_container, public Serializable {}; - - class PathHolder { - public: - PathHolder() = default; - explicit PathHolder(Path path); - - Path path; - }; - - class ValueHolder { - public: - ValueHolder() = default; - explicit ValueHolder(const std::vector& value); - - const std::vector& value() const; - void set_value(const std::vector& new_value); - - protected: - ssz::list value_; - }; - - class LeafNode : public NodeBase, public ValueHolder, public PathHolder { - public: - LeafNode() = default; - LeafNode(const Path& path, const std::vector& new_value); - - Bytes Encode() const override; - - SSZ_CONT(path, value_) - }; - - class ExtensionNode : public NodeBase, public PathHolder { - public: - ExtensionNode() = default; - ExtensionNode(const Path& path, const Reference& next); - - Bytes Encode() const override; - const Reference& get_next_ref() const; - - SSZ_CONT(path, next_ref_) - - private: - ssz::list next_ref_; - }; - - class BranchNode : public ValueHolder, public NodeBase { - public: - BranchNode() = default; - BranchNode(const std::array& refs, - const std::vector& value); - - Bytes Encode() const override; - std::array get_branches() const; - void ClearBranch(std::byte nibble); - void SetBranch(std::byte nibble, const std::vector& value); - - SSZ_CONT(branches_, value_) - - private: - ssz::list, kBranchesNum> branches_; - }; - - using Node = std::variant; - - Node DecodeNode(const Bytes& bytes); - - } // namespace mpt -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_NODE_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/path.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/path.hpp deleted file mode 100644 index d6de352c07..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/mpt/path.hpp +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_PATH_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_PATH_HPP_ - -#include -#include -#include -#include - -namespace core { - namespace mpt { - - class Path : public ssz::ssz_variable_size_container { - public: - Path(); - Path(const Path &other) = default; - Path(const std::vector &data, std::size_t offset = 0); - - int size() const; - bool empty() const; - std::byte operator[](size_t idx) const; - Path operator+(const Path &other) const; - bool operator==(const Path &other) const; - std::byte at(std::size_t idx) const; - - bool StartsWith(const Path &other) const; - Path *Consume(std::size_t amount); - Path CommonPrefix(const Path &other) const; - - // Methods used by sszpp. NO hash_tree_root METHOD PROVIDED - constexpr std::size_t ssz_size() const noexcept { return 1 + size() / 2; } - - constexpr void serialize(ssz::ssz_iterator auto result) const { - std::size_t nibblesLen = size(); - bool isOdd = (nibblesLen % 2 == 1); - - // If even size, we just insert empty byte at the beginning - auto prefix = std::byte{0x00}; - - // If odd, we put kOddFlag at the first nibble and the first element of Path after - // it, so we could insert by full bytes afterwards - if (isOdd) { - prefix = kOddFlag | at(0); - } - - std::copy(static_cast(static_cast(&prefix)), - static_cast(static_cast(&prefix)) + 1, - result); - ++result; - - for (std::size_t i = (isOdd ? 1 : 0); i < nibblesLen; i += 2) { - std::byte nextByte = (operator[](i) << 4) | operator[](i + 1); - std::copy( - static_cast(static_cast(&nextByte)), - static_cast(static_cast(&nextByte)) + 1, - result); - ++result; - } - } - - constexpr void deserialize(const std::ranges::sized_range auto &bytes) { - bool isOddLen = (bytes.front() & kOddFlag) == kOddFlag; - if (isOddLen) { - offset_ = 1; - } else { - offset_ = 2; - } - - data_.reserve(std::ranges::size(bytes)); - std::ranges::copy(bytes, std::back_inserter(data_)); - } - - private: - Path ConstructFromPrefix(std::size_t length) const; - - static constexpr std::byte kOddFlag = std::byte{0x10}; - std::vector data_; - std::size_t offset_ = 0; - }; - - } // namespace mpt -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_MPT_MPT_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/account.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/account.hpp deleted file mode 100644 index 48154f82a6..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/account.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_ACCOUNT_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_ACCOUNT_HPP_ - -#include -#include - -#include "ssz++.hpp" -#include "zkevm_framework/core/common.hpp" -#include "zkevm_framework/core/types/address.hpp" -#include "zkevm_framework/core/types/message.hpp" -#include "zkevm_framework/core/types/value.hpp" - -namespace core { - namespace types { - constexpr std::size_t PUBLIC_KEY_SIZE = 33; - - using PublicKey = std::array; - - struct SmartContract : ssz::ssz_container { - Address m_address; - bool m_initialised; - Value m_balance; - Hash m_currency_root; - Hash m_storage_root; - Hash m_code_hash; - Seqno m_seqno; - Seqno m_ext_seqno; - PublicKey m_public_key; - - SSZ_CONT(m_address, m_initialised, m_balance, m_currency_root, m_storage_root, - m_code_hash, m_seqno, m_ext_seqno, m_public_key) - }; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_ACCOUNT_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/address.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/address.hpp deleted file mode 100644 index 91705bcb6e..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/address.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_ADDRESS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_ADDRESS_HPP_ - -#include -#include -#include - -namespace core { - namespace types { - constexpr std::size_t ADDR_SIZE = 20; - - class Address : public std::array {}; - - constexpr Address EMPTY_ADDRESS = {std::byte{0x0}}; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_ADDRESS_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/block.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/block.hpp deleted file mode 100644 index a9eb06c0ff..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/block.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_BLOCK_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_BLOCK_HPP_ - -#include - -#include "zkevm_framework/core/common.hpp" -#include "zkevm_framework/core/types/bloom.hpp" -#include "zkevm_framework/core/types/message.hpp" - -namespace core { - namespace types { - using BlockNumber = std::uint64_t; - - struct Block : ssz::ssz_container { - BlockNumber m_id; - Hash m_prev_block; - Hash m_smart_contracts_root; - Hash m_in_messages_root; - Hash m_out_messages_root; - MessageIndex m_out_messages_num; - Hash m_receipts_root; - Hash m_child_blocks_root_hash; - Hash m_master_chain_hash; - Bloom m_logs_bloom; - std::uint64_t m_timestamp; - Value m_gasPrice; - - SSZ_CONT(m_id, m_prev_block, m_smart_contracts_root, m_in_messages_root, - m_out_messages_root, m_out_messages_num, m_receipts_root, - m_child_blocks_root_hash, m_master_chain_hash, m_logs_bloom, m_timestamp, - m_gasPrice) - }; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_BLOCK_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/bloom.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/bloom.hpp deleted file mode 100644 index 8621f8d43c..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/bloom.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_BLOOM_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_BLOOM_HPP_ - -#include -#include -#include - -namespace core { - namespace types { - constexpr std::size_t BLOOM_BYTE_LENGTH = 256; - - class Bloom : public std::array {}; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_BLOOM_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/code.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/code.hpp deleted file mode 100644 index dbfa89abbb..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/code.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_CODE_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_CODE_HPP_ - -#include "zkevm_framework/core/common.hpp" - -namespace core { - namespace types { - template - class Code : public Bytes {}; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_CODE_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/collator.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/collator.hpp deleted file mode 100644 index 73a5dffdc0..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/collator.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_COLLATOR_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_COLLATOR_HPP_ - -namespace core { - namespace types { - class Collator; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_COLLATOR_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/currency.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/currency.hpp deleted file mode 100644 index 2d24d212d3..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/currency.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_CURRENCY_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_CURRENCY_HPP_ - -#include "ssz++.hpp" -#include "zkevm_framework/core/common.hpp" -#include "zkevm_framework/core/types/value.hpp" - -namespace core { - namespace types { - using CurrencyId = Hash; - - struct CurrencyBalance : ssz::ssz_container { - CurrencyId m_currency; - Value m_balance; - - SSZ_CONT(m_currency, m_balance) - }; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_CURRENCY_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/gas.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/gas.hpp deleted file mode 100644 index 8813b89fa9..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/gas.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_GAS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_GAS_HPP_ - -#include - -namespace core { - namespace types { - using Gas = std::uint64_t; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_GAS_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/log.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/log.hpp deleted file mode 100644 index 4e06183705..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/log.hpp +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_LOG_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_LOG_HPP_ - -#include "ssz++.hpp" -#include "zkevm_framework/core/common.hpp" -#include "zkevm_framework/core/types/address.hpp" - -namespace core { - namespace types { - struct Log : ssz::ssz_variable_size_container { - Address m_address; - Hash m_topics; - Bytes<6000> m_data; - - SSZ_CONT(m_address, m_topics, m_data) - }; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_LOG_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/message.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/message.hpp deleted file mode 100644 index 3ea29bde5a..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/message.hpp +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_MESSAGE_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_MESSAGE_HPP_ - -#include -#include - -#include "zkevm_framework/core/types/address.hpp" -#include "zkevm_framework/core/types/code.hpp" -#include "zkevm_framework/core/types/currency.hpp" -#include "zkevm_framework/core/types/gas.hpp" -#include "zkevm_framework/core/types/signature.hpp" -#include "zkevm_framework/core/types/value.hpp" - -namespace core { - namespace types { - enum class MessageKind : std::uint8_t { - Internal, - Deploy, - Refund, - Bounce, - }; - - using Seqno = std::uint64_t; - - using MessageIndex = std::uint64_t; - - using ChainId = std::uint64_t; - - struct Message : ssz::ssz_variable_size_container { - std::bitset<8> m_flags; - ChainId m_chain_id; - Seqno m_seqno; - Value m_feeCredit; - Address m_from; - Address m_to; - Address m_refund_to; - Address m_bounce_to; - Value m_value; - ssz::list m_currency; - Code<24576> m_data; - Signature<256> m_signature; - - SSZ_CONT(m_flags, m_chain_id, m_seqno, m_feeCredit, m_from, m_to, m_refund_to, - m_bounce_to, m_value, m_currency, m_data, m_signature) - }; - - using MessageStatus = std::uint32_t; - - struct ExternalMessage : ssz::ssz_variable_size_container { - // Enums are not serializable in SSZ++ so we have to use integer type here. - // To get enum, use `kind()` method. - std::uint8_t m_kind; - Address m_to; - ChainId m_chain_id; - Seqno m_seqno; - Code<24576> m_data; - Signature<256> m_auth_data; - - SSZ_CONT(m_kind, m_to, m_chain_id, m_seqno, m_data, m_auth_data) - - MessageKind kind() const { return static_cast(m_kind); } - }; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_MESSAGE_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/messages.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/messages.hpp deleted file mode 100644 index b2359f4a40..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/messages.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_MESSAGES_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_MESSAGES_HPP_ - -namespace core { - namespace types { - class Messages; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_MESSAGES_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/receipt.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/receipt.hpp deleted file mode 100644 index 9ae08b26e6..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/receipt.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_RECEIPT_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_RECEIPT_HPP_ - -#include "ssz++.hpp" -#include "zkevm_framework/core/common.hpp" -#include "zkevm_framework/core/types/address.hpp" -#include "zkevm_framework/core/types/bloom.hpp" -#include "zkevm_framework/core/types/gas.hpp" -#include "zkevm_framework/core/types/log.hpp" -#include "zkevm_framework/core/types/message.hpp" - -namespace core { - namespace types { - struct Receipt : ssz::ssz_variable_size_container { - bool m_success; - MessageStatus m_status; - Gas m_gas_used; - Bloom m_bloom; - ssz::list m_logs; - std::uint32_t m_out_msg_index; - std::uint32_t m_out_msg_num; - Hash m_msg_hash; - Address m_contract_address; - - SSZ_CONT(m_success, m_status, m_gas_used, m_bloom, m_logs, m_out_msg_index, - m_out_msg_num, m_msg_hash, m_contract_address) - }; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_RECEIPT_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/shard.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/shard.hpp deleted file mode 100644 index aa33a08b25..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/shard.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_SHARD_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_SHARD_HPP_ - -namespace core { - namespace types { - class Shard; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_SHARD_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/signature.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/signature.hpp deleted file mode 100644 index c1e2a72be5..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/signature.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_SIGNATURE_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_SIGNATURE_HPP_ - -#include "zkevm_framework/core/common.hpp" - -namespace core { - namespace types { - template - class Signature : public Bytes {}; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_SIGNATURE_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/storage.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/storage.hpp deleted file mode 100644 index e40738f876..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/storage.hpp +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_STORAGE_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_STORAGE_HPP_ - -namespace core { - namespace types { - class Storage; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_STORAGE_HPP_ diff --git a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/value.hpp b/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/value.hpp deleted file mode 100644 index 23a61e18d3..0000000000 --- a/zkevm-framework/libs/nil_core/include/zkevm_framework/core/types/value.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_VALUE_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_VALUE_HPP_ - -#include "intx/intx.hpp" -#include "ssz++.hpp" - -namespace core { - namespace types { - struct Value : ssz::ssz_container { - intx::uint256 m_value; - - SSZ_CONT(m_value) - }; - } // namespace types -} // namespace core - -#endif // ZKEMV_FRAMEWORK_LIBS_NIL_CORE_INCLUDE_ZKEVM_FRAMEWORK_CORE_TYPES_VALUE_HPP_ diff --git a/zkevm-framework/libs/nil_core/src/CMakeLists.txt b/zkevm-framework/libs/nil_core/src/CMakeLists.txt deleted file mode 100644 index 9a6faef41a..0000000000 --- a/zkevm-framework/libs/nil_core/src/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -# SSZ++ can be compiled only with GCC 13+ -if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - message(FATAL_ERROR "Data types library can be built only with GCC 13+") -endif() -if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 13.0) - message(FATAL_ERROR "Data types library can be built only with GCC 13+") -endif() - -find_package(sszpp REQUIRED) - -set(SOURCES - mpt/mpt.cpp - mpt/node.cpp - mpt/path.cpp -) - -target_sources(${LIBRARY_NAME} PRIVATE ${SOURCES}) - -target_link_libraries(${LIBRARY_NAME} PRIVATE sszpp::sszpp) diff --git a/zkevm-framework/libs/nil_core/src/mpt/mpt.cpp b/zkevm-framework/libs/nil_core/src/mpt/mpt.cpp deleted file mode 100644 index d9cf9a9203..0000000000 --- a/zkevm-framework/libs/nil_core/src/mpt/mpt.cpp +++ /dev/null @@ -1,513 +0,0 @@ -#include "zkevm_framework/core/mpt/mpt.hpp" - -namespace core { - namespace mpt { - namespace details { - - template - struct overloaded : Ts... { - using Ts::operator()...; - }; - template - overloaded(Ts...) -> overloaded; - - class GetHandler { - public: - GetHandler(const MerklePatriciaTrie& mpt, Path& path) : mpt_(mpt), path_(path) {} - - std::optional> operator()(const LeafNode& leaf) const { - if (leaf.path == path_) { - return leaf.value(); - } - return std::nullopt; - } - - std::optional> operator()( - const ExtensionNode& extension_node) const { - if (path_.size() >= extension_node.path.size() && - path_.StartsWith(extension_node.path)) { - path_.Consume(extension_node.path.size()); - return mpt_.GetNode(extension_node.get_next_ref(), path_); - } - return std::nullopt; - } - - std::optional> operator()( - const BranchNode& branch_node) const { - if (path_.empty()) { - return branch_node.value(); - } - auto next = branch_node.get_branches()[std::to_integer(path_.at(0))]; - if (!next.empty()) { - path_.Consume(1); - return mpt_.GetNode(next, path_); - } - return std::nullopt; - } - - private: - const MerklePatriciaTrie& mpt_; - Path& path_; - }; - - class SetHandler { - public: - SetHandler(MerklePatriciaTrie& mpt, Path& path, const std::vector& value) - : mpt_(mpt), path_(path), value_(value) {} - - Reference operator()(const LeafNode& leaf) { - if (leaf.path == path_) { - return mpt_.PutToStorage(LeafNode{path_, value_}); - } - - auto commonPrefix = path_.CommonPrefix(leaf.path); - - path_.Consume(commonPrefix.size()); - auto leafPath = leaf.path; - leafPath.Consume(commonPrefix.size()); - - auto branchReference = CreateBranchNode(path_, value_, leafPath, leaf.value()); - - if (commonPrefix.size() != 0) { - return mpt_.PutToStorage(ExtensionNode{commonPrefix, branchReference}); - } - - return branchReference; - } - - Reference operator()(const ExtensionNode& extension_node) { - if (path_.StartsWith(extension_node.path)) { - path_.Consume(extension_node.path.size()); - auto newReference = - mpt_.SetNode(extension_node.get_next_ref(), path_, value_); - return mpt_.PutToStorage(ExtensionNode{extension_node.path, newReference}); - } - - auto commonPrefix = path_.CommonPrefix(extension_node.path); - - path_.Consume(commonPrefix.size()); - auto extensionPath = extension_node.path; - extensionPath.Consume(commonPrefix.size()); - - std::array branches{}; - std::vector branchValue; - if (path_.size() == 0) { - branchValue = value_; - } - - CreateBranchLeaf(path_, value_, branches); - CreateBranchExtension(extensionPath, extension_node.get_next_ref(), branches); - - auto branchReference = mpt_.PutToStorage(BranchNode{branches, branchValue}); - - if (commonPrefix.size() != 0) { - return mpt_.PutToStorage(ExtensionNode{commonPrefix, branchReference}); - } - return branchReference; - } - - Reference operator()(const BranchNode& branch_node) { - if (path_.size() == 0) { - return mpt_.PutToStorage(BranchNode{branch_node.get_branches(), value_}); - } - - auto nibble = path_.at(0); - path_.Consume(1); - auto newReference = - mpt_.SetNode(branch_node.get_branches()[std::to_integer(nibble)], - path_, value_); - - auto newBranches = branch_node.get_branches(); - newBranches[std::to_integer(nibble)] = newReference; - - return mpt_.PutToStorage(BranchNode{newBranches, branch_node.value()}); - } - - private: - // If path isn't empty, creates leaf node and stores reference in appropriate - // branch. - void CreateBranchLeaf(Path path, const std::vector& val, - std::array& branches) { - if (path.size() > 0) { - const auto nibble = path.at(0); - path.Consume(1); - auto leaf = mpt_.PutToStorage(LeafNode(path, val)); - branches[std::to_integer(nibble)] = leaf; - } - } - - Reference CreateBranchNode(const Path& lhsPath, - const std::vector& lhs_val, - const Path& rhsPath, - const std::vector& rhs_val) { - if (lhsPath.size() == 0 && rhsPath.size() == 0) { - throw std::runtime_error("invalid action"); - } - - std::array branches; - - std::vector val; - if (lhsPath.size() == 0) { - val = lhs_val; - } else if (rhsPath.size() == 0) { - val = rhs_val; - } - CreateBranchLeaf(lhsPath, lhs_val, branches); - CreateBranchLeaf(rhsPath, rhs_val, branches); - - return mpt_.PutToStorage(BranchNode(branches, val)); - } - - void CreateBranchExtension(Path path, const Reference& nextRef, - std::array& branches) { - if (path.size() == 0) { - throw std::runtime_error( - "Path for extension node should contain at least one nibble"); - } - - if (path.size() == 1) { - branches[std::to_integer(path.at(0))] = nextRef; - } else { - std::byte nibble = path.at(0); - - path.Consume(1); - - auto reference = mpt_.PutToStorage(ExtensionNode(path, nextRef)); - branches[std::to_integer(nibble)] = reference; - } - } - - MerklePatriciaTrie& mpt_; - Path& path_; - const std::vector& value_; - }; - - enum class DeleteAction { Unknown, Deleted, Updated, UselessBranch }; - - struct DeletionInfo { - Path path; - std::optional ref; - }; - - struct DeleteResult { - DeleteAction action; - std::optional info; - }; - - class DeleteHandler { - public: - DeleteHandler(MerklePatriciaTrie& mpt, const Path& path) : mpt_(mpt), path_(path) {} - - DeleteResult operator()(const LeafNode& leaf) { - if (path_ == leaf.path) { - return {DeleteAction::Deleted, std::nullopt}; - } - throw std::runtime_error("Key not found"); - } - - DeleteResult operator()(const ExtensionNode& extension_node) { - if (!path_.StartsWith(extension_node.path)) { - throw std::runtime_error("Key not found"); - } - - Path remaining_path = path_; - remaining_path.Consume(extension_node.path.size()); - auto result = mpt_.DeleteNode(extension_node.get_next_ref(), remaining_path); - - switch (result.action) { - case DeleteAction::Deleted: - return {DeleteAction::Deleted, std::nullopt}; - - case DeleteAction::Updated: - if (!result.info || !result.info->ref) { - throw std::runtime_error("Invalid update info"); - } - return { - DeleteAction::Updated, - DeletionInfo{{}, - mpt_.PutToStorage(ExtensionNode{ - extension_node.path, result.info->ref.value()})}}; - - case DeleteAction::UselessBranch: - if (!result.info || !result.info->ref) { - throw std::runtime_error("Invalid useless branch info"); - } - return handleUselessBranch(extension_node, result.info.value()); - - default: - throw std::runtime_error("Invalid action"); - } - } - - DeleteResult operator()(const BranchNode& branch_node) { - DeleteAction action; - std::optional info; - std::byte idx; - auto branch_copy = branch_node; - - if (path_.empty() && branch_node.value().empty()) { - throw std::runtime_error("Key not found"); - } else if (path_.empty() && !branch_node.value().empty()) { - branch_copy.set_value({}); - action = DeleteAction::Deleted; - } else { - idx = path_.at(0); - - if (branch_node.get_branches()[std::to_integer(idx)].empty()) { - throw std::runtime_error("Key not found"); - } - - Path remaining_path = path_; - remaining_path.Consume(1); - auto result = mpt_.DeleteNode( - branch_node.get_branches()[std::to_integer(idx)], - remaining_path); - action = result.action; - info = result.info; - } - - return HandleBranchDeleteResult(branch_copy, action, info, idx); - } - - private: - MerklePatriciaTrie& mpt_; - const Path& path_; - - DeleteResult handleUselessBranch(const ExtensionNode& extension_node, - const DeletionInfo& info) { - auto child_node = mpt_.GetFromStorage(info.ref.value()); - - return std::visit( - overloaded{[&](const LeafNode& leaf_child) -> DeleteResult { - auto new_path = extension_node.path + leaf_child.path; - return {DeleteAction::Updated, - DeletionInfo{{}, - mpt_.PutToStorage(LeafNode{ - new_path, leaf_child.value()})}}; - }, - [&](const ExtensionNode& extension_child) -> DeleteResult { - auto new_path = extension_node.path + extension_child.path; - return {DeleteAction::Updated, - DeletionInfo{ - {}, - mpt_.PutToStorage(ExtensionNode{ - new_path, extension_child.get_next_ref()})}}; - }, - [&](const BranchNode&) -> DeleteResult { - auto new_path = extension_node.path + info.path; - return {DeleteAction::Updated, - DeletionInfo{{}, - mpt_.PutToStorage(ExtensionNode{ - new_path, info.ref.value()})}}; - }}, - child_node); - } - - DeleteResult HandleBranchDeleteResult(const BranchNode& branch_node, - DeleteAction action, - const std::optional& info, - std::byte idx) { - switch (action) { - case DeleteAction::Deleted: - return HandleBranchDeletion(branch_node, idx); - - case DeleteAction::Updated: - case DeleteAction::UselessBranch: - if (info && info->ref) { - auto updated_branch = branch_node; - updated_branch.SetBranch(idx, info->ref.value()); - return {DeleteAction::Updated, - DeletionInfo{{}, mpt_.PutToStorage(updated_branch)}}; - } - throw std::runtime_error("Invalid update info"); - - default: - throw std::runtime_error("Invalid action"); - } - } - - DeleteResult HandleBranchDeletion(const BranchNode& branch_node, std::byte idx) { - auto branches = branch_node.get_branches(); - size_t valid_branches = - std::count_if(branches.begin(), branches.end(), - [](const Reference& ref) { return !ref.empty(); }); - - if (valid_branches == 0 && branch_node.value().empty()) { - return {DeleteAction::Deleted, std::nullopt}; - } else if (valid_branches == 0 && !branch_node.value().empty()) { - Path new_path; // Empty path - return {DeleteAction::UselessBranch, - DeletionInfo{new_path, mpt_.PutToStorage(LeafNode{ - new_path, branch_node.value()})}}; - } else if (valid_branches == 1 && branch_node.value().empty()) { - return BuildNewNodeFromLastBranch(branches); - } else { - auto updated_branch = branch_node; - updated_branch.ClearBranch(idx); - return {DeleteAction::Updated, - DeletionInfo{{}, mpt_.PutToStorage(updated_branch)}}; - } - } - - DeleteResult BuildNewNodeFromLastBranch( - const std::array& branches) { - // Find the index of the only stored branch. - auto it = std::find_if(branches.begin(), branches.end(), - [](const Reference& ref) { return !ref.empty(); }); - if (it == branches.end()) { - throw std::runtime_error("No valid branches found"); - } - - uint8_t idx = std::distance(branches.begin(), it); - - // Path in leaf will contain one nibble (at this step). - Path prefixNibble({std::byte{idx}}, 1); - auto child = mpt_.GetFromStorage(*it); - - return std::visit( - overloaded{ - [&](const LeafNode& leaf_child) -> DeleteResult { - auto path = prefixNibble + leaf_child.path; - return {DeleteAction::UselessBranch, - DeletionInfo{path, mpt_.PutToStorage(LeafNode{ - path, leaf_child.value()})}}; - }, - [&](const ExtensionNode& extension_child) -> DeleteResult { - auto path = prefixNibble + extension_child.path; - return { - DeleteAction::UselessBranch, - DeletionInfo{path, mpt_.PutToStorage(ExtensionNode{ - path, extension_child.get_next_ref()})}}; - }, - [&](const BranchNode&) -> DeleteResult { - return {DeleteAction::UselessBranch, - DeletionInfo{prefixNibble, mpt_.PutToStorage(ExtensionNode{ - prefixNibble, *it})}}; - }}, - child); - } - }; - } // namespace details - - // Crypto3 compiles so slow... Use this dummy hash for testing. - // Hash we are going to use is still willing to change anyway - std::array BasicHash(const std::vector& key) { - std::array result = {std::byte{0}}; - - for (size_t i = 0; i < key.size(); ++i) { - result[i % 64] ^= key[i]; - } - - for (size_t i = 0; i < 64; ++i) { - result[i] ^= result[(i + 1) % 64]; - result[i] = (result[i] << 1) | (result[i] >> 7); - } - - return result; - } - - MerklePatriciaTrie::MerklePatriciaTrie(){}; - - Path MerklePatriciaTrie::PathFromKey(const std::vector& key) { - std::vector hash_result; - if (key.size() > kMaxRawKeyLen) { - auto hash_array = BasicHash(key); - hash_result = std::vector(hash_array.begin(), hash_array.end()); - } else { - hash_result = key; - } - - return Path(hash_result); - } - - std::vector MerklePatriciaTrie::get(const std::vector& key) const { - if (root_.empty()) { - throw std::runtime_error("Not initialized MPT"); - } - - auto path = PathFromKey(key); - auto result = GetNode(root_, path); - - if (result) { - return *result; - } - throw std::runtime_error("Key not found"); - } - - std::optional> MerklePatriciaTrie::GetNode(const Reference& node_ref, - Path& path) const { - auto node = GetFromStorage(node_ref); - return std::visit(details::GetHandler(*this, path), node); - } - - void MerklePatriciaTrie::set(const std::vector& key, - const std::vector& value) { - auto path = PathFromKey(key); - root_ = SetNode(root_, path, value); - } - - void MerklePatriciaTrie::remove(const std::vector& key) { - if (root_.empty()) { - return; - } - - auto path = PathFromKey(key); - auto result = DeleteNode(root_, path); - - switch (result.action) { - case details::DeleteAction::Deleted: { - root_.clear(); - } - case details::DeleteAction::Updated: { - } - case details::DeleteAction::Unknown: { - root_ = *(result.info->ref); - return; - } - default: { - throw std::runtime_error("remove error"); - } - } - } - - details::DeleteResult MerklePatriciaTrie::DeleteNode(const Reference& node_ref, - const Path& path) { - auto node = GetFromStorage(node_ref); - return std::visit(details::DeleteHandler(*this, path), node); - } - - Node MerklePatriciaTrie::GetFromStorage(const Reference& ref) const { - if (ref.size() < 32) { - return DecodeNode(ref); - } - auto it = nodes_.find(ref); - if (it == nodes_.end()) { - throw std::runtime_error("Node not found"); - } - - return DecodeNode(it->second); - } - - Reference MerklePatriciaTrie::PutToStorage(const Node& node) { - Bytes encoded = std::visit([](const auto& n) { return n.Encode(); }, node); - if (encoded.size() < 32) { - return encoded; - } - auto key_arr = BasicHash(encoded); - Bytes key(key_arr.begin(), key_arr.end()); - nodes_[key] = encoded; - return key; - } - - Reference MerklePatriciaTrie::SetNode(const Reference& node_ref, Path& path, - const std::vector& value) { - if (node_ref.empty()) { - return PutToStorage(LeafNode{path, value}); - } - - auto node = GetFromStorage(node_ref); - return std::visit(details::SetHandler(*this, path, value), node); - } - - } // namespace mpt -} // namespace core diff --git a/zkevm-framework/libs/nil_core/src/mpt/node.cpp b/zkevm-framework/libs/nil_core/src/mpt/node.cpp deleted file mode 100644 index 05fbe382c6..0000000000 --- a/zkevm-framework/libs/nil_core/src/mpt/node.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "zkevm_framework/core/mpt/node.hpp" - -#include -#include - -namespace core { - namespace mpt { - - PathHolder::PathHolder(Path path) : path(std::move(path)) {} - - ValueHolder::ValueHolder(const std::vector& value) { set_value(value); } - - const std::vector& ValueHolder::value() const { return value_.data(); } - - void ValueHolder::set_value(const std::vector& new_value) { value_ = new_value; } - - LeafNode::LeafNode(const Path& path, const std::vector& new_value) - : PathHolder(path), ValueHolder(new_value) {} - - Bytes LeafNode::Encode() const { - auto serialized = std::vector(ssz_size() + 1); - serialized.front() = static_cast(NodeTypeFlag::kLeafNode); - ssz::serialize(serialized.begin() + 1, *this); - return serialized; - } - - ExtensionNode::ExtensionNode(const Path& path, const Reference& next) - : PathHolder(path), next_ref_(next) {} - - Bytes ExtensionNode::Encode() const { - auto serialized = std::vector(ssz_size() + 1); - serialized.front() = static_cast(NodeTypeFlag::kExtensionNode); - ssz::serialize(serialized.begin() + 1, *this); - return serialized; - } - - const Reference& ExtensionNode::get_next_ref() const { return next_ref_.data(); } - - BranchNode::BranchNode(const std::array& refs, - const std::vector& value) - : ValueHolder(value) { - for (const auto& branch : refs) { - branches_.push_back(branch); - } - } - - Bytes BranchNode::Encode() const { - auto serialized = std::vector(ssz_size() + 1); - serialized.front() = static_cast(NodeTypeFlag::kBranchNode); - ssz::serialize(serialized.begin() + 1, *this); - return serialized; - } - - std::array BranchNode::get_branches() const { - std::array arr; - const auto& branches_vec = branches_.data(); - for (std::size_t i = 0; i < branches_.size(); ++i) { - arr[i] = branches_vec[i].data(); - } - return arr; - } - - void BranchNode::ClearBranch(std::byte nibble) { - branches_[std::to_integer(nibble)].data().clear(); - } - - void BranchNode::SetBranch(std::byte nibble, const std::vector& value) { - branches_[std::to_integer(nibble)] = value; - } - - template - Node DeserializeNode(const std::span& bytes) { - return ssz::deserialize(bytes); - } - - Node DecodeNode(const Bytes& bytes) { - if (bytes.empty()) { - throw std::runtime_error("Empty byte array"); - } - - const auto type_flag = static_cast(bytes.front()); - std::span data_span(bytes.data() + 1, bytes.size() - 1); - - switch (type_flag) { - case NodeTypeFlag::kLeafNode: - return DeserializeNode(data_span); - case NodeTypeFlag::kExtensionNode: - return DeserializeNode(data_span); - case NodeTypeFlag::kBranchNode: - return DeserializeNode(data_span); - default: - throw std::runtime_error("Unknown node type"); - } - } - - } // namespace mpt -} // namespace core diff --git a/zkevm-framework/libs/nil_core/src/mpt/path.cpp b/zkevm-framework/libs/nil_core/src/mpt/path.cpp deleted file mode 100644 index 0b1e17b745..0000000000 --- a/zkevm-framework/libs/nil_core/src/mpt/path.cpp +++ /dev/null @@ -1,114 +0,0 @@ -#include "zkevm_framework/core/mpt/path.hpp" - -#include -#include - -namespace core { - namespace mpt { - - Path::Path() = default; - - Path::Path(const std::vector& data, std::size_t offset) - : data_(data), offset_(offset) {} - - int Path::size() const { return data_.size() * 2 - offset_; } - - bool Path::empty() const { return size() == 0; } - - std::byte Path::operator[](size_t idx) const { - idx += offset_; - auto target_byte = data_[idx / 2]; - return (idx % 2 == 0) ? (target_byte >> 4) : (target_byte & std::byte{0x0F}); - } - - bool Path::operator==(const Path& other) const { - if (other.size() != size()) { - return false; - } - for (int i = 0; i < size(); ++i) { - if (operator[](i) != other[i]) { - return false; - } - } - return true; - } - - std::byte Path::at(std::size_t idx) const { - if (idx >= size()) { - throw std::out_of_range("Index out of range"); - } - return operator[](idx); - } - - bool Path::StartsWith(const Path& other) const { - if (other.size() > size()) { - return false; - } - for (int i = 0; i < other.size(); ++i) { - if (operator[](i) != other[i]) { - return false; - } - } - return true; - } - - Path* Path::Consume(std::size_t amount) { - offset_ += amount; - return this; - } - - Path Path::CommonPrefix(const Path& other) const { - int least_len = std::min(size(), other.size()); - int common_len = 0; - for (int i = 0; i < least_len; ++i) { - if (operator[](i) != other[i]) { - break; - } - common_len += 1; - } - return ConstructFromPrefix(common_len); - } - - Path Path::operator+(const Path& other) const { - std::size_t final_size = size() + other.size(); - bool final_is_odd = (final_size % 2) == 1; - std::vector new_data; - new_data.reserve((final_size + 1) / 2); // Round up to nearest byte - - auto at_combined = [this, &other](std::size_t n) -> std::byte { - if (n < this->size()) { - return operator[](n); - } - return other[n - this->size()]; - }; - - if (final_is_odd) { - new_data.push_back(at_combined(0) & std::byte{0x0F}); - } - - for (std::size_t i = final_is_odd ? 1 : 0; i < final_size; i += 2) { - std::byte next_byte = - (at_combined(i) << 4) | (at_combined(i + 1) & std::byte{0x0F}); - new_data.push_back(next_byte); - } - - return Path(new_data, final_is_odd ? 1 : 0); - } - - Path Path::ConstructFromPrefix(std::size_t length) const { - std::vector new_data; - bool is_odd_len = length % 2 == 1; - std::size_t pos = 0; - if (is_odd_len) { - new_data.push_back(operator[](pos)); - pos += 1; - } - for (; pos < length; pos += 2) { - new_data.push_back((operator[](pos) << 4) | operator[](pos + 1)); - } - std::size_t new_offset = is_odd_len ? 1 : 0; - return Path(new_data, new_offset); - } - - } // namespace mpt -} // namespace core diff --git a/zkevm-framework/libs/output_artifacts/CMakeLists.txt b/zkevm-framework/libs/output_artifacts/CMakeLists.txt deleted file mode 100644 index bafd984fc4..0000000000 --- a/zkevm-framework/libs/output_artifacts/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -find_package(Boost COMPONENTS REQUIRED program_options regex) - -set(LIBRARY_NAME zkEVMOutputArtifacts) - -add_library(${LIBRARY_NAME} SHARED src/output_artifacts.cpp) - -target_compile_features(${LIBRARY_NAME} PUBLIC cxx_std_23) - -target_link_libraries(${LIBRARY_NAME} PUBLIC Boost::program_options crypto3::common evm-assigner PRIVATE Boost::regex) - -target_include_directories(${LIBRARY_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) - -install(TARGETS ${LIBRARY_NAME}) diff --git a/zkevm-framework/libs/output_artifacts/include/output_artifacts.hpp b/zkevm-framework/libs/output_artifacts/include/output_artifacts.hpp deleted file mode 100644 index 32c564cae0..0000000000 --- a/zkevm-framework/libs/output_artifacts/include/output_artifacts.hpp +++ /dev/null @@ -1,150 +0,0 @@ -/** - * @file output_artifacts.hpp - * - * @brief This file defines functions and types for writing output artifacts. - */ - -#ifndef ZKEMV_FRAMEWORK_LIBS_OUTPUT_ARTIFACTS_INCLUDE_OUTPUT_ARTIFACTS_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_OUTPUT_ARTIFACTS_INCLUDE_OUTPUT_ARTIFACTS_HPP_ - -#include -#include -#include -#include -#include -#include - -#include "boost/program_options.hpp" - -/** - * @brief Inclusive range of indexes: `[N-M]`. May be opened from both sides. If both bounds are not - * set (lower is 0), it is "full" range of all possible values. Range is considered to be not empty. - */ -struct Range { - /// @brief Lower bound. - std::size_t lower; - - /// @brief Upper bound. - std::optional upper; - - /// @brief Default constructor creates full range. - Range() : lower(0), upper(std::nullopt) {} - - /// @brief Constructor for single value range. - Range(std::size_t single_value) : lower(single_value), upper(single_value) {} - - /// @brief Constructor for both sides bounded range. - Range(std::size_t lower_, std::size_t upper_) : lower(lower_), upper(upper_) {} - - /// @brief Create new range with lower bound only. - static Range new_lower(std::size_t lower_); - - /// @brief Create new range with upper bound only. - static Range new_upper(std::size_t upper_); - - /** - * @brief Parse range from string. Regular expression for string is: `N|N-|-N|N-N`, where N is - * size_t. May return error as string if parse fails. Also fails if upper bound is less than - * lower bound. - */ - static std::expected parse(const std::string& s); - - /// @brief Get human-readable representation of range. Looks the same as parse() input. - std::string to_string() const; - - /** - * @brief Range with both bounds concretized to size_t: first is lower, second is upper. - * These ranges are also inclusive. - */ - using ConcreteRange = std::pair; - - /** - * @brief Concretize upper bound of the range using given max value. - * - * Unwraps upper bound from optional, if some, or sets it to max value. - * Returns error as string if current upper bound is greater than max value. - * Also returns error, if lower is greater than upper after concretization. - */ - std::expected concrete_range(int max) const; -}; - -/// @brief A number of ranges. -struct Ranges : std::vector { - /** - * @brief Parse a number of ranges from string. Regular expression for string is: - * `Range(,Range)*`. May return error as string if parse fails. - */ - static std::expected parse(const std::string& s); - - /// @brief Get human-readable representation of ranges. Looks the same as parse() input. - std::string to_string() const; - - /// @brief A number of concrete ranges. See Range::ConcreteRange for details. - using ConcreteRanges = std::vector; - - /** - * @brief Conretize upper bounds of all ranges with a single max value. - * See Range::concrete_range for details. - */ - std::expected concrete_ranges(int max) const; -}; - -/** - * @brief Description of output artifacts. Formed from CLI options. Basically some human-readable - * representations of assignment tables. - */ -struct OutputArtifacts { - /** - * @brief Base part of the filename of assignment tables. For each generated table its index - * will be appended at the end: `basename.N`. If equals to "-", then output to stdout. - */ - std::string basename; - - /// @brief Indices of the table to write. - std::vector tables; - - /// @brief Rows in every table to write. - Ranges rows; - - /// @brief Witness columns in every table to write. - Ranges witness_columns; - - /// @brief Public input columns in every table to write. - Ranges public_input_columns; - - /// @brief Constant columns in every table to write. - Ranges constant_columns; - - /// @brief Selector columns in every table to write. - Ranges selector_columns; - - /// @brief Default constructor creates no artifacts and stdout output. - OutputArtifacts() - : basename("-"), - tables({}), - rows({}), - witness_columns({}), - public_input_columns({}), - constant_columns({}), - selector_columns({}) {} - - /// @brief Whether write output into stdout or into file. - bool to_stdout() const { return basename == "-"; } - - std::string tables_to_string() const; - - /** - * @brief Parse table names from string. - */ - static std::expected, std::string> parse_tables( - const std::vector& s); - - /** - * @brief Parse program options and construct output artifacts description from it. - * May return error as string. Assumes that option `output-text` is set. - */ - static std::expected from_program_options( - boost::program_options::variables_map vm); -}; - -#endif // ZKEMV_FRAMEWORK_LIBS_OUTPUT_ARTIFACTS_INCLUDE_OUTPUT_ARTIFACTS_HPP_ diff --git a/zkevm-framework/libs/output_artifacts/src/output_artifacts.cpp b/zkevm-framework/libs/output_artifacts/src/output_artifacts.cpp deleted file mode 100644 index cbd2e3c9da..0000000000 --- a/zkevm-framework/libs/output_artifacts/src/output_artifacts.cpp +++ /dev/null @@ -1,200 +0,0 @@ -#include "output_artifacts.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "boost/algorithm/string.hpp" -#include "boost/program_options.hpp" -#include "boost/regex.hpp" - -Range Range::new_lower(std::size_t lower_) { - Range r; - r.lower = lower_; - return r; -} - -Range Range::new_upper(std::size_t upper_) { - Range r; - r.upper = upper_; - return r; -} - -std::expected Range::parse(const std::string& s) { - boost::smatch match_results; - if (boost::regex_match(s, match_results, boost::regex("^\\d+$"))) { - return Range(std::stoi(match_results.str())); - } else if (boost::regex_match(s, match_results, boost::regex("^(\\d+)-$"))) { - return Range::new_lower(std::stoi(match_results[1].str())); - } else if (boost::regex_match(s, match_results, boost::regex("^-(\\d+)$"))) { - return Range::new_upper(std::stoi(match_results[1].str())); - } else if (boost::regex_match(s, match_results, boost::regex("^(\\d+)-(\\d+)$"))) { - std::size_t lower = std::stoi(match_results[1].str()); - std::size_t upper = std::stoi(match_results[2].str()); - if (upper < lower) { - return std::unexpected(std::string("Upper index is less than lower index: ") + s); - } - return Range(lower, upper); - } - return std::unexpected(std::string("Bad index range: ") + s); -} - -std::string Range::to_string() const { - std::string res; - res += std::to_string(lower); - if (upper.has_value()) { - if (upper.value() != lower) { - res += "-"; - res += std::to_string(upper.value()); - } - } else { - res += "-"; - } - return res; -} - -std::expected Range::concrete_range(int max) const { - int upper_ = upper.value_or(max); - if (upper_ > max || upper_ < 0 || lower > upper_) { - return std::unexpected("index out of bounds"); - } - return std::make_pair(lower, upper_); -} - -std::expected Ranges::parse(const std::string& s) { - // TODO: this should probably be implemented cleaner, but I really struggled with - // repeated captures in Boost Regex and wasn't able to complete that approach - - std::stringstream ss(s); - std::string token; - Ranges ranges; - char delim = ','; - while (std::getline(ss, token, delim)) { - if (!token.empty()) { - auto maybe_range = Range::parse(token); - if (!maybe_range.has_value()) { - return std::unexpected(maybe_range.error()); - } - ranges.push_back(maybe_range.value()); - } - } - return ranges; -} - -std::string Ranges::to_string() const { - std::vector ranges; - for (const auto& range : *this) { - ranges.push_back(range.to_string()); - } - return boost::algorithm::join(ranges, ","); -} - -std::expected Ranges::concrete_ranges(int max) const { - ConcreteRanges ranges; - for (const auto& range : *this) { - auto maybe_concrete_range = range.concrete_range(max); - if (!maybe_concrete_range.has_value()) { - return std::unexpected(maybe_concrete_range.error()); - } - ranges.push_back(maybe_concrete_range.value()); - } - return ranges; -} - -/// @brief Map column type lable to its index in `parse_columns` return value. -const std::map col2idx{ - {"witness", 0}, {"public_input", 1}, {"constant", 2}, {"selector", 3}}; - -/// @brief Parse columns (order is witness, public input, constant, selector) options and also check -/// that there are duplicated ones. May return error as string if parse fails. -std::expected, std::string> parse_columns( - const std::vector& columns) { - std::array result = {Ranges(), Ranges(), Ranges(), Ranges()}; - - // Mask of completed column ranges: completed[i] is set to true if corresponding column range - // was parsed from input. Used to check whether there are duplicated columns. - std::array completed = {false, false, false, false}; - - for (const auto& column : columns) { - boost::regex pattern("^(witness|public_input|constant|selector)(.+)$"); - boost::smatch match_results; - if (boost::regex_match(column, match_results, pattern)) { - std::string column_type = match_results[1].str(); - std::size_t column_idx = col2idx.at(column_type); - if (completed[column_idx]) { - return std::unexpected(std::string("Duplicate columns option: " + column)); - } - auto maybe_ranges = Ranges::parse(match_results[2].str()); - if (!maybe_ranges.has_value()) { - return std::unexpected(maybe_ranges.error()); - } - result[column_idx] = maybe_ranges.value(); - completed[column_idx] = true; - } else { - return std::unexpected(std::string("Bad columns option: " + column)); - } - } - return result; -} - -std::string OutputArtifacts::tables_to_string() const { - std::string result; - for (const auto& table : tables) { - result += " " + std::to_string((int)table) + " "; - } - return result; -} - -std::expected, std::string> -OutputArtifacts::parse_tables(const std::vector& s) { - std::vector result; - for (const auto& table_name : s) { - auto it = nil::evm_assigner::zkevm_circuits_map.find(table_name); - if (it != nil::evm_assigner::zkevm_circuits_map.end()) { - result.push_back(it->second); - } else { - return std::unexpected(std::string("Unknown table name " + table_name)); - } - } - return result; -} - -std::expected OutputArtifacts::from_program_options( - boost::program_options::variables_map vm) { - OutputArtifacts artifacts; - artifacts.basename = vm["output-text"].as(); - - if (vm.count("tables")) { - auto maybe_tables = parse_tables(vm["tables"].as>()); - if (!maybe_tables.has_value()) { - return std::unexpected(maybe_tables.error()); - } - artifacts.tables = maybe_tables.value(); - } - - if (vm.count("rows")) { - auto maybe_rows = Ranges::parse(vm["rows"].as()); - if (!maybe_rows.has_value()) { - return std::unexpected(maybe_rows.error()); - } - artifacts.rows = maybe_rows.value(); - } - - if (vm.count("columns")) { - auto maybe_columns = parse_columns(vm["columns"].as>()); - if (!maybe_columns.has_value()) { - return std::unexpected(maybe_columns.error()); - } - artifacts.witness_columns = maybe_columns.value()[0]; - artifacts.public_input_columns = maybe_columns.value()[1]; - artifacts.constant_columns = maybe_columns.value()[2]; - artifacts.selector_columns = maybe_columns.value()[3]; - } - - return artifacts; -} diff --git a/zkevm-framework/libs/preset/CMakeLists.txt b/zkevm-framework/libs/preset/CMakeLists.txt deleted file mode 100644 index b88eb1b505..0000000000 --- a/zkevm-framework/libs/preset/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -add_library(zkEVMPreset INTERFACE) - -find_package(Boost COMPONENTS REQUIRED log) - -target_link_libraries(zkEVMPreset INTERFACE Boost::log evm-assigner) -target_include_directories(zkEVMPreset INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include) - -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/zkevm-framework/libs/preset/include/zkevm_framework/preset/add.hpp b/zkevm-framework/libs/preset/include/zkevm_framework/preset/add.hpp deleted file mode 100644 index a4378e6622..0000000000 --- a/zkevm-framework/libs/preset/include/zkevm_framework/preset/add.hpp +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_PRESET_ADD_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_PRESET_ADD_HPP_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -template -std::optional initialize_add_circuit( - nil::blueprint::circuit>& - add_circuit, - std::unordered_map>>& - assignments) { - // initialize assignment table - nil::crypto3::zk::snark::plonk_table_description desc(65, // witness - 1, // public - 35, // constants - 56 // selectors - ); - BOOST_LOG_TRIVIAL(debug) << "add table:\n" - << "witnesses = " << desc.witness_columns - << " public inputs = " << desc.public_input_columns - << " constants = " << desc.constant_columns - << " selectors = " << desc.selector_columns << "\n"; - using ArithmetizationType = - nil::crypto3::zk::snark::plonk_constraint_system; - - auto insert_it = assignments.insert(std::pair>( - nil::evm_assigner::zkevm_circuit::RW,// index = 0, just for experiment with add - nil::blueprint::assignment(desc))); - auto& add_table = insert_it.first->second; - - using component_type = - nil::blueprint::components::addition, - BlueprintFieldType, nil::blueprint::basic_non_native_policy>; - - // Prepare witness container to make an instance of the component - typename component_type::manifest_type m = component_type::get_manifest(); - size_t witness_amount = *(m.witness_amount->begin()); - std::vector witnesses(witness_amount); - std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... - - component_type component_instance = component_type( - witnesses, std::array{0}, std::array{0}); - - const auto& row_idx = add_table.public_input_column_size(0); - auto v0 = typename component_type::var(0, row_idx, false, component_type::var::column_type::public_input); - auto v1 = typename component_type::var(0, row_idx + 1, false, component_type::var::column_type::public_input); - typename component_type::input_type input = {v0, v1}; - - nil::blueprint::components::generate_circuit(component_instance, add_circuit, - add_table, input, 0); - - BOOST_LOG_TRIVIAL(debug) << "rows amount = " << add_table.rows_amount() << "\n"; - return {}; -} - -#endif // ZKEMV_FRAMEWORK_LIBS_PRESET_ADD_HPP_ diff --git a/zkevm-framework/libs/preset/include/zkevm_framework/preset/bytecode.hpp b/zkevm-framework/libs/preset/include/zkevm_framework/preset/bytecode.hpp deleted file mode 100644 index 7a3a78c743..0000000000 --- a/zkevm-framework/libs/preset/include/zkevm_framework/preset/bytecode.hpp +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_PRESET_BYTECODE_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_PRESET_BYTECODE_HPP_ - -#include -#include -#include -#include -#include -#include -#include -#include - -template -std::optional initialize_bytecode_circuit( - nil::blueprint::circuit>& - bytecode_circuit, - std::unordered_map>>& - assignments) { - // initialize assignment table - nil::crypto3::zk::snark::plonk_table_description desc(65, // witness - 1, // public - 5, // constants - 30 // selectors - ); - BOOST_LOG_TRIVIAL(debug) << "bytecode table:\n" - << "witnesses = " << desc.witness_columns - << " public inputs = " << desc.public_input_columns - << " constants = " << desc.constant_columns - << " selectors = " << desc.selector_columns << "\n"; - using ArithmetizationType = - nil::crypto3::zk::snark::plonk_constraint_system; - - auto insert_it = assignments.insert(std::pair>( - nil::evm_assigner::zkevm_circuit::BYTECODE, - nil::blueprint::assignment(desc))); - auto& bytecode_table = insert_it.first->second; - - using component_type = - nil::blueprint::components::zkevm_bytecode; - - // Prepare witness container to make an instance of the component - typename component_type::manifest_type m = component_type::get_manifest(); - size_t witness_amount = *(m.witness_amount->begin()); - std::vector witnesses(witness_amount); - std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... - - constexpr size_t max_code_size = 24576; - component_type component_instance = component_type( - witnesses, std::array{0}, std::array{0}, max_code_size); - - auto lookup_tables = component_instance.component_lookup_tables(); - for (auto& [k, v] : lookup_tables) { - bytecode_circuit.reserve_table(k); - } - - // TODO: pass a proper public input here - typename component_type::input_type input({}, {}, typename component_type::var()); - - nil::blueprint::components::generate_circuit(component_instance, bytecode_circuit, - bytecode_table, input, 0); - - nil::crypto3::zk::snark::pack_lookup_tables_horizontal( - bytecode_circuit.get_reserved_indices(), bytecode_circuit.get_reserved_tables(), - bytecode_circuit.get_reserved_dynamic_tables(), bytecode_circuit, bytecode_table, - bytecode_table.rows_amount(), 500000); - // TODO bytecode_table.rows_amount() = 0 here, it's correct?' - return {}; -} - -#endif // ZKEMV_FRAMEWORK_LIBS_PRESET_BYTECODE_HPP_ diff --git a/zkevm-framework/libs/preset/include/zkevm_framework/preset/preset.hpp b/zkevm-framework/libs/preset/include/zkevm_framework/preset/preset.hpp deleted file mode 100644 index 6b2b60168c..0000000000 --- a/zkevm-framework/libs/preset/include/zkevm_framework/preset/preset.hpp +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_PRESET_PRESET_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_PRESET_PRESET_HPP_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "zkevm_framework/preset/bytecode.hpp" -#include "zkevm_framework/preset/sha256.hpp" -#include "zkevm_framework/preset/add.hpp" - -template -struct zkevm_circuits { - std::vector m_default_names = {"bytecode"}; - std::vector m_names; - nil::blueprint::circuit m_bytecode_circuit; - nil::blueprint::circuit m_sha256_circuit; - nil::blueprint::circuit m_add_circuit; - const std::vector& get_circuit_names() const { - return m_names.size() > 0 ? m_names : m_default_names; - } - nil::evm_assigner::zkevm_circuit get_index(const std::string& name) const { - if (name == "bytecode" || name == "sha256") { - return nil::evm_assigner::zkevm_circuit::BYTECODE; - } else if (name == "add") { - return nil::evm_assigner::zkevm_circuit::RW; - }else { - return nil::evm_assigner::zkevm_circuit::BYTECODE;// TODO invalid index - } - } -}; - -template -std::optional initialize_circuits( - zkevm_circuits>& circuits, - std::unordered_map>>& - assignments) { - const auto& circuit_names = circuits.get_circuit_names(); - BOOST_LOG_TRIVIAL(debug) << "Number assignment tables = " << circuit_names.size() << "\n"; - for (const auto& circuit_name : circuit_names) { - BOOST_LOG_TRIVIAL(debug) << "Initialize circuit = " << circuit_name << "\n"; - if (circuit_name == "bytecode") { - auto err = initialize_bytecode_circuit(circuits.m_bytecode_circuit, assignments); - if (err) { - return err; - } - } else if (circuit_name == "sha256") { - auto err = initialize_sha256_circuit(circuits.m_sha256_circuit, assignments); - if (err) { - return err; - } - } else if (circuit_name == "add") { - auto err = initialize_add_circuit(circuits.m_add_circuit, assignments); - if (err) { - return err; - } - } - } - return {}; -} - -#endif // ZKEMV_FRAMEWORK_LIBS_PRESET_PRESET_HPP_ diff --git a/zkevm-framework/libs/preset/include/zkevm_framework/preset/sha256.hpp b/zkevm-framework/libs/preset/include/zkevm_framework/preset/sha256.hpp deleted file mode 100644 index 43d540fa98..0000000000 --- a/zkevm-framework/libs/preset/include/zkevm_framework/preset/sha256.hpp +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_PRESET_SHA256_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_PRESET_SHA256_HPP_ - -#include -#include -#include -#include -#include -#include -#include -#include - -template -std::optional initialize_sha256_circuit( - nil::blueprint::circuit>& - sha256_circuit, - std::unordered_map>>& - assignments) { - // initialize assignment table - nil::crypto3::zk::snark::plonk_table_description desc(65, // witness - 1, // public - 35, // constants - 56 // selectors - ); - BOOST_LOG_TRIVIAL(debug) << "sha256 table:\n" - << "witnesses = " << desc.witness_columns - << " public inputs = " << desc.public_input_columns - << " constants = " << desc.constant_columns - << " selectors = " << desc.selector_columns << "\n"; - using ArithmetizationType = - nil::crypto3::zk::snark::plonk_constraint_system; - - auto insert_it = assignments.insert(std::pair>( - nil::evm_assigner::zkevm_circuit::BYTECODE,// index = 0, just for experiment with sha256 - nil::blueprint::assignment(desc))); - auto& sha256_table = insert_it.first->second; - - using component_type = - nil::blueprint::components::sha256>; - - // Prepare witness container to make an instance of the component - typename component_type::manifest_type m = component_type::get_manifest(); - size_t witness_amount = *(m.witness_amount->begin()); - std::vector witnesses(witness_amount); - std::iota(witnesses.begin(), witnesses.end(), 0); // fill 0, 1, ... - - component_type component_instance = component_type( - witnesses, std::array{0}, std::array{0}); - - auto lookup_tables = component_instance.component_lookup_tables(); - for (auto& [k, v] : lookup_tables) { - sha256_circuit.reserve_table(k); - } - - constexpr const std::int32_t block_size = 2; - constexpr const std::int32_t input_blocks_amount = 2; - - const auto& row_idx = sha256_table.public_input_column_size(0); - std::array input_block_vars = { - typename component_type::var(0, row_idx, false, component_type::var::column_type::public_input), - typename component_type::var(0, row_idx + 1, false, component_type::var::column_type::public_input), - typename component_type::var(0, row_idx + 2, false, component_type::var::column_type::public_input), - typename component_type::var(0, row_idx + 3, false, component_type::var::column_type::public_input) - }; - typename component_type::input_type input = {input_block_vars}; - - nil::blueprint::components::generate_circuit(component_instance, sha256_circuit, - sha256_table, input, 0); - - nil::crypto3::zk::snark::pack_lookup_tables_horizontal( - sha256_circuit.get_reserved_indices(), sha256_circuit.get_reserved_tables(), - sha256_circuit.get_reserved_dynamic_tables(), sha256_circuit, sha256_table, - sha256_table.rows_amount(), 500000); - BOOST_LOG_TRIVIAL(debug) << "rows amount = " << sha256_table.rows_amount() << "\n"; - return {}; -} - -#endif // ZKEMV_FRAMEWORK_LIBS_PRESET_SHA256_HPP_ diff --git a/zkevm-framework/libs/rpc/CMakeLists.txt b/zkevm-framework/libs/rpc/CMakeLists.txt deleted file mode 100644 index 11132107c1..0000000000 --- a/zkevm-framework/libs/rpc/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -add_library(zkEVMRpc SHARED data_extractor.cpp) - -find_package(Boost COMPONENTS REQUIRED json log) -target_link_libraries(zkEVMRpc PUBLIC NilCore ${Boost_LIBRARIES} zkEVMJsonHelpers) -target_include_directories(zkEVMRpc PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include - PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/include) - -install(TARGETS zkEVMRpc - DESTINATION ${CMAKE_INSTALL_LIBDIR}) - -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) diff --git a/zkevm-framework/libs/rpc/data_extractor.cpp b/zkevm-framework/libs/rpc/data_extractor.cpp deleted file mode 100644 index 44b25f0748..0000000000 --- a/zkevm-framework/libs/rpc/data_extractor.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "zkevm_framework/rpc/data_extractor.hpp" - -#include - -#include -#include -#include - -std::optional data_extractor::get_block_with_messages( - const std::string& blockHash, std::stringstream& block_data) const { - httplib::Client cli(m_host, m_port); - httplib::Headers headers = {}; - std::string body = - "{\"id\":1,\"jsonrpc\":\"2.0\",\"method\":\"debug_getBlockByHash\",\"params\":["; - body += std::to_string(m_shard_id); - body += ",\"" + blockHash + "\",true]}"; - BOOST_LOG_TRIVIAL(debug) << body << "\n"; - if (auto res = cli.Post("/", headers, body.c_str(), body.size(), "application/json")) { - BOOST_LOG_TRIVIAL(debug) << res->body << "\n"; - - block_data << res->body; - return {}; - } else { - return "Response error code: " + httplib::to_string(res.error()); - } -} - -std::optional data_extractor::get_account_with_storage( - const std::string& address, const std::string& blockHash, - std::stringstream& account_data) const { - httplib::Client cli(m_host, m_port); - httplib::Headers headers = {}; - // get account proof and storage - std::string body = - "{\"id\":1,\"jsonrpc\":\"2.0\",\"method\":\"debug_getContract\",\"params\":["; - body += "\"" + address + "\""; - body += ",\"" + blockHash + "\"]}"; - BOOST_LOG_TRIVIAL(debug) << body << "\n"; - if (auto res = cli.Post("/", headers, body.c_str(), body.size(), "application/json")) { - BOOST_LOG_TRIVIAL(debug) << res->body << "\n"; - - account_data << res->body; - return {}; - } else { - return "Response error code: " + httplib::to_string(res.error()); - } -} diff --git a/zkevm-framework/libs/rpc/include/httplib.h b/zkevm-framework/libs/rpc/include/httplib.h deleted file mode 100644 index 62fbefbe2e..0000000000 --- a/zkevm-framework/libs/rpc/include/httplib.h +++ /dev/null @@ -1,9862 +0,0 @@ -// -// httplib.h -// -// Copyright (c) 2024 Yuji Hirose. All rights reserved. -// MIT License -// - -#ifndef ZKEMV_FRAMEWORK_LIBS_RPC_HTTPLIB_H -#define ZKEMV_FRAMEWORK_LIBS_RPC_HTTPLIB_H - -#define CPPHTTPLIB_VERSION "0.16.0" - -/* - * Configuration - */ - -#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND -#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_KEEPALIVE_MAX_COUNT -#define CPPHTTPLIB_KEEPALIVE_MAX_COUNT 5 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND 300 -#endif - -#ifndef CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND -#define CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_SECOND -#define CPPHTTPLIB_READ_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_READ_TIMEOUT_USECOND -#define CPPHTTPLIB_READ_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_SECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_SECOND 5 -#endif - -#ifndef CPPHTTPLIB_WRITE_TIMEOUT_USECOND -#define CPPHTTPLIB_WRITE_TIMEOUT_USECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_SECOND -#define CPPHTTPLIB_IDLE_INTERVAL_SECOND 0 -#endif - -#ifndef CPPHTTPLIB_IDLE_INTERVAL_USECOND -#ifdef _WIN32 -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 10000 -#else -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 0 -#endif -#endif - -#ifndef CPPHTTPLIB_REQUEST_URI_MAX_LENGTH -#define CPPHTTPLIB_REQUEST_URI_MAX_LENGTH 8192 -#endif - -#ifndef CPPHTTPLIB_HEADER_MAX_LENGTH -#define CPPHTTPLIB_HEADER_MAX_LENGTH 8192 -#endif - -#ifndef CPPHTTPLIB_REDIRECT_MAX_COUNT -#define CPPHTTPLIB_REDIRECT_MAX_COUNT 20 -#endif - -#ifndef CPPHTTPLIB_MULTIPART_FORM_DATA_FILE_MAX_COUNT -#define CPPHTTPLIB_MULTIPART_FORM_DATA_FILE_MAX_COUNT 1024 -#endif - -#ifndef CPPHTTPLIB_PAYLOAD_MAX_LENGTH -#define CPPHTTPLIB_PAYLOAD_MAX_LENGTH ((std::numeric_limits::max)()) -#endif - -#ifndef CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH -#define CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH 8192 -#endif - -#ifndef CPPHTTPLIB_RANGE_MAX_COUNT -#define CPPHTTPLIB_RANGE_MAX_COUNT 1024 -#endif - -#ifndef CPPHTTPLIB_TCP_NODELAY -#define CPPHTTPLIB_TCP_NODELAY false -#endif - -#ifndef CPPHTTPLIB_RECV_BUFSIZ -#define CPPHTTPLIB_RECV_BUFSIZ size_t(16384u) -#endif - -#ifndef CPPHTTPLIB_COMPRESSION_BUFSIZ -#define CPPHTTPLIB_COMPRESSION_BUFSIZ size_t(16384u) -#endif - -#ifndef CPPHTTPLIB_THREAD_POOL_COUNT -#define CPPHTTPLIB_THREAD_POOL_COUNT \ - ((std::max)(8u, std::thread::hardware_concurrency() > 0 \ - ? std::thread::hardware_concurrency() - 1 \ - : 0)) -#endif - -#ifndef CPPHTTPLIB_RECV_FLAGS -#define CPPHTTPLIB_RECV_FLAGS 0 -#endif - -#ifndef CPPHTTPLIB_SEND_FLAGS -#define CPPHTTPLIB_SEND_FLAGS 0 -#endif - -#ifndef CPPHTTPLIB_LISTEN_BACKLOG -#define CPPHTTPLIB_LISTEN_BACKLOG 5 -#endif - -/* - * Headers - */ - -#ifdef _WIN32 -#ifndef _CRT_SECURE_NO_WARNINGS -#define _CRT_SECURE_NO_WARNINGS -#endif //_CRT_SECURE_NO_WARNINGS - -#ifndef _CRT_NONSTDC_NO_DEPRECATE -#define _CRT_NONSTDC_NO_DEPRECATE -#endif //_CRT_NONSTDC_NO_DEPRECATE - -#if defined(_MSC_VER) -#if _MSC_VER < 1900 -#error Sorry, Visual Studio versions prior to 2015 are not supported -#endif - -#pragma comment(lib, "ws2_32.lib") - -#ifdef _WIN64 -using ssize_t = __int64; -#else -using ssize_t = long; -#endif -#endif // _MSC_VER - -#ifndef S_ISREG -#define S_ISREG(m) (((m) & S_IFREG) == S_IFREG) -#endif // S_ISREG - -#ifndef S_ISDIR -#define S_ISDIR(m) (((m) & S_IFDIR) == S_IFDIR) -#endif // S_ISDIR - -#ifndef NOMINMAX -#define NOMINMAX -#endif // NOMINMAX - -#include -#include -#include - -#ifndef WSA_FLAG_NO_HANDLE_INHERIT -#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 -#endif - -using socket_t = SOCKET; -#ifdef CPPHTTPLIB_USE_POLL -#define poll(fds, nfds, timeout) WSAPoll(fds, nfds, timeout) -#endif - -#else // not _WIN32 - -#include -#if !defined(_AIX) && !defined(__MVS__) -#include -#endif -#ifdef __MVS__ -#include -#ifndef NI_MAXHOST -#define NI_MAXHOST 1025 -#endif -#endif -#include -#include -#include -#ifdef __linux__ -#include -#endif -#include -#ifdef CPPHTTPLIB_USE_POLL -#include -#endif -#include -#include -#include -#include -#include -#include - -#include - -using socket_t = int; -#ifndef INVALID_SOCKET -#define INVALID_SOCKET (-1) -#endif -#endif //_WIN32 - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -#ifdef _WIN32 -#include - -// these are defined in wincrypt.h and it breaks compilation if BoringSSL is -// used -#undef X509_NAME -#undef X509_CERT_PAIR -#undef X509_EXTENSIONS -#undef PKCS7_SIGNER_INFO - -#ifdef _MSC_VER -#pragma comment(lib, "crypt32.lib") -#endif -#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && defined(__APPLE__) -#include -#if TARGET_OS_OSX -#include -#include -#endif // TARGET_OS_OSX -#endif // _WIN32 - -#include -#include -#include -#include - -#if defined(_WIN32) && defined(OPENSSL_USE_APPLINK) -#include -#endif - -#include -#include - -#if OPENSSL_VERSION_NUMBER < 0x30000000L -#error Sorry, OpenSSL versions prior to 3.0.0 are not supported -#endif - -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -#include -#endif - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT -#include -#include -#endif - -/* - * Declaration - */ -namespace httplib { - - namespace detail { - - /* - * Backport std::make_unique from C++14. - * - * NOTE: This code came up with the following stackoverflow post: - * https://stackoverflow.com/questions/10149840/c-arrays-and-make-unique - * - */ - - template - typename std::enable_if::value, std::unique_ptr>::type make_unique( - Args &&...args) { - return std::unique_ptr(new T(std::forward(args)...)); - } - - template - typename std::enable_if::value, std::unique_ptr>::type make_unique( - std::size_t n) { - typedef typename std::remove_extent::type RT; - return std::unique_ptr(new RT[n]); - } - - struct ci { - bool operator()(const std::string &s1, const std::string &s2) const { - return std::lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(), - [](unsigned char c1, unsigned char c2) { - return ::tolower(c1) < ::tolower(c2); - }); - } - }; - - // This is based on - // "http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4189". - - struct scope_exit { - explicit scope_exit(std::function &&f) - : exit_function(std::move(f)), execute_on_destruction{true} {} - - scope_exit(scope_exit &&rhs) noexcept - : exit_function(std::move(rhs.exit_function)), - execute_on_destruction{rhs.execute_on_destruction} { - rhs.release(); - } - - ~scope_exit() { - if (execute_on_destruction) { - this->exit_function(); - } - } - - void release() { this->execute_on_destruction = false; } - - private: - scope_exit(const scope_exit &) = delete; - void operator=(const scope_exit &) = delete; - scope_exit &operator=(scope_exit &&) = delete; - - std::function exit_function; - bool execute_on_destruction; - }; - - } // namespace detail - - enum StatusCode { - // Information responses - Continue_100 = 100, - SwitchingProtocol_101 = 101, - Processing_102 = 102, - EarlyHints_103 = 103, - - // Successful responses - OK_200 = 200, - Created_201 = 201, - Accepted_202 = 202, - NonAuthoritativeInformation_203 = 203, - NoContent_204 = 204, - ResetContent_205 = 205, - PartialContent_206 = 206, - MultiStatus_207 = 207, - AlreadyReported_208 = 208, - IMUsed_226 = 226, - - // Redirection messages - MultipleChoices_300 = 300, - MovedPermanently_301 = 301, - Found_302 = 302, - SeeOther_303 = 303, - NotModified_304 = 304, - UseProxy_305 = 305, - unused_306 = 306, - TemporaryRedirect_307 = 307, - PermanentRedirect_308 = 308, - - // Client error responses - BadRequest_400 = 400, - Unauthorized_401 = 401, - PaymentRequired_402 = 402, - Forbidden_403 = 403, - NotFound_404 = 404, - MethodNotAllowed_405 = 405, - NotAcceptable_406 = 406, - ProxyAuthenticationRequired_407 = 407, - RequestTimeout_408 = 408, - Conflict_409 = 409, - Gone_410 = 410, - LengthRequired_411 = 411, - PreconditionFailed_412 = 412, - PayloadTooLarge_413 = 413, - UriTooLong_414 = 414, - UnsupportedMediaType_415 = 415, - RangeNotSatisfiable_416 = 416, - ExpectationFailed_417 = 417, - ImATeapot_418 = 418, - MisdirectedRequest_421 = 421, - UnprocessableContent_422 = 422, - Locked_423 = 423, - FailedDependency_424 = 424, - TooEarly_425 = 425, - UpgradeRequired_426 = 426, - PreconditionRequired_428 = 428, - TooManyRequests_429 = 429, - RequestHeaderFieldsTooLarge_431 = 431, - UnavailableForLegalReasons_451 = 451, - - // Server error responses - InternalServerError_500 = 500, - NotImplemented_501 = 501, - BadGateway_502 = 502, - ServiceUnavailable_503 = 503, - GatewayTimeout_504 = 504, - HttpVersionNotSupported_505 = 505, - VariantAlsoNegotiates_506 = 506, - InsufficientStorage_507 = 507, - LoopDetected_508 = 508, - NotExtended_510 = 510, - NetworkAuthenticationRequired_511 = 511, - }; - - using Headers = std::multimap; - - using Params = std::multimap; - using Match = std::smatch; - - using Progress = std::function; - - struct Response; - using ResponseHandler = std::function; - - struct MultipartFormData { - std::string name; - std::string content; - std::string filename; - std::string content_type; - }; - using MultipartFormDataItems = std::vector; - using MultipartFormDataMap = std::multimap; - - class DataSink { - public: - DataSink() : os(&sb_), sb_(*this) {} - - DataSink(const DataSink &) = delete; - DataSink &operator=(const DataSink &) = delete; - DataSink(DataSink &&) = delete; - DataSink &operator=(DataSink &&) = delete; - - std::function write; - std::function is_writable; - std::function done; - std::function done_with_trailer; - std::ostream os; - - private: - class data_sink_streambuf final : public std::streambuf { - public: - explicit data_sink_streambuf(DataSink &sink) : sink_(sink) {} - - protected: - std::streamsize xsputn(const char *s, std::streamsize n) override { - sink_.write(s, static_cast(n)); - return n; - } - - private: - DataSink &sink_; - }; - - data_sink_streambuf sb_; - }; - - using ContentProvider = std::function; - - using ContentProviderWithoutLength = std::function; - - using ContentProviderResourceReleaser = std::function; - - struct MultipartFormDataProvider { - std::string name; - ContentProviderWithoutLength provider; - std::string filename; - std::string content_type; - }; - using MultipartFormDataProviderItems = std::vector; - - using ContentReceiverWithProgress = std::function; - - using ContentReceiver = std::function; - - using MultipartContentHeader = std::function; - - class ContentReader { - public: - using Reader = std::function; - using MultipartReader = - std::function; - - ContentReader(Reader reader, MultipartReader multipart_reader) - : reader_(std::move(reader)), multipart_reader_(std::move(multipart_reader)) {} - - bool operator()(MultipartContentHeader header, ContentReceiver receiver) const { - return multipart_reader_(std::move(header), std::move(receiver)); - } - - bool operator()(ContentReceiver receiver) const { return reader_(std::move(receiver)); } - - Reader reader_; - MultipartReader multipart_reader_; - }; - - using Range = std::pair; - using Ranges = std::vector; - - struct Request { - std::string method; - std::string path; - Headers headers; - std::string body; - - std::string remote_addr; - int remote_port = -1; - std::string local_addr; - int local_port = -1; - - // for server - std::string version; - std::string target; - Params params; - MultipartFormDataMap files; - Ranges ranges; - Match matches; - std::unordered_map path_params; - - // for client - ResponseHandler response_handler; - ContentReceiverWithProgress content_receiver; - Progress progress; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - const SSL *ssl = nullptr; -#endif - - bool has_header(const std::string &key) const; - std::string get_header_value(const std::string &key, size_t id = 0) const; - uint64_t get_header_value_u64(const std::string &key, size_t id = 0) const; - size_t get_header_value_count(const std::string &key) const; - void set_header(const std::string &key, const std::string &val); - - bool has_param(const std::string &key) const; - std::string get_param_value(const std::string &key, size_t id = 0) const; - size_t get_param_value_count(const std::string &key) const; - - bool is_multipart_form_data() const; - - bool has_file(const std::string &key) const; - MultipartFormData get_file_value(const std::string &key) const; - std::vector get_file_values(const std::string &key) const; - - // private members... - size_t redirect_count_ = CPPHTTPLIB_REDIRECT_MAX_COUNT; - size_t content_length_ = 0; - ContentProvider content_provider_; - bool is_chunked_content_provider_ = false; - size_t authorization_count_ = 0; - }; - - struct Response { - std::string version; - int status = -1; - std::string reason; - Headers headers; - std::string body; - std::string location; // Redirect location - - bool has_header(const std::string &key) const; - std::string get_header_value(const std::string &key, size_t id = 0) const; - uint64_t get_header_value_u64(const std::string &key, size_t id = 0) const; - size_t get_header_value_count(const std::string &key) const; - void set_header(const std::string &key, const std::string &val); - - void set_redirect(const std::string &url, int status = StatusCode::Found_302); - void set_content(const char *s, size_t n, const std::string &content_type); - void set_content(const std::string &s, const std::string &content_type); - void set_content(std::string &&s, const std::string &content_type); - - void set_content_provider(size_t length, const std::string &content_type, - ContentProvider provider, - ContentProviderResourceReleaser resource_releaser = nullptr); - - void set_content_provider(const std::string &content_type, - ContentProviderWithoutLength provider, - ContentProviderResourceReleaser resource_releaser = nullptr); - - void set_chunked_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, - ContentProviderResourceReleaser resource_releaser = nullptr); - - Response() = default; - Response(const Response &) = default; - Response &operator=(const Response &) = default; - Response(Response &&) = default; - Response &operator=(Response &&) = default; - ~Response() { - if (content_provider_resource_releaser_) { - content_provider_resource_releaser_(content_provider_success_); - } - } - - // private members... - size_t content_length_ = 0; - ContentProvider content_provider_; - ContentProviderResourceReleaser content_provider_resource_releaser_; - bool is_chunked_content_provider_ = false; - bool content_provider_success_ = false; - }; - - class Stream { - public: - virtual ~Stream() = default; - - virtual bool is_readable() const = 0; - virtual bool is_writable() const = 0; - - virtual ssize_t read(char *ptr, size_t size) = 0; - virtual ssize_t write(const char *ptr, size_t size) = 0; - virtual void get_remote_ip_and_port(std::string &ip, int &port) const = 0; - virtual void get_local_ip_and_port(std::string &ip, int &port) const = 0; - virtual socket_t socket() const = 0; - - template - ssize_t write_format(const char *fmt, const Args &...args); - ssize_t write(const char *ptr); - ssize_t write(const std::string &s); - }; - - class TaskQueue { - public: - TaskQueue() = default; - virtual ~TaskQueue() = default; - - virtual bool enqueue(std::function fn) = 0; - virtual void shutdown() = 0; - - virtual void on_idle() {} - }; - - class ThreadPool final : public TaskQueue { - public: - explicit ThreadPool(size_t n, size_t mqr = 0) - : shutdown_(false), max_queued_requests_(mqr) { - while (n) { - threads_.emplace_back(worker(*this)); - n--; - } - } - - ThreadPool(const ThreadPool &) = delete; - ~ThreadPool() override = default; - - bool enqueue(std::function fn) override { - { - std::unique_lock lock(mutex_); - if (max_queued_requests_ > 0 && jobs_.size() >= max_queued_requests_) { - return false; - } - jobs_.push_back(std::move(fn)); - } - - cond_.notify_one(); - return true; - } - - void shutdown() override { - // Stop all worker threads... - { - std::unique_lock lock(mutex_); - shutdown_ = true; - } - - cond_.notify_all(); - - // Join... - for (auto &t : threads_) { - t.join(); - } - } - - private: - struct worker { - explicit worker(ThreadPool &pool) : pool_(pool) {} - - void operator()() { - for (;;) { - std::function fn; - { - std::unique_lock lock(pool_.mutex_); - - pool_.cond_.wait(lock, - [&] { return !pool_.jobs_.empty() || pool_.shutdown_; }); - - if (pool_.shutdown_ && pool_.jobs_.empty()) { - break; - } - - fn = pool_.jobs_.front(); - pool_.jobs_.pop_front(); - } - - assert(true == static_cast(fn)); - fn(); - } - } - - ThreadPool &pool_; - }; - friend struct worker; - - std::vector threads_; - std::list> jobs_; - - bool shutdown_; - size_t max_queued_requests_ = 0; - - std::condition_variable cond_; - std::mutex mutex_; - }; - - using Logger = std::function; - - using SocketOptions = std::function; - - void default_socket_options(socket_t sock); - - const char *status_message(int status); - - std::string get_bearer_token_auth(const Request &req); - - namespace detail { - - class MatcherBase { - public: - virtual ~MatcherBase() = default; - - // Match request path and populate its matches and - virtual bool match(Request &request) const = 0; - }; - - /** - * Captures parameters in request path and stores them in Request::path_params - * - * Capture name is a substring of a pattern from : to /. - * The rest of the pattern is matched agains the request path directly - * Parameters are captured starting from the next character after - * the end of the last matched static pattern fragment until the next /. - * - * Example pattern: - * "/path/fragments/:capture/more/fragments/:second_capture" - * Static fragments: - * "/path/fragments/", "more/fragments/" - * - * Given the following request path: - * "/path/fragments/:1/more/fragments/:2" - * the resulting capture will be - * {{"capture", "1"}, {"second_capture", "2"}} - */ - class PathParamsMatcher final : public MatcherBase { - public: - PathParamsMatcher(const std::string &pattern); - - bool match(Request &request) const override; - - private: - static constexpr char marker = ':'; - // Treat segment separators as the end of path parameter capture - // Does not need to handle query parameters as they are parsed before path - // matching - static constexpr char separator = '/'; - - // Contains static path fragments to match against, excluding the '/' after - // path params - // Fragments are separated by path params - std::vector static_fragments_; - // Stores the names of the path parameters to be used as keys in the - // Request::path_params map - std::vector param_names_; - }; - - /** - * Performs std::regex_match on request path - * and stores the result in Request::matches - * - * Note that regex match is performed directly on the whole request. - * This means that wildcard patterns may match multiple path segments with /: - * "/begin/(.*)/end" will match both "/begin/middle/end" and "/begin/1/2/end". - */ - class RegexMatcher final : public MatcherBase { - public: - RegexMatcher(const std::string &pattern) : regex_(pattern) {} - - bool match(Request &request) const override; - - private: - std::regex regex_; - }; - - ssize_t write_headers(Stream &strm, const Headers &headers); - - } // namespace detail - - class Server { - public: - using Handler = std::function; - - using ExceptionHandler = - std::function; - - enum class HandlerResponse { - Handled, - Unhandled, - }; - using HandlerWithResponse = std::function; - - using HandlerWithContentReader = - std::function; - - using Expect100ContinueHandler = std::function; - - Server(); - - virtual ~Server(); - - virtual bool is_valid() const; - - Server &Get(const std::string &pattern, Handler handler); - Server &Post(const std::string &pattern, Handler handler); - Server &Post(const std::string &pattern, HandlerWithContentReader handler); - Server &Put(const std::string &pattern, Handler handler); - Server &Put(const std::string &pattern, HandlerWithContentReader handler); - Server &Patch(const std::string &pattern, Handler handler); - Server &Patch(const std::string &pattern, HandlerWithContentReader handler); - Server &Delete(const std::string &pattern, Handler handler); - Server &Delete(const std::string &pattern, HandlerWithContentReader handler); - Server &Options(const std::string &pattern, Handler handler); - - bool set_base_dir(const std::string &dir, const std::string &mount_point = std::string()); - bool set_mount_point(const std::string &mount_point, const std::string &dir, - Headers headers = Headers()); - bool remove_mount_point(const std::string &mount_point); - Server &set_file_extension_and_mimetype_mapping(const std::string &ext, - const std::string &mime); - Server &set_default_file_mimetype(const std::string &mime); - Server &set_file_request_handler(Handler handler); - - template - Server &set_error_handler(ErrorHandlerFunc &&handler) { - return set_error_handler_core( - std::forward(handler), - std::is_convertible{}); - } - - Server &set_exception_handler(ExceptionHandler handler); - Server &set_pre_routing_handler(HandlerWithResponse handler); - Server &set_post_routing_handler(Handler handler); - - Server &set_expect_100_continue_handler(Expect100ContinueHandler handler); - Server &set_logger(Logger logger); - - Server &set_address_family(int family); - Server &set_tcp_nodelay(bool on); - Server &set_socket_options(SocketOptions socket_options); - - Server &set_default_headers(Headers headers); - Server &set_header_writer(std::function const &writer); - - Server &set_keep_alive_max_count(size_t count); - Server &set_keep_alive_timeout(time_t sec); - - Server &set_read_timeout(time_t sec, time_t usec = 0); - template - Server &set_read_timeout(const std::chrono::duration &duration); - - Server &set_write_timeout(time_t sec, time_t usec = 0); - template - Server &set_write_timeout(const std::chrono::duration &duration); - - Server &set_idle_interval(time_t sec, time_t usec = 0); - template - Server &set_idle_interval(const std::chrono::duration &duration); - - Server &set_payload_max_length(size_t length); - - bool bind_to_port(const std::string &host, int port, int socket_flags = 0); - int bind_to_any_port(const std::string &host, int socket_flags = 0); - bool listen_after_bind(); - - bool listen(const std::string &host, int port, int socket_flags = 0); - - bool is_running() const; - void wait_until_ready() const; - void stop(); - - std::function new_task_queue; - - protected: - bool process_request(Stream &strm, bool close_connection, bool &connection_closed, - const std::function &setup_request); - - std::atomic svr_sock_{INVALID_SOCKET}; - size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; - time_t keep_alive_timeout_sec_ = CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - time_t idle_interval_sec_ = CPPHTTPLIB_IDLE_INTERVAL_SECOND; - time_t idle_interval_usec_ = CPPHTTPLIB_IDLE_INTERVAL_USECOND; - size_t payload_max_length_ = CPPHTTPLIB_PAYLOAD_MAX_LENGTH; - - private: - using Handlers = std::vector, Handler>>; - using HandlersForContentReader = - std::vector, HandlerWithContentReader>>; - - static std::unique_ptr make_matcher(const std::string &pattern); - - Server &set_error_handler_core(HandlerWithResponse handler, std::true_type); - Server &set_error_handler_core(Handler handler, std::false_type); - - socket_t create_server_socket(const std::string &host, int port, int socket_flags, - SocketOptions socket_options) const; - int bind_internal(const std::string &host, int port, int socket_flags); - bool listen_internal(); - - bool routing(Request &req, Response &res, Stream &strm); - bool handle_file_request(const Request &req, Response &res, bool head = false); - bool dispatch_request(Request &req, Response &res, const Handlers &handlers) const; - bool dispatch_request_for_content_reader(Request &req, Response &res, - ContentReader content_reader, - const HandlersForContentReader &handlers) const; - - bool parse_request_line(const char *s, Request &req) const; - void apply_ranges(const Request &req, Response &res, std::string &content_type, - std::string &boundary) const; - bool write_response(Stream &strm, bool close_connection, Request &req, Response &res); - bool write_response_with_content(Stream &strm, bool close_connection, const Request &req, - Response &res); - bool write_response_core(Stream &strm, bool close_connection, const Request &req, - Response &res, bool need_apply_ranges); - bool write_content_with_provider(Stream &strm, const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type); - bool read_content(Stream &strm, Request &req, Response &res); - bool read_content_with_content_receiver(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver); - bool read_content_core(Stream &strm, Request &req, Response &res, ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver) const; - - virtual bool process_and_close_socket(socket_t sock); - - std::atomic is_running_{false}; - std::atomic done_{false}; - - struct MountPointEntry { - std::string mount_point; - std::string base_dir; - Headers headers; - }; - std::vector base_dirs_; - std::map file_extension_and_mimetype_map_; - std::string default_file_mimetype_ = "application/octet-stream"; - Handler file_request_handler_; - - Handlers get_handlers_; - Handlers post_handlers_; - HandlersForContentReader post_handlers_for_content_reader_; - Handlers put_handlers_; - HandlersForContentReader put_handlers_for_content_reader_; - Handlers patch_handlers_; - HandlersForContentReader patch_handlers_for_content_reader_; - Handlers delete_handlers_; - HandlersForContentReader delete_handlers_for_content_reader_; - Handlers options_handlers_; - - HandlerWithResponse error_handler_; - ExceptionHandler exception_handler_; - HandlerWithResponse pre_routing_handler_; - Handler post_routing_handler_; - Expect100ContinueHandler expect_100_continue_handler_; - - Logger logger_; - - int address_family_ = AF_UNSPEC; - bool tcp_nodelay_ = CPPHTTPLIB_TCP_NODELAY; - SocketOptions socket_options_ = default_socket_options; - - Headers default_headers_; - std::function header_writer_ = detail::write_headers; - }; - - enum class Error { - Success = 0, - Unknown, - Connection, - BindIPAddress, - Read, - Write, - ExceedRedirectCount, - Canceled, - SSLConnection, - SSLLoadingCerts, - SSLServerVerification, - UnsupportedMultipartBoundaryChars, - Compression, - ConnectionTimeout, - ProxyConnection, - - // For internal use only - SSLPeerCouldBeClosed_, - }; - - std::string to_string(Error error); - - std::ostream &operator<<(std::ostream &os, const Error &obj); - - class Result { - public: - Result() = default; - Result(std::unique_ptr &&res, Error err, Headers &&request_headers = Headers{}) - : res_(std::move(res)), err_(err), request_headers_(std::move(request_headers)) {} - // Response - operator bool() const { return res_ != nullptr; } - bool operator==(std::nullptr_t) const { return res_ == nullptr; } - bool operator!=(std::nullptr_t) const { return res_ != nullptr; } - const Response &value() const { return *res_; } - Response &value() { return *res_; } - const Response &operator*() const { return *res_; } - Response &operator*() { return *res_; } - const Response *operator->() const { return res_.get(); } - Response *operator->() { return res_.get(); } - - // Error - Error error() const { return err_; } - - // Request Headers - bool has_request_header(const std::string &key) const; - std::string get_request_header_value(const std::string &key, size_t id = 0) const; - uint64_t get_request_header_value_u64(const std::string &key, size_t id = 0) const; - size_t get_request_header_value_count(const std::string &key) const; - - private: - std::unique_ptr res_; - Error err_ = Error::Unknown; - Headers request_headers_; - }; - - class ClientImpl { - public: - explicit ClientImpl(const std::string &host); - - explicit ClientImpl(const std::string &host, int port); - - explicit ClientImpl(const std::string &host, int port, const std::string &client_cert_path, - const std::string &client_key_path); - - virtual ~ClientImpl(); - - virtual bool is_valid() const; - - Result Get(const std::string &path); - Result Get(const std::string &path, const Headers &headers); - Result Get(const std::string &path, Progress progress); - Result Get(const std::string &path, const Headers &headers, Progress progress); - Result Get(const std::string &path, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver); - Result Get(const std::string &path, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver); - Result Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress); - - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, - Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, - ContentReceiver content_receiver, Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress = nullptr); - - Result Head(const std::string &path); - Result Head(const std::string &path, const Headers &headers); - - Result Post(const std::string &path); - Result Post(const std::string &path, const Headers &headers); - Result Post(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Post(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - Result Post(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Post(const std::string &path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, const std::string &content_type); - Result Post(const std::string &path, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, const Params ¶ms, - Progress progress); - Result Post(const std::string &path, const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items); - - Result Put(const std::string &path); - Result Put(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Put(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - Result Put(const std::string &path, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Put(const std::string &path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, const std::string &content_type); - Result Put(const std::string &path, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, const Params ¶ms, - Progress progress); - Result Put(const std::string &path, const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items); - - Result Patch(const std::string &path); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Patch(const std::string &path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type); - - Result Delete(const std::string &path); - Result Delete(const std::string &path, const Headers &headers); - Result Delete(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Delete(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - - Result Options(const std::string &path); - Result Options(const std::string &path, const Headers &headers); - - bool send(Request &req, Response &res, Error &error); - Result send(const Request &req); - - void stop(); - - std::string host() const; - int port() const; - - size_t is_socket_open() const; - socket_t socket() const; - - void set_hostname_addr_map(std::map addr_map); - - void set_default_headers(Headers headers); - - void set_header_writer(std::function const &writer); - - void set_address_family(int family); - void set_tcp_nodelay(bool on); - void set_socket_options(SocketOptions socket_options); - - void set_connection_timeout(time_t sec, time_t usec = 0); - template - void set_connection_timeout(const std::chrono::duration &duration); - - void set_read_timeout(time_t sec, time_t usec = 0); - template - void set_read_timeout(const std::chrono::duration &duration); - - void set_write_timeout(time_t sec, time_t usec = 0); - template - void set_write_timeout(const std::chrono::duration &duration); - - void set_basic_auth(const std::string &username, const std::string &password); - void set_bearer_token_auth(const std::string &token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const std::string &username, const std::string &password); -#endif - - void set_keep_alive(bool on); - void set_follow_location(bool on); - - void set_url_encode(bool on); - - void set_compress(bool on); - - void set_decompress(bool on); - - void set_interface(const std::string &intf); - - void set_proxy(const std::string &host, int port); - void set_proxy_basic_auth(const std::string &username, const std::string &password); - void set_proxy_bearer_token_auth(const std::string &token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const std::string &username, const std::string &password); -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path = std::string()); - void set_ca_cert_store(X509_STORE *ca_cert_store); - X509_STORE *create_ca_cert_store(const char *ca_cert, std::size_t size) const; -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void enable_server_certificate_verification(bool enabled); -#endif - - void set_logger(Logger logger); - - protected: - struct Socket { - socket_t sock = INVALID_SOCKET; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - SSL *ssl = nullptr; -#endif - - bool is_open() const { return sock != INVALID_SOCKET; } - }; - - virtual bool create_and_connect_socket(Socket &socket, Error &error); - - // All of: - // shutdown_ssl - // shutdown_socket - // close_socket - // should ONLY be called when socket_mutex_ is locked. - // Also, shutdown_ssl and close_socket should also NOT be called concurrently - // with a DIFFERENT thread sending requests using that socket. - virtual void shutdown_ssl(Socket &socket, bool shutdown_gracefully); - void shutdown_socket(Socket &socket) const; - void close_socket(Socket &socket); - - bool process_request(Stream &strm, Request &req, Response &res, bool close_connection, - Error &error); - - bool write_content_with_provider(Stream &strm, const Request &req, Error &error) const; - - void copy_settings(const ClientImpl &rhs); - - // Socket endpoint information - const std::string host_; - const int port_; - const std::string host_and_port_; - - // Current open socket - Socket socket_; - mutable std::mutex socket_mutex_; - std::recursive_mutex request_mutex_; - - // These are all protected under socket_mutex - size_t socket_requests_in_flight_ = 0; - std::thread::id socket_requests_are_from_thread_ = std::thread::id(); - bool socket_should_be_closed_when_request_is_done_ = false; - - // Hostname-IP map - std::map addr_map_; - - // Default headers - Headers default_headers_; - - // Header writer - std::function header_writer_ = detail::write_headers; - - // Settings - std::string client_cert_path_; - std::string client_key_path_; - - time_t connection_timeout_sec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_SECOND; - time_t connection_timeout_usec_ = CPPHTTPLIB_CONNECTION_TIMEOUT_USECOND; - time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; - time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; - time_t write_timeout_sec_ = CPPHTTPLIB_WRITE_TIMEOUT_SECOND; - time_t write_timeout_usec_ = CPPHTTPLIB_WRITE_TIMEOUT_USECOND; - - std::string basic_auth_username_; - std::string basic_auth_password_; - std::string bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string digest_auth_username_; - std::string digest_auth_password_; -#endif - - bool keep_alive_ = false; - bool follow_location_ = false; - - bool url_encode_ = true; - - int address_family_ = AF_UNSPEC; - bool tcp_nodelay_ = CPPHTTPLIB_TCP_NODELAY; - SocketOptions socket_options_ = nullptr; - - bool compress_ = false; - bool decompress_ = true; - - std::string interface_; - - std::string proxy_host_; - int proxy_port_ = -1; - - std::string proxy_basic_auth_username_; - std::string proxy_basic_auth_password_; - std::string proxy_bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string proxy_digest_auth_username_; - std::string proxy_digest_auth_password_; -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - std::string ca_cert_file_path_; - std::string ca_cert_dir_path_; - - X509_STORE *ca_cert_store_ = nullptr; -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - bool server_certificate_verification_ = true; -#endif - - Logger logger_; - - private: - bool send_(Request &req, Response &res, Error &error); - Result send_(Request &&req); - - socket_t create_client_socket(Error &error) const; - bool read_response_line(Stream &strm, const Request &req, Response &res) const; - bool write_request(Stream &strm, Request &req, bool close_connection, Error &error); - bool redirect(Request &req, Response &res, Error &error); - bool handle_request(Stream &strm, Request &req, Response &res, bool close_connection, - Error &error); - std::unique_ptr send_with_content_provider( - Request &req, const char *body, size_t content_length, ContentProvider content_provider, - ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Error &error); - Result send_with_content_provider( - const std::string &method, const std::string &path, const Headers &headers, - const char *body, size_t content_length, ContentProvider content_provider, - ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Progress progress); - ContentProviderWithoutLength get_multipart_content_provider( - const std::string &boundary, const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items) const; - - std::string adjust_host_string(const std::string &host) const; - - virtual bool process_socket(const Socket &socket, - std::function callback); - virtual bool is_ssl() const; - }; - - class Client { - public: - // Universal interface - explicit Client(const std::string &scheme_host_port); - - explicit Client(const std::string &scheme_host_port, const std::string &client_cert_path, - const std::string &client_key_path); - - // HTTP only interface - explicit Client(const std::string &host, int port); - - explicit Client(const std::string &host, int port, const std::string &client_cert_path, - const std::string &client_key_path); - - Client(Client &&) = default; - - ~Client(); - - bool is_valid() const; - - Result Get(const std::string &path); - Result Get(const std::string &path, const Headers &headers); - Result Get(const std::string &path, Progress progress); - Result Get(const std::string &path, const Headers &headers, Progress progress); - Result Get(const std::string &path, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver); - Result Get(const std::string &path, ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver, Progress progress); - Result Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver); - Result Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress); - Result Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress); - - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, - Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, - ContentReceiver content_receiver, Progress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress = nullptr); - - Result Head(const std::string &path); - Result Head(const std::string &path, const Headers &headers); - - Result Post(const std::string &path); - Result Post(const std::string &path, const Headers &headers); - Result Post(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type); - Result Post(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Post(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - Result Post(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Post(const std::string &path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Post(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, const std::string &content_type); - Result Post(const std::string &path, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, const Params ¶ms, - Progress progress); - Result Post(const std::string &path, const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items); - - Result Put(const std::string &path); - Result Put(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type); - Result Put(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Put(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - Result Put(const std::string &path, size_t content_length, ContentProvider content_provider, - const std::string &content_type); - Result Put(const std::string &path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Put(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, const std::string &content_type); - Result Put(const std::string &path, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, const Params ¶ms, - Progress progress); - Result Put(const std::string &path, const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary); - Result Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items); - - Result Patch(const std::string &path); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type); - Result Patch(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - Result Patch(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Patch(const std::string &path, ContentProviderWithoutLength content_provider, - const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, size_t content_length, - ContentProvider content_provider, const std::string &content_type); - Result Patch(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type); - - Result Delete(const std::string &path); - Result Delete(const std::string &path, const Headers &headers); - Result Delete(const std::string &path, const char *body, size_t content_length, - const std::string &content_type); - Result Delete(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type); - Result Delete(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress); - Result Delete(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type); - Result Delete(const std::string &path, const Headers &headers, const std::string &body, - const std::string &content_type, Progress progress); - - Result Options(const std::string &path); - Result Options(const std::string &path, const Headers &headers); - - bool send(Request &req, Response &res, Error &error); - Result send(const Request &req); - - void stop(); - - std::string host() const; - int port() const; - - size_t is_socket_open() const; - socket_t socket() const; - - void set_hostname_addr_map(std::map addr_map); - - void set_default_headers(Headers headers); - - void set_header_writer(std::function const &writer); - - void set_address_family(int family); - void set_tcp_nodelay(bool on); - void set_socket_options(SocketOptions socket_options); - - void set_connection_timeout(time_t sec, time_t usec = 0); - template - void set_connection_timeout(const std::chrono::duration &duration); - - void set_read_timeout(time_t sec, time_t usec = 0); - template - void set_read_timeout(const std::chrono::duration &duration); - - void set_write_timeout(time_t sec, time_t usec = 0); - template - void set_write_timeout(const std::chrono::duration &duration); - - void set_basic_auth(const std::string &username, const std::string &password); - void set_bearer_token_auth(const std::string &token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_digest_auth(const std::string &username, const std::string &password); -#endif - - void set_keep_alive(bool on); - void set_follow_location(bool on); - - void set_url_encode(bool on); - - void set_compress(bool on); - - void set_decompress(bool on); - - void set_interface(const std::string &intf); - - void set_proxy(const std::string &host, int port); - void set_proxy_basic_auth(const std::string &username, const std::string &password); - void set_proxy_bearer_token_auth(const std::string &token); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_proxy_digest_auth(const std::string &username, const std::string &password); -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void enable_server_certificate_verification(bool enabled); -#endif - - void set_logger(Logger logger); - - // SSL -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - void set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path = std::string()); - - void set_ca_cert_store(X509_STORE *ca_cert_store); - void load_ca_cert_store(const char *ca_cert, std::size_t size); - - long get_openssl_verify_result() const; - - SSL_CTX *ssl_context() const; -#endif - - private: - std::unique_ptr cli_; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - bool is_ssl_ = false; -#endif - }; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - class SSLServer : public Server { - public: - SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path = nullptr, - const char *client_ca_cert_dir_path = nullptr, - const char *private_key_password = nullptr); - - SSLServer(X509 *cert, EVP_PKEY *private_key, X509_STORE *client_ca_cert_store = nullptr); - - SSLServer(const std::function &setup_ssl_ctx_callback); - - ~SSLServer() override; - - bool is_valid() const override; - - SSL_CTX *ssl_context() const; - - void update_certs(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store = nullptr); - - private: - bool process_and_close_socket(socket_t sock) override; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; - }; - - class SSLClient final : public ClientImpl { - public: - explicit SSLClient(const std::string &host); - - explicit SSLClient(const std::string &host, int port); - - explicit SSLClient(const std::string &host, int port, const std::string &client_cert_path, - const std::string &client_key_path, - const std::string &private_key_password = std::string()); - - explicit SSLClient(const std::string &host, int port, X509 *client_cert, - EVP_PKEY *client_key, - const std::string &private_key_password = std::string()); - - ~SSLClient() override; - - bool is_valid() const override; - - void set_ca_cert_store(X509_STORE *ca_cert_store); - void load_ca_cert_store(const char *ca_cert, std::size_t size); - - long get_openssl_verify_result() const; - - SSL_CTX *ssl_context() const; - - private: - bool create_and_connect_socket(Socket &socket, Error &error) override; - void shutdown_ssl(Socket &socket, bool shutdown_gracefully) override; - void shutdown_ssl_impl(Socket &socket, bool shutdown_gracefully); - - bool process_socket(const Socket &socket, - std::function callback) override; - bool is_ssl() const override; - - bool connect_with_proxy(Socket &sock, Response &res, bool &success, Error &error); - bool initialize_ssl(Socket &socket, Error &error); - - bool load_certs(); - - bool verify_host(X509 *server_cert) const; - bool verify_host_with_subject_alt_name(X509 *server_cert) const; - bool verify_host_with_common_name(X509 *server_cert) const; - bool check_host_name(const char *pattern, size_t pattern_len) const; - - SSL_CTX *ctx_; - std::mutex ctx_mutex_; - std::once_flag initialize_cert_; - - std::vector host_components_; - - long verify_result_ = 0; - - friend class ClientImpl; - }; -#endif - - /* - * Implementation of template methods. - */ - - namespace detail { - - template - inline void duration_to_sec_and_usec(const T &duration, U callback) { - auto sec = std::chrono::duration_cast(duration).count(); - auto usec = std::chrono::duration_cast( - duration - std::chrono::seconds(sec)) - .count(); - callback(static_cast(sec), static_cast(usec)); - } - - inline uint64_t get_header_value_u64(const Headers &headers, const std::string &key, - size_t id, uint64_t def) { - auto rng = headers.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { - return std::strtoull(it->second.data(), nullptr, 10); - } - return def; - } - - } // namespace detail - - inline uint64_t Request::get_header_value_u64(const std::string &key, size_t id) const { - return detail::get_header_value_u64(headers, key, id, 0); - } - - inline uint64_t Response::get_header_value_u64(const std::string &key, size_t id) const { - return detail::get_header_value_u64(headers, key, id, 0); - } - - template - inline ssize_t Stream::write_format(const char *fmt, const Args &...args) { - const auto bufsiz = 2048; - std::array buf{}; - - auto sn = snprintf(buf.data(), buf.size() - 1, fmt, args...); - if (sn <= 0) { - return sn; - } - - auto n = static_cast(sn); - - if (n >= buf.size() - 1) { - std::vector glowable_buf(buf.size()); - - while (n >= glowable_buf.size() - 1) { - glowable_buf.resize(glowable_buf.size() * 2); - n = static_cast( - snprintf(&glowable_buf[0], glowable_buf.size() - 1, fmt, args...)); - } - return write(&glowable_buf[0], n); - } else { - return write(buf.data(), n); - } - } - - inline void default_socket_options(socket_t sock) { - int yes = 1; -#ifdef _WIN32 - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); - setsockopt(sock, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, reinterpret_cast(&yes), - sizeof(yes)); -#else -#ifdef SO_REUSEPORT - setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast(&yes), - sizeof(yes)); -#else - setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), - sizeof(yes)); -#endif -#endif - } - - inline const char *status_message(int status) { - switch (status) { - case StatusCode::Continue_100: - return "Continue"; - case StatusCode::SwitchingProtocol_101: - return "Switching Protocol"; - case StatusCode::Processing_102: - return "Processing"; - case StatusCode::EarlyHints_103: - return "Early Hints"; - case StatusCode::OK_200: - return "OK"; - case StatusCode::Created_201: - return "Created"; - case StatusCode::Accepted_202: - return "Accepted"; - case StatusCode::NonAuthoritativeInformation_203: - return "Non-Authoritative Information"; - case StatusCode::NoContent_204: - return "No Content"; - case StatusCode::ResetContent_205: - return "Reset Content"; - case StatusCode::PartialContent_206: - return "Partial Content"; - case StatusCode::MultiStatus_207: - return "Multi-Status"; - case StatusCode::AlreadyReported_208: - return "Already Reported"; - case StatusCode::IMUsed_226: - return "IM Used"; - case StatusCode::MultipleChoices_300: - return "Multiple Choices"; - case StatusCode::MovedPermanently_301: - return "Moved Permanently"; - case StatusCode::Found_302: - return "Found"; - case StatusCode::SeeOther_303: - return "See Other"; - case StatusCode::NotModified_304: - return "Not Modified"; - case StatusCode::UseProxy_305: - return "Use Proxy"; - case StatusCode::unused_306: - return "unused"; - case StatusCode::TemporaryRedirect_307: - return "Temporary Redirect"; - case StatusCode::PermanentRedirect_308: - return "Permanent Redirect"; - case StatusCode::BadRequest_400: - return "Bad Request"; - case StatusCode::Unauthorized_401: - return "Unauthorized"; - case StatusCode::PaymentRequired_402: - return "Payment Required"; - case StatusCode::Forbidden_403: - return "Forbidden"; - case StatusCode::NotFound_404: - return "Not Found"; - case StatusCode::MethodNotAllowed_405: - return "Method Not Allowed"; - case StatusCode::NotAcceptable_406: - return "Not Acceptable"; - case StatusCode::ProxyAuthenticationRequired_407: - return "Proxy Authentication Required"; - case StatusCode::RequestTimeout_408: - return "Request Timeout"; - case StatusCode::Conflict_409: - return "Conflict"; - case StatusCode::Gone_410: - return "Gone"; - case StatusCode::LengthRequired_411: - return "Length Required"; - case StatusCode::PreconditionFailed_412: - return "Precondition Failed"; - case StatusCode::PayloadTooLarge_413: - return "Payload Too Large"; - case StatusCode::UriTooLong_414: - return "URI Too Long"; - case StatusCode::UnsupportedMediaType_415: - return "Unsupported Media Type"; - case StatusCode::RangeNotSatisfiable_416: - return "Range Not Satisfiable"; - case StatusCode::ExpectationFailed_417: - return "Expectation Failed"; - case StatusCode::ImATeapot_418: - return "I'm a teapot"; - case StatusCode::MisdirectedRequest_421: - return "Misdirected Request"; - case StatusCode::UnprocessableContent_422: - return "Unprocessable Content"; - case StatusCode::Locked_423: - return "Locked"; - case StatusCode::FailedDependency_424: - return "Failed Dependency"; - case StatusCode::TooEarly_425: - return "Too Early"; - case StatusCode::UpgradeRequired_426: - return "Upgrade Required"; - case StatusCode::PreconditionRequired_428: - return "Precondition Required"; - case StatusCode::TooManyRequests_429: - return "Too Many Requests"; - case StatusCode::RequestHeaderFieldsTooLarge_431: - return "Request Header Fields Too Large"; - case StatusCode::UnavailableForLegalReasons_451: - return "Unavailable For Legal Reasons"; - case StatusCode::NotImplemented_501: - return "Not Implemented"; - case StatusCode::BadGateway_502: - return "Bad Gateway"; - case StatusCode::ServiceUnavailable_503: - return "Service Unavailable"; - case StatusCode::GatewayTimeout_504: - return "Gateway Timeout"; - case StatusCode::HttpVersionNotSupported_505: - return "HTTP Version Not Supported"; - case StatusCode::VariantAlsoNegotiates_506: - return "Variant Also Negotiates"; - case StatusCode::InsufficientStorage_507: - return "Insufficient Storage"; - case StatusCode::LoopDetected_508: - return "Loop Detected"; - case StatusCode::NotExtended_510: - return "Not Extended"; - case StatusCode::NetworkAuthenticationRequired_511: - return "Network Authentication Required"; - - default: - case StatusCode::InternalServerError_500: - return "Internal Server Error"; - } - } - - inline std::string get_bearer_token_auth(const Request &req) { - if (req.has_header("Authorization")) { - static std::string BearerHeaderPrefix = "Bearer "; - return req.get_header_value("Authorization").substr(BearerHeaderPrefix.length()); - } - return ""; - } - - template - inline Server &Server::set_read_timeout(const std::chrono::duration &duration) { - detail::duration_to_sec_and_usec( - duration, [&](time_t sec, time_t usec) { set_read_timeout(sec, usec); }); - return *this; - } - - template - inline Server &Server::set_write_timeout(const std::chrono::duration &duration) { - detail::duration_to_sec_and_usec( - duration, [&](time_t sec, time_t usec) { set_write_timeout(sec, usec); }); - return *this; - } - - template - inline Server &Server::set_idle_interval(const std::chrono::duration &duration) { - detail::duration_to_sec_and_usec( - duration, [&](time_t sec, time_t usec) { set_idle_interval(sec, usec); }); - return *this; - } - - inline std::string to_string(const Error error) { - switch (error) { - case Error::Success: - return "Success (no error)"; - case Error::Connection: - return "Could not establish connection"; - case Error::BindIPAddress: - return "Failed to bind IP address"; - case Error::Read: - return "Failed to read connection"; - case Error::Write: - return "Failed to write connection"; - case Error::ExceedRedirectCount: - return "Maximum redirect count exceeded"; - case Error::Canceled: - return "Connection handling canceled"; - case Error::SSLConnection: - return "SSL connection failed"; - case Error::SSLLoadingCerts: - return "SSL certificate loading failed"; - case Error::SSLServerVerification: - return "SSL server verification failed"; - case Error::UnsupportedMultipartBoundaryChars: - return "Unsupported HTTP multipart boundary characters"; - case Error::Compression: - return "Compression failed"; - case Error::ConnectionTimeout: - return "Connection timed out"; - case Error::ProxyConnection: - return "Proxy connection failed"; - case Error::Unknown: - return "Unknown"; - default: - break; - } - - return "Invalid"; - } - - inline std::ostream &operator<<(std::ostream &os, const Error &obj) { - os << to_string(obj); - os << " (" << static_cast::type>(obj) << ')'; - return os; - } - - inline uint64_t Result::get_request_header_value_u64(const std::string &key, size_t id) const { - return detail::get_header_value_u64(request_headers_, key, id, 0); - } - - template - inline void ClientImpl::set_connection_timeout( - const std::chrono::duration &duration) { - detail::duration_to_sec_and_usec( - duration, [&](time_t sec, time_t usec) { set_connection_timeout(sec, usec); }); - } - - template - inline void ClientImpl::set_read_timeout(const std::chrono::duration &duration) { - detail::duration_to_sec_and_usec( - duration, [&](time_t sec, time_t usec) { set_read_timeout(sec, usec); }); - } - - template - inline void ClientImpl::set_write_timeout(const std::chrono::duration &duration) { - detail::duration_to_sec_and_usec( - duration, [&](time_t sec, time_t usec) { set_write_timeout(sec, usec); }); - } - - template - inline void Client::set_connection_timeout(const std::chrono::duration &duration) { - cli_->set_connection_timeout(duration); - } - - template - inline void Client::set_read_timeout(const std::chrono::duration &duration) { - cli_->set_read_timeout(duration); - } - - template - inline void Client::set_write_timeout(const std::chrono::duration &duration) { - cli_->set_write_timeout(duration); - } - - /* - * Forward declarations and types that will be part of the .h file if split into - * .h + .cc. - */ - - std::string hosted_at(const std::string &hostname); - - void hosted_at(const std::string &hostname, std::vector &addrs); - - std::string append_query_params(const std::string &path, const Params ¶ms); - - std::pair make_range_header(const Ranges &ranges); - - std::pair make_basic_authentication_header( - const std::string &username, const std::string &password, bool is_proxy = false); - - namespace detail { - - std::string encode_query_param(const std::string &value); - - std::string decode_url(const std::string &s, bool convert_plus_to_space); - - void read_file(const std::string &path, std::string &out); - - std::string trim_copy(const std::string &s); - - void divide(const char *data, std::size_t size, char d, - std::function fn); - - void divide(const std::string &str, char d, - std::function fn); - - void split(const char *b, const char *e, char d, - std::function fn); - - void split(const char *b, const char *e, char d, size_t m, - std::function fn); - - bool process_client_socket(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - std::function callback); - - socket_t create_client_socket(const std::string &host, const std::string &ip, int port, - int address_family, bool tcp_nodelay, - SocketOptions socket_options, time_t connection_timeout_sec, - time_t connection_timeout_usec, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, const std::string &intf, - Error &error); - - const char *get_header_value(const Headers &headers, const std::string &key, size_t id = 0, - const char *def = nullptr); - - std::string params_to_query_str(const Params ¶ms); - - void parse_query_text(const char *data, std::size_t size, Params ¶ms); - - void parse_query_text(const std::string &s, Params ¶ms); - - bool parse_multipart_boundary(const std::string &content_type, std::string &boundary); - - bool parse_range_header(const std::string &s, Ranges &ranges); - - int close_socket(socket_t sock); - - ssize_t send_socket(socket_t sock, const void *ptr, size_t size, int flags); - - ssize_t read_socket(socket_t sock, void *ptr, size_t size, int flags); - - enum class EncodingType { None = 0, Gzip, Brotli }; - - EncodingType encoding_type(const Request &req, const Response &res); - - class BufferStream final : public Stream { - public: - BufferStream() = default; - ~BufferStream() override = default; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - void get_local_ip_and_port(std::string &ip, int &port) const override; - socket_t socket() const override; - - const std::string &get_buffer() const; - - private: - std::string buffer; - size_t position = 0; - }; - - class compressor { - public: - virtual ~compressor() = default; - - typedef std::function Callback; - virtual bool compress(const char *data, size_t data_length, bool last, - Callback callback) = 0; - }; - - class decompressor { - public: - virtual ~decompressor() = default; - - virtual bool is_valid() const = 0; - - typedef std::function Callback; - virtual bool decompress(const char *data, size_t data_length, Callback callback) = 0; - }; - - class nocompressor final : public compressor { - public: - ~nocompressor() override = default; - - bool compress(const char *data, size_t data_length, bool /*last*/, - Callback callback) override; - }; - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - class gzip_compressor final : public compressor { - public: - gzip_compressor(); - ~gzip_compressor() override; - - bool compress(const char *data, size_t data_length, bool last, - Callback callback) override; - - private: - bool is_valid_ = false; - z_stream strm_; - }; - - class gzip_decompressor final : public decompressor { - public: - gzip_decompressor(); - ~gzip_decompressor() override; - - bool is_valid() const override; - - bool decompress(const char *data, size_t data_length, Callback callback) override; - - private: - bool is_valid_ = false; - z_stream strm_; - }; -#endif - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - class brotli_compressor final : public compressor { - public: - brotli_compressor(); - ~brotli_compressor(); - - bool compress(const char *data, size_t data_length, bool last, - Callback callback) override; - - private: - BrotliEncoderState *state_ = nullptr; - }; - - class brotli_decompressor final : public decompressor { - public: - brotli_decompressor(); - ~brotli_decompressor(); - - bool is_valid() const override; - - bool decompress(const char *data, size_t data_length, Callback callback) override; - - private: - BrotliDecoderResult decoder_r; - BrotliDecoderState *decoder_s = nullptr; - }; -#endif - - // NOTE: until the read size reaches `fixed_buffer_size`, use `fixed_buffer` - // to store data. The call can set memory on stack for performance. - class stream_line_reader { - public: - stream_line_reader(Stream &strm, char *fixed_buffer, size_t fixed_buffer_size); - const char *ptr() const; - size_t size() const; - bool end_with_crlf() const; - bool getline(); - - private: - void append(char c); - - Stream &strm_; - char *fixed_buffer_; - const size_t fixed_buffer_size_; - size_t fixed_buffer_used_size_ = 0; - std::string glowable_buffer_; - }; - - class mmap { - public: - mmap(const char *path); - ~mmap(); - - bool open(const char *path); - void close(); - - bool is_open() const; - size_t size() const; - const char *data() const; - - private: -#if defined(_WIN32) - HANDLE hFile_; - HANDLE hMapping_; -#else - int fd_; -#endif - size_t size_; - void *addr_; - }; - - } // namespace detail - - // ---------------------------------------------------------------------------- - - /* - * Implementation that will be part of the .cc file if split into .h + .cc. - */ - - namespace detail { - - inline bool is_hex(char c, int &v) { - if (0x20 <= c && isdigit(c)) { - v = c - '0'; - return true; - } else if ('A' <= c && c <= 'F') { - v = c - 'A' + 10; - return true; - } else if ('a' <= c && c <= 'f') { - v = c - 'a' + 10; - return true; - } - return false; - } - - inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, int &val) { - if (i >= s.size()) { - return false; - } - - val = 0; - for (; cnt; i++, cnt--) { - if (!s[i]) { - return false; - } - auto v = 0; - if (is_hex(s[i], v)) { - val = val * 16 + v; - } else { - return false; - } - } - return true; - } - - inline std::string from_i_to_hex(size_t n) { - static const auto charset = "0123456789abcdef"; - std::string ret; - do { - ret = charset[n & 15] + ret; - n >>= 4; - } while (n > 0); - return ret; - } - - inline size_t to_utf8(int code, char *buff) { - if (code < 0x0080) { - buff[0] = static_cast(code & 0x7F); - return 1; - } else if (code < 0x0800) { - buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); - buff[1] = static_cast(0x80 | (code & 0x3F)); - return 2; - } else if (code < 0xD800) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0xE000) { // D800 - DFFF is invalid... - return 0; - } else if (code < 0x10000) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0x110000) { - buff[0] = static_cast(0xF0 | ((code >> 18) & 0x7)); - buff[1] = static_cast(0x80 | ((code >> 12) & 0x3F)); - buff[2] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[3] = static_cast(0x80 | (code & 0x3F)); - return 4; - } - - // NOTREACHED - return 0; - } - - // NOTE: This code came up with the following stackoverflow post: - // https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c - inline std::string base64_encode(const std::string &in) { - static const auto lookup = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - std::string out; - out.reserve(in.size()); - - auto val = 0; - auto valb = -6; - - for (auto c : in) { - val = (val << 8) + static_cast(c); - valb += 8; - while (valb >= 0) { - out.push_back(lookup[(val >> valb) & 0x3F]); - valb -= 6; - } - } - - if (valb > -6) { - out.push_back(lookup[((val << 8) >> (valb + 8)) & 0x3F]); - } - - while (out.size() % 4) { - out.push_back('='); - } - - return out; - } - - inline bool is_file(const std::string &path) { -#ifdef _WIN32 - return _access_s(path.c_str(), 0) == 0; -#else - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISREG(st.st_mode); -#endif - } - - inline bool is_dir(const std::string &path) { - struct stat st; - return stat(path.c_str(), &st) >= 0 && S_ISDIR(st.st_mode); - } - - inline bool is_valid_path(const std::string &path) { - size_t level = 0; - size_t i = 0; - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - - while (i < path.size()) { - // Read component - auto beg = i; - while (i < path.size() && path[i] != '/') { - if (path[i] == '\0') { - return false; - } else if (path[i] == '\\') { - return false; - } - i++; - } - - auto len = i - beg; - assert(len > 0); - - if (!path.compare(beg, len, ".")) { - ; - } else if (!path.compare(beg, len, "..")) { - if (level == 0) { - return false; - } - level--; - } else { - level++; - } - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - } - - return true; - } - - inline std::string encode_query_param(const std::string &value) { - std::ostringstream escaped; - escaped.fill('0'); - escaped << std::hex; - - for (auto c : value) { - if (std::isalnum(static_cast(c)) || c == '-' || c == '_' || c == '.' || - c == '!' || c == '~' || c == '*' || c == '\'' || c == '(' || c == ')') { - escaped << c; - } else { - escaped << std::uppercase; - escaped << '%' << std::setw(2) - << static_cast(static_cast(c)); - escaped << std::nouppercase; - } - } - - return escaped.str(); - } - - inline std::string encode_url(const std::string &s) { - std::string result; - result.reserve(s.size()); - - for (size_t i = 0; s[i]; i++) { - switch (s[i]) { - case ' ': - result += "%20"; - break; - case '+': - result += "%2B"; - break; - case '\r': - result += "%0D"; - break; - case '\n': - result += "%0A"; - break; - case '\'': - result += "%27"; - break; - case ',': - result += "%2C"; - break; - // case ':': result += "%3A"; break; // ok? probably... - case ';': - result += "%3B"; - break; - default: - auto c = static_cast(s[i]); - if (c >= 0x80) { - result += '%'; - char hex[4]; - auto len = snprintf(hex, sizeof(hex) - 1, "%02X", c); - assert(len == 2); - result.append(hex, static_cast(len)); - } else { - result += s[i]; - } - break; - } - } - - return result; - } - - inline std::string decode_url(const std::string &s, bool convert_plus_to_space) { - std::string result; - - for (size_t i = 0; i < s.size(); i++) { - if (s[i] == '%' && i + 1 < s.size()) { - if (s[i + 1] == 'u') { - auto val = 0; - if (from_hex_to_i(s, i + 2, 4, val)) { - // 4 digits Unicode codes - char buff[4]; - size_t len = to_utf8(val, buff); - if (len > 0) { - result.append(buff, len); - } - i += 5; // 'u0000' - } else { - result += s[i]; - } - } else { - auto val = 0; - if (from_hex_to_i(s, i + 1, 2, val)) { - // 2 digits hex codes - result += static_cast(val); - i += 2; // '00' - } else { - result += s[i]; - } - } - } else if (convert_plus_to_space && s[i] == '+') { - result += ' '; - } else { - result += s[i]; - } - } - - return result; - } - - inline void read_file(const std::string &path, std::string &out) { - std::ifstream fs(path, std::ios_base::binary); - fs.seekg(0, std::ios_base::end); - auto size = fs.tellg(); - fs.seekg(0); - out.resize(static_cast(size)); - fs.read(&out[0], static_cast(size)); - } - - inline std::string file_extension(const std::string &path) { - std::smatch m; - static auto re = std::regex("\\.([a-zA-Z0-9]+)$"); - if (std::regex_search(path, m, re)) { - return m[1].str(); - } - return std::string(); - } - - inline bool is_space_or_tab(char c) { return c == ' ' || c == '\t'; } - - inline std::pair trim(const char *b, const char *e, size_t left, - size_t right) { - while (b + left < e && is_space_or_tab(b[left])) { - left++; - } - while (right > 0 && is_space_or_tab(b[right - 1])) { - right--; - } - return std::make_pair(left, right); - } - - inline std::string trim_copy(const std::string &s) { - auto r = trim(s.data(), s.data() + s.size(), 0, s.size()); - return s.substr(r.first, r.second - r.first); - } - - inline std::string trim_double_quotes_copy(const std::string &s) { - if (s.length() >= 2 && s.front() == '"' && s.back() == '"') { - return s.substr(1, s.size() - 2); - } - return s; - } - - inline void divide( - const char *data, std::size_t size, char d, - std::function fn) { - const auto it = std::find(data, data + size, d); - const auto found = static_cast(it != data + size); - const auto lhs_data = data; - const auto lhs_size = static_cast(it - data); - const auto rhs_data = it + found; - const auto rhs_size = size - lhs_size - found; - - fn(lhs_data, lhs_size, rhs_data, rhs_size); - } - - inline void divide( - const std::string &str, char d, - std::function fn) { - divide(str.data(), str.size(), d, std::move(fn)); - } - - inline void split(const char *b, const char *e, char d, - std::function fn) { - return split(b, e, d, (std::numeric_limits::max)(), std::move(fn)); - } - - inline void split(const char *b, const char *e, char d, size_t m, - std::function fn) { - size_t i = 0; - size_t beg = 0; - size_t count = 1; - - while (e ? (b + i < e) : (b[i] != '\0')) { - if (b[i] == d && count < m) { - auto r = trim(b, e, beg, i); - if (r.first < r.second) { - fn(&b[r.first], &b[r.second]); - } - beg = i + 1; - count++; - } - i++; - } - - if (i) { - auto r = trim(b, e, beg, i); - if (r.first < r.second) { - fn(&b[r.first], &b[r.second]); - } - } - } - - inline stream_line_reader::stream_line_reader(Stream &strm, char *fixed_buffer, - size_t fixed_buffer_size) - : strm_(strm), fixed_buffer_(fixed_buffer), fixed_buffer_size_(fixed_buffer_size) {} - - inline const char *stream_line_reader::ptr() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_; - } else { - return glowable_buffer_.data(); - } - } - - inline size_t stream_line_reader::size() const { - if (glowable_buffer_.empty()) { - return fixed_buffer_used_size_; - } else { - return glowable_buffer_.size(); - } - } - - inline bool stream_line_reader::end_with_crlf() const { - auto end = ptr() + size(); - return size() >= 2 && end[-2] == '\r' && end[-1] == '\n'; - } - - inline bool stream_line_reader::getline() { - fixed_buffer_used_size_ = 0; - glowable_buffer_.clear(); - - for (size_t i = 0;; i++) { - char byte; - auto n = strm_.read(&byte, 1); - - if (n < 0) { - return false; - } else if (n == 0) { - if (i == 0) { - return false; - } else { - break; - } - } - - append(byte); - - if (byte == '\n') { - break; - } - } - - return true; - } - - inline void stream_line_reader::append(char c) { - if (fixed_buffer_used_size_ < fixed_buffer_size_ - 1) { - fixed_buffer_[fixed_buffer_used_size_++] = c; - fixed_buffer_[fixed_buffer_used_size_] = '\0'; - } else { - if (glowable_buffer_.empty()) { - assert(fixed_buffer_[fixed_buffer_used_size_] == '\0'); - glowable_buffer_.assign(fixed_buffer_, fixed_buffer_used_size_); - } - glowable_buffer_ += c; - } - } - - inline mmap::mmap(const char *path) -#if defined(_WIN32) - : hFile_(NULL), - hMapping_(NULL) -#else - : fd_(-1) -#endif - , - size_(0), - addr_(nullptr) { - open(path); - } - - inline mmap::~mmap() { close(); } - - inline bool mmap::open(const char *path) { - close(); - -#if defined(_WIN32) - std::wstring wpath; - for (size_t i = 0; i < strlen(path); i++) { - wpath += path[i]; - } - - hFile_ = - ::CreateFile2(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, NULL); - - if (hFile_ == INVALID_HANDLE_VALUE) { - return false; - } - - LARGE_INTEGER size{}; - if (!::GetFileSizeEx(hFile_, &size)) { - return false; - } - size_ = static_cast(size.QuadPart); - - hMapping_ = ::CreateFileMappingFromApp(hFile_, NULL, PAGE_READONLY, size_, NULL); - - if (hMapping_ == NULL) { - close(); - return false; - } - - addr_ = ::MapViewOfFileFromApp(hMapping_, FILE_MAP_READ, 0, 0); -#else - fd_ = ::open(path, O_RDONLY); - if (fd_ == -1) { - return false; - } - - struct stat sb; - if (fstat(fd_, &sb) == -1) { - close(); - return false; - } - size_ = static_cast(sb.st_size); - - addr_ = ::mmap(NULL, size_, PROT_READ, MAP_PRIVATE, fd_, 0); -#endif - - if (addr_ == nullptr) { - close(); - return false; - } - - return true; - } - - inline bool mmap::is_open() const { return addr_ != nullptr; } - - inline size_t mmap::size() const { return size_; } - - inline const char *mmap::data() const { return static_cast(addr_); } - - inline void mmap::close() { -#if defined(_WIN32) - if (addr_) { - ::UnmapViewOfFile(addr_); - addr_ = nullptr; - } - - if (hMapping_) { - ::CloseHandle(hMapping_); - hMapping_ = NULL; - } - - if (hFile_ != INVALID_HANDLE_VALUE) { - ::CloseHandle(hFile_); - hFile_ = INVALID_HANDLE_VALUE; - } -#else - if (addr_ != nullptr) { - munmap(addr_, size_); - addr_ = nullptr; - } - - if (fd_ != -1) { - ::close(fd_); - fd_ = -1; - } -#endif - size_ = 0; - } - inline int close_socket(socket_t sock) { -#ifdef _WIN32 - return closesocket(sock); -#else - return close(sock); -#endif - } - - template - inline ssize_t handle_EINTR(T fn) { - ssize_t res = 0; - while (true) { - res = fn(); - if (res < 0 && errno == EINTR) { - continue; - } - break; - } - return res; - } - - inline ssize_t read_socket(socket_t sock, void *ptr, size_t size, int flags) { - return handle_EINTR([&]() { - return recv(sock, -#ifdef _WIN32 - static_cast(ptr), static_cast(size), -#else - ptr, size, -#endif - flags); - }); - } - - inline ssize_t send_socket(socket_t sock, const void *ptr, size_t size, int flags) { - return handle_EINTR([&]() { - return send(sock, -#ifdef _WIN32 - static_cast(ptr), static_cast(size), -#else - ptr, size, -#endif - flags); - }); - } - - inline ssize_t select_read(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else -#ifndef _WIN32 - if (sock >= FD_SETSIZE) { - return -1; - } -#endif - - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR( - [&]() { return select(static_cast(sock + 1), &fds, nullptr, nullptr, &tv); }); -#endif - } - - inline ssize_t select_write(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); -#else -#ifndef _WIN32 - if (sock >= FD_SETSIZE) { - return -1; - } -#endif - - fd_set fds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR( - [&]() { return select(static_cast(sock + 1), nullptr, &fds, nullptr, &tv); }); -#endif - } - - inline Error wait_until_socket_is_ready(socket_t sock, time_t sec, time_t usec) { -#ifdef CPPHTTPLIB_USE_POLL - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN | POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - auto poll_res = handle_EINTR([&]() { return poll(&pfd_read, 1, timeout); }); - - if (poll_res == 0) { - return Error::ConnectionTimeout; - } - - if (poll_res > 0 && pfd_read.revents & (POLLIN | POLLOUT)) { - auto error = 0; - socklen_t len = sizeof(error); - auto res = - getsockopt(sock, SOL_SOCKET, SO_ERROR, reinterpret_cast(&error), &len); - auto successful = res >= 0 && !error; - return successful ? Error::Success : Error::Connection; - } - - return Error::Connection; -#else -#ifndef _WIN32 - if (sock >= FD_SETSIZE) { - return Error::Connection; - } -#endif - - fd_set fdsr; - FD_ZERO(&fdsr); - FD_SET(sock, &fdsr); - - auto fdsw = fdsr; - auto fdse = fdsr; - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - auto ret = handle_EINTR( - [&]() { return select(static_cast(sock + 1), &fdsr, &fdsw, &fdse, &tv); }); - - if (ret == 0) { - return Error::ConnectionTimeout; - } - - if (ret > 0 && (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) { - auto error = 0; - socklen_t len = sizeof(error); - auto res = - getsockopt(sock, SOL_SOCKET, SO_ERROR, reinterpret_cast(&error), &len); - auto successful = res >= 0 && !error; - return successful ? Error::Success : Error::Connection; - } - return Error::Connection; -#endif - } - - inline bool is_socket_alive(socket_t sock) { - const auto val = detail::select_read(sock, 0, 0); - if (val == 0) { - return true; - } else if (val < 0 && errno == EBADF) { - return false; - } - char buf[1]; - return detail::read_socket(sock, &buf[0], sizeof(buf), MSG_PEEK) > 0; - } - - class SocketStream final : public Stream { - public: - SocketStream(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec); - ~SocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - void get_local_ip_and_port(std::string &ip, int &port) const override; - socket_t socket() const override; - - private: - socket_t sock_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; - - std::vector read_buff_; - size_t read_buff_off_ = 0; - size_t read_buff_content_size_ = 0; - - static const size_t read_buff_size_ = 1024l * 4; - }; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - class SSLSocketStream final : public Stream { - public: - SSLSocketStream(socket_t sock, SSL *ssl, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec); - ~SSLSocketStream() override; - - bool is_readable() const override; - bool is_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - void get_local_ip_and_port(std::string &ip, int &port) const override; - socket_t socket() const override; - - private: - socket_t sock_; - SSL *ssl_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; - }; -#endif - - inline bool keep_alive(socket_t sock, time_t keep_alive_timeout_sec) { - using namespace std::chrono; - auto start = steady_clock::now(); - while (true) { - auto val = select_read(sock, 0, 10000); - if (val < 0) { - return false; - } else if (val == 0) { - auto current = steady_clock::now(); - auto duration = duration_cast(current - start); - auto timeout = keep_alive_timeout_sec * 1000; - if (duration.count() > timeout) { - return false; - } - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - } else { - return true; - } - } - } - - template - inline bool process_server_socket_core(const std::atomic &svr_sock, socket_t sock, - size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, T callback) { - assert(keep_alive_max_count > 0); - auto ret = false; - auto count = keep_alive_max_count; - while (svr_sock != INVALID_SOCKET && count > 0 && - keep_alive(sock, keep_alive_timeout_sec)) { - auto close_connection = count == 1; - auto connection_closed = false; - ret = callback(close_connection, connection_closed); - if (!ret || connection_closed) { - break; - } - count--; - } - return ret; - } - - template - inline bool process_server_socket(const std::atomic &svr_sock, socket_t sock, - size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - return process_server_socket_core( - svr_sock, sock, keep_alive_max_count, keep_alive_timeout_sec, - [&](bool close_connection, bool &connection_closed) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, write_timeout_sec, - write_timeout_usec); - return callback(strm, close_connection, connection_closed); - }); - } - - inline bool process_client_socket(socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, - std::function callback) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, write_timeout_sec, - write_timeout_usec); - return callback(strm); - } - - inline int shutdown_socket(socket_t sock) { -#ifdef _WIN32 - return shutdown(sock, SD_BOTH); -#else - return shutdown(sock, SHUT_RDWR); -#endif - } - - template - socket_t create_socket(const std::string &host, const std::string &ip, int port, - int address_family, int socket_flags, bool tcp_nodelay, - SocketOptions socket_options, BindOrConnect bind_or_connect) { - // Get address info - const char *node = nullptr; - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (!ip.empty()) { - node = ip.c_str(); - // Ask getaddrinfo to convert IP in c-string to address - hints.ai_family = AF_UNSPEC; - hints.ai_flags = AI_NUMERICHOST; - } else { - if (!host.empty()) { - node = host.c_str(); - } - hints.ai_family = address_family; - hints.ai_flags = socket_flags; - } - -#ifndef _WIN32 - if (hints.ai_family == AF_UNIX) { - const auto addrlen = host.length(); - if (addrlen > sizeof(sockaddr_un::sun_path)) { - return INVALID_SOCKET; - } - - auto sock = socket(hints.ai_family, hints.ai_socktype, hints.ai_protocol); - if (sock != INVALID_SOCKET) { - sockaddr_un addr{}; - addr.sun_family = AF_UNIX; - std::copy(host.begin(), host.end(), addr.sun_path); - - hints.ai_addr = reinterpret_cast(&addr); - hints.ai_addrlen = - static_cast(sizeof(addr) - sizeof(addr.sun_path) + addrlen); - - fcntl(sock, F_SETFD, FD_CLOEXEC); - if (socket_options) { - socket_options(sock); - } - - if (!bind_or_connect(sock, hints)) { - close_socket(sock); - sock = INVALID_SOCKET; - } - } - return sock; - } -#endif - - auto service = std::to_string(port); - - if (getaddrinfo(node, service.c_str(), &hints, &result)) { -#if defined __linux__ && !defined __ANDROID__ - res_init(); -#endif - return INVALID_SOCKET; - } - - for (auto rp = result; rp; rp = rp->ai_next) { - // Create a socket -#ifdef _WIN32 - auto sock = WSASocketW(rp->ai_family, rp->ai_socktype, rp->ai_protocol, nullptr, 0, - WSA_FLAG_NO_HANDLE_INHERIT | WSA_FLAG_OVERLAPPED); - /** - * Since the WSA_FLAG_NO_HANDLE_INHERIT is only supported on Windows 7 SP1 - * and above the socket creation fails on older Windows Systems. - * - * Let's try to create a socket the old way in this case. - * - * Reference: - * https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa - * - * WSA_FLAG_NO_HANDLE_INHERIT: - * This flag is supported on Windows 7 with SP1, Windows Server 2008 R2 with - * SP1, and later - * - */ - if (sock == INVALID_SOCKET) { - sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - } -#else - auto sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); -#endif - if (sock == INVALID_SOCKET) { - continue; - } - -#ifndef _WIN32 - if (fcntl(sock, F_SETFD, FD_CLOEXEC) == -1) { - close_socket(sock); - continue; - } -#endif - - if (tcp_nodelay) { - auto yes = 1; -#ifdef _WIN32 - setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&yes), - sizeof(yes)); -#else - setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&yes), - sizeof(yes)); -#endif - } - - if (socket_options) { - socket_options(sock); - } - - if (rp->ai_family == AF_INET6) { - auto no = 0; -#ifdef _WIN32 - setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast(&no), - sizeof(no)); -#else - setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, reinterpret_cast(&no), - sizeof(no)); -#endif - } - - // bind or connect - if (bind_or_connect(sock, *rp)) { - freeaddrinfo(result); - return sock; - } - - close_socket(sock); - } - - freeaddrinfo(result); - return INVALID_SOCKET; - } - - inline void set_nonblocking(socket_t sock, bool nonblocking) { -#ifdef _WIN32 - auto flags = nonblocking ? 1UL : 0UL; - ioctlsocket(sock, FIONBIO, &flags); -#else - auto flags = fcntl(sock, F_GETFL, 0); - fcntl(sock, F_SETFL, nonblocking ? (flags | O_NONBLOCK) : (flags & (~O_NONBLOCK))); -#endif - } - - inline bool is_connection_error() { -#ifdef _WIN32 - return WSAGetLastError() != WSAEWOULDBLOCK; -#else - return errno != EINPROGRESS; -#endif - } - - inline bool bind_ip_address(socket_t sock, const std::string &host) { - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (getaddrinfo(host.c_str(), "0", &hints, &result)) { - return false; - } - - auto ret = false; - for (auto rp = result; rp; rp = rp->ai_next) { - const auto &ai = *rp; - if (!::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - ret = true; - break; - } - } - - freeaddrinfo(result); - return ret; - } - -#if !defined _WIN32 && !defined ANDROID && !defined _AIX && !defined __MVS__ -#define USE_IF2IP -#endif - -#ifdef USE_IF2IP - inline std::string if2ip(int address_family, const std::string &ifn) { - struct ifaddrs *ifap; - getifaddrs(&ifap); - std::string addr_candidate; - for (auto ifa = ifap; ifa; ifa = ifa->ifa_next) { - if (ifa->ifa_addr && ifn == ifa->ifa_name && - (AF_UNSPEC == address_family || ifa->ifa_addr->sa_family == address_family)) { - if (ifa->ifa_addr->sa_family == AF_INET) { - auto sa = reinterpret_cast(ifa->ifa_addr); - char buf[INET_ADDRSTRLEN]; - if (inet_ntop(AF_INET, &sa->sin_addr, buf, INET_ADDRSTRLEN)) { - freeifaddrs(ifap); - return std::string(buf, INET_ADDRSTRLEN); - } - } else if (ifa->ifa_addr->sa_family == AF_INET6) { - auto sa = reinterpret_cast(ifa->ifa_addr); - if (!IN6_IS_ADDR_LINKLOCAL(&sa->sin6_addr)) { - char buf[INET6_ADDRSTRLEN] = {}; - if (inet_ntop(AF_INET6, &sa->sin6_addr, buf, INET6_ADDRSTRLEN)) { - // equivalent to mac's IN6_IS_ADDR_UNIQUE_LOCAL - auto s6_addr_head = sa->sin6_addr.s6_addr[0]; - if (s6_addr_head == 0xfc || s6_addr_head == 0xfd) { - addr_candidate = std::string(buf, INET6_ADDRSTRLEN); - } else { - freeifaddrs(ifap); - return std::string(buf, INET6_ADDRSTRLEN); - } - } - } - } - } - } - freeifaddrs(ifap); - return addr_candidate; - } -#endif - - inline socket_t create_client_socket(const std::string &host, const std::string &ip, - int port, int address_family, bool tcp_nodelay, - SocketOptions socket_options, - time_t connection_timeout_sec, - time_t connection_timeout_usec, - time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - const std::string &intf, Error &error) { - auto sock = create_socket( - host, ip, port, address_family, 0, tcp_nodelay, std::move(socket_options), - [&](socket_t sock2, struct addrinfo &ai) -> bool { - if (!intf.empty()) { -#ifdef USE_IF2IP - auto ip_from_if = if2ip(address_family, intf); - if (ip_from_if.empty()) { - ip_from_if = intf; - } - if (!bind_ip_address(sock2, ip_from_if)) { - error = Error::BindIPAddress; - return false; - } -#endif - } - - set_nonblocking(sock2, true); - - auto ret = ::connect(sock2, ai.ai_addr, static_cast(ai.ai_addrlen)); - - if (ret < 0) { - if (is_connection_error()) { - error = Error::Connection; - return false; - } - error = wait_until_socket_is_ready(sock2, connection_timeout_sec, - connection_timeout_usec); - if (error != Error::Success) { - return false; - } - } - - set_nonblocking(sock2, false); - - { -#ifdef _WIN32 - auto timeout = static_cast(read_timeout_sec * 1000 + - read_timeout_usec / 1000); - setsockopt(sock2, SOL_SOCKET, SO_RCVTIMEO, - reinterpret_cast(&timeout), sizeof(timeout)); -#else - timeval tv; - tv.tv_sec = static_cast(read_timeout_sec); - tv.tv_usec = static_cast(read_timeout_usec); - setsockopt(sock2, SOL_SOCKET, SO_RCVTIMEO, - reinterpret_cast(&tv), sizeof(tv)); -#endif - } - { - -#ifdef _WIN32 - auto timeout = static_cast(write_timeout_sec * 1000 + - write_timeout_usec / 1000); - setsockopt(sock2, SOL_SOCKET, SO_SNDTIMEO, - reinterpret_cast(&timeout), sizeof(timeout)); -#else - timeval tv; - tv.tv_sec = static_cast(write_timeout_sec); - tv.tv_usec = static_cast(write_timeout_usec); - setsockopt(sock2, SOL_SOCKET, SO_SNDTIMEO, - reinterpret_cast(&tv), sizeof(tv)); -#endif - } - - error = Error::Success; - return true; - }); - - if (sock != INVALID_SOCKET) { - error = Error::Success; - } else { - if (error == Error::Success) { - error = Error::Connection; - } - } - - return sock; - } - - inline bool get_ip_and_port(const struct sockaddr_storage &addr, socklen_t addr_len, - std::string &ip, int &port) { - if (addr.ss_family == AF_INET) { - port = ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - port = ntohs(reinterpret_cast(&addr)->sin6_port); - } else { - return false; - } - - std::array ipstr{}; - if (getnameinfo(reinterpret_cast(&addr), addr_len, - ipstr.data(), static_cast(ipstr.size()), nullptr, 0, - NI_NUMERICHOST)) { - return false; - } - - ip = ipstr.data(); - return true; - } - - inline void get_local_ip_and_port(socket_t sock, std::string &ip, int &port) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (!getsockname(sock, reinterpret_cast(&addr), &addr_len)) { - get_ip_and_port(addr, addr_len, ip, port); - } - } - - inline void get_remote_ip_and_port(socket_t sock, std::string &ip, int &port) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - - if (!getpeername(sock, reinterpret_cast(&addr), &addr_len)) { -#ifndef _WIN32 - if (addr.ss_family == AF_UNIX) { -#if defined(__linux__) - struct ucred ucred; - socklen_t len = sizeof(ucred); - if (getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &ucred, &len) == 0) { - port = ucred.pid; - } -#elif defined(SOL_LOCAL) && defined(SO_PEERPID) // __APPLE__ - pid_t pid; - socklen_t len = sizeof(pid); - if (getsockopt(sock, SOL_LOCAL, SO_PEERPID, &pid, &len) == 0) { - port = pid; - } -#endif - return; - } -#endif - get_ip_and_port(addr, addr_len, ip, port); - } - } - - inline constexpr unsigned int str2tag_core(const char *s, size_t l, unsigned int h) { - return (l == 0) - ? h - : str2tag_core(s + 1, l - 1, - // Unsets the 6 high bits of h, therefore no overflow happens - (((std::numeric_limits::max)() >> 6) & h * 33) ^ - static_cast(*s)); - } - - inline unsigned int str2tag(const std::string &s) { - return str2tag_core(s.data(), s.size(), 0); - } - - namespace udl { - - inline constexpr unsigned int operator"" _t(const char *s, size_t l) { - return str2tag_core(s, l, 0); - } - - } // namespace udl - - inline std::string find_content_type(const std::string &path, - const std::map &user_data, - const std::string &default_content_type) { - auto ext = file_extension(path); - - auto it = user_data.find(ext); - if (it != user_data.end()) { - return it->second; - } - - using udl::operator""_t; - - switch (str2tag(ext)) { - default: - return default_content_type; - - case "css"_t: - return "text/css"; - case "csv"_t: - return "text/csv"; - case "htm"_t: - case "html"_t: - return "text/html"; - case "js"_t: - case "mjs"_t: - return "text/javascript"; - case "txt"_t: - return "text/plain"; - case "vtt"_t: - return "text/vtt"; - - case "apng"_t: - return "image/apng"; - case "avif"_t: - return "image/avif"; - case "bmp"_t: - return "image/bmp"; - case "gif"_t: - return "image/gif"; - case "png"_t: - return "image/png"; - case "svg"_t: - return "image/svg+xml"; - case "webp"_t: - return "image/webp"; - case "ico"_t: - return "image/x-icon"; - case "tif"_t: - return "image/tiff"; - case "tiff"_t: - return "image/tiff"; - case "jpg"_t: - case "jpeg"_t: - return "image/jpeg"; - - case "mp4"_t: - return "video/mp4"; - case "mpeg"_t: - return "video/mpeg"; - case "webm"_t: - return "video/webm"; - - case "mp3"_t: - return "audio/mp3"; - case "mpga"_t: - return "audio/mpeg"; - case "weba"_t: - return "audio/webm"; - case "wav"_t: - return "audio/wave"; - - case "otf"_t: - return "font/otf"; - case "ttf"_t: - return "font/ttf"; - case "woff"_t: - return "font/woff"; - case "woff2"_t: - return "font/woff2"; - - case "7z"_t: - return "application/x-7z-compressed"; - case "atom"_t: - return "application/atom+xml"; - case "pdf"_t: - return "application/pdf"; - case "json"_t: - return "application/json"; - case "rss"_t: - return "application/rss+xml"; - case "tar"_t: - return "application/x-tar"; - case "xht"_t: - case "xhtml"_t: - return "application/xhtml+xml"; - case "xslt"_t: - return "application/xslt+xml"; - case "xml"_t: - return "application/xml"; - case "gz"_t: - return "application/gzip"; - case "zip"_t: - return "application/zip"; - case "wasm"_t: - return "application/wasm"; - } - } - - inline bool can_compress_content_type(const std::string &content_type) { - using udl::operator""_t; - - auto tag = str2tag(content_type); - - switch (tag) { - case "image/svg+xml"_t: - case "application/javascript"_t: - case "application/json"_t: - case "application/xml"_t: - case "application/protobuf"_t: - case "application/xhtml+xml"_t: - return true; - - default: - return !content_type.rfind("text/", 0) && tag != "text/event-stream"_t; - } - } - - inline EncodingType encoding_type(const Request &req, const Response &res) { - auto ret = detail::can_compress_content_type(res.get_header_value("Content-Type")); - if (!ret) { - return EncodingType::None; - } - - const auto &s = req.get_header_value("Accept-Encoding"); - (void)(s); - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - // TODO: 'Accept-Encoding' has br, not br;q=0 - ret = s.find("br") != std::string::npos; - if (ret) { - return EncodingType::Brotli; - } -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - // TODO: 'Accept-Encoding' has gzip, not gzip;q=0 - ret = s.find("gzip") != std::string::npos; - if (ret) { - return EncodingType::Gzip; - } -#endif - - return EncodingType::None; - } - - inline bool nocompressor::compress(const char *data, size_t data_length, bool /*last*/, - Callback callback) { - if (!data_length) { - return true; - } - return callback(data, data_length); - } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - inline gzip_compressor::gzip_compressor() { - std::memset(&strm_, 0, sizeof(strm_)); - strm_.zalloc = Z_NULL; - strm_.zfree = Z_NULL; - strm_.opaque = Z_NULL; - - is_valid_ = deflateInit2(&strm_, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 31, 8, - Z_DEFAULT_STRATEGY) == Z_OK; - } - - inline gzip_compressor::~gzip_compressor() { deflateEnd(&strm_); } - - inline bool gzip_compressor::compress(const char *data, size_t data_length, bool last, - Callback callback) { - assert(is_valid_); - - do { - constexpr size_t max_avail_in = - (std::numeric_limits::max)(); - - strm_.avail_in = - static_cast((std::min)(data_length, max_avail_in)); - strm_.next_in = const_cast(reinterpret_cast(data)); - - data_length -= strm_.avail_in; - data += strm_.avail_in; - - auto flush = (last && data_length == 0) ? Z_FINISH : Z_NO_FLUSH; - auto ret = Z_OK; - - std::array buff{}; - do { - strm_.avail_out = static_cast(buff.size()); - strm_.next_out = reinterpret_cast(buff.data()); - - ret = deflate(&strm_, flush); - if (ret == Z_STREAM_ERROR) { - return false; - } - - if (!callback(buff.data(), buff.size() - strm_.avail_out)) { - return false; - } - } while (strm_.avail_out == 0); - - assert((flush == Z_FINISH && ret == Z_STREAM_END) || - (flush == Z_NO_FLUSH && ret == Z_OK)); - assert(strm_.avail_in == 0); - } while (data_length > 0); - - return true; - } - - inline gzip_decompressor::gzip_decompressor() { - std::memset(&strm_, 0, sizeof(strm_)); - strm_.zalloc = Z_NULL; - strm_.zfree = Z_NULL; - strm_.opaque = Z_NULL; - - // 15 is the value of wbits, which should be at the maximum possible value - // to ensure that any gzip stream can be decoded. The offset of 32 specifies - // that the stream type should be automatically detected either gzip or - // deflate. - is_valid_ = inflateInit2(&strm_, 32 + 15) == Z_OK; - } - - inline gzip_decompressor::~gzip_decompressor() { inflateEnd(&strm_); } - - inline bool gzip_decompressor::is_valid() const { return is_valid_; } - - inline bool gzip_decompressor::decompress(const char *data, size_t data_length, - Callback callback) { - assert(is_valid_); - - auto ret = Z_OK; - - do { - constexpr size_t max_avail_in = - (std::numeric_limits::max)(); - - strm_.avail_in = - static_cast((std::min)(data_length, max_avail_in)); - strm_.next_in = const_cast(reinterpret_cast(data)); - - data_length -= strm_.avail_in; - data += strm_.avail_in; - - std::array buff{}; - while (strm_.avail_in > 0 && ret == Z_OK) { - strm_.avail_out = static_cast(buff.size()); - strm_.next_out = reinterpret_cast(buff.data()); - - ret = inflate(&strm_, Z_NO_FLUSH); - - assert(ret != Z_STREAM_ERROR); - switch (ret) { - case Z_NEED_DICT: - case Z_DATA_ERROR: - case Z_MEM_ERROR: - inflateEnd(&strm_); - return false; - } - - if (!callback(buff.data(), buff.size() - strm_.avail_out)) { - return false; - } - } - - if (ret != Z_OK && ret != Z_STREAM_END) { - return false; - } - - } while (data_length > 0); - - return true; - } -#endif - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - inline brotli_compressor::brotli_compressor() { - state_ = BrotliEncoderCreateInstance(nullptr, nullptr, nullptr); - } - - inline brotli_compressor::~brotli_compressor() { BrotliEncoderDestroyInstance(state_); } - - inline bool brotli_compressor::compress(const char *data, size_t data_length, bool last, - Callback callback) { - std::array buff{}; - - auto operation = last ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS; - auto available_in = data_length; - auto next_in = reinterpret_cast(data); - - for (;;) { - if (last) { - if (BrotliEncoderIsFinished(state_)) { - break; - } - } else { - if (!available_in) { - break; - } - } - - auto available_out = buff.size(); - auto next_out = buff.data(); - - if (!BrotliEncoderCompressStream(state_, operation, &available_in, &next_in, - &available_out, &next_out, nullptr)) { - return false; - } - - auto output_bytes = buff.size() - available_out; - if (output_bytes) { - callback(reinterpret_cast(buff.data()), output_bytes); - } - } - - return true; - } - - inline brotli_decompressor::brotli_decompressor() { - decoder_s = BrotliDecoderCreateInstance(0, 0, 0); - decoder_r = - decoder_s ? BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT : BROTLI_DECODER_RESULT_ERROR; - } - - inline brotli_decompressor::~brotli_decompressor() { - if (decoder_s) { - BrotliDecoderDestroyInstance(decoder_s); - } - } - - inline bool brotli_decompressor::is_valid() const { return decoder_s; } - - inline bool brotli_decompressor::decompress(const char *data, size_t data_length, - Callback callback) { - if (decoder_r == BROTLI_DECODER_RESULT_SUCCESS || - decoder_r == BROTLI_DECODER_RESULT_ERROR) { - return 0; - } - - auto next_in = reinterpret_cast(data); - size_t avail_in = data_length; - size_t total_out; - - decoder_r = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; - - std::array buff{}; - while (decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { - char *next_out = buff.data(); - size_t avail_out = buff.size(); - - decoder_r = BrotliDecoderDecompressStream( - decoder_s, &avail_in, &next_in, &avail_out, - reinterpret_cast(&next_out), &total_out); - - if (decoder_r == BROTLI_DECODER_RESULT_ERROR) { - return false; - } - - if (!callback(buff.data(), buff.size() - avail_out)) { - return false; - } - } - - return decoder_r == BROTLI_DECODER_RESULT_SUCCESS || - decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; - } -#endif - - inline bool has_header(const Headers &headers, const std::string &key) { - return headers.find(key) != headers.end(); - } - - inline const char *get_header_value(const Headers &headers, const std::string &key, - size_t id, const char *def) { - auto rng = headers.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { - return it->second.c_str(); - } - return def; - } - - inline bool compare_case_ignore(const std::string &a, const std::string &b) { - if (a.size() != b.size()) { - return false; - } - for (size_t i = 0; i < b.size(); i++) { - if (::tolower(a[i]) != ::tolower(b[i])) { - return false; - } - } - return true; - } - - template - inline bool parse_header(const char *beg, const char *end, T fn) { - // Skip trailing spaces and tabs. - while (beg < end && is_space_or_tab(end[-1])) { - end--; - } - - auto p = beg; - while (p < end && *p != ':') { - p++; - } - - if (p == end) { - return false; - } - - auto key_end = p; - - if (*p++ != ':') { - return false; - } - - while (p < end && is_space_or_tab(*p)) { - p++; - } - - if (p < end) { - auto key_len = key_end - beg; - if (!key_len) { - return false; - } - - auto key = std::string(beg, key_end); - auto val = compare_case_ignore(key, "Location") - ? std::string(p, end) - : decode_url(std::string(p, end), false); - fn(key, val); - return true; - } - - return false; - } - - inline bool read_headers(Stream &strm, Headers &headers) { - const auto bufsiz = 2048; - char buf[bufsiz]; - stream_line_reader line_reader(strm, buf, bufsiz); - - for (;;) { - if (!line_reader.getline()) { - return false; - } - - // Check if the line ends with CRLF. - auto line_terminator_len = 2; - if (line_reader.end_with_crlf()) { - // Blank line indicates end of headers. - if (line_reader.size() == 2) { - break; - } -#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR - } else { - // Blank line indicates end of headers. - if (line_reader.size() == 1) { - break; - } - line_terminator_len = 1; - } -#else - } else { - continue; // Skip invalid line. - } -#endif - - if (line_reader.size() > CPPHTTPLIB_HEADER_MAX_LENGTH) { - return false; - } - - // Exclude line terminator - auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; - - parse_header(line_reader.ptr(), end, - [&](const std::string &key, const std::string &val) { - headers.emplace(key, val); - }); - } - - return true; - } - - inline bool read_content_with_length(Stream &strm, uint64_t len, Progress progress, - ContentReceiverWithProgress out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { - return false; - } - - if (!out(buf, static_cast(n), r, len)) { - return false; - } - r += static_cast(n); - - if (progress) { - if (!progress(r, len)) { - return false; - } - } - } - - return true; - } - - inline void skip_content_with_length(Stream &strm, uint64_t len) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - uint64_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { - return; - } - r += static_cast(n); - } - } - - inline bool read_content_without_length(Stream &strm, ContentReceiverWithProgress out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - uint64_t r = 0; - for (;;) { - auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); - if (n <= 0) { - return true; - } - - if (!out(buf, static_cast(n), r, 0)) { - return false; - } - r += static_cast(n); - } - - return true; - } - - template - inline bool read_content_chunked(Stream &strm, T &x, ContentReceiverWithProgress out) { - const auto bufsiz = 16; - char buf[bufsiz]; - - stream_line_reader line_reader(strm, buf, bufsiz); - - if (!line_reader.getline()) { - return false; - } - - unsigned long chunk_len; - while (true) { - char *end_ptr; - - chunk_len = std::strtoul(line_reader.ptr(), &end_ptr, 16); - - if (end_ptr == line_reader.ptr()) { - return false; - } - if (chunk_len == ULONG_MAX) { - return false; - } - - if (chunk_len == 0) { - break; - } - - if (!read_content_with_length(strm, chunk_len, nullptr, out)) { - return false; - } - - if (!line_reader.getline()) { - return false; - } - - if (strcmp(line_reader.ptr(), "\r\n") != 0) { - return false; - } - - if (!line_reader.getline()) { - return false; - } - } - - assert(chunk_len == 0); - - // Trailer - if (!line_reader.getline()) { - return false; - } - - while (strcmp(line_reader.ptr(), "\r\n") != 0) { - if (line_reader.size() > CPPHTTPLIB_HEADER_MAX_LENGTH) { - return false; - } - - // Exclude line terminator - constexpr auto line_terminator_len = 2; - auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; - - parse_header(line_reader.ptr(), end, - [&](const std::string &key, const std::string &val) { - x.headers.emplace(key, val); - }); - - if (!line_reader.getline()) { - return false; - } - } - - return true; - } - - inline bool is_chunked_transfer_encoding(const Headers &headers) { - return compare_case_ignore(get_header_value(headers, "Transfer-Encoding", 0, ""), - "chunked"); - } - - template - bool prepare_content_receiver(T &x, int &status, ContentReceiverWithProgress receiver, - bool decompress, U callback) { - if (decompress) { - std::string encoding = x.get_header_value("Content-Encoding"); - std::unique_ptr decompressor; - - if (encoding == "gzip" || encoding == "deflate") { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - decompressor = detail::make_unique(); -#else - status = StatusCode::UnsupportedMediaType_415; - return false; -#endif - } else if (encoding.find("br") != std::string::npos) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - decompressor = detail::make_unique(); -#else - status = StatusCode::UnsupportedMediaType_415; - return false; -#endif - } - - if (decompressor) { - if (decompressor->is_valid()) { - ContentReceiverWithProgress out = [&](const char *buf, size_t n, - uint64_t off, uint64_t len) { - return decompressor->decompress(buf, n, - [&](const char *buf2, size_t n2) { - return receiver(buf2, n2, off, len); - }); - }; - return callback(std::move(out)); - } else { - status = StatusCode::InternalServerError_500; - return false; - } - } - } - - ContentReceiverWithProgress out = [&](const char *buf, size_t n, uint64_t off, - uint64_t len) { - return receiver(buf, n, off, len); - }; - return callback(std::move(out)); - } - - template - bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, - Progress progress, ContentReceiverWithProgress receiver, - bool decompress) { - return prepare_content_receiver( - x, status, std::move(receiver), decompress, - [&](const ContentReceiverWithProgress &out) { - auto ret = true; - auto exceed_payload_max_length = false; - - if (is_chunked_transfer_encoding(x.headers)) { - ret = read_content_chunked(strm, x, out); - } else if (!has_header(x.headers, "Content-Length")) { - ret = read_content_without_length(strm, out); - } else { - auto len = get_header_value_u64(x.headers, "Content-Length", 0, 0); - if (len > payload_max_length) { - exceed_payload_max_length = true; - skip_content_with_length(strm, len); - ret = false; - } else if (len > 0) { - ret = read_content_with_length(strm, len, std::move(progress), out); - } - } - - if (!ret) { - status = exceed_payload_max_length ? StatusCode::PayloadTooLarge_413 - : StatusCode::BadRequest_400; - } - return ret; - }); - } // namespace detail - - inline ssize_t write_headers(Stream &strm, const Headers &headers) { - ssize_t write_len = 0; - for (const auto &x : headers) { - auto len = strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); - if (len < 0) { - return len; - } - write_len += len; - } - auto len = strm.write("\r\n"); - if (len < 0) { - return len; - } - write_len += len; - return write_len; - } - - inline bool write_data(Stream &strm, const char *d, size_t l) { - size_t offset = 0; - while (offset < l) { - auto length = strm.write(d + offset, l - offset); - if (length < 0) { - return false; - } - offset += static_cast(length); - } - return true; - } - - template - inline bool write_content(Stream &strm, const ContentProvider &content_provider, - size_t offset, size_t length, T is_shutting_down, Error &error) { - size_t end_offset = offset + length; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) -> bool { - if (ok) { - if (strm.is_writable() && write_data(strm, d, l)) { - offset += l; - } else { - ok = false; - } - } - return ok; - }; - - data_sink.is_writable = [&]() -> bool { return strm.is_writable(); }; - - while (offset < end_offset && !is_shutting_down()) { - if (!strm.is_writable()) { - error = Error::Write; - return false; - } else if (!content_provider(offset, end_offset - offset, data_sink)) { - error = Error::Canceled; - return false; - } else if (!ok) { - error = Error::Write; - return false; - } - } - - error = Error::Success; - return true; - } - - template - inline bool write_content(Stream &strm, const ContentProvider &content_provider, - size_t offset, size_t length, const T &is_shutting_down) { - auto error = Error::Success; - return write_content(strm, content_provider, offset, length, is_shutting_down, error); - } - - template - inline bool write_content_without_length(Stream &strm, - const ContentProvider &content_provider, - const T &is_shutting_down) { - size_t offset = 0; - auto data_available = true; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) -> bool { - if (ok) { - offset += l; - if (!strm.is_writable() || !write_data(strm, d, l)) { - ok = false; - } - } - return ok; - }; - - data_sink.is_writable = [&]() -> bool { return strm.is_writable(); }; - - data_sink.done = [&](void) { data_available = false; }; - - while (data_available && !is_shutting_down()) { - if (!strm.is_writable()) { - return false; - } else if (!content_provider(offset, 0, data_sink)) { - return false; - } else if (!ok) { - return false; - } - } - return true; - } - - template - inline bool write_content_chunked(Stream &strm, const ContentProvider &content_provider, - const T &is_shutting_down, U &compressor, Error &error) { - size_t offset = 0; - auto data_available = true; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) -> bool { - if (ok) { - data_available = l > 0; - offset += l; - - std::string payload; - if (compressor.compress(d, l, false, [&](const char *data, size_t data_len) { - payload.append(data, data_len); - return true; - })) { - if (!payload.empty()) { - // Emit chunked response header and footer for each chunk - auto chunk = from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; - if (!strm.is_writable() || - !write_data(strm, chunk.data(), chunk.size())) { - ok = false; - } - } - } else { - ok = false; - } - } - return ok; - }; - - data_sink.is_writable = [&]() -> bool { return strm.is_writable(); }; - - auto done_with_trailer = [&](const Headers *trailer) { - if (!ok) { - return; - } - - data_available = false; - - std::string payload; - if (!compressor.compress(nullptr, 0, true, [&](const char *data, size_t data_len) { - payload.append(data, data_len); - return true; - })) { - ok = false; - return; - } - - if (!payload.empty()) { - // Emit chunked response header and footer for each chunk - auto chunk = from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; - if (!strm.is_writable() || !write_data(strm, chunk.data(), chunk.size())) { - ok = false; - return; - } - } - - static const std::string done_marker("0\r\n"); - if (!write_data(strm, done_marker.data(), done_marker.size())) { - ok = false; - } - - // Trailer - if (trailer) { - for (const auto &kv : *trailer) { - std::string field_line = kv.first + ": " + kv.second + "\r\n"; - if (!write_data(strm, field_line.data(), field_line.size())) { - ok = false; - } - } - } - - static const std::string crlf("\r\n"); - if (!write_data(strm, crlf.data(), crlf.size())) { - ok = false; - } - }; - - data_sink.done = [&](void) { done_with_trailer(nullptr); }; - - data_sink.done_with_trailer = [&](const Headers &trailer) { - done_with_trailer(&trailer); - }; - - while (data_available && !is_shutting_down()) { - if (!strm.is_writable()) { - error = Error::Write; - return false; - } else if (!content_provider(offset, 0, data_sink)) { - error = Error::Canceled; - return false; - } else if (!ok) { - error = Error::Write; - return false; - } - } - - error = Error::Success; - return true; - } - - template - inline bool write_content_chunked(Stream &strm, const ContentProvider &content_provider, - const T &is_shutting_down, U &compressor) { - auto error = Error::Success; - return write_content_chunked(strm, content_provider, is_shutting_down, compressor, - error); - } - - template - inline bool redirect(T &cli, Request &req, Response &res, const std::string &path, - const std::string &location, Error &error) { - Request new_req = req; - new_req.path = path; - new_req.redirect_count_ -= 1; - - if (res.status == StatusCode::SeeOther_303 && - (req.method != "GET" && req.method != "HEAD")) { - new_req.method = "GET"; - new_req.body.clear(); - new_req.headers.clear(); - } - - Response new_res; - - auto ret = cli.send(new_req, new_res, error); - if (ret) { - req = new_req; - res = new_res; - - if (res.location.empty()) { - res.location = location; - } - } - return ret; - } - - inline std::string params_to_query_str(const Params ¶ms) { - std::string query; - - for (auto it = params.begin(); it != params.end(); ++it) { - if (it != params.begin()) { - query += "&"; - } - query += it->first; - query += "="; - query += encode_query_param(it->second); - } - return query; - } - - inline void parse_query_text(const char *data, std::size_t size, Params ¶ms) { - std::set cache; - split(data, data + size, '&', [&](const char *b, const char *e) { - std::string kv(b, e); - if (cache.find(kv) != cache.end()) { - return; - } - cache.insert(std::move(kv)); - - std::string key; - std::string val; - divide(b, static_cast(e - b), '=', - [&](const char *lhs_data, std::size_t lhs_size, const char *rhs_data, - std::size_t rhs_size) { - key.assign(lhs_data, lhs_size); - val.assign(rhs_data, rhs_size); - }); - - if (!key.empty()) { - params.emplace(decode_url(key, true), decode_url(val, true)); - } - }); - } - - inline void parse_query_text(const std::string &s, Params ¶ms) { - parse_query_text(s.data(), s.size(), params); - } - - inline bool parse_multipart_boundary(const std::string &content_type, - std::string &boundary) { - auto boundary_keyword = "boundary="; - auto pos = content_type.find(boundary_keyword); - if (pos == std::string::npos) { - return false; - } - auto end = content_type.find(';', pos); - auto beg = pos + strlen(boundary_keyword); - boundary = trim_double_quotes_copy(content_type.substr(beg, end - beg)); - return !boundary.empty(); - } - - inline void parse_disposition_params(const std::string &s, Params ¶ms) { - std::set cache; - split(s.data(), s.data() + s.size(), ';', [&](const char *b, const char *e) { - std::string kv(b, e); - if (cache.find(kv) != cache.end()) { - return; - } - cache.insert(kv); - - std::string key; - std::string val; - split(b, e, '=', [&](const char *b2, const char *e2) { - if (key.empty()) { - key.assign(b2, e2); - } else { - val.assign(b2, e2); - } - }); - - if (!key.empty()) { - params.emplace(trim_double_quotes_copy((key)), trim_double_quotes_copy((val))); - } - }); - } - -#ifdef CPPHTTPLIB_NO_EXCEPTIONS - inline bool parse_range_header(const std::string &s, Ranges &ranges) { -#else - inline bool parse_range_header(const std::string &s, Ranges &ranges) try { -#endif - auto is_valid = [](const std::string &str) { - return std::all_of(str.cbegin(), str.cend(), - [](unsigned char c) { return std::isdigit(c); }); - }; - - if (s.size() > 7 && s.compare(0, 6, "bytes=") == 0) { - const auto pos = static_cast(6); - const auto len = static_cast(s.size() - 6); - auto all_valid_ranges = true; - split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { - if (!all_valid_ranges) { - return; - } - - const auto it = std::find(b, e, '-'); - if (it == e) { - all_valid_ranges = false; - return; - } - - const auto lhs = std::string(b, it); - const auto rhs = std::string(it + 1, e); - if (!is_valid(lhs) || !is_valid(rhs)) { - all_valid_ranges = false; - return; - } - - const auto first = static_cast(lhs.empty() ? -1 : std::stoll(lhs)); - const auto last = static_cast(rhs.empty() ? -1 : std::stoll(rhs)); - if ((first == -1 && last == -1) || - (first != -1 && last != -1 && first > last)) { - all_valid_ranges = false; - return; - } - - ranges.emplace_back(first, last); - }); - return all_valid_ranges && !ranges.empty(); - } - return false; -#ifdef CPPHTTPLIB_NO_EXCEPTIONS - } -#else - } catch (...) { - return false; - } -#endif - - class MultipartFormDataParser { - public: - MultipartFormDataParser() = default; - - void set_boundary(std::string &&boundary) { - boundary_ = boundary; - dash_boundary_crlf_ = dash_ + boundary_ + crlf_; - crlf_dash_boundary_ = crlf_ + dash_ + boundary_; - } - - bool is_valid() const { return is_valid_; } - - bool parse(const char *buf, size_t n, const ContentReceiver &content_callback, - const MultipartContentHeader &header_callback) { - buf_append(buf, n); - - while (buf_size() > 0) { - switch (state_) { - case 0: { // Initial boundary - buf_erase(buf_find(dash_boundary_crlf_)); - if (dash_boundary_crlf_.size() > buf_size()) { - return true; - } - if (!buf_start_with(dash_boundary_crlf_)) { - return false; - } - buf_erase(dash_boundary_crlf_.size()); - state_ = 1; - break; - } - case 1: { // New entry - clear_file_info(); - state_ = 2; - break; - } - case 2: { // Headers - auto pos = buf_find(crlf_); - if (pos > CPPHTTPLIB_HEADER_MAX_LENGTH) { - return false; - } - while (pos < buf_size()) { - // Empty line - if (pos == 0) { - if (!header_callback(file_)) { - is_valid_ = false; - return false; - } - buf_erase(crlf_.size()); - state_ = 3; - break; - } - - const auto header = buf_head(pos); - - if (!parse_header( - header.data(), header.data() + header.size(), - [&](const std::string &, const std::string &) {})) { - is_valid_ = false; - return false; - } - - static const std::string header_content_type = "Content-Type:"; - - if (start_with_case_ignore(header, header_content_type)) { - file_.content_type = - trim_copy(header.substr(header_content_type.size())); - } else { - static const std::regex re_content_disposition( - R"~(^Content-Disposition:\s*form-data;\s*(.*)$)~", - std::regex_constants::icase); - - std::smatch m; - if (std::regex_match(header, m, re_content_disposition)) { - Params params; - parse_disposition_params(m[1], params); - - auto it = params.find("name"); - if (it != params.end()) { - file_.name = it->second; - } else { - is_valid_ = false; - return false; - } - - it = params.find("filename"); - if (it != params.end()) { - file_.filename = it->second; - } - - it = params.find("filename*"); - if (it != params.end()) { - // Only allow UTF-8 enconnding... - static const std::regex re_rfc5987_encoding( - R"~(^UTF-8''(.+?)$)~", std::regex_constants::icase); - - std::smatch m2; - if (std::regex_match(it->second, m2, - re_rfc5987_encoding)) { - file_.filename = - decode_url(m2[1], false); // override... - } else { - is_valid_ = false; - return false; - } - } - } - } - buf_erase(pos + crlf_.size()); - pos = buf_find(crlf_); - } - if (state_ != 3) { - return true; - } - break; - } - case 3: { // Body - if (crlf_dash_boundary_.size() > buf_size()) { - return true; - } - auto pos = buf_find(crlf_dash_boundary_); - if (pos < buf_size()) { - if (!content_callback(buf_data(), pos)) { - is_valid_ = false; - return false; - } - buf_erase(pos + crlf_dash_boundary_.size()); - state_ = 4; - } else { - auto len = buf_size() - crlf_dash_boundary_.size(); - if (len > 0) { - if (!content_callback(buf_data(), len)) { - is_valid_ = false; - return false; - } - buf_erase(len); - } - return true; - } - break; - } - case 4: { // Boundary - if (crlf_.size() > buf_size()) { - return true; - } - if (buf_start_with(crlf_)) { - buf_erase(crlf_.size()); - state_ = 1; - } else { - if (dash_.size() > buf_size()) { - return true; - } - if (buf_start_with(dash_)) { - buf_erase(dash_.size()); - is_valid_ = true; - buf_erase(buf_size()); // Remove epilogue - } else { - return true; - } - } - break; - } - } - } - - return true; - } - - private: - void clear_file_info() { - file_.name.clear(); - file_.filename.clear(); - file_.content_type.clear(); - } - - bool start_with_case_ignore(const std::string &a, const std::string &b) const { - if (a.size() < b.size()) { - return false; - } - for (size_t i = 0; i < b.size(); i++) { - if (::tolower(a[i]) != ::tolower(b[i])) { - return false; - } - } - return true; - } - - const std::string dash_ = "--"; - const std::string crlf_ = "\r\n"; - std::string boundary_; - std::string dash_boundary_crlf_; - std::string crlf_dash_boundary_; - - size_t state_ = 0; - bool is_valid_ = false; - MultipartFormData file_; - - // Buffer - bool start_with(const std::string &a, size_t spos, size_t epos, - const std::string &b) const { - if (epos - spos < b.size()) { - return false; - } - for (size_t i = 0; i < b.size(); i++) { - if (a[i + spos] != b[i]) { - return false; - } - } - return true; - } - - size_t buf_size() const { return buf_epos_ - buf_spos_; } - - const char *buf_data() const { return &buf_[buf_spos_]; } - - std::string buf_head(size_t l) const { return buf_.substr(buf_spos_, l); } - - bool buf_start_with(const std::string &s) const { - return start_with(buf_, buf_spos_, buf_epos_, s); - } - - size_t buf_find(const std::string &s) const { - auto c = s.front(); - - size_t off = buf_spos_; - while (off < buf_epos_) { - auto pos = off; - while (true) { - if (pos == buf_epos_) { - return buf_size(); - } - if (buf_[pos] == c) { - break; - } - pos++; - } - - auto remaining_size = buf_epos_ - pos; - if (s.size() > remaining_size) { - return buf_size(); - } - - if (start_with(buf_, pos, buf_epos_, s)) { - return pos - buf_spos_; - } - - off = pos + 1; - } - - return buf_size(); - } - - void buf_append(const char *data, size_t n) { - auto remaining_size = buf_size(); - if (remaining_size > 0 && buf_spos_ > 0) { - for (size_t i = 0; i < remaining_size; i++) { - buf_[i] = buf_[buf_spos_ + i]; - } - } - buf_spos_ = 0; - buf_epos_ = remaining_size; - - if (remaining_size + n > buf_.size()) { - buf_.resize(remaining_size + n); - } - - for (size_t i = 0; i < n; i++) { - buf_[buf_epos_ + i] = data[i]; - } - buf_epos_ += n; - } - - void buf_erase(size_t size) { buf_spos_ += size; } - - std::string buf_; - size_t buf_spos_ = 0; - size_t buf_epos_ = 0; - }; - - inline std::string to_lower(const char *beg, const char *end) { - std::string out; - auto it = beg; - while (it != end) { - out += static_cast(::tolower(*it)); - it++; - } - return out; - } - - inline std::string random_string(size_t length) { - static const char data[] = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - // std::random_device might actually be deterministic on some - // platforms, but due to lack of support in the c++ standard library, - // doing better requires either some ugly hacks or breaking portability. - static std::random_device seed_gen; - - // Request 128 bits of entropy for initialization - static std::seed_seq seed_sequence{seed_gen(), seed_gen(), seed_gen(), seed_gen()}; - - static std::mt19937 engine(seed_sequence); - - std::string result; - for (size_t i = 0; i < length; i++) { - result += data[engine() % (sizeof(data) - 1)]; - } - return result; - } - - inline std::string make_multipart_data_boundary() { - return "--cpp-httplib-multipart-data-" + detail::random_string(16); - } - - inline bool is_multipart_boundary_chars_valid(const std::string &boundary) { - auto valid = true; - for (size_t i = 0; i < boundary.size(); i++) { - auto c = boundary[i]; - if (!std::isalnum(c) && c != '-' && c != '_') { - valid = false; - break; - } - } - return valid; - } - - template - inline std::string serialize_multipart_formdata_item_begin(const T &item, - const std::string &boundary) { - std::string body = "--" + boundary + "\r\n"; - body += "Content-Disposition: form-data; name=\"" + item.name + "\""; - if (!item.filename.empty()) { - body += "; filename=\"" + item.filename + "\""; - } - body += "\r\n"; - if (!item.content_type.empty()) { - body += "Content-Type: " + item.content_type + "\r\n"; - } - body += "\r\n"; - - return body; - } - - inline std::string serialize_multipart_formdata_item_end() { return "\r\n"; } - - inline std::string serialize_multipart_formdata_finish(const std::string &boundary) { - return "--" + boundary + "--\r\n"; - } - - inline std::string serialize_multipart_formdata_get_content_type( - const std::string &boundary) { - return "multipart/form-data; boundary=" + boundary; - } - - inline std::string serialize_multipart_formdata(const MultipartFormDataItems &items, - const std::string &boundary, - bool finish = true) { - std::string body; - - for (const auto &item : items) { - body += serialize_multipart_formdata_item_begin(item, boundary); - body += item.content + serialize_multipart_formdata_item_end(); - } - - if (finish) { - body += serialize_multipart_formdata_finish(boundary); - } - - return body; - } - - inline bool range_error(Request &req, Response &res) { - if (!req.ranges.empty() && 200 <= res.status && res.status < 300) { - ssize_t contant_len = static_cast(res.content_length_ ? res.content_length_ - : res.body.size()); - - ssize_t prev_first_pos = -1; - ssize_t prev_last_pos = -1; - size_t overwrapping_count = 0; - - // NOTE: The following Range check is based on '14.2. Range' in RFC 9110 - // 'HTTP Semantics' to avoid potential denial-of-service attacks. - // https://www.rfc-editor.org/rfc/rfc9110#section-14.2 - - // Too many ranges - if (req.ranges.size() > CPPHTTPLIB_RANGE_MAX_COUNT) { - return true; - } - - for (auto &r : req.ranges) { - auto &first_pos = r.first; - auto &last_pos = r.second; - - if (first_pos == -1 && last_pos == -1) { - first_pos = 0; - last_pos = contant_len; - } - - if (first_pos == -1) { - first_pos = contant_len - last_pos; - last_pos = contant_len - 1; - } - - if (last_pos == -1) { - last_pos = contant_len - 1; - } - - // Range must be within content length - if (!(0 <= first_pos && first_pos <= last_pos && last_pos <= contant_len - 1)) { - return true; - } - - // Ranges must be in ascending order - if (first_pos <= prev_first_pos) { - return true; - } - - // Request must not have more than two overlapping ranges - if (first_pos <= prev_last_pos) { - overwrapping_count++; - if (overwrapping_count > 2) { - return true; - } - } - - prev_first_pos = (std::max)(prev_first_pos, first_pos); - prev_last_pos = (std::max)(prev_last_pos, last_pos); - } - } - - return false; - } - - inline std::pair get_range_offset_and_length(Range r, - size_t content_length) { - assert(r.first != -1 && r.second != -1); - assert(0 <= r.first && r.first < static_cast(content_length)); - assert(r.first <= r.second && r.second < static_cast(content_length)); - (void)(content_length); - return std::make_pair(r.first, static_cast(r.second - r.first) + 1); - } - - inline std::string make_content_range_header_field( - const std::pair &offset_and_length, size_t content_length) { - auto st = offset_and_length.first; - auto ed = st + offset_and_length.second - 1; - - std::string field = "bytes "; - field += std::to_string(st); - field += "-"; - field += std::to_string(ed); - field += "/"; - field += std::to_string(content_length); - return field; - } - - template - bool process_multipart_ranges_data(const Request &req, const std::string &boundary, - const std::string &content_type, size_t content_length, - SToken stoken, CToken ctoken, Content content) { - for (size_t i = 0; i < req.ranges.size(); i++) { - ctoken("--"); - stoken(boundary); - ctoken("\r\n"); - if (!content_type.empty()) { - ctoken("Content-Type: "); - stoken(content_type); - ctoken("\r\n"); - } - - auto offset_and_length = get_range_offset_and_length(req.ranges[i], content_length); - - ctoken("Content-Range: "); - stoken(make_content_range_header_field(offset_and_length, content_length)); - ctoken("\r\n"); - ctoken("\r\n"); - - if (!content(offset_and_length.first, offset_and_length.second)) { - return false; - } - ctoken("\r\n"); - } - - ctoken("--"); - stoken(boundary); - ctoken("--"); - - return true; - } - - inline void make_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - size_t content_length, std::string &data) { - process_multipart_ranges_data( - req, boundary, content_type, content_length, - [&](const std::string &token) { data += token; }, - [&](const std::string &token) { data += token; }, - [&](size_t offset, size_t length) { - assert(offset + length <= content_length); - data += res.body.substr(offset, length); - return true; - }); - } - - inline size_t get_multipart_ranges_data_length(const Request &req, - const std::string &boundary, - const std::string &content_type, - size_t content_length) { - size_t data_length = 0; - - process_multipart_ranges_data( - req, boundary, content_type, content_length, - [&](const std::string &token) { data_length += token.size(); }, - [&](const std::string &token) { data_length += token.size(); }, - [&](size_t /*offset*/, size_t length) { - data_length += length; - return true; - }); - - return data_length; - } - - template - inline bool write_multipart_ranges_data(Stream &strm, const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - size_t content_length, const T &is_shutting_down) { - return process_multipart_ranges_data( - req, boundary, content_type, content_length, - [&](const std::string &token) { strm.write(token); }, - [&](const std::string &token) { strm.write(token); }, - [&](size_t offset, size_t length) { - return write_content(strm, res.content_provider_, offset, length, - is_shutting_down); - }); - } - - inline bool expect_content(const Request &req) { - if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || - req.method == "PRI" || req.method == "DELETE") { - return true; - } - // TODO: check if Content-Length is set - return false; - } - - inline bool has_crlf(const std::string &s) { - auto p = s.c_str(); - while (*p) { - if (*p == '\r' || *p == '\n') { - return true; - } - p++; - } - return false; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline std::string message_digest(const std::string &s, const EVP_MD *algo) { - auto context = std::unique_ptr(EVP_MD_CTX_new(), - EVP_MD_CTX_free); - - unsigned int hash_length = 0; - unsigned char hash[EVP_MAX_MD_SIZE]; - - EVP_DigestInit_ex(context.get(), algo, nullptr); - EVP_DigestUpdate(context.get(), s.c_str(), s.size()); - EVP_DigestFinal_ex(context.get(), hash, &hash_length); - - std::stringstream ss; - for (auto i = 0u; i < hash_length; ++i) { - ss << std::hex << std::setw(2) << std::setfill('0') - << static_cast(hash[i]); - } - - return ss.str(); - } - - inline std::string MD5(const std::string &s) { return message_digest(s, EVP_md5()); } - - inline std::string SHA_256(const std::string &s) { return message_digest(s, EVP_sha256()); } - - inline std::string SHA_512(const std::string &s) { return message_digest(s, EVP_sha512()); } -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -#ifdef _WIN32 - // NOTE: This code came up with the following stackoverflow post: - // https://stackoverflow.com/questions/9507184/can-openssl-on-windows-use-the-system-certificate-store - inline bool load_system_certs_on_windows(X509_STORE *store) { - auto hStore = CertOpenSystemStoreW((HCRYPTPROV_LEGACY)NULL, L"ROOT"); - if (!hStore) { - return false; - } - - auto result = false; - PCCERT_CONTEXT pContext = NULL; - while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != nullptr) { - auto encoded_cert = static_cast(pContext->pbCertEncoded); - - auto x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded); - if (x509) { - X509_STORE_add_cert(store, x509); - X509_free(x509); - result = true; - } - } - - CertFreeCertificateContext(pContext); - CertCloseStore(hStore, 0); - - return result; - } -#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && defined(__APPLE__) -#if TARGET_OS_OSX - template - using CFObjectPtr = - std::unique_ptr::type, void (*)(CFTypeRef)>; - - inline void cf_object_ptr_deleter(CFTypeRef obj) { - if (obj) { - CFRelease(obj); - } - } - - inline bool retrieve_certs_from_keychain(CFObjectPtr &certs) { - CFStringRef keys[] = {kSecClass, kSecMatchLimit, kSecReturnRef}; - CFTypeRef values[] = {kSecClassCertificate, kSecMatchLimitAll, kCFBooleanTrue}; - - CFObjectPtr query( - CFDictionaryCreate(nullptr, reinterpret_cast(keys), values, - sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks), - cf_object_ptr_deleter); - - if (!query) { - return false; - } - - CFTypeRef security_items = nullptr; - if (SecItemCopyMatching(query.get(), &security_items) != errSecSuccess || - CFArrayGetTypeID() != CFGetTypeID(security_items)) { - return false; - } - - certs.reset(reinterpret_cast(security_items)); - return true; - } - - inline bool retrieve_root_certs_from_keychain(CFObjectPtr &certs) { - CFArrayRef root_security_items = nullptr; - if (SecTrustCopyAnchorCertificates(&root_security_items) != errSecSuccess) { - return false; - } - - certs.reset(root_security_items); - return true; - } - - inline bool add_certs_to_x509_store(CFArrayRef certs, X509_STORE *store) { - auto result = false; - for (auto i = 0; i < CFArrayGetCount(certs); ++i) { - const auto cert = - reinterpret_cast(CFArrayGetValueAtIndex(certs, i)); - - if (SecCertificateGetTypeID() != CFGetTypeID(cert)) { - continue; - } - - CFDataRef cert_data = nullptr; - if (SecItemExport(cert, kSecFormatX509Cert, 0, nullptr, &cert_data) != - errSecSuccess) { - continue; - } - - CFObjectPtr cert_data_ptr(cert_data, cf_object_ptr_deleter); - - auto encoded_cert = - static_cast(CFDataGetBytePtr(cert_data_ptr.get())); - - auto x509 = d2i_X509(NULL, &encoded_cert, CFDataGetLength(cert_data_ptr.get())); - - if (x509) { - X509_STORE_add_cert(store, x509); - X509_free(x509); - result = true; - } - } - - return result; - } - - inline bool load_system_certs_on_macos(X509_STORE *store) { - auto result = false; - CFObjectPtr certs(nullptr, cf_object_ptr_deleter); - if (retrieve_certs_from_keychain(certs) && certs) { - result = add_certs_to_x509_store(certs.get(), store); - } - - if (retrieve_root_certs_from_keychain(certs) && certs) { - result = add_certs_to_x509_store(certs.get(), store) || result; - } - - return result; - } -#endif // TARGET_OS_OSX -#endif // _WIN32 -#endif // CPPHTTPLIB_OPENSSL_SUPPORT - -#ifdef _WIN32 - class WSInit { - public: - WSInit() { - WSADATA wsaData; - if (WSAStartup(0x0002, &wsaData) == 0) is_valid_ = true; - } - - ~WSInit() { - if (is_valid_) WSACleanup(); - } - - bool is_valid_ = false; - }; - - static WSInit wsinit_; -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline std::pair make_digest_authentication_header( - const Request &req, const std::map &auth, size_t cnonce_count, - const std::string &cnonce, const std::string &username, const std::string &password, - bool is_proxy = false) { - std::string nc; - { - std::stringstream ss; - ss << std::setfill('0') << std::setw(8) << std::hex << cnonce_count; - nc = ss.str(); - } - - std::string qop; - if (auth.find("qop") != auth.end()) { - qop = auth.at("qop"); - if (qop.find("auth-int") != std::string::npos) { - qop = "auth-int"; - } else if (qop.find("auth") != std::string::npos) { - qop = "auth"; - } else { - qop.clear(); - } - } - - std::string algo = "MD5"; - if (auth.find("algorithm") != auth.end()) { - algo = auth.at("algorithm"); - } - - std::string response; - { - auto H = algo == "SHA-256" ? detail::SHA_256 - : algo == "SHA-512" ? detail::SHA_512 - : detail::MD5; - - auto A1 = username + ":" + auth.at("realm") + ":" + password; - - auto A2 = req.method + ":" + req.path; - if (qop == "auth-int") { - A2 += ":" + H(req.body); - } - - if (qop.empty()) { - response = H(H(A1) + ":" + auth.at("nonce") + ":" + H(A2)); - } else { - response = H(H(A1) + ":" + auth.at("nonce") + ":" + nc + ":" + cnonce + ":" + - qop + ":" + H(A2)); - } - } - - auto opaque = (auth.find("opaque") != auth.end()) ? auth.at("opaque") : ""; - - auto field = "Digest username=\"" + username + "\", realm=\"" + auth.at("realm") + - "\", nonce=\"" + auth.at("nonce") + "\", uri=\"" + req.path + - "\", algorithm=" + algo + - (qop.empty() ? ", response=\"" - : ", qop=" + qop + ", nc=" + nc + ", cnonce=\"" + cnonce + - "\", response=\"") + - response + "\"" + (opaque.empty() ? "" : ", opaque=\"" + opaque + "\""); - - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, field); - } -#endif - - inline bool parse_www_authenticate(const Response &res, - std::map &auth, - bool is_proxy) { - auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; - if (res.has_header(auth_key)) { - static auto re = std::regex(R"~((?:(?:,\s*)?(.+?)=(?:"(.*?)"|([^,]*))))~"); - auto s = res.get_header_value(auth_key); - auto pos = s.find(' '); - if (pos != std::string::npos) { - auto type = s.substr(0, pos); - if (type == "Basic") { - return false; - } else if (type == "Digest") { - s = s.substr(pos + 1); - auto beg = std::sregex_iterator(s.begin(), s.end(), re); - for (auto i = beg; i != std::sregex_iterator(); ++i) { - const auto &m = *i; - auto key = s.substr(static_cast(m.position(1)), - static_cast(m.length(1))); - auto val = m.length(2) > 0 - ? s.substr(static_cast(m.position(2)), - static_cast(m.length(2))) - : s.substr(static_cast(m.position(3)), - static_cast(m.length(3))); - auth[key] = val; - } - return true; - } - } - } - return false; - } - - class ContentProviderAdapter { - public: - explicit ContentProviderAdapter(ContentProviderWithoutLength &&content_provider) - : content_provider_(content_provider) {} - - bool operator()(size_t offset, size_t, DataSink &sink) { - return content_provider_(offset, sink); - } - - private: - ContentProviderWithoutLength content_provider_; - }; - - } // namespace detail - - inline std::string hosted_at(const std::string &hostname) { - std::vector addrs; - hosted_at(hostname, addrs); - if (addrs.empty()) { - return std::string(); - } - return addrs[0]; - } - - inline void hosted_at(const std::string &hostname, std::vector &addrs) { - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (getaddrinfo(hostname.c_str(), nullptr, &hints, &result)) { -#if defined __linux__ && !defined __ANDROID__ - res_init(); -#endif - return; - } - - for (auto rp = result; rp; rp = rp->ai_next) { - const auto &addr = *reinterpret_cast(rp->ai_addr); - std::string ip; - auto dummy = -1; - if (detail::get_ip_and_port(addr, sizeof(struct sockaddr_storage), ip, dummy)) { - addrs.push_back(ip); - } - } - - freeaddrinfo(result); - } - - inline std::string append_query_params(const std::string &path, const Params ¶ms) { - std::string path_with_query = path; - const static std::regex re("[^?]+\\?.*"); - auto delm = std::regex_match(path, re) ? '&' : '?'; - path_with_query += delm + detail::params_to_query_str(params); - return path_with_query; - } - - // Header utilities - inline std::pair make_range_header(const Ranges &ranges) { - std::string field = "bytes="; - auto i = 0; - for (const auto &r : ranges) { - if (i != 0) { - field += ", "; - } - if (r.first != -1) { - field += std::to_string(r.first); - } - field += '-'; - if (r.second != -1) { - field += std::to_string(r.second); - } - i++; - } - return std::make_pair("Range", std::move(field)); - } - - inline std::pair make_basic_authentication_header( - const std::string &username, const std::string &password, bool is_proxy) { - auto field = "Basic " + detail::base64_encode(username + ":" + password); - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, std::move(field)); - } - - inline std::pair make_bearer_token_authentication_header( - const std::string &token, bool is_proxy = false) { - auto field = "Bearer " + token; - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, std::move(field)); - } - - // Request implementation - inline bool Request::has_header(const std::string &key) const { - return detail::has_header(headers, key); - } - - inline std::string Request::get_header_value(const std::string &key, size_t id) const { - return detail::get_header_value(headers, key, id, ""); - } - - inline size_t Request::get_header_value_count(const std::string &key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); - } - - inline void Request::set_header(const std::string &key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } - } - - inline bool Request::has_param(const std::string &key) const { - return params.find(key) != params.end(); - } - - inline std::string Request::get_param_value(const std::string &key, size_t id) const { - auto rng = params.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { - return it->second; - } - return std::string(); - } - - inline size_t Request::get_param_value_count(const std::string &key) const { - auto r = params.equal_range(key); - return static_cast(std::distance(r.first, r.second)); - } - - inline bool Request::is_multipart_form_data() const { - const auto &content_type = get_header_value("Content-Type"); - return !content_type.rfind("multipart/form-data", 0); - } - - inline bool Request::has_file(const std::string &key) const { - return files.find(key) != files.end(); - } - - inline MultipartFormData Request::get_file_value(const std::string &key) const { - auto it = files.find(key); - if (it != files.end()) { - return it->second; - } - return MultipartFormData(); - } - - inline std::vector Request::get_file_values(const std::string &key) const { - std::vector values; - auto rng = files.equal_range(key); - for (auto it = rng.first; it != rng.second; it++) { - values.push_back(it->second); - } - return values; - } - - // Response implementation - inline bool Response::has_header(const std::string &key) const { - return headers.find(key) != headers.end(); - } - - inline std::string Response::get_header_value(const std::string &key, size_t id) const { - return detail::get_header_value(headers, key, id, ""); - } - - inline size_t Response::get_header_value_count(const std::string &key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); - } - - inline void Response::set_header(const std::string &key, const std::string &val) { - if (!detail::has_crlf(key) && !detail::has_crlf(val)) { - headers.emplace(key, val); - } - } - - inline void Response::set_redirect(const std::string &url, int stat) { - if (!detail::has_crlf(url)) { - set_header("Location", url); - if (300 <= stat && stat < 400) { - this->status = stat; - } else { - this->status = StatusCode::Found_302; - } - } - } - - inline void Response::set_content(const char *s, size_t n, const std::string &content_type) { - body.assign(s, n); - - auto rng = headers.equal_range("Content-Type"); - headers.erase(rng.first, rng.second); - set_header("Content-Type", content_type); - } - - inline void Response::set_content(const std::string &s, const std::string &content_type) { - set_content(s.data(), s.size(), content_type); - } - - inline void Response::set_content(std::string &&s, const std::string &content_type) { - body = std::move(s); - - auto rng = headers.equal_range("Content-Type"); - headers.erase(rng.first, rng.second); - set_header("Content-Type", content_type); - } - - inline void Response::set_content_provider(size_t in_length, const std::string &content_type, - ContentProvider provider, - ContentProviderResourceReleaser resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = in_length; - if (in_length > 0) { - content_provider_ = std::move(provider); - } - content_provider_resource_releaser_ = std::move(resource_releaser); - is_chunked_content_provider_ = false; - } - - inline void Response::set_content_provider(const std::string &content_type, - ContentProviderWithoutLength provider, - ContentProviderResourceReleaser resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = 0; - content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = std::move(resource_releaser); - is_chunked_content_provider_ = false; - } - - inline void Response::set_chunked_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, - ContentProviderResourceReleaser resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = 0; - content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = std::move(resource_releaser); - is_chunked_content_provider_ = true; - } - - // Result implementation - inline bool Result::has_request_header(const std::string &key) const { - return request_headers_.find(key) != request_headers_.end(); - } - - inline std::string Result::get_request_header_value(const std::string &key, size_t id) const { - return detail::get_header_value(request_headers_, key, id, ""); - } - - inline size_t Result::get_request_header_value_count(const std::string &key) const { - auto r = request_headers_.equal_range(key); - return static_cast(std::distance(r.first, r.second)); - } - - // Stream implementation - inline ssize_t Stream::write(const char *ptr) { return write(ptr, strlen(ptr)); } - - inline ssize_t Stream::write(const std::string &s) { return write(s.data(), s.size()); } - - namespace detail { - - // Socket stream implementation - inline SocketStream::SocketStream(socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), - read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec), - read_buff_(read_buff_size_, 0) {} - - inline SocketStream::~SocketStream() = default; - - inline bool SocketStream::is_readable() const { - return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; - } - - inline bool SocketStream::is_writable() const { - return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0 && - is_socket_alive(sock_); - } - - inline ssize_t SocketStream::read(char *ptr, size_t size) { -#ifdef _WIN32 - size = (std::min)(size, static_cast((std::numeric_limits::max)())); -#else - size = (std::min)(size, static_cast((std::numeric_limits::max)())); -#endif - - if (read_buff_off_ < read_buff_content_size_) { - auto remaining_size = read_buff_content_size_ - read_buff_off_; - if (size <= remaining_size) { - memcpy(ptr, read_buff_.data() + read_buff_off_, size); - read_buff_off_ += size; - return static_cast(size); - } else { - memcpy(ptr, read_buff_.data() + read_buff_off_, remaining_size); - read_buff_off_ += remaining_size; - return static_cast(remaining_size); - } - } - - if (!is_readable()) { - return -1; - } - - read_buff_off_ = 0; - read_buff_content_size_ = 0; - - if (size < read_buff_size_) { - auto n = - read_socket(sock_, read_buff_.data(), read_buff_size_, CPPHTTPLIB_RECV_FLAGS); - if (n <= 0) { - return n; - } else if (n <= static_cast(size)) { - memcpy(ptr, read_buff_.data(), static_cast(n)); - return n; - } else { - memcpy(ptr, read_buff_.data(), size); - read_buff_off_ = size; - read_buff_content_size_ = static_cast(n); - return static_cast(size); - } - } else { - return read_socket(sock_, ptr, size, CPPHTTPLIB_RECV_FLAGS); - } - } - - inline ssize_t SocketStream::write(const char *ptr, size_t size) { - if (!is_writable()) { - return -1; - } - -#if defined(_WIN32) && !defined(_WIN64) - size = (std::min)(size, static_cast((std::numeric_limits::max)())); -#endif - - return send_socket(sock_, ptr, size, CPPHTTPLIB_SEND_FLAGS); - } - - inline void SocketStream::get_remote_ip_and_port(std::string &ip, int &port) const { - return detail::get_remote_ip_and_port(sock_, ip, port); - } - - inline void SocketStream::get_local_ip_and_port(std::string &ip, int &port) const { - return detail::get_local_ip_and_port(sock_, ip, port); - } - - inline socket_t SocketStream::socket() const { return sock_; } - - // Buffer stream implementation - inline bool BufferStream::is_readable() const { return true; } - - inline bool BufferStream::is_writable() const { return true; } - - inline ssize_t BufferStream::read(char *ptr, size_t size) { -#if defined(_MSC_VER) && _MSC_VER < 1910 - auto len_read = buffer._Copy_s(ptr, size, size, position); -#else - auto len_read = buffer.copy(ptr, size, position); -#endif - position += static_cast(len_read); - return static_cast(len_read); - } - - inline ssize_t BufferStream::write(const char *ptr, size_t size) { - buffer.append(ptr, size); - return static_cast(size); - } - - inline void BufferStream::get_remote_ip_and_port(std::string & /*ip*/, - int & /*port*/) const {} - - inline void BufferStream::get_local_ip_and_port(std::string & /*ip*/, - int & /*port*/) const {} - - inline socket_t BufferStream::socket() const { return 0; } - - inline const std::string &BufferStream::get_buffer() const { return buffer; } - - inline PathParamsMatcher::PathParamsMatcher(const std::string &pattern) { - // One past the last ending position of a path param substring - std::size_t last_param_end = 0; - -#ifndef CPPHTTPLIB_NO_EXCEPTIONS - // Needed to ensure that parameter names are unique during matcher - // construction - // If exceptions are disabled, only last duplicate path - // parameter will be set - std::unordered_set param_name_set; -#endif - - while (true) { - const auto marker_pos = pattern.find(marker, last_param_end); - if (marker_pos == std::string::npos) { - break; - } - - static_fragments_.push_back( - pattern.substr(last_param_end, marker_pos - last_param_end)); - - const auto param_name_start = marker_pos + 1; - - auto sep_pos = pattern.find(separator, param_name_start); - if (sep_pos == std::string::npos) { - sep_pos = pattern.length(); - } - - auto param_name = pattern.substr(param_name_start, sep_pos - param_name_start); - -#ifndef CPPHTTPLIB_NO_EXCEPTIONS - if (param_name_set.find(param_name) != param_name_set.cend()) { - std::string msg = "Encountered path parameter '" + param_name + - "' multiple times in route pattern '" + pattern + "'."; - throw std::invalid_argument(msg); - } -#endif - - param_names_.push_back(std::move(param_name)); - - last_param_end = sep_pos + 1; - } - - if (last_param_end < pattern.length()) { - static_fragments_.push_back(pattern.substr(last_param_end)); - } - } - - inline bool PathParamsMatcher::match(Request &request) const { - request.matches = std::smatch(); - request.path_params.clear(); - request.path_params.reserve(param_names_.size()); - - // One past the position at which the path matched the pattern last time - std::size_t starting_pos = 0; - for (size_t i = 0; i < static_fragments_.size(); ++i) { - const auto &fragment = static_fragments_[i]; - - if (starting_pos + fragment.length() > request.path.length()) { - return false; - } - - // Avoid unnecessary allocation by using strncmp instead of substr + - // comparison - if (std::strncmp(request.path.c_str() + starting_pos, fragment.c_str(), - fragment.length()) != 0) { - return false; - } - - starting_pos += fragment.length(); - - // Should only happen when we have a static fragment after a param - // Example: '/users/:id/subscriptions' - // The 'subscriptions' fragment here does not have a corresponding param - if (i >= param_names_.size()) { - continue; - } - - auto sep_pos = request.path.find(separator, starting_pos); - if (sep_pos == std::string::npos) { - sep_pos = request.path.length(); - } - - const auto ¶m_name = param_names_[i]; - - request.path_params.emplace( - param_name, request.path.substr(starting_pos, sep_pos - starting_pos)); - - // Mark everythin up to '/' as matched - starting_pos = sep_pos + 1; - } - // Returns false if the path is longer than the pattern - return starting_pos >= request.path.length(); - } - - inline bool RegexMatcher::match(Request &request) const { - request.path_params.clear(); - return std::regex_match(request.path, request.matches, regex_); - } - - } // namespace detail - - // HTTP server implementation - inline Server::Server() - : new_task_queue([] { return new ThreadPool(CPPHTTPLIB_THREAD_POOL_COUNT); }) { -#ifndef _WIN32 - signal(SIGPIPE, SIG_IGN); -#endif - } - - inline Server::~Server() = default; - - inline std::unique_ptr Server::make_matcher(const std::string &pattern) { - if (pattern.find("/:") != std::string::npos) { - return detail::make_unique(pattern); - } else { - return detail::make_unique(pattern); - } - } - - inline Server &Server::Get(const std::string &pattern, Handler handler) { - get_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Post(const std::string &pattern, Handler handler) { - post_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Post(const std::string &pattern, HandlerWithContentReader handler) { - post_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Put(const std::string &pattern, Handler handler) { - put_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Put(const std::string &pattern, HandlerWithContentReader handler) { - put_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Patch(const std::string &pattern, Handler handler) { - patch_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Patch(const std::string &pattern, HandlerWithContentReader handler) { - patch_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Delete(const std::string &pattern, Handler handler) { - delete_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Delete(const std::string &pattern, HandlerWithContentReader handler) { - delete_handlers_for_content_reader_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline Server &Server::Options(const std::string &pattern, Handler handler) { - options_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; - } - - inline bool Server::set_base_dir(const std::string &dir, const std::string &mount_point) { - return set_mount_point(mount_point, dir); - } - - inline bool Server::set_mount_point(const std::string &mount_point, const std::string &dir, - Headers headers) { - if (detail::is_dir(dir)) { - std::string mnt = !mount_point.empty() ? mount_point : "/"; - if (!mnt.empty() && mnt[0] == '/') { - base_dirs_.push_back({mnt, dir, std::move(headers)}); - return true; - } - } - return false; - } - - inline bool Server::remove_mount_point(const std::string &mount_point) { - for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { - if (it->mount_point == mount_point) { - base_dirs_.erase(it); - return true; - } - } - return false; - } - - inline Server &Server::set_file_extension_and_mimetype_mapping(const std::string &ext, - const std::string &mime) { - file_extension_and_mimetype_map_[ext] = mime; - return *this; - } - - inline Server &Server::set_default_file_mimetype(const std::string &mime) { - default_file_mimetype_ = mime; - return *this; - } - - inline Server &Server::set_file_request_handler(Handler handler) { - file_request_handler_ = std::move(handler); - return *this; - } - - inline Server &Server::set_error_handler_core(HandlerWithResponse handler, std::true_type) { - error_handler_ = std::move(handler); - return *this; - } - - inline Server &Server::set_error_handler_core(Handler handler, std::false_type) { - error_handler_ = [handler](const Request &req, Response &res) { - handler(req, res); - return HandlerResponse::Handled; - }; - return *this; - } - - inline Server &Server::set_exception_handler(ExceptionHandler handler) { - exception_handler_ = std::move(handler); - return *this; - } - - inline Server &Server::set_pre_routing_handler(HandlerWithResponse handler) { - pre_routing_handler_ = std::move(handler); - return *this; - } - - inline Server &Server::set_post_routing_handler(Handler handler) { - post_routing_handler_ = std::move(handler); - return *this; - } - - inline Server &Server::set_logger(Logger logger) { - logger_ = std::move(logger); - return *this; - } - - inline Server &Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { - expect_100_continue_handler_ = std::move(handler); - return *this; - } - - inline Server &Server::set_address_family(int family) { - address_family_ = family; - return *this; - } - - inline Server &Server::set_tcp_nodelay(bool on) { - tcp_nodelay_ = on; - return *this; - } - - inline Server &Server::set_socket_options(SocketOptions socket_options) { - socket_options_ = std::move(socket_options); - return *this; - } - - inline Server &Server::set_default_headers(Headers headers) { - default_headers_ = std::move(headers); - return *this; - } - - inline Server &Server::set_header_writer( - std::function const &writer) { - header_writer_ = writer; - return *this; - } - - inline Server &Server::set_keep_alive_max_count(size_t count) { - keep_alive_max_count_ = count; - return *this; - } - - inline Server &Server::set_keep_alive_timeout(time_t sec) { - keep_alive_timeout_sec_ = sec; - return *this; - } - - inline Server &Server::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; - return *this; - } - - inline Server &Server::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; - return *this; - } - - inline Server &Server::set_idle_interval(time_t sec, time_t usec) { - idle_interval_sec_ = sec; - idle_interval_usec_ = usec; - return *this; - } - - inline Server &Server::set_payload_max_length(size_t length) { - payload_max_length_ = length; - return *this; - } - - inline bool Server::bind_to_port(const std::string &host, int port, int socket_flags) { - return bind_internal(host, port, socket_flags) >= 0; - } - inline int Server::bind_to_any_port(const std::string &host, int socket_flags) { - return bind_internal(host, 0, socket_flags); - } - - inline bool Server::listen_after_bind() { - auto se = detail::scope_exit([&]() { done_ = true; }); - return listen_internal(); - } - - inline bool Server::listen(const std::string &host, int port, int socket_flags) { - auto se = detail::scope_exit([&]() { done_ = true; }); - return bind_to_port(host, port, socket_flags) && listen_internal(); - } - - inline bool Server::is_running() const { return is_running_; } - - inline void Server::wait_until_ready() const { - while (!is_running() && !done_) { - std::this_thread::sleep_for(std::chrono::milliseconds{1}); - } - } - - inline void Server::stop() { - if (is_running_) { - assert(svr_sock_ != INVALID_SOCKET); - std::atomic sock(svr_sock_.exchange(INVALID_SOCKET)); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } - } - - inline bool Server::parse_request_line(const char *s, Request &req) const { - auto len = strlen(s); - if (len < 2 || s[len - 2] != '\r' || s[len - 1] != '\n') { - return false; - } - len -= 2; - - { - size_t count = 0; - - detail::split(s, s + len, ' ', [&](const char *b, const char *e) { - switch (count) { - case 0: - req.method = std::string(b, e); - break; - case 1: - req.target = std::string(b, e); - break; - case 2: - req.version = std::string(b, e); - break; - default: - break; - } - count++; - }); - - if (count != 3) { - return false; - } - } - - static const std::set methods{"GET", "HEAD", "POST", "PUT", "DELETE", - "CONNECT", "OPTIONS", "TRACE", "PATCH", "PRI"}; - - if (methods.find(req.method) == methods.end()) { - return false; - } - - if (req.version != "HTTP/1.1" && req.version != "HTTP/1.0") { - return false; - } - - { - // Skip URL fragment - for (size_t i = 0; i < req.target.size(); i++) { - if (req.target[i] == '#') { - req.target.erase(i); - break; - } - } - - detail::divide(req.target, '?', - [&](const char *lhs_data, std::size_t lhs_size, const char *rhs_data, - std::size_t rhs_size) { - req.path = - detail::decode_url(std::string(lhs_data, lhs_size), false); - detail::parse_query_text(rhs_data, rhs_size, req.params); - }); - } - - return true; - } - - inline bool Server::write_response(Stream &strm, bool close_connection, Request &req, - Response &res) { - // NOTE: `req.ranges` should be empty, otherwise it will be applied - // incorrectly to the error content. - req.ranges.clear(); - return write_response_core(strm, close_connection, req, res, false); - } - - inline bool Server::write_response_with_content(Stream &strm, bool close_connection, - const Request &req, Response &res) { - return write_response_core(strm, close_connection, req, res, true); - } - - inline bool Server::write_response_core(Stream &strm, bool close_connection, const Request &req, - Response &res, bool need_apply_ranges) { - assert(res.status != -1); - - if (400 <= res.status && error_handler_ && - error_handler_(req, res) == HandlerResponse::Handled) { - need_apply_ranges = true; - } - - std::string content_type; - std::string boundary; - if (need_apply_ranges) { - apply_ranges(req, res, content_type, boundary); - } - - // Prepare additional headers - if (close_connection || req.get_header_value("Connection") == "close") { - res.set_header("Connection", "close"); - } else { - std::stringstream ss; - ss << "timeout=" << keep_alive_timeout_sec_ << ", max=" << keep_alive_max_count_; - res.set_header("Keep-Alive", ss.str()); - } - - if (!res.has_header("Content-Type") && - (!res.body.empty() || res.content_length_ > 0 || res.content_provider_)) { - res.set_header("Content-Type", "text/plain"); - } - - if (!res.has_header("Content-Length") && res.body.empty() && !res.content_length_ && - !res.content_provider_) { - res.set_header("Content-Length", "0"); - } - - if (!res.has_header("Accept-Ranges") && req.method == "HEAD") { - res.set_header("Accept-Ranges", "bytes"); - } - - if (post_routing_handler_) { - post_routing_handler_(req, res); - } - - // Response line and headers - { - detail::BufferStream bstrm; - - if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status, status_message(res.status))) { - return false; - } - - if (!header_writer_(bstrm, res.headers)) { - return false; - } - - // Flush buffer - auto &data = bstrm.get_buffer(); - detail::write_data(strm, data.data(), data.size()); - } - - // Body - auto ret = true; - if (req.method != "HEAD") { - if (!res.body.empty()) { - if (!detail::write_data(strm, res.body.data(), res.body.size())) { - ret = false; - } - } else if (res.content_provider_) { - if (write_content_with_provider(strm, req, res, boundary, content_type)) { - res.content_provider_success_ = true; - } else { - ret = false; - } - } - } - - // Log - if (logger_) { - logger_(req, res); - } - - return ret; - } - - inline bool Server::write_content_with_provider(Stream &strm, const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type) { - auto is_shutting_down = [this]() { return this->svr_sock_ == INVALID_SOCKET; }; - - if (res.content_length_ > 0) { - if (req.ranges.empty()) { - return detail::write_content(strm, res.content_provider_, 0, res.content_length_, - is_shutting_down); - } else if (req.ranges.size() == 1) { - auto offset_and_length = - detail::get_range_offset_and_length(req.ranges[0], res.content_length_); - - return detail::write_content(strm, res.content_provider_, offset_and_length.first, - offset_and_length.second, is_shutting_down); - } else { - return detail::write_multipart_ranges_data(strm, req, res, boundary, content_type, - res.content_length_, is_shutting_down); - } - } else { - if (res.is_chunked_content_provider_) { - auto type = detail::encoding_type(req, res); - - std::unique_ptr compressor; - if (type == detail::EncodingType::Gzip) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - compressor = detail::make_unique(); -#endif - } else if (type == detail::EncodingType::Brotli) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - compressor = detail::make_unique(); -#endif - } else { - compressor = detail::make_unique(); - } - assert(compressor != nullptr); - - return detail::write_content_chunked(strm, res.content_provider_, is_shutting_down, - *compressor); - } else { - return detail::write_content_without_length(strm, res.content_provider_, - is_shutting_down); - } - } - } - - inline bool Server::read_content(Stream &strm, Request &req, Response &res) { - MultipartFormDataMap::iterator cur; - auto file_count = 0; - if (read_content_core( - strm, req, res, - // Regular - [&](const char *buf, size_t n) { - if (req.body.size() + n > req.body.max_size()) { - return false; - } - req.body.append(buf, n); - return true; - }, - // Multipart - [&](const MultipartFormData &file) { - if (file_count++ == CPPHTTPLIB_MULTIPART_FORM_DATA_FILE_MAX_COUNT) { - return false; - } - cur = req.files.emplace(file.name, file); - return true; - }, - [&](const char *buf, size_t n) { - auto &content = cur->second.content; - if (content.size() + n > content.max_size()) { - return false; - } - content.append(buf, n); - return true; - })) { - const auto &content_type = req.get_header_value("Content-Type"); - if (!content_type.find("application/x-www-form-urlencoded")) { - if (req.body.size() > CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH) { - res.status = StatusCode::PayloadTooLarge_413; // NOTE: should be 414? - return false; - } - detail::parse_query_text(req.body, req.params); - } - return true; - } - return false; - } - - inline bool Server::read_content_with_content_receiver(Stream &strm, Request &req, - Response &res, ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver) { - return read_content_core(strm, req, res, std::move(receiver), std::move(multipart_header), - std::move(multipart_receiver)); - } - - inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, - ContentReceiver receiver, - MultipartContentHeader multipart_header, - ContentReceiver multipart_receiver) const { - detail::MultipartFormDataParser multipart_form_data_parser; - ContentReceiverWithProgress out; - - if (req.is_multipart_form_data()) { - const auto &content_type = req.get_header_value("Content-Type"); - std::string boundary; - if (!detail::parse_multipart_boundary(content_type, boundary)) { - res.status = StatusCode::BadRequest_400; - return false; - } - - multipart_form_data_parser.set_boundary(std::move(boundary)); - out = [&](const char *buf, size_t n, uint64_t /*off*/, uint64_t /*len*/) { - /* For debug - size_t pos = 0; - while (pos < n) { - auto read_size = (std::min)(1, n - pos); - auto ret = multipart_form_data_parser.parse( - buf + pos, read_size, multipart_receiver, multipart_header); - if (!ret) { return false; } - pos += read_size; - } - return true; - */ - return multipart_form_data_parser.parse(buf, n, multipart_receiver, - multipart_header); - }; - } else { - out = [receiver](const char *buf, size_t n, uint64_t /*off*/, uint64_t /*len*/) { - return receiver(buf, n); - }; - } - - if (req.method == "DELETE" && !req.has_header("Content-Length")) { - return true; - } - - if (!detail::read_content(strm, req, payload_max_length_, res.status, nullptr, out, true)) { - return false; - } - - if (req.is_multipart_form_data()) { - if (!multipart_form_data_parser.is_valid()) { - res.status = StatusCode::BadRequest_400; - return false; - } - } - - return true; - } - - inline bool Server::handle_file_request(const Request &req, Response &res, bool head) { - for (const auto &entry : base_dirs_) { - // Prefix match - if (!req.path.compare(0, entry.mount_point.size(), entry.mount_point)) { - std::string sub_path = "/" + req.path.substr(entry.mount_point.size()); - if (detail::is_valid_path(sub_path)) { - auto path = entry.base_dir + sub_path; - if (path.back() == '/') { - path += "index.html"; - } - - if (detail::is_file(path)) { - for (const auto &kv : entry.headers) { - res.set_header(kv.first, kv.second); - } - - auto mm = std::make_shared(path.c_str()); - if (!mm->is_open()) { - return false; - } - - res.set_content_provider( - mm->size(), - detail::find_content_type(path, file_extension_and_mimetype_map_, - default_file_mimetype_), - [mm](size_t offset, size_t length, DataSink &sink) -> bool { - sink.write(mm->data() + offset, length); - return true; - }); - - if (!head && file_request_handler_) { - file_request_handler_(req, res); - } - - return true; - } - } - } - } - return false; - } - - inline socket_t Server::create_server_socket(const std::string &host, int port, - int socket_flags, - SocketOptions socket_options) const { - return detail::create_socket( - host, std::string(), port, address_family_, socket_flags, tcp_nodelay_, - std::move(socket_options), [](socket_t sock, struct addrinfo &ai) -> bool { - if (::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - return false; - } - if (::listen(sock, CPPHTTPLIB_LISTEN_BACKLOG)) { - return false; - } - return true; - }); - } - - inline int Server::bind_internal(const std::string &host, int port, int socket_flags) { - if (!is_valid()) { - return -1; - } - - svr_sock_ = create_server_socket(host, port, socket_flags, socket_options_); - if (svr_sock_ == INVALID_SOCKET) { - return -1; - } - - if (port == 0) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getsockname(svr_sock_, reinterpret_cast(&addr), &addr_len) == - -1) { - return -1; - } - if (addr.ss_family == AF_INET) { - return ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - return ntohs(reinterpret_cast(&addr)->sin6_port); - } else { - return -1; - } - } else { - return port; - } - } - - inline bool Server::listen_internal() { - auto ret = true; - is_running_ = true; - auto se = detail::scope_exit([&]() { is_running_ = false; }); - - { - std::unique_ptr task_queue(new_task_queue()); - - while (svr_sock_ != INVALID_SOCKET) { -#ifndef _WIN32 - if (idle_interval_sec_ > 0 || idle_interval_usec_ > 0) { -#endif - auto val = - detail::select_read(svr_sock_, idle_interval_sec_, idle_interval_usec_); - if (val == 0) { // Timeout - task_queue->on_idle(); - continue; - } -#ifndef _WIN32 - } -#endif - socket_t sock = accept(svr_sock_, nullptr, nullptr); - - if (sock == INVALID_SOCKET) { - if (errno == EMFILE) { - // The per-process limit of open file descriptors has been reached. - // Try to accept new connections after a short sleep. - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - continue; - } else if (errno == EINTR || errno == EAGAIN) { - continue; - } - if (svr_sock_ != INVALID_SOCKET) { - detail::close_socket(svr_sock_); - ret = false; - } else { - ; // The server socket was closed by user. - } - break; - } - - { -#ifdef _WIN32 - auto timeout = - static_cast(read_timeout_sec_ * 1000 + read_timeout_usec_ / 1000); - setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, - reinterpret_cast(&timeout), sizeof(timeout)); -#else - timeval tv; - tv.tv_sec = static_cast(read_timeout_sec_); - tv.tv_usec = static_cast(read_timeout_usec_); - setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast(&tv), - sizeof(tv)); -#endif - } - { -#ifdef _WIN32 - auto timeout = static_cast(write_timeout_sec_ * 1000 + - write_timeout_usec_ / 1000); - setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, - reinterpret_cast(&timeout), sizeof(timeout)); -#else - timeval tv; - tv.tv_sec = static_cast(write_timeout_sec_); - tv.tv_usec = static_cast(write_timeout_usec_); - setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, reinterpret_cast(&tv), - sizeof(tv)); -#endif - } - - if (!task_queue->enqueue([this, sock]() { process_and_close_socket(sock); })) { - detail::shutdown_socket(sock); - detail::close_socket(sock); - } - } - - task_queue->shutdown(); - } - - return ret; - } - - inline bool Server::routing(Request &req, Response &res, Stream &strm) { - if (pre_routing_handler_ && pre_routing_handler_(req, res) == HandlerResponse::Handled) { - return true; - } - - // File handler - auto is_head_request = req.method == "HEAD"; - if ((req.method == "GET" || is_head_request) && - handle_file_request(req, res, is_head_request)) { - return true; - } - - if (detail::expect_content(req)) { - // Content reader handler - { - ContentReader reader( - [&](ContentReceiver receiver) { - return read_content_with_content_receiver( - strm, req, res, std::move(receiver), nullptr, nullptr); - }, - [&](MultipartContentHeader header, ContentReceiver receiver) { - return read_content_with_content_receiver( - strm, req, res, nullptr, std::move(header), std::move(receiver)); - }); - - if (req.method == "POST") { - if (dispatch_request_for_content_reader(req, res, std::move(reader), - post_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PUT") { - if (dispatch_request_for_content_reader(req, res, std::move(reader), - put_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PATCH") { - if (dispatch_request_for_content_reader(req, res, std::move(reader), - patch_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "DELETE") { - if (dispatch_request_for_content_reader(req, res, std::move(reader), - delete_handlers_for_content_reader_)) { - return true; - } - } - } - - // Read content into `req.body` - if (!read_content(strm, req, res)) { - return false; - } - } - - // Regular handler - if (req.method == "GET" || req.method == "HEAD") { - return dispatch_request(req, res, get_handlers_); - } else if (req.method == "POST") { - return dispatch_request(req, res, post_handlers_); - } else if (req.method == "PUT") { - return dispatch_request(req, res, put_handlers_); - } else if (req.method == "DELETE") { - return dispatch_request(req, res, delete_handlers_); - } else if (req.method == "OPTIONS") { - return dispatch_request(req, res, options_handlers_); - } else if (req.method == "PATCH") { - return dispatch_request(req, res, patch_handlers_); - } - - res.status = StatusCode::BadRequest_400; - return false; - } - - inline bool Server::dispatch_request(Request &req, Response &res, - const Handlers &handlers) const { - for (const auto &x : handlers) { - const auto &matcher = x.first; - const auto &handler = x.second; - - if (matcher->match(req)) { - handler(req, res); - return true; - } - } - return false; - } - - inline void Server::apply_ranges(const Request &req, Response &res, std::string &content_type, - std::string &boundary) const { - if (req.ranges.size() > 1 && res.status == StatusCode::PartialContent_206) { - auto it = res.headers.find("Content-Type"); - if (it != res.headers.end()) { - content_type = it->second; - res.headers.erase(it); - } - - boundary = detail::make_multipart_data_boundary(); - - res.set_header("Content-Type", "multipart/byteranges; boundary=" + boundary); - } - - auto type = detail::encoding_type(req, res); - - if (res.body.empty()) { - if (res.content_length_ > 0) { - size_t length = 0; - if (req.ranges.empty() || res.status != StatusCode::PartialContent_206) { - length = res.content_length_; - } else if (req.ranges.size() == 1) { - auto offset_and_length = - detail::get_range_offset_and_length(req.ranges[0], res.content_length_); - - length = offset_and_length.second; - - auto content_range = detail::make_content_range_header_field( - offset_and_length, res.content_length_); - res.set_header("Content-Range", content_range); - } else { - length = detail::get_multipart_ranges_data_length(req, boundary, content_type, - res.content_length_); - } - res.set_header("Content-Length", std::to_string(length)); - } else { - if (res.content_provider_) { - if (res.is_chunked_content_provider_) { - res.set_header("Transfer-Encoding", "chunked"); - if (type == detail::EncodingType::Gzip) { - res.set_header("Content-Encoding", "gzip"); - } else if (type == detail::EncodingType::Brotli) { - res.set_header("Content-Encoding", "br"); - } - } - } - } - } else { - if (req.ranges.empty() || res.status != StatusCode::PartialContent_206) { - ; - } else if (req.ranges.size() == 1) { - auto offset_and_length = - detail::get_range_offset_and_length(req.ranges[0], res.body.size()); - auto offset = offset_and_length.first; - auto length = offset_and_length.second; - - auto content_range = - detail::make_content_range_header_field(offset_and_length, res.body.size()); - res.set_header("Content-Range", content_range); - - assert(offset + length <= res.body.size()); - res.body = res.body.substr(offset, length); - } else { - std::string data; - detail::make_multipart_ranges_data(req, res, boundary, content_type, - res.body.size(), data); - res.body.swap(data); - } - - if (type != detail::EncodingType::None) { - std::unique_ptr compressor; - std::string content_encoding; - - if (type == detail::EncodingType::Gzip) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - compressor = detail::make_unique(); - content_encoding = "gzip"; -#endif - } else if (type == detail::EncodingType::Brotli) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - compressor = detail::make_unique(); - content_encoding = "br"; -#endif - } - - if (compressor) { - std::string compressed; - if (compressor->compress(res.body.data(), res.body.size(), true, - [&](const char *data, size_t data_len) { - compressed.append(data, data_len); - return true; - })) { - res.body.swap(compressed); - res.set_header("Content-Encoding", content_encoding); - } - } - } - - auto length = std::to_string(res.body.size()); - res.set_header("Content-Length", length); - } - } - - inline bool Server::dispatch_request_for_content_reader( - Request &req, Response &res, ContentReader content_reader, - const HandlersForContentReader &handlers) const { - for (const auto &x : handlers) { - const auto &matcher = x.first; - const auto &handler = x.second; - - if (matcher->match(req)) { - handler(req, res, content_reader); - return true; - } - } - return false; - } - - inline bool Server::process_request(Stream &strm, bool close_connection, - bool &connection_closed, - const std::function &setup_request) { - std::array buf{}; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - // Connection has been closed on client - if (!line_reader.getline()) { - return false; - } - - Request req; - - Response res; - res.version = "HTTP/1.1"; - res.headers = default_headers_; - -#ifdef _WIN32 - // TODO: Increase FD_SETSIZE statically (libzmq), dynamically (MySQL). -#else -#ifndef CPPHTTPLIB_USE_POLL - // Socket file descriptor exceeded FD_SETSIZE... - if (strm.socket() >= FD_SETSIZE) { - Headers dummy; - detail::read_headers(strm, dummy); - res.status = StatusCode::InternalServerError_500; - return write_response(strm, close_connection, req, res); - } -#endif -#endif - - // Check if the request URI doesn't exceed the limit - if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { - Headers dummy; - detail::read_headers(strm, dummy); - res.status = StatusCode::UriTooLong_414; - return write_response(strm, close_connection, req, res); - } - - // Request line and headers - if (!parse_request_line(line_reader.ptr(), req) || - !detail::read_headers(strm, req.headers)) { - res.status = StatusCode::BadRequest_400; - return write_response(strm, close_connection, req, res); - } - - if (req.get_header_value("Connection") == "close") { - connection_closed = true; - } - - if (req.version == "HTTP/1.0" && req.get_header_value("Connection") != "Keep-Alive") { - connection_closed = true; - } - - strm.get_remote_ip_and_port(req.remote_addr, req.remote_port); - req.set_header("REMOTE_ADDR", req.remote_addr); - req.set_header("REMOTE_PORT", std::to_string(req.remote_port)); - - strm.get_local_ip_and_port(req.local_addr, req.local_port); - req.set_header("LOCAL_ADDR", req.local_addr); - req.set_header("LOCAL_PORT", std::to_string(req.local_port)); - - if (req.has_header("Range")) { - const auto &range_header_value = req.get_header_value("Range"); - if (!detail::parse_range_header(range_header_value, req.ranges)) { - res.status = StatusCode::RangeNotSatisfiable_416; - return write_response(strm, close_connection, req, res); - } - } - - if (setup_request) { - setup_request(req); - } - - if (req.get_header_value("Expect") == "100-continue") { - int status = StatusCode::Continue_100; - if (expect_100_continue_handler_) { - status = expect_100_continue_handler_(req, res); - } - switch (status) { - case StatusCode::Continue_100: - case StatusCode::ExpectationFailed_417: - strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status, status_message(status)); - break; - default: - return write_response(strm, close_connection, req, res); - } - } - - // Routing - auto routed = false; -#ifdef CPPHTTPLIB_NO_EXCEPTIONS - routed = routing(req, res, strm); -#else - try { - routed = routing(req, res, strm); - } catch (std::exception &e) { - if (exception_handler_) { - auto ep = std::current_exception(); - exception_handler_(req, res, ep); - routed = true; - } else { - res.status = StatusCode::InternalServerError_500; - std::string val; - auto s = e.what(); - for (size_t i = 0; s[i]; i++) { - switch (s[i]) { - case '\r': - val += "\\r"; - break; - case '\n': - val += "\\n"; - break; - default: - val += s[i]; - break; - } - } - res.set_header("EXCEPTION_WHAT", val); - } - } catch (...) { - if (exception_handler_) { - auto ep = std::current_exception(); - exception_handler_(req, res, ep); - routed = true; - } else { - res.status = StatusCode::InternalServerError_500; - res.set_header("EXCEPTION_WHAT", "UNKNOWN"); - } - } -#endif - if (routed) { - if (res.status == -1) { - res.status = - req.ranges.empty() ? StatusCode::OK_200 : StatusCode::PartialContent_206; - } - - if (detail::range_error(req, res)) { - res.body.clear(); - res.content_length_ = 0; - res.content_provider_ = nullptr; - res.status = StatusCode::RangeNotSatisfiable_416; - return write_response(strm, close_connection, req, res); - } - - return write_response_with_content(strm, close_connection, req, res); - } else { - if (res.status == -1) { - res.status = StatusCode::NotFound_404; - } - - return write_response(strm, close_connection, req, res); - } - } - - inline bool Server::is_valid() const { return true; } - - inline bool Server::process_and_close_socket(socket_t sock) { - auto ret = detail::process_server_socket( - svr_sock_, sock, keep_alive_max_count_, keep_alive_timeout_sec_, read_timeout_sec_, - read_timeout_usec_, write_timeout_sec_, write_timeout_usec_, - [this](Stream &strm, bool close_connection, bool &connection_closed) { - return process_request(strm, close_connection, connection_closed, nullptr); - }); - - detail::shutdown_socket(sock); - detail::close_socket(sock); - return ret; - } - - // HTTP client implementation - inline ClientImpl::ClientImpl(const std::string &host) - : ClientImpl(host, 80, std::string(), std::string()) {} - - inline ClientImpl::ClientImpl(const std::string &host, int port) - : ClientImpl(host, port, std::string(), std::string()) {} - - inline ClientImpl::ClientImpl(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : host_(host), - port_(port), - host_and_port_(adjust_host_string(host) + ":" + std::to_string(port)), - client_cert_path_(client_cert_path), - client_key_path_(client_key_path) {} - - inline ClientImpl::~ClientImpl() { - std::lock_guard guard(socket_mutex_); - shutdown_socket(socket_); - close_socket(socket_); - } - - inline bool ClientImpl::is_valid() const { return true; } - - inline void ClientImpl::copy_settings(const ClientImpl &rhs) { - client_cert_path_ = rhs.client_cert_path_; - client_key_path_ = rhs.client_key_path_; - connection_timeout_sec_ = rhs.connection_timeout_sec_; - read_timeout_sec_ = rhs.read_timeout_sec_; - read_timeout_usec_ = rhs.read_timeout_usec_; - write_timeout_sec_ = rhs.write_timeout_sec_; - write_timeout_usec_ = rhs.write_timeout_usec_; - basic_auth_username_ = rhs.basic_auth_username_; - basic_auth_password_ = rhs.basic_auth_password_; - bearer_token_auth_token_ = rhs.bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - digest_auth_username_ = rhs.digest_auth_username_; - digest_auth_password_ = rhs.digest_auth_password_; -#endif - keep_alive_ = rhs.keep_alive_; - follow_location_ = rhs.follow_location_; - url_encode_ = rhs.url_encode_; - address_family_ = rhs.address_family_; - tcp_nodelay_ = rhs.tcp_nodelay_; - socket_options_ = rhs.socket_options_; - compress_ = rhs.compress_; - decompress_ = rhs.decompress_; - interface_ = rhs.interface_; - proxy_host_ = rhs.proxy_host_; - proxy_port_ = rhs.proxy_port_; - proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_; - proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_; - proxy_bearer_token_auth_token_ = rhs.proxy_bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_; - proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_; -#endif -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - ca_cert_file_path_ = rhs.ca_cert_file_path_; - ca_cert_dir_path_ = rhs.ca_cert_dir_path_; - ca_cert_store_ = rhs.ca_cert_store_; -#endif -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - server_certificate_verification_ = rhs.server_certificate_verification_; -#endif - logger_ = rhs.logger_; - } - - inline socket_t ClientImpl::create_client_socket(Error &error) const { - if (!proxy_host_.empty() && proxy_port_ != -1) { - return detail::create_client_socket( - proxy_host_, std::string(), proxy_port_, address_family_, tcp_nodelay_, - socket_options_, connection_timeout_sec_, connection_timeout_usec_, - read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, write_timeout_usec_, - interface_, error); - } - - // Check is custom IP specified for host_ - std::string ip; - auto it = addr_map_.find(host_); - if (it != addr_map_.end()) { - ip = it->second; - } - - return detail::create_client_socket( - host_, ip, port_, address_family_, tcp_nodelay_, socket_options_, - connection_timeout_sec_, connection_timeout_usec_, read_timeout_sec_, - read_timeout_usec_, write_timeout_sec_, write_timeout_usec_, interface_, error); - } - - inline bool ClientImpl::create_and_connect_socket(Socket &socket, Error &error) { - auto sock = create_client_socket(error); - if (sock == INVALID_SOCKET) { - return false; - } - socket.sock = sock; - return true; - } - - inline void ClientImpl::shutdown_ssl(Socket & /*socket*/, bool /*shutdown_gracefully*/) { - // If there are any requests in flight from threads other than us, then it's - // a thread-unsafe race because individual ssl* objects are not thread-safe. - assert(socket_requests_in_flight_ == 0 || - socket_requests_are_from_thread_ == std::this_thread::get_id()); - } - - inline void ClientImpl::shutdown_socket(Socket &socket) const { - if (socket.sock == INVALID_SOCKET) { - return; - } - detail::shutdown_socket(socket.sock); - } - - inline void ClientImpl::close_socket(Socket &socket) { - // If there are requests in flight in another thread, usually closing - // the socket will be fine and they will simply receive an error when - // using the closed socket, but it is still a bug since rarely the OS - // may reassign the socket id to be used for a new socket, and then - // suddenly they will be operating on a live socket that is different - // than the one they intended! - assert(socket_requests_in_flight_ == 0 || - socket_requests_are_from_thread_ == std::this_thread::get_id()); - - // It is also a bug if this happens while SSL is still active -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - assert(socket.ssl == nullptr); -#endif - if (socket.sock == INVALID_SOCKET) { - return; - } - detail::close_socket(socket.sock); - socket.sock = INVALID_SOCKET; - } - - inline bool ClientImpl::read_response_line(Stream &strm, const Request &req, - Response &res) const { - std::array buf{}; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - if (!line_reader.getline()) { - return false; - } - -#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR - const static std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r?\n"); -#else - const static std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r\n"); -#endif - - std::cmatch m; - if (!std::regex_match(line_reader.ptr(), m, re)) { - return req.method == "CONNECT"; - } - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - res.reason = std::string(m[3]); - - // Ignore '100 Continue' - while (res.status == StatusCode::Continue_100) { - if (!line_reader.getline()) { - return false; - } // CRLF - if (!line_reader.getline()) { - return false; - } // next response line - - if (!std::regex_match(line_reader.ptr(), m, re)) { - return false; - } - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - res.reason = std::string(m[3]); - } - - return true; - } - - inline bool ClientImpl::send(Request &req, Response &res, Error &error) { - std::lock_guard request_mutex_guard(request_mutex_); - auto ret = send_(req, res, error); - if (error == Error::SSLPeerCouldBeClosed_) { - assert(!ret); - ret = send_(req, res, error); - } - return ret; - } - - inline bool ClientImpl::send_(Request &req, Response &res, Error &error) { - { - std::lock_guard guard(socket_mutex_); - - // Set this to false immediately - if it ever gets set to true by the end of - // the request, we know another thread instructed us to close the socket. - socket_should_be_closed_when_request_is_done_ = false; - - auto is_alive = false; - if (socket_.is_open()) { - is_alive = detail::is_socket_alive(socket_.sock); - if (!is_alive) { - // Attempt to avoid sigpipe by shutting down nongracefully if it seems - // like the other side has already closed the connection Also, there - // cannot be any requests in flight from other threads since we locked - // request_mutex_, so safe to close everything immediately - const bool shutdown_gracefully = false; - shutdown_ssl(socket_, shutdown_gracefully); - shutdown_socket(socket_); - close_socket(socket_); - } - } - - if (!is_alive) { - if (!create_and_connect_socket(socket_, error)) { - return false; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - // TODO: refactoring - if (is_ssl()) { - auto &scli = static_cast(*this); - if (!proxy_host_.empty() && proxy_port_ != -1) { - auto success = false; - if (!scli.connect_with_proxy(socket_, res, success, error)) { - return success; - } - } - - if (!scli.initialize_ssl(socket_, error)) { - return false; - } - } -#endif - } - - // Mark the current socket as being in use so that it cannot be closed by - // anyone else while this request is ongoing, even though we will be - // releasing the mutex. - if (socket_requests_in_flight_ > 1) { - assert(socket_requests_are_from_thread_ == std::this_thread::get_id()); - } - socket_requests_in_flight_ += 1; - socket_requests_are_from_thread_ = std::this_thread::get_id(); - } - - for (const auto &header : default_headers_) { - if (req.headers.find(header.first) == req.headers.end()) { - req.headers.insert(header); - } - } - - auto ret = false; - auto close_connection = !keep_alive_; - - auto se = detail::scope_exit([&]() { - // Briefly lock mutex in order to mark that a request is no longer ongoing - std::lock_guard guard(socket_mutex_); - socket_requests_in_flight_ -= 1; - if (socket_requests_in_flight_ <= 0) { - assert(socket_requests_in_flight_ == 0); - socket_requests_are_from_thread_ = std::thread::id(); - } - - if (socket_should_be_closed_when_request_is_done_ || close_connection || !ret) { - shutdown_ssl(socket_, true); - shutdown_socket(socket_); - close_socket(socket_); - } - }); - - ret = process_socket(socket_, [&](Stream &strm) { - return handle_request(strm, req, res, close_connection, error); - }); - - if (!ret) { - if (error == Error::Success) { - error = Error::Unknown; - } - } - - return ret; - } - - inline Result ClientImpl::send(const Request &req) { - auto req2 = req; - return send_(std::move(req2)); - } - - inline Result ClientImpl::send_(Request &&req) { - auto res = detail::make_unique(); - auto error = Error::Success; - auto ret = send(req, *res, error); - return Result{ret ? std::move(res) : nullptr, error, std::move(req.headers)}; - } - - inline bool ClientImpl::handle_request(Stream &strm, Request &req, Response &res, - bool close_connection, Error &error) { - if (req.path.empty()) { - error = Error::Connection; - return false; - } - - auto req_save = req; - - bool ret; - - if (!is_ssl() && !proxy_host_.empty() && proxy_port_ != -1) { - auto req2 = req; - req2.path = "http://" + host_and_port_ + req.path; - ret = process_request(strm, req2, res, close_connection, error); - req = req2; - req.path = req_save.path; - } else { - ret = process_request(strm, req, res, close_connection, error); - } - - if (!ret) { - return false; - } - - if (res.get_header_value("Connection") == "close" || - (res.version == "HTTP/1.0" && res.reason != "Connection established")) { - // TODO this requires a not-entirely-obvious chain of calls to be correct - // for this to be safe. - - // This is safe to call because handle_request is only called by send_ - // which locks the request mutex during the process. It would be a bug - // to call it from a different thread since it's a thread-safety issue - // to do these things to the socket if another thread is using the socket. - std::lock_guard guard(socket_mutex_); - shutdown_ssl(socket_, true); - shutdown_socket(socket_); - close_socket(socket_); - } - - if (300 < res.status && res.status < 400 && follow_location_) { - req = req_save; - ret = redirect(req, res, error); - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if ((res.status == StatusCode::Unauthorized_401 || - res.status == StatusCode::ProxyAuthenticationRequired_407) && - req.authorization_count_ < 5) { - auto is_proxy = res.status == StatusCode::ProxyAuthenticationRequired_407; - const auto &username = is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; - const auto &password = is_proxy ? proxy_digest_auth_password_ : digest_auth_password_; - - if (!username.empty() && !password.empty()) { - std::map auth; - if (detail::parse_www_authenticate(res, auth, is_proxy)) { - Request new_req = req; - new_req.authorization_count_ += 1; - new_req.headers.erase(is_proxy ? "Proxy-Authorization" : "Authorization"); - new_req.headers.insert(detail::make_digest_authentication_header( - req, auth, new_req.authorization_count_, detail::random_string(10), - username, password, is_proxy)); - - Response new_res; - - ret = send(new_req, new_res, error); - if (ret) { - res = new_res; - } - } - } - } -#endif - - return ret; - } - - inline bool ClientImpl::redirect(Request &req, Response &res, Error &error) { - if (req.redirect_count_ == 0) { - error = Error::ExceedRedirectCount; - return false; - } - - auto location = res.get_header_value("location"); - if (location.empty()) { - return false; - } - - const static std::regex re( - R"((?:(https?):)?(?://(?:\[([\d:]+)\]|([^:/?#]+))(?::(\d+))?)?([^?#]*)(\?[^#]*)?(?:#.*)?)"); - - std::smatch m; - if (!std::regex_match(location, m, re)) { - return false; - } - - auto scheme = is_ssl() ? "https" : "http"; - - auto next_scheme = m[1].str(); - auto next_host = m[2].str(); - if (next_host.empty()) { - next_host = m[3].str(); - } - auto port_str = m[4].str(); - auto next_path = m[5].str(); - auto next_query = m[6].str(); - - auto next_port = port_; - if (!port_str.empty()) { - next_port = std::stoi(port_str); - } else if (!next_scheme.empty()) { - next_port = next_scheme == "https" ? 443 : 80; - } - - if (next_scheme.empty()) { - next_scheme = scheme; - } - if (next_host.empty()) { - next_host = host_; - } - if (next_path.empty()) { - next_path = "/"; - } - - auto path = detail::decode_url(next_path, true) + next_query; - - if (next_scheme == scheme && next_host == host_ && next_port == port_) { - return detail::redirect(*this, req, res, path, location, error); - } else { - if (next_scheme == "https") { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - SSLClient cli(next_host, next_port); - cli.copy_settings(*this); - if (ca_cert_store_) { - cli.set_ca_cert_store(ca_cert_store_); - } - return detail::redirect(cli, req, res, path, location, error); -#else - return false; -#endif - } else { - ClientImpl cli(next_host, next_port); - cli.copy_settings(*this); - return detail::redirect(cli, req, res, path, location, error); - } - } - } - - inline bool ClientImpl::write_content_with_provider(Stream &strm, const Request &req, - Error &error) const { - auto is_shutting_down = []() { return false; }; - - if (req.is_chunked_content_provider_) { - // TODO: Brotli support - std::unique_ptr compressor; -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { - compressor = detail::make_unique(); - } else -#endif - { - compressor = detail::make_unique(); - } - - return detail::write_content_chunked(strm, req.content_provider_, is_shutting_down, - *compressor, error); - } else { - return detail::write_content(strm, req.content_provider_, 0, req.content_length_, - is_shutting_down, error); - } - } - - inline bool ClientImpl::write_request(Stream &strm, Request &req, bool close_connection, - Error &error) { - // Prepare additional headers - if (close_connection) { - if (!req.has_header("Connection")) { - req.set_header("Connection", "close"); - } - } - - if (!req.has_header("Host")) { - if (is_ssl()) { - if (port_ == 443) { - req.set_header("Host", host_); - } else { - req.set_header("Host", host_and_port_); - } - } else { - if (port_ == 80) { - req.set_header("Host", host_); - } else { - req.set_header("Host", host_and_port_); - } - } - } - - if (!req.has_header("Accept")) { - req.set_header("Accept", "*/*"); - } - -#ifndef CPPHTTPLIB_NO_DEFAULT_USER_AGENT - if (!req.has_header("User-Agent")) { - auto agent = std::string("cpp-httplib/") + CPPHTTPLIB_VERSION; - req.set_header("User-Agent", agent); - } -#endif - - if (req.body.empty()) { - if (req.content_provider_) { - if (!req.is_chunked_content_provider_) { - if (!req.has_header("Content-Length")) { - auto length = std::to_string(req.content_length_); - req.set_header("Content-Length", length); - } - } - } else { - if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH") { - req.set_header("Content-Length", "0"); - } - } - } else { - if (!req.has_header("Content-Type")) { - req.set_header("Content-Type", "text/plain"); - } - - if (!req.has_header("Content-Length")) { - auto length = std::to_string(req.body.size()); - req.set_header("Content-Length", length); - } - } - - if (!basic_auth_password_.empty() || !basic_auth_username_.empty()) { - if (!req.has_header("Authorization")) { - req.headers.insert(make_basic_authentication_header(basic_auth_username_, - basic_auth_password_, false)); - } - } - - if (!proxy_basic_auth_username_.empty() && !proxy_basic_auth_password_.empty()) { - if (!req.has_header("Proxy-Authorization")) { - req.headers.insert(make_basic_authentication_header( - proxy_basic_auth_username_, proxy_basic_auth_password_, true)); - } - } - - if (!bearer_token_auth_token_.empty()) { - if (!req.has_header("Authorization")) { - req.headers.insert( - make_bearer_token_authentication_header(bearer_token_auth_token_, false)); - } - } - - if (!proxy_bearer_token_auth_token_.empty()) { - if (!req.has_header("Proxy-Authorization")) { - req.headers.insert( - make_bearer_token_authentication_header(proxy_bearer_token_auth_token_, true)); - } - } - - // Request line and headers - { - detail::BufferStream bstrm; - - const auto &path = url_encode_ ? detail::encode_url(req.path) : req.path; - bstrm.write_format("%s %s HTTP/1.1\r\n", req.method.c_str(), path.c_str()); - - header_writer_(bstrm, req.headers); - - // Flush buffer - auto &data = bstrm.get_buffer(); - if (!detail::write_data(strm, data.data(), data.size())) { - error = Error::Write; - return false; - } - } - - // Body - if (req.body.empty()) { - return write_content_with_provider(strm, req, error); - } - - if (!detail::write_data(strm, req.body.data(), req.body.size())) { - error = Error::Write; - return false; - } - - return true; - } - - inline std::unique_ptr ClientImpl::send_with_content_provider( - Request &req, const char *body, size_t content_length, ContentProvider content_provider, - ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Error &error) { - if (!content_type.empty()) { - req.set_header("Content-Type", content_type); - } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { - req.set_header("Content-Encoding", "gzip"); - } -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_ && !content_provider_without_length) { - // TODO: Brotli support - detail::gzip_compressor compressor; - - if (content_provider) { - auto ok = true; - size_t offset = 0; - DataSink data_sink; - - data_sink.write = [&](const char *data, size_t data_len) -> bool { - if (ok) { - auto last = offset + data_len == content_length; - - auto ret = compressor.compress( - data, data_len, last, - [&](const char *compressed_data, size_t compressed_data_len) { - req.body.append(compressed_data, compressed_data_len); - return true; - }); - - if (ret) { - offset += data_len; - } else { - ok = false; - } - } - return ok; - }; - - while (ok && offset < content_length) { - if (!content_provider(offset, content_length - offset, data_sink)) { - error = Error::Canceled; - return nullptr; - } - } - } else { - if (!compressor.compress(body, content_length, true, - [&](const char *data, size_t data_len) { - req.body.append(data, data_len); - return true; - })) { - error = Error::Compression; - return nullptr; - } - } - } else -#endif - { - if (content_provider) { - req.content_length_ = content_length; - req.content_provider_ = std::move(content_provider); - req.is_chunked_content_provider_ = false; - } else if (content_provider_without_length) { - req.content_length_ = 0; - req.content_provider_ = - detail::ContentProviderAdapter(std::move(content_provider_without_length)); - req.is_chunked_content_provider_ = true; - req.set_header("Transfer-Encoding", "chunked"); - } else { - req.body.assign(body, content_length); - } - } - - auto res = detail::make_unique(); - return send(req, *res, error) ? std::move(res) : nullptr; - } - - inline Result ClientImpl::send_with_content_provider( - const std::string &method, const std::string &path, const Headers &headers, - const char *body, size_t content_length, ContentProvider content_provider, - ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Progress progress) { - Request req; - req.method = method; - req.headers = headers; - req.path = path; - req.progress = progress; - - auto error = Error::Success; - - auto res = send_with_content_provider( - req, body, content_length, std::move(content_provider), - std::move(content_provider_without_length), content_type, error); - - return Result{std::move(res), error, std::move(req.headers)}; - } - - inline std::string ClientImpl::adjust_host_string(const std::string &host) const { - if (host.find(':') != std::string::npos) { - return "[" + host + "]"; - } - return host; - } - - inline bool ClientImpl::process_request(Stream &strm, Request &req, Response &res, - bool close_connection, Error &error) { - // Send request - if (!write_request(strm, req, close_connection, error)) { - return false; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (is_ssl()) { - auto is_proxy_enabled = !proxy_host_.empty() && proxy_port_ != -1; - if (!is_proxy_enabled) { - char buf[1]; - if (SSL_peek(socket_.ssl, buf, 1) == 0 && - SSL_get_error(socket_.ssl, 0) == SSL_ERROR_ZERO_RETURN) { - error = Error::SSLPeerCouldBeClosed_; - return false; - } - } - } -#endif - - // Receive response and headers - if (!read_response_line(strm, req, res) || !detail::read_headers(strm, res.headers)) { - error = Error::Read; - return false; - } - - // Body - if ((res.status != StatusCode::NoContent_204) && req.method != "HEAD" && - req.method != "CONNECT") { - auto redirect = 300 < res.status && res.status < 400 && follow_location_; - - if (req.response_handler && !redirect) { - if (!req.response_handler(res)) { - error = Error::Canceled; - return false; - } - } - - auto out = - req.content_receiver - ? static_cast( - [&](const char *buf, size_t n, uint64_t off, uint64_t len) { - if (redirect) { - return true; - } - auto ret = req.content_receiver(buf, n, off, len); - if (!ret) { - error = Error::Canceled; - } - return ret; - }) - : static_cast( - [&](const char *buf, size_t n, uint64_t /*off*/, uint64_t /*len*/) { - if (res.body.size() + n > res.body.max_size()) { - return false; - } - res.body.append(buf, n); - return true; - }); - - auto progress = [&](uint64_t current, uint64_t total) { - if (!req.progress || redirect) { - return true; - } - auto ret = req.progress(current, total); - if (!ret) { - error = Error::Canceled; - } - return ret; - }; - - int dummy_status; - if (!detail::read_content(strm, res, (std::numeric_limits::max)(), dummy_status, - std::move(progress), std::move(out), decompress_)) { - if (error != Error::Canceled) { - error = Error::Read; - } - return false; - } - } - - // Log - if (logger_) { - logger_(req, res); - } - - return true; - } - - inline ContentProviderWithoutLength ClientImpl::get_multipart_content_provider( - const std::string &boundary, const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items) const { - size_t cur_item = 0; - size_t cur_start = 0; - // cur_item and cur_start are copied to within the std::function and maintain - // state between successive calls - return [&, cur_item, cur_start](size_t offset, DataSink &sink) mutable -> bool { - if (!offset && !items.empty()) { - sink.os << detail::serialize_multipart_formdata(items, boundary, false); - return true; - } else if (cur_item < provider_items.size()) { - if (!cur_start) { - const auto &begin = detail::serialize_multipart_formdata_item_begin( - provider_items[cur_item], boundary); - offset += begin.size(); - cur_start = offset; - sink.os << begin; - } - - DataSink cur_sink; - auto has_data = true; - cur_sink.write = sink.write; - cur_sink.done = [&]() { has_data = false; }; - - if (!provider_items[cur_item].provider(offset - cur_start, cur_sink)) { - return false; - } - - if (!has_data) { - sink.os << detail::serialize_multipart_formdata_item_end(); - cur_item++; - cur_start = 0; - } - return true; - } else { - sink.os << detail::serialize_multipart_formdata_finish(boundary); - sink.done(); - return true; - } - }; - } - - inline bool ClientImpl::process_socket(const Socket &socket, - std::function callback) { - return detail::process_client_socket(socket.sock, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, - std::move(callback)); - } - - inline bool ClientImpl::is_ssl() const { return false; } - - inline Result ClientImpl::Get(const std::string &path) { - return Get(path, Headers(), Progress()); - } - - inline Result ClientImpl::Get(const std::string &path, Progress progress) { - return Get(path, Headers(), std::move(progress)); - } - - inline Result ClientImpl::Get(const std::string &path, const Headers &headers) { - return Get(path, headers, Progress()); - } - - inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.progress = std::move(progress); - - return send_(std::move(req)); - } - - inline Result ClientImpl::Get(const std::string &path, ContentReceiver content_receiver) { - return Get(path, Headers(), nullptr, std::move(content_receiver), nullptr); - } - - inline Result ClientImpl::Get(const std::string &path, ContentReceiver content_receiver, - Progress progress) { - return Get(path, Headers(), nullptr, std::move(content_receiver), std::move(progress)); - } - - inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver) { - return Get(path, headers, nullptr, std::move(content_receiver), nullptr); - } - - inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver, Progress progress) { - return Get(path, headers, nullptr, std::move(content_receiver), std::move(progress)); - } - - inline Result ClientImpl::Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver) { - return Get(path, Headers(), std::move(response_handler), std::move(content_receiver), - nullptr); - } - - inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver) { - return Get(path, headers, std::move(response_handler), std::move(content_receiver), - nullptr); - } - - inline Result ClientImpl::Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress) { - return Get(path, Headers(), std::move(response_handler), std::move(content_receiver), - std::move(progress)); - } - - inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.response_handler = std::move(response_handler); - req.content_receiver = [content_receiver](const char *data, size_t data_length, - uint64_t /*offset*/, uint64_t /*total_length*/) { - return content_receiver(data, data_length); - }; - req.progress = std::move(progress); - - return send_(std::move(req)); - } - - inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, - const Headers &headers, Progress progress) { - if (params.empty()) { - return Get(path, headers); - } - - std::string path_with_query = append_query_params(path, params); - return Get(path_with_query, headers, std::move(progress)); - } - - inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, - const Headers &headers, ContentReceiver content_receiver, - Progress progress) { - return Get(path, params, headers, nullptr, std::move(content_receiver), - std::move(progress)); - } - - inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, - const Headers &headers, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress) { - if (params.empty()) { - return Get(path, headers, std::move(response_handler), std::move(content_receiver), - std::move(progress)); - } - - std::string path_with_query = append_query_params(path, params); - return Get(path_with_query, headers, std::move(response_handler), - std::move(content_receiver), std::move(progress)); - } - - inline Result ClientImpl::Head(const std::string &path) { return Head(path, Headers()); } - - inline Result ClientImpl::Head(const std::string &path, const Headers &headers) { - Request req; - req.method = "HEAD"; - req.headers = headers; - req.path = path; - - return send_(std::move(req)); - } - - inline Result ClientImpl::Post(const std::string &path) { - return Post(path, std::string(), std::string()); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers) { - return Post(path, headers, nullptr, 0, std::string()); - } - - inline Result ClientImpl::Post(const std::string &path, const char *body, size_t content_length, - const std::string &content_type) { - return Post(path, Headers(), body, content_length, content_type, nullptr); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type) { - return send_with_content_provider("POST", path, headers, body, content_length, nullptr, - nullptr, content_type, nullptr); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, Progress progress) { - return send_with_content_provider("POST", path, headers, body, content_length, nullptr, - nullptr, content_type, progress); - } - - inline Result ClientImpl::Post(const std::string &path, const std::string &body, - const std::string &content_type) { - return Post(path, Headers(), body, content_type); - } - - inline Result ClientImpl::Post(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return Post(path, Headers(), body, content_type, progress); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return send_with_content_provider("POST", path, headers, body.data(), body.size(), nullptr, - nullptr, content_type, nullptr); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return send_with_content_provider("POST", path, headers, body.data(), body.size(), nullptr, - nullptr, content_type, progress); - } - - inline Result ClientImpl::Post(const std::string &path, const Params ¶ms) { - return Post(path, Headers(), params); - } - - inline Result ClientImpl::Post(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type) { - return Post(path, Headers(), content_length, std::move(content_provider), content_type); - } - - inline Result ClientImpl::Post(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return Post(path, Headers(), std::move(content_provider), content_type); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - size_t content_length, ContentProvider content_provider, - const std::string &content_type) { - return send_with_content_provider("POST", path, headers, nullptr, content_length, - std::move(content_provider), nullptr, content_type, - nullptr); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return send_with_content_provider("POST", path, headers, nullptr, 0, nullptr, - std::move(content_provider), content_type, nullptr); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Post(path, headers, query, "application/x-www-form-urlencoded"); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const Params ¶ms, Progress progress) { - auto query = detail::params_to_query_str(params); - return Post(path, headers, query, "application/x-www-form-urlencoded", progress); - } - - inline Result ClientImpl::Post(const std::string &path, const MultipartFormDataItems &items) { - return Post(path, Headers(), items); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Post(path, headers, body, content_type); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const std::string &boundary) { - if (!detail::is_multipart_boundary_chars_valid(boundary)) { - return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; - } - - const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Post(path, headers, body, content_type); - } - - inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); - return send_with_content_provider( - "POST", path, headers, nullptr, 0, nullptr, - get_multipart_content_provider(boundary, items, provider_items), content_type, nullptr); - } - - inline Result ClientImpl::Put(const std::string &path) { - return Put(path, std::string(), std::string()); - } - - inline Result ClientImpl::Put(const std::string &path, const char *body, size_t content_length, - const std::string &content_type) { - return Put(path, Headers(), body, content_length, content_type); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type) { - return send_with_content_provider("PUT", path, headers, body, content_length, nullptr, - nullptr, content_type, nullptr); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, - Progress progress) { - return send_with_content_provider("PUT", path, headers, body, content_length, nullptr, - nullptr, content_type, progress); - } - - inline Result ClientImpl::Put(const std::string &path, const std::string &body, - const std::string &content_type) { - return Put(path, Headers(), body, content_type); - } - - inline Result ClientImpl::Put(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return Put(path, Headers(), body, content_type, progress); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return send_with_content_provider("PUT", path, headers, body.data(), body.size(), nullptr, - nullptr, content_type, nullptr); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return send_with_content_provider("PUT", path, headers, body.data(), body.size(), nullptr, - nullptr, content_type, progress); - } - - inline Result ClientImpl::Put(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type) { - return Put(path, Headers(), content_length, std::move(content_provider), content_type); - } - - inline Result ClientImpl::Put(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return Put(path, Headers(), std::move(content_provider), content_type); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - size_t content_length, ContentProvider content_provider, - const std::string &content_type) { - return send_with_content_provider("PUT", path, headers, nullptr, content_length, - std::move(content_provider), nullptr, content_type, - nullptr); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return send_with_content_provider("PUT", path, headers, nullptr, 0, nullptr, - std::move(content_provider), content_type, nullptr); - } - - inline Result ClientImpl::Put(const std::string &path, const Params ¶ms) { - return Put(path, Headers(), params); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Put(path, headers, query, "application/x-www-form-urlencoded"); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const Params ¶ms, Progress progress) { - auto query = detail::params_to_query_str(params); - return Put(path, headers, query, "application/x-www-form-urlencoded", progress); - } - - inline Result ClientImpl::Put(const std::string &path, const MultipartFormDataItems &items) { - return Put(path, Headers(), items); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Put(path, headers, body, content_type); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const std::string &boundary) { - if (!detail::is_multipart_boundary_chars_valid(boundary)) { - return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; - } - - const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Put(path, headers, body, content_type); - } - - inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = detail::serialize_multipart_formdata_get_content_type(boundary); - return send_with_content_provider( - "PUT", path, headers, nullptr, 0, nullptr, - get_multipart_content_provider(boundary, items, provider_items), content_type, nullptr); - } - inline Result ClientImpl::Patch(const std::string &path) { - return Patch(path, std::string(), std::string()); - } - - inline Result ClientImpl::Patch(const std::string &path, const char *body, - size_t content_length, const std::string &content_type) { - return Patch(path, Headers(), body, content_length, content_type); - } - - inline Result ClientImpl::Patch(const std::string &path, const char *body, - size_t content_length, const std::string &content_type, - Progress progress) { - return Patch(path, Headers(), body, content_length, content_type, progress); - } - - inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type) { - return Patch(path, headers, body, content_length, content_type, nullptr); - } - - inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, Progress progress) { - return send_with_content_provider("PATCH", path, headers, body, content_length, nullptr, - nullptr, content_type, progress); - } - - inline Result ClientImpl::Patch(const std::string &path, const std::string &body, - const std::string &content_type) { - return Patch(path, Headers(), body, content_type); - } - - inline Result ClientImpl::Patch(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return Patch(path, Headers(), body, content_type, progress); - } - - inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return Patch(path, headers, body, content_type, nullptr); - } - - inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return send_with_content_provider("PATCH", path, headers, body.data(), body.size(), nullptr, - nullptr, content_type, progress); - } - - inline Result ClientImpl::Patch(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type) { - return Patch(path, Headers(), content_length, std::move(content_provider), content_type); - } - - inline Result ClientImpl::Patch(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return Patch(path, Headers(), std::move(content_provider), content_type); - } - - inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - size_t content_length, ContentProvider content_provider, - const std::string &content_type) { - return send_with_content_provider("PATCH", path, headers, nullptr, content_length, - std::move(content_provider), nullptr, content_type, - nullptr); - } - - inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return send_with_content_provider("PATCH", path, headers, nullptr, 0, nullptr, - std::move(content_provider), content_type, nullptr); - } - - inline Result ClientImpl::Delete(const std::string &path) { - return Delete(path, Headers(), std::string(), std::string()); - } - - inline Result ClientImpl::Delete(const std::string &path, const Headers &headers) { - return Delete(path, headers, std::string(), std::string()); - } - - inline Result ClientImpl::Delete(const std::string &path, const char *body, - size_t content_length, const std::string &content_type) { - return Delete(path, Headers(), body, content_length, content_type); - } - - inline Result ClientImpl::Delete(const std::string &path, const char *body, - size_t content_length, const std::string &content_type, - Progress progress) { - return Delete(path, Headers(), body, content_length, content_type, progress); - } - - inline Result ClientImpl::Delete(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type) { - return Delete(path, headers, body, content_length, content_type, nullptr); - } - - inline Result ClientImpl::Delete(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, Progress progress) { - Request req; - req.method = "DELETE"; - req.headers = headers; - req.path = path; - req.progress = progress; - - if (!content_type.empty()) { - req.set_header("Content-Type", content_type); - } - req.body.assign(body, content_length); - - return send_(std::move(req)); - } - - inline Result ClientImpl::Delete(const std::string &path, const std::string &body, - const std::string &content_type) { - return Delete(path, Headers(), body.data(), body.size(), content_type); - } - - inline Result ClientImpl::Delete(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return Delete(path, Headers(), body.data(), body.size(), content_type, progress); - } - - inline Result ClientImpl::Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return Delete(path, headers, body.data(), body.size(), content_type); - } - - inline Result ClientImpl::Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return Delete(path, headers, body.data(), body.size(), content_type, progress); - } - - inline Result ClientImpl::Options(const std::string &path) { return Options(path, Headers()); } - - inline Result ClientImpl::Options(const std::string &path, const Headers &headers) { - Request req; - req.method = "OPTIONS"; - req.headers = headers; - req.path = path; - - return send_(std::move(req)); - } - - inline void ClientImpl::stop() { - std::lock_guard guard(socket_mutex_); - - // If there is anything ongoing right now, the ONLY thread-safe thing we can - // do is to shutdown_socket, so that threads using this socket suddenly - // discover they can't read/write any more and error out. Everything else - // (closing the socket, shutting ssl down) is unsafe because these actions are - // not thread-safe. - if (socket_requests_in_flight_ > 0) { - shutdown_socket(socket_); - - // Aside from that, we set a flag for the socket to be closed when we're - // done. - socket_should_be_closed_when_request_is_done_ = true; - return; - } - - // Otherwise, still holding the mutex, we can shut everything down ourselves - shutdown_ssl(socket_, true); - shutdown_socket(socket_); - close_socket(socket_); - } - - inline std::string ClientImpl::host() const { return host_; } - - inline int ClientImpl::port() const { return port_; } - - inline size_t ClientImpl::is_socket_open() const { - std::lock_guard guard(socket_mutex_); - return socket_.is_open(); - } - - inline socket_t ClientImpl::socket() const { return socket_.sock; } - - inline void ClientImpl::set_connection_timeout(time_t sec, time_t usec) { - connection_timeout_sec_ = sec; - connection_timeout_usec_ = usec; - } - - inline void ClientImpl::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; - } - - inline void ClientImpl::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; - } - - inline void ClientImpl::set_basic_auth(const std::string &username, - const std::string &password) { - basic_auth_username_ = username; - basic_auth_password_ = password; - } - - inline void ClientImpl::set_bearer_token_auth(const std::string &token) { - bearer_token_auth_token_ = token; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline void ClientImpl::set_digest_auth(const std::string &username, - const std::string &password) { - digest_auth_username_ = username; - digest_auth_password_ = password; - } -#endif - - inline void ClientImpl::set_keep_alive(bool on) { keep_alive_ = on; } - - inline void ClientImpl::set_follow_location(bool on) { follow_location_ = on; } - - inline void ClientImpl::set_url_encode(bool on) { url_encode_ = on; } - - inline void ClientImpl::set_hostname_addr_map(std::map addr_map) { - addr_map_ = std::move(addr_map); - } - - inline void ClientImpl::set_default_headers(Headers headers) { - default_headers_ = std::move(headers); - } - - inline void ClientImpl::set_header_writer( - std::function const &writer) { - header_writer_ = writer; - } - - inline void ClientImpl::set_address_family(int family) { address_family_ = family; } - - inline void ClientImpl::set_tcp_nodelay(bool on) { tcp_nodelay_ = on; } - - inline void ClientImpl::set_socket_options(SocketOptions socket_options) { - socket_options_ = std::move(socket_options); - } - - inline void ClientImpl::set_compress(bool on) { compress_ = on; } - - inline void ClientImpl::set_decompress(bool on) { decompress_ = on; } - - inline void ClientImpl::set_interface(const std::string &intf) { interface_ = intf; } - - inline void ClientImpl::set_proxy(const std::string &host, int port) { - proxy_host_ = host; - proxy_port_ = port; - } - - inline void ClientImpl::set_proxy_basic_auth(const std::string &username, - const std::string &password) { - proxy_basic_auth_username_ = username; - proxy_basic_auth_password_ = password; - } - - inline void ClientImpl::set_proxy_bearer_token_auth(const std::string &token) { - proxy_bearer_token_auth_token_ = token; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline void ClientImpl::set_proxy_digest_auth(const std::string &username, - const std::string &password) { - proxy_digest_auth_username_ = username; - proxy_digest_auth_password_ = password; - } - - inline void ClientImpl::set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path) { - ca_cert_file_path_ = ca_cert_file_path; - ca_cert_dir_path_ = ca_cert_dir_path; - } - - inline void ClientImpl::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (ca_cert_store && ca_cert_store != ca_cert_store_) { - ca_cert_store_ = ca_cert_store; - } - } - - inline X509_STORE *ClientImpl::create_ca_cert_store(const char *ca_cert, - std::size_t size) const { - auto mem = BIO_new_mem_buf(ca_cert, static_cast(size)); - if (!mem) { - return nullptr; - } - - auto inf = PEM_X509_INFO_read_bio(mem, nullptr, nullptr, nullptr); - if (!inf) { - BIO_free_all(mem); - return nullptr; - } - - auto cts = X509_STORE_new(); - if (cts) { - for (auto i = 0; i < static_cast(sk_X509_INFO_num(inf)); i++) { - auto itmp = sk_X509_INFO_value(inf, i); - if (!itmp) { - continue; - } - - if (itmp->x509) { - X509_STORE_add_cert(cts, itmp->x509); - } - if (itmp->crl) { - X509_STORE_add_crl(cts, itmp->crl); - } - } - } - - sk_X509_INFO_pop_free(inf, X509_INFO_free); - BIO_free_all(mem); - return cts; - } - - inline void ClientImpl::enable_server_certificate_verification(bool enabled) { - server_certificate_verification_ = enabled; - } -#endif - - inline void ClientImpl::set_logger(Logger logger) { logger_ = std::move(logger); } - -/* - * SSL Implementation - */ -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - namespace detail { - - template - inline SSL *ssl_new(socket_t sock, SSL_CTX *ctx, std::mutex &ctx_mutex, - U SSL_connect_or_accept, V setup) { - SSL *ssl = nullptr; - { - std::lock_guard guard(ctx_mutex); - ssl = SSL_new(ctx); - } - - if (ssl) { - set_nonblocking(sock, true); - auto bio = BIO_new_socket(static_cast(sock), BIO_NOCLOSE); - BIO_set_nbio(bio, 1); - SSL_set_bio(ssl, bio, bio); - - if (!setup(ssl) || SSL_connect_or_accept(ssl) != 1) { - SSL_shutdown(ssl); - { - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - set_nonblocking(sock, false); - return nullptr; - } - BIO_set_nbio(bio, 0); - set_nonblocking(sock, false); - } - - return ssl; - } - - inline void ssl_delete(std::mutex &ctx_mutex, SSL *ssl, bool shutdown_gracefully) { - // sometimes we may want to skip this to try to avoid SIGPIPE if we know - // the remote has closed the network connection - // Note that it is not always possible to avoid SIGPIPE, this is merely a - // best-efforts. - if (shutdown_gracefully) { - SSL_shutdown(ssl); - } - - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - - template - bool ssl_connect_or_accept_nonblocking(socket_t sock, SSL *ssl, U ssl_connect_or_accept, - time_t timeout_sec, time_t timeout_usec) { - auto res = 0; - while ((res = ssl_connect_or_accept(ssl)) != 1) { - auto err = SSL_get_error(ssl, res); - switch (err) { - case SSL_ERROR_WANT_READ: - if (select_read(sock, timeout_sec, timeout_usec) > 0) { - continue; - } - break; - case SSL_ERROR_WANT_WRITE: - if (select_write(sock, timeout_sec, timeout_usec) > 0) { - continue; - } - break; - default: - break; - } - return false; - } - return true; - } - - template - inline bool process_server_socket_ssl(const std::atomic &svr_sock, SSL *ssl, - socket_t sock, size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, - time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - T callback) { - return process_server_socket_core( - svr_sock, sock, keep_alive_max_count, keep_alive_timeout_sec, - [&](bool close_connection, bool &connection_closed) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - return callback(strm, close_connection, connection_closed); - }); - } - - template - inline bool process_client_socket_ssl(SSL *ssl, socket_t sock, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, write_timeout_sec, - write_timeout_usec); - return callback(strm); - } - - class SSLInit { - public: - SSLInit() { - OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, - NULL); - } - }; - - // SSL socket stream implementation - inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL *ssl, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec) - : sock_(sock), - ssl_(ssl), - read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec) { - SSL_clear_mode(ssl, SSL_MODE_AUTO_RETRY); - } - - inline SSLSocketStream::~SSLSocketStream() = default; - - inline bool SSLSocketStream::is_readable() const { - return detail::select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; - } - - inline bool SSLSocketStream::is_writable() const { - return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0 && - is_socket_alive(sock_); - } - - inline ssize_t SSLSocketStream::read(char *ptr, size_t size) { - if (SSL_pending(ssl_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } else if (is_readable()) { - auto ret = SSL_read(ssl_, ptr, static_cast(size)); - if (ret < 0) { - auto err = SSL_get_error(ssl_, ret); - auto n = 1000; -#ifdef _WIN32 - while (--n >= 0 && - (err == SSL_ERROR_WANT_READ || - (err == SSL_ERROR_SYSCALL && WSAGetLastError() == WSAETIMEDOUT))) { -#else - while (--n >= 0 && err == SSL_ERROR_WANT_READ) { -#endif - if (SSL_pending(ssl_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } else if (is_readable()) { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - ret = SSL_read(ssl_, ptr, static_cast(size)); - if (ret >= 0) { - return ret; - } - err = SSL_get_error(ssl_, ret); - } else { - return -1; - } - } - } - return ret; - } - return -1; - } - - inline ssize_t SSLSocketStream::write(const char *ptr, size_t size) { - if (is_writable()) { - auto handle_size = - static_cast(std::min(size, (std::numeric_limits::max)())); - - auto ret = SSL_write(ssl_, ptr, static_cast(handle_size)); - if (ret < 0) { - auto err = SSL_get_error(ssl_, ret); - auto n = 1000; -#ifdef _WIN32 - while (--n >= 0 && - (err == SSL_ERROR_WANT_WRITE || - (err == SSL_ERROR_SYSCALL && WSAGetLastError() == WSAETIMEDOUT))) { -#else - while (--n >= 0 && err == SSL_ERROR_WANT_WRITE) { -#endif - if (is_writable()) { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - ret = SSL_write(ssl_, ptr, static_cast(handle_size)); - if (ret >= 0) { - return ret; - } - err = SSL_get_error(ssl_, ret); - } else { - return -1; - } - } - } - return ret; - } - return -1; - } - - inline void SSLSocketStream::get_remote_ip_and_port(std::string &ip, int &port) const { - detail::get_remote_ip_and_port(sock_, ip, port); - } - - inline void SSLSocketStream::get_local_ip_and_port(std::string &ip, int &port) const { - detail::get_local_ip_and_port(sock_, ip, port); - } - - inline socket_t SSLSocketStream::socket() const { return sock_; } - - static SSLInit sslinit_; - - } // namespace detail - - // SSL HTTP server implementation - inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path, - const char *client_ca_cert_dir_path, - const char *private_key_password) { - ctx_ = SSL_CTX_new(TLS_server_method()); - - if (ctx_) { - SSL_CTX_set_options( - ctx_, SSL_OP_NO_COMPRESSION | SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - SSL_CTX_set_min_proto_version(ctx_, TLS1_1_VERSION); - - if (private_key_password != nullptr && (private_key_password[0] != '\0')) { - SSL_CTX_set_default_passwd_cb_userdata( - ctx_, reinterpret_cast(const_cast(private_key_password))); - } - - if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, private_key_path, SSL_FILETYPE_PEM) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_file_path || client_ca_cert_dir_path) { - SSL_CTX_load_verify_locations(ctx_, client_ca_cert_file_path, - client_ca_cert_dir_path); - - SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, - nullptr); - } - } - } - - inline SSLServer::SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store) { - ctx_ = SSL_CTX_new(TLS_server_method()); - - if (ctx_) { - SSL_CTX_set_options( - ctx_, SSL_OP_NO_COMPRESSION | SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - SSL_CTX_set_min_proto_version(ctx_, TLS1_1_VERSION); - - if (SSL_CTX_use_certificate(ctx_, cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, private_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_store) { - SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); - - SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, - nullptr); - } - } - } - - inline SSLServer::SSLServer( - const std::function &setup_ssl_ctx_callback) { - ctx_ = SSL_CTX_new(TLS_method()); - if (ctx_) { - if (!setup_ssl_ctx_callback(*ctx_)) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } - } - - inline SSLServer::~SSLServer() { - if (ctx_) { - SSL_CTX_free(ctx_); - } - } - - inline bool SSLServer::is_valid() const { return ctx_; } - - inline SSL_CTX *SSLServer::ssl_context() const { return ctx_; } - - inline void SSLServer::update_certs(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store) { - std::lock_guard guard(ctx_mutex_); - - SSL_CTX_use_certificate(ctx_, cert); - SSL_CTX_use_PrivateKey(ctx_, private_key); - - if (client_ca_cert_store != nullptr) { - SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); - } - } - - inline bool SSLServer::process_and_close_socket(socket_t sock) { - auto ssl = detail::ssl_new( - sock, ctx_, ctx_mutex_, - [&](SSL *ssl2) { - return detail::ssl_connect_or_accept_nonblocking( - sock, ssl2, SSL_accept, read_timeout_sec_, read_timeout_usec_); - }, - [](SSL * /*ssl2*/) { return true; }); - - auto ret = false; - if (ssl) { - ret = detail::process_server_socket_ssl( - svr_sock_, ssl, sock, keep_alive_max_count_, keep_alive_timeout_sec_, - read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, write_timeout_usec_, - [this, ssl](Stream &strm, bool close_connection, bool &connection_closed) { - return process_request(strm, close_connection, connection_closed, - [&](Request &req) { req.ssl = ssl; }); - }); - - // Shutdown gracefully if the result seemed successful, non-gracefully if - // the connection appeared to be closed. - const bool shutdown_gracefully = ret; - detail::ssl_delete(ctx_mutex_, ssl, shutdown_gracefully); - } - - detail::shutdown_socket(sock); - detail::close_socket(sock); - return ret; - } - - // SSL HTTP client implementation - inline SSLClient::SSLClient(const std::string &host) - : SSLClient(host, 443, std::string(), std::string()) {} - - inline SSLClient::SSLClient(const std::string &host, int port) - : SSLClient(host, port, std::string(), std::string()) {} - - inline SSLClient::SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path, - const std::string &private_key_password) - : ClientImpl(host, port, client_cert_path, client_key_path) { - ctx_ = SSL_CTX_new(TLS_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { host_components_.emplace_back(b, e); }); - - if (!client_cert_path.empty() && !client_key_path.empty()) { - if (!private_key_password.empty()) { - SSL_CTX_set_default_passwd_cb_userdata( - ctx_, - reinterpret_cast(const_cast(private_key_password.c_str()))); - } - - if (SSL_CTX_use_certificate_file(ctx_, client_cert_path.c_str(), SSL_FILETYPE_PEM) != - 1 || - SSL_CTX_use_PrivateKey_file(ctx_, client_key_path.c_str(), SSL_FILETYPE_PEM) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } - } - - inline SSLClient::SSLClient(const std::string &host, int port, X509 *client_cert, - EVP_PKEY *client_key, const std::string &private_key_password) - : ClientImpl(host, port) { - ctx_ = SSL_CTX_new(TLS_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { host_components_.emplace_back(b, e); }); - - if (client_cert != nullptr && client_key != nullptr) { - if (!private_key_password.empty()) { - SSL_CTX_set_default_passwd_cb_userdata( - ctx_, - reinterpret_cast(const_cast(private_key_password.c_str()))); - } - - if (SSL_CTX_use_certificate(ctx_, client_cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, client_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } - } - - inline SSLClient::~SSLClient() { - if (ctx_) { - SSL_CTX_free(ctx_); - } - // Make sure to shut down SSL since shutdown_ssl will resolve to the - // base function rather than the derived function once we get to the - // base class destructor, and won't free the SSL (causing a leak). - shutdown_ssl_impl(socket_, true); - } - - inline bool SSLClient::is_valid() const { return ctx_; } - - inline void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (ca_cert_store) { - if (ctx_) { - if (SSL_CTX_get_cert_store(ctx_) != ca_cert_store) { - // Free memory allocated for old cert and use new store `ca_cert_store` - SSL_CTX_set_cert_store(ctx_, ca_cert_store); - } - } else { - X509_STORE_free(ca_cert_store); - } - } - } - - inline void SSLClient::load_ca_cert_store(const char *ca_cert, std::size_t size) { - set_ca_cert_store(ClientImpl::create_ca_cert_store(ca_cert, size)); - } - - inline long SSLClient::get_openssl_verify_result() const { return verify_result_; } - - inline SSL_CTX *SSLClient::ssl_context() const { return ctx_; } - - inline bool SSLClient::create_and_connect_socket(Socket &socket, Error &error) { - return is_valid() && ClientImpl::create_and_connect_socket(socket, error); - } - - // Assumes that socket_mutex_ is locked and that there are no requests in flight - inline bool SSLClient::connect_with_proxy(Socket &socket, Response &res, bool &success, - Error &error) { - success = true; - Response proxy_res; - if (!detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, [&](Stream &strm) { - Request req2; - req2.method = "CONNECT"; - req2.path = host_and_port_; - return process_request(strm, req2, proxy_res, false, error); - })) { - // Thread-safe to close everything because we are assuming there are no - // requests in flight - shutdown_ssl(socket, true); - shutdown_socket(socket); - close_socket(socket); - success = false; - return false; - } - - if (proxy_res.status == StatusCode::ProxyAuthenticationRequired_407) { - if (!proxy_digest_auth_username_.empty() && !proxy_digest_auth_password_.empty()) { - std::map auth; - if (detail::parse_www_authenticate(proxy_res, auth, true)) { - proxy_res = Response(); - if (!detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, [&](Stream &strm) { - Request req3; - req3.method = "CONNECT"; - req3.path = host_and_port_; - req3.headers.insert(detail::make_digest_authentication_header( - req3, auth, 1, detail::random_string(10), - proxy_digest_auth_username_, proxy_digest_auth_password_, - true)); - return process_request(strm, req3, proxy_res, false, error); - })) { - // Thread-safe to close everything because we are assuming there are - // no requests in flight - shutdown_ssl(socket, true); - shutdown_socket(socket); - close_socket(socket); - success = false; - return false; - } - } - } - } - - // If status code is not 200, proxy request is failed. - // Set error to ProxyConnection and return proxy response - // as the response of the request - if (proxy_res.status != StatusCode::OK_200) { - error = Error::ProxyConnection; - res = std::move(proxy_res); - // Thread-safe to close everything because we are assuming there are - // no requests in flight - shutdown_ssl(socket, true); - shutdown_socket(socket); - close_socket(socket); - return false; - } - - return true; - } - - inline bool SSLClient::load_certs() { - auto ret = true; - - std::call_once(initialize_cert_, [&]() { - std::lock_guard guard(ctx_mutex_); - if (!ca_cert_file_path_.empty()) { - if (!SSL_CTX_load_verify_locations(ctx_, ca_cert_file_path_.c_str(), nullptr)) { - ret = false; - } - } else if (!ca_cert_dir_path_.empty()) { - if (!SSL_CTX_load_verify_locations(ctx_, nullptr, ca_cert_dir_path_.c_str())) { - ret = false; - } - } else { - auto loaded = false; -#ifdef _WIN32 - loaded = detail::load_system_certs_on_windows(SSL_CTX_get_cert_store(ctx_)); -#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && defined(__APPLE__) -#if TARGET_OS_OSX - loaded = detail::load_system_certs_on_macos(SSL_CTX_get_cert_store(ctx_)); -#endif // TARGET_OS_OSX -#endif // _WIN32 - if (!loaded) { - SSL_CTX_set_default_verify_paths(ctx_); - } - } - }); - - return ret; - } - - inline bool SSLClient::initialize_ssl(Socket &socket, Error &error) { - auto ssl = detail::ssl_new( - socket.sock, ctx_, ctx_mutex_, - [&](SSL *ssl2) { - if (server_certificate_verification_) { - if (!load_certs()) { - error = Error::SSLLoadingCerts; - return false; - } - SSL_set_verify(ssl2, SSL_VERIFY_NONE, nullptr); - } - - if (!detail::ssl_connect_or_accept_nonblocking(socket.sock, ssl2, SSL_connect, - connection_timeout_sec_, - connection_timeout_usec_)) { - error = Error::SSLConnection; - return false; - } - - if (server_certificate_verification_) { - verify_result_ = SSL_get_verify_result(ssl2); - - if (verify_result_ != X509_V_OK) { - error = Error::SSLServerVerification; - return false; - } - - auto server_cert = SSL_get1_peer_certificate(ssl2); - - if (server_cert == nullptr) { - error = Error::SSLServerVerification; - return false; - } - - if (!verify_host(server_cert)) { - X509_free(server_cert); - error = Error::SSLServerVerification; - return false; - } - X509_free(server_cert); - } - - return true; - }, - [&](SSL *ssl2) { - // NOTE: Direct call instead of using the OpenSSL macro to suppress - // -Wold-style-cast warning - // SSL_set_tlsext_host_name(ssl2, host_.c_str()); - SSL_ctrl(ssl2, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, - static_cast(const_cast(host_.c_str()))); - return true; - }); - - if (ssl) { - socket.ssl = ssl; - return true; - } - - shutdown_socket(socket); - close_socket(socket); - return false; - } - - inline void SSLClient::shutdown_ssl(Socket &socket, bool shutdown_gracefully) { - shutdown_ssl_impl(socket, shutdown_gracefully); - } - - inline void SSLClient::shutdown_ssl_impl(Socket &socket, bool shutdown_gracefully) { - if (socket.sock == INVALID_SOCKET) { - assert(socket.ssl == nullptr); - return; - } - if (socket.ssl) { - detail::ssl_delete(ctx_mutex_, socket.ssl, shutdown_gracefully); - socket.ssl = nullptr; - } - assert(socket.ssl == nullptr); - } - - inline bool SSLClient::process_socket(const Socket &socket, - std::function callback) { - assert(socket.ssl); - return detail::process_client_socket_ssl(socket.ssl, socket.sock, read_timeout_sec_, - read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, std::move(callback)); - } - - inline bool SSLClient::is_ssl() const { return true; } - - inline bool SSLClient::verify_host(X509 *server_cert) const { - /* Quote from RFC2818 section 3.1 "Server Identity" - - If a subjectAltName extension of type dNSName is present, that MUST - be used as the identity. Otherwise, the (most specific) Common Name - field in the Subject field of the certificate MUST be used. Although - the use of the Common Name is existing practice, it is deprecated and - Certification Authorities are encouraged to use the dNSName instead. - - Matching is performed using the matching rules specified by - [RFC2459]. If more than one identity of a given type is present in - the certificate (e.g., more than one dNSName name, a match in any one - of the set is considered acceptable.) Names may contain the wildcard - character * which is considered to match any single domain name - component or component fragment. E.g., *.a.com matches foo.a.com but - not bar.foo.a.com. f*.com matches foo.com but not bar.com. - - In some cases, the URI is specified as an IP address rather than a - hostname. In this case, the iPAddress subjectAltName must be present - in the certificate and must exactly match the IP in the URI. - - */ - return verify_host_with_subject_alt_name(server_cert) || - verify_host_with_common_name(server_cert); - } - - inline bool SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { - auto ret = false; - - auto type = GEN_DNS; - - struct in6_addr addr6 {}; - struct in_addr addr {}; - size_t addr_len = 0; - -#ifndef __MINGW32__ - if (inet_pton(AF_INET6, host_.c_str(), &addr6)) { - type = GEN_IPADD; - addr_len = sizeof(struct in6_addr); - } else if (inet_pton(AF_INET, host_.c_str(), &addr)) { - type = GEN_IPADD; - addr_len = sizeof(struct in_addr); - } -#endif - - auto alt_names = static_cast( - X509_get_ext_d2i(server_cert, NID_subject_alt_name, nullptr, nullptr)); - - if (alt_names) { - auto dsn_matched = false; - auto ip_matched = false; - - auto count = sk_GENERAL_NAME_num(alt_names); - - for (decltype(count) i = 0; i < count && !dsn_matched; i++) { - auto val = sk_GENERAL_NAME_value(alt_names, i); - if (val->type == type) { - auto name = reinterpret_cast(ASN1_STRING_get0_data(val->d.ia5)); - auto name_len = static_cast(ASN1_STRING_length(val->d.ia5)); - - switch (type) { - case GEN_DNS: - dsn_matched = check_host_name(name, name_len); - break; - - case GEN_IPADD: - if (!memcmp(&addr6, name, addr_len) || !memcmp(&addr, name, addr_len)) { - ip_matched = true; - } - break; - } - } - } - - if (dsn_matched || ip_matched) { - ret = true; - } - } - - GENERAL_NAMES_free(const_cast( - reinterpret_cast(alt_names))); - return ret; - } - - inline bool SSLClient::verify_host_with_common_name(X509 *server_cert) const { - const auto subject_name = X509_get_subject_name(server_cert); - - if (subject_name != nullptr) { - char name[BUFSIZ]; - auto name_len = - X509_NAME_get_text_by_NID(subject_name, NID_commonName, name, sizeof(name)); - - if (name_len != -1) { - return check_host_name(name, static_cast(name_len)); - } - } - - return false; - } - - inline bool SSLClient::check_host_name(const char *pattern, size_t pattern_len) const { - if (host_.size() == pattern_len && host_ == pattern) { - return true; - } - - // Wildcard match - // https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/376484 - std::vector pattern_components; - detail::split(&pattern[0], &pattern[pattern_len], '.', - [&](const char *b, const char *e) { pattern_components.emplace_back(b, e); }); - - if (host_components_.size() != pattern_components.size()) { - return false; - } - - auto itr = pattern_components.begin(); - for (const auto &h : host_components_) { - auto &p = *itr; - if (p != h && p != "*") { - auto partial_match = - (p.size() > 0 && p[p.size() - 1] == '*' && !p.compare(0, p.size() - 1, h)); - if (!partial_match) { - return false; - } - } - ++itr; - } - - return true; - } -#endif - - // Universal client implementation - inline Client::Client(const std::string &scheme_host_port) - : Client(scheme_host_port, std::string(), std::string()) {} - - inline Client::Client(const std::string &scheme_host_port, const std::string &client_cert_path, - const std::string &client_key_path) { - const static std::regex re( - R"((?:([a-z]+):\/\/)?(?:\[([a-fA-F\d:]+)\]|([^:/?#]+))(?::(\d+))?)"); - - std::smatch m; - if (std::regex_match(scheme_host_port, m, re)) { - auto scheme = m[1].str(); - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (!scheme.empty() && (scheme != "http" && scheme != "https")) { -#else - if (!scheme.empty() && scheme != "http") { -#endif -#ifndef CPPHTTPLIB_NO_EXCEPTIONS - std::string msg = "'" + scheme + "' scheme is not supported."; - throw std::invalid_argument(msg); -#endif - return; - } - - auto is_ssl = scheme == "https"; - - auto host = m[2].str(); - if (host.empty()) { - host = m[3].str(); - } - - auto port_str = m[4].str(); - auto port = !port_str.empty() ? std::stoi(port_str) : (is_ssl ? 443 : 80); - - if (is_ssl) { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - cli_ = - detail::make_unique(host, port, client_cert_path, client_key_path); - is_ssl_ = is_ssl; -#endif - } else { - cli_ = - detail::make_unique(host, port, client_cert_path, client_key_path); - } - } else { - // NOTE: Update TEST(UniversalClientImplTest, Ipv6LiteralAddress) - // if port param below changes. - cli_ = detail::make_unique(scheme_host_port, 80, client_cert_path, - client_key_path); - } - } - - inline Client::Client(const std::string &host, int port) - : cli_(detail::make_unique(host, port)) {} - - inline Client::Client(const std::string &host, int port, const std::string &client_cert_path, - const std::string &client_key_path) - : cli_(detail::make_unique(host, port, client_cert_path, client_key_path)) {} - - inline Client::~Client() = default; - - inline bool Client::is_valid() const { return cli_ != nullptr && cli_->is_valid(); } - - inline Result Client::Get(const std::string &path) { return cli_->Get(path); } - inline Result Client::Get(const std::string &path, const Headers &headers) { - return cli_->Get(path, headers); - } - inline Result Client::Get(const std::string &path, Progress progress) { - return cli_->Get(path, std::move(progress)); - } - inline Result Client::Get(const std::string &path, const Headers &headers, Progress progress) { - return cli_->Get(path, headers, std::move(progress)); - } - inline Result Client::Get(const std::string &path, ContentReceiver content_receiver) { - return cli_->Get(path, std::move(content_receiver)); - } - inline Result Client::Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver) { - return cli_->Get(path, headers, std::move(content_receiver)); - } - inline Result Client::Get(const std::string &path, ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, std::move(content_receiver), std::move(progress)); - } - inline Result Client::Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, headers, std::move(content_receiver), std::move(progress)); - } - inline Result Client::Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver) { - return cli_->Get(path, std::move(response_handler), std::move(content_receiver)); - } - inline Result Client::Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver) { - return cli_->Get(path, headers, std::move(response_handler), std::move(content_receiver)); - } - inline Result Client::Get(const std::string &path, ResponseHandler response_handler, - ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, std::move(response_handler), std::move(content_receiver), - std::move(progress)); - } - inline Result Client::Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, headers, std::move(response_handler), std::move(content_receiver), - std::move(progress)); - } - inline Result Client::Get(const std::string &path, const Params ¶ms, const Headers &headers, - Progress progress) { - return cli_->Get(path, params, headers, std::move(progress)); - } - inline Result Client::Get(const std::string &path, const Params ¶ms, const Headers &headers, - ContentReceiver content_receiver, Progress progress) { - return cli_->Get(path, params, headers, std::move(content_receiver), std::move(progress)); - } - inline Result Client::Get(const std::string &path, const Params ¶ms, const Headers &headers, - ResponseHandler response_handler, ContentReceiver content_receiver, - Progress progress) { - return cli_->Get(path, params, headers, std::move(response_handler), - std::move(content_receiver), std::move(progress)); - } - - inline Result Client::Head(const std::string &path) { return cli_->Head(path); } - inline Result Client::Head(const std::string &path, const Headers &headers) { - return cli_->Head(path, headers); - } - - inline Result Client::Post(const std::string &path) { return cli_->Post(path); } - inline Result Client::Post(const std::string &path, const Headers &headers) { - return cli_->Post(path, headers); - } - inline Result Client::Post(const std::string &path, const char *body, size_t content_length, - const std::string &content_type) { - return cli_->Post(path, body, content_length, content_type); - } - inline Result Client::Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type) { - return cli_->Post(path, headers, body, content_length, content_type); - } - inline Result Client::Post(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, - Progress progress) { - return cli_->Post(path, headers, body, content_length, content_type, progress); - } - inline Result Client::Post(const std::string &path, const std::string &body, - const std::string &content_type) { - return cli_->Post(path, body, content_type); - } - inline Result Client::Post(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return cli_->Post(path, body, content_type, progress); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return cli_->Post(path, headers, body, content_type); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return cli_->Post(path, headers, body, content_type, progress); - } - inline Result Client::Post(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type) { - return cli_->Post(path, content_length, std::move(content_provider), content_type); - } - inline Result Client::Post(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return cli_->Post(path, std::move(content_provider), content_type); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - size_t content_length, ContentProvider content_provider, - const std::string &content_type) { - return cli_->Post(path, headers, content_length, std::move(content_provider), content_type); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return cli_->Post(path, headers, std::move(content_provider), content_type); - } - inline Result Client::Post(const std::string &path, const Params ¶ms) { - return cli_->Post(path, params); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - const Params ¶ms) { - return cli_->Post(path, headers, params); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - const Params ¶ms, Progress progress) { - return cli_->Post(path, headers, params, progress); - } - inline Result Client::Post(const std::string &path, const MultipartFormDataItems &items) { - return cli_->Post(path, items); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items) { - return cli_->Post(path, headers, items); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary) { - return cli_->Post(path, headers, items, boundary); - } - inline Result Client::Post(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items) { - return cli_->Post(path, headers, items, provider_items); - } - inline Result Client::Put(const std::string &path) { return cli_->Put(path); } - inline Result Client::Put(const std::string &path, const char *body, size_t content_length, - const std::string &content_type) { - return cli_->Put(path, body, content_length, content_type); - } - inline Result Client::Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type) { - return cli_->Put(path, headers, body, content_length, content_type); - } - inline Result Client::Put(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, - Progress progress) { - return cli_->Put(path, headers, body, content_length, content_type, progress); - } - inline Result Client::Put(const std::string &path, const std::string &body, - const std::string &content_type) { - return cli_->Put(path, body, content_type); - } - inline Result Client::Put(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return cli_->Put(path, body, content_type, progress); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return cli_->Put(path, headers, body, content_type); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return cli_->Put(path, headers, body, content_type, progress); - } - inline Result Client::Put(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type) { - return cli_->Put(path, content_length, std::move(content_provider), content_type); - } - inline Result Client::Put(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return cli_->Put(path, std::move(content_provider), content_type); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - size_t content_length, ContentProvider content_provider, - const std::string &content_type) { - return cli_->Put(path, headers, content_length, std::move(content_provider), content_type); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return cli_->Put(path, headers, std::move(content_provider), content_type); - } - inline Result Client::Put(const std::string &path, const Params ¶ms) { - return cli_->Put(path, params); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - const Params ¶ms) { - return cli_->Put(path, headers, params); - } - inline Result Client::Put(const std::string &path, const Headers &headers, const Params ¶ms, - Progress progress) { - return cli_->Put(path, headers, params, progress); - } - inline Result Client::Put(const std::string &path, const MultipartFormDataItems &items) { - return cli_->Put(path, items); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items) { - return cli_->Put(path, headers, items); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, const std::string &boundary) { - return cli_->Put(path, headers, items, boundary); - } - inline Result Client::Put(const std::string &path, const Headers &headers, - const MultipartFormDataItems &items, - const MultipartFormDataProviderItems &provider_items) { - return cli_->Put(path, headers, items, provider_items); - } - inline Result Client::Patch(const std::string &path) { return cli_->Patch(path); } - inline Result Client::Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type) { - return cli_->Patch(path, body, content_length, content_type); - } - inline Result Client::Patch(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress) { - return cli_->Patch(path, body, content_length, content_type, progress); - } - inline Result Client::Patch(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type) { - return cli_->Patch(path, headers, body, content_length, content_type); - } - inline Result Client::Patch(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, - Progress progress) { - return cli_->Patch(path, headers, body, content_length, content_type, progress); - } - inline Result Client::Patch(const std::string &path, const std::string &body, - const std::string &content_type) { - return cli_->Patch(path, body, content_type); - } - inline Result Client::Patch(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return cli_->Patch(path, body, content_type, progress); - } - inline Result Client::Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return cli_->Patch(path, headers, body, content_type); - } - inline Result Client::Patch(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return cli_->Patch(path, headers, body, content_type, progress); - } - inline Result Client::Patch(const std::string &path, size_t content_length, - ContentProvider content_provider, const std::string &content_type) { - return cli_->Patch(path, content_length, std::move(content_provider), content_type); - } - inline Result Client::Patch(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return cli_->Patch(path, std::move(content_provider), content_type); - } - inline Result Client::Patch(const std::string &path, const Headers &headers, - size_t content_length, ContentProvider content_provider, - const std::string &content_type) { - return cli_->Patch(path, headers, content_length, std::move(content_provider), - content_type); - } - inline Result Client::Patch(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type) { - return cli_->Patch(path, headers, std::move(content_provider), content_type); - } - inline Result Client::Delete(const std::string &path) { return cli_->Delete(path); } - inline Result Client::Delete(const std::string &path, const Headers &headers) { - return cli_->Delete(path, headers); - } - inline Result Client::Delete(const std::string &path, const char *body, size_t content_length, - const std::string &content_type) { - return cli_->Delete(path, body, content_length, content_type); - } - inline Result Client::Delete(const std::string &path, const char *body, size_t content_length, - const std::string &content_type, Progress progress) { - return cli_->Delete(path, body, content_length, content_type, progress); - } - inline Result Client::Delete(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type) { - return cli_->Delete(path, headers, body, content_length, content_type); - } - inline Result Client::Delete(const std::string &path, const Headers &headers, const char *body, - size_t content_length, const std::string &content_type, - Progress progress) { - return cli_->Delete(path, headers, body, content_length, content_type, progress); - } - inline Result Client::Delete(const std::string &path, const std::string &body, - const std::string &content_type) { - return cli_->Delete(path, body, content_type); - } - inline Result Client::Delete(const std::string &path, const std::string &body, - const std::string &content_type, Progress progress) { - return cli_->Delete(path, body, content_type, progress); - } - inline Result Client::Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type) { - return cli_->Delete(path, headers, body, content_type); - } - inline Result Client::Delete(const std::string &path, const Headers &headers, - const std::string &body, const std::string &content_type, - Progress progress) { - return cli_->Delete(path, headers, body, content_type, progress); - } - inline Result Client::Options(const std::string &path) { return cli_->Options(path); } - inline Result Client::Options(const std::string &path, const Headers &headers) { - return cli_->Options(path, headers); - } - - inline bool Client::send(Request &req, Response &res, Error &error) { - return cli_->send(req, res, error); - } - - inline Result Client::send(const Request &req) { return cli_->send(req); } - - inline void Client::stop() { cli_->stop(); } - - inline std::string Client::host() const { return cli_->host(); } - - inline int Client::port() const { return cli_->port(); } - - inline size_t Client::is_socket_open() const { return cli_->is_socket_open(); } - - inline socket_t Client::socket() const { return cli_->socket(); } - - inline void Client::set_hostname_addr_map(std::map addr_map) { - cli_->set_hostname_addr_map(std::move(addr_map)); - } - - inline void Client::set_default_headers(Headers headers) { - cli_->set_default_headers(std::move(headers)); - } - - inline void Client::set_header_writer( - std::function const &writer) { - cli_->set_header_writer(writer); - } - - inline void Client::set_address_family(int family) { cli_->set_address_family(family); } - - inline void Client::set_tcp_nodelay(bool on) { cli_->set_tcp_nodelay(on); } - - inline void Client::set_socket_options(SocketOptions socket_options) { - cli_->set_socket_options(std::move(socket_options)); - } - - inline void Client::set_connection_timeout(time_t sec, time_t usec) { - cli_->set_connection_timeout(sec, usec); - } - - inline void Client::set_read_timeout(time_t sec, time_t usec) { - cli_->set_read_timeout(sec, usec); - } - - inline void Client::set_write_timeout(time_t sec, time_t usec) { - cli_->set_write_timeout(sec, usec); - } - - inline void Client::set_basic_auth(const std::string &username, const std::string &password) { - cli_->set_basic_auth(username, password); - } - inline void Client::set_bearer_token_auth(const std::string &token) { - cli_->set_bearer_token_auth(token); - } -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline void Client::set_digest_auth(const std::string &username, const std::string &password) { - cli_->set_digest_auth(username, password); - } -#endif - - inline void Client::set_keep_alive(bool on) { cli_->set_keep_alive(on); } - inline void Client::set_follow_location(bool on) { cli_->set_follow_location(on); } - - inline void Client::set_url_encode(bool on) { cli_->set_url_encode(on); } - - inline void Client::set_compress(bool on) { cli_->set_compress(on); } - - inline void Client::set_decompress(bool on) { cli_->set_decompress(on); } - - inline void Client::set_interface(const std::string &intf) { cli_->set_interface(intf); } - - inline void Client::set_proxy(const std::string &host, int port) { - cli_->set_proxy(host, port); - } - inline void Client::set_proxy_basic_auth(const std::string &username, - const std::string &password) { - cli_->set_proxy_basic_auth(username, password); - } - inline void Client::set_proxy_bearer_token_auth(const std::string &token) { - cli_->set_proxy_bearer_token_auth(token); - } -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline void Client::set_proxy_digest_auth(const std::string &username, - const std::string &password) { - cli_->set_proxy_digest_auth(username, password); - } -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline void Client::enable_server_certificate_verification(bool enabled) { - cli_->enable_server_certificate_verification(enabled); - } -#endif - - inline void Client::set_logger(Logger logger) { cli_->set_logger(std::move(logger)); } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - inline void Client::set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path) { - cli_->set_ca_cert_path(ca_cert_file_path, ca_cert_dir_path); - } - - inline void Client::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_store(ca_cert_store); - } else { - cli_->set_ca_cert_store(ca_cert_store); - } - } - - inline void Client::load_ca_cert_store(const char *ca_cert, std::size_t size) { - set_ca_cert_store(cli_->create_ca_cert_store(ca_cert, size)); - } - - inline long Client::get_openssl_verify_result() const { - if (is_ssl_) { - return static_cast(*cli_).get_openssl_verify_result(); - } - return -1; // NOTE: -1 doesn't match any of X509_V_ERR_??? - } - - inline SSL_CTX *Client::ssl_context() const { - if (is_ssl_) { - return static_cast(*cli_).ssl_context(); - } - return nullptr; - } -#endif - - // ---------------------------------------------------------------------------- - -} // namespace httplib - -#if defined(_WIN32) && defined(CPPHTTPLIB_USE_POLL) -#undef poll -#endif - -#endif // ZKEMV_FRAMEWORK_LIBS_RPC_HTTPLIB_H diff --git a/zkevm-framework/libs/rpc/include/zkevm_framework/rpc/data_extractor.hpp b/zkevm-framework/libs/rpc/include/zkevm_framework/rpc/data_extractor.hpp deleted file mode 100644 index 569824aabe..0000000000 --- a/zkevm-framework/libs/rpc/include/zkevm_framework/rpc/data_extractor.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef ZKEMV_FRAMEWORK_LIBS_RPC_DATA_EXTRACTOR_HPP_ -#define ZKEMV_FRAMEWORK_LIBS_RPC_DATA_EXTRACTOR_HPP_ - -#include -#include -#include - -#include "zkevm_framework/core/types/account.hpp" -#include "zkevm_framework/core/types/block.hpp" - -class data_extractor { - public: - data_extractor(std::string host, int port, uint64_t shard_id) - : m_host(host), m_port(port), m_shard_id(shard_id) {} - std::optional get_block_with_messages(const std::string& blockHash, - std::stringstream& block_data) const; - std::optional get_account_with_storage(const std::string& address, - const std::string& blockHash, - std::stringstream& account_data) const; - - private: - std::string m_host; - int m_port; - uint64_t m_shard_id; -}; - -#endif // ZKEMV_FRAMEWORK_LIBS_RPC_DATA_EXTRACTOR_HPP_ diff --git a/zkevm-framework/scripts/run_clang_format.sh b/zkevm-framework/scripts/run_clang_format.sh deleted file mode 100755 index d45f5e84b4..0000000000 --- a/zkevm-framework/scripts/run_clang_format.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -set -eu - -# Directories to search for source files -DIRS=(bin libs tests) - -# Extensions to match -EXTENSIONS=(.cpp .hpp .c .h) - -CLANG_FORMAT_FLAGS="--dry-run --Werror" -while test $# -gt 0; do - case "$1" in - -i|--inplace) - CLANG_FORMAT_FLAGS="-i" - break - ;; - -h|--help) - MY_NAME=$(basename "$0") - echo "${MY_NAME} [-i|--inplace]" - echo "" - echo " -i|--inplace - apply changes inplace" - exit 0 - break - esac -done - -SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) -ROOT_DIR=$(realpath ${SCRIPT_DIR}/..) - -CLANG_FORMAT_CFG=${ROOT_DIR}/.clang-format - -DIRS_ABS=() -for DIR in "${DIRS[@]}"; do - DIRS_ABS+=(${ROOT_DIR}/${DIR}) -done - -NAME_ARGS=() -for EXT in "${EXTENSIONS[@]}"; do - NAME_ARGS+=("-iname *${EXT}") -done - -# https://stackoverflow.com/a/17841619 -function join_by { - local d=${1-} f=${2-} - if shift 2; then - printf %s "$f" "${@/#/$d}" - fi -} -FIND_ARGS=$(join_by ' -or ' "${NAME_ARGS[@]}") - -CMD="find ${DIRS_ABS[@]} ${FIND_ARGS} | xargs clang-format -style=file:${CLANG_FORMAT_CFG} ${CLANG_FORMAT_FLAGS}" - -echo "${CMD}" -eval "${CMD}" diff --git a/zkevm-framework/tests/CMakeLists.txt b/zkevm-framework/tests/CMakeLists.txt deleted file mode 100644 index 8aab643f5d..0000000000 --- a/zkevm-framework/tests/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -# GoogleTest requires C++14 -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -find_package(GTest REQUIRED) - -include(GoogleTest) - -add_subdirectory(bin) -add_subdirectory(libs) diff --git a/zkevm-framework/tests/bin/CMakeLists.txt b/zkevm-framework/tests/bin/CMakeLists.txt deleted file mode 100644 index bbb8f25a07..0000000000 --- a/zkevm-framework/tests/bin/CMakeLists.txt +++ /dev/null @@ -1,79 +0,0 @@ -option(ENABLE_EXECUTABLES_TESTS "Enable tests of executables" TRUE) - -if(ENABLE_EXECUTABLES_TESTS) - add_custom_target(executables_tests) - - add_custom_target(test_run_assigner - COMMAND $ - -b ${CMAKE_CURRENT_LIST_DIR}../../../bin/assigner/example_data/call_block.json - -t assignment - -e pallas - -s ${CMAKE_CURRENT_LIST_DIR}../../../bin/assigner/example_data/state.json - --input "" - --input "" - --input "" - --input "" - --target-circuits add.0 - --log-level debug - DEPENDS - $ - ${CMAKE_CURRENT_LIST_DIR}../../../bin/assigner/example_data/call_block.json - ${CMAKE_CURRENT_LIST_DIR}../../../bin/assigner/example_data/state.json - COMMENT "Running assigner integration test" - VERBATIM - ) - add_dependencies(executables_tests test_run_assigner) - - # Initial integration test with generating data on cluster and passing them into assigner - # Step 1: create Nil CLI config file - set(block_generator_script ${CMAKE_CURRENT_LIST_DIR}../../../bin/block_generator/block_generator.py) - add_custom_command( - OUTPUT test_config.yaml - COMMAND python3 - ${block_generator_script} - --mode make-config - --cli-config-name ${CMAKE_CURRENT_BINARY_DIR}/test_config.yaml - DEPENDS - ${block_generator_script} - COMMENT "Generating Nil CLI config" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - VERBATIM - ) - - # Step 2: generate block and account storage state data, write to the files - add_custom_command( - OUTPUT block.json state.json - COMMAND python3 - ${block_generator_script} - --mode generate-block - --cli-config-name ${CMAKE_CURRENT_BINARY_DIR}/test_config.yaml - --block-config-name ${CMAKE_SOURCE_DIR}/bin/block_generator/example_data/block_config.json - -o ${CMAKE_CURRENT_BINARY_DIR}/block.json - -s ${CMAKE_CURRENT_BINARY_DIR}/state.json - DEPENDS - ${block_generator_script} - ${CMAKE_SOURCE_DIR}/bin/block_generator/example_data/block_config.json - test_config.yaml - COMMENT "Generating block from config" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} # It is essential because we have relative paths in block_config.json - VERBATIM - ) - - # Step 3: run assigner - add_custom_target(assigner_integration_test - COMMAND $ - -b ${CMAKE_CURRENT_BINARY_DIR}/block.json - -t assignment - -e pallas - -s ${CMAKE_CURRENT_BINARY_DIR}/state.json - --log-level debug - DEPENDS - $ - block.json - state.json - COMMENT "Running assigner integration test" - VERBATIM - ) - # TODO move integration test to the nil repository - #add_dependencies(executables_tests assigner_integration_test) -endif() diff --git a/zkevm-framework/tests/libs/CMakeLists.txt b/zkevm-framework/tests/libs/CMakeLists.txt deleted file mode 100644 index d1f2550494..0000000000 --- a/zkevm-framework/tests/libs/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -option(ENABLE_OUTPUT_ARTIFACTS_TESTS "Enable output artifacts tests" TRUE) -option(ENABLE_ASSIGNER_RUNNER_TESTS "Enable assigner runner tests" TRUE) -option(ENABLE_NIL_CORE_TESTS "Enable Nil Core tests" TRUE) - -if (ENABLE_OUTPUT_ARTIFACTS_TESTS) - add_subdirectory(output_artifacts) -endif() - -if (ENABLE_ASSIGNER_RUNNER_TESTS) - add_subdirectory(assigner_runner) -endif() - -if(ENABLE_NIL_CORE_TESTS) - add_subdirectory(nil_core) -endif() diff --git a/zkevm-framework/tests/libs/assigner_runner/CMakeLists.txt b/zkevm-framework/tests/libs/assigner_runner/CMakeLists.txt deleted file mode 100644 index ccc4674f0b..0000000000 --- a/zkevm-framework/tests/libs/assigner_runner/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -add_executable(assigner_runner_test runner_test.cpp) - -find_package(Boost COMPONENTS REQUIRED random) - -target_link_libraries(assigner_runner_test PRIVATE zkEVMAssignerRunner zkEVMPreset GTest::gtest_main Boost::random) - -target_compile_definitions(assigner_runner_test - PRIVATE BLOCK_CONFIG="${CMAKE_CURRENT_LIST_DIR}/../../../bin/assigner/example_data/call_block.json" - PRIVATE STATE_CONFIG="${CMAKE_CURRENT_LIST_DIR}/../../../bin/assigner/example_data/state.json") -gtest_discover_tests(assigner_runner_test) diff --git a/zkevm-framework/tests/libs/assigner_runner/runner_test.cpp b/zkevm-framework/tests/libs/assigner_runner/runner_test.cpp deleted file mode 100644 index 35af8bef54..0000000000 --- a/zkevm-framework/tests/libs/assigner_runner/runner_test.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "zkevm_framework/assigner_runner/runner.hpp" - -#include - -#include -#include -#include -#include - -#include "zkevm_framework/preset/preset.hpp" - -TEST(runner_test, check_block) { - using BlueprintFieldType = typename nil::crypto3::algebra::curves::pallas::base_field_type; - using ArithmetizationType = - nil::crypto3::zk::snark::plonk_constraint_system; - - zkevm_circuits circuits; - - std::unordered_map> - assignments; - - auto err = initialize_circuits(circuits, assignments); - ASSERT_FALSE(err.has_value()); - single_thread_runner runner(assignments, 0 /*shad id*/, - circuits.get_circuit_names()); - err = runner.extract_block_with_messages("", BLOCK_CONFIG); - ASSERT_FALSE(err.has_value()); - err = runner.extract_accounts_with_storage(STATE_CONFIG); - ASSERT_FALSE(err.has_value()); - err = runner.run("", std::nullopt); - ASSERT_FALSE(err.has_value()); - - // Checks below are disabled due to frequent changes in filling assignment tables - /* - auto assignments = runner.get_assignments(); - ASSERT_EQ(assignments.size(), 2); - ASSERT_EQ(assignments[1].witness(0, 0), 8); - ASSERT_EQ(assignments[1].witness(0, 1), 4); - */ -} diff --git a/zkevm-framework/tests/libs/nil_core/CMakeLists.txt b/zkevm-framework/tests/libs/nil_core/CMakeLists.txt deleted file mode 100644 index 5a1ad6e341..0000000000 --- a/zkevm-framework/tests/libs/nil_core/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -# SSZ++ requires C++23 -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED True) - -find_package(sszpp REQUIRED) - -# Add test for NilCore library -# .cpp file must have the name of target -function(add_nil_core_test target) - add_executable(nil_core_${target} ${target}.cpp) - - target_link_libraries(nil_core_${target} PRIVATE NilCore sszpp::sszpp GTest::gtest_main) - - gtest_discover_tests(nil_core_${target}) -endfunction() - -add_nil_core_test(test_nil_core_ssz) -add_nil_core_test(test_nil_core_mpt) diff --git a/zkevm-framework/tests/libs/nil_core/test_nil_core_mpt.cpp b/zkevm-framework/tests/libs/nil_core/test_nil_core_mpt.cpp deleted file mode 100644 index da52d17ad8..0000000000 --- a/zkevm-framework/tests/libs/nil_core/test_nil_core_mpt.cpp +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include - -#include "gtest/gtest.h" -#include "ssz++.hpp" -#include "zkevm_framework/core/mpt/mpt.hpp" - -using namespace core; -using namespace core::mpt; - -std::vector stringToByteVector(const std::string& str) { - std::vector result; - result.reserve(str.size()); - for (char c : str) { - result.push_back(static_cast(c)); - } - return result; -} - -TEST(NilCoreMerklePatriciaTrieTest, PathSerialization) { - std::string current; - for (std::size_t i = 0; i < 100; ++i) { - auto pathBytes = stringToByteVector(current); - Path path{pathBytes}; - - const auto serialized = ssz::serialize(path); - const auto deserialized = ssz::deserialize(serialized); - - ASSERT_EQ(path, deserialized); - - current += 'a' + (i % 26); - } -} - -TEST(NilCoreMerklePatriciaTrieTest, NodeEncodeDecode) { - // TODO: add hardcoded input for deserialization to check binary compatability with cluster - std::string current; - for (std::size_t i = 0; i < 10; ++i) { - auto currentBytes = stringToByteVector(current); - // LeafNode - Path path{currentBytes}; - std::vector value = currentBytes; - LeafNode leafNode{path, value}; - - auto serialized = leafNode.Encode(); - Node node = DecodeNode(serialized); - ASSERT_TRUE(std::holds_alternative(node)); - const auto& leaf = std::get(node); - - ASSERT_EQ(leaf.value(), value); - ASSERT_EQ(leaf.path, path); - - // ExtensionNode - ExtensionNode extensionNode{path, value}; - - serialized = extensionNode.Encode(); - node = DecodeNode(serialized); - ASSERT_TRUE(std::holds_alternative(node)); - const auto& extension = std::get(node); - - ASSERT_EQ(extension.path, path); - ASSERT_EQ(extension.get_next_ref(), value); - - // BranchNode - std::array branches; - for (std::size_t i = 0; i < kBranchesNum; ++i) { - branches[i] = value; - } - BranchNode branchNode(branches, value); - - serialized = branchNode.Encode(); - node = DecodeNode(serialized); - ASSERT_TRUE(std::holds_alternative(node)); - const auto& branch = std::get(node); - - ASSERT_EQ(branch.value(), value); - ASSERT_EQ(branch.get_branches(), branches); - current += 'a' + (i % 26); - } -} - -TEST(NilCoreMerklePatriciaTrieTest, InsertGetMany) { - MerklePatriciaTrie trie; - - std::vector> cases = { - {"do", "verb"}, {"dog", "puppy"}, {"doge", "coin"}, {"horse", "stallion"}}; - - for (const auto& [key, value] : cases) { - ASSERT_NO_THROW(trie.set(stringToByteVector(key), stringToByteVector(value))); - } - - for (const auto& [key, expectedValue] : cases) { - std::vector result; - result = trie.get(stringToByteVector(key)); - ASSERT_NO_THROW(result = trie.get(stringToByteVector(key))); - ASSERT_EQ(result, stringToByteVector(expectedValue)); - } -} - -TEST(NilCoreMerklePatriciaTrieTest, TestDelete) { - Path p; - MerklePatriciaTrie trie; - - std::vector> cases = { - {"do", "verb"}, {"dog", "puppy"}, {"doge", "coin"}, {"horse", "stallion"}}; - - for (const auto& [key, value] : cases) { - ASSERT_NO_THROW(trie.set(stringToByteVector(key), stringToByteVector(value))); - } - - ASSERT_NO_THROW(trie.remove(stringToByteVector("do"))); - ASSERT_ANY_THROW(trie.remove(stringToByteVector("do"))); // Can't remove twice - ASSERT_ANY_THROW(trie.remove(stringToByteVector("d"))); // Can't remove absent - ASSERT_NO_THROW(trie.remove(stringToByteVector("doge"))); - - ASSERT_ANY_THROW(trie.get(stringToByteVector("do"))); // Can't access removed - ASSERT_ANY_THROW(trie.get(stringToByteVector("doge"))); // Can't access removed - - ASSERT_NO_THROW(trie.get(stringToByteVector("dog"))); // Can access existing - ASSERT_NO_THROW(trie.get(stringToByteVector("horse"))); // Can access existing -} diff --git a/zkevm-framework/tests/libs/nil_core/test_nil_core_ssz.cpp b/zkevm-framework/tests/libs/nil_core/test_nil_core_ssz.cpp deleted file mode 100644 index 62905fd5dc..0000000000 --- a/zkevm-framework/tests/libs/nil_core/test_nil_core_ssz.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include -#include -#include - -#include "gtest/gtest.h" -#include "ssz++.hpp" -#include "zkevm_framework/core/common.hpp" -#include "zkevm_framework/core/types/account.hpp" -#include "zkevm_framework/core/types/address.hpp" -#include "zkevm_framework/core/types/block.hpp" -#include "zkevm_framework/core/types/bloom.hpp" -#include "zkevm_framework/core/types/currency.hpp" -#include "zkevm_framework/core/types/log.hpp" -#include "zkevm_framework/core/types/message.hpp" -#include "zkevm_framework/core/types/receipt.hpp" -#include "zkevm_framework/core/types/value.hpp" - -using namespace core; -using namespace core::types; - -// serialize -> deserialize -> serialize again -> compare two byte vectors -template -void test_serialization(const T& obj) { - std::vector bytes = ssz::serialize(obj); - T new_obj = ssz::deserialize(bytes); - std::vector new_bytes = ssz::serialize(new_obj); - ASSERT_EQ(bytes, new_bytes); -} - -TEST(NilCoreSSZTests, Hash) { - Hash x = {std::byte{0xAA}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, SmartContract) { - SmartContract x{}; - x.m_address = {std::byte{0xAA}}; - x.m_balance = Value{.m_value = 42}; - x.m_code_hash = {std::byte{0xBB}}; - x.m_currency_root = {std::byte{0xCC}}; - x.m_ext_seqno = 43; - x.m_initialised = true; - x.m_public_key = {std::byte{0xDD}}; - x.m_seqno = 44; - x.m_storage_root = {std::byte{0xEE}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, Address) { - Address x = {std::byte{0xAA}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, Block) { - Block x{}; - x.m_child_blocks_root_hash = {std::byte{0xAA}}; - x.m_id = 42; - x.m_in_messages_root = {std::byte{0xBB}}; - x.m_logs_bloom = {std::byte{0xCC}}; - x.m_master_chain_hash = {std::byte{0xDD}}; - x.m_out_messages_num = 43; - x.m_out_messages_root = {std::byte{0xEE}}; - x.m_prev_block = {std::byte{0xFF}}; - x.m_receipts_root = {std::byte{0x11}}; - x.m_smart_contracts_root = {std::byte{0x22}}; - x.m_timestamp = 44; - x.m_gasPrice = Value{.m_value = 100}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, Bloom) { - Bloom x = {std::byte{0xAA}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, CurrencyBalance) { - CurrencyBalance x{}; - x.m_balance = Value{.m_value = 42}; - x.m_currency = {std::byte{0xAA}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, Log) { - Log x{}; - x.m_address = {std::byte{0xAA}}; - x.m_data = std::vector{std::byte{0xBB}, std::byte{0xBB}, std::byte{0xBB}}; - x.m_topics = {std::byte{0xCC}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, Message) { - Message x{}; - x.m_flags = 0b10101010; - x.m_chain_id = 42; - x.m_seqno = 47; - x.m_feeCredit = Value{.m_value = 2000000}; - x.m_from = {std::byte{0xEE}}; - x.m_to = {std::byte{0x22}}; - x.m_refund_to = {std::byte{0xFF}}; - x.m_bounce_to = {std::byte{0xFF}}; - x.m_value = Value{.m_value = 100}; - x.m_currency = std::vector{CurrencyBalance{}, CurrencyBalance{}}; - x.m_currency[0].m_balance = Value{.m_value = 43}; - x.m_currency[0].m_currency = {std::byte{0xBB}}; - x.m_currency[1].m_balance = Value{.m_value = 44}; - x.m_currency[1].m_currency = {std::byte{0xCC}}; - x.m_data = {{std::vector{std::byte{0xDD}, std::byte{0xDD}, std::byte{0xDD}}}}; - x.m_signature = {{std::vector{std::byte{0x11}, std::byte{0x11}, std::byte{0x11}}}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, ExternalMessage) { - ExternalMessage x{}; - x.m_kind = static_cast(MessageKind::Deploy); - x.m_to = {std::byte{0xCC}}; - x.m_chain_id = 42; - x.m_seqno = 43; - x.m_data = {{std::vector{std::byte{0xBB}, std::byte{0xBB}, std::byte{0xBB}}}}; - x.m_auth_data = {{std::vector{std::byte{0xAA}, std::byte{0xAA}, std::byte{0xAA}}}}; - test_serialization(x); -} - -TEST(NilCoreSSZTests, Receipt) { - Receipt x{}; - x.m_bloom = {std::byte{0xAA}}; - x.m_contract_address = {std::byte{0xBB}}; - x.m_gas_used = 42; - x.m_logs = std::vector{Log{}}; - x.m_logs[0].m_address = {std::byte{0xCC}}; - x.m_logs[0].m_data = {{std::vector{std::byte{0xDD}, std::byte{0xDD}, std::byte{0xDD}}}}; - x.m_logs[0].m_topics = {std::byte{0xEE}}; - x.m_msg_hash = {std::byte{0xFF}}; - x.m_out_msg_index = 43; - x.m_out_msg_num = 44; - x.m_status = 45; - x.m_success = true; - test_serialization(x); -} - -TEST(NilCoreSSZTests, Value) { - Value x{.m_value = 42}; - test_serialization(x); -} diff --git a/zkevm-framework/tests/libs/output_artifacts/CMakeLists.txt b/zkevm-framework/tests/libs/output_artifacts/CMakeLists.txt deleted file mode 100644 index 0f6a85e4d8..0000000000 --- a/zkevm-framework/tests/libs/output_artifacts/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -# Using -set(CMAKE_CXX_STANDARD 23) -set(CMAKE_CXX_STANDARD_REQUIRED True) - -# Add test for OutputArtifacts library -# .cpp file must have the name of target -function(add_output_artifacts_test target) - add_executable(${target} ${target}.cpp) - - target_link_libraries(${target} PRIVATE zkEVMOutputArtifacts) - target_link_libraries(${target} PRIVATE GTest::gtest_main) - - gtest_discover_tests(${target}) -endfunction() - -add_output_artifacts_test(test_range) -add_output_artifacts_test(test_ranges) diff --git a/zkevm-framework/tests/libs/output_artifacts/test_range.cpp b/zkevm-framework/tests/libs/output_artifacts/test_range.cpp deleted file mode 100644 index 920f13e0b4..0000000000 --- a/zkevm-framework/tests/libs/output_artifacts/test_range.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "output_artifacts.hpp" - -TEST(OutputArtifactsTests, RangeParse) { - ASSERT_TRUE(Range::parse("1").has_value()); - EXPECT_EQ(Range::parse("1").value().lower, 1); - EXPECT_EQ(Range::parse("1").value().upper.value(), 1); - - ASSERT_TRUE(Range::parse("1-2").has_value()); - EXPECT_EQ(Range::parse("1-2").value().lower, 1); - EXPECT_EQ(Range::parse("1-2").value().upper.value(), 2); - - ASSERT_TRUE(Range::parse("1-").has_value()); - EXPECT_EQ(Range::parse("1-").value().lower, 1); - EXPECT_FALSE(Range::parse("1-").value().upper.has_value()); - - ASSERT_TRUE(Range::parse("-1").has_value()); - EXPECT_EQ(Range::parse("-1").value().lower, 0); - EXPECT_EQ(Range::parse("-1").value().upper.value(), 1); - - ASSERT_TRUE(Range::parse("2-2").has_value()); - EXPECT_EQ(Range::parse("2-2").value().lower, 2); - EXPECT_EQ(Range::parse("2-2").value().upper.value(), 2); - - EXPECT_FALSE(Range::parse("2-1").has_value()); - EXPECT_FALSE(Range::parse("1--2").has_value()); - EXPECT_FALSE(Range::parse("-").has_value()); - EXPECT_FALSE(Range::parse("abc").has_value()); -} - -TEST(OutputArtifactsTests, RangeToString) { - EXPECT_EQ(Range().to_string(), "0-"); - EXPECT_EQ(Range(0).to_string(), "0"); - EXPECT_EQ(Range(1).to_string(), "1"); - EXPECT_EQ(Range(0, 2).to_string(), "0-2"); - EXPECT_EQ(Range(1, 2).to_string(), "1-2"); - EXPECT_EQ(Range(2, 2).to_string(), "2"); - EXPECT_EQ(Range::new_lower(0).to_string(), "0-"); - EXPECT_EQ(Range::new_lower(1).to_string(), "1-"); - EXPECT_EQ(Range::new_upper(0).to_string(), "0"); - EXPECT_EQ(Range::new_upper(1).to_string(), "0-1"); -} - -TEST(OutputArtifactsTests, RangeConcretize) { - Range r1; - ASSERT_TRUE(r1.concrete_range(1).has_value()); - EXPECT_EQ(r1.concrete_range(1).value().first, 0); - EXPECT_EQ(r1.concrete_range(1).value().second, 1); - - ASSERT_TRUE(r1.concrete_range(0).has_value()); - EXPECT_EQ(r1.concrete_range(0).value().first, 0); - EXPECT_EQ(r1.concrete_range(0).value().second, 0); - - EXPECT_FALSE(r1.concrete_range(-1).has_value()); - - Range r2 = Range::new_upper(1); - ASSERT_TRUE(r2.concrete_range(2).has_value()); - EXPECT_EQ(r2.concrete_range(2).value().first, 0); - EXPECT_EQ(r2.concrete_range(2).value().second, 1); - - ASSERT_TRUE(r2.concrete_range(1).has_value()); - EXPECT_EQ(r2.concrete_range(1).value().first, 0); - EXPECT_EQ(r2.concrete_range(1).value().second, 1); - - EXPECT_FALSE(r2.concrete_range(-1).has_value()); - - Range r3 = Range::new_lower(1); - ASSERT_TRUE(r3.concrete_range(1).has_value()); - EXPECT_EQ(r3.concrete_range(1).value().first, 1); - EXPECT_EQ(r3.concrete_range(1).value().second, 1); - - EXPECT_FALSE(r3.concrete_range(0).has_value()); -} diff --git a/zkevm-framework/tests/libs/output_artifacts/test_ranges.cpp b/zkevm-framework/tests/libs/output_artifacts/test_ranges.cpp deleted file mode 100644 index fcb3250cf3..0000000000 --- a/zkevm-framework/tests/libs/output_artifacts/test_ranges.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "output_artifacts.hpp" - -TEST(OutputArtifactsTests, RangesParse) { - auto r = Ranges::parse("-1,3-5,8-"); - ASSERT_TRUE(r.has_value()); - ASSERT_EQ(r.value().size(), 3); - EXPECT_EQ(r.value()[0].to_string(), "0-1"); - EXPECT_EQ(r.value()[1].to_string(), "3-5"); - EXPECT_EQ(r.value()[2].to_string(), "8-"); - - auto r1 = Ranges::parse("-1,,x"); - EXPECT_FALSE(r1.has_value()); -} - -TEST(OutputArtifactsTests, RangesToString) { - auto r = Ranges::parse("-1,3-5,8-"); - ASSERT_TRUE(r.has_value()); - EXPECT_EQ(r.value().to_string(), "0-1,3-5,8-"); - - Ranges r1 = {}; - EXPECT_EQ(r1.to_string(), ""); -}